Skip to content

Commit

Permalink
Give MotU trophy in normal mode
Browse files Browse the repository at this point in the history
This makes it so that it is possible to obtain the Master of the
Universe trophy/achievement, usually unlocked by beating No Death Mode,
outside of NDM.

There are several conditions that need to be met:

1. The game needs to be started from a new game and cannot be from
   loading a save.
2. Accessibility modes (invincibility and slowdown) must never be
   enabled.

If either condition is violated, then the boolean that keeps track of
NDM eligibility will be set to false.
  • Loading branch information
InfoTeddy committed Aug 30, 2024
1 parent 8b62bb1 commit 64eda3e
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 2 deletions.
22 changes: 20 additions & 2 deletions desktop_version/src/Game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@ void Game::init(void)
ndmresulthardestroom_x = hardestroom_x;
ndmresulthardestroom_y = hardestroom_y;
ndmresulthardestroom_specialname = false;
nodeatheligible = false;

customcol=0;

Expand Down Expand Up @@ -3312,11 +3313,14 @@ void Game::updatestate(void)
}
}


if (nodeathmode)
if (nodeathmode || nodeatheligible)
{
unlockAchievement("vvvvvvmaster"); //bloody hell
unlocknum(UnlockTrophy_NODEATHMODE_COMPLETE);
}

if (nodeathmode)
{
setstate(3520);
setstatedelay(0);
}
Expand Down Expand Up @@ -7768,6 +7772,11 @@ void Game::returntoingame(void)
}
}
DEFER_CALLBACK(nextbgcolor);

if (nocompetitive())
{
invalidate_ndm_trophy();
}
}

void Game::unlockAchievement(const char* name)
Expand Down Expand Up @@ -7820,6 +7829,15 @@ void Game::copyndmresults(void)
SDL_memcpy(ndmresultcrewstats, crewstats, sizeof(ndmresultcrewstats));
}

void Game::invalidate_ndm_trophy(void)
{
if (nodeatheligible)
{
vlog_debug("NDM trophy is invalidated!");
}
nodeatheligible = false;
}

static inline int get_framerate(const int slowdown)
{
switch (slowdown)
Expand Down
2 changes: 2 additions & 0 deletions desktop_version/src/Game.h
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,8 @@ class Game
int ndmresulthardestroom_y;
bool ndmresulthardestroom_specialname;
void copyndmresults(void);
bool nodeatheligible;
void invalidate_ndm_trophy(void);

//Time Trials
bool intimetrial, timetrialparlost;
Expand Down
2 changes: 2 additions & 0 deletions desktop_version/src/Logic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,8 @@ void gamelogic(void)
game.deathseq--;
if (game.deathseq <= 0)
{
game.invalidate_ndm_trophy();

if (game.nodeathmode)
{
game.deathseq = 1;
Expand Down
11 changes: 11 additions & 0 deletions desktop_version/src/Script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2651,6 +2651,16 @@ void scriptclass::startgamemode(const enum StartMode mode)
graphics.showcutscenebars = true;
graphics.setbars(320);
load("intro");

if (!game.nocompetitive())
{
game.nodeatheligible = true;
vlog_debug("NDM trophy is eligible.");
}
else
{
game.invalidate_ndm_trophy();
}
}
break;

Expand Down Expand Up @@ -3088,6 +3098,7 @@ void scriptclass::hardreset(void)

game.nodeathmode = false;
game.nocutscenes = false;
game.nodeatheligible = false;

for (i = 0; i < (int) SDL_arraysize(game.crewstats); i++)
{
Expand Down

0 comments on commit 64eda3e

Please sign in to comment.