Skip to content

Basilisk petrification when ambushed.

CLsdlt80CLsdlt80 Member Posts: 82
Haven't played in a while, but I remember when NPCs were petrified you could restore them as long as the statue was intact and only if the statue broke (you could visually see the statue break), were they and their equipment lost forever.

Got ambushed by Basilisk close to Durlag's Tower and when it petrified my tank NPC the moment it got petrified there was no trace of statue, it just disappeared. I had scrolls to restore him and killing the Basilisk would've meant a nice XP number to the rest of the party.

Anyone else experience this? Maybe this is because it happened in an ambush area? I haven't been petrified anywhere else in this campaign so I wouldn't know if this is also happening on regular areas. Playing the latest patch 2.6.5.0. I tried it a second time (reloaded to get ambushed) and it happened the same way: NPC removed from the right frame and no trace of statue or broken stone.

Comments

  • sarevok57sarevok57 Member Posts: 5,975
    this sounds like a bug
  • ThunderburpThunderburp Member Posts: 51
    edited May 2021
    Was able to reproduce with BGEE 2.6.5.0 with SoD installed. The Petrification effect (opcode 134) does this when applied to a party member in a random area (where the "Reform party" button is disabled, like in AR5901). The Gore option and difficulty level don't matter.

    Imoen was the only character not to disappear upon being petrified out of 6 tested. Her "Player2" status and her level don't seem to be the cause. Maybe this has to do with what happens when a character leaves the party, but using C:Eval("LeaveParty()") with the mouse cursor over Shar-Teel in AR5901, she leaves the party and stays around.
    Post edited by Thunderburp on
    CLsdlt80
  • kjeronkjeron Member Posts: 2,367
    Not a bug with petrify.
    Scripted behavior for all the EE NPCs:
    IF
    	Die()
    	!InParty(Myself)
    	OR(12)
    		AreaCheck("OH1000")  // Dorn - Random Encounter Area
    		AreaCheck("ar5600")  // Random encounter area
    		AreaCheck("ar5601")  // Random encounter area
    		AreaCheck("ar5700")  // Random encounter area
    		AreaCheck("ar5701")  // Random encounter area
    		AreaCheck("ar5800")  // Random encounter area
    		AreaCheck("ar5801")  // Random encounter area
    		AreaCheck("ar5900")  // Random encounter area
    		AreaCheck("ar5901")  // Random encounter area
    		AreaCheck("ar6000")  // Random encounter area
    		AreaCheck("ar6001")  // Random encounter area
    		AreaCheck("ar6100")  // Random encounter area
    THEN
    	RESPONSE #100
    		DestroySelf()
    END
    
    ThunderburpHafirsarevok57CLsdlt80
  • ThunderburpThunderburp Member Posts: 51
    Imoen is the only exception. Not sure if there's a reason for it or if she was just missed. A bit curious about the motivation behind this development decision.
  • jmerryjmerry Member Posts: 3,822
    The motivation? Not sure, but it's new in the 2.6 update. That block is not present in the 2.5 versions of the scripts.
  • CLsdlt80CLsdlt80 Member Posts: 82
    edited May 2021
    Before reading the latest comments I had summoned a Basilisk in a regular area and it left a statue as expected. The comments confim it has something to with the ambush areas.

    @kjeron, any tips to be able to change this behaviour? It breaks the immersion tbh, since it's a situation you can come out without any perma-deaths/perma-equipment loss if certain conditions are met: statue unbroken, carrying scrolls stone to flesh.
  • kjeronkjeron Member Posts: 2,367
    edited May 2021
    @CLsdlt80 depends on what you're comfortable with.
    You can easily rectify it without modding through the console, though you still lose some immersion:
    C:Eval('MoveGlobalObject("neera",[127])') // use the petrified npc's scriptname
    
    Do this in a non-random encounter area, near a door. It will teleport the statue next to that door.
    [127] will target the nearest area object (such as a door), which is necessary because targeting a creature would spawn them directly on top of each other, resulting in them both being stuck in place.

    Otherwise the easiest way would be to replace the "Die()" trigger with "StateCheck(Myself,STATE_DEAD)" in all the necessary scripts (~28 of them). That would exclude Petrification - at least while they remain a statue. If they're hit and chunked they would then register as STATE_DEAD and be whisked away. If you left them there as a statue and managed another random encounter in that specific random encounter area, they would still be there.
    CLsdlt80
  • CLsdlt80CLsdlt80 Member Posts: 82
    kjeron wrote: »
    Otherwise the easiest way would be to replace the "Die()" trigger with "StateCheck(Myself,STATE_DEAD)" in all the necessary scripts (~28 of them). That would exclude Petrification - at least while they remain a statue. If they're hit and chunked they would then register as STATE_DEAD and be whisked away. If you left them there as a statue and managed another random encounter in that specific random encounter area, they would still be there.

    worked like a charm with AJANTIS.bcs using DLTCEP, thanks!

    Correct if I'm wrong but if I were to delete this entire section in every recruitable NPC script:
    IF
    	Die()
    	!InParty(Myself)
    	OR(12)
    		AreaCheck("OH1000")  // Dorn - Random Encounter Area
    		AreaCheck("ar5600")  // Random encounter area
    		AreaCheck("ar5601")  // Random encounter area
    		AreaCheck("ar5700")  // Random encounter area
    		AreaCheck("ar5701")  // Random encounter area
    		AreaCheck("ar5800")  // Random encounter area
    		AreaCheck("ar5801")  // Random encounter area
    		AreaCheck("ar5900")  // Random encounter area
    		AreaCheck("ar5901")  // Random encounter area
    		AreaCheck("ar6000")  // Random encounter area
    		AreaCheck("ar6001")  // Random encounter area
    		AreaCheck("ar6100")  // Random encounter area
    THEN
    	RESPONSE #100
    		DestroySelf()
    END
    

    what would the result be if they die in a random area? They will never perma-die in random areas? is that what DestroySelf() is?
  • kjeronkjeron Member Posts: 2,367
    For global creatures (such as potential party members and familiars), DestroySelf just moves them to a placeholder area, where they can be called back into the game using a few actions (such as MoveGlobalObject).

    For non-global creatures, DestroySelf effectively removes them from the game.
    CLsdlt80
  • CLsdlt80CLsdlt80 Member Posts: 82
    I edited the 28 NPC scripts with DLTCEP as @kjeron suggested... Also, as @Thunderburp pointed out Imoen was the only NPC that didn't have that section of code in her script, I didn't add anything to Imoen's script. Here are the files if anyone wants to check them out (override SoD folder), I'm playing BG1 campaign in the SoD .exe, 2.6.5.0 vanilla.
Sign In or Register to comment.