Author Topic: Offering new component for UB  (Read 43643 times)

Offline Salk

  • Planewalker
  • *****
  • Posts: 873
Re: Offering new component for UB
« Reply #25 on: February 20, 2012, 06:59:28 AM »
About reputation loss: Simding0 made the distinction between virtue and reputation in his own mod and it was a very good idea.

But we can not do that here. I think reputation covers also those actions that are morally significant, even if there are no witnesses. Proof is that a good aligned character killing an innocent is punished with reputation loss no matter whether or not there are witnesses to it, not even other party members. This is because the whole alignment system is not really built on how people judge you but on what moral tenets your character follows.

So reputation in vanilla has a dual meaning (internal and external) which Simding0 rightly separated in his own mod. But in the vanilla reputation system I think it is correct to believe that it should raise or lower according to how people judge you but also if your character follows or goes against his alignment.

What do other people think?
« Last Edit: February 20, 2012, 09:01:28 AM by Salk »

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #26 on: February 20, 2012, 07:32:48 AM »
The code from Ascension64 I mentioned earlier is for the BGII engine. Is there a way to enable/ change the lock difficulty in game for a container in BG1?  :'(

Salk: Yes, I guess we have to agree that our definition in this regard differs. So, other opinions would be welcome, most plainab's, of course.


Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #27 on: February 20, 2012, 08:10:09 AM »
as far s the LG thing...
I don't think ALL quests should be geared to a specific alignment.  There are many quests that an LG can do that to be honest they shouldn't do.
Alignments should be considered an ideology, something they aspire to use as a guide. But allowing Human (and other Faerun races) nature mistakes can happen, one can falter in one's guidelines, sometimes a path taken forces choices that must be made that go against their beliefs.  It's called choosing the 'lesser of two evils' 
If you really want to add an LG version to the quest then I recommend it be part of a "all quests LG friendly" tweak rather than slipping it into here...   You can always write it to determine if this is present or not.

as far as the rep thing...
Salk explained it well.  You can't award/detract .5 rep points.  I was thinking about the fact that maybe the player would only open one container due to lock difficulty and so should get rep loss at each instance of opening containers.  Since player can turn in the gems individually, checking for both at once is not a viable option.  And since OR() does not work in BG/BG:ToTSC cannot include additional checks to see if player turned one in.  Only other option i can think of is a 'trap script' that assigns a global variable when each one is taken out.  when said variable has incremented properly then the master area script can do a single rep loss of 1 for both.

I suppose it also may be better to have individual journal entries for each container.  the first with less lock difficulty could say something about the gem not having been securely fastened due to Prism's haste and practically fell out.  no rep loss for that one since it 'fell out' and taking it to Oublek is the right thing to do.  the harder lock difficulty one could say something about how the player after lots of hard work finally yanked that sucker free, since that was purposeful damage then the rep loss occurs... 

as far as dialog text itself....
I wrote out a rough text to get the ideas across.  I'm not a good writer.  If there is something better to convey the meaning.  I'm ok with adjustments maintaining the spirit of the text.

as far as the container & items being created in it...
never knew of that problem.  my test party was too weak to take on Greywolf when i first tried it.  I got sidetracked by other things and have since adjusted and readjusted the fixpack thus requiring a brand new start.  If you can find something that works....

BUT
all that aside I took an idea and cobbled together stuff to get something sensible that would provide some additional ways of getting the gems (i.e. pickpocketing), to provide a way to turn in one gem at a time and get half reward, to do what Prism says and have the gems actually be in the eyes if you let him finish.  If there is a way that it can be improved upon and made better, so be it.  Just note that I can not in good faith resolve any issues affected by additional changes.


My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #28 on: February 20, 2012, 08:46:35 AM »
I agree that RPG is about choosing the 'lesser of two evils' but I am not very happy if the reduced choice option are due to missing reply options. I think one additional reply option for LG wouldn't be out of place for this component, since the whole component is about tweaking the Prism encounter. It fits into BG1UB since the quest seems "unfinished" concerning Prisms saying that he put the gems into the statue which he doesn't. Everything else is tweaking (making the gems unique, letting Prism react to stealing, adding rep loss for taking them out) or fixing (making Oublek recognizing the gems separately thus disabling one possibility to get the reward two times.)

But I am babbling. You already more or less agreed to the possibility to add more dialogue. I will happily take this on, and hope that you will still like the outcome.

