Skip to content

([BG1] Bugs) Ragefast, Abela and Ramazith

BalquoBalquo Member, Developer Posts: 2,746
edited November 2012 in Fixed
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:
// Rmoves looping dialogue when you first encounter him.
<<<<<<<< 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~
As always - remember those annoying br \
Post edited by Tanthalas on
«1

Comments

  • AndreaColomboAndreaColombo Member Posts: 5,533
    Balquo said:


    • 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.

    String #26809 appears to already have that title in the document I'm editing. I've changed "Ramazith" to "Ragefast" in the aforementioned sentence, so you can remove the relevant code from the fix.
    Balquo said:


    • 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.

    Actually, this has been fixed in the dialog a while ago by @Dave, if memory serves.
  • BalquoBalquo Member, Developer Posts: 2,746
    @AndreaColombo Nice one! I removed the code relating the the journal.

    I'll wait to hear what Dave says on the lock/cloak issue before removing the relevant code.
  • DaveDave Member Posts: 200
    I haven't double-checked, but wasn't the lock of hair to be used in making the cloak? I was reading about this issue a few weeks ago and thought that was the ultimate answer.
  • DaveDave Member Posts: 200
    And yes, I fixed the name reference in the dialogue recently.
  • BalquoBalquo Member, Developer Posts: 2,746
    edited August 2012
    @Dave
    Two dialogue entries stating different rewards but both gave the lock of hair.
    I am not without fault, but 'tis my nature to breed obsession in people. A hazard of just being who and what I am. As for my impromptu saviors, my gratitude is boundless! Please, take a lock of hair to remember me by. I doubt I shall seek the company of man for some time. Goodbye.
    (StrRef: 2686)
    and
    My gratitude is boundless! Please, take this cloak made from my hair to remember me by. I doubt I shall seek the company of man for some time. Goodbye.
    (StrRef: 2691)
  • DaveDave Member Posts: 200
    Aha! I see the issue now and will correct 2686.
  • AndreaColomboAndreaColombo Member Posts: 5,533
    I'm quite sure what she gives you is really a lock of hair, though. In Baldur's Gate, it can be given to a mage who runs a store, who can use it to make the nymph cloak for you.
  • BalquoBalquo Member, Developer Posts: 2,746
    @Dave The fixes above will reward the player with a cloak. But if you want to change the text then fair enough.

    @AndreaColombo Yes, she gives you the lock of hair and can be made into a cloak from some store.
  • AndreaColomboAndreaColombo Member Posts: 5,533
    So how are we dealing with this, in the end? Is she going to reward you with a cloak, thus barring the lock of hair completely? Or shall she reward you with a lock of hair, thus calling for a text update to fix the word "cloak" in her dialog?
  • DaveDave Member Posts: 200
    Cloak both times.
  • BalquoBalquo Member, Developer Posts: 2,746
    @Dave
    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.
  • DaveDave Member Posts: 200
    Okay, that's what I originally thought. Between illness and inconsistent caffeine intake, I regret my earlier choice. I'll change the text back and depend on @KeithS to change string 2691.
  • BalquoBalquo Member, Developer Posts: 2,746
    Ok, then I'll leave the code intact as that fixes the cloak reward problem.
  • KeithSKeithS Member Posts: 623
    Okie. I'll adjust Abela state 7 to give the player the cloak instead of the lock of hair.
  • BalquoBalquo Member, Developer Posts: 2,746
    @KeithS
    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 ;)
  • KeithSKeithS Member Posts: 623
    I was just going to use GiveItemCreate to cover my bases :P
  • KeithSKeithS Member Posts: 623
    Just to double check @Balquo is the rest of this script good to go? BTW - I've fixed changed Door0137 to Dor0137 for you.
  • BalquoBalquo Member, Developer Posts: 2,746
    @KeithS Aye, good to go.

    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 ;)
  • KeithSKeithS Member Posts: 623
    Yup, no worries
  • BalquoBalquo Member, Developer Posts: 2,746
    edited August 2012
    @KeithS

    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
  • KeithSKeithS Member Posts: 623
    D'oh!
  • KeithSKeithS Member Posts: 623
    Done
  • Avenger_teambgAvenger_teambg Member, Developer Posts: 5,862
    KeithS said:

    Yup, no worries

    So this was a 'famous last words'.
  • KeithSKeithS Member Posts: 623
    More or less :P
  • lansounetlansounet Member Posts: 1,182
    edited September 2012
    @Balquo
    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)"
  • BalquoBalquo Member, Developer Posts: 2,746
    edited September 2012
    @SethDavis - Yeah, I've quit with pre and only use code now. Maybe you shouldn't merge all the overrides until we know they are bug free ;) Or is that a big process?

    @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:
    IF Global("HelpRamazith","GLOBAL",0)
    Dead("Abela")

    IF Global("HelpRamazith","GLOBAL",0)
    Global("AbelaNotExists","GLOBAL",1)

    IF Global("HelpRamazith","GLOBAL",0)
    Dead("Abela")

    IF Global("HelpRamazith","GLOBAL",0)
    Global("AbelaNotExists","GLOBAL",1)
    It will only pick the middle two as it matches exactly.
    Post edited by Balquo on
  • BalquoBalquo Member, Developer Posts: 2,746
    edited September 2012
    Confirmed fixed!!

    EDIT: Anyone wanting to test this, just CLUA to ar0200 and talk to Ramazith. Play through the quest as normal.
    Post edited by Balquo on
  • Avenger_teambgAvenger_teambg Member, Developer Posts: 5,862
    edited September 2012
    Why does Abela give me a nymph cloak instead of a lock of hair?
    Well, actually, she says cloak, so it is fine.


    Confirmed fixed.
  • BalquoBalquo Member, Developer Posts: 2,746
    edited September 2012
    Ok so from the top.

    * 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.
  • TanthalasTanthalas Member Posts: 6,738
    Balquo said:


    * 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.

    Alternatively:

    Ramazith: Wait there in the corner.
    Abela: But your tower is circular...
    Ramazith: ...
    Ramazith: Shut up.

Sign In or Register to comment.