Jump to content

The Abyssal door opens; players get pushed back


Recommended Posts

Yeah. The Abyssal door opens after sticking in the final tear. HELL_BUFFET everyone. Oops, your familiar is still sitting in its original location. There goes any possibility of achieving some sort of dramatic finale.

 

Anyway, this happens because the target specified is [3], but [3] is never framed (via See() or similar). Since there will never be more than one familiar, we can just call them all out by script name. I guess the code would be something like:

COPY_EXISTING ~Cut85A.bcs~ ~override~
 DECOMPILE_BCS_TO_BAF
 REPLACE_TEXTUALLY ~ActionOverride("hellspy4",ApplySpell([FAMILIAR],HELL_BUFFET))~ ~ActionOverride("HELLSPY4",ApplySpell("FAMPSD",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMFER",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMIMP",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMRAB",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMDUST",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMFAIR",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMCAT",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMQUAS",3658))~
 COMPILE_BAF_TO_BCS
BUT_ONLY_IF_IT_CHANGES OTHERWISE_DELETE_KEY_FILE

 

Here's my script:

IF
 True()
THEN
 RESPONSE #100
   CutSceneId("HELLSPY")
   MoveViewPoint([2009.513],0)
   SetGlobal("TEARDOOR","GLOBAL",6)
   TriggerActivation("TEARDOOR",0)
   TriggerActivation("TRAN2901",0)
   TriggerActivation("TRAN2902",0)
   TriggerActivation("TRAN2903",0)
   TriggerActivation("TRAN2904",0)
   TriggerActivation("TRAN2905",0)
   TriggerActivation("TRAN2906",0)
   ScreenShake([5.5],30)
   CreateVisualEffect("SPCALLLI",[2016.429])
   Wait(1)
   Unlock("DOOR01")
   OpenDoor("DOOR01")
   PlaySound("EFF_P35A")
   ActionOverride("HELLSPY4",ApplySpell(Player1,3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMPSD",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMFER",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMIMP",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMRAB",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMDUST",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMFAIR",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMCAT",3658))
   ActionOverride("HELLSPY4",ApplySpell("FAMQUAS",3658))
   ActionOverride("HELLSPY4",ApplySpell(Player2,3658))
   ActionOverride("HELLSPY4",ApplySpell(Player3,3658))
   ActionOverride("HELLSPY4",ApplySpell(Player4,3658))
   ActionOverride("HELLSPY4",ApplySpell(Player5,3658))
   ActionOverride("HELLSPY4",ApplySpell(Player6,3658))
   Wait(1)
   PlaySound("EFF_P13")
   Wait(1)
   PlaySound("EFF_M20")
   CreateVisualEffect("SPMETSWA",[2015.364])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[1995.408])
   CreateVisualEffect("SPMETSWA",[2045.408])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[1965.443])
   CreateVisualEffect("SPMETSWA",[2065.443])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   SmallWait(2)
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   SmallWait(2)
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   SmallWait(2)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   SmallWait(2)
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   CreateVisualEffect("CALLLIGH",[2009.513])
   PlaySound("EFF_P19")
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   CreateVisualEffect("SPPLANAR",[2009.513])
   PlaySound("EFF_M04")
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateVisualEffect("SPMETSWA",[2015.496])
   CreateVisualEffect("SPMETSWA",[1950.526])
   CreateVisualEffect("SPMETSWA",[2061.526])
   CreateVisualEffect("SPMETSWA",[2087.589])
   CreateVisualEffect("SPMETSWA",[1916.589])
   CreateVisualEffect("SPMETSWA",[2066.642])
   CreateVisualEffect("SPMETSWA",[1954.642])
   CreateVisualEffect("SPMETSWA",[2006.657])
   SmallWait(7)
   CreateCreature("HELLJON",[2009.513],0)
   StartCutScene("CUT85B")
END

This works as intended in-game.

Link to comment

Trajectory? That's the only reason I can think that they used the same "eye" to blast each person (so they'll all more or less get pushed south -- away from the door).

 

If it was an area effect, who knows which direction everyone would fly. Depending on where the objects were positioned and who you cast the spell on, it could even end up shoving some up into the door.

Link to comment

I think it's less important that summons end up in the right place than it is party members.

 

Incidentally, do you have something to draw familiars back to Irenicus after they've been blown back? (I wouldn't even bother doing this for summons.)

