diff --git a/asm/d/com/inf/d_com_inf_game.s b/asm/d/com/inf/d_com_inf_game.s index 9ffbec26d9d..23edc1b0fb2 100644 --- a/asm/d/com/inf/d_com_inf_game.s +++ b/asm/d/com/inf/d_com_inf_game.s @@ -2977,7 +2977,7 @@ lbl_8002DAC8: /* 8002DADC 0002AA1C 7C 60 22 14 */ add r3, r0, r4 /* 8002DAE0 0002AA20 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8002DAE4 0002AA24 7F E4 FB 78 */ mr r4, r31 -/* 8002DAE8 0002AA28 48 00 72 C5 */ bl dSv_zoneBit_c_NS_onOneSwitch +/* 8002DAE8 0002AA28 48 00 72 C5 */ bl onOneSwitch__13dSv_zoneBit_cFi lbl_8002DAEC: /* 8002DAEC 0002AA2C 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8002DAF0 0002AA30 80 01 00 14 */ lwz r0, 0x14(r1) @@ -3008,7 +3008,7 @@ lbl_8002DB2C: /* 8002DB40 0002AA80 7C 60 22 14 */ add r3, r0, r4 /* 8002DB44 0002AA84 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8002DB48 0002AA88 7F E4 FB 78 */ mr r4, r31 -/* 8002DB4C 0002AA8C 48 00 72 7D */ bl dSv_zoneBit_c_NS_offOneSwitch +/* 8002DB4C 0002AA8C 48 00 72 7D */ bl offOneSwitch__13dSv_zoneBit_cFi lbl_8002DB50: /* 8002DB50 0002AA90 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8002DB54 0002AA94 80 01 00 14 */ lwz r0, 0x14(r1) @@ -3041,7 +3041,7 @@ lbl_8002DB98: /* 8002DBAC 0002AAEC 7C 60 22 14 */ add r3, r0, r4 /* 8002DBB0 0002AAF0 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8002DBB4 0002AAF4 7F E4 FB 78 */ mr r4, r31 -/* 8002DBB8 0002AAF8 48 00 72 29 */ bl dSv_zoneBit_c_NS_isOneSwitch +/* 8002DBB8 0002AAF8 48 00 72 29 */ bl isOneSwitch__13dSv_zoneBit_cCFi lbl_8002DBBC: /* 8002DBBC 0002AAFC 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8002DBC0 0002AB00 80 01 00 14 */ lwz r0, 0x14(r1) @@ -3074,7 +3074,7 @@ lbl_8002DC04: /* 8002DC18 0002AB58 7C 60 22 14 */ add r3, r0, r4 /* 8002DC1C 0002AB5C 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8002DC20 0002AB60 7F E4 FB 78 */ mr r4, r31 -/* 8002DC24 0002AB64 48 00 72 2D */ bl dSv_zoneBit_c_NS_isItem +/* 8002DC24 0002AB64 48 00 72 2D */ bl isItem__13dSv_zoneBit_cCFi lbl_8002DC28: /* 8002DC28 0002AB68 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8002DC2C 0002AB6C 80 01 00 14 */ lwz r0, 0x14(r1) @@ -3107,7 +3107,7 @@ lbl_8002DC70: /* 8002DC84 0002ABC4 7C 60 22 14 */ add r3, r0, r4 /* 8002DC88 0002ABC8 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8002DC8C 0002ABCC 7F E4 FB 78 */ mr r4, r31 -/* 8002DC90 0002ABD0 48 00 72 09 */ bl dSv_zoneBit_c_NS_isOneItem +/* 8002DC90 0002ABD0 48 00 72 09 */ bl isOneItem__13dSv_zoneBit_cCFi lbl_8002DC94: /* 8002DC94 0002ABD4 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8002DC98 0002ABD8 80 01 00 14 */ lwz r0, 0x14(r1) diff --git a/asm/d/d_save.s b/asm/d/d_save.s index 9cc25085083..c040406b1bb 100644 --- a/asm/d/d_save.s +++ b/asm/d/d_save.s @@ -2,112 +2,6 @@ .section .text, "ax" # 80032918 -.global dSv_zoneBit_c_NS_revSwitch -dSv_zoneBit_c_NS_revSwitch: -/* 80034D78 00031CB8 7C 86 26 70 */ srawi r6, r4, 4 -/* 80034D7C 00031CBC 38 A0 00 01 */ li r5, 1 -/* 80034D80 00031CC0 54 80 07 3E */ clrlwi r0, r4, 0x1c -/* 80034D84 00031CC4 7C A5 00 30 */ slw r5, r5, r0 -/* 80034D88 00031CC8 54 C4 08 3C */ slwi r4, r6, 1 -/* 80034D8C 00031CCC 7C 03 22 2E */ lhzx r0, r3, r4 -/* 80034D90 00031CD0 7C 00 2A 78 */ xor r0, r0, r5 -/* 80034D94 00031CD4 7C 03 23 2E */ sthx r0, r3, r4 -/* 80034D98 00031CD8 7C 03 22 2E */ lhzx r0, r3, r4 -/* 80034D9C 00031CDC 7C A3 00 38 */ and r3, r5, r0 -/* 80034DA0 00031CE0 30 03 FF FF */ addic r0, r3, -1 -/* 80034DA4 00031CE4 7C 60 19 10 */ subfe r3, r0, r3 -/* 80034DA8 00031CE8 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_onOneSwitch -dSv_zoneBit_c_NS_onOneSwitch: -/* 80034DAC 00031CEC A0 A3 00 04 */ lhz r5, 4(r3) -/* 80034DB0 00031CF0 38 00 00 01 */ li r0, 1 -/* 80034DB4 00031CF4 7C 00 20 30 */ slw r0, r0, r4 -/* 80034DB8 00031CF8 54 00 04 3E */ clrlwi r0, r0, 0x10 -/* 80034DBC 00031CFC 7C A0 03 78 */ or r0, r5, r0 -/* 80034DC0 00031D00 B0 03 00 04 */ sth r0, 4(r3) -/* 80034DC4 00031D04 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_offOneSwitch -dSv_zoneBit_c_NS_offOneSwitch: -/* 80034DC8 00031D08 A0 A3 00 04 */ lhz r5, 4(r3) -/* 80034DCC 00031D0C 38 00 00 01 */ li r0, 1 -/* 80034DD0 00031D10 7C 00 20 30 */ slw r0, r0, r4 -/* 80034DD4 00031D14 7C A0 00 78 */ andc r0, r5, r0 -/* 80034DD8 00031D18 B0 03 00 04 */ sth r0, 4(r3) -/* 80034DDC 00031D1C 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_isOneSwitch -dSv_zoneBit_c_NS_isOneSwitch: -/* 80034DE0 00031D20 A0 63 00 04 */ lhz r3, 4(r3) -/* 80034DE4 00031D24 38 00 00 01 */ li r0, 1 -/* 80034DE8 00031D28 7C 00 20 30 */ slw r0, r0, r4 -/* 80034DEC 00031D2C 7C 63 00 38 */ and r3, r3, r0 -/* 80034DF0 00031D30 30 03 FF FF */ addic r0, r3, -1 -/* 80034DF4 00031D34 7C 60 19 10 */ subfe r3, r0, r3 -/* 80034DF8 00031D38 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_revOneSwitch -dSv_zoneBit_c_NS_revOneSwitch: -/* 80034DFC 00031D3C 38 00 00 01 */ li r0, 1 -/* 80034E00 00031D40 7C 04 20 30 */ slw r4, r0, r4 -/* 80034E04 00031D44 A0 03 00 04 */ lhz r0, 4(r3) -/* 80034E08 00031D48 7C 00 22 78 */ xor r0, r0, r4 -/* 80034E0C 00031D4C B0 03 00 04 */ sth r0, 4(r3) -/* 80034E10 00031D50 A0 03 00 04 */ lhz r0, 4(r3) -/* 80034E14 00031D54 7C 03 20 38 */ and r3, r0, r4 -/* 80034E18 00031D58 30 03 FF FF */ addic r0, r3, -1 -/* 80034E1C 00031D5C 7C 60 19 10 */ subfe r3, r0, r3 -/* 80034E20 00031D60 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_onItem -dSv_zoneBit_c_NS_onItem: -/* 80034E24 00031D64 7C 80 26 70 */ srawi r0, r4, 4 -/* 80034E28 00031D68 54 00 08 3C */ slwi r0, r0, 1 -/* 80034E2C 00031D6C 7C C3 02 14 */ add r6, r3, r0 -/* 80034E30 00031D70 A0 A6 00 06 */ lhz r5, 6(r6) -/* 80034E34 00031D74 38 60 00 01 */ li r3, 1 -/* 80034E38 00031D78 54 80 07 3E */ clrlwi r0, r4, 0x1c -/* 80034E3C 00031D7C 7C 60 00 30 */ slw r0, r3, r0 -/* 80034E40 00031D80 54 00 04 3E */ clrlwi r0, r0, 0x10 -/* 80034E44 00031D84 7C A0 03 78 */ or r0, r5, r0 -/* 80034E48 00031D88 B0 06 00 06 */ sth r0, 6(r6) -/* 80034E4C 00031D8C 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_isItem -dSv_zoneBit_c_NS_isItem: -/* 80034E50 00031D90 7C 80 26 70 */ srawi r0, r4, 4 -/* 80034E54 00031D94 54 00 08 3C */ slwi r0, r0, 1 -/* 80034E58 00031D98 7C 63 02 14 */ add r3, r3, r0 -/* 80034E5C 00031D9C A0 A3 00 06 */ lhz r5, 6(r3) -/* 80034E60 00031DA0 38 60 00 01 */ li r3, 1 -/* 80034E64 00031DA4 54 80 07 3E */ clrlwi r0, r4, 0x1c -/* 80034E68 00031DA8 7C 60 00 30 */ slw r0, r3, r0 -/* 80034E6C 00031DAC 7C A3 00 38 */ and r3, r5, r0 -/* 80034E70 00031DB0 30 03 FF FF */ addic r0, r3, -1 -/* 80034E74 00031DB4 7C 60 19 10 */ subfe r3, r0, r3 -/* 80034E78 00031DB8 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_onOneItem -dSv_zoneBit_c_NS_onOneItem: -/* 80034E7C 00031DBC A0 A3 00 0A */ lhz r5, 0xa(r3) -/* 80034E80 00031DC0 38 00 00 01 */ li r0, 1 -/* 80034E84 00031DC4 7C 00 20 30 */ slw r0, r0, r4 -/* 80034E88 00031DC8 54 00 04 3E */ clrlwi r0, r0, 0x10 -/* 80034E8C 00031DCC 7C A0 03 78 */ or r0, r5, r0 -/* 80034E90 00031DD0 B0 03 00 0A */ sth r0, 0xa(r3) -/* 80034E94 00031DD4 4E 80 00 20 */ blr - -.global dSv_zoneBit_c_NS_isOneItem -dSv_zoneBit_c_NS_isOneItem: -/* 80034E98 00031DD8 A0 63 00 0A */ lhz r3, 0xa(r3) -/* 80034E9C 00031DDC 38 00 00 01 */ li r0, 1 -/* 80034EA0 00031DE0 7C 00 20 30 */ slw r0, r0, r4 -/* 80034EA4 00031DE4 7C 63 00 38 */ and r3, r3, r0 -/* 80034EA8 00031DE8 30 03 FF FF */ addic r0, r3, -1 -/* 80034EAC 00031DEC 7C 60 19 10 */ subfe r3, r0, r3 -/* 80034EB0 00031DF0 4E 80 00 20 */ blr - .global dSv_zoneActor_c_NS_init dSv_zoneActor_c_NS_init: /* 80034EB4 00031DF4 38 80 00 00 */ li r4, 0 @@ -414,7 +308,7 @@ lbl_80035284: /* 80035288 000321C8 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8003528C 000321CC 7C 7E 1A 14 */ add r3, r30, r3 /* 80035290 000321D0 38 9F FF 20 */ addi r4, r31, -224 -/* 80035294 000321D4 4B FF FB 19 */ bl dSv_zoneBit_c_NS_onOneSwitch +/* 80035294 000321D4 4B FF FB 19 */ bl onOneSwitch__13dSv_zoneBit_cFi lbl_80035298: /* 80035298 000321D8 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8003529C 000321DC 83 C1 00 08 */ lwz r30, 8(r1) @@ -466,7 +360,7 @@ lbl_80035334: /* 80035338 00032278 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8003533C 0003227C 7C 7E 1A 14 */ add r3, r30, r3 /* 80035340 00032280 38 9F FF 20 */ addi r4, r31, -224 -/* 80035344 00032284 4B FF FA 85 */ bl dSv_zoneBit_c_NS_offOneSwitch +/* 80035344 00032284 4B FF FA 85 */ bl offOneSwitch__13dSv_zoneBit_cFi lbl_80035348: /* 80035348 00032288 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8003534C 0003228C 83 C1 00 08 */ lwz r30, 8(r1) @@ -528,7 +422,7 @@ lbl_80035400: /* 80035404 00032344 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 80035408 00032348 7C 7E 1A 14 */ add r3, r30, r3 /* 8003540C 0003234C 38 9F FF 20 */ addi r4, r31, -224 -/* 80035410 00032350 4B FF F9 D1 */ bl dSv_zoneBit_c_NS_isOneSwitch +/* 80035410 00032350 4B FF F9 D1 */ bl isOneSwitch__13dSv_zoneBit_cCFi lbl_80035414: /* 80035414 00032354 83 E1 00 0C */ lwz r31, 0xc(r1) /* 80035418 00032358 83 C1 00 08 */ lwz r30, 8(r1) @@ -572,14 +466,14 @@ lbl_8003548C: /* 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 dSv_zoneBit_c_NS_revSwitch +/* 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 dSv_zoneBit_c_NS_revOneSwitch +/* 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) @@ -624,14 +518,14 @@ lbl_8003553C: /* 80035550 00032490 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 80035554 00032494 7C 7E 1A 14 */ add r3, r30, r3 /* 80035558 00032498 38 9F FF 60 */ addi r4, r31, -160 -/* 8003555C 0003249C 4B FF F8 C9 */ bl dSv_zoneBit_c_NS_onItem +/* 8003555C 0003249C 4B FF F8 C9 */ bl onItem__13dSv_zoneBit_cFi /* 80035560 000324A0 48 00 00 18 */ b lbl_80035578 lbl_80035564: /* 80035564 000324A4 54 63 28 34 */ slwi r3, r3, 5 /* 80035568 000324A8 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 8003556C 000324AC 7C 7E 1A 14 */ add r3, r30, r3 /* 80035570 000324B0 38 9F FF 40 */ addi r4, r31, -192 -/* 80035574 000324B4 4B FF F9 09 */ bl dSv_zoneBit_c_NS_onOneItem +/* 80035574 000324B4 4B FF F9 09 */ bl onOneItem__13dSv_zoneBit_cFi lbl_80035578: /* 80035578 000324B8 83 E1 00 0C */ lwz r31, 0xc(r1) /* 8003557C 000324BC 83 C1 00 08 */ lwz r30, 8(r1) @@ -678,14 +572,14 @@ lbl_800355F0: /* 80035604 00032544 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 80035608 00032548 7C 7E 1A 14 */ add r3, r30, r3 /* 8003560C 0003254C 38 9F FF 60 */ addi r4, r31, -160 -/* 80035610 00032550 4B FF F8 41 */ bl dSv_zoneBit_c_NS_isItem +/* 80035610 00032550 4B FF F8 41 */ bl isItem__13dSv_zoneBit_cCFi /* 80035614 00032554 48 00 00 18 */ b lbl_8003562C lbl_80035618: /* 80035618 00032558 54 63 28 34 */ slwi r3, r3, 5 /* 8003561C 0003255C 38 63 09 B6 */ addi r3, r3, 0x9b6 /* 80035620 00032560 7C 7E 1A 14 */ add r3, r30, r3 /* 80035624 00032564 38 9F FF 40 */ addi r4, r31, -192 -/* 80035628 00032568 4B FF F8 71 */ bl dSv_zoneBit_c_NS_isOneItem +/* 80035628 00032568 4B FF F8 71 */ bl isOneItem__13dSv_zoneBit_cCFi lbl_8003562C: /* 8003562C 0003256C 83 E1 00 0C */ lwz r31, 0xc(r1) /* 80035630 00032570 83 C1 00 08 */ lwz r30, 8(r1) diff --git a/include/d_save.h b/include/d_save.h index 364398702c0..2287dbf75ac 100644 --- a/include/d_save.h +++ b/include/d_save.h @@ -524,20 +524,20 @@ class dSv_zoneBit_c { void onSwitch(int); void offSwitch(int); bool isSwitch(int) const; - u8 revSwitch(int); + bool revSwitch(int); void onOneSwitch(int); void offOneSwitch(int); bool isOneSwitch(int) const; - u8 revOneSwitch(int); + bool revOneSwitch(int); void onItem(int); bool isItem(int) const; void onOneItem(int); bool isOneItem(int) const; private: - u16 unk0[2]; + u16 switch_bitfield[2]; u16 room_switch; - u16 unk6[2]; + u16 item_bitfield[2]; u16 room_item; u16 unk12; }; diff --git a/include/func_80034D78.s b/include/func_80034D78.s new file mode 100644 index 00000000000..f73d4f68ce5 --- /dev/null +++ b/include/func_80034D78.s @@ -0,0 +1,13 @@ +/* 80034D78 00031CB8 7C 86 26 70 */ srawi r6, r4, 4 +/* 80034D7C 00031CBC 38 A0 00 01 */ li r5, 1 +/* 80034D80 00031CC0 54 80 07 3E */ clrlwi r0, r4, 0x1c +/* 80034D84 00031CC4 7C A5 00 30 */ slw r5, r5, r0 +/* 80034D88 00031CC8 54 C4 08 3C */ slwi r4, r6, 1 +/* 80034D8C 00031CCC 7C 03 22 2E */ lhzx r0, r3, r4 +/* 80034D90 00031CD0 7C 00 2A 78 */ xor r0, r0, r5 +/* 80034D94 00031CD4 7C 03 23 2E */ sthx r0, r3, r4 +/* 80034D98 00031CD8 7C 03 22 2E */ lhzx r0, r3, r4 +/* 80034D9C 00031CDC 7C A3 00 38 */ and r3, r5, r0 +/* 80034DA0 00031CE0 30 03 FF FF */ addic r0, r3, -1 +/* 80034DA4 00031CE4 7C 60 19 10 */ subfe r3, r0, r3 +/* 80034DA8 00031CE8 4E 80 00 20 */ blr \ No newline at end of file diff --git a/src/d/d_save/d_save.cpp b/src/d/d_save/d_save.cpp index 4ad40f22118..e8f178f8a81 100644 --- a/src/d/d_save/d_save.cpp +++ b/src/d/d_save/d_save.cpp @@ -1115,12 +1115,12 @@ bool dSv_danBit_c::isItem(int param_1) const { void dSv_zoneBit_c::init(void) { for (int i = 0; i < 2; i++) { - this->unk0[i] = 0; + this->switch_bitfield[i] = 0; } for (int i = 0; i < 2; i++) { - this->unk6[i] = 0; + this->item_bitfield[i] = 0; } this->room_switch = 0; @@ -1136,16 +1136,61 @@ void dSv_zoneBit_c::clearRoomItem(void) { } void dSv_zoneBit_c::onSwitch(int param_1) { - this->unk0[param_1 >> 4] |= (u16)(1 << (param_1 & 0xF)); + this->switch_bitfield[param_1 >> 4] |= (u16)(1 << (param_1 & 0xF)); } -asm void dSv_zoneBit_c::offSwitch(int param_1) { +void dSv_zoneBit_c::offSwitch(int param_1) { + this->switch_bitfield[param_1 >> 4] &= ~(1 << (param_1 & 0xF)); +} + +bool dSv_zoneBit_c::isSwitch(int param_1) const { + return this->switch_bitfield[param_1 >> 4] & 1 << (param_1 & 0xF) ? true : false; +} + +// instruction in wrong place +#ifdef NONMATCHING +bool dSv_zoneBit_c::revSwitch(int param_1) { + int uVar1 = 1 << (param_1 & 0xF); + this->switch_bitfield[param_1 >> 4] ^= uVar1; + return this->switch_bitfield[param_1 >> 4] & uVar1 ? true : false; +} +#else +asm bool dSv_zoneBit_c::revSwitch(int param_1) { nofralloc - #include "func_80034D2C.s" + #include "func_80034D78.s" +} +#endif + +void dSv_zoneBit_c::onOneSwitch(int param_1) { + this->room_switch |= (u16)(1 << param_1); } -asm bool dSv_zoneBit_c::isSwitch(int param_1) const { - nofralloc - #include "func_80034D50.s" +void dSv_zoneBit_c::offOneSwitch(int param_1) { + this->room_switch &= ~(1 << param_1); } +bool dSv_zoneBit_c::isOneSwitch(int param_1) const { + return this->room_switch & 1 << param_1 ? true : false; +} + +bool dSv_zoneBit_c::revOneSwitch(int param_1) { + int iVar1 = 1 << param_1; + this->room_switch ^= iVar1; + return this->room_switch & iVar1 ? true : false; +} + +void dSv_zoneBit_c::onItem(int param_1) { + this->item_bitfield[param_1 >> 4] |= (u16)(1 << (param_1 & 0xF)); +} + +bool dSv_zoneBit_c::isItem(int param_1) const { + return this->item_bitfield[param_1 >> 4] & 1 << (param_1 & 0xF) ? true : false; +} + +void dSv_zoneBit_c::onOneItem(int param_1) { + this->room_item |= (u16)(1 << param_1); +} + +bool dSv_zoneBit_c::isOneItem(int param_1) const { + return this->room_item & 1 << param_1 ? true : false; +} \ No newline at end of file