mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-11-14 15:09:42 +01:00
Fix dying during collection prompt persisting effects
In the main game, if you press R during the trinket collection prompt after collecting a trinket, AND you have never entered Comms Relay, and you respawn in a different room, the trinket collection gamestate will be interrupted, but you will still be left with the advance text prompt, cutscene bars, and muted music. The previous workaround to fix the music would be to mute and then unmute the game, but due to the new music changes, this workaround (which in and of itself is a bug) no longer works. Instead, the music would have to be restarted by going into another zone on the map. Having an advance text prompt outside of a cutscene results in the player being unable to flip, but they can still move around left and right. Speedrunners previously used the no-Comms-Relay interrupting behavior to skip certain trinket collection prompts entirely with a frame-perfect R press, so I can't patch that out. Having an advance text prompt outside of a cutscene is (ab)used in custom levels to intentionally prevent the player from flipping, and furthermore, it's also used in credits warp runs of the main game to increment the gamestate; so I cannot patch that out. The ability to press R everywhere even during cutscenes was added for good reason - to make it less likely that a softlock can happen - so I don't want to revert it. But I still think this is worth fixing because previously, the punishment for missing the frame-perfect window late was simply not skipping the trinket prompt (since the R-press would be ignored), but now the punishment is basically having to reset because of the advance text prompt. I would usually handle this in gamestate 0, but awful custom levels might want to intentionally interrupt the gamestate to do, I don't know, something. No level does that so far, but I'd like to do the least invasive thing. So what I've done is made it so the effects of interruption are undone if you press R and the gamestate is interrupted. This is handled in mapclass::resetplayer().
This commit is contained in:
parent
25af54529b
commit
b6645de749
1 changed files with 12 additions and 0 deletions
|
@ -865,6 +865,18 @@ void mapclass::resetplayer(const bool player_died)
|
|||
}
|
||||
}
|
||||
|
||||
if (game.state == 0 && !script.running && game.completestop)
|
||||
{
|
||||
/* Looks like a collection dialogue was interrupted.
|
||||
* Undo its effects! */
|
||||
game.advancetext = false;
|
||||
graphics.showcutscenebars = false;
|
||||
if (music.currentsong > -1)
|
||||
{
|
||||
music.fadeMusicVolumeIn(3000);
|
||||
}
|
||||
}
|
||||
|
||||
game.scmhurt = false; //Just in case the supercrewmate is fucking this up!
|
||||
if (game.supercrewmate)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue