([BG1] Bugs) Ragefast, Abela and Ramazith
Ok, more fixes/tweaks. This time Ragefast, Abela and Ramazith.
Ramazith:
• Fixed his dialogue from looping when you first encounter him.
• Fixed his journal entry #26809. It should state “Ragefast awaits us at his home” instead of Ramazith. Also added title: “The captive nymph” to match all other journal entries. @AndreaColombo You can fix this already if you like. Let me know if you do and I'll remove it from the code.
• No longer possible to exploit him by killing or pickpocketing. Quite a major change. He will remain the same creature throughout the quest. No longer being created separately via a script.
• He will now open his door if you accept his quest. He will also close it behind him. (I love my NPCs opening doors)
• Gave him bracers so he can reward the player once the quest is complete. He was always supposed to but the item was never there.
• Ramazith will leave forever if you kill or free Abela before accepting his quest.
Ragefast:
• Prevent Ramazith related dialogue if Ramazith is dead.
• His final dialogue was dependent on Ramazith’s quest being started. This shouldn’t be the case as you may encounter Ragefast without having talked to Ramazith.
Abela:
• Once handed over to Ramazith I changed her spawn location to be closer to Ramazith. I found her dialogue would sometimes not start if she went out of view from the player.
• She will now accompany Ramazith when he goes to the top of the tower.
• Once Ramazith is dead and you then threaten Abela – she will teleport out rather than just disappearing.
• One of the rewards was supposed to be a cloak (based on her dialogue) but she gave you the lock of hair instead – this has been corrected.
@Sethdavis If you work on this then can you rename trigger: door0137 (in ar0200) to dor0137 so it can be opened by Ramazith. I have the code below, thanks to @CamDawg, but it is not changing the name for whatever reason. The code looks solid. Maybe you can even look?
Also delete “ar0137.bcs” and “ar0138.bcs” outright, as they are no longer needed as I used “EscapeAreaMove” to move Ramazith instead of him being created via the scripts. I have no code for this. Just do it manually or write something up to remove it you prefer.
This fixes http://forum.baldursgate.com/discussion/comment/54804 and http://forum.baldursgate.com/discussion/3712/
You can close them if this gets implemented.
CODE:
Ramazith:
• Fixed his dialogue from looping when you first encounter him.
• Fixed his journal entry #26809. It should state “Ragefast awaits us at his home” instead of Ramazith. Also added title: “The captive nymph” to match all other journal entries. @AndreaColombo You can fix this already if you like. Let me know if you do and I'll remove it from the code.
• No longer possible to exploit him by killing or pickpocketing. Quite a major change. He will remain the same creature throughout the quest. No longer being created separately via a script.
• He will now open his door if you accept his quest. He will also close it behind him. (I love my NPCs opening doors)
• Gave him bracers so he can reward the player once the quest is complete. He was always supposed to but the item was never there.
• Ramazith will leave forever if you kill or free Abela before accepting his quest.
Ragefast:
• Prevent Ramazith related dialogue if Ramazith is dead.
• His final dialogue was dependent on Ramazith’s quest being started. This shouldn’t be the case as you may encounter Ragefast without having talked to Ramazith.
Abela:
• Once handed over to Ramazith I changed her spawn location to be closer to Ramazith. I found her dialogue would sometimes not start if she went out of view from the player.
• She will now accompany Ramazith when he goes to the top of the tower.
• Once Ramazith is dead and you then threaten Abela – she will teleport out rather than just disappearing.
• One of the rewards was supposed to be a cloak (based on her dialogue) but she gave you the lock of hair instead – this has been corrected.
@Sethdavis If you work on this then can you rename trigger: door0137 (in ar0200) to dor0137 so it can be opened by Ramazith. I have the code below, thanks to @CamDawg, but it is not changing the name for whatever reason. The code looks solid. Maybe you can even look?
Also delete “ar0137.bcs” and “ar0138.bcs” outright, as they are no longer needed as I used “EscapeAreaMove” to move Ramazith instead of him being created via the scripts. I have no code for this. Just do it manually or write something up to remove it you prefer.
This fixes http://forum.baldursgate.com/discussion/comment/54804 and http://forum.baldursgate.com/discussion/3712/
You can close them if this gets implemented.
CODE:
// Rmoves looping dialogue when you first encounter him.As always - remember those annoying br \
<<<<<<<< ramazi.d
ADD_TRANS_TRIGGER ramazi 7 ~False()~ DO 2
ADD_TRANS_TRIGGER ramazi 8 ~False()~ DO 0
>>>>>>>>
COMPILE ~ramazi.d~
//Fixes stealing/killing exploit.
COPY_EXISTING ~ramazi.DLG~ ~override~
DECOMPILE_DLG_TO_D
REPLACE_TEXTUALLY EXACT_MATCH ~SetGlobal("HelpRamazith","GLOBAL",1)
SetGlobal("RamazithMove","GLOBAL",1)
EscapeArea()~ ~DialogInterrupt(FALSE)
SetGlobal("HelpRamazith","GLOBAL",1)
SetGlobal("RamazithMove","GLOBAL",1)
MoveToPoint([3579.1462])
Unlock("DOOR0137")
OpenDoor("DOOR0137")
DialogInterrupt(TRUE)
SetGlobal("CloseDoor0137","GLOBAL",1)
EscapeAreaMove("AR0137",328,234,0)~
REPLACE_TEXTUALLY EXACT_MATCH ~ForceSpell(LastTalkedToBy,WIZARD_LIGHTNING_BOLT)
SetGlobal("RamazithMove","GLOBAL",2)
EscapeArea()~ ~Enemy()
ForceSpell(LastTalkedToBy,WIZARD_LIGHTNING_BOLT)
EscapeAreaMove("AR0138",169,147,15)~
COMPILE_D_TO_DLG
<<<<<<<< Door0137.baf
IF
Global("CloseDoor0137","GLOBAL",1)
THEN
RESPONSE #100
CloseDoor("DOOR0137")
SetGlobal("CloseDoor0137","GLOBAL",2)
END
>>>>>>>>
COMPILE ~Door0137.baf~
// Changes door name so it can be opened by Ramazith and also adds a script to the door so it can be closed once Ramazith enters. Putting "CloseDoor("DOOR0137")" in his dialogue didn't want to work.
COPY_EXISTING ~ar0200.are~ ~override~
READ_LONG 0xa4 "door_num"
READ_LONG 0xa8 "door_off"
FOR (index = 0 ; index < door_num ; index = index + 1) BEGIN
READ_ASCII ("%door_off%" + 0x20 + ("%index%" * 0xc8)) "doorname"
PATCH_IF ("%doorname%" STRING_COMPARE_CASE "Door0137" = 0) BEGIN
WRITE_ASCII ("%door_off%" + 0x80 + ("%index%" * 0xc8)) "Door0137"
END
END
READ_SHORT 0x5a "travel_num"
READ_LONG 0x5c "travel_off"
FOR (index = 0 ; index < travel_num ; index = index + 1) BEGIN
READ_ASCII ("%travel_off%" + 0xc4 + ("%index%" * 0xc8)) "triggername"
PATCH_IF ("%triggername%" STRING_COMPARE_CASE "Door0137" = 0) BEGIN
WRITE_ASCII ("%travel_off%" + ("%index%" * 0xc8)) "Dor0137"
END
END
BUT_ONLY_IF_IT_CHANGES
COPY_EXISTING ~ramazi.cre~ ~override~
ADD_CRE_ITEM ~BRAC02~ #0 #0 #0 ~unstealable~ ~gloves~
BUT_ONLY_IF_IT_CHANGES
COPY_EXISTING ~abela.cre~ ~override~
REPLACE_CRE_ITEM ~MISC51~ #0 #0 #0 ~unstealable~ ~qitem1~
ADD_CRE_ITEM ~CLCK07~ #40 #0 #0 ~unstealable~ ~cloak~
BUT_ONLY_IF_IT_CHANGES
// Add !Dead("Ramazith") so their Ramazith related dialogue doesn't show up if you have killed him.
COPY_EXISTING ~abela.DLG~ ~override~
~ragefa.DLG~ ~override~
DECOMPILE_DLG_TO_D
REPLACE_TEXTUALLY EXACT_MATCH ~GlobalGT("HelpRamazith","GLOBAL",0)~ ~True()~
REPLACE_TEXTUALLY EXACT_MATCH ~Global("HelpRamazith","GLOBAL",1)~ ~Global("HelpRamazith","GLOBAL",1)
!Dead("Ramazith")~
REPLACE_TEXTUALLY EXACT_MATCH ~ForceSpell(Myself,DRYAD_TELEPORT)~ ~SetGlobal("AbelaNotExists","GLOBAL",1)
ForceSpell(Myself,DRYAD_TELEPORT)~
REPLACE_TEXTUALLY EXACT_MATCH ~EscapeArea()~ ~DialogueInterrupt(FALSE) ForceSpell(Myself,DRYAD_TELEPORT)~
COMPILE_D_TO_DLG
<<<<<<<< ramazi.d
ADD_TRANS_ACTION ~ramazi~ BEGIN 17 19 END BEGIN END ~ActionOverride("Abela",EscapeAreaMove("AR0138",366,162,2)) SetGlobal("RamazithMove","GLOBAL",3)~
REPLACE_TRIGGER_TEXT ramazi ~True()~ ~GlobalGT("HelpRamazith","GLOBAL",0)~
REPLACE_ACTION_TEXT ramazi ~,\[260.170\],0)~ ~,[376.228],2)~
>>>>>>>>
COMPILE ~ramazi.d~
<<<<<<<< abela.d
ADD_TRANS_ACTION ~abela~ BEGIN 7 END BEGIN END ~GiveItem("CLCK07",LastTalkedToBy)~
>>>>>>>>
COMPILE ~abela.d~
COPY_EXISTING ~abela.DLG~ ~override~
DECOMPILE_DLG_TO_D
REPLACE_TEXTUALLY EXACT_MATCH ~GiveItem("CLCK07",LastTalkedToBy)
GiveItem("MISC51",LastTalkedToBy)~ ~GiveItem("CLCK07",LastTalkedToBy)~
COMPILE_D_TO_DLG
<<<<<<<< AbelaNotExists.baf
IF
Global("HelpRamazith","GLOBAL",0)
Dead("Abela")
THEN
RESPONSE #100
EscapeArea()
END
IF
Global("HelpRamazith","GLOBAL",0)
Global("AbelaNotExists","GLOBAL",1)
THEN
RESPONSE #100
EscapeArea()
END
>>>>>>>>
EXTEND_BOTTOM ~ramazith.bcs~ ~AbelaNotExists.baf~
Post edited by Tanthalas on
1
Comments
I'll wait to hear what Dave says on the lock/cloak issue before removing the relevant code.
Two dialogue entries stating different rewards but both gave the lock of hair. and
@AndreaColombo Yes, she gives you the lock of hair and can be made into a cloak from some store.
The lock can be made into a cloak at the Sorcerer Sundries. So you could leave the text as is and just make the fix to reward the cloak for StrRef: 2691.
You will also need to give her the cloak as well otherwise just changing the state will reward nothing.
If you are going to do this then I'll remove that fix from the code above. Or you could just it instead
You can also delete "ar0137.bcs” and “ar0138.bcs" They are obsolete now. Did you change the door or the trigger? Make sure it is the trigger you renamed to dor0137 - otherwise we will have a lot of fun
Saw you put this in the latest build but there are some problems. Mostly relating to the door :P You renamed the door instead of the trigger haha - but no fear - The code below will fix it all. You won't need to do anything manually. The removal of ar0137.bcs and ar0138.bcs is also done now via the code.
<<<<<<<< ramazi.d ADD_TRANS_TRIGGER ramazi 7 ~False()~ DO 2 REPLACE_ACTION_TEXT ramazi ~,\[260.170\],0)~ ~,[376.228],2)~ REPLACE_ACTION_TEXT ramazi ~SetGlobal("HelpRamazith","GLOBAL",1)~ ~SetGlobal("HelpRamazith","GLOBAL",1) SetGlobal("RamazithMove","GLOBAL",1)~ ADD_TRANS_ACTION ~ramazi~ BEGIN 13 END BEGIN END ~SetGlobal("RagefastDead","GLOBAL",1)~ >>>>>>>> COMPILE ~ramazi.d~ <<<<<<<< abela.d REPLACE_ACTION_TEXT abela ~DialogueInterrupt(FALSE)~ ~~ ADD_TRANS_ACTION ~abela~ BEGIN 4 7 12 13 END BEGIN END ~DialogInterrupt(FALSE)~ ADD_STATE_TRIGGER ~abela~ 5 ~Global("RagefastDead","GLOBAL",0)~ >>>>>>>> COMPILE ~abela.d~ //fixes door COPY_EXISTING ~ar0200.are~ ~override~ REPLACE_TEXTUALLY door0137 dor0137 (8) READ_LONG 0xa4 "door_num" READ_LONG 0xa8 "door_off" FOR (index = 0 ; index < door_num ; index = index + 1) BEGIN READ_ASCII ("%door_off%" + 0x20 + ("%index%" * 0xc8)) "doorname" PATCH_IF ("%doorname%" STRING_COMPARE_CASE "Dor0137" = 0) BEGIN WRITE_ASCII ("%door_off%" + ("%index%" * 0xc8)) "Door0137" //name WRITE_ASCII ("%door_off%" + 0x20 + ("%index%" * 0xc8)) "Door0137" //ID WRITE_ASCII ("%door_off%" + 0x80 + ("%index%" * 0xc8)) "Door0137" //script END END BUT_ONLY_IF_IT_CHANGES //removes scripts. COPY_EXISTING ~ar0200.bcs~ ~override~ DECOMPILE_BCS_TO_BAF REPLACE_TEXTUALLY EXACT_MATCH ~IF Global("HelpRamazith","GLOBAL",1) Global("RamazithMove","GLOBAL",0) !Exists("Ramazith") !Dead("Ramazith") THEN RESPONSE #100 SetGlobal("RamazithMove","GLOBAL",1) END~ ~~ COMPILE_BAF_TO_BCS BUT_ONLY_IF_IT_CHANGES COPY_EXISTING ~ar0137.are~ ~override~ ~ar0138.are~ ~override~ WRITE_ASCII 0x094 ~~ (8) BUT_ONLY_IF_IT_CHANGES
Huh won't the last "// Remove duplicates" for Ramazith.bcs delete all 4 blocks instead of just the 2 duplicates? Also in Abela.dlg you removed all the "DialogueInterrupt(FALSE)"
@lansounet Do you mean the recent code? I'm removing "DialogueInterrupt(FALSE)" because it is there twice. If you meant the old code then yes, I remove them all then added them straight back. Not really sure why I did that - laziness I think. The ramazith script will only remove the middle blocks. It goes like this: It will only pick the middle two as it matches exactly.
EDIT: Anyone wanting to test this, just CLUA to ar0200 and talk to Ramazith. Play through the quest as normal.
Well, actually, she says cloak, so it is fine.
Confirmed fixed.
* Bracers have been fixed (will post code later)
* Area scripts need to be removed by the devs. I don't know how to remove things outright.
* Cloak has been fixed (will post code later)
* Ramazith initiate script we can solve in the initiate dialogue bug thread
* Ragefast initiate script we can solve in the initiate dialogue bug thread
* Abela's end dialogue multiple times can not be fixed further. At least not from me. Probably as good as it going to get. But it is pretty good.
* Ramazith telling Abela to wait in a corner in his circular building. :P I think a cut scene would be too much for some dialogue but I think maybe changing the dialogue from "Wait in this corner please." to "Wait there please" would work.
* I should probably make her disappear completely instead of moving. But that will require a script... I'll see what I can do.
Ramazith: Wait there in the corner.
Abela: But your tower is circular...
Ramazith: ...
Ramazith: Shut up.