Jump to content

A few more items from Echon


Recommended Posts

Who knew Echon actually played BG2?

 

We have run into some bugs in our current BG2 game but Baldurdash is not installed so I am not sure if they are already covered by it.

But I suppose it will do no harm to mention them even though you may already be aware of them.

Yes, please. :undecided:

When existing the Underdark, some of the elves turn hostile when you help them kill the drow. We made sure we had no hurt them in any way.

When the githyanki come to claim the silver blade in Athkatla, we got stuck in the dialogue when we wanted to fight them. Giving them the blade was the only option to continue the game.

These are the only two that spring to mind right now.

OK, I'll repost in he workroom.

I think I remember seing both before, but I'd have to check the bug list, It's looooong.

And wow, I can't type.

*Very* long?

It's very long, but it also ranges from the really easy (flail x has incorrect weight) to the difficult (Jaheira romance = BROEK).

Ah.

Well, here is another very minor bug. The Spear of Withering +4 which should have a speed factor of 2, and also has a speed factor of 2, states in the description that it is 6.

Excellent. Thanks.

Link to comment
<Echon> When existing the Underdark, some of the elves turn hostile when you help them kill the drow. We made sure we had no hurt them in any way.
This is 100% the fault of the GP* scripts. I think some use GPARCHER, and maybe GPSHOUT. These scripts were modified for ToB; consequently, they shouldn't ever be used for a creature that isn't supposed to just Enemy(). Also note that the elves here set the GoodElfKill-type variable to 1; if I read the scripts right, this means you can kill the surface elves with impunity (since they only ever check the the same variable is 0 before setting it to 2 and summoning the Arkanis Gath elf).

 

<Echon> When the githyanki come to claim the silver blade in Athkatla, we got stuck in the dialogue when we wanted to fight them. Giving them the blade was the only option to continue the game.
The dialogue to check here will be KRUIN (or whatever is assigned to KRUIN.CRE).
Link to comment
When existing the Underdark, some of the elves turn hostile when you help them kill the drow. We made sure we had no hurt them in any way.
This is 100% the fault of the GP* scripts. I think some use GPARCHER, and maybe GPSHOUT. These scripts were modified for ToB; consequently, they shouldn't ever be used for a creature that isn't supposed to just Enemy(). Also note that the elves here set the GoodElfKill-type variable to 1; if I read the scripts right, this means you can kill the surface elves with impunity (since they only ever check the the same variable is 0 before setting it to 2 and summoning the Arkanis Gath elf).

Yeah, they have GPSHOUT assigned to their cre files. This works fine outside where the only shout they hear is from another elf, but inside they're reacting to shouts from the drow. UDELF0[1-5] have GPSHOUT and WTASIGHT scripts assigned in their cre files, and then ar2401.are assigns them WAITPC and UDELF0[1-3] in addition. I propose moving the WAITPC assignment to override the GPSHOUT in the cre file for the ar2401 creatures. And you're correct, UDELF0[1-3] set the variable to 1, preventing the Elven god from appearing. This'll be fixed as well.

 

When the githyanki come to claim the silver blade in Athkatla, we got stuck in the dialogue when we wanted to fight them. Giving them the blade was the only option to continue the game.
The dialogue to check here will be KRUIN (or whatever is assigned to KRUIN.CRE).

For the life of me, I can't see anything in Kruin that would cause a loop, in either patched SoA or ToB.

Link to comment

Fixed as follows:

 

// Killing war elves while escaping Underdark let's you kill the surface elves
COPY_EXISTING ~udelf01.bcs~ ~override~
             ~udelf02.bcs~ ~override~
             ~udelf03.bcs~ ~override~
 DECOMPILE_BCS_TO_BAF
 REPLACE_TEXTUALLY ~SetGlobal("GoodElfKill","GLOBAL",1)~ ~SetGlobal("GoodElfKill","GLOBAL",2)~
 COMPILE_BAF_TO_BCS
 BUT_ONLY_IF_IT_CHANGES
 
// war elves in ar2401 go hostile with drow shouts
COPY_EXISTING ~ar2401.are~ ~override~
 READ_LONG  0x54 "actor_off"
 READ_SHORT 0x58 "actor_num"
 WHILE ("%actor_num%" > 0) BEGIN
   SET "actor_num" = ("%actor_num%" - 1)
   READ_ASCII ("%actor_off%" + 0x80 + ("%actor_num%" * 0x110)) "cre_file" (6)
   PATCH_IF ("%cre_file%" STRING_COMPARE_CASE "udelf0" = 0) BEGIN
     WRITE_ASCII ("%actor_off%" + 0x58 + ("%actor_num%" * 0x110)) ~waitpc~ #8
   END
 END
 BUT_ONLY_IF_IT_CHANGES

 

Included in alpha 5.

Link to comment

Make sure you also kill the GPARCHER on one of the elves. It will respond to shouts in the same fashion as GPSHOUT, and also has this gem:

IF
 !Allegiance(Myself,255)
THEN
 RESPONSE #100
   NoAction()
END

(i.e., this particular elf won't do anything at all).

Link to comment
// war elves in ar2401 go hostile with drow shouts
COPY_EXISTING ~ar2401.are~ ~override~
 READ_LONG  0x54 "actor_off"
 READ_SHORT 0x58 "actor_num"
 WHILE ("%actor_num%" > 0) BEGIN
   SET "actor_num" = ("%actor_num%" - 1)
   READ_ASCII ("%actor_off%" + 0x80 + ("%actor_num%" * 0x110)) "cre_file" (6)
   PATCH_IF ("%cre_file%" STRING_COMPARE_CASE "udelf0" = 0) BEGIN
     WRITE_ASCII ("%actor_off%" + 0x58 + ("%actor_num%" * 0x110)) ~waitpc~ #8
   END
 END
 BUT_ONLY_IF_IT_CHANGES

As discovered last year, the field order is OVERRIDE, GENERAL, CLASS, RACE, DEFAULT, SPECIFIC. Meaning this is setting the general script, *not* overriding gpshout in the elves' class script slot.

 

-> WRITE_ASCIIT ("%actor_off%" + 0x60 + ("%actor_num%" * 0x110)) ~waitpc~

 

Note that this means also that UDELF02s' GPARCHER *isn't* being overridden by default (we're actually unintentionally overriding it; score one for the good guys!). The patch will need to be changed to read the whole resref; I recommend WRITE_ASCIIT ("%actor_off%" + 0x58 + ("%actor_num%" * 0x110)) ~wtarsgt~.

Link to comment

// war elves in ar2401 go hostile with drow shouts
COPY_EXISTING ~ar2401.are~ ~override~
 READ_LONG  0x54 "actor_off"
 READ_SHORT 0x58 "actor_num"
 WHILE ("%actor_num%" > 0) BEGIN
SET "actor_num" = ("%actor_num%" - 1)
READ_ASCII ("%actor_off%" + 0x80 + ("%actor_num%" * 0x110)) "cre_file"
PATCH_IF ("%cre_file%" STRING_COMPARE_REGEXP "udelf0[0-9]" = 0) BEGIN
  WRITE_ASCII ("%actor_off%" + 0x60 + ("%actor_num%" * 0x110)) ~waitpc~ #8
  PATCH_IF ("%cre_file%" STRING_COMPARE_CASE "udelf02" = 0) BEGIN
	WRITE_ASCII ("%actor_off%" + 0x58 + ("%actor_num%" * 0x110)) ~wtarsgt~ #8
  END
END
 END
 BUT_ONLY_IF_IT_CHANGES

 

n'est pas?

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...