diff options
Diffstat (limited to '')
-rw-r--r-- | src/msgbox.cpp | 45 | ||||
-rw-r--r-- | src/msgbox.h | 50 | ||||
-rw-r--r-- | src/palaceDude.cpp | 50 |
3 files changed, 101 insertions, 44 deletions
diff --git a/src/msgbox.cpp b/src/msgbox.cpp index adbeb24..9a5fb25 100644 --- a/src/msgbox.cpp +++ b/src/msgbox.cpp @@ -1,52 +1,9 @@ #include <common.h> #include <game.h> +#include "msgbox.h" // Replaces: EN_LIFT_ROTATION_HALF (Sprite 107; Profile ID 481 @ 80AF96F8) -class dMsgBoxManager_c : public dStageActor_c { - public: - void showMessage(int id); - - dMsgBoxManager_c() : state(this, &StateID_LoadRes) { } - - int onCreate(); - int onDelete(); - int onExecute(); - int onDraw(); - - int beforeExecute() { return true; } - int afterExecute(int) { return true; } - - m2d::EmbedLayout_c layout; - dDvdLoader_c msgDataLoader; - - bool layoutLoaded; - bool visible; - - dStateWrapper_c<dMsgBoxManager_c> state; - - USING_STATES(dMsgBoxManager_c); - DECLARE_STATE(LoadRes); - DECLARE_STATE(Wait); - DECLARE_STATE(BoxAppearWait); - DECLARE_STATE(ShownWait); - DECLARE_STATE(BoxDisappearWait); - - static dMsgBoxManager_c *instance; - static dMsgBoxManager_c *build(); - - private: - struct entry_s { - u32 id; - u32 titleOffset; - u32 msgOffset; - }; - - struct header_s { - u32 count; - entry_s entry[1]; - }; -}; dMsgBoxManager_c *dMsgBoxManager_c::instance = 0; dMsgBoxManager_c *dMsgBoxManager_c::build() { diff --git a/src/msgbox.h b/src/msgbox.h new file mode 100644 index 0000000..032b5c8 --- /dev/null +++ b/src/msgbox.h @@ -0,0 +1,50 @@ +#ifndef MSGBOX_H +#define MSGBOX_H +#include <common.h> +#include <game.h> + +class dMsgBoxManager_c : public dStageActor_c { + public: + void showMessage(int id); + + dMsgBoxManager_c() : state(this, &StateID_LoadRes) { } + + int onCreate(); + int onDelete(); + int onExecute(); + int onDraw(); + + int beforeExecute() { return true; } + int afterExecute(int) { return true; } + + m2d::EmbedLayout_c layout; + dDvdLoader_c msgDataLoader; + + bool layoutLoaded; + bool visible; + + dStateWrapper_c<dMsgBoxManager_c> state; + + USING_STATES(dMsgBoxManager_c); + DECLARE_STATE(LoadRes); + DECLARE_STATE(Wait); + DECLARE_STATE(BoxAppearWait); + DECLARE_STATE(ShownWait); + DECLARE_STATE(BoxDisappearWait); + + static dMsgBoxManager_c *instance; + static dMsgBoxManager_c *build(); + + private: + struct entry_s { + u32 id; + u32 titleOffset; + u32 msgOffset; + }; + + struct header_s { + u32 count; + entry_s entry[1]; + }; +}; +#endif /* MSGBOX_H */ diff --git a/src/palaceDude.cpp b/src/palaceDude.cpp new file mode 100644 index 0000000..eff3299 --- /dev/null +++ b/src/palaceDude.cpp @@ -0,0 +1,50 @@ +#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) + return true; + //OSReport("Activating Palace Dude\n"); + hasBeenActivated = true; + + dMsgBoxManager_c::instance->showMessage(settings & 0xFFFFFFF); + + SaveBlock *save = GetSaveFile()->GetBlock(-1); + save->switch_on |= (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) { + ExitStage(WORLD_MAP, 0, BEAT_LEVEL, MARIO_WIPE); + hasExitedStage = true; + } + } + + return true; + +} + + |