mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2025-01-08 18:09:45 +01:00
Fix unwinnable save from rescuing Violet out of order
You're intended to rescue Violet first, and not second, third, or fourth, and especially not last. If you rescue her second, third, or fourth, your crewmate progress will be reset, but you won't be able to re-rescue them again. This is because Vitellary, Verdigris, Victoria, and Vermilion will be temporarily marked as rescued during the `bigopenworld` cutscene, so duplicate versions of them don't spawn during the cutscene, and then will be marked as missing later to undo it. This first issue can be trivially fixed by simply toggling flags to prevent duplicates of them from spawning during the cutscene instead of fiddling with their rescue statuses. However, there is still another issue. If you rescue Violet last, then you won't be warped to the Final Level, meaning you can't properly complete the game. This can be fixed by adding a `crewrescued() == 6` check to the Space Station 1 Level Complete cutscene. There is additionally a temporary unrescuing of Violet so she doesn't get duplicated during the `bigopenworld` cutscene, and I've had to move that to the start of the `bigopenworld` and `bigopenworldskip` scripts, otherwise the `crewrescued() == 6` check won't work properly. I haven't added hooks for Intermission 1 or 2 because you're not really meant to play the intermissions with Violet (but you probably could anyway, there'd just be no dialogue). Oh, and the pre-Final Level cutscene expects the player to already be hidden before it starts playing, but if you rescue Violet last the player is still visible, so I've fixed that. But there still ends up being two Violets, so I'll probably replace it with a special cutscene later that's not so nonsensical.
This commit is contained in:
parent
3ffe1b2e3b
commit
96be0fc7a9
2 changed files with 22 additions and 12 deletions
|
@ -2649,7 +2649,6 @@ void Game::updatestate()
|
|||
state++;
|
||||
statedelay = 30;
|
||||
graphics.textboxremove();
|
||||
crewstats[1] = 0; //Set violet's rescue script to 0 to make the next bit easier
|
||||
teleportscript = "";
|
||||
}
|
||||
break;
|
||||
|
@ -2662,13 +2661,20 @@ void Game::updatestate()
|
|||
if(graphics.fademode==1)
|
||||
{
|
||||
startscript = true;
|
||||
if (nocutscenes)
|
||||
if (crewrescued() == 6)
|
||||
{
|
||||
newscript="bigopenworldskip";
|
||||
newscript = "startlevel_final";
|
||||
}
|
||||
else
|
||||
{
|
||||
newscript = "bigopenworld";
|
||||
if (nocutscenes)
|
||||
{
|
||||
newscript="bigopenworldskip";
|
||||
}
|
||||
else
|
||||
{
|
||||
newscript = "bigopenworld";
|
||||
}
|
||||
}
|
||||
state = 0;
|
||||
}
|
||||
|
|
|
@ -687,15 +687,17 @@ void scriptclass::load(const std::string& name)
|
|||
"cutscene()",
|
||||
"untilbars()",
|
||||
|
||||
"missing(purple)", //Set violet's rescue script to 0 to make the next bit easier
|
||||
|
||||
"gotoroom(4,10)",
|
||||
"gotoposition(100,177,0)",
|
||||
"createcrewman(150,177,purple,0,faceleft)",
|
||||
|
||||
//set all the crew as rescued to avoid companion issues!
|
||||
"rescued(red)",
|
||||
"rescued(green)",
|
||||
"rescued(blue)",
|
||||
"rescued(yellow)",
|
||||
"flag(8,on)",
|
||||
"flag(9,on)",
|
||||
"flag(10,on)",
|
||||
"flag(11,on)",
|
||||
|
||||
"fadein()",
|
||||
"untilfade()",
|
||||
|
@ -872,10 +874,10 @@ void scriptclass::load(const std::string& name)
|
|||
"untilfade()",
|
||||
"showplayer()",
|
||||
|
||||
"missing(red)",
|
||||
"missing(green)",
|
||||
"missing(blue)",
|
||||
"missing(yellow)",
|
||||
"flag(8,off)",
|
||||
"flag(9,off)",
|
||||
"flag(10,off)",
|
||||
"flag(11,off)",
|
||||
|
||||
"changeplayercolour(cyan)",
|
||||
"changemood(player,0)",
|
||||
|
@ -992,6 +994,7 @@ void scriptclass::load(const std::string& name)
|
|||
else if (SDL_strcmp(t, "bigopenworldskip") == 0)
|
||||
{
|
||||
static const char* lines[] = {
|
||||
"missing(purple)",
|
||||
"gotoroom(4,10)",
|
||||
"gotoposition(100,177,0)",
|
||||
"createcrewman(150,177,purple,0,faceleft)",
|
||||
|
@ -3350,6 +3353,7 @@ void scriptclass::load(const std::string& name)
|
|||
{
|
||||
static const char* lines[] = {
|
||||
"ifskip(skipfinal)",
|
||||
"hideplayer()",
|
||||
"cutscene()",
|
||||
"untilbars()",
|
||||
"activeteleporter()",
|
||||
|
|
Loading…
Reference in a new issue