diff --git a/include/d/d_save/d_save/asm/func_80035360.s b/include/d/d_save/d_save/asm/func_80035360.s index eaec14e0154..02fc67854d5 100644 --- a/include/d/d_save/d_save/asm/func_80035360.s +++ b/include/d/d_save/d_save/asm/func_80035360.s @@ -56,55 +56,4 @@ lbl_80035414: /* 8003541C 0003235C 80 01 00 14 */ lwz r0, 0x14(r1) /* 80035420 00032360 7C 08 03 A6 */ mtlr r0 /* 80035424 00032364 38 21 00 10 */ addi r1, r1, 0x10 -/* 80035428 00032368 4E 80 00 20 */ blr -/* 8003542C 0003236C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80035430 00032370 7C 08 02 A6 */ mflr r0 -/* 80035434 00032374 90 01 00 14 */ stw r0, 0x14(r1) -/* 80035438 00032378 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8003543C 0003237C 93 C1 00 08 */ stw r30, 8(r1) -/* 80035440 00032380 7C 7E 1B 78 */ mr r30, r3 -/* 80035444 00032384 7C 9F 23 78 */ mr r31, r4 -/* 80035448 00032388 2C 1F FF FF */ cmpwi r31, -1 -/* 8003544C 0003238C 41 82 00 0C */ beq lbl_80035458 -/* 80035450 00032390 2C 1F 00 FF */ cmpwi r31, 0xff -/* 80035454 00032394 40 82 00 0C */ bne lbl_80035460 -lbl_80035458: -/* 80035458 00032398 38 60 00 00 */ li r3, 0 -/* 8003545C 0003239C 48 00 00 6C */ b lbl_800354C8 -lbl_80035460: -/* 80035460 000323A0 2C 1F 00 80 */ cmpwi r31, 0x80 -/* 80035464 000323A4 40 80 00 10 */ bge lbl_80035474 -/* 80035468 000323A8 38 7E 09 58 */ addi r3, r30, 0x958 -/* 8003546C 000323AC 4B FF F4 21 */ bl revSwitch__12dSv_memBit_cFi -/* 80035470 000323B0 48 00 00 58 */ b lbl_800354C8 -lbl_80035474: -/* 80035474 000323B4 2C 1F 00 C0 */ cmpwi r31, 0xc0 -/* 80035478 000323B8 40 80 00 14 */ bge lbl_8003548C -/* 8003547C 000323BC 38 7E 09 78 */ addi r3, r30, 0x978 -/* 80035480 000323C0 38 9F FF 80 */ addi r4, r31, -128 -/* 80035484 000323C4 4B FF F7 91 */ bl revSwitch__12dSv_danBit_cFi -/* 80035488 000323C8 48 00 00 40 */ b lbl_800354C8 -lbl_8003548C: -/* 8003548C 000323CC 7C A3 2B 78 */ mr r3, r5 -/* 80035490 000323D0 4B FF 85 21 */ bl dStage_roomControl_c_NS_getZoneNo -/* 80035494 000323D4 2C 1F 00 E0 */ cmpwi r31, 0xe0 -/* 80035498 000323D8 40 80 00 1C */ bge lbl_800354B4 -/* 8003549C 000323DC 54 63 28 34 */ slwi r3, r3, 5 -/* 800354A0 000323E0 38 63 09 B6 */ addi r3, r3, 0x9b6 -/* 800354A4 000323E4 7C 7E 1A 14 */ add r3, r30, r3 -/* 800354A8 000323E8 38 9F FF 40 */ addi r4, r31, -192 -/* 800354AC 000323EC 4B FF F8 CD */ bl revSwitch__13dSv_zoneBit_cFi -/* 800354B0 000323F0 48 00 00 18 */ b lbl_800354C8 -lbl_800354B4: -/* 800354B4 000323F4 54 63 28 34 */ slwi r3, r3, 5 -/* 800354B8 000323F8 38 63 09 B6 */ addi r3, r3, 0x9b6 -/* 800354BC 000323FC 7C 7E 1A 14 */ add r3, r30, r3 -/* 800354C0 00032400 38 9F FF 20 */ addi r4, r31, -224 -/* 800354C4 00032404 4B FF F9 39 */ bl revOneSwitch__13dSv_zoneBit_cFi -lbl_800354C8: -/* 800354C8 00032408 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800354CC 0003240C 83 C1 00 08 */ lwz r30, 8(r1) -/* 800354D0 00032410 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800354D4 00032414 7C 08 03 A6 */ mtlr r0 -/* 800354D8 00032418 38 21 00 10 */ addi r1, r1, 0x10 -/* 800354DC 0003241C 4E 80 00 20 */ blr \ No newline at end of file +/* 80035428 00032368 4E 80 00 20 */ blr \ No newline at end of file diff --git a/include/d/d_save/d_save/asm/func_8003542C.s b/include/d/d_save/d_save/asm/func_8003542C.s new file mode 100644 index 00000000000..c6a5fda5ec5 --- /dev/null +++ b/include/d/d_save/d_save/asm/func_8003542C.s @@ -0,0 +1,51 @@ +/* 8003542C 0003236C 94 21 FF F0 */ stwu r1, -0x10(r1) +/* 80035430 00032370 7C 08 02 A6 */ mflr r0 +/* 80035434 00032374 90 01 00 14 */ stw r0, 0x14(r1) +/* 80035438 00032378 93 E1 00 0C */ stw r31, 0xc(r1) +/* 8003543C 0003237C 93 C1 00 08 */ stw r30, 8(r1) +/* 80035440 00032380 7C 7E 1B 78 */ mr r30, r3 +/* 80035444 00032384 7C 9F 23 78 */ mr r31, r4 +/* 80035448 00032388 2C 1F FF FF */ cmpwi r31, -1 +/* 8003544C 0003238C 41 82 00 0C */ beq lbl_80035458 +/* 80035450 00032390 2C 1F 00 FF */ cmpwi r31, 0xff +/* 80035454 00032394 40 82 00 0C */ bne lbl_80035460 +lbl_80035458: +/* 80035458 00032398 38 60 00 00 */ li r3, 0 +/* 8003545C 0003239C 48 00 00 6C */ b lbl_800354C8 +lbl_80035460: +/* 80035460 000323A0 2C 1F 00 80 */ cmpwi r31, 0x80 +/* 80035464 000323A4 40 80 00 10 */ bge lbl_80035474 +/* 80035468 000323A8 38 7E 09 58 */ addi r3, r30, 0x958 +/* 8003546C 000323AC 4B FF F4 21 */ bl revSwitch__12dSv_memBit_cFi +/* 80035470 000323B0 48 00 00 58 */ b lbl_800354C8 +lbl_80035474: +/* 80035474 000323B4 2C 1F 00 C0 */ cmpwi r31, 0xc0 +/* 80035478 000323B8 40 80 00 14 */ bge lbl_8003548C +/* 8003547C 000323BC 38 7E 09 78 */ addi r3, r30, 0x978 +/* 80035480 000323C0 38 9F FF 80 */ addi r4, r31, -128 +/* 80035484 000323C4 4B FF F7 91 */ bl revSwitch__12dSv_danBit_cFi +/* 80035488 000323C8 48 00 00 40 */ b lbl_800354C8 +lbl_8003548C: +/* 8003548C 000323CC 7C A3 2B 78 */ mr r3, r5 +/* 80035490 000323D0 4B FF 85 21 */ bl dStage_roomControl_c_NS_getZoneNo +/* 80035494 000323D4 2C 1F 00 E0 */ cmpwi r31, 0xe0 +/* 80035498 000323D8 40 80 00 1C */ bge lbl_800354B4 +/* 8003549C 000323DC 54 63 28 34 */ slwi r3, r3, 5 +/* 800354A0 000323E0 38 63 09 B6 */ addi r3, r3, 0x9b6 +/* 800354A4 000323E4 7C 7E 1A 14 */ add r3, r30, r3 +/* 800354A8 000323E8 38 9F FF 40 */ addi r4, r31, -192 +/* 800354AC 000323EC 4B FF F8 CD */ bl revSwitch__13dSv_zoneBit_cFi +/* 800354B0 000323F0 48 00 00 18 */ b lbl_800354C8 +lbl_800354B4: +/* 800354B4 000323F4 54 63 28 34 */ slwi r3, r3, 5 +/* 800354B8 000323F8 38 63 09 B6 */ addi r3, r3, 0x9b6 +/* 800354BC 000323FC 7C 7E 1A 14 */ add r3, r30, r3 +/* 800354C0 00032400 38 9F FF 20 */ addi r4, r31, -224 +/* 800354C4 00032404 4B FF F9 39 */ bl revOneSwitch__13dSv_zoneBit_cFi +lbl_800354C8: +/* 800354C8 00032408 83 E1 00 0C */ lwz r31, 0xc(r1) +/* 800354CC 0003240C 83 C1 00 08 */ lwz r30, 8(r1) +/* 800354D0 00032410 80 01 00 14 */ lwz r0, 0x14(r1) +/* 800354D4 00032414 7C 08 03 A6 */ mtlr r0 +/* 800354D8 00032418 38 21 00 10 */ addi r1, r1, 0x10 +/* 800354DC 0003241C 4E 80 00 20 */ blr \ No newline at end of file diff --git a/ldscript.lcf b/ldscript.lcf index e43842f9ded..2b045ae4987 100644 --- a/ldscript.lcf +++ b/ldscript.lcf @@ -776,6 +776,7 @@ FORCEACTIVE { offTbox__12dSv_memBit_cFi set__25dSv_player_return_place_cFPCcScUc offActor__10dSv_info_cFii + revSwitch__10dSv_info_cFii __dt__12dFile_info_cFv modeWait__12dFile_info_cFv modeMove__12dFile_info_cFv diff --git a/src/d/d_save/d_save.cpp b/src/d/d_save/d_save.cpp index 6a8f7cb8011..fb8caf1f142 100644 --- a/src/d/d_save/d_save.cpp +++ b/src/d/d_save/d_save.cpp @@ -1384,24 +1384,30 @@ void dSv_info_c::offSwitch(int i_no, int i_roomNo) { } // doesn't like getZoneBit() returning a reference -#ifdef NONMATCHING +#ifndef NONMATCHING BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { + int value; if ((i_no == -1) || (i_no == 0xFF)) { - return false; + return FALSE; } if (i_no < 0x80) { - return this->memory.getTempFlags().isSwitch(i_no); + value = this->memory.getTempFlagsConst().isSwitch(i_no); } else if (i_no < 0xc0) { - return this->dungeon_bit.isSwitch(i_no - 0x80); + value = this->dungeon_bit.isSwitch(i_no - 0x80); } else { int zoneId = dStage_roomControl_c_NS_getZoneNo(i_roomNo, i_no); - if (i_no < 0xE0) { - return this->zones[zoneId].getZoneBit().isSwitch(i_no - 0xC0); + if ((zoneId < 0) || (zoneId >= 0x20)) { + value = FALSE; } else { - return this->zones[zoneId].getZoneBit().isOneSwitch(i_no - 0xE0); + if (i_no < 0xE0) { + value = this->zones[zoneId].getZoneBitConst().isSwitch(i_no - 0xC0); + } else { + value = this->zones[zoneId].getZoneBitConst().isOneSwitch(i_no - 0xE0); + } } } + return value; } #else asm BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { @@ -1410,6 +1416,11 @@ asm BOOL dSv_info_c::isSwitch(int i_no, int i_roomNo) const { } #endif +asm u8 dSv_info_c::revSwitch(int i_no, int i_roomNo) { + nofralloc +#include "d/d_save/d_save/asm/func_8003542c.s" +} + void dSv_info_c::onItem(int i_no, int i_roomNo) { if ((i_no == -1) || (i_no == 0xFF)) { return; @@ -1432,7 +1443,7 @@ void dSv_info_c::onItem(int i_no, int i_roomNo) { BOOL dSv_info_c::isItem(int i_no, int i_roomNo) const { int value; if ((i_no == -1) || (i_no == 0xFF)) { - return 0; + return FALSE; } if (i_no < 0x80) {