Link to comment

Everything is being pushed away from HELLSPY4, so I'm presuming it's at the door. If it casts the spell at a point at its feet, it should push everything the correct direction. Then I think it's just a matter of getting the projectile correct.

Link to comment
Incidentally, do you have something to draw familiars back to Irenicus after they've been blown back? (I wouldn't even bother doing this for summons.)
Unfortunately, JumpToPoint() actions on Player1 will *always* move the familiar in front of Player1 (any auto-motion, like area transitions, JumpToPoint(), CTRL+J, etc., also move the familiar -- it's hard-coded).

 

Which is why I had to modify every script in the game using Dialogue* type actions (to prevent everybody in the game from talking to my stupid familiar); [PC] will also include [FAMILIAR] (but not vice-versa), so See[2] / StartDialogueNoSet([2]), for example, will initiate dialogue with the familiar.

 

Anyway, to answer your question: Irenicus' spells are so powerful that yes, the familiar will be moved along with the rest of the party (in both cases -- the push away (after this patch, of course) and the draw back).

 

Everything is being pushed away from HELLSPY4, so I'm presuming it's at the door.
Close enough (actually, it should be somewhere in the wall). If you do make this an area effect, make sure you don't accidentally push the "spies" away (that'd be pretty funny).
Link to comment

OK, this is actually a lot easier than it seems. HELL_BUFFET (aka spin658) is already set as area effect, but since it's being called with ApplySpell it only affects the target creature. By changing it to ForceSpell and changing spin658 to use Everyone as target, we're in business. The HELLSPYs are not affected by this.

 

// familiars and summons should be pushed back when hell door opens, part 1/2 (see spin658.spl)
COPY_EXISTING ~Cut85A.bcs~ ~override~
 DECOMPILE_BCS_TO_BAF
 REPLACE_TEXTUALLY ~ActionOverride("HELLSPY4",ApplySpell(Player[1-6],HELL_BUFFET))~ ~~
 REPLACE_TEXTUALLY ~ActionOverride("hellspy4",ApplySpell(\[FAMILIAR\],HELL_BUFFET))~ ~ActionOverride("HELLSPY4",ForceSpell(Player1,HELL_BUFFET))~
 COMPILE_BAF_TO_BCS
 BUT_ONLY_IF_IT_CHANGES

// familiars and summons should be pushed back when hell door opens, part 2/2 (see cut85a.bcs)
COPY_EXISTING ~spin658.spl~ ~override~
 READ_SHORT 0x68 "abil_num"
 READ_LONG  0x6a "fx_off"
 PATCH_IF ("%abil_num%" > 0) BEGIN
   READ_LONG  0x64 "abil_off"
   READ_SHORT ("%abil_off%" + 0x1e + (0x28 * ("%abil_num%" - 1))) "abil_fx_num"
   READ_SHORT ("%abil_off%" + 0x20 + (0x28 * ("%abil_num%" - 1))) "abil_fx_idx"
   SET "fx_num" = ("%abil_fx_idx%" + "%abil_fx_num%")
 END ELSE BEGIN
   READ_SHORT 0x70 "fx_num"
 END
 WHILE ("%fx_num%" > 0) BEGIN
   SET "fx_num" = ("%fx_num%" - 1)
   READ_BYTE ("%fx_off%" + 0x02 + (0x30 * "%fx_num%")) "target"
   PATCH_IF ("%target%" = 2) BEGIN // change target: preset target to
     WRITE_BYTE ("%fx_off%" + 0x02 + (0x30 * "%fx_num%")) 4 // everyone
   END
 END
 BUT_ONLY_IF_IT_CHANGES

 

We can get away with just targeting Player1, since (s)he will always be in range. Player1 must be next to the door (Range 10) to trigger this cutscene.

 

Tested and confirmed as working. Included in alpha 5.

Link to comment

Archived

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

×
×
  • Create New...