diff --git a/asm/Game/zCombo.s b/asm/Game/zCombo.s index b62beaef0..9ca9e8bfa 100644 --- a/asm/Game/zCombo.s +++ b/asm/Game/zCombo.s @@ -77,17 +77,17 @@ lbl_801959F0: zCombo_Setup__Fv: /* 80195A00 00192800 94 21 FF D0 */ stwu r1, -0x30(r1) /* 80195A04 00192804 7C 08 02 A6 */ mflr r0 -/* 80195A08 00192808 3C 60 80 27 */ lis r3, lbl_80274A00@ha +/* 80195A08 00192808 3C 60 80 27 */ lis r3, zCombo_Strings@ha /* 80195A0C 0019280C 90 01 00 34 */ stw r0, 0x34(r1) -/* 80195A10 00192810 38 63 4A 00 */ addi r3, r3, lbl_80274A00@l +/* 80195A10 00192810 38 63 4A 00 */ addi r3, r3, zCombo_Strings@l /* 80195A14 00192814 38 00 00 00 */ li r0, 0 /* 80195A18 00192818 BE E1 00 0C */ stmw r23, 0xc(r1) /* 80195A1C 0019281C 38 63 00 C1 */ addi r3, r3, 0xc1 -/* 80195A20 00192820 90 0D 98 E0 */ stw r0, lbl_803CC1E0-_SDA_BASE_(r13) -/* 80195A24 00192824 90 0D 98 DC */ stw r0, lbl_803CC1DC-_SDA_BASE_(r13) -/* 80195A28 00192828 90 0D 98 D8 */ stw r0, lbl_803CC1D8-_SDA_BASE_(r13) -/* 80195A2C 0019282C C0 02 B2 60 */ lfs f0, lbl_803CFBE0-_SDA2_BASE_(r2) -/* 80195A30 00192830 D0 0D 98 E4 */ stfs f0, lbl_803CC1E4-_SDA_BASE_(r13) +/* 80195A20 00192820 90 0D 98 E0 */ stw r0, zCombo_int32_3-_SDA_BASE_(r13) +/* 80195A24 00192824 90 0D 98 DC */ stw r0, zCombo_int32_2-_SDA_BASE_(r13) +/* 80195A28 00192828 90 0D 98 D8 */ stw r0, zCombo_int32_1-_SDA_BASE_(r13) +/* 80195A2C 0019282C C0 02 B2 60 */ lfs f0, zCombo_float_minusone-_SDA2_BASE_(r2) +/* 80195A30 00192830 D0 0D 98 E4 */ stfs f0, zCombo_float32_3-_SDA_BASE_(r13) /* 80195A34 00192834 4B EB 67 E1 */ bl xStrHash__FPCc /* 80195A38 00192838 4B F1 F0 05 */ bl zSceneFindObject__FUi /* 80195A3C 0019283C 90 6D 98 D0 */ stw r3, comboHUD-_SDA_BASE_(r13) @@ -100,9 +100,9 @@ zCombo_Setup__Fv: /* 80195A58 00192858 38 63 00 10 */ addi r3, r3, 0x10 /* 80195A5C 0019285C 4B E9 87 0D */ bl hide__Q24xhud6widgetFv lbl_80195A60: -/* 80195A60 00192860 3C 60 80 2A */ lis r3, lbl_802A1B88@ha +/* 80195A60 00192860 3C 60 80 2A */ lis r3, comboReward@ha /* 80195A64 00192864 3B 00 00 00 */ li r24, 0 -/* 80195A68 00192868 3B E3 1B 88 */ addi r31, r3, lbl_802A1B88@l +/* 80195A68 00192868 3B E3 1B 88 */ addi r31, r3, comboReward@l /* 80195A6C 0019286C 7F F7 FB 78 */ mr r23, r31 lbl_80195A70: /* 80195A70 00192870 80 77 00 04 */ lwz r3, 4(r23) @@ -115,10 +115,10 @@ lbl_80195A70: /* 80195A8C 0019288C 3A F7 00 38 */ addi r23, r23, 0x38 /* 80195A90 00192890 41 80 FF E0 */ blt lbl_80195A70 /* 80195A94 00192894 3C 80 80 3C */ lis r4, globals@ha -/* 80195A98 00192898 3C 60 80 2A */ lis r3, lbl_802A1B88@ha +/* 80195A98 00192898 3C 60 80 2A */ lis r3, comboReward@ha /* 80195A9C 0019289C 3A E4 05 58 */ addi r23, r4, globals@l /* 80195AA0 001928A0 3B C0 00 00 */ li r30, 0 -/* 80195AA4 001928A4 3B 23 1B 88 */ addi r25, r3, lbl_802A1B88@l +/* 80195AA4 001928A4 3B 23 1B 88 */ addi r25, r3, comboReward@l /* 80195AA8 001928A8 83 17 08 9C */ lwz r24, 0x89c(r23) /* 80195AAC 001928AC 83 57 08 A0 */ lwz r26, 0x8a0(r23) /* 80195AB0 001928B0 83 77 08 A4 */ lwz r27, 0x8a4(r23) @@ -152,7 +152,7 @@ lbl_80195A70: /* 80195B20 00192920 90 99 02 D8 */ stw r4, 0x2d8(r25) /* 80195B24 00192924 90 79 03 10 */ stw r3, 0x310(r25) /* 80195B28 00192928 90 19 03 48 */ stw r0, 0x348(r25) -/* 80195B2C 0019292C D0 0D 84 C8 */ stfs f0, lbl_803CADC8-_SDA_BASE_(r13) +/* 80195B2C 0019292C D0 0D 84 C8 */ stfs f0, zCombo_float32_1-_SDA_BASE_(r13) lbl_80195B30: /* 80195B30 00192930 7F E3 FB 78 */ mr r3, r31 /* 80195B34 00192934 4B FF FD D9 */ bl fillCombo__FP12zComboReward @@ -160,51 +160,51 @@ lbl_80195B30: /* 80195B3C 0019293C 3B FF 00 38 */ addi r31, r31, 0x38 /* 80195B40 00192940 2C 1E 00 10 */ cmpwi r30, 0x10 /* 80195B44 00192944 41 80 FF EC */ blt lbl_80195B30 -/* 80195B48 00192948 3C 60 80 27 */ lis r3, lbl_80274A00@ha -/* 80195B4C 0019294C 38 63 4A 00 */ addi r3, r3, lbl_80274A00@l +/* 80195B48 00192948 3C 60 80 27 */ lis r3, zCombo_Strings@ha +/* 80195B4C 0019294C 38 63 4A 00 */ addi r3, r3, zCombo_Strings@l /* 80195B50 00192950 38 63 00 D7 */ addi r3, r3, 0xd7 /* 80195B54 00192954 4B EB 66 C1 */ bl xStrHash__FPCc /* 80195B58 00192958 4B F1 EE E5 */ bl zSceneFindObject__FUi -/* 80195B5C 0019295C 3C A0 80 36 */ lis r5, lbl_80362B74@ha -/* 80195B60 00192960 3C 80 80 27 */ lis r4, lbl_80274A00@ha -/* 80195B64 00192964 90 65 2B 74 */ stw r3, lbl_80362B74@l(r5) -/* 80195B68 00192968 38 64 4A 00 */ addi r3, r4, lbl_80274A00@l +/* 80195B5C 0019295C 3C A0 80 36 */ lis r5, sHideText@ha +/* 80195B60 00192960 3C 80 80 27 */ lis r4, zCombo_Strings@ha +/* 80195B64 00192964 90 65 2B 74 */ stw r3, sHideText@l(r5) +/* 80195B68 00192968 38 64 4A 00 */ addi r3, r4, zCombo_Strings@l /* 80195B6C 0019296C 38 63 00 EB */ addi r3, r3, 0xeb /* 80195B70 00192970 4B EB 66 A5 */ bl xStrHash__FPCc /* 80195B74 00192974 4B F1 EE C9 */ bl zSceneFindObject__FUi -/* 80195B78 00192978 3C A0 80 36 */ lis r5, lbl_80362B74@ha -/* 80195B7C 0019297C 3C 80 80 27 */ lis r4, lbl_80274A00@ha -/* 80195B80 00192980 38 A5 2B 74 */ addi r5, r5, lbl_80362B74@l +/* 80195B78 00192978 3C A0 80 36 */ lis r5, sHideText@ha +/* 80195B7C 0019297C 3C 80 80 27 */ lis r4, zCombo_Strings@ha +/* 80195B80 00192980 38 A5 2B 74 */ addi r5, r5, sHideText@l /* 80195B84 00192984 90 65 00 04 */ stw r3, 4(r5) -/* 80195B88 00192988 38 64 4A 00 */ addi r3, r4, lbl_80274A00@l +/* 80195B88 00192988 38 64 4A 00 */ addi r3, r4, zCombo_Strings@l /* 80195B8C 0019298C 38 63 00 FA */ addi r3, r3, 0xfa /* 80195B90 00192990 4B EB 66 85 */ bl xStrHash__FPCc /* 80195B94 00192994 4B F1 EE A9 */ bl zSceneFindObject__FUi -/* 80195B98 00192998 3C A0 80 36 */ lis r5, lbl_80362B74@ha -/* 80195B9C 0019299C 3C 80 80 27 */ lis r4, lbl_80274A00@ha -/* 80195BA0 001929A0 38 A5 2B 74 */ addi r5, r5, lbl_80362B74@l +/* 80195B98 00192998 3C A0 80 36 */ lis r5, sHideText@ha +/* 80195B9C 0019299C 3C 80 80 27 */ lis r4, zCombo_Strings@ha +/* 80195BA0 001929A0 38 A5 2B 74 */ addi r5, r5, sHideText@l /* 80195BA4 001929A4 90 65 00 08 */ stw r3, 8(r5) -/* 80195BA8 001929A8 38 64 4A 00 */ addi r3, r4, lbl_80274A00@l +/* 80195BA8 001929A8 38 64 4A 00 */ addi r3, r4, zCombo_Strings@l /* 80195BAC 001929AC 38 63 01 0D */ addi r3, r3, 0x10d /* 80195BB0 001929B0 4B EB 66 65 */ bl xStrHash__FPCc /* 80195BB4 001929B4 4B F1 EE 89 */ bl zSceneFindObject__FUi -/* 80195BB8 001929B8 3C A0 80 36 */ lis r5, lbl_80362B74@ha -/* 80195BBC 001929BC 3C 80 80 27 */ lis r4, lbl_80274A00@ha -/* 80195BC0 001929C0 38 A5 2B 74 */ addi r5, r5, lbl_80362B74@l +/* 80195BB8 001929B8 3C A0 80 36 */ lis r5, sHideText@ha +/* 80195BBC 001929BC 3C 80 80 27 */ lis r4, zCombo_Strings@ha +/* 80195BC0 001929C0 38 A5 2B 74 */ addi r5, r5, sHideText@l /* 80195BC4 001929C4 90 65 00 0C */ stw r3, 0xc(r5) -/* 80195BC8 001929C8 38 64 4A 00 */ addi r3, r4, lbl_80274A00@l +/* 80195BC8 001929C8 38 64 4A 00 */ addi r3, r4, zCombo_Strings@l /* 80195BCC 001929CC 38 63 01 1C */ addi r3, r3, 0x11c /* 80195BD0 001929D0 4B EB 66 45 */ bl xStrHash__FPCc /* 80195BD4 001929D4 4B F1 EE 69 */ bl zSceneFindObject__FUi -/* 80195BD8 001929D8 3C A0 80 36 */ lis r5, lbl_80362B74@ha -/* 80195BDC 001929DC 3C 80 80 27 */ lis r4, lbl_80274A00@ha -/* 80195BE0 001929E0 38 A5 2B 74 */ addi r5, r5, lbl_80362B74@l +/* 80195BD8 001929D8 3C A0 80 36 */ lis r5, sHideText@ha +/* 80195BDC 001929DC 3C 80 80 27 */ lis r4, zCombo_Strings@ha +/* 80195BE0 001929E0 38 A5 2B 74 */ addi r5, r5, sHideText@l /* 80195BE4 001929E4 90 65 00 10 */ stw r3, 0x10(r5) -/* 80195BE8 001929E8 38 64 4A 00 */ addi r3, r4, lbl_80274A00@l +/* 80195BE8 001929E8 38 64 4A 00 */ addi r3, r4, zCombo_Strings@l /* 80195BEC 001929EC 38 63 01 29 */ addi r3, r3, 0x129 /* 80195BF0 001929F0 4B EB 66 25 */ bl xStrHash__FPCc /* 80195BF4 001929F4 4B F1 EE 49 */ bl zSceneFindObject__FUi -/* 80195BF8 001929F8 90 6D 98 D4 */ stw r3, lbl_803CC1D4-_SDA_BASE_(r13) +/* 80195BF8 001929F8 90 6D 98 D4 */ stw r3, sHideUIF-_SDA_BASE_(r13) /* 80195BFC 001929FC BA E1 00 0C */ lmw r23, 0xc(r1) /* 80195C00 00192A00 80 01 00 34 */ lwz r0, 0x34(r1) /* 80195C04 00192A04 7C 08 03 A6 */ mtlr r0 @@ -213,29 +213,29 @@ lbl_80195B30: .global zCombo_Add__Fi zCombo_Add__Fi: -/* 80195C10 00192A10 C0 2D 98 E4 */ lfs f1, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195C14 00192A14 C0 02 B2 64 */ lfs f0, lbl_803CFBE4-_SDA2_BASE_(r2) +/* 80195C10 00192A10 C0 2D 98 E4 */ lfs f1, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195C14 00192A14 C0 02 B2 64 */ lfs f0, zCombo_float_zero-_SDA2_BASE_(r2) /* 80195C18 00192A18 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 80195C1C 00192A1C 40 80 00 18 */ bge lbl_80195C34 -/* 80195C20 00192A20 C0 0D 84 C8 */ lfs f0, lbl_803CADC8-_SDA_BASE_(r13) +/* 80195C20 00192A20 C0 0D 84 C8 */ lfs f0, zCombo_float32_1-_SDA_BASE_(r13) /* 80195C24 00192A24 38 03 FF FF */ addi r0, r3, -1 -/* 80195C28 00192A28 D0 0D 98 E4 */ stfs f0, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195C2C 00192A2C 90 0D 98 D8 */ stw r0, lbl_803CC1D8-_SDA_BASE_(r13) +/* 80195C28 00192A28 D0 0D 98 E4 */ stfs f0, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195C2C 00192A2C 90 0D 98 D8 */ stw r0, zCombo_int32_1-_SDA_BASE_(r13) /* 80195C30 00192A30 4E 80 00 20 */ blr lbl_80195C34: -/* 80195C34 00192A34 C0 0D 84 C8 */ lfs f0, lbl_803CADC8-_SDA_BASE_(r13) -/* 80195C38 00192A38 D0 0D 98 E4 */ stfs f0, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195C3C 00192A3C 80 0D 98 E0 */ lwz r0, lbl_803CC1E0-_SDA_BASE_(r13) +/* 80195C34 00192A34 C0 0D 84 C8 */ lfs f0, zCombo_float32_1-_SDA_BASE_(r13) +/* 80195C38 00192A38 D0 0D 98 E4 */ stfs f0, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195C3C 00192A3C 80 0D 98 E0 */ lwz r0, zCombo_int32_3-_SDA_BASE_(r13) /* 80195C40 00192A40 7C 00 1A 14 */ add r0, r0, r3 -/* 80195C44 00192A44 90 0D 98 E0 */ stw r0, lbl_803CC1E0-_SDA_BASE_(r13) -/* 80195C48 00192A48 80 8D 98 D8 */ lwz r4, lbl_803CC1D8-_SDA_BASE_(r13) +/* 80195C44 00192A44 90 0D 98 E0 */ stw r0, zCombo_int32_3-_SDA_BASE_(r13) +/* 80195C48 00192A48 80 8D 98 D8 */ lwz r4, zCombo_int32_1-_SDA_BASE_(r13) /* 80195C4C 00192A4C 2C 04 00 00 */ cmpwi r4, 0 /* 80195C50 00192A50 4D 82 00 20 */ beqlr -/* 80195C54 00192A54 80 6D 98 E0 */ lwz r3, lbl_803CC1E0-_SDA_BASE_(r13) +/* 80195C54 00192A54 80 6D 98 E0 */ lwz r3, zCombo_int32_3-_SDA_BASE_(r13) /* 80195C58 00192A58 38 00 00 00 */ li r0, 0 /* 80195C5C 00192A5C 7C 63 22 14 */ add r3, r3, r4 -/* 80195C60 00192A60 90 6D 98 E0 */ stw r3, lbl_803CC1E0-_SDA_BASE_(r13) -/* 80195C64 00192A64 90 0D 98 D8 */ stw r0, lbl_803CC1D8-_SDA_BASE_(r13) +/* 80195C60 00192A60 90 6D 98 E0 */ stw r3, zCombo_int32_3-_SDA_BASE_(r13) +/* 80195C64 00192A64 90 0D 98 D8 */ stw r0, zCombo_int32_1-_SDA_BASE_(r13) /* 80195C68 00192A68 4E 80 00 20 */ blr zComboHideMessage__FRQ24xhud6widgetRQ24xhud6motive: @@ -282,17 +282,17 @@ zCombo_Update__Ff: /* 80195CF4 00192AF4 38 63 2B 68 */ addi r3, r3, lbl_80362B68@l /* 80195CF8 00192AF8 38 84 00 24 */ addi r4, r4, 0x24 /* 80195CFC 00192AFC 4B E7 F3 5D */ bl xVec3AddScaled__FP5xVec3PC5xVec3f -/* 80195D00 00192B00 80 8D 98 E0 */ lwz r4, lbl_803CC1E0-_SDA_BASE_(r13) +/* 80195D00 00192B00 80 8D 98 E0 */ lwz r4, zCombo_int32_3-_SDA_BASE_(r13) /* 80195D04 00192B04 2C 04 00 10 */ cmpwi r4, 0x10 /* 80195D08 00192B08 7C 9F 23 78 */ mr r31, r4 /* 80195D0C 00192B0C 41 80 00 08 */ blt lbl_80195D14 /* 80195D10 00192B10 3B E0 00 0F */ li r31, 0xf lbl_80195D14: -/* 80195D14 00192B14 80 0D 98 DC */ lwz r0, lbl_803CC1DC-_SDA_BASE_(r13) -/* 80195D18 00192B18 3C 60 80 2A */ lis r3, lbl_802A1B88@ha +/* 80195D14 00192B14 80 0D 98 DC */ lwz r0, zCombo_int32_2-_SDA_BASE_(r13) +/* 80195D18 00192B18 3C 60 80 2A */ lis r3, comboReward@ha /* 80195D1C 00192B1C 1C BF 00 38 */ mulli r5, r31, 0x38 /* 80195D20 00192B20 7C 00 20 00 */ cmpw r0, r4 -/* 80195D24 00192B24 38 03 1B 88 */ addi r0, r3, lbl_802A1B88@l +/* 80195D24 00192B24 38 03 1B 88 */ addi r0, r3, comboReward@l /* 80195D28 00192B28 7F C0 2A 14 */ add r30, r0, r5 /* 80195D2C 00192B2C 41 82 00 40 */ beq lbl_80195D6C /* 80195D30 00192B30 80 1E 00 00 */ lwz r0, 0(r30) @@ -309,12 +309,12 @@ lbl_80195D14: /* 80195D5C 00192B5C 38 63 00 10 */ addi r3, r3, 0x10 /* 80195D60 00192B60 4B E9 82 75 */ bl show__Q24xhud6widgetFv lbl_80195D64: -/* 80195D64 00192B64 80 0D 98 E0 */ lwz r0, lbl_803CC1E0-_SDA_BASE_(r13) -/* 80195D68 00192B68 90 0D 98 DC */ stw r0, lbl_803CC1DC-_SDA_BASE_(r13) +/* 80195D64 00192B64 80 0D 98 E0 */ lwz r0, zCombo_int32_3-_SDA_BASE_(r13) +/* 80195D68 00192B68 90 0D 98 DC */ stw r0, zCombo_int32_2-_SDA_BASE_(r13) lbl_80195D6C: -/* 80195D6C 00192B6C 3C 60 80 36 */ lis r3, lbl_80362B74@ha +/* 80195D6C 00192B6C 3C 60 80 36 */ lis r3, sHideText@ha /* 80195D70 00192B70 3B 80 00 00 */ li r28, 0 -/* 80195D74 00192B74 3B A3 2B 74 */ addi r29, r3, lbl_80362B74@l +/* 80195D74 00192B74 3B A3 2B 74 */ addi r29, r3, sHideText@l lbl_80195D78: /* 80195D78 00192B78 80 7D 00 00 */ lwz r3, 0(r29) /* 80195D7C 00192B7C 28 03 00 00 */ cmplwi r3, 0 @@ -332,7 +332,7 @@ lbl_80195DA0: /* 80195DA8 00192BA8 2C 1C 00 05 */ cmpwi r28, 5 /* 80195DAC 00192BAC 41 80 FF CC */ blt lbl_80195D78 lbl_80195DB0: -/* 80195DB0 00192BB0 80 6D 98 D4 */ lwz r3, lbl_803CC1D4-_SDA_BASE_(r13) +/* 80195DB0 00192BB0 80 6D 98 D4 */ lwz r3, sHideUIF-_SDA_BASE_(r13) /* 80195DB4 00192BB4 28 03 00 00 */ cmplwi r3, 0 /* 80195DB8 00192BB8 41 82 00 1C */ beq lbl_80195DD4 /* 80195DBC 00192BBC 4B E7 88 7D */ bl xEntIsVisible__FPC4xEnt @@ -342,15 +342,15 @@ lbl_80195DB0: /* 80195DCC 00192BCC 38 00 00 00 */ li r0, 0 /* 80195DD0 00192BD0 98 03 00 94 */ stb r0, 0x94(r3) lbl_80195DD4: -/* 80195DD4 00192BD4 C0 2D 98 E4 */ lfs f1, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195DD8 00192BD8 C0 02 B2 64 */ lfs f0, lbl_803CFBE4-_SDA2_BASE_(r2) +/* 80195DD4 00192BD4 C0 2D 98 E4 */ lfs f1, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195DD8 00192BD8 C0 02 B2 64 */ lfs f0, zCombo_float_zero-_SDA2_BASE_(r2) /* 80195DDC 00192BDC FC 01 00 40 */ fcmpo cr0, f1, f0 /* 80195DE0 00192BE0 4C 41 13 82 */ cror 2, 1, 2 /* 80195DE4 00192BE4 40 82 01 D0 */ bne lbl_80195FB4 /* 80195DE8 00192BE8 EC 01 F8 28 */ fsubs f0, f1, f31 -/* 80195DEC 00192BEC D0 0D 98 E4 */ stfs f0, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195DF0 00192BF0 C0 2D 98 E4 */ lfs f1, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195DF4 00192BF4 C0 02 B2 64 */ lfs f0, lbl_803CFBE4-_SDA2_BASE_(r2) +/* 80195DEC 00192BEC D0 0D 98 E4 */ stfs f0, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195DF0 00192BF0 C0 2D 98 E4 */ lfs f1, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195DF4 00192BF4 C0 02 B2 64 */ lfs f0, zCombo_float_zero-_SDA2_BASE_(r2) /* 80195DF8 00192BF8 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 80195DFC 00192BFC 40 80 01 B8 */ bge lbl_80195FB4 /* 80195E00 00192C00 80 1E 00 00 */ lwz r0, 0(r30) @@ -444,7 +444,7 @@ lbl_80195F5C: /* 80195F5C 00192D5C 80 0D 98 D0 */ lwz r0, comboHUD-_SDA_BASE_(r13) /* 80195F60 00192D60 28 00 00 00 */ cmplwi r0, 0 /* 80195F64 00192D64 41 82 00 3C */ beq lbl_80195FA0 -/* 80195F68 00192D68 C0 22 B2 64 */ lfs f1, lbl_803CFBE4-_SDA2_BASE_(r2) +/* 80195F68 00192D68 C0 22 B2 64 */ lfs f1, zCombo_float_zero-_SDA2_BASE_(r2) /* 80195F6C 00192D6C 3C 80 80 03 */ lis r4, delay_motive_update__4xhudFRQ24xhud6widgetRQ24xhud6motivef@ha /* 80195F70 00192D70 3C 60 80 19 */ lis r3, zComboHideMessage__FRQ24xhud6widgetRQ24xhud6motive@ha /* 80195F74 00192D74 C0 4D 84 CC */ lfs f2, lbl_803CADCC-_SDA_BASE_(r13) @@ -459,11 +459,11 @@ lbl_80195F5C: /* 80195F98 00192D98 38 65 00 10 */ addi r3, r5, 0x10 /* 80195F9C 00192D9C 4B E9 85 E9 */ bl add_motive__Q24xhud6widgetFRCQ24xhud6motive lbl_80195FA0: -/* 80195FA0 00192DA0 C0 02 B2 60 */ lfs f0, lbl_803CFBE0-_SDA2_BASE_(r2) +/* 80195FA0 00192DA0 C0 02 B2 60 */ lfs f0, zCombo_float_minusone-_SDA2_BASE_(r2) /* 80195FA4 00192DA4 38 00 00 00 */ li r0, 0 -/* 80195FA8 00192DA8 D0 0D 98 E4 */ stfs f0, lbl_803CC1E4-_SDA_BASE_(r13) -/* 80195FAC 00192DAC 90 0D 98 E0 */ stw r0, lbl_803CC1E0-_SDA_BASE_(r13) -/* 80195FB0 00192DB0 90 0D 98 DC */ stw r0, lbl_803CC1DC-_SDA_BASE_(r13) +/* 80195FA8 00192DA8 D0 0D 98 E4 */ stfs f0, zCombo_float32_3-_SDA_BASE_(r13) +/* 80195FAC 00192DAC 90 0D 98 E0 */ stw r0, zCombo_int32_3-_SDA_BASE_(r13) +/* 80195FB0 00192DB0 90 0D 98 DC */ stw r0, zCombo_int32_2-_SDA_BASE_(r13) lbl_80195FB4: /* 80195FB4 00192DB4 E3 E1 00 48 */ psq_l f31, 72(r1), 0, qr0 /* 80195FB8 00192DB8 80 01 00 54 */ lwz r0, 0x54(r1) @@ -485,19 +485,24 @@ visible__8ztextboxFv: .endif .section .rodata -lbl_80274A00: +.global zCombo_Strings +zCombo_Strings: .incbin "baserom.dol", 0x2719E0, 0x138 .section .data -lbl_802A1B88: +.global comboReward +comboReward: .incbin "baserom.dol", 0x29EB68, 0x380 + lbl_802A1F08: .incbin "baserom.dol", 0x29EEE8, 0x2C .section .bss lbl_80362B68: .skip 0xC -lbl_80362B74: + +.global sHideText +sHideText: .skip 0x14 /* SPECULATION: link order */ .global lbl_80362B88 @@ -521,20 +526,34 @@ lbl_80363888: .skip 0x500 .section .sbss -lbl_803CC1D4: +.global sHideUIF +sHideUIF: .skip 0x4 -lbl_803CC1D8: + +.global zCombo_int32_1 +zCombo_int32_1: .skip 0x4 -lbl_803CC1DC: + +.global zCombo_int32_2 +zCombo_int32_2: .skip 0x4 -lbl_803CC1E0: + +.global zCombo_int32_3 +zCombo_int32_3: .skip 0x4 -lbl_803CC1E4: + +.global zCombo_float32_3 +zCombo_float32_3: .skip 0x4 + .section .sdata -lbl_803CADC8: + +.global zCombo_float32_1 +zCombo_float32_1: + /* Initial value: 1.0f */ .incbin "baserom.dol", 0x2B5E88, 0x4 + lbl_803CADCC: .incbin "baserom.dol", 0x2B5E8C, 0x4 /* SPECULATION: link order */ @@ -543,10 +562,17 @@ dtscale: .incbin "baserom.dol", 0x2B5E90, 0x4 .section .sdata2 -lbl_803CFBE0: + +/* = -1.0f */ +.global zCombo_float_minusone +zCombo_float_minusone: .incbin "baserom.dol", 0x2B9480, 0x4 -lbl_803CFBE4: + +/* = 0.0f */ +.global zCombo_float_zero +zCombo_float_zero: .incbin "baserom.dol", 0x2B9484, 0x4 + lbl_803CFBE8: .incbin "baserom.dol", 0x2B9488, 0x4 lbl_803CFBEC: diff --git a/src/Core/x/xFont.h b/src/Core/x/xFont.h index c2ab9d5c0..acd425388 100644 --- a/src/Core/x/xFont.h +++ b/src/Core/x/xFont.h @@ -5,6 +5,11 @@ #include "../p2/iColor.h" #include "xString.h" +struct xTextAsset +{ + uint32 len; +}; + struct xfont { uint32 id; diff --git a/src/Core/x/xGlobals.h b/src/Core/x/xGlobals.h index 918230cd3..ec8769bb0 100644 --- a/src/Core/x/xGlobals.h +++ b/src/Core/x/xGlobals.h @@ -12,32 +12,41 @@ struct xGlobals { - xCamera camera; - _tagxPad* pad0; - _tagxPad* pad1; - _tagxPad* pad2; - _tagxPad* pad3; - int32 profile; - char profFunc[6][128]; - xUpdateCullMgr* updateMgr; - int32 sceneFirst; - char sceneStart[32]; - RpWorld* currWorld; - iFogParams fog; - iFogParams fogA; - iFogParams fogB; - iTime fog_t0; - iTime fog_t1; - int32 option_vibration; - uint32 QuarterSpeed; - float32 update_dt; - int32 useHIPHOP; - uint8 NoMusic; - int8 currentActivePad; - uint8 firstStartPressed; - uint32 minVSyncCnt; - uint8 dontShowPadMessageDuringLoadingOrCutScene; - uint8 autoSaveFeature; + // 0x00 in globals + xCamera camera; + + // 0x31C in globals + _tagxPad* pad0; + _tagxPad* pad1; + _tagxPad* pad2; + _tagxPad* pad3; + int32 profile; + + // 0x330 in globals + char profFunc[6][128]; + + // 0x630 in globals + xUpdateCullMgr* updateMgr; + int32 sceneFirst; + char sceneStart[32]; + RpWorld* currWorld; + + // 0x65C in globals + iFogParams fog; + iFogParams fogA; + iFogParams fogB; + iTime fog_t0; + iTime fog_t1; + int32 option_vibration; + uint32 QuarterSpeed; + float32 update_dt; + int32 useHIPHOP; + uint8 NoMusic; + int8 currentActivePad; + uint8 firstStartPressed; + uint32 minVSyncCnt; + uint8 dontShowPadMessageDuringLoadingOrCutScene; + uint8 autoSaveFeature; }; #endif \ No newline at end of file diff --git a/src/Core/x/xHud.h b/src/Core/x/xHud.h index f4d532ef4..b0e063979 100644 --- a/src/Core/x/xHud.h +++ b/src/Core/x/xHud.h @@ -1,6 +1,83 @@ #ifndef XHUD_H #define XHUD_H +#include "xBase.h" +#include "xVec3.h" +typedef struct asset; +typedef struct widget; + +namespace xhud +{ + struct render_context + { + xVec3 loc; + xVec3 size; + xVec3 rot; + float32 r; + float32 g; + float32 b; + float32 a; + }; + + struct motive + { + float32* value; + float32 delta; + float32 start_delta; + float32 max_offset; + float32 offset; + float32 accel; + uint8 (*fp_update)(widget&, motive&, float32); + void* context; + uint8 inverse; + }; + + struct motive_node + { + motive m; + motive_node* next; + }; + + struct _class_5 + { + uint8 visible; + uint8 enabled; + }; + + enum _enum + { + ACT_NONE, + ACT_SHOW, + ACT_HIDE, + MAX_ACT + }; + + struct widget + { + _class_5 flag; + render_context rc; + render_context start_rc; + asset* a; + _enum activity; + motive_node* _motive_top; + motive_node* _motive_temp; + motive_node** _motive_temp_tail; + + widget(asset& a); + void setup(); + void enable(); + void update(float32 dt); + void dispatch(uint32 event); + void clear_motives(uint8 (*fp_update)(widget&, motive&, float32), void* context); + void add_motive(motive& m); + void hide(); + void show(); + void updater(float32 dt); + void presetup(); + void destruct(); + }; + +}; // namespace xhud #endif \ No newline at end of file diff --git a/src/Core/x/xHudText.h b/src/Core/x/xHudText.h index 6bccd90de..8b530c363 100644 --- a/src/Core/x/xHudText.h +++ b/src/Core/x/xHudText.h @@ -1,6 +1,23 @@ #ifndef XHUDTEXT_H #define XHUDTEXT_H +#include "xHud.h" +#include "xFont.h" +namespace xhud +{ + struct text_widget : widget + { + int8 text[128]; + xtextbox tb; + + void render(); + void update(float32 dt); + uint8 is(uint32 id); + void destroy(); + void setup(); + }; + +}; // namespace xhud #endif \ No newline at end of file diff --git a/src/Game/zCombo.cpp b/src/Game/zCombo.cpp index 3724c0448..2a14f938f 100644 --- a/src/Game/zCombo.cpp +++ b/src/Game/zCombo.cpp @@ -2,23 +2,209 @@ #include +#include "../Core/x/xBase.h" +#include "../Core/x/xHudText.h" +#include "../Core/x/xstransvc.h" +#include "zGlobals.h" +#include "zTextBox.h" + +extern const int8 zCombo_Strings[]; +extern const float32 zCombo_float_zero; +extern const float32 zCombo_float_minusone; + +struct zComboReward +{ + int32 reward; + int8* textName; + uint32 rewardList[10]; + uint32 rewardNum; + xTextAsset* textAsset; +}; + +// TODO: Something is wrong with this struct. It looks like the debug symbols +// for the xhud header files may be somewhat wrong in some places. +struct widget_chunk : xBase +{ + xhud::text_widget w; +}; + +extern widget_chunk* comboHUD; + +extern zComboReward comboReward[16]; + +extern int32 zCombo_int32_1; // probably comboPending +extern int32 zCombo_int32_2; // probably comboLastCounter +extern int32 zCombo_int32_3; // probably comboCounter + +extern float32 zCombo_float32_1; // probably comboMaxTime +extern float32 zCombo_float32_3; // probably comboTimer + +extern xBase* sHideText[5]; +extern xBase* sHideUIF[1]; + // func_8019590C -#pragma GLOBAL_ASM("asm/Game/zCombo.s", "fillCombo__FP12zComboReward") +void fillCombo(zComboReward* reward) +{ + int32 rewardLeft = reward->reward; + int32 j = 0; + + while (rewardLeft > 0) + { + if (rewardLeft >= globals.player.g.ShinyValuePurple) + { + reward->rewardList[j++] = 0; + rewardLeft -= globals.player.g.ShinyValuePurple; + } + else if (rewardLeft >= globals.player.g.ShinyValueBlue) + { + reward->rewardList[j++] = 1; + rewardLeft -= globals.player.g.ShinyValueBlue; + } + else if (rewardLeft >= globals.player.g.ShinyValueGreen) + { + reward->rewardList[j++] = 2; + rewardLeft -= globals.player.g.ShinyValueGreen; + } + else if (rewardLeft >= globals.player.g.ShinyValueYellow) + { + reward->rewardList[j++] = 3; + rewardLeft -= globals.player.g.ShinyValueYellow; + } + else + { + reward->rewardList[j++] = 4; + rewardLeft -= globals.player.g.ShinyValueRed; + } + } + + reward->rewardNum = j; +} // func_80195A00 +#if 1 #pragma GLOBAL_ASM("asm/Game/zCombo.s", "zCombo_Setup__Fv") +#else +// Can't get the floating point instructions to go in the right order +// the zCombo_float32_3 = zCombo_float_minusone always gets lifted to the +// start regardless of what order the code is in, despite it remaining +// after the other assignments in the original assembly. +void zCombo_Setup() +{ + zCombo_int32_3 = 0; + zCombo_int32_2 = 0; + zCombo_int32_1 = 0; + zCombo_float32_3 = zCombo_float_minusone; + + // "HUD_TEXT_COMBOMESSAGE" + uint32 id = xStrHash(zCombo_Strings + 0xc1); + comboHUD = (widget_chunk*)zSceneFindObject(id); + + // Junk to make the size match temporarily, REMOVE THIS + zCombo_int32_3 = 6; + + if (comboHUD != NULL) + { + comboHUD->w.enable(); + comboHUD->w.hide(); + } + + for (int i = 0; i < 16; ++i) + { + id = xStrHash(comboReward[i].textName); + comboReward[i].textAsset = (xTextAsset*)xSTFindAsset(id, 0); + } + + comboReward[0].reward = globals.player.g.ShinyValueCombo0; + comboReward[1].reward = globals.player.g.ShinyValueCombo1; + comboReward[2].reward = globals.player.g.ShinyValueCombo2; + comboReward[3].reward = globals.player.g.ShinyValueCombo3; + comboReward[4].reward = globals.player.g.ShinyValueCombo4; + comboReward[5].reward = globals.player.g.ShinyValueCombo5; + comboReward[6].reward = globals.player.g.ShinyValueCombo6; + comboReward[6].reward = globals.player.g.ShinyValueCombo6; + comboReward[8].reward = globals.player.g.ShinyValueCombo8; + comboReward[9].reward = globals.player.g.ShinyValueCombo9; + comboReward[10].reward = globals.player.g.ShinyValueCombo10; + comboReward[11].reward = globals.player.g.ShinyValueCombo11; + comboReward[12].reward = globals.player.g.ShinyValueCombo12; + comboReward[13].reward = globals.player.g.ShinyValueCombo13; + comboReward[14].reward = globals.player.g.ShinyValueCombo14; + comboReward[15].reward = globals.player.g.ShinyValueCombo15; + zCombo_float32_1 = globals.player.g.ComboTimer; + + for (int i = 0; i < 16; ++i) + { + fillCombo(&comboReward[i]); + } + + // "TEXTBOX_BUNGEE_HELP" + id = xStrHash(zCombo_Strings + 0xd7); + sHideText[0] = zSceneFindObject(id); + + // "DIALOG_TEXTBOX" + id = xStrHash(zCombo_Strings + 0xeb); + sHideText[1] = zSceneFindObject(id); + + // "MESSAGE_02_TEXTBOX" + id = xStrHash(zCombo_Strings + 0xfa); + sHideText[2] = zSceneFindObject(id); + + // "PROMPT_TEXTBOX" + id = xStrHash(zCombo_Strings + 0x10d); + sHideText[3] = zSceneFindObject(id); + + // "QUIT_TEXTBOX" + id = xStrHash(zCombo_Strings + 0x11c); + sHideText[4] = zSceneFindObject(id); + + // "MNU4 NPCTALK" + id = xStrHash(zCombo_Strings + 0x129); + sHideUIF[0] = zSceneFindObject(id); +} +#endif // func_80195C10 +#if 1 #pragma GLOBAL_ASM("asm/Game/zCombo.s", "zCombo_Add__Fi") +#else +/* Can't figure out how to get the assignments to happen in the right order */ +void zCombo_Add(int32 points) +{ + if (zCombo_float32_3 < zCombo_float_zero) { + zCombo_float32_3 = zCombo_float32_1; + zCombo_int32_1 = points - 1; + } else { + zCombo_float32_3 = zCombo_float32_1; + zCombo_int32_3 += points; + if (zCombo_int32_1 != 0) { + zCombo_int32_3 += zCombo_int32_1; + zCombo_int32_1 = 0; + } + } +} +#endif // func_80195C6C -#pragma GLOBAL_ASM("asm/Game/zCombo.s", "zComboHideMessage__FRQ24xhud6widgetRQ24xhud6motive") +void zComboHideMessage(xhud::widget& w, xhud::motive& motive) +{ + w.hide(); +} // func_80195C8C -#pragma GLOBAL_ASM("asm/Game/zCombo.s", "zCombo_HideImmediately__Fv") +void zCombo_HideImmediately() +{ + if (comboHUD != NULL) { + // TODO: This is probably wrong, but generates the right code. + // Something is likely not correct with widget_chunk, see definition. + comboHUD->w.text[4] = '\0'; + } +} // func_80195CA4 #pragma GLOBAL_ASM("asm/Game/zCombo.s", "zCombo_Update__Ff") // func_80195FDC -#pragma GLOBAL_ASM("asm/Game/zCombo.s", "visible__8ztextboxFv") +bool ztextbox::visible() +{ + return this->flag.visible; +} \ No newline at end of file diff --git a/src/Game/zCombo.h b/src/Game/zCombo.h index df7d33f59..e732d8374 100644 --- a/src/Game/zCombo.h +++ b/src/Game/zCombo.h @@ -1,6 +1,14 @@ #ifndef ZCOMBO_H #define ZCOMBO_H +#include +#include "../Core/x/xFont.h" +#include "../Core/x/xHud.h" +void zCombo_Setup(); +void zCombo_Add(int); +void zCombo_Update(float32); +void zCombo_HideImmediately(); +void zComboHideMessage(xhud::widget& w, xhud::motive& motive); #endif \ No newline at end of file diff --git a/src/Game/zGlobals.h b/src/Game/zGlobals.h index 6046ee9e2..53886014f 100644 --- a/src/Game/zGlobals.h +++ b/src/Game/zGlobals.h @@ -17,11 +17,15 @@ struct zGlobalSettings float32 SundaeMult; uint32 InitialShinyCount; uint32 InitialSpatulaCount; + + // 0x888 in globals int32 ShinyValuePurple; int32 ShinyValueBlue; int32 ShinyValueGreen; int32 ShinyValueYellow; int32 ShinyValueRed; + + // 0x89C in globals int32 ShinyValueCombo0; int32 ShinyValueCombo1; int32 ShinyValueCombo2; @@ -38,6 +42,8 @@ struct zGlobalSettings int32 ShinyValueCombo13; int32 ShinyValueCombo14; int32 ShinyValueCombo15; + + // 0x8DC in globals float32 ComboTimer; uint32 Initial_Specials; uint32 TakeDamage; @@ -115,17 +121,26 @@ struct zCheckPoint struct zPlayerGlobals { + // 0x6E0 in globals zEnt ent; xEntShadow entShadow_embedded; xShadowSimpleCache simpShadow_embedded; + + // 0x874 in globals zGlobalSettings g; + + // 0x9C4 in globals zPlayerSettings* s; zPlayerSettings sb; zPlayerSettings patrick; zPlayerSettings sandy; + + // 0x16A0 in globals xModelInstance* model_spongebob; xModelInstance* model_patrick; xModelInstance* model_sandy; + + // 0x16AC in globals uint32 Visible; uint32 Health; int32 Speed; @@ -138,6 +153,8 @@ struct zPlayerGlobals int32 Stepping; int32 JumpState; int32 LastJumpState; + + // 0x16DC in globals float32 JumpTimer; float32 LookAroundTimer; uint32 LookAroundRand; diff --git a/src/Game/zTextBox.h b/src/Game/zTextBox.h index 6d95eb64c..e542e1609 100644 --- a/src/Game/zTextBox.h +++ b/src/Game/zTextBox.h @@ -63,14 +63,11 @@ struct ztextbox : xBase struct { - struct - { - bool active : 1; - bool dirty : 1; - bool show_backdrop : 1; - bool visible : 1; - bool hack_invisible : 1; - }; + bool active : 1; + bool dirty : 1; + bool show_backdrop : 1; + bool visible : 1; + bool hack_invisible : 1; } flag; asset_type* asset; xtextbox tb; @@ -79,6 +76,8 @@ struct ztextbox : xBase ztextbox* next; ztextbox* prev; RwRaster* bgtex; + + bool visible(); }; #endif \ No newline at end of file