Jump to content

Question to loop fix in AR0700.bcs


jastey

Recommended Posts

I see this in the v10 tp2:

// Waukeen's Promenade script loop fix (Nythrun)
COPY_EXISTING ar0700.bcs override
  DECOMPILE_BCS_TO_BAF 
    REPLACE_TEXTUALLY
    ~^\(  GlobalTimerExpired("Bystander","GLOBAL")\)~
    ~\1 OR(2) InMyArea("bystand1") InMyArea("bystand2")~
  COMPILE_BAF_TO_BCS
  BUT_ONLY

I am confused: I thought 'InMyArea()' wouldn't work / make sense in an area script?

Link to comment

Roxanne: May I aks why you delete the content of your post completely? Did you post something you now think would be wrong and you don't bother letting us in to your (second) thoughts or is there another reason I am not aware of?

It was an error, I did not check the headline that this topic is for BG2 not BG2EE/EET, sorry.

 

I checked my ToB save (from EET) and saw the bystanders are removed at some time. I would use InActiveArea in an area script, but I think this is because of different intention, i.e. expecting things to happen as soon as possible, while removing bystanders is not a time critical thing.

Link to comment

InActiveArea() would also work, as the Player1 has to be in AR0700, too (no way for NPCs to enter the area without the protagonist, although I am not sure what yould happen if player1 is inside a building). I am still confused about the use of InMyArea() in an area script, though.

Link to comment

InActiveArea() would also work, as the Player1 has to be in AR0700, too (no way for NPCs to enter the area without the protagonist, although I am not sure what yould happen if player1 is inside a building). I am still confused about the use of InMyArea() in an area script, though.

Sorry, InActiveArea() does not work here - it causes a CtD. It only works if the creature that is referenced is made a Global.

 

This one works in the given case:

 

0x400D Exists(O:Object*)

Returns true only if the specified object exists in the current area (note that dead creatures can still be counted as existing).

 

IF

GlobalTimerExpired("Bystander","GLOBAL")

OR(2)

Exists("bystand1")

InMyArea("bystand2")

THEN

RESPONSE #100

ActionOverride("bystand1",EscapeArea())

ActionOverride("bystand2",EscapeArea())

END

Link to comment

Yes, Exists() is what I would expect here. Hopefully someone who feels responsible for the Fixpack takes a look at this and changes it / maybe even still knows how it came to be (because I really think InMyArea() doesn't work here).

 

With InActiveArea() I have no experience. Is it in some way better than Exists()?

Link to comment
Yes, Exists() is what I would expect here. Hopefully someone who feels responsible for the Fixpack takes a look at this and changes it / maybe even still knows how it came to be (because I really think InMyArea() doesn't work here).

 

It is how it is coded in BG2EE and it works there - so probably copied from there into fixpack.

 

 

With InActiveArea() I have no experience. Is it in some way better than Exists()?

It only works for creatures that are made Global (and a CtD is hard punishment for using it wrong). However, if used correctly it e.g. spawns a missing NPC with Global instantaneously, like e.g. a companion type creature

 

IF
Global("HaiassJumpOn","GLOBAL",1)
!InActiveArea("haiass")
!See("haiass")
!Dead("haiass")
THEN
RESPONSE #100
MoveGlobalObject("haiass",Protagonist)
END

 

Link to comment

Archived

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

×
×
  • Create New...