diff options
-rw-r--r-- | src/switchblock.S | 4 | ||||
-rw-r--r-- | src/worldmap.cpp | 26 | ||||
-rw-r--r-- | src/worldmap.h | 1 |
3 files changed, 28 insertions, 3 deletions
diff --git a/src/switchblock.S b/src/switchblock.S index f219ee4..fd192df 100644 --- a/src/switchblock.S +++ b/src/switchblock.S @@ -31,7 +31,7 @@ ProcessTileNum_EndPatch: ori r5, r5, BG_GM_ptr@l lwz r5, 0(r5) addis r5, r5, 9 - lbz r5, 0xAA8(r3) + lbz r5, 0xAA8(r5) cmplwi r30, 0x58 bne not_red @@ -67,6 +67,6 @@ ptnReturn: lwz r31, 0xC(r1) lwz r30, 0x8(r1) mtlr r0 - addi sp, sp, 0x10 + addi r1, r1, 0x10 blr diff --git a/src/worldmap.cpp b/src/worldmap.cpp index 7bfa461..d7f73d0 100644 --- a/src/worldmap.cpp +++ b/src/worldmap.cpp @@ -71,6 +71,14 @@ dScNewerWorldMap_c *dScNewerWorldMap_c::build() { #define CONT_DONE(cont) (*((bool*)(((u32)(cont))+0x2D7)))
#define CONT_UNK3(cont) (*((bool*)(((u32)(cont))+0x2E0)))
+inline u8 GetSwitchStatus() {
+ return *((u8*)(((u32)GameMgr)+0x380));
+}
+
+inline void SetSwitchStatus(u8 stat) {
+ *((u8*)(((u32)GameMgr)+0x380)) = stat;
+}
+
#define STATE_START_DVD 0
#define STATE_LOAD_RES 1
#define STATE_END_DVD 2
@@ -157,7 +165,7 @@ void dScNewerWorldMap_c::StartLevel(LevelInfo_Entry *entry) { }
void dScNewerWorldMap_c::SetTitle(const char *text) {
- unsigned short conv_buf[0x1FF];
+ unsigned short conv_buf[0x200];
int length = strlen(text);
if (length > 0x1FF)
length = 0x1FF;
@@ -165,11 +173,22 @@ void dScNewerWorldMap_c::SetTitle(const char *text) { for (int i = 0; i < length; i++) {
conv_buf[i] = text[i];
}
+ conv_buf[length] = 0;
void *textBox = EmbeddedLayout_FindTextBoxByName(this->layout, "ScreenTitle");
TextBox_SetString(textBox, conv_buf, 0);
}
+void dScNewerWorldMap_c::GenSBTitle() {
+ char buf[0x100];
+ sprintf(buf, "Switches: R:%s; G:%s; Y:%s; B:%s",
+ ((GetSwitchStatus() & 1) != 0) ? "On" : "Off",
+ ((GetSwitchStatus() & 2) != 0) ? "On" : "Off",
+ ((GetSwitchStatus() & 4) != 0) ? "On" : "Off",
+ ((GetSwitchStatus() & 8) != 0) ? "On" : "Off");
+ this->SetTitle(buf);
+}
+
void dScNewerWorldMap_c::GenText() {
char buf[0x1FF];
char paneNameBuf[0x20];
@@ -339,6 +358,7 @@ int dScNewerWorldMap_c::onCreate() { OSReport("23:Make text\n");
this->GenText();
+ this->GenSBTitle();
OSReport("24:onCreate complete\n");
return true;
@@ -497,6 +517,10 @@ int dScNewerWorldMap_c::onExecute() { this->state = STATE_CSMENU;
}
+ if (nowPressed & WPAD_B) {
+ SetSwitchStatus((GetSwitchStatus() + 1) & 15);
+ this->GenSBTitle();
+ }
// Change the current level
if ((nowPressed & WPAD_UP) && currentSelection > 0) {
diff --git a/src/worldmap.h b/src/worldmap.h index 5966352..0cf567e 100644 --- a/src/worldmap.h +++ b/src/worldmap.h @@ -49,6 +49,7 @@ public: void StartLevel();
void GenText();
+ void GenSBTitle();
void SetTitle(const char *text);
int onCreate();
|