diff options
Diffstat (limited to 'src/palaceDude.cpp')
-rw-r--r-- | src/palaceDude.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/palaceDude.cpp b/src/palaceDude.cpp new file mode 100644 index 0000000..6a8d7ff --- /dev/null +++ b/src/palaceDude.cpp @@ -0,0 +1,51 @@ +#include <game.h> +#include <stage.h> +#include "msgbox.h" + +class dPalaceDude_c : public dStageActor_c { + public: + static dPalaceDude_c *build(); + + bool hasBeenActivated; + bool hasExitedStage; + int onExecute(); +}; + +/*****************************************************************************/ +// Glue Code +dPalaceDude_c *dPalaceDude_c::build() { + void *buffer = AllocFromGameHeap1(sizeof(dPalaceDude_c)); + dPalaceDude_c *c = new(buffer) dPalaceDude_c; + return c; +} + + +int dPalaceDude_c::onExecute() { + if (dFlagMgr_c::instance->flags & spriteFlagMask) { + if (!hasBeenActivated) { +// OSReport("Activating Palace Dude\n"); + hasBeenActivated = true; + + dMsgBoxManager_c::instance->showMessage(settings & 0xFFFFFFF); + + SaveBlock *save = GetSaveFile()->GetBlock(-1); + *((u8*)(((u32)GameMgr)+0x380)) |= (1 << (settings >> 28)); + } + } + + if (hasBeenActivated) { + if (hasExitedStage) + return true; +// OSReport("Palace Dude is activated, %d\n", dMsgBoxManager_c::instance->visible); + if (!dMsgBoxManager_c::instance->visible) { +// OSReport("Exiting\n"); + ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); + hasExitedStage = true; + } + } + + return true; + +} + + |