Jump to content

Bug: SoD-ending cutscene cannot progress if Story Mode is active


Recommended Posts

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 by jmerry
Link to comment
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.

Link to comment
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.

Link to comment
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.

Link to comment

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.

Link to comment
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.

Link to comment

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?

Link to comment

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...