jmerry Posted March 16, 2023 Share Posted March 16, 2023 (edited) See here for a discussion over at the Beamdog forums: https://forums.beamdog.com/discussion/87155/end-of-chapter-13-am-stuck-with-endless-attacks-by-shadow-thieves#latest Basically, EET resurrects an unused version of the SoD ending, with an in-engine cutscene instead of a movie. And, of course, continues to SoA rather than rolling credits. The scene features endlessly respawning Shadow Thieves to beat the party down. But Story Mode includes a 10-HP minimum for party members and sleep immunity, so the thieves can never actually bring anyone down and the scene continues indefinitely. (The attackers use weapons that deal nonlethal damage and have a Sleep effect) This is not a problem in the vanilla game, because there's no in-engine fight. Fade out, show a movie, roll credits. There's nothing wrong with using that other scene; the logic is already there in the area script, though it's skipped over normally. But it should be done right. Story Mode should never prevent story progression. Edited March 16, 2023 by jmerry Quote Link to comment
jastey Posted March 16, 2023 Share Posted March 16, 2023 This hits my "restore end fight scene" tweak for SoD, too. Quote Link to comment
subtledoctor Posted March 17, 2023 Share Posted March 17, 2023 17 hours ago, jmerry said: There's nothing wrong with using that other scene; the logic is already there in the area script, though it's skipped over normally. Pretty sure Story Mode is detectable by script, right? So whatever script this is could have a trigger to detect it and give the old movie if Story Mode is on. Quote Link to comment
jastey Posted March 17, 2023 Share Posted March 17, 2023 3 hours ago, subtledoctor said: So whatever script this is could have a trigger to detect it and give the old movie if Story Mode is on. Oh, that's an idea. I was thinking about deactivating Story Mode for the cutscene, it's deactivated for NPCs via their override script if they leave the party (and I think activated via some of the party member scripts if they are in) so that should be pretty easy. Quote Link to comment
subtledoctor Posted March 17, 2023 Share Posted March 17, 2023 1 hour ago, jastey said: Oh, that's an idea. I was thinking about deactivating Story Mode for the cutscene, it's deactivated for NPCs via their override script if they leave the party (and I think activated via some of the party member scripts if they are in) so that should be pretty easy. Also an option. My only concern would be in changing something the player intentionally set via the GUI. I suppose you could simply set a GV if you turn of Story Mode, and then have the Chateau Irenicus area script turn Story Mode back on if it detects that GV = 1. Something like that. Presumably using the EE movie if Story Mode is detected would create a bit of extra work in making sure the player wakes up in Chateau Irenicus rather than ending the game. Either way seems reasonable. Quote Link to comment
argent77 Posted March 17, 2023 Share Posted March 17, 2023 Actually, EET already attempts to deal with Story Mode, but the scripting is incomplete. Currently in BD6100.BCS there is this block: Spoiler IF Global("K#StoryMode","BD6100",0) StoryModeOn() Global("OHSMODE","GLOBAL",1) THEN RESPONSE #100 SetGlobal("K#StoryMode","BD6100",1) SetGlobal("OHSMODE","GLOBAL",-1) ReallyForceSpellDeadRES("OHSMODE2",Player1) Continue() END It removes the Story Mode effects from the protagonist (via spell "OSHMODE2") and sets the story mode variable ("OHSMODE") to -1. In BDBALDUR.BCS we have this block: Spoiler IF Global("OHSMODE","GLOBAL",0) Global("OHSMOFF","GLOBAL",0) StoryModeOn() !NightmareModeOn() !AreaCheck("BD6100") THEN RESPONSE #100 SetInterrupt(FALSE) SetGlobal("OHSMODE","GLOBAL",1) ApplySpellRES("OHSMODE1",Player1) DisplayStringNoNameHead(Player1,259613) // Story Mode: On SetInterrupt(TRUE) END It' doesn't fire in the ambush area because of the area check and the variable "OHSMODE" already being set to -1. But further down we have also blocks for all other party members, like this: Spoiler IF StoryModeOn() !CheckSpellState(Player2,STORY_MODE) InParty(Player2) THEN RESPONSE #100 SetInterrupt(FALSE) ApplySpellRES("OHSMODE1",Player2) SetInterrupt(TRUE) Continue() END These blocks are still executed, even in the ambush area. The actual problem is the spell "OSHMODE1", however, which applies the Story Mode immunities. Most effects of the spell are set to target the whole party. Combined with the script block above it will always affect the whole party as long as it is applied to at least one party member. The quickest way to fix the issue is to add an area check to the Story Mode checks for Player2 to Player6 in BDBALDUR.BCS and extend the spell effect removal in BD6100.BCS to all party members. Story Mode is automatically restored when you regain control over the party in Chateau Irenicus. Quote Link to comment
jastey Posted March 17, 2023 Share Posted March 17, 2023 5 minutes ago, argent77 said: The quickest way to fix the issue is to add an area check to the Story Mode checks for Player2 to Player6 in BDBALDUR.BCS and extend the spell effect removal in BD6100.BCS to all party members. Story Mode is automatically restored when you regain control over the party in Chateau Irenicus. Cool, thanks for looking this up. Quote Link to comment
jastey Posted March 27, 2023 Share Posted March 27, 2023 Wouldn't it suffice to expand the script block in EET to: IF Global("K#StoryMode","BD6100",0) StoryModeOn() Global("OHSMODE","GLOBAL",1) THEN RESPONSE #100 SetGlobal("K#StoryMode","BD6100",1) SetGlobal("OHSMODE","GLOBAL",-1) ReallyForceSpellDeadRES("OHSMODE2",Player1) ReallyForceSpellDeadRES("OHSMODE2",Player2) ReallyForceSpellDeadRES("OHSMODE2",Player3) ReallyForceSpellDeadRES("OHSMODE2",Player4) ReallyForceSpellDeadRES("OHSMODE2",Player5) ReallyForceSpellDeadRES("OHSMODE2",Player6) Continue() END Or am I missing something? Quote Link to comment
argent77 Posted March 27, 2023 Share Posted March 27, 2023 That alone wouldn't be enough since Story Mode effects are checked and reapplied to Player2 to Player6 in BDBALDUR.BCS on a regular basis. You would have to add an area check there as well. Btw, the issue is already fixed in EET. Quote Link to comment
jastey Posted March 27, 2023 Share Posted March 27, 2023 Ah, I see. I'm asking for my tweakpack, thanks for the link. Quote Link to comment
Recommended Posts
Join the conversation
You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.