From 4f48ec3a6bd9741cdaa9aae06128894192991da1 Mon Sep 17 00:00:00 2001 From: Gota7 Date: Mon, 2 Nov 2020 20:00:25 -0500 Subject: [PATCH 1/4] Decomp Part Of zMusic.cpp Progress. --- asm/Game/zMusic.s | 241 ++++++++++++-------------------------------- src/Core/x/xSnd.h | 13 +++ src/Game/zMusic.cpp | 184 +++++++++++++++++++++++++++++++-- src/Game/zMusic.h | 30 ++++++ src/Game/zScene.h | 1 + 5 files changed, 285 insertions(+), 184 deletions(-) diff --git a/asm/Game/zMusic.s b/asm/Game/zMusic.s index a61941c3a..545df62d8 100644 --- a/asm/Game/zMusic.s +++ b/asm/Game/zMusic.s @@ -7,13 +7,13 @@ volume_reset__Fv: /* 800A6E9C 000A3C9C 94 21 FF F0 */ stwu r1, -0x10(r1) /* 800A6EA0 000A3CA0 7C 08 02 A6 */ mflr r0 -/* 800A6EA4 000A3CA4 3C 60 80 2F */ lis r3, lbl_802F2B38@ha +/* 800A6EA4 000A3CA4 3C 60 80 2F */ lis r3, volume@ha /* 800A6EA8 000A3CA8 38 80 00 00 */ li r4, 0 /* 800A6EAC 000A3CAC 90 01 00 14 */ stw r0, 0x14(r1) -/* 800A6EB0 000A3CB0 38 C3 2B 38 */ addi r6, r3, lbl_802F2B38@l +/* 800A6EB0 000A3CB0 38 C3 2B 38 */ addi r6, r3, volume@l /* 800A6EB4 000A3CB4 38 66 00 0C */ addi r3, r6, 0xc /* 800A6EB8 000A3CB8 38 A0 00 08 */ li r5, 8 -/* 800A6EBC 000A3CBC C0 22 93 C8 */ lfs f1, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A6EBC 000A3CBC C0 22 93 C8 */ lfs f1, unkFloat-_SDA2_BASE_(r2) /* 800A6EC0 000A3CC0 D0 26 00 00 */ stfs f1, 0(r6) /* 800A6EC4 000A3CC4 C0 02 93 CC */ lfs f0, lbl_803CDD4C-_SDA2_BASE_(r2) /* 800A6EC8 000A3CC8 D0 06 00 04 */ stfs f0, 4(r6) @@ -24,48 +24,16 @@ volume_reset__Fv: /* 800A6EDC 000A3CDC 38 21 00 10 */ addi r1, r1, 0x10 /* 800A6EE0 000A3CE0 4E 80 00 20 */ blr -.global zMusicRefreshVolume__Fv -zMusicRefreshVolume__Fv: -/* 800A6EE4 000A3CE4 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 800A6EE8 000A3CE8 7C 08 02 A6 */ mflr r0 -/* 800A6EEC 000A3CEC 3C 80 80 2F */ lis r4, lbl_802F2B10@ha -/* 800A6EF0 000A3CF0 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A6EF4 000A3CF4 90 01 00 24 */ stw r0, 0x24(r1) -/* 800A6EF8 000A3CF8 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 800A6EFC 000A3CFC 3B E3 2B 38 */ addi r31, r3, lbl_802F2B38@l -/* 800A6F00 000A3D00 93 C1 00 18 */ stw r30, 0x18(r1) -/* 800A6F04 000A3D04 3B C4 2B 10 */ addi r30, r4, lbl_802F2B10@l -/* 800A6F08 000A3D08 93 A1 00 14 */ stw r29, 0x14(r1) -/* 800A6F0C 000A3D0C 3B A0 00 00 */ li r29, 0 -lbl_800A6F10: -/* 800A6F10 000A3D10 80 7E 00 00 */ lwz r3, 0(r30) -/* 800A6F14 000A3D14 28 03 00 00 */ cmplwi r3, 0 -/* 800A6F18 000A3D18 41 82 00 0C */ beq lbl_800A6F24 -/* 800A6F1C 000A3D1C C0 3F 00 00 */ lfs f1, 0(r31) -/* 800A6F20 000A3D20 4B FA 24 89 */ bl xSndSetVol__FUif -lbl_800A6F24: -/* 800A6F24 000A3D24 3B BD 00 01 */ addi r29, r29, 1 -/* 800A6F28 000A3D28 3B DE 00 14 */ addi r30, r30, 0x14 -/* 800A6F2C 000A3D2C 2C 1D 00 02 */ cmpwi r29, 2 -/* 800A6F30 000A3D30 41 80 FF E0 */ blt lbl_800A6F10 -/* 800A6F34 000A3D34 80 01 00 24 */ lwz r0, 0x24(r1) -/* 800A6F38 000A3D38 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 800A6F3C 000A3D3C 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 800A6F40 000A3D40 83 A1 00 14 */ lwz r29, 0x14(r1) -/* 800A6F44 000A3D44 7C 08 03 A6 */ mtlr r0 -/* 800A6F48 000A3D48 38 21 00 20 */ addi r1, r1, 0x20 -/* 800A6F4C 000A3D4C 4E 80 00 20 */ blr - .global zMusicInit__Fv zMusicInit__Fv: /* 800A6F50 000A3D50 94 21 FF F0 */ stwu r1, -0x10(r1) /* 800A6F54 000A3D54 7C 08 02 A6 */ mflr r0 -/* 800A6F58 000A3D58 3C 60 80 2F */ lis r3, lbl_802F2B10@ha +/* 800A6F58 000A3D58 3C 60 80 2F */ lis r3, sMusicTrack@ha /* 800A6F5C 000A3D5C 90 01 00 14 */ stw r0, 0x14(r1) /* 800A6F60 000A3D60 38 00 00 00 */ li r0, 0 -/* 800A6F64 000A3D64 38 83 2B 10 */ addi r4, r3, lbl_802F2B10@l +/* 800A6F64 000A3D64 38 83 2B 10 */ addi r4, r3, sMusicTrack@l /* 800A6F68 000A3D68 3C 60 80 26 */ lis r3, lbl_8025E588@ha -/* 800A6F6C 000A3D6C 90 0D 90 58 */ stw r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A6F6C 000A3D6C 90 0D 90 58 */ stw r0, sMusicPaused-_SDA_BASE_(r13) /* 800A6F70 000A3D70 38 63 E5 88 */ addi r3, r3, lbl_8025E588@l /* 800A6F74 000A3D74 90 04 00 00 */ stw r0, 0(r4) /* 800A6F78 000A3D78 90 04 00 04 */ stw r0, 4(r4) @@ -413,7 +381,7 @@ lbl_800A7450: /* 800A74AC 000A42AC 4B FF FE 69 */ bl getCurrLevelMusicEnum__Fv /* 800A74B0 000A42B0 7C 7A 1B 78 */ mr r26, r3 /* 800A74B4 000A42B4 48 00 00 30 */ b lbl_800A74E4 -/* 800A74B8 000A42B8 83 4D 82 D0 */ lwz r26, lbl_803CABD0-_SDA_BASE_(r13) +/* 800A74B8 000A42B8 83 4D 82 D0 */ lwz r26, sMusicLastEnum-_SDA_BASE_(r13) /* 800A74BC 000A42BC 48 00 00 28 */ b lbl_800A74E4 /* 800A74C0 000A42C0 3B 40 00 01 */ li r26, 1 /* 800A74C4 000A42C4 48 00 00 20 */ b lbl_800A74E4 @@ -427,8 +395,8 @@ lbl_800A74C8: /* 800A74E0 000A42E0 7F 40 18 50 */ subf r26, r0, r3 lbl_800A74E4: /* 800A74E4 000A42E4 1F D9 00 14 */ mulli r30, r25, 0x14 -/* 800A74E8 000A42E8 3C 60 80 2F */ lis r3, lbl_802F2B10@ha -/* 800A74EC 000A42EC 3B E3 2B 10 */ addi r31, r3, lbl_802F2B10@l +/* 800A74E8 000A42E8 3C 60 80 2F */ lis r3, sMusicTrack@ha +/* 800A74EC 000A42EC 3B E3 2B 10 */ addi r31, r3, sMusicTrack@l /* 800A74F0 000A42F0 7C 7F F0 2E */ lwzx r3, r31, r30 /* 800A74F4 000A42F4 28 03 00 00 */ cmplwi r3, 0 /* 800A74F8 000A42F8 41 82 00 10 */ beq lbl_800A7508 @@ -439,14 +407,14 @@ lbl_800A7508: /* 800A7508 000A4308 3C 80 80 2F */ lis r4, lbl_802F2A50@ha /* 800A750C 000A430C 57 5D 18 38 */ slwi r29, r26, 3 /* 800A7510 000A4310 38 04 2A 50 */ addi r0, r4, lbl_802F2A50@l -/* 800A7514 000A4314 3C 60 80 2F */ lis r3, lbl_802F2B10@ha +/* 800A7514 000A4314 3C 60 80 2F */ lis r3, sMusicTrack@ha /* 800A7518 000A4318 7C 80 EA 14 */ add r4, r0, r29 /* 800A751C 000A431C 2C 1A 00 09 */ cmpwi r26, 9 -/* 800A7520 000A4320 38 03 2B 10 */ addi r0, r3, lbl_802F2B10@l +/* 800A7520 000A4320 38 03 2B 10 */ addi r0, r3, sMusicTrack@l /* 800A7524 000A4324 80 64 00 04 */ lwz r3, 4(r4) /* 800A7528 000A4328 7C 80 F2 14 */ add r4, r0, r30 /* 800A752C 000A432C 94 64 00 04 */ stwu r3, 4(r4) -/* 800A7530 000A4330 C0 42 93 C8 */ lfs f2, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7530 000A4330 C0 42 93 C8 */ lfs f2, unkFloat-_SDA2_BASE_(r2) /* 800A7534 000A4334 40 82 00 2C */ bne lbl_800A7560 /* 800A7538 000A4338 3C 60 80 3C */ lis r3, globals@ha /* 800A753C 000A433C 38 63 05 58 */ addi r3, r3, globals@l @@ -473,7 +441,7 @@ lbl_800A7560: /* 800A758C 000A438C 64 00 00 01 */ oris r0, r0, 1 /* 800A7590 000A4390 7C 78 E8 2E */ lwzx r3, r24, r29 /* 800A7594 000A4394 7C 80 03 78 */ or r0, r4, r0 -/* 800A7598 000A4398 C0 62 93 C8 */ lfs f3, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7598 000A4398 C0 62 93 C8 */ lfs f3, unkFloat-_SDA2_BASE_(r2) /* 800A759C 000A439C 64 05 00 02 */ oris r5, r0, 2 /* 800A75A0 000A43A0 38 80 00 FF */ li r4, 0xff /* 800A75A4 000A43A4 38 C0 00 00 */ li r6, 0 @@ -483,9 +451,9 @@ lbl_800A7560: /* 800A75B4 000A43B4 7C 1F F0 2E */ lwzx r0, r31, r30 /* 800A75B8 000A43B8 28 00 00 00 */ cmplwi r0, 0 /* 800A75BC 000A43BC 41 82 00 64 */ beq lbl_800A7620 -/* 800A75C0 000A43C0 3C 60 80 2F */ lis r3, lbl_802F2B10@ha +/* 800A75C0 000A43C0 3C 60 80 2F */ lis r3, sMusicTrack@ha /* 800A75C4 000A43C4 7C BC D8 2E */ lwzx r5, r28, r27 -/* 800A75C8 000A43C8 38 03 2B 10 */ addi r0, r3, lbl_802F2B10@l +/* 800A75C8 000A43C8 38 03 2B 10 */ addi r0, r3, sMusicTrack@l /* 800A75CC 000A43CC 7C 98 E8 2E */ lwzx r4, r24, r29 /* 800A75D0 000A43D0 7C 60 F2 14 */ add r3, r0, r30 /* 800A75D4 000A43D4 28 05 00 00 */ cmplwi r5, 0 @@ -495,7 +463,7 @@ lbl_800A7560: /* 800A75E4 000A43E4 7C 7F F0 2E */ lwzx r3, r31, r30 /* 800A75E8 000A43E8 38 00 00 00 */ li r0, 0 /* 800A75EC 000A43EC 90 65 00 1C */ stw r3, 0x1c(r5) -/* 800A75F0 000A43F0 C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A75F0 000A43F0 C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A75F4 000A43F4 7C 7C D8 2E */ lwzx r3, r28, r27 /* 800A75F8 000A43F8 D0 03 00 14 */ stfs f0, 0x14(r3) /* 800A75FC 000A43FC 7C 9C D8 2E */ lwzx r4, r28, r27 @@ -504,7 +472,7 @@ lbl_800A7560: /* 800A7608 000A4408 90 64 00 18 */ stw r3, 0x18(r4) /* 800A760C 000A440C 7C 1C D9 2E */ stwx r0, r28, r27 lbl_800A7610: -/* 800A7610 000A4410 38 8D 82 D0 */ addi r4, r13, lbl_803CABD0-_SDA_BASE_ +/* 800A7610 000A4410 38 8D 82 D0 */ addi r4, r13, sMusicLastEnum-_SDA_BASE_ /* 800A7614 000A4414 38 60 00 01 */ li r3, 1 /* 800A7618 000A4418 7F 44 D9 2E */ stwx r26, r4, r27 /* 800A761C 000A441C 48 00 00 08 */ b lbl_800A7624 @@ -521,7 +489,7 @@ lbl_800A7624: .global zMusicNotify__Fi zMusicNotify__Fi: -/* 800A7640 000A4440 80 0D 90 58 */ lwz r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A7640 000A4440 80 0D 90 58 */ lwz r0, sMusicPaused-_SDA_BASE_(r13) /* 800A7644 000A4444 28 00 00 00 */ cmplwi r0, 0 /* 800A7648 000A4448 4C 82 00 20 */ bnelr /* 800A764C 000A444C 1C 83 00 2C */ mulli r4, r3, 0x2c @@ -557,10 +525,10 @@ lbl_800A7674: .global zMusicNotifyEvent__FPCfP5xBase zMusicNotifyEvent__FPCfP5xBase: /* 800A76BC 000A44BC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800A76C0 000A44C0 80 0D 90 58 */ lwz r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A76C0 000A44C0 80 0D 90 58 */ lwz r0, sMusicPaused-_SDA_BASE_(r13) /* 800A76C4 000A44C4 28 00 00 00 */ cmplwi r0, 0 /* 800A76C8 000A44C8 40 82 00 E4 */ bne lbl_800A77AC -/* 800A76CC 000A44CC C0 22 93 C8 */ lfs f1, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A76CC 000A44CC C0 22 93 C8 */ lfs f1, unkFloat-_SDA2_BASE_(r2) /* 800A76D0 000A44D0 C0 03 00 04 */ lfs f0, 4(r3) /* 800A76D4 000A44D4 FC 01 00 00 */ fcmpu cr0, f1, f0 /* 800A76D8 000A44D8 40 82 00 0C */ bne lbl_800A76E4 @@ -573,7 +541,7 @@ lbl_800A76E8: /* 800A76EC 000A44EC 1C C0 00 2C */ mulli r6, r0, 0x2c /* 800A76F0 000A44F0 3C A0 80 29 */ lis r5, lbl_8028FD80@ha /* 800A76F4 000A44F4 FC 00 00 1E */ fctiwz f0, f0 -/* 800A76F8 000A44F8 38 8D 82 D0 */ addi r4, r13, lbl_803CABD0-_SDA_BASE_ +/* 800A76F8 000A44F8 38 8D 82 D0 */ addi r4, r13, sMusicLastEnum-_SDA_BASE_ /* 800A76FC 000A44FC 38 05 FD 80 */ addi r0, r5, lbl_8028FD80@l /* 800A7700 000A4500 7C E0 32 14 */ add r7, r0, r6 /* 800A7704 000A4504 80 07 00 00 */ lwz r0, 0(r7) @@ -633,7 +601,7 @@ zMusicUpdate__Ff: /* 800A77C8 000A45C8 93 E1 00 1C */ stw r31, 0x1c(r1) /* 800A77CC 000A45CC 93 C1 00 18 */ stw r30, 0x18(r1) /* 800A77D0 000A45D0 93 A1 00 14 */ stw r29, 0x14(r1) -/* 800A77D4 000A45D4 80 0D 90 58 */ lwz r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A77D4 000A45D4 80 0D 90 58 */ lwz r0, sMusicPaused-_SDA_BASE_(r13) /* 800A77D8 000A45D8 FF E0 08 90 */ fmr f31, f1 /* 800A77DC 000A45DC 28 00 00 00 */ cmplwi r0, 0 /* 800A77E0 000A45E0 40 82 01 20 */ bne lbl_800A7900 @@ -668,7 +636,7 @@ zMusicUpdate__Ff: /* 800A7854 000A4654 D0 03 01 48 */ stfs f0, 0x148(r3) lbl_800A7858: /* 800A7858 000A4658 C0 3F 00 00 */ lfs f1, 0(r31) -/* 800A785C 000A465C C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A785C 000A465C C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A7860 000A4660 FC 01 00 00 */ fcmpu cr0, f1, f0 /* 800A7864 000A4664 40 82 00 10 */ bne lbl_800A7874 /* 800A7868 000A4668 80 1E 00 00 */ lwz r0, 0(r30) @@ -683,19 +651,19 @@ lbl_800A7874: /* 800A7888 000A4688 54 83 DE 3E */ rlwinm r3, r4, 0x1b, 0x18, 0x1f /* 800A788C 000A468C 7C 03 00 00 */ cmpw r3, r0 /* 800A7890 000A4690 40 82 00 54 */ bne lbl_800A78E4 -/* 800A7894 000A4694 C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7894 000A4694 C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A7898 000A4698 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 800A789C 000A469C 40 81 00 24 */ ble lbl_800A78C0 /* 800A78A0 000A46A0 C0 1F 00 00 */ lfs f0, 0(r31) /* 800A78A4 000A46A4 EC 00 F8 28 */ fsubs f0, f0, f31 /* 800A78A8 000A46A8 D0 1F 00 00 */ stfs f0, 0(r31) /* 800A78AC 000A46AC C0 3F 00 00 */ lfs f1, 0(r31) -/* 800A78B0 000A46B0 C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A78B0 000A46B0 C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A78B4 000A46B4 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 800A78B8 000A46B8 40 80 00 08 */ bge lbl_800A78C0 /* 800A78BC 000A46BC D0 1F 00 00 */ stfs f0, 0(r31) lbl_800A78C0: -/* 800A78C0 000A46C0 C0 22 93 C8 */ lfs f1, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A78C0 000A46C0 C0 22 93 C8 */ lfs f1, unkFloat-_SDA2_BASE_(r2) /* 800A78C4 000A46C4 C0 1F 00 00 */ lfs f0, 0(r31) /* 800A78C8 000A46C8 FC 01 00 00 */ fcmpu cr0, f1, f0 /* 800A78CC 000A46CC 40 82 00 18 */ bne lbl_800A78E4 @@ -732,9 +700,9 @@ volume_update__Ff: /* 800A7938 000A4738 93 E1 00 1C */ stw r31, 0x1c(r1) /* 800A793C 000A473C 93 C1 00 18 */ stw r30, 0x18(r1) /* 800A7940 000A4740 93 A1 00 14 */ stw r29, 0x14(r1) -/* 800A7944 000A4744 3C 60 80 2F */ lis r3, lbl_802F2B38@ha +/* 800A7944 000A4744 3C 60 80 2F */ lis r3, volume@ha /* 800A7948 000A4748 C0 02 93 D8 */ lfs f0, lbl_803CDD58-_SDA2_BASE_(r2) -/* 800A794C 000A474C 38 83 2B 38 */ addi r4, r3, lbl_802F2B38@l +/* 800A794C 000A474C 38 83 2B 38 */ addi r4, r3, volume@l /* 800A7950 000A4750 C0 44 00 08 */ lfs f2, 8(r4) /* 800A7954 000A4754 C3 E4 00 00 */ lfs f31, 0(r4) /* 800A7958 000A4758 FC 02 00 40 */ fcmpo cr0, f2, f0 @@ -748,13 +716,13 @@ volume_update__Ff: /* 800A7978 000A4778 D0 04 00 00 */ stfs f0, 0(r4) /* 800A797C 000A477C 48 00 00 14 */ b lbl_800A7990 lbl_800A7980: -/* 800A7980 000A4780 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A7984 000A4784 C4 03 2B 38 */ lfsu f0, lbl_802F2B38@l(r3) +/* 800A7980 000A4780 3C 60 80 2F */ lis r3, volume@ha +/* 800A7984 000A4784 C4 03 2B 38 */ lfsu f0, volume@l(r3) /* 800A7988 000A4788 EC 02 00 7A */ fmadds f0, f2, f1, f0 /* 800A798C 000A478C D0 03 00 00 */ stfs f0, 0(r3) lbl_800A7990: /* 800A7990 000A4790 C0 44 00 08 */ lfs f2, 8(r4) -/* 800A7994 000A4794 C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7994 000A4794 C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A7998 000A4798 FC 02 00 40 */ fcmpo cr0, f2, f0 /* 800A799C 000A479C 40 80 00 0C */ bge lbl_800A79A8 /* 800A79A0 000A47A0 38 00 00 01 */ li r0, 1 @@ -764,41 +732,41 @@ lbl_800A79A8: lbl_800A79AC: /* 800A79AC 000A47AC 2C 00 00 00 */ cmpwi r0, 0 /* 800A79B0 000A47B0 41 82 00 1C */ beq lbl_800A79CC -/* 800A79B4 000A47B4 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A79B8 000A47B8 C4 23 2B 38 */ lfsu f1, lbl_802F2B38@l(r3) +/* 800A79B4 000A47B4 3C 60 80 2F */ lis r3, volume@ha +/* 800A79B8 000A47B8 C4 23 2B 38 */ lfsu f1, volume@l(r3) /* 800A79BC 000A47BC C0 03 00 04 */ lfs f0, 4(r3) /* 800A79C0 000A47C0 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 800A79C4 000A47C4 4C 40 13 82 */ cror 2, 0, 2 /* 800A79C8 000A47C8 41 82 00 28 */ beq lbl_800A79F0 lbl_800A79CC: -/* 800A79CC 000A47CC C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A79CC 000A47CC C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A79D0 000A47D0 FC 02 00 40 */ fcmpo cr0, f2, f0 /* 800A79D4 000A47D4 41 80 00 34 */ blt lbl_800A7A08 -/* 800A79D8 000A47D8 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A79DC 000A47DC C4 23 2B 38 */ lfsu f1, lbl_802F2B38@l(r3) +/* 800A79D8 000A47D8 3C 60 80 2F */ lis r3, volume@ha +/* 800A79DC 000A47DC C4 23 2B 38 */ lfsu f1, volume@l(r3) /* 800A79E0 000A47E0 C0 03 00 04 */ lfs f0, 4(r3) /* 800A79E4 000A47E4 FC 01 00 40 */ fcmpo cr0, f1, f0 /* 800A79E8 000A47E8 4C 41 13 82 */ cror 2, 1, 2 /* 800A79EC 000A47EC 40 82 00 1C */ bne lbl_800A7A08 lbl_800A79F0: -/* 800A79F0 000A47F0 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A79F4 000A47F4 38 63 2B 38 */ addi r3, r3, lbl_802F2B38@l +/* 800A79F0 000A47F0 3C 60 80 2F */ lis r3, volume@ha +/* 800A79F4 000A47F4 38 63 2B 38 */ addi r3, r3, volume@l /* 800A79F8 000A47F8 C0 03 00 04 */ lfs f0, 4(r3) /* 800A79FC 000A47FC D0 03 00 00 */ stfs f0, 0(r3) -/* 800A7A00 000A4800 C0 02 93 C8 */ lfs f0, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7A00 000A4800 C0 02 93 C8 */ lfs f0, unkFloat-_SDA2_BASE_(r2) /* 800A7A04 000A4804 D0 04 00 08 */ stfs f0, 8(r4) lbl_800A7A08: -/* 800A7A08 000A4808 3C 80 80 2F */ lis r4, lbl_802F2B10@ha -/* 800A7A0C 000A480C 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A7A10 000A4810 3B E4 2B 10 */ addi r31, r4, lbl_802F2B10@l +/* 800A7A08 000A4808 3C 80 80 2F */ lis r4, sMusicTrack@ha +/* 800A7A0C 000A480C 3C 60 80 2F */ lis r3, volume@ha +/* 800A7A10 000A4810 3B E4 2B 10 */ addi r31, r4, sMusicTrack@l /* 800A7A14 000A4814 3B A0 00 00 */ li r29, 0 -/* 800A7A18 000A4818 3B C3 2B 38 */ addi r30, r3, lbl_802F2B38@l +/* 800A7A18 000A4818 3B C3 2B 38 */ addi r30, r3, volume@l lbl_800A7A1C: /* 800A7A1C 000A481C 80 7F 00 00 */ lwz r3, 0(r31) /* 800A7A20 000A4820 28 03 00 00 */ cmplwi r3, 0 /* 800A7A24 000A4824 41 82 00 44 */ beq lbl_800A7A68 -/* 800A7A28 000A4828 3C 80 80 2F */ lis r4, lbl_802F2B38@ha -/* 800A7A2C 000A482C C0 44 2B 38 */ lfs f2, lbl_802F2B38@l(r4) +/* 800A7A28 000A4828 3C 80 80 2F */ lis r4, volume@ha +/* 800A7A2C 000A482C C0 44 2B 38 */ lfs f2, volume@l(r4) /* 800A7A30 000A4830 FC 1F 10 00 */ fcmpu cr0, f31, f2 /* 800A7A34 000A4834 40 82 00 10 */ bne lbl_800A7A44 /* 800A7A38 000A4838 80 1E 00 0C */ lwz r0, 0xc(r30) @@ -831,72 +799,6 @@ lbl_800A7A68: /* 800A7A98 000A4898 38 21 00 30 */ addi r1, r1, 0x30 /* 800A7A9C 000A489C 4E 80 00 20 */ blr -.global zMusicKill__Fv -zMusicKill__Fv: -/* 800A7AA0 000A48A0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 800A7AA4 000A48A4 7C 08 02 A6 */ mflr r0 -/* 800A7AA8 000A48A8 3C 60 80 2F */ lis r3, lbl_802F2B10@ha -/* 800A7AAC 000A48AC 90 01 00 24 */ stw r0, 0x24(r1) -/* 800A7AB0 000A48B0 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 800A7AB4 000A48B4 3B E0 00 00 */ li r31, 0 -/* 800A7AB8 000A48B8 93 C1 00 18 */ stw r30, 0x18(r1) -/* 800A7ABC 000A48BC 3B C3 2B 10 */ addi r30, r3, lbl_802F2B10@l -/* 800A7AC0 000A48C0 93 A1 00 14 */ stw r29, 0x14(r1) -/* 800A7AC4 000A48C4 3B A0 00 00 */ li r29, 0 -lbl_800A7AC8: -/* 800A7AC8 000A48C8 80 7E 00 00 */ lwz r3, 0(r30) -/* 800A7ACC 000A48CC 28 03 00 00 */ cmplwi r3, 0 -/* 800A7AD0 000A48D0 41 82 00 14 */ beq lbl_800A7AE4 -/* 800A7AD4 000A48D4 4B FA 17 2D */ bl xSndStop__FUi -/* 800A7AD8 000A48D8 93 FE 00 00 */ stw r31, 0(r30) -/* 800A7ADC 000A48DC 93 FE 00 04 */ stw r31, 4(r30) -/* 800A7AE0 000A48E0 93 FE 00 08 */ stw r31, 8(r30) -lbl_800A7AE4: -/* 800A7AE4 000A48E4 3B BD 00 01 */ addi r29, r29, 1 -/* 800A7AE8 000A48E8 3B DE 00 14 */ addi r30, r30, 0x14 -/* 800A7AEC 000A48EC 2C 1D 00 02 */ cmpwi r29, 2 -/* 800A7AF0 000A48F0 41 80 FF D8 */ blt lbl_800A7AC8 -/* 800A7AF4 000A48F4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 800A7AF8 000A48F8 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 800A7AFC 000A48FC 83 C1 00 18 */ lwz r30, 0x18(r1) -/* 800A7B00 000A4900 83 A1 00 14 */ lwz r29, 0x14(r1) -/* 800A7B04 000A4904 7C 08 03 A6 */ mtlr r0 -/* 800A7B08 000A4908 38 21 00 20 */ addi r1, r1, 0x20 -/* 800A7B0C 000A490C 4E 80 00 20 */ blr - -.global zMusicPause__Fv -zMusicPause__Fv: -/* 800A7B10 000A4910 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800A7B14 000A4914 7C 08 02 A6 */ mflr r0 -/* 800A7B18 000A4918 90 01 00 14 */ stw r0, 0x14(r1) -/* 800A7B1C 000A491C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800A7B20 000A4920 93 C1 00 08 */ stw r30, 8(r1) -/* 800A7B24 000A4924 80 0D 90 58 */ lwz r0, lbl_803CB958-_SDA_BASE_(r13) -/* 800A7B28 000A4928 28 00 00 00 */ cmplwi r0, 0 -/* 800A7B2C 000A492C 40 82 00 38 */ bne lbl_800A7B64 -/* 800A7B30 000A4930 3C 60 80 2F */ lis r3, lbl_802F2B10@ha -/* 800A7B34 000A4934 3B C0 00 00 */ li r30, 0 -/* 800A7B38 000A4938 3B E3 2B 10 */ addi r31, r3, lbl_802F2B10@l -lbl_800A7B3C: -/* 800A7B3C 000A493C 80 7F 00 00 */ lwz r3, 0(r31) -/* 800A7B40 000A4940 28 03 00 00 */ cmplwi r3, 0 -/* 800A7B44 000A4944 41 82 00 08 */ beq lbl_800A7B4C -/* 800A7B48 000A4948 4B FA 16 B9 */ bl xSndStop__FUi -lbl_800A7B4C: -/* 800A7B4C 000A494C 3B DE 00 01 */ addi r30, r30, 1 -/* 800A7B50 000A4950 3B FF 00 14 */ addi r31, r31, 0x14 -/* 800A7B54 000A4954 2C 1E 00 02 */ cmpwi r30, 2 -/* 800A7B58 000A4958 41 80 FF E4 */ blt lbl_800A7B3C -/* 800A7B5C 000A495C 38 00 00 01 */ li r0, 1 -/* 800A7B60 000A4960 90 0D 90 58 */ stw r0, lbl_803CB958-_SDA_BASE_(r13) -lbl_800A7B64: -/* 800A7B64 000A4964 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800A7B68 000A4968 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800A7B6C 000A496C 83 C1 00 08 */ lwz r30, 8(r1) -/* 800A7B70 000A4970 7C 08 03 A6 */ mtlr r0 -/* 800A7B74 000A4974 38 21 00 10 */ addi r1, r1, 0x10 -/* 800A7B78 000A4978 4E 80 00 20 */ blr - .global zMusicUnpause__Fi zMusicUnpause__Fi: /* 800A7B7C 000A497C 94 21 FF E0 */ stwu r1, -0x20(r1) @@ -907,12 +809,12 @@ zMusicUnpause__Fi: /* 800A7B90 000A4990 93 A1 00 14 */ stw r29, 0x14(r1) /* 800A7B94 000A4994 93 81 00 10 */ stw r28, 0x10(r1) /* 800A7B98 000A4998 7C 7C 1B 78 */ mr r28, r3 -/* 800A7B9C 000A499C 80 0D 90 58 */ lwz r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A7B9C 000A499C 80 0D 90 58 */ lwz r0, sMusicPaused-_SDA_BASE_(r13) /* 800A7BA0 000A49A0 28 00 00 00 */ cmplwi r0, 0 /* 800A7BA4 000A49A4 41 82 00 9C */ beq lbl_800A7C40 -/* 800A7BA8 000A49A8 3C 60 80 2F */ lis r3, lbl_802F2B10@ha +/* 800A7BA8 000A49A8 3C 60 80 2F */ lis r3, sMusicTrack@ha /* 800A7BAC 000A49AC 3B A0 00 00 */ li r29, 0 -/* 800A7BB0 000A49B0 3B E3 2B 10 */ addi r31, r3, lbl_802F2B10@l +/* 800A7BB0 000A49B0 3B E3 2B 10 */ addi r31, r3, sMusicTrack@l /* 800A7BB4 000A49B4 3B C0 00 00 */ li r30, 0 lbl_800A7BB8: /* 800A7BB8 000A49B8 80 1F 00 00 */ lwz r0, 0(r31) @@ -926,7 +828,7 @@ lbl_800A7BB8: lbl_800A7BD8: /* 800A7BD8 000A49D8 80 BF 00 04 */ lwz r5, 4(r31) /* 800A7BDC 000A49DC 3C 60 00 01 */ lis r3, 0x00008000@ha -/* 800A7BE0 000A49E0 C0 42 93 C8 */ lfs f2, lbl_803CDD48-_SDA2_BASE_(r2) +/* 800A7BE0 000A49E0 C0 42 93 C8 */ lfs f2, unkFloat-_SDA2_BASE_(r2) /* 800A7BE4 000A49E4 38 03 80 00 */ addi r0, r3, 0x00008000@l /* 800A7BE8 000A49E8 7C 85 00 D0 */ neg r4, r5 /* 800A7BEC 000A49EC 80 7F 00 0C */ lwz r3, 0xc(r31) @@ -950,7 +852,7 @@ lbl_800A7C24: /* 800A7C30 000A4A30 3B FF 00 14 */ addi r31, r31, 0x14 /* 800A7C34 000A4A34 41 80 FF 84 */ blt lbl_800A7BB8 /* 800A7C38 000A4A38 38 00 00 00 */ li r0, 0 -/* 800A7C3C 000A4A3C 90 0D 90 58 */ stw r0, lbl_803CB958-_SDA_BASE_(r13) +/* 800A7C3C 000A4A3C 90 0D 90 58 */ stw r0, sMusicPaused-_SDA_BASE_(r13) lbl_800A7C40: /* 800A7C40 000A4A40 80 01 00 24 */ lwz r0, 0x24(r1) /* 800A7C44 000A4A44 83 E1 00 1C */ lwz r31, 0x1c(r1) @@ -964,35 +866,18 @@ lbl_800A7C40: .global zMusicSetVolume__Fff zMusicSetVolume__Fff: /* 800A7C60 000A4A60 FC 60 08 18 */ frsp f3, f1 -/* 800A7C64 000A4A64 3C 60 80 2F */ lis r3, lbl_802F2B38@ha -/* 800A7C68 000A4A68 C4 03 2B 38 */ lfsu f0, lbl_802F2B38@l(r3) +/* 800A7C64 000A4A64 3C 60 80 2F */ lis r3, volume@ha +/* 800A7C68 000A4A68 C4 03 2B 38 */ lfsu f0, volume@l(r3) /* 800A7C6C 000A4A6C D0 23 00 04 */ stfs f1, 4(r3) /* 800A7C70 000A4A70 EC 23 00 28 */ fsubs f1, f3, f0 /* 800A7C74 000A4A74 D0 23 00 08 */ stfs f1, 8(r3) -/* 800A7C78 000A4A78 C0 02 93 E0 */ lfs f0, lbl_803CDD60-_SDA2_BASE_(r2) +/* 800A7C78 000A4A78 C0 02 93 E0 */ lfs f0, minDelay-_SDA2_BASE_(r2) /* 800A7C7C 000A4A7C FC 02 00 40 */ fcmpo cr0, f2, f0 /* 800A7C80 000A4A80 4C 81 00 20 */ blelr /* 800A7C84 000A4A84 EC 01 10 24 */ fdivs f0, f1, f2 /* 800A7C88 000A4A88 D0 03 00 08 */ stfs f0, 8(r3) /* 800A7C8C 000A4A8C 4E 80 00 20 */ blr -.global zMusicReset__Fv -zMusicReset__Fv: -/* 800A7C90 000A4A90 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800A7C94 000A4A94 7C 08 02 A6 */ mflr r0 -/* 800A7C98 000A4A98 90 01 00 14 */ stw r0, 0x14(r1) -/* 800A7C9C 000A4A9C 4B FF F6 79 */ bl getCurrLevelMusicEnum__Fv -/* 800A7CA0 000A4AA0 80 0D 82 D0 */ lwz r0, lbl_803CABD0-_SDA_BASE_(r13) -/* 800A7CA4 000A4AA4 7C 00 18 00 */ cmpw r0, r3 -/* 800A7CA8 000A4AA8 41 82 00 0C */ beq lbl_800A7CB4 -/* 800A7CAC 000A4AAC 38 60 00 00 */ li r3, 0 -/* 800A7CB0 000A4AB0 4B FF F9 91 */ bl zMusicNotify__Fi -lbl_800A7CB4: -/* 800A7CB4 000A4AB4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800A7CB8 000A4AB8 7C 08 03 A6 */ mtlr r0 -/* 800A7CBC 000A4ABC 38 21 00 10 */ addi r1, r1, 0x10 -/* 800A7CC0 000A4AC0 4E 80 00 20 */ blr - .endif .section .rodata @@ -1010,25 +895,30 @@ lbl_8028FF1C: .section .bss lbl_802F2A50: .skip 0xC0 -lbl_802F2B10: +.global sMusicTrack +sMusicTrack: .skip 0x28 -lbl_802F2B38: +.global volume +volume: .skip 0x18 .section .sbss -lbl_803CB958: +.global sMusicPaused +sMusicPaused: .skip 0x4 lbl_803CB95C: .skip 0xC .section .sdata -lbl_803CABD0: +.global sMusicLastEnum +sMusicLastEnum: .incbin "baserom.dol", 0x2B5C90, 0x8 lbl_803CABD8: .incbin "baserom.dol", 0x2B5C98, 0x8 .section .sdata2 -lbl_803CDD48: +.global unkFloat +unkFloat: .incbin "baserom.dol", 0x2B75E8, 0x4 lbl_803CDD4C: .incbin "baserom.dol", 0x2B75EC, 0x4 @@ -1040,5 +930,6 @@ lbl_803CDD58: .incbin "baserom.dol", 0x2B75F8, 0x4 lbl_803CDD5C: .incbin "baserom.dol", 0x2B75FC, 0x4 -lbl_803CDD60: - .incbin "baserom.dol", 0x2B7600, 0x8 +.global minDelay +minDelay: + .incbin "baserom.dol", 0x2B7600, 0x8 \ No newline at end of file diff --git a/src/Core/x/xSnd.h b/src/Core/x/xSnd.h index a36b33f8a..3e266e60f 100644 --- a/src/Core/x/xSnd.h +++ b/src/Core/x/xSnd.h @@ -3,9 +3,22 @@ #include +enum sound_category +{ + SND_CAT_GAME, + SND_CAT_DIALOG, + SND_CAT_MUSIC, + SND_CAT_CUTSCENE, + SND_CAT_UI, + SND_CAT_NUM_CATEGORIES, + SND_CAT_INVALID = 0xffffffff +}; + void xSndResume(); void xSndSuspend(); void xSndSetVol(uint32 snd, float32 vol); void xSndSetPitch(uint32 snd, float32 pitch); +uint32 xSndPlay(uint32 id, float32 vol, float32 pitch, uint32 priority, uint32 flags, uint32 parentID, sound_category category, float32 delay); +void xSndStop(uint32 snd); #endif \ No newline at end of file diff --git a/src/Game/zMusic.cpp b/src/Game/zMusic.cpp index 72564963c..98003c55f 100644 --- a/src/Game/zMusic.cpp +++ b/src/Game/zMusic.cpp @@ -1,12 +1,31 @@ +#include #include "zMusic.h" +#include "../Core/x/xSnd.h" +#include "../Core/x/xMath.h" +#include "zScene.h" -#include +extern zMusicTrackInfo sMusicTrack[2]; +extern zVolumeInfo volume; +extern uint32 sMusicPaused; +extern LevelMusic sMusicLastEnum[2]; +extern float32 unkFloat; //0f by default. +extern float32 minDelay; //Value is defaulted at 0.001f. // func_800A6E9C #pragma GLOBAL_ASM("asm/Game/zMusic.s", "volume_reset__Fv") -// func_800A6EE4 -#pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicRefreshVolume__Fv") +//Reset both music tracks to their default volume. +void zMusicRefreshVolume() +{ + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndSetVol(track->snd_id, volume.cur); //Only reset volume if the sound ID is not blank. + } + } +} // func_800A6F50 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicInit__Fv") @@ -14,6 +33,79 @@ // func_800A7314 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "getCurrLevelMusicEnum__Fv") +//Correct, but won't work due to the switch case jump table (messes with offsets). +/*LevelMusic getCurrLevelMusicEnum() +{ + uint32 uVar1; + uint32 uVar2; + LevelMusic uVar3; + + uVar1 = zSceneGetLevelIndex(); + switch(uVar1) + { + case 0: + uVar3 = (LevelMusic)0; + break; + case 1: + uVar3 = (LevelMusic)1; + break; + case 2: + uVar3 = (LevelMusic)2; + break; + case 3: + uVar3 = (LevelMusic)3; + break; + case 4: + uVar3 = (LevelMusic)4; + break; + case 5: + uVar3 = (LevelMusic)5; + break; + case 6: + uVar3 = (LevelMusic)6; + break; + case 7: + uVar3 = (LevelMusic)0; + break; + case 8: + uVar3 = (LevelMusic)8; + break; + case 9: + uVar3 = (LevelMusic)9; + break; + case 10: + uVar3 = (LevelMusic)10; + break; + case 0xb: + uVar3 = (LevelMusic)0xb; + break; + case 0xc: + uVar3 = (LevelMusic)0xc; + break; + case 0xd: + uVar3 = (LevelMusic)2; + break; + case 0xe: + uVar3 = (LevelMusic)0xd; + break; + default: + uVar2 = xrand(); + uVar3 = (LevelMusic)(uVar2 % 0x17 + 1); + if (0x18 <= uVar3) + { + uVar3 = (LevelMusic)(uVar3 - 1); + } + if (((uVar3 == 4) || (uVar3 == 7)) || (uVar3 == 8)) + { + uVar3 = (LevelMusic)5; + } + break; + } + + return uVar3; + +}*/ + // func_800A7414 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicDo__Fi") @@ -29,17 +121,91 @@ // func_800A7924 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "volume_update__Ff") -// func_800A7AA0 -#pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicKill__Fv") +//Stop all tracks and set them to null. +void zMusicKill() +{ + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndStop(track->snd_id); + track->snd_id = 0; + track->loop = 0; + track->unk = 0; + } + } +} -// func_800A7B10 -#pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicPause__Fv") +//Pause music by stopping any non-null tracks. +void zMusicPause() +{ + if (sMusicPaused == 0) + { + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndStop(track->snd_id); + } + } + sMusicPaused = 1; + } +} // func_800A7B7C #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicUnpause__Fi") +//Only thing that doesn't compile correctly is the function call to xSndPlay, in which a bunch of stuff is in the wrong order it looks like. +/* +void zMusicUnpause(int32 kill) +{ + if (sMusicPaused != 0) + { + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + uint32 prioBase = 0x800 * i; + if (track->snd_id != 0) + { + if (kill != 0) + { + track->snd_id = 0; + } + else + { + uint32 res = xSndPlay(track->assetID, track->lastVol, unkFloat, 0xff, prioBase | (int)(-track->loop | track->loop) >> 0x1f & 0x8000U | 0x10000 | 0x20000, 0, SND_CAT_MUSIC, unkFloat); + track->snd_id = res; + } + } + } + sMusicPaused = 0; + } + +}*/ + // func_800A7C60 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicSetVolume__Fff") -// func_800A7C90 -#pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicReset__Fv") +//Not sure what's wrong with this one. Doesn't match in the slightest. +/*void zMusicSetVolume(float32 vol, float32 delay) +{ + if (delay <= minDelay) { + volume.end = vol; + volume.inc = vol - volume.cur; + return; + } + volume.end = vol; + volume.inc = (vol - volume.cur) / delay; +}*/ + +void zMusicReset() +{ + LevelMusic currMusic; + currMusic = getCurrLevelMusicEnum(); + if (sMusicLastEnum[0] != currMusic) + { + zMusicNotify(0); + } +} \ No newline at end of file diff --git a/src/Game/zMusic.h b/src/Game/zMusic.h index 48278a985..b794aa787 100644 --- a/src/Game/zMusic.h +++ b/src/Game/zMusic.h @@ -1,6 +1,36 @@ #ifndef ZMUSIC_H #define ZMUSIC_H +#include +struct zVolumeInfo { + float32 cur; + float32 end; + float32 inc; + uint32 adjusted[2]; +}; + +struct zMusicTrackInfo { + uint32 snd_id; + uint32 loop; + int32 unk; + uint32 assetID; + float32 lastVol; +}; + +enum LevelMusic { + //TODO: POPULATE MUSIC LISTING! + Null +}; + +void volume_Reset(); +void zMusicRefreshVolume(); +LevelMusic getCurrLevelMusicEnum(); +void zMusicNotify(int32 unk); +void zMusicSetVolume(float32 vol, float32 delay); +void zMusicKill(); +void zMusicPause(); +void zMusicUnpause(int32 kill); +void zMusicReset(); #endif \ No newline at end of file diff --git a/src/Game/zScene.h b/src/Game/zScene.h index ed6b33bea..4076cb7b1 100644 --- a/src/Game/zScene.h +++ b/src/Game/zScene.h @@ -30,5 +30,6 @@ struct zScene : xScene xBase* zSceneFindObject(uint32 gameID); void zSceneSwitch(_zPortal* p, int32 forceSameScene); +uint32 zSceneGetLevelIndex(); #endif \ No newline at end of file From 5663cdb91be29cd504f72b8624dad575555e66dd Mon Sep 17 00:00:00 2001 From: Gota7 Date: Mon, 2 Nov 2020 23:11:10 -0500 Subject: [PATCH 2/4] Cleanup zMusic Changes For merging. --- src/Core/x/xSnd.h | 17 +-- src/Game/zMusic.cpp | 314 ++++++++++++++++++++++++-------------------- src/Game/zMusic.h | 33 +++-- 3 files changed, 193 insertions(+), 171 deletions(-) diff --git a/src/Core/x/xSnd.h b/src/Core/x/xSnd.h index 3e266e60f..491383548 100644 --- a/src/Core/x/xSnd.h +++ b/src/Core/x/xSnd.h @@ -5,20 +5,21 @@ enum sound_category { - SND_CAT_GAME, - SND_CAT_DIALOG, - SND_CAT_MUSIC, - SND_CAT_CUTSCENE, - SND_CAT_UI, - SND_CAT_NUM_CATEGORIES, - SND_CAT_INVALID = 0xffffffff + SND_CAT_GAME, + SND_CAT_DIALOG, + SND_CAT_MUSIC, + SND_CAT_CUTSCENE, + SND_CAT_UI, + SND_CAT_NUM_CATEGORIES, + SND_CAT_INVALID = 0xffffffff }; void xSndResume(); void xSndSuspend(); void xSndSetVol(uint32 snd, float32 vol); void xSndSetPitch(uint32 snd, float32 pitch); -uint32 xSndPlay(uint32 id, float32 vol, float32 pitch, uint32 priority, uint32 flags, uint32 parentID, sound_category category, float32 delay); +uint32 xSndPlay(uint32 id, float32 vol, float32 pitch, uint32 priority, uint32 flags, + uint32 parentID, sound_category category, float32 delay); void xSndStop(uint32 snd); #endif \ No newline at end of file diff --git a/src/Game/zMusic.cpp b/src/Game/zMusic.cpp index 98003c55f..454874d11 100644 --- a/src/Game/zMusic.cpp +++ b/src/Game/zMusic.cpp @@ -7,104 +7,111 @@ extern zMusicTrackInfo sMusicTrack[2]; extern zVolumeInfo volume; extern uint32 sMusicPaused; -extern LevelMusic sMusicLastEnum[2]; +extern int32 sMusicLastEnum[2]; extern float32 unkFloat; //0f by default. extern float32 minDelay; //Value is defaulted at 0.001f. // func_800A6E9C #pragma GLOBAL_ASM("asm/Game/zMusic.s", "volume_reset__Fv") -//Reset both music tracks to their default volume. +// Reset both music tracks to their default volume. void zMusicRefreshVolume() { - for (int32 i = 0; i < 2; i++) - { - zMusicTrackInfo* track = &sMusicTrack[i]; - if (track->snd_id != 0) - { - xSndSetVol(track->snd_id, volume.cur); //Only reset volume if the sound ID is not blank. - } - } + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndSetVol(track->snd_id, + volume.cur); // Only reset volume if the sound ID is not blank. + } + } } // func_800A6F50 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicInit__Fv") +// WIP. +#if 1 + // func_800A7314 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "getCurrLevelMusicEnum__Fv") -//Correct, but won't work due to the switch case jump table (messes with offsets). -/*LevelMusic getCurrLevelMusicEnum() +#else + +// Correct, but won't work due to the switch case jump table (messes with offsets). Obviously names are temporary. +int32 getCurrLevelMusicEnum() { - uint32 uVar1; - uint32 uVar2; - LevelMusic uVar3; - - uVar1 = zSceneGetLevelIndex(); - switch(uVar1) - { - case 0: - uVar3 = (LevelMusic)0; - break; - case 1: - uVar3 = (LevelMusic)1; - break; - case 2: - uVar3 = (LevelMusic)2; - break; - case 3: - uVar3 = (LevelMusic)3; - break; - case 4: - uVar3 = (LevelMusic)4; - break; - case 5: - uVar3 = (LevelMusic)5; - break; - case 6: - uVar3 = (LevelMusic)6; - break; - case 7: - uVar3 = (LevelMusic)0; - break; - case 8: - uVar3 = (LevelMusic)8; - break; - case 9: - uVar3 = (LevelMusic)9; - break; - case 10: - uVar3 = (LevelMusic)10; - break; - case 0xb: - uVar3 = (LevelMusic)0xb; - break; - case 0xc: - uVar3 = (LevelMusic)0xc; - break; - case 0xd: - uVar3 = (LevelMusic)2; - break; - case 0xe: - uVar3 = (LevelMusic)0xd; - break; - default: - uVar2 = xrand(); - uVar3 = (LevelMusic)(uVar2 % 0x17 + 1); - if (0x18 <= uVar3) - { - uVar3 = (LevelMusic)(uVar3 - 1); - } - if (((uVar3 == 4) || (uVar3 == 7)) || (uVar3 == 8)) - { - uVar3 = (LevelMusic)5; - } - break; - } - - return uVar3; - -}*/ + uint32 uVar1; + uint32 uVar2; + int32 uVar3; + + uVar1 = zSceneGetLevelIndex(); + switch (uVar1) + { + case 0: + uVar3 = 0; + break; + case 1: + uVar3 = 1; + break; + case 2: + uVar3 = 2; + break; + case 3: + uVar3 = 3; + break; + case 4: + uVar3 = 4; + break; + case 5: + uVar3 = 5; + break; + case 6: + uVar3 = 6; + break; + case 7: + uVar3 = 0; + break; + case 8: + uVar3 = 8; + break; + case 9: + uVar3 = 9; + break; + case 10: + uVar3 = 10; + break; + case 0xb: + uVar3 = 0xb; + break; + case 0xc: + uVar3 = 0xc; + break; + case 0xd: + uVar3 = 2; + break; + case 0xe: + uVar3 = 0xd; + break; + default: + uVar2 = xrand(); + uVar3 = uVar2 % 0x17 + 1; + if (0x18 <= uVar3) + { + uVar3 = uVar3 - 1; + } + if (((uVar3 == 4) || (uVar3 == 7)) || (uVar3 == 8)) + { + uVar3 = 5; + } + break; + } + + return uVar3; +} + +#endif // func_800A7414 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicDo__Fi") @@ -121,91 +128,108 @@ void zMusicRefreshVolume() // func_800A7924 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "volume_update__Ff") -//Stop all tracks and set them to null. +// Stop all tracks and set them to null. void zMusicKill() { - for (int32 i = 0; i < 2; i++) - { - zMusicTrackInfo* track = &sMusicTrack[i]; - if (track->snd_id != 0) - { - xSndStop(track->snd_id); - track->snd_id = 0; - track->loop = 0; - track->unk = 0; - } - } + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndStop(track->snd_id); + track->snd_id = 0; + track->loop = 0; + track->situation = 0; + } + } } -//Pause music by stopping any non-null tracks. +// Pause music by stopping any non-null tracks. void zMusicPause() { if (sMusicPaused == 0) { - for (int32 i = 0; i < 2; i++) - { - zMusicTrackInfo* track = &sMusicTrack[i]; - if (track->snd_id != 0) - { - xSndStop(track->snd_id); - } - } - sMusicPaused = 1; - } + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + if (track->snd_id != 0) + { + xSndStop(track->snd_id); + } + } + sMusicPaused = 1; + } } +// WIP. +#if 1 + // func_800A7B7C #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicUnpause__Fi") -//Only thing that doesn't compile correctly is the function call to xSndPlay, in which a bunch of stuff is in the wrong order it looks like. -/* +#else + +// Only thing that doesn't compile correctly is the function call to xSndPlay, in which a bunch of stuff is in the wrong order it looks like. void zMusicUnpause(int32 kill) { - if (sMusicPaused != 0) - { - for (int32 i = 0; i < 2; i++) - { - zMusicTrackInfo* track = &sMusicTrack[i]; - uint32 prioBase = 0x800 * i; - if (track->snd_id != 0) - { - if (kill != 0) - { - track->snd_id = 0; - } - else - { - uint32 res = xSndPlay(track->assetID, track->lastVol, unkFloat, 0xff, prioBase | (int)(-track->loop | track->loop) >> 0x1f & 0x8000U | 0x10000 | 0x20000, 0, SND_CAT_MUSIC, unkFloat); - track->snd_id = res; - } - } - } - sMusicPaused = 0; - } - -}*/ + if (sMusicPaused != 0) + { + for (int32 i = 0; i < 2; i++) + { + zMusicTrackInfo* track = &sMusicTrack[i]; + uint32 prioBase = 0x800 * i; + if (track->snd_id != 0) + { + if (kill != 0) + { + track->snd_id = 0; + } + else + { + uint32 res = + xSndPlay(track->assetID, track->lastVol, unkFloat, 0xff, + prioBase | (int)(-track->loop | track->loop) >> 0x1f & 0x8000U | + 0x10000 | 0x20000, + 0, SND_CAT_MUSIC, unkFloat); + track->snd_id = res; + } + } + } + sMusicPaused = 0; + } +} + +#endif + +// WIP. +#if 1 // func_800A7C60 #pragma GLOBAL_ASM("asm/Game/zMusic.s", "zMusicSetVolume__Fff") -//Not sure what's wrong with this one. Doesn't match in the slightest. -/*void zMusicSetVolume(float32 vol, float32 delay) +#else + +// Not sure what's wrong with this one. Doesn't match in the slightest. +void zMusicSetVolume(float32 vol, float32 delay) { - if (delay <= minDelay) { - volume.end = vol; - volume.inc = vol - volume.cur; - return; - } - volume.end = vol; - volume.inc = (vol - volume.cur) / delay; -}*/ + if (delay <= minDelay) + { + volume.end = vol; + volume.inc = vol - volume.cur; + return; + } + volume.end = vol; + volume.inc = (vol - volume.cur) / delay; +} + +#endif void zMusicReset() { - LevelMusic currMusic; - currMusic = getCurrLevelMusicEnum(); - if (sMusicLastEnum[0] != currMusic) - { - zMusicNotify(0); - } + int32 currMusic; + currMusic = getCurrLevelMusicEnum(); + if (sMusicLastEnum[0] != currMusic) + { + zMusicNotify(0); + } } \ No newline at end of file diff --git a/src/Game/zMusic.h b/src/Game/zMusic.h index b794aa787..897bdd802 100644 --- a/src/Game/zMusic.h +++ b/src/Game/zMusic.h @@ -3,30 +3,27 @@ #include -struct zVolumeInfo { - float32 cur; - float32 end; - float32 inc; - uint32 adjusted[2]; +struct zVolumeInfo +{ + float32 cur; + float32 end; + float32 inc; + uint32 adjusted[2]; }; -struct zMusicTrackInfo { - uint32 snd_id; - uint32 loop; - int32 unk; - uint32 assetID; - float32 lastVol; -}; - -enum LevelMusic { - //TODO: POPULATE MUSIC LISTING! - Null +struct zMusicTrackInfo +{ + uint32 snd_id; + uint32 loop; + int32 situation; // Is actually a zMusicSituation*. + uint32 assetID; + float32 lastVol; }; void volume_Reset(); void zMusicRefreshVolume(); -LevelMusic getCurrLevelMusicEnum(); -void zMusicNotify(int32 unk); +int32 getCurrLevelMusicEnum(); +void zMusicNotify(int32 situation); void zMusicSetVolume(float32 vol, float32 delay); void zMusicKill(); void zMusicPause(); From 264dc07a87d26448dc2c73636e82ba8afdf1d770 Mon Sep 17 00:00:00 2001 From: Gota7 Date: Tue, 3 Nov 2020 01:44:50 -0500 Subject: [PATCH 3/4] Partial Decompilation Of zTaxi.cpp 9/13 functions done. --- .clang-format | 2 +- asm/Game/zTaxi.s | 107 ++++----------------------------------------- src/Game/zTaxi.cpp | 103 +++++++++++++++++++++++++++++++++++-------- src/Game/zTaxi.h | 61 ++++++++++++++++++++++++++ 4 files changed, 155 insertions(+), 118 deletions(-) diff --git a/.clang-format b/.clang-format index 151a5da16..6fb9eb10b 100644 --- a/.clang-format +++ b/.clang-format @@ -20,7 +20,7 @@ BinPackArguments: true BinPackParameters: true BraceWrapping: AfterClass: true - AfterCaseLabel: true + #AfterCaseLabel: true AfterControlStatement: true AfterEnum: true AfterFunction: true diff --git a/asm/Game/zTaxi.s b/asm/Game/zTaxi.s index b264ae334..ba9d59b48 100644 --- a/asm/Game/zTaxi.s +++ b/asm/Game/zTaxi.s @@ -4,17 +4,6 @@ .section .text # 0x80172034 - 0x80172664 -.global zTaxi_Init__FR5xBaseR9xDynAssetUl -zTaxi_Init__FR5xBaseR9xDynAssetUl: -/* 80172034 0016EE34 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80172038 0016EE38 7C 08 02 A6 */ mflr r0 -/* 8017203C 0016EE3C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80172040 0016EE40 48 00 00 15 */ bl zTaxi_Init__FP5zTaxiP10taxi_asset -/* 80172044 0016EE44 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80172048 0016EE48 7C 08 03 A6 */ mtlr r0 -/* 8017204C 0016EE4C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80172050 0016EE50 4E 80 00 20 */ blr - .global zTaxi_Init__FP5zTaxiP10taxi_asset zTaxi_Init__FP5zTaxiP10taxi_asset: /* 80172054 0016EE54 94 21 FF E0 */ stwu r1, -0x20(r1) @@ -93,41 +82,6 @@ __ct__6taxiCBFv: /* 8017215C 0016EF5C 38 21 00 10 */ addi r1, r1, 0x10 /* 80172160 0016EF60 4E 80 00 20 */ blr -.global zTaxi_Setup__FP5zTaxi -zTaxi_Setup__FP5zTaxi: -/* 80172164 0016EF64 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80172168 0016EF68 7C 08 02 A6 */ mflr r0 -/* 8017216C 0016EF6C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80172170 0016EF70 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80172174 0016EF74 7C 7F 1B 78 */ mr r31, r3 -/* 80172178 0016EF78 80 63 00 10 */ lwz r3, 0x10(r3) -/* 8017217C 0016EF7C 80 63 00 14 */ lwz r3, 0x14(r3) -/* 80172180 0016EF80 4B F4 28 BD */ bl zSceneFindObject__FUi -/* 80172184 0016EF84 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 80172188 0016EF88 80 63 00 18 */ lwz r3, 0x18(r3) -/* 8017218C 0016EF8C 4B F4 28 B1 */ bl zSceneFindObject__FUi -/* 80172190 0016EF90 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 80172194 0016EF94 80 63 00 1C */ lwz r3, 0x1c(r3) -/* 80172198 0016EF98 4B F4 28 A5 */ bl zSceneFindObject__FUi -/* 8017219C 0016EF9C 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801721A0 0016EFA0 38 80 00 00 */ li r4, 0 -/* 801721A4 0016EFA4 80 63 00 20 */ lwz r3, 0x20(r3) -/* 801721A8 0016EFA8 4B ED 95 65 */ bl xSTFindAsset__FUiPUi -/* 801721AC 0016EFAC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801721B0 0016EFB0 80 63 00 24 */ lwz r3, 0x24(r3) -/* 801721B4 0016EFB4 4B F4 28 89 */ bl zSceneFindObject__FUi -/* 801721B8 0016EFB8 90 7F 00 14 */ stw r3, 0x14(r31) -/* 801721BC 0016EFBC C0 02 AC 94 */ lfs f0, lbl_803CF614-_SDA2_BASE_(r2) -/* 801721C0 0016EFC0 D0 1F 00 2C */ stfs f0, 0x2c(r31) -/* 801721C4 0016EFC4 A0 1F 00 06 */ lhz r0, 6(r31) -/* 801721C8 0016EFC8 60 00 00 02 */ ori r0, r0, 2 -/* 801721CC 0016EFCC B0 1F 00 06 */ sth r0, 6(r31) -/* 801721D0 0016EFD0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801721D4 0016EFD4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801721D8 0016EFD8 7C 08 03 A6 */ mtlr r0 -/* 801721DC 0016EFDC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801721E0 0016EFE0 4E 80 00 20 */ blr - .global zTaxi_Update__FP5xBaseP6xScenef zTaxi_Update__FP5xBaseP6xScenef: /* 801721E4 0016EFE4 94 21 FF A0 */ stwu r1, -0x60(r1) @@ -154,7 +108,7 @@ zTaxi_Update__FP5xBaseP6xScenef: /* 80172238 0016F038 80 84 00 4C */ lwz r4, 0x4c(r4) /* 8017223C 0016F03C 38 84 00 30 */ addi r4, r4, 0x30 /* 80172240 0016F040 4B F5 30 D9 */ bl iCylinderIsectVec__FPC9xCylinderPC5xVec3P6xIsect -/* 80172244 0016F044 C0 22 AC 94 */ lfs f1, lbl_803CF614-_SDA2_BASE_(r2) +/* 80172244 0016F044 C0 22 AC 94 */ lfs f1, portalTimer-_SDA2_BASE_(r2) /* 80172248 0016F048 C0 01 00 20 */ lfs f0, 0x20(r1) /* 8017224C 0016F04C FC 01 00 00 */ fcmpu cr0, f1, f0 /* 80172250 0016F050 40 82 00 3C */ bne lbl_8017228C @@ -167,7 +121,7 @@ zTaxi_Update__FP5xBaseP6xScenef: /* 8017226C 0016F06C 40 82 00 30 */ bne lbl_8017229C /* 80172270 0016F070 38 60 00 03 */ li r3, 3 /* 80172274 0016F074 38 00 00 01 */ li r0, 1 -/* 80172278 0016F078 90 6D 84 B0 */ stw r3, lbl_803CADB0-_SDA_BASE_(r13) +/* 80172278 0016F078 90 6D 84 B0 */ stw r3, sAnswer-_SDA_BASE_(r13) /* 8017227C 0016F07C 90 1F 00 24 */ stw r0, 0x24(r31) /* 80172280 0016F080 C0 02 AC 9C */ lfs f0, lbl_803CF61C-_SDA2_BASE_(r2) /* 80172284 0016F084 D0 1F 00 34 */ stfs f0, 0x34(r31) @@ -199,7 +153,7 @@ lbl_801722C8: /* 801722DC 0016F0DC 80 03 16 D4 */ lwz r0, 0x16d4(r3) /* 801722E0 0016F0E0 2C 00 00 00 */ cmpwi r0, 0 /* 801722E4 0016F0E4 40 82 00 50 */ bne lbl_80172334 -/* 801722E8 0016F0E8 80 0D 84 B0 */ lwz r0, lbl_803CADB0-_SDA_BASE_(r13) +/* 801722E8 0016F0E8 80 0D 84 B0 */ lwz r0, sAnswer-_SDA_BASE_(r13) /* 801722EC 0016F0EC 2C 00 00 01 */ cmpwi r0, 1 /* 801722F0 0016F0F0 40 82 00 24 */ bne lbl_80172314 /* 801722F4 0016F0F4 38 00 00 03 */ li r0, 3 @@ -211,7 +165,7 @@ lbl_801722C8: /* 8017230C 0016F10C 38 60 00 24 */ li r3, 0x24 /* 80172310 0016F110 4B F0 E4 81 */ bl zEntPlayer_SNDPlay__F14_tagePlayerSndf lbl_80172314: -/* 80172314 0016F114 80 0D 84 B0 */ lwz r0, lbl_803CADB0-_SDA_BASE_(r13) +/* 80172314 0016F114 80 0D 84 B0 */ lwz r0, sAnswer-_SDA_BASE_(r13) /* 80172318 0016F118 2C 00 00 02 */ cmpwi r0, 2 /* 8017231C 0016F11C 40 82 00 18 */ bne lbl_80172334 /* 80172320 0016F120 38 00 00 02 */ li r0, 2 @@ -387,33 +341,6 @@ lbl_80172574: /* 8017258C 0016F38C 38 21 00 60 */ addi r1, r1, 0x60 /* 80172590 0016F390 4E 80 00 20 */ blr -.global zTaxi_tb_answer__FUi -zTaxi_tb_answer__FUi: -/* 80172594 0016F394 90 6D 84 B0 */ stw r3, lbl_803CADB0-_SDA_BASE_(r13) -/* 80172598 0016F398 4E 80 00 20 */ blr - -.global zTaxi_Save__FP5zTaxiP7xSerial -zTaxi_Save__FP5zTaxiP7xSerial: -/* 8017259C 0016F39C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801725A0 0016F3A0 7C 08 02 A6 */ mflr r0 -/* 801725A4 0016F3A4 90 01 00 14 */ stw r0, 0x14(r1) -/* 801725A8 0016F3A8 4B E9 6E A5 */ bl xBaseSave__FP5xBaseP7xSerial -/* 801725AC 0016F3AC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801725B0 0016F3B0 7C 08 03 A6 */ mtlr r0 -/* 801725B4 0016F3B4 38 21 00 10 */ addi r1, r1, 0x10 -/* 801725B8 0016F3B8 4E 80 00 20 */ blr - -.global zTaxi_Load__FP5zTaxiP7xSerial -zTaxi_Load__FP5zTaxiP7xSerial: -/* 801725BC 0016F3BC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801725C0 0016F3C0 7C 08 02 A6 */ mflr r0 -/* 801725C4 0016F3C4 90 01 00 14 */ stw r0, 0x14(r1) -/* 801725C8 0016F3C8 4B E9 6E D5 */ bl xBaseLoad__FP5xBaseP7xSerial -/* 801725CC 0016F3CC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801725D0 0016F3D0 7C 08 03 A6 */ mtlr r0 -/* 801725D4 0016F3D4 38 21 00 10 */ addi r1, r1, 0x10 -/* 801725D8 0016F3D8 4E 80 00 20 */ blr - zTaxiEventCB__FP5xBaseP5xBaseUiPCfP5xBase: /* 801725DC 0016F3DC 94 21 FF F0 */ stwu r1, -0x10(r1) /* 801725E0 0016F3E0 7C 08 02 A6 */ mflr r0 @@ -442,26 +369,6 @@ lbl_80172620: /* 8017262C 0016F42C 38 21 00 10 */ addi r1, r1, 0x10 /* 80172630 0016F430 4E 80 00 20 */ blr -on_signal__6taxiCBFUi: -/* 80172634 0016F434 4E 80 00 20 */ blr - -on_start__6taxiCBFv: -/* 80172638 0016F438 4E 80 00 20 */ blr - -on_answer__6taxiCBFQ28ztalkbox11answer_enum: -/* 8017263C 0016F43C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80172640 0016F440 7C 08 02 A6 */ mflr r0 -/* 80172644 0016F444 7C 83 23 78 */ mr r3, r4 -/* 80172648 0016F448 90 01 00 14 */ stw r0, 0x14(r1) -/* 8017264C 0016F44C 4B FF FF 49 */ bl zTaxi_tb_answer__FUi -/* 80172650 0016F450 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80172654 0016F454 7C 08 03 A6 */ mtlr r0 -/* 80172658 0016F458 38 21 00 10 */ addi r1, r1, 0x10 -/* 8017265C 0016F45C 4E 80 00 20 */ blr - -on_stop__6taxiCBFv: -/* 80172660 0016F460 4E 80 00 20 */ blr - .endif .section .rodata @@ -479,7 +386,8 @@ lbl_803CC06C: .skip 0x4 .section .sdata -lbl_803CADB0: +.global sAnswer +sAnswer: .incbin "baserom.dol", 0x2B5E70, 0x8 /* SPECULATION: link order */ .global mFirstFrame__7ROMFont @@ -493,7 +401,8 @@ mResetEnabled__11ResetButton: .section .sdata2 lbl_803CF610: .incbin "baserom.dol", 0x2B8EB0, 0x4 -lbl_803CF614: +.global portalTimer +portalTimer: .incbin "baserom.dol", 0x2B8EB4, 0x4 lbl_803CF618: .incbin "baserom.dol", 0x2B8EB8, 0x4 diff --git a/src/Game/zTaxi.cpp b/src/Game/zTaxi.cpp index 3e8b7021d..483101f27 100644 --- a/src/Game/zTaxi.cpp +++ b/src/Game/zTaxi.cpp @@ -1,9 +1,19 @@ +#include "../Core/x/xBase.h" +#include "../Core/x/xEvent.h" +#include "../Core/x/xstransvc.h" + #include "zTaxi.h" +#include "zScene.h" #include -// func_80172034 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Init__FR5xBaseR9xDynAssetUl") +extern ztalkbox::answer_enum sAnswer; +extern float32 portalTimer; + +void zTaxi_Init(xBase& data, xDynAsset& asset) +{ + zTaxi_Init((zTaxi*)&data, (taxi_asset*)&asset); +} // func_80172054 #pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Init__FP5zTaxiP10taxi_asset") @@ -11,32 +21,89 @@ // func_80172128 #pragma GLOBAL_ASM("asm/Game/zTaxi.s", "__ct__6taxiCBFv") -// func_80172164 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Setup__FP5zTaxi") +void zTaxi_Setup(zTaxi* taxi) +{ + // Load assets. + zSceneFindObject(taxi->basset->cameraID); + zSceneFindObject(taxi->basset->portalID); + zSceneFindObject(taxi->basset->talkBoxID); + xSTFindAsset(taxi->basset->textID, NULL); + + // Taxi setup. + xBase* taxiObj = zSceneFindObject(taxi->basset->taxiID); + *(xBase**)&taxi->taxi = taxiObj; + taxi->portalTimer = portalTimer; + taxi->baseFlags |= (uint16)2; +} // func_801721E4 #pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Update__FP5xBaseP6xScenef") -// func_80172594 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_tb_answer__FUi") +void zTaxi_tb_answer(ztalkbox::answer_enum answer) +{ + sAnswer = answer; +} + +void zTaxi_Save(zTaxi* taxi, xSerial* s) +{ + xBaseSave((xBase*)taxi, s); +} -// func_8017259C -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Save__FP5zTaxiP7xSerial") +void zTaxi_Load(zTaxi* taxi, xSerial* s) +{ + xBaseLoad((xBase*)taxi, s); +} -// func_801725BC -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxi_Load__FP5zTaxiP7xSerial") +#if 1 // func_801725DC #pragma GLOBAL_ASM("asm/Game/zTaxi.s", "zTaxiEventCB__FP5xBaseP5xBaseUiPCfP5xBase") -// func_80172634 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "on_signal__6taxiCBFUi") +#else + +// Can't seem to do comparisons quite right for the conditions surrounding xBaseEnable(to); +int32 zTaxiEventCB(xBase* from, xBase* to, uint32 toEvent, const float32* toParam, xBase* b3) +{ + if ((int32)toEvent != eEventDisable) + { + if (((int)toEvent < eEventDisable) && (eEventEnable <= (int)toEvent)) + { + xBaseEnable(to); + } + } + else + { + xBaseDisable(to); + } + return 1; + + /*switch (toEvent) + { + case eEventDisable: + xBaseDisable(to); + break; + case eEventEnable: + xBaseEnable(to); + break; + } + return eEventEnable;*/ +} + +#endif + +void taxiCB::on_start() +{ +} -// func_80172638 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "on_start__6taxiCBFv") +void taxiCB::on_signal() +{ +} -// func_8017263C -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "on_answer__6taxiCBFQ28ztalkbox11answer_enum") +void taxiCB::on_answer(ztalkbox::answer_enum answer) +{ + zTaxi_tb_answer(answer); +} -// func_80172660 -#pragma GLOBAL_ASM("asm/Game/zTaxi.s", "on_stop__6taxiCBFv") +void taxiCB::on_stop() +{ +} \ No newline at end of file diff --git a/src/Game/zTaxi.h b/src/Game/zTaxi.h index 9928f018b..a38b4c1a7 100644 --- a/src/Game/zTaxi.h +++ b/src/Game/zTaxi.h @@ -1,6 +1,67 @@ #ifndef ZTAXI_H #define ZTAXI_H +#include +#include "../Core/x/xBase.h" +#include "../Core/x/xDynAsset.h" +#include "zEnt.h" +struct callback +{ +}; + +struct taxi_asset : xDynAsset +{ + uint32 marker; + uint32 cameraID; + uint32 portalID; + uint32 talkBoxID; + uint32 textID; + uint32 taxiID; + float32 invDelay; + float32 portalDelay; +}; + +struct zTaxi : xBase +{ + taxi_asset* basset; + zEnt* taxi; + xVec3 pos; + uint32 currState; + uint32 prevState; + float32 portalTimer; + float32 invTimer; + float32 radius; +}; + +struct ztalkbox : xBase +{ + enum answer_enum + { + ANSWER_CONTINUE, + ANSWER_YES, + ANSWER_NO, + ANSWER_NONE + }; +}; + +struct taxiCB : callback +{ + //zTaxi* taxi; + //answer_enum answer; + + void on_start(); + void on_signal(); + void on_answer(ztalkbox::answer_enum answer); + void on_stop(); +}; + +void zTaxi_Init(xBase& data, xDynAsset& asset); +void zTaxi_Init(zTaxi* taxi, taxi_asset* asset); +void zTaxi_Setup(zTaxi* taxi); +void zTaxi_tb_answer(ztalkbox::answer_enum answer); +void zTaxi_Save(zTaxi* taxi, xSerial* s); +void zTaxi_Load(zTaxi* taxi, xSerial* s); +int32 zTaxiEventCB(xBase* from, xBase* to, uint32 toEvent, const float32* toParam, xBase* b3); #endif \ No newline at end of file From a9a14cb30fee0c168e26a87faecfeebb8f76a7b7 Mon Sep 17 00:00:00 2001 From: Gota7 Date: Tue, 3 Nov 2020 20:44:25 -0500 Subject: [PATCH 4/4] Decompile Most Of zCameraFly.cpp; Cleanup More progress. --- .clang-format | 2 +- asm/Game/zCameraFly.s | 85 ++------------------------ src/Game/zAssetTypes.h | 2 + src/Game/zCamera.h | 1 + src/Game/zCameraFly.cpp | 128 ++++++++++++++++++++++++++++++++++++---- src/Game/zCameraFly.h | 22 +++++++ src/Game/zMusic.cpp | 6 +- src/Game/zMusic.h | 17 +++++- src/Game/zTaxi.h | 4 +- 9 files changed, 169 insertions(+), 98 deletions(-) diff --git a/.clang-format b/.clang-format index 6fb9eb10b..151a5da16 100644 --- a/.clang-format +++ b/.clang-format @@ -20,7 +20,7 @@ BinPackArguments: true BinPackParameters: true BraceWrapping: AfterClass: true - #AfterCaseLabel: true + AfterCaseLabel: true AfterControlStatement: true AfterEnum: true AfterFunction: true diff --git a/asm/Game/zCameraFly.s b/asm/Game/zCameraFly.s index 0f6acebde..95a27702c 100644 --- a/asm/Game/zCameraFly.s +++ b/asm/Game/zCameraFly.s @@ -4,81 +4,6 @@ .section .text # 0x8017C0A0 - 0x8017C2B4 -.global zCameraFly_Init__FR5xBaseR9xDynAssetUl -zCameraFly_Init__FR5xBaseR9xDynAssetUl: -/* 8017C0A0 00178EA0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8017C0A4 00178EA4 7C 08 02 A6 */ mflr r0 -/* 8017C0A8 00178EA8 90 01 00 14 */ stw r0, 0x14(r1) -/* 8017C0AC 00178EAC 48 00 00 15 */ bl zCameraFly_Init__FP10zCameraFlyP15CameraFly_asset -/* 8017C0B0 00178EB0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8017C0B4 00178EB4 7C 08 03 A6 */ mtlr r0 -/* 8017C0B8 00178EB8 38 21 00 10 */ addi r1, r1, 0x10 -/* 8017C0BC 00178EBC 4E 80 00 20 */ blr - -.global zCameraFly_Init__FP10zCameraFlyP15CameraFly_asset -zCameraFly_Init__FP10zCameraFlyP15CameraFly_asset: -/* 8017C0C0 00178EC0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8017C0C4 00178EC4 7C 08 02 A6 */ mflr r0 -/* 8017C0C8 00178EC8 90 01 00 14 */ stw r0, 0x14(r1) -/* 8017C0CC 00178ECC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8017C0D0 00178ED0 7C 9F 23 78 */ mr r31, r4 -/* 8017C0D4 00178ED4 93 C1 00 08 */ stw r30, 8(r1) -/* 8017C0D8 00178ED8 7C 7E 1B 78 */ mr r30, r3 -/* 8017C0DC 00178EDC 4B E8 D3 25 */ bl xBaseInit__FP5xBaseP10xBaseAsset -/* 8017C0E0 00178EE0 3C 60 80 18 */ lis r3, zCameraFlyEventCB__FP5xBaseP5xBaseUiPCfP5xBase@ha -/* 8017C0E4 00178EE4 93 FE 00 10 */ stw r31, 0x10(r30) -/* 8017C0E8 00178EE8 38 03 C2 20 */ addi r0, r3, zCameraFlyEventCB__FP5xBaseP5xBaseUiPCfP5xBase@l -/* 8017C0EC 00178EEC 90 1E 00 0C */ stw r0, 0xc(r30) -/* 8017C0F0 00178EF0 88 1E 00 05 */ lbz r0, 5(r30) -/* 8017C0F4 00178EF4 28 00 00 00 */ cmplwi r0, 0 -/* 8017C0F8 00178EF8 41 82 00 10 */ beq lbl_8017C108 -/* 8017C0FC 00178EFC 38 1F 00 14 */ addi r0, r31, 0x14 -/* 8017C100 00178F00 90 1E 00 08 */ stw r0, 8(r30) -/* 8017C104 00178F04 48 00 00 0C */ b lbl_8017C110 -lbl_8017C108: -/* 8017C108 00178F08 38 00 00 00 */ li r0, 0 -/* 8017C10C 00178F0C 90 1E 00 08 */ stw r0, 8(r30) -lbl_8017C110: -/* 8017C110 00178F10 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8017C114 00178F14 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8017C118 00178F18 83 C1 00 08 */ lwz r30, 8(r1) -/* 8017C11C 00178F1C 7C 08 03 A6 */ mtlr r0 -/* 8017C120 00178F20 38 21 00 10 */ addi r1, r1, 0x10 -/* 8017C124 00178F24 4E 80 00 20 */ blr - -.global zCameraFly_Setup__FP10zCameraFly -zCameraFly_Setup__FP10zCameraFly: -/* 8017C128 00178F28 A0 03 00 06 */ lhz r0, 6(r3) -/* 8017C12C 00178F2C 60 00 00 02 */ ori r0, r0, 2 -/* 8017C130 00178F30 B0 03 00 06 */ sth r0, 6(r3) -/* 8017C134 00178F34 4E 80 00 20 */ blr - -.global zCameraFly_Update__FP5xBaseP6xScenef -zCameraFly_Update__FP5xBaseP6xScenef: -/* 8017C138 00178F38 4E 80 00 20 */ blr - -.global zCameraFly_Save__FP10zCameraFlyP7xSerial -zCameraFly_Save__FP10zCameraFlyP7xSerial: -/* 8017C13C 00178F3C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8017C140 00178F40 7C 08 02 A6 */ mflr r0 -/* 8017C144 00178F44 90 01 00 14 */ stw r0, 0x14(r1) -/* 8017C148 00178F48 4B E8 D3 05 */ bl xBaseSave__FP5xBaseP7xSerial -/* 8017C14C 00178F4C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8017C150 00178F50 7C 08 03 A6 */ mtlr r0 -/* 8017C154 00178F54 38 21 00 10 */ addi r1, r1, 0x10 -/* 8017C158 00178F58 4E 80 00 20 */ blr - -.global zCameraFly_Load__FP10zCameraFlyP7xSerial -zCameraFly_Load__FP10zCameraFlyP7xSerial: -/* 8017C15C 00178F5C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8017C160 00178F60 7C 08 02 A6 */ mflr r0 -/* 8017C164 00178F64 90 01 00 14 */ stw r0, 0x14(r1) -/* 8017C168 00178F68 4B E8 D3 35 */ bl xBaseLoad__FP5xBaseP7xSerial -/* 8017C16C 00178F6C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8017C170 00178F70 7C 08 03 A6 */ mtlr r0 -/* 8017C174 00178F74 38 21 00 10 */ addi r1, r1, 0x10 -/* 8017C178 00178F78 4E 80 00 20 */ blr - .global zCameraFlyProcessStopEvent__Fv zCameraFlyProcessStopEvent__Fv: /* 8017C17C 00178F7C 94 21 FF F0 */ stwu r1, -0x10(r1) @@ -91,8 +16,8 @@ zCameraFlyProcessStopEvent__Fv: /* 8017C198 00178F98 4B ED 63 11 */ bl zCamera_FlyOnly__Fv /* 8017C19C 00178F9C 28 03 00 00 */ cmplwi r3, 0 /* 8017C1A0 00178FA0 40 82 00 10 */ bne lbl_8017C1B0 -/* 8017C1A4 00178FA4 C0 22 AD D8 */ lfs f1, lbl_803CF758-_SDA2_BASE_(r2) -/* 8017C1A8 00178FA8 C0 42 AD DC */ lfs f2, lbl_803CF75C-_SDA2_BASE_(r2) +/* 8017C1A4 00178FA4 C0 22 AD D8 */ lfs f1, musVolume-_SDA2_BASE_(r2) +/* 8017C1A8 00178FA8 C0 42 AD DC */ lfs f2, musDelay-_SDA2_BASE_(r2) /* 8017C1AC 00178FAC 4B F2 BA B5 */ bl zMusicSetVolume__Fff lbl_8017C1B0: /* 8017C1B0 00178FB0 80 AD 8B BC */ lwz r5, zcam_flyasset_current-_SDA_BASE_(r13) @@ -175,7 +100,9 @@ lbl_8017C29C: .endif .section .sdata2 -lbl_803CF758: +.global musVolume +musVolume: .incbin "baserom.dol", 0x2B8FF8, 0x4 -lbl_803CF75C: +.global musDelay +musDelay: .incbin "baserom.dol", 0x2B8FFC, 0x4 diff --git a/src/Game/zAssetTypes.h b/src/Game/zAssetTypes.h index 50e98cb90..c1e3fb365 100644 --- a/src/Game/zAssetTypes.h +++ b/src/Game/zAssetTypes.h @@ -1,6 +1,8 @@ #ifndef ZASSETTYPES_H #define ZASSETTYPES_H +#include +extern uint32 zcam_flyasset_current; #endif \ No newline at end of file diff --git a/src/Game/zCamera.h b/src/Game/zCamera.h index fd7f60d5f..2d56faef0 100644 --- a/src/Game/zCamera.h +++ b/src/Game/zCamera.h @@ -5,5 +5,6 @@ void zCameraSetConvers(int on); void zCameraDoTrans(xCamAsset* asset, float ttime); +uint32 zCamera_FlyOnly(); #endif \ No newline at end of file diff --git a/src/Game/zCameraFly.cpp b/src/Game/zCameraFly.cpp index d7b893024..1573697fa 100644 --- a/src/Game/zCameraFly.cpp +++ b/src/Game/zCameraFly.cpp @@ -1,27 +1,131 @@ +#include "../Core/x/xBase.h" +#include "../Core/x/xEvent.h" +#include "../Core/x/xScene.h" + +#include "zAssetTypes.h" #include "zCameraFly.h" +#include "zCamera.h" +#include "zGlobals.h" +#include "zMusic.h" #include -// func_8017C0A0 -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Init__FR5xBaseR9xDynAssetUl") +extern float32 musVolume; // 1.0 +extern float32 musDelay; // 2.0 + +void zCameraFly_Init(xBase& data, xDynAsset& asset) +{ + zCameraFly_Init((zCameraFly*)&data, (CameraFly_asset*)&asset); +} + +void zCameraFly_Init(zCameraFly* data, CameraFly_asset* asset) +{ + xBaseInit((xBase*)data, (xBaseAsset*)asset); + data->casset = asset; + data->eventFunc = (xBaseEventCB)zCameraFlyEventCB; + if (data->linkCount != 0) + { + *(CameraFly_asset**)&data->link = asset + 1; + } + else + { + data->link = NULL; + } +} -// func_8017C0C0 -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Init__FP10zCameraFlyP15CameraFly_asset") +void zCameraFly_Setup(zCameraFly* fly) +{ + fly->baseFlags |= (uint16)2; +} -// func_8017C128 -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Setup__FP10zCameraFly") +void zCameraFly_Update(xBase* to, xScene* scene, float32 dt) +{ +} -// func_8017C138 -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Update__FP5xBaseP6xScenef") +void zCameraFly_Save(zCameraFly* fly, xSerial* s) +{ + xBaseSave((xBase*)fly, s); +} -// func_8017C13C -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Save__FP10zCameraFlyP7xSerial") +void zCameraFly_Load(zCameraFly* fly, xSerial* s) +{ + xBaseLoad((xBase*)fly, s); +} -// func_8017C15C -#pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFly_Load__FP10zCameraFlyP7xSerial") +#if 1 // func_8017C17C #pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFlyProcessStopEvent__Fv") +#else + +// Inside loop appears to be completely off, along with assignment of variables at the start. +uint32 zCameraFlyProcessStopEvent() +{ + // Ghidra disassembly. + /*uint local_r3_28; + xBase *pxVar1; + uint uVar2; + zScene *temp_3f17c03b02; + + temp_3f17c03b02 = globals.scenePreload; + local_r3_28 = zCamera_FlyOnly(); + if (local_r3_28 == 0) { + zMusicSetVolume(musVolume,musDelay); + } + uVar2 = 0; + while(true) { + if ((uint)temp_3f17c03b02->field_1 <= (uVar2 & 0xffff)) { + return 0; + } + pxVar1 = *(xBase **)(temp_3f17c03b02->field_2 + (uVar2 & 0xffff) * 4); + if ((pxVar1->baseType == 0x3e) && (*(uint32_t *)(pxVar1[1].id + 0x10) == zcam_flyasset_current)) + break; + uVar2 = uVar2 + 1; + } + zEntEvent(pxVar1, eEventStop); + return 1; + */ + + // Attempted rewrite. + zScene* scene; + uint16 i; + xBase* base; + scene = globals.scenePreload; + uint32 uVar1 = zCamera_FlyOnly(); + if (uVar1 == 0) + { + zMusicSetVolume(musVolume, musDelay); + } + while (true) + { + if (i >= scene->num_base) + { + return 0; + } + base = *(xBase**)(scene->base[i]); + if ((base->baseType == 0x3e) && (*(uint32*)(base[1].id + 0x10) == zcam_flyasset_current)) + { + break; + } + } + zEntEvent(base, eEventStop); + return 1; +} + +#endif + +#if 1 + // func_8017C220 #pragma GLOBAL_ASM("asm/Game/zCameraFly.s", "zCameraFlyEventCB__FP5xBaseP5xBaseUiPCfP5xBase") + +#else + +// Just a template for later use. +int32 zCameraFlyEventCB(xBase* from, xBase* to, uint32 toEvent, const float32* toParam, xBase* b3) +{ + return eEventEnable; +} + +#endif \ No newline at end of file diff --git a/src/Game/zCameraFly.h b/src/Game/zCameraFly.h index 2351e33af..04ea515d3 100644 --- a/src/Game/zCameraFly.h +++ b/src/Game/zCameraFly.h @@ -1,6 +1,28 @@ #ifndef ZCAMERAFLY_H #define ZCAMERAFLY_H +#include +#include "../Core/x/xBase.h" +#include "../Core/x/xDynAsset.h" +#include "../Core/x/xScene.h" +struct CameraFly_asset : xDynAsset +{ + uint32 flyID; +}; + +struct zCameraFly : xBase +{ + CameraFly_asset* casset; +}; + +void zCameraFly_Init(xBase& data, xDynAsset& asset); +void zCameraFly_Init(zCameraFly* data, CameraFly_asset* asset); +void zCameraFly_Setup(zCameraFly* fly); +void zCameraFly_Update(xBase* to, xScene* scene, float32 dt); +void zCameraFly_Save(zCameraFly* fly, xSerial* s); +void zCameraFly_Load(zCameraFly* fly, xSerial* s); +uint32 zCameraFlyProcessStopEvent(); +int32 zCameraFlyEventCB(xBase* from, xBase* to, uint32 toEvent, const float32* toParam, xBase* b3); #endif \ No newline at end of file diff --git a/src/Game/zMusic.cpp b/src/Game/zMusic.cpp index 454874d11..28eb91983 100644 --- a/src/Game/zMusic.cpp +++ b/src/Game/zMusic.cpp @@ -22,8 +22,8 @@ void zMusicRefreshVolume() zMusicTrackInfo* track = &sMusicTrack[i]; if (track->snd_id != 0) { - xSndSetVol(track->snd_id, - volume.cur); // Only reset volume if the sound ID is not blank. + // Only reset volume if the sound ID is not blank. + xSndSetVol(track->snd_id, volume.cur); } } } @@ -139,7 +139,7 @@ void zMusicKill() xSndStop(track->snd_id); track->snd_id = 0; track->loop = 0; - track->situation = 0; + track->situation = NULL; } } } diff --git a/src/Game/zMusic.h b/src/Game/zMusic.h index 897bdd802..6e4f672bb 100644 --- a/src/Game/zMusic.h +++ b/src/Game/zMusic.h @@ -3,6 +3,21 @@ #include +struct zMusicSituation +{ + int32 track; + uint32 priority; + uint32 countMax; + float32 delay; + float32 punchDelay; + float32 elapsedTime; + uint32 count; + uint32 sndid; + int32 situation; + int32 music_enum; + int32 game_state; +}; + struct zVolumeInfo { float32 cur; @@ -15,7 +30,7 @@ struct zMusicTrackInfo { uint32 snd_id; uint32 loop; - int32 situation; // Is actually a zMusicSituation*. + zMusicSituation* situation; uint32 assetID; float32 lastVol; }; diff --git a/src/Game/zTaxi.h b/src/Game/zTaxi.h index a38b4c1a7..9ba246066 100644 --- a/src/Game/zTaxi.h +++ b/src/Game/zTaxi.h @@ -47,8 +47,8 @@ struct ztalkbox : xBase struct taxiCB : callback { - //zTaxi* taxi; - //answer_enum answer; + zTaxi* taxi; + ztalkbox::answer_enum answer; void on_start(); void on_signal();