I am still very unhappy about the rep loss, though. Totally messes with my understanding of the rep system in BG(1).  :-[

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #29 on: February 20, 2012, 08:58:22 AM »
as far as the rep loss  A64 originally intended a rep loss of 3 since guarding Prism and letting him finish gives a rep increase of 1
I dropped that to 2. 1 rep loss per container.
as I suggested it could be reduced to 1 rep loss with one container having the lock difficulty reduced from 30 to say 10 or even 0 with a match journal entry to say that it fell out and so you'll return it for a reward.  but the 2 gem has to be worked at to get out and so a rep loss should incur.

cause if you get rep for letting him finish and then you take it out, you should get that rep taken away at the very least  AND other than party members no one is present to see you help prism other than him and he kills himself so he can't tell anyone about what the player did.


now corrected codes since i missed the container enabling disabling stuff
only providing affected files
tph code
Code: [Select]
//ISSUES-OublekEmeraldBountyExploitTWEAK.tph
PRINT ~Processing ISSUES-OublekEmeraldBountyExploitTWEAK.tph~
SILENT
// ----------------------------------------------------------------------------
//BEGIN @7 //~Optional: Oublek & Prism - No Exploit & Multiple Ways to Solve Quest~
//first container
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 30
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00100001
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
//        fj_trap_active to whether the container is trapped (0=no, 1=yes);
//        fj_trap_status to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 564
        fj_box_top = 2552
        fj_box_right = 590
        fj_box_bottom = 2563
        fj_vertex_0 = (564 + (2559 << 16))
        fj_vertex_1 = (578 + (2552 << 16))
        fj_vertex_2 = (590 + (2556 << 16))
        fj_vertex_3 = (586 + (2561 << 16))
        fj_vertex_4 = (580 + (2563 << 16))
        fj_vertex_5 = (570 + (2562 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueRightEye~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END
//second container
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 70
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00100001
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
//        fj_trap_active to whether the container is trapped (0=no, 1=yes);
//        fj_trap_status to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 614
        fj_box_top = 2541
        fj_box_right = 638
        fj_box_bottom = 2555
        fj_vertex_0 = (638 + (2544 << 16))
        fj_vertex_1 = (635 + (2550 << 16))
        fj_vertex_2 = (627 + (2554 << 16))
        fj_vertex_3 = (614 + (2555 << 16))
        fj_vertex_4 = (626 + (2543 << 16))
        fj_vertex_5 = (635 + (2541 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueLeftEye~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END
//add the items to the new disabled containers
//item 1 right eye (of statue -- i.e. left on screen)
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_con_itm_idx = 0
        fj_charge0 = 1
STR_VAR fj_name = ~abgfEyeR~
END
BUT_ONLY
//item 2 left eye (of statue -- i.e. right on screen)
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_con_itm_idx = 1
        fj_charge0 = 1
STR_VAR fj_name = ~abgfEyeL~
END
BUT_ONLY

//create left eye emerald
COPY_EXISTING ~misc43.itm~ ~override/abgfEyeL.itm~
 SAY UNIDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'L'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the left eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
 SAY IDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'L'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the left eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
BUT_ONLY_IF_IT_CHANGES
//create right eye emerald
COPY_EXISTING ~misc43.itm~ ~override/abgfEyeR.itm~
 SAY UNIDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'R'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the right eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
 SAY IDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'R'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the right eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
BUT_ONLY_IF_IT_CHANGES
//change the emeralds that prism carries
COPY_EXISTING ~prism.cre~ ~override~
 REMOVE_CRE_ITEM ~%item0001%~
 REPLACE_CRE_ITEM ~abgfEyeL~ #1 #0 #0 ~identified~ ~qitem1~
 REPLACE_CRE_ITEM ~abgfEyeR~ #1 #0 #0 ~identified~ ~qitem2~
BUT_ONLY_IF_IT_CHANGES
//compile the dialog changes to oublek and prism
COMPILE ~bgfixpack/files/oublek/oublek.d~ EVALUATE_BUFFER
//check existance of area script and add rep penalty for taking gems from statue
COPY_EXISTING ~ar5400.are~ ~override~
 READ_ASCII 0x94 ~script~
 PATCH_IF (FILE_EXISTS_IN_GAME ~%script%~) BEGIN
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar5400.baf~ //add our stuff -- creates new if doesn't exist
  END
 END ELSE BEGIN
  WRITE_EVALUATED_ASCII 0x94 ~%SOURCE_RES%~
  READ_ASCII 0x94 ~script~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar5400.baf~ //add our stuff -- creates new if doesn't exist
  END
 END
BUT_ONLY_IF_IT_CHANGES
//check existance of area script and add global sets to complete quest
COPY_EXISTING ~ar4800.are~ ~override~
 READ_ASCII 0x94 ~script~
 PATCH_IF (FILE_EXISTS_IN_GAME ~%script%~) BEGIN
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar4800.baf~ //add our stuff -- creates new if doesn't exist
  END
 END ELSE BEGIN
  WRITE_EVALUATED_ASCII 0x94 ~%SOURCE_RES%~
  READ_ASCII 0x94 ~script~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar4800.baf~ //add our stuff -- creates new if doesn't exist
  END
 END
BUT_ONLY_IF_IT_CHANGES
.d code
Code: [Select]
//OublekBounty1 is for brage
//OublekBounty2 is for prism
//the oublekbounty globals will prevent any exploits by dropping a second item and trying to get the full reward again
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty1","GLOBAL",0)~ DO 0 UNLESS ~Global("OublekBounty1","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty2","GLOBAL",0)~ DO 1 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty1","GLOBAL",0)
Global("OublekBounty2","GLOBAL",0)~ DO 4 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 10 ~Global("OublekBounty1","GLOBAL",0)~ DO 1 5 UNLESS ~Global("OublekBounty1","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 10 ~Global("OublekBounty2","GLOBAL",0)~ DO 9 5 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
//changing from one item to two ensures that players can not take advantage of dropping one item and trying to get the full reward twice
REPLACE_TRANS_TRIGGER oublek BEGIN 9 END BEGIN 1 END ~PartyHasItem("MISC43")~ ~PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 9 END BEGIN 4 END ~!PartyHasItem("MISC43")~ ~!PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 10 END BEGIN 9 END ~PartyHasItem("MISC43")~ ~PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 10 END BEGIN 5 END ~!PartyHasItem("MISC43")~ ~!PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")~
REPLACE_TRANS_ACTION oublek BEGIN 14 END BEGIN 0 END ~TakePartyItem("MISC43")~ ~TakePartyItem("abgfEyeL")
TakePartyItem("abgfEyeR")~
//adding new states that give half the reward when only one item gets turned in
APPEND oublek
IF ~~ THEN BEGIN abLeftEye
  SAY ~One of the Emeralds! That will be a 150 gold bounty for you.  Be sure to bring the other if you should find it.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100)
GivePartyGold(150)
TakePartyItem("abgfEyeL")
SetGlobal("abgf_LeftEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abRightEye
  SAY ~One of the Emeralds! That will be a 150 gold bounty for you.  Be sure to bring the other if you should find it.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100)
GivePartyGold(150)
TakePartyItem("abgfEyeR")
SetGlobal("abgf_RightEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abLeftEyeLast
  SAY ~The last of the Emeralds! That will be another 150 gold bounty for you. Well, you'll make quite a name for yourself among the bounty hunters if you keep this up.  Whether it is for better or worse, I do not know.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100)
GivePartyGold(150)
TakePartyItem("abgfEyeL")
SetGlobal("abgf_LeftEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abRightEyeLast
  SAY ~The last of the Emeralds! That will be another 150 gold bounty for you. Well, you'll make quite a name for yourself among the bounty hunters if you keep this up.  Whether it is for better or worse, I do not know.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100)
GivePartyGold(150)
TakePartyItem("abgfEyeR")
SetGlobal("abgf_RightEyeBounty","GLOBAL",1) ~ EXIT
END

END //end the append

//adding additional transitions that allow the player to turn in only one of the two required items for good boy
EXTEND_BOTTOM oublek 9
IF ~PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")
Global("abgf_LeftEyeBounty","GLOBAL",0)
Global("abgf_RightEyeBounty","GLOBAL",0)~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abLeftEye
IF ~!PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")
Global("abgf_LeftEyeBounty","GLOBAL",0)
Global("abgf_RightEyeBounty","GLOBAL",0)~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abRightEye
IF ~PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")
Global("abgf_RightEyeBounty","GLOBAL",1)~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abLeftEyeLast
IF ~!PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")
Global("abgf_LeftEyeBounty","GLOBAL",1)~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abRightEyeLast
END //end the extend bottom
//adding additional transitions that continue to keep 'bad boy' player from getting full reward. If they turn in only one gem, they get rewarded but can't turn in the other or resolve brage issue with oublek. It is an overall punishment when compared to 'good boy' rewards.
EXTEND_BOTTOM oublek 10
IF ~PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
IF ~!PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
END //end the extend bottom
//adjustments needed for prism to work with the rest of the component
ADD_STATE_TRIGGER prism 0 ~HasItem("abgfEyeL",Myself)
HasItem("abgfEyeR",Myself)~
REPLACE_TRANS_ACTION ~PRISM~ BEGIN 7 END BEGIN 0 END ~DropInventory()~
~ContainerEnable("A6StatueRightEye",TRUE)
ContainerEnable("A6StatueLeftEye",TRUE)
DestroyItem("abgfEyeL")
DestroyItem("abgfEyeR")
SetGlobal("abgf_GemInEyeL","GLOBAL",1)
SetGlobal("abgf_GemInEyeR","GLOBAL",1)~ //1 means they are in the container and penalties for taking them out of 'statue' apply
REPLACE_TRANS_ACTION prism BEGIN 9 END BEGIN 0 END ~GiveItem("MISC43","GREYWOLF")~
~GiveItem("abgfEyeL","GREYWOLF")
GiveItem("abgfEyeR","GREYWOLF")
SetGlobal("abgf_GemInEyeL","GLOBAL",2)
SetGlobal("abgf_GemInEyeR","GLOBAL",2)~ //anything not one means that either the gems were not in container when obtained OR the penalty was applied
//only way to get items if player allowed greywolf to attack prism is to attack greywolf before prism is dead and hopefully kill him before he runs away.
APPEND prism
IF ~NumTimesTalkedTo(0)
!HasItem("abgfEyeL",Myself)
!HasItem("abgfEyeR",Myself)
PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")
Global("ab_GemStoleResolve","GLOBAL",0)~ THEN BEGIN abBothStole
 SAY ~My Emeralds! You! You took them! I must have them back. I need them to finish this epiphany. Please, please return them. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~~ THEN BEGIN abRelent
  SAY #678
  IF ~~ THEN DO ~TakePartyItem("abgfEyeL")
TakePartyItem("abgfEyeR")
CreateCreature("GREYWO",[1267.2579],0)
ClearAllActions()
StartCutSceneMode()
StartCutScene("Prismcut")~ EXIT
END
IF ~NumTimesTalkedTo(0)
HasItem("abgfEyeL",Myself)
!HasItem("abgfEyeR",Myself)
PartyHasItem("abgfEyeR")
Global("ab_GemStoleResolve","GLOBAL",0)~ THEN BEGIN abRightStole
 SAY ~My Emerald! You! You took it! I must have it back. I need it to finish this epiphany. Please, please return it. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~NumTimesTalkedTo(0)
!HasItem("abgfEyeL",Myself)
HasItem("abgfEyeR",Myself)
PartyHasItem("abgfEyeL")
Global("ab_GemStoleResolve","GLOBAL",0)~ THEN BEGIN abLeftStole
 SAY ~My Emerald! You! You took it! I must have it back. I need it to finish this epiphany. Please, please return it. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~NumTimesTalkedTo(0)
!HasItem("abgfEyeL",Myself)
!HasItem("abgfEyeR",Myself)
!PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")
Global("ab_GemStoleResolve","GLOBAL",0)~ THEN BEGIN abBothStoleButGone
 SAY ~My Emeralds! You! You took them! I must have them back. I need them to finish this epiphany. Please, please return them. I will give you all else that is mine.~
  IF ~Global("OublekBounty2","GLOBAL",1)~ THEN REPLY ~They are gone. Given to the authorities. You will never finish that lump of stone now.~ DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 8
  IF ~Global("OublekBounty2","GLOBAL",0)~ THEN REPLY ~They are gone. Sold by now to hang on the neck as some fat woman's trinket.~ DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 8
END
END//end the append
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline Salk

  • Planewalker
  • *****
  • Posts: 873
Re: Offering new component for UB
« Reply #30 on: February 20, 2012, 09:20:11 AM »
jastey,

please do not feel bad about your perception of the reputation concept. You are very right when you say that the party's reputation should increase or decrease according to how they publicly acted. But if it was only so, then what would be the meaning of having an alignment?

In our present case, plainab tells me (I didn't remember) that the party gains reputation for letting Prism finish his job. I don't think this is right either! The party should gain reputation when they deliver the gems back to Oublek instead! Letting Prism finish is not necessarily a good-hearted choice because it could be kindness but also convenience (the player thinks that after he's done, it's easier to take the emeralds, for example). My suggestion is that the party takes a loss of 1 point (not 2 and not certainly 3) as soon as one emerald is taken from the statue (it shouldn't matter if they take 1 or 2, it is the action that counts). Of course only if the protagonist is good aligned because otherwise there should be no reputation loss at all (neutral and evil aligned should not get any reputation loss).

This example is actually very good to show how reputation should work: it increases because of an act of renown (the delivery of the gems). And it decreases because of a disloyalty to one's (good) principles.

When it comes instead to tweaking the dialogue, I am still against it. You speak of a new, needed option for LG character. But what about CN characters then? CN are usually... unstable in their minds. If we follow your path, we should add one new line to every dialogue covering choices only to make them suit a CN character. And what about TN ones? A TN might even think that the right place for those emeralds is back into a mine (neither to be left there and not to be returned to Oublek). So in short, as plainab rightly stated, it is impossible to cover all the angles through dialogue. Most of the time, it is a matter of a compromise.

But you are the one in charge of BG1 UB now (and thanks a lot for that!) so the final decision rests on you.  ;)
« Last Edit: February 20, 2012, 09:35:08 AM by Salk »

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #31 on: February 20, 2012, 01:26:22 PM »
Thank you for the discussion!
The party gains +1 rep indeed if letting Prism finish. I didn't remember this! You are right about the reputation changes. It will decrease then if removing the gem(s).

Salk: What I had in mind as additional reply option to Prism would have been something along the lines of "These emeralds are stolen and you need to return them", probably making Prism hostile as all other attempts to get the gems does. Nothing spectacular, just for the feel of choice even if there is none. You are right, of course, that there also could be a line saying "I couldn't care less about what you are doing here" and "how about I just kill you" etcpp. The line would be easily added, though. Any lines to Oublek concerning the emeralds in the statue are more work, as there would have to be script blocks destroying them etc. Maybe I don't add any lines at all.

plainab: ContainerEnable doesn't work in BG1, unfortunately. At least it gives an install error saying that it is not included in the action.IDS. I lay my hopes on "unlock()" then. Making the lock difficulty 100% at the beginning should lead to an unpickable lock?
Thank you for the code, I will try to use it with "unlock()" instead of enable.

Hurricane

  • Guest
Re: Offering new component for UB
« Reply #32 on: February 20, 2012, 03:35:48 PM »
This is all quite interesting. I never thought of such a "completion" of the Prism/Oublek encounter, but after reading this thread I'm sure it will make for a very neat new component.

I have nothing to add to the discussion about reputation, as I realize that your views about the whole concept are way more elaborate than mine. :P With respect to the additional reply, regardless of whether it will merely be another option for LG characters, I think both sides make a compelling case about it (I know, what a laaame position ;D). Indeed, adding one LG option to the dialogue won't make much of a difference and almost seems at odds with the rest of the game. Therefore I understand the concern that such an option could be considered spurious, given the absence of fitting reply options for the other alignments. Ultimately though, I am slighly in favor of the LG reply option, because in the end it doesn't do any harm but adds at least a little bit of depth. If the quest is being tweaked now, then why not have the option for a more fitting choice of words thrown in as well? And quite honestly, I believe it would work because I know that jastey has the right sensibility to pull it off. I've seen her additional reply options for the Scar component - they make the talk feel more natural and they add merit to the dialogue, even without a full set of options for every alignment. I am confident that letting jastey do the same with the Prism encounter will be for the better.

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #33 on: February 21, 2012, 04:16:04 AM »
Thanks for the words of confidence, Hurricane!

The component titel sais "(...)& Multiple Ways to Solve Quest", so I think adding any reply options I had in mind is not out of range. I am definitely considering adding the possibility to tell Oublek where the gems are, instead of removing and bringing them. I have to see how much work that makes, though.

plainab: I copied the code you provided last and it gives me an error message: ERROR: cannot convert fj_structure_type or %fj_structure_type% to an integer

I assume it's the part where the emeralds are added to the newly created containers via tp2. Since I have no clue about tp2 coding, I put all code in there (not the baf and d, of course). Could you or someone else tell me what I am doing wrong?
« Last Edit: February 21, 2012, 04:18:53 AM by jastey »

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #34 on: February 21, 2012, 05:38:35 AM »
Status of the item in container issue: Using unlock(), I can unlock (duh!) the eyes in BG1. Having a lock difficulty of 100% before, they cannot be emptied before Prism finishes his masterpiece. The default "this lock needs special bla" playes if clicked on, though. Disadvantages:
-After that, the containers are open and any lock difficulty is gone.
-If the player lets Prism not finish, the eyes remain two non-openable containers, possibly misleading players to look for some kind of key or something.

Could the lock difficulty be altered via script, maybe?

Still, that is, so far, all I can offer for BG1: At least the emeralds would be in the eyes of the statue.
That is, if the tp2 code for putting them in is debugged. :)

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #35 on: February 21, 2012, 12:53:18 PM »
-.-

weidu readme instructions for the function don't explain EVERYTHING
for each thing you add, you have to tell it what type of thing you are adding BUT unlike all the structure offsets it doesn't list what you are supposed to use...

after some trial and error got something that installs without error.

tho i think weidu should give an error when it compiles a dialog or script in BG/BG:ToTSC that has BG2 only code in it...

@Jastey  add the following in the STR_VAR section of the two copy blocks where the item(s) are added
Code: [Select]
        fj_structure_type = ~itm~
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #36 on: February 21, 2012, 02:10:57 PM »
Yes, now the item placement works. Thank you! I had to change the "fj_con_itm_idx" to "1" for the left eye and "2" for the right eye, btw. (I tested with adjusted names for the emeralds, so I am sure the "L" was in the left eye of the statue, from the statue PoV, and the "R" in the right one, too).

Quote
tho i think weidu should give an error when it compiles a dialog or script in BG/BG:ToTSC that has BG2 only code in it...
The ContainerEnable gave an error message upon install, at least for me. Could you install the code above on vanilla BG1 (TotSC) without an error message?

EDIT: The containers are enabled and "clickable" from the start, although the tp2 code reads:

Code: [Select]
fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00100001
which should disable them. I think the diabling of containers really doesn't work in BG1..
« Last Edit: February 21, 2012, 02:35:48 PM by jastey »

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #37 on: February 21, 2012, 03:32:51 PM »
The disabling / enabling of the containers work like a charm in Tutu.  :)


plainab: I don't understand one thing in the dialogue changes:

Quote
//adding additional transitions that continue to keep 'bad boy' player from getting full reward. If they turn in only one gem, they get rewarded but can't turn in the other or resolve brage issue with oublek. It is an overall punishment when compared to 'good boy' rewards.
EXTEND_BOTTOM %tutu_var%oublek 10
IF ~PartyHasItem("abgfEyeL")
!PartyHasItem("abgfEyeR")~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
IF ~!PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")~ THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
END //end the extend bottom

In the quoted code, a PC that lied about his identity gets the reward of state 14 (500 XP, 150 gold) for every emerald he returns separately.

A "good" PC that reveals his true identity gets 2x 100 XP and 2x 150 gold. Meaning, the lying PC can still get the reward double (I thought you wanted to prevent this) for taking the emeralds one by one to Oublek, and he gets 5 times more XP?  :o

Or I don't understand this correctly.

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #38 on: February 21, 2012, 06:04:28 PM »
Quote
The ContainerEnable gave an error message upon install, at least for me. Could you install the code above on vanilla BG1 (TotSC) without an error message?
I got no error on a BG1 ToTSC install (actually Original Saga) with or without MODDER

Quote
EDIT: The containers are enabled and "clickable" from the start, although the tp2 code reads:

Code: [Select]
fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00100001
which should disable them. I think the diabling of containers really doesn't work in BG1..
Quote
The disabling / enabling of the containers work like a charm in Tutu.
so... the disable bit is BG2 specific then.  makes sense since the ContainerEnable action is BG2 specific as well.

I'm trying something with Deactive() and Activate() actions.  will let you know the results

Quote
I had to change the "fj_con_itm_idx" to "1" for the left eye and "2" for the right eye, btw.
again, lack of documentation in the readme info of Weidu.  Weidu itself typically counts indexes starting at 0 so that's why i used 0 and 1.

Quote
(I tested with adjusted names for the emeralds, so I am sure the "L" was in the left eye of the statue, from the statue PoV, and the "R" in the right one, too).
O.o  they were already in statue point of view....  why change them?

Quote
Or I don't understand this correctly.
you are correct, you don't understand correctly :P

It is confusing at first glance, BUT in the original file those who claim to be greywolf get these actions performed:
Code: [Select]
AddexperienceParty(500)
GivePartyGold(150)
TakePartyItem("MISC65")
TakePartyItem("abgfEyeL")
TakePartyItem("abgfEyeR")
SetGlobal("OublekBounty1","GLOBAL",1)
SetGlobal("OublekBounty2","GLOBAL",1)
Note the global variables.  these are checked to be 0 at the states where the player wants to turn in the reward.  SO a greywolf claimer can only turn in ONCE any and all rewards.  Best they save all the Prism and Brage stuff and turn it in all together else they'll miss out and be punished further....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline jastey

  • Global Moderator
  • Planewalker
  • *****
  • Posts: 1524
  • Gender: Female
Re: Offering new component for UB
« Reply #39 on: February 22, 2012, 03:48:36 AM »
Quote
(I tested with adjusted names for the emeralds, so I am sure the "L" was in the left eye of the statue, from the statue PoV, and the "R" in the right one, too).
O.o  they were already in statue point of view....  why change them?
As I wrote: For testing purposes only. I wanted to be sure the correct emeralds are assigned. Name is changed back now. ;)

Quote
Or I don't understand this correctly.
you are correct, you don't understand correctly :P

It is confusing at first glance, BUT in the original file those who claim to be greywolf get these actions performed:
Code: [Select]
AddexperienceParty(500)
GivePartyGold(150)
TakePartyItem("MISC65")
TakePartyItem("abgfEyeL")
TakePartyItem("abgfEyeR")
SetGlobal("OublekBounty1","GLOBAL",1)
SetGlobal("OublekBounty2","GLOBAL",1)
Note the global variables.  these are checked to be 0 at the states where the player wants to turn in the reward.  SO a greywolf claimer can only turn in ONCE any and all rewards.  Best they save all the Prism and Brage stuff and turn it in all together else they'll miss out and be punished further....
No, the dialogue for the other bounties does not get disabled by this: No check variable in the reply trigger. The OublekBountyX variables only prevent the inquiring after open bounties. They are not used for the reply options leading to the bounty. I tested it: After going the "lying to Oublek" path, I could hand in the two emeralds one after the other. And as far as I recall there is no trigger variable preventing the asking for Brage's body bounty, either.

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #40 on: February 22, 2012, 02:26:29 PM »
Code: [Select]
No, the dialogue for the other bounties does not get disabled by this: No check variable in the reply trigger. The OublekBountyX variables only prevent the inquiring after open bounties. They are not used for the reply options leading to the bounty. I tested it: After going the "lying to Oublek" path, I could hand in the two emeralds one after the other. And as far as I recall there is no trigger variable preventing the asking for Brage's body bounty, either. my bad, the variable is there for turning in both at once
Code: [Select]
  IF ~  Global("OublekBounty2","GLOBAL",0)
PartyHasItem("abgfEyeL")
PartyHasItem("abgfEyeR")
Global("BroughtBounty","GLOBAL",1)
~ THEN REPLY #19717 /* ~I've come to turn in a bounty, and collect the reward that is duly mine.~ */ GOTO 14
but not for individually...

as a side note it is there for brage too
Code: [Select]
  IF ~  Global("OublekBounty1","GLOBAL",0)
PartyHasItem("MISC65")
Global("BroughtBounty","GLOBAL",1)
~ THEN REPLY #4649 /* ~I've come to turn in a bounty, and collect the reward that is duly mine.~ */ GOTO 14

so to fix this find in the .d file where I EXTEND_BOTTOM to oublek's state 10
add in the Global("OublekBounty2","GLOBAL",0) check to the two added states.

also found a better way to add the items to the containers since the previous code would allow for possible screwups if the # of containers was modified.

so replace both the container creation & the item addition segments with this:
Code: [Select]
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 30
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00000001
//        fj_flags = 0b00100001
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
//        fj_trap_active to whether the container is trapped (0=no, 1=yes);
//        fj_trap_status to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 564
        fj_box_top = 2552
        fj_box_right = 590
        fj_box_bottom = 2563
        fj_vertex_0 = (564 + (2559 << 16))
        fj_vertex_1 = (578 + (2552 << 16))
        fj_vertex_2 = (590 + (2556 << 16))
        fj_vertex_3 = (586 + (2561 << 16))
        fj_vertex_4 = (580 + (2563 << 16))
        fj_vertex_5 = (570 + (2562 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueRightEye~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END
 LAUNCH_PATCH_FUNCTION ~fj_are_structure~
    INT_VAR fj_charge0 = 1
            fj_con_itm_idx    = SHORT_AT 0x74 - 1
    STR_VAR fj_name = ~abgfEyeR~
            fj_structure_type = ~itm~
 END
BUT_ONLY
//second container
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 70
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00000001
//        fj_flags = 0b00100001
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
//        fj_trap_active to whether the container is trapped (0=no, 1=yes);
//        fj_trap_status to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 614
        fj_box_top = 2541
        fj_box_right = 638
        fj_box_bottom = 2555
        fj_vertex_0 = (638 + (2544 << 16))
        fj_vertex_1 = (635 + (2550 << 16))
        fj_vertex_2 = (627 + (2554 << 16))
        fj_vertex_3 = (614 + (2555 << 16))
        fj_vertex_4 = (626 + (2543 << 16))
        fj_vertex_5 = (635 + (2541 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueLeftEye~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END
 LAUNCH_PATCH_FUNCTION ~fj_are_structure~
    INT_VAR fj_charge0 = 1
            fj_con_itm_idx    = SHORT_AT 0x74 - 1
    STR_VAR fj_name = ~abgfEyeL~
            fj_structure_type = ~itm~
 END
BUT_ONLY

this should make it workable for TuTu & BGT versions   LOL  BG still doesn't work.  Activate & Deactivate actions don't seem to work for containers....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline Miloch

  • Barbarian
  • Planewalker
  • *****
  • Posts: 1032
  • Gender: Male
Re: Offering new component for UB
« Reply #41 on: February 22, 2012, 02:54:02 PM »
Coding for BG1 really sucks - I can't even find anything that will display an animation like an explosion, short of putting it in an actual area file. In BG2 we have CreateVisualEffect() as an action and opcode #215 Play 3D Effect. Nor can one seem to activate/deactivate trigger regions or containers, as you say.

Can you use TriggerActivation() in conjuction with a trap script around the containers to prevent the character from reaching them until the proper time? Failing that, Unlock() combined with an unpickable lock should be a grudgingly acceptable workaround for BG1, no?

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #42 on: February 22, 2012, 03:04:40 PM »
at least the nice thing about BG is that the containers don't highlight with TAB key, player has to put their mouse over them.  For at least the first run, they won't know to look there  LOL

Only solution I could think of for BG is to make Prism initiate the conversation.  Since the access point to the containers is where Prism is standing, the player would get interrupted by Prism talking. He could have a limiting range say only initiate if the player is within 10.  that's close enough for an npc who is talking aloud to themselves to realize someone is approaching
 ...  thoughts?

his initial dialog
Quote
Ahh, beauteous creature!  Never should I have stolen these emeralds, but there was nothing else that would capture the majesty of thine yes!  I did what must be done, for I have left my shop, forgotten all my commissions, and spent all that I had.  I must complete thee!  Wait, there is someone here!  Who are you?  'Twas that relentless Greywolf who sent you, wasn't it?


Quote
Can you use TriggerActivation() in conjuction with a trap script around the containers to prevent the character from reaching them until the proper time? Failing that, Unlock() combined with an unpickable lock should be a grudgingly acceptable workaround for BG1, no?
not tried TriggerActivation etc... yet   Now that I've got a save from just before entering the area I'm trying all sorts of combinations of stuff :P    the unpickable lock thing, if it has to be that way, but  then there is no effort required (i.e. getting a thief with high enough skill) to get them out of the statue.
But see above for my thoughts on making Prism initiate dialog as a solution.
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #43 on: February 22, 2012, 05:43:32 PM »
a range of 1 on Prism initiating dialog allows the player to arrange their party to protect Prism if they plan to protect him from Greywolf.
he does initiate dialog properly should any PC character approach his spot (which they must if trying to open the container)
player can click on Prism and he will talk as normal
Only drawback so far is when picking his pocket even tho the player pulled out quick, Prism will follow after... tho Prism will use the proper lines at that point too
Solved that by using variables and interrupting and clearing Prism's actions and making him move back to point IF he had moved.


Also, in BG/ToTSC scripted reputation loss does not work.  I think the reputation action works only in dialog.
so maybe the rep gain for allowing him to finish should be removed.  thus there is no worry about rep loss or gain  :P
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #44 on: February 22, 2012, 07:08:19 PM »
Alright Jastey

I've something that I'm happy with for BG  plus I found a few other things that needed corrected etc.  Here are the BG files.  You may wish to use this as the base for the Tutu/BGT versions instead.  Since BG2 variants can handle the ContainerEnable you don't need the talk initiation stuff for Prism on those versions but you do need some of the other corrections etc...

tph/tp2 code
Code: [Select]
//ISSUES-OublekEmeraldBountyExploitTWEAK.tph
PRINT ~Processing ISSUES-OublekEmeraldBountyExploitTWEAK.tph~
SILENT
// ----------------------------------------------------------------------------
//BEGIN @7 //~Optional: Oublek & Prism - No Exploit & Multiple Ways to Solve Quest~
//first container
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 30
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00000001
//        fj_flags = 0b00100001  //for tutu & bgt (i hope)
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
        fj_trap_active = 1 //to whether the container is trapped (0=no, 1=yes);
        fj_trap_status = 0 // to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 564
        fj_box_top = 2552
        fj_box_right = 590
        fj_box_bottom = 2563
        fj_vertex_0 = (564 + (2559 << 16))
        fj_vertex_1 = (578 + (2552 << 16))
        fj_vertex_2 = (590 + (2556 << 16))
        fj_vertex_3 = (586 + (2561 << 16))
        fj_vertex_4 = (580 + (2563 << 16))
        fj_vertex_5 = (570 + (2562 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueRightEye~
        fj_trap_script = ~abitrp~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END

 LAUNCH_PATCH_FUNCTION ~fj_are_structure~
    INT_VAR fj_charge0 = 1
            fj_con_itm_idx    = SHORT_AT 0x74 - 1
    STR_VAR fj_name = ~abgfEyeR~
            fj_structure_type = ~itm~
 END

BUT_ONLY
//second container
COPY_EXISTING ~ar5400.are~ override
LAUNCH_PATCH_FUNCTION ~fj_are_structure~
INT_VAR fj_loc_x = 641
        fj_loc_y = 2713
        fj_type = 6
        fj_lock_diff = 70
//        fj_flags to the bitwise container flags (bit0=locked, bit3=trap resets, bit5=disabled);
        fj_flags = 0b00000001
//        fj_flags = 0b00100001  //for tutu & bgt (i hope)
        fj_trap_detect = 100
        fj_trap_remove_diff = 100
        fj_trap_active = 1 //to whether the container is trapped (0=no, 1=yes);
        fj_trap_status = 0 // to whether the trap is detected (0=no, 1=yes);
        fj_trap_loc_x = 641
        fj_trap_loc_y = 2713
        fj_box_left = 614
        fj_box_top = 2541
        fj_box_right = 638
        fj_box_bottom = 2555
        fj_vertex_0 = (638 + (2544 << 16))
        fj_vertex_1 = (635 + (2550 << 16))
        fj_vertex_2 = (627 + (2554 << 16))
        fj_vertex_3 = (614 + (2555 << 16))
        fj_vertex_4 = (626 + (2543 << 16))
        fj_vertex_5 = (635 + (2541 << 16))
//        fj_lockpick_strref to the lockpick string reference (default -1);
STR_VAR fj_structure_type = ~container~
        fj_name = ~A6StatueLeftEye~
        fj_trap_script = ~abitrp~
//        fj_trap_script to the trap’s script;
//        fj_key_resref to the filename of the container’s key;
END

 LAUNCH_PATCH_FUNCTION ~fj_are_structure~
    INT_VAR fj_charge0 = 1
            fj_con_itm_idx    = SHORT_AT 0x74 - 1
    STR_VAR fj_name = ~abgfEyeL~
            fj_structure_type = ~itm~
 END

BUT_ONLY

//create left eye emerald
COPY_EXISTING ~misc43.itm~ ~override/abgfEyeL.itm~
 SAY UNIDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'L'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the left eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
 SAY IDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'L'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the left eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
BUT_ONLY_IF_IT_CHANGES
//create right eye emerald
COPY_EXISTING ~misc43.itm~ ~override/abgfEyeR.itm~
 SAY UNIDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'R'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the right eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
 SAY IDENTIFIED_DESC ~An emerald is a brilliant green beryl, cleaved along straight box like lines, with rectangular cutting in the finished gem.  Emeralds are often connected with health, and so are used ornamentally for such a purpose. This emerald is marked with a small 'R'. It had been stolen by Prism for his use in a statue of his lady love, Ellesime. It is surmised that this gem was intended to be used as the right eye. Whether or not it was used in the statue, there is a bounty for returning it to the proper authorities.~
BUT_ONLY_IF_IT_CHANGES
//change the emeralds that prism carries
COPY_EXISTING ~prism.cre~ ~override~
 REMOVE_CRE_ITEM ~misc43~
 REPLACE_CRE_ITEM ~abgfEyeL~ #1 #0 #0 ~identified~ ~qitem1~
 REPLACE_CRE_ITEM ~abgfEyeR~ #1 #0 #0 ~identified~ ~qitem2~
 READ_ASCII 0x0248 ~overridescript~
 PATCH_IF (FILE_EXISTS_IN_GAME ~%overridescript%~) BEGIN
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%overridescript%.bcs~ ~bgfixpack/files/oublek/abgfprsm.baf~ //add our stuff -- creates new if doesn't exist
  END
 END ELSE BEGIN
  WRITE_EVALUATED_ASCII 0x0248 ~abgfprsm~
  READ_ASCII 0x0248 ~overridescript~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%overridescript%.bcs~ ~bgfixpack/files/oublek/abgfprsm.baf~ //add our stuff -- creates new if doesn't exist
  END
 END

BUT_ONLY_IF_IT_CHANGES
//compile the dialog changes to oublek and prism
COMPILE ~bgfixpack/files/oublek/oublek.d~ EVALUATE_BUFFER
COMPILE ~bgfixpack/files/oublek/abitrp.baf~ EVALUATE_BUFFER
//check existance of area script and add rep penalty for taking gems from statue
/*
COPY_EXISTING ~ar5400.are~ ~override~
 READ_ASCII 0x94 ~script~
 PATCH_IF (FILE_EXISTS_IN_GAME ~%script%~) BEGIN
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar5400.baf~ //add our stuff -- creates new if doesn't exist
  END
 END ELSE BEGIN
  WRITE_EVALUATED_ASCII 0x94 ~%SOURCE_RES%~
  READ_ASCII 0x94 ~script~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar5400.baf~ //add our stuff -- creates new if doesn't exist
  END
 END
BUT_ONLY_IF_IT_CHANGES
*/
//check existance of area script and add global sets to complete quest
COPY_EXISTING ~ar4800.are~ ~override~
 READ_ASCII 0x94 ~script~
 PATCH_IF (FILE_EXISTS_IN_GAME ~%script%~) BEGIN
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar4800.baf~ //add our stuff -- creates new if doesn't exist
  END
 END ELSE BEGIN
  WRITE_EVALUATED_ASCII 0x94 ~%SOURCE_RES%~
  READ_ASCII 0x94 ~script~
  INNER_ACTION BEGIN
   EXTEND_BOTTOM ~%script%.bcs~ ~bgfixpack/files/oublek/ar4800.baf~ //add our stuff -- creates new if doesn't exist
  END
 END
BUT_ONLY_IF_IT_CHANGES
Prism's initiation script
Code: [Select]
IF
  See([PC])
  !Range(LastSeenBy,1)
  Global("abgf_PrismTalk","LOCALS",1)
THEN
  RESPONSE #100
    ClearActions(Myself)
    MoveToPoint([641.2713])
    SetGlobal("abgf_PrismTalk","LOCALS",0)
END

IF
  See([PC])
  Range(LastSeenBy,1)
  !StateCheck(LastSeenBy,STATE_INVISIBLE)
  !StateCheck(LastSeenBy,STATE_IMPROVEDINVISIBILITY)
  NumTimesTalkedTo(0)
THEN
  RESPONSE #100
    SetGlobal("abgf_PrismTalk","LOCALS",1)
    Wait(3)
    Dialogue([PC])
END

IF
  Dead("Greywolf")
  See([PC])
  Range(LastSeenBy,1)
THEN
  RESPONSE #100
    SetGlobal("abgf_PrismTalk","LOCALS",1)
    Dialogue([PC])
END
the dialog changes (some more things were adjusted/corrected in here)
Code: [Select]
//OublekBounty1 is for brage
//OublekBounty2 is for prism
//the oublekbounty globals will prevent any exploits by dropping a second item and trying to get the full reward again
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty1","GLOBAL",0)~ DO 0 UNLESS ~Global("OublekBounty1","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty2","GLOBAL",0)~ DO 1 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 9 ~Global("OublekBounty1","GLOBAL",0) Global("OublekBounty2","GLOBAL",0)~ DO 4 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 10 ~Global("OublekBounty1","GLOBAL",0)~ DO 1 5 UNLESS ~Global("OublekBounty1","GLOBAL",0)~
ADD_TRANS_TRIGGER ~oublek~ 10 ~Global("OublekBounty2","GLOBAL",0)~ DO 9 5 UNLESS ~Global("OublekBounty2","GLOBAL",0)~
//changing from one item to two ensures that players can not take advantage of dropping one item and trying to get the full reward twice
REPLACE_TRANS_TRIGGER oublek BEGIN 9 END BEGIN 1 END ~PartyHasItem("MISC43")~ ~PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 9 END BEGIN 4 END ~!PartyHasItem("MISC43")~ ~!PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 10 END BEGIN 9 END ~PartyHasItem("MISC43")~ ~PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR")~
REPLACE_TRANS_TRIGGER oublek BEGIN 10 END BEGIN 5 END ~!PartyHasItem("MISC43")~ ~!PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR")~
REPLACE_TRANS_ACTION oublek BEGIN 14 END BEGIN 0 END ~TakePartyItem("MISC43")~ ~TakePartyItem("abgfEyeL") TakePartyItem("abgfEyeR")~
REPLACE_TRANS_ACTION oublek BEGIN 4 END BEGIN 0 END ~TakePartyItem("MISC43")~ ~~
REPLACE_TRANS_ACTION oublek BEGIN 4 END BEGIN 0 END ~GivePartyGold(300)~ ~GivePartyGold(300) TakePartyItem("abgfEyeL") TakePartyItem("abgfEyeR")~

//adding new states that give half the reward when only one item gets turned in
APPEND oublek
IF ~~ THEN BEGIN abLeftEye
  SAY ~One of the Emeralds! That will be a 150 gold bounty for you.  Be sure to bring the other if you should find it.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100) GivePartyGold(150) TakePartyItem("abgfEyeL") SetGlobal("abgf_LeftEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abRightEye
  SAY ~One of the Emeralds! That will be a 150 gold bounty for you.  Be sure to bring the other if you should find it.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100) GivePartyGold(150) TakePartyItem("abgfEyeR") SetGlobal("abgf_RightEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abLeftEyeLast
  SAY ~The last of the Emeralds! That will be another 150 gold bounty for you. Well, you'll make quite a name for yourself among the bounty hunters if you keep this up.  Whether it is for better or worse, I do not know.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100) GivePartyGold(150) TakePartyItem("abgfEyeL") SetGlobal("abgf_LeftEyeBounty","GLOBAL",1)~ EXIT
END
IF ~~ THEN BEGIN abRightEyeLast
  SAY ~The last of the Emeralds! That will be another 150 gold bounty for you. Well, you'll make quite a name for yourself among the bounty hunters if you keep this up.  Whether it is for better or worse, I do not know.~//this is custom text
  IF ~~ THEN DO ~AddexperienceParty(100) GivePartyGold(150) TakePartyItem("abgfEyeR") SetGlobal("abgf_RightEyeBounty","GLOBAL",1) ~ EXIT
END

END //end the append

//adding additional transitions that allow the player to turn in only one of the two required items for good boy
EXTEND_BOTTOM oublek 9
IF ~PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR") Global("abgf_LeftEyeBounty","GLOBAL",0) Global("abgf_RightEyeBounty","GLOBAL",0)~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abLeftEye
IF ~!PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR") Global("abgf_LeftEyeBounty","GLOBAL",0) Global("abgf_RightEyeBounty","GLOBAL",0)~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abRightEye
IF ~PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR") Global("abgf_RightEyeBounty","GLOBAL",1)~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abLeftEyeLast
IF ~!PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR") Global("abgf_LeftEyeBounty","GLOBAL",1)~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO abRightEyeLast
END //end the extend bottom

//adding additional transitions that continue to keep 'bad boy' player from getting full reward. If they turn in only one gem, they get rewarded but can't turn in the other or resolve brage issue with oublek. It is an overall punishment when compared to 'good boy' rewards.
EXTEND_BOTTOM oublek 10
IF ~Global("OublekBounty2","GLOBAL",0) PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR")~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
IF ~Global("OublekBounty2","GLOBAL",0) !PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR")~
THEN REPLY ~I've come to turn in a bounty, and collect the reward that is duly mine.~ GOTO 14
END //end the extend bottom

//adjustments needed for prism to work with the rest of the component
ADD_STATE_TRIGGER prism 0 ~HasItem("abgfEyeL",Myself) HasItem("abgfEyeR",Myself)~
//REPLACE_TRANS_ACTION ~prism~ BEGIN 7 END BEGIN 0 END ~ReputationInc(1)~ ~~
REPLACE_TRANS_ACTION prism BEGIN 7 END BEGIN 0 END ~DropInventory()~
~DestroyItem("abgfEyeL") DestroyItem("abgfEyeR") SetGlobal("abgf_GemInEye","GLOBAL",1)~
REPLACE_TRANS_ACTION prism BEGIN 9 END BEGIN 0 END ~GiveItem("MISC43","GREYWOLF")~
~GiveItem("abgfEyeL","GREYWOLF") GiveItem("abgfEyeR","GREYWOLF") SetGlobal("abgf_GemInEye","GLOBAL",3)~
//anything not one means that either the gems were not in container when obtained OR the penalty was applied
//only way to get items if player allowed greywolf to attack prism is to attack greywolf before prism is dead and hopefully kill him before he runs away.
APPEND prism
IF ~NumTimesTalkedTo(0) !HasItem("abgfEyeL",Myself) !HasItem("abgfEyeR",Myself) PartyHasItem("abgfEyeL") PartyHasItem("abgfEyeR") Global("ab_GemStoleResolve","GLOBAL",0)~
THEN BEGIN abBothStole
 SAY ~My Emeralds! You! You took them! I must have them back. I need them to finish this epiphany. Please, please return them. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~~ THEN BEGIN abRelent
  SAY #678
  IF ~~ THEN DO ~TakePartyItem("abgfEyeL") TakePartyItem("abgfEyeR") CreateCreature("GREYWO",[1267.2579],0) ClearAllActions() StartCutSceneMode() StartCutScene("Prismcut")~ EXIT
END
IF ~NumTimesTalkedTo(0) HasItem("abgfEyeL",Myself) !HasItem("abgfEyeR",Myself) PartyHasItem("abgfEyeR") Global("ab_GemStoleResolve","GLOBAL",0)~
THEN BEGIN abRightStole
 SAY ~My Emerald! You! You took it! I must have it back. I need it to finish this epiphany. Please, please return it. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~NumTimesTalkedTo(0) !HasItem("abgfEyeL",Myself) HasItem("abgfEyeR",Myself) PartyHasItem("abgfEyeL") Global("ab_GemStoleResolve","GLOBAL",0)~
THEN BEGIN abLeftStole
 SAY ~My Emerald! You! You took it! I must have it back. I need it to finish this epiphany. Please, please return it. I will give you all else that is mine.~
  IF ~~ THEN REPLY #4750 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO abRelent
  IF ~~ THEN REPLY #4751 DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 3
END
IF ~NumTimesTalkedTo(0) !HasItem("abgfEyeL",Myself) !HasItem("abgfEyeR",Myself) !PartyHasItem("abgfEyeL") !PartyHasItem("abgfEyeR") Global("ab_GemStoleResolve","GLOBAL",0)~
THEN BEGIN abBothStoleButGone
 SAY ~My Emeralds! You! You took them! I must have them back. I need them to finish this epiphany. Please, please return them. I will give you all else that is mine.~
  IF ~Global("OublekBounty2","GLOBAL",1)~ THEN REPLY ~They are gone. Given to the authorities. You will never finish that lump of stone now.~ DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 8
  IF ~Global("OublekBounty2","GLOBAL",0)~ THEN REPLY ~They are gone. Sold by now to hang on the neck as some fat woman's trinket.~ DO ~SetGlobal("ab_GemStoleResolve","GLOBAL",1)~ GOTO 8
END
END//end the append
the trap script for the two containers
Code: [Select]
IF
  Opened([ANYONE])
  Global("abgf_GemInEye","GLOBAL",1)
THEN
  RESPONSE #100
  SetGlobal("abgf_GemInEye","GLOBAL",2) //2 is only 1 gem taken from statue
  ReputationInc(-1) //only one rep point loss in total cause it reverts the rep point gain given by letting him finish the work
  AddJournalEntry(~Perhaps it was wrong, but after allowing Prism to complete his final masterpiece we've taken one of the emeralds he had stolen to use in the statue's eyes. It should bring a hefty price at the right place or a decent reward...~)
END
IF
  Opened([ANYONE])
  Global("abgf_GemInEye","GLOBAL",2)
THEN
RESPONSE #100
  SetGlobal("abgf_GemInEye","GLOBAL",3)
  AddJournalEntry(~After a bit of hard work, we finally removed the second emerald which Prism had stolen to use in one of the eyes of his 'final masterpiece'.~)
END
the script addition to ar4800
Code: [Select]
IF
Global("abgf_LeftEyeBounty","GLOBAL",1)
Global("abgf_RightEyeBounty","GLOBAL",1)
Global("OublekBounty2","GLOBAL",0)
THEN
RESPONSE #100
  SetGlobal("OublekBounty2","GLOBAL",1)
  AddJournalEntry(~Prism's story was a sad tale indeed.  A shame it could not have had a better ending.  Ah well, I profit in the end.  300 gold bounty for the emeralds he stole.~)
END

note i dropped the script from ar5400 and applied a modified version of it to the containers.  only a rep loss of 1 occurs (basically a removal of the rep increase for letting him complete the task).
You can easily provide an option for PC to tell Oublek where the emeralds are if you wish
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

jastey_guest

  • Guest
Re: Offering new component for UB
« Reply #45 on: February 23, 2012, 01:40:22 AM »
Thank you for the new version, plainab.

Only thing: I know that you want to have rep loss or at least not so much rep increase in the Prism encounter, but removing the rep increase after letting Prism finish seems like a rather arbitrary tweak. If you'd start a poll, there would be players voting for removing it just as many as for keeping to the original. Removing it is your opinion, keeping it (and changing from the original game as little as possible) would be mine. ;) There might be players who leave the emeralds in the eyes, after all.

Maybe we could use a self-initiated player1 dialogue for triggering a rep loss. I'll have a look at it tonight.

jastey_guest

  • Guest
Re: Offering new component for UB
« Reply #46 on: February 23, 2012, 02:13:36 AM »
I had a completely new idea concerning the removement of the emeralds from the eyes: Why put them in at all? It could be done completely via script. The idea of destroying the sculpture the PC just defended at risk of his own life would be much clearer, too. What I had in mind:

before Prism finishes (or if he never finishes): Upon clicking on the eyes, the text sais "The sculpture has an empty hole where the eye should be".

After letting Prism finish, clicking on an eye the text would say something like "You take a close look at one of the emeralds Prism used as an eye. You could remove it with some force, but it would destroy the sculpture you just helped Prism to finish."

Maybe this could be done as a dialogue to leave the choice to the player. Clicking on "take the emrald" would give "with some force, you remove the emeralds" and -1 rep is applied. The emerald is created in the inventory.

This would be, in my opinion, a more elegant solution than the making a container with different lock difficulty: I have to admit that when I saw it first, I didn't undertand the lock difficulty was referring to the difficulty to remove the gem.
It would solve a lot of problems in one go, too, I think.

Offline Salk

  • Planewalker
  • *****
  • Posts: 873
Re: Offering new component for UB
« Reply #47 on: February 23, 2012, 02:52:04 AM »
I like your idea, jastey!  ;)

About reputation (again), I have already tried to explain why a +1 for letting Prism finish does not make much sense. If the party does not gain reputation returning the emeralds to Oublek THEN we should introduce a +1 there instead.

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #48 on: February 23, 2012, 06:21:35 AM »
Thank you for the new version, plainab.

Only thing: I know that you want to have rep loss or at least not so much rep increase in the Prism encounter, but removing the rep increase after letting Prism finish seems like a rather arbitrary tweak. If you'd start a poll, there would be players voting for removing it just as many as for keeping to the original. Removing it is your opinion, keeping it (and changing from the original game as little as possible) would be mine. ;) There might be players who leave the emeralds in the eyes, after all.

Maybe we could use a self-initiated player1 dialogue for triggering a rep loss. I'll have a look at it tonight.
actually it was an idea, but the scripting worked after tweaking some settings regarding traps on the containers so rep loss/gain was left alone except that you only lose 1 point for taking out 1 or both gems
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

Offline plainab

  • Sasha al'Therin
  • Planewalker
  • *****
  • Posts: 491
    • Infinity Engine Modding
Re: Offering new component for UB
« Reply #49 on: February 23, 2012, 06:26:16 AM »
I had a completely new idea concerning the removement of the emeralds from the eyes: Why put them in at all? It could be done completely via script. The idea of destroying the sculpture the PC just defended at risk of his own life would be much clearer, too. What I had in mind:

before Prism finishes (or if he never finishes): Upon clicking on the eyes, the text sais "The sculpture has an empty hole where the eye should be".

After letting Prism finish, clicking on an eye the text would say something like "You take a close look at one of the emeralds Prism used as an eye. You could remove it with some force, but it would destroy the sculpture you just helped Prism to finish."

Maybe this could be done as a dialogue to leave the choice to the player. Clicking on "take the emrald" would give "with some force, you remove the emeralds" and -1 rep is applied. The emerald is created in the inventory.

This would be, in my opinion, a more elegant solution than the making a container with different lock difficulty: I have to admit that when I saw it first, I didn't undertand the lock difficulty was referring to the difficulty to remove the gem.
It would solve a lot of problems in one go, too, I think.
if you really wish to change it to that, i can't really stop you but now that there is a working BG version, why bother....  at least play the BG version and decide for yourself before making decisions on changing the whole fundamental background of the component.
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altherin.webs.com

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
What color is grass?:
What is the seventh word in this sentence?:
What is five minus two (use the full word)?: