diff --git a/asm/ov00/Item/ItemManager.inc b/asm/ov00/Item/ItemManager.inc index 1adb8661..9f1713db 100644 --- a/asm/ov00/Item/ItemManager.inc +++ b/asm/ov00/Item/ItemManager.inc @@ -4,5 +4,5 @@ .extern data_ov00_020eec68 .extern func_020196bc .extern func_020196fc -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern gItemManager diff --git a/asm/ov00/Item/ItemManager.s b/asm/ov00/Item/ItemManager.s index cfbe2a4c..281b8dab 100644 --- a/asm/ov00/Item/ItemManager.s +++ b/asm/ov00/Item/ItemManager.s @@ -3,109 +3,6 @@ .text - .global _ZN11ItemManager18func_ov00_020ae648Ejjj - thumb_func_start _ZN11ItemManager18func_ov00_020ae648Ejjj -_ZN11ItemManager18func_ov00_020ae648Ejjj: ; 0x020ae648 - push {r3, lr} - ldr r1, _020ae6e8 ; =gItemManager - ldr r2, [r1] - mov r1, #0x53 - lsl r1, r1, #2 - ldrb r3, [r2, r1] - cmp r3, #1 - bne _020ae65e - mov r0, #0 - strb r0, [r2, r1] - pop {r3, pc} -_020ae65e: - cmp r0, #0x2d - bgt _020ae692 - bge _020ae6b4 - cmp r0, #0x18 - bgt _020ae684 - bge _020ae6bc - cmp r0, #2 - bgt _020ae67e - cmp r0, #0 - blt _020ae6cc - beq _020ae6c4 - cmp r0, #1 - beq _020ae6bc - cmp r0, #2 - beq _020ae6bc - b _020ae6cc -_020ae67e: - cmp r0, #0xa - beq _020ae6c8 - b _020ae6cc -_020ae684: - cmp r0, #0x19 - bgt _020ae68c - beq _020ae6bc - b _020ae6cc -_020ae68c: - cmp r0, #0x1b - beq _020ae6b8 - b _020ae6cc -_020ae692: - cmp r0, #0x3e - bgt _020ae6a6 - bge _020ae6c4 - cmp r0, #0x2e - bgt _020ae6a0 - beq _020ae6b4 - b _020ae6cc -_020ae6a0: - cmp r0, #0x2f - beq _020ae6b4 - b _020ae6cc -_020ae6a6: - cmp r0, #0x81 - bgt _020ae6ae - beq _020ae6c0 - b _020ae6cc -_020ae6ae: - cmp r0, #0x82 - beq _020ae6c0 - b _020ae6cc -_020ae6b4: - mov r1, #0x2e - b _020ae6ce -_020ae6b8: - mov r1, #0x2a - b _020ae6ce -_020ae6bc: - mov r1, #0x29 - b _020ae6ce -_020ae6c0: - mov r1, #0x2b - b _020ae6ce -_020ae6c4: - mov r1, #0x2c - b _020ae6ce -_020ae6c8: - mov r1, #0x2d - b _020ae6ce -_020ae6cc: - mov r1, #0x28 -_020ae6ce: - mov r0, #0x47 - lsl r0, r0, #2 - ldr r3, [r2, r0] - cmp r3, #0 - beq _020ae6de - add r1, r3, #0 - mov r3, #0 - str r3, [r2, r0] -_020ae6de: - ldr r0, _020ae6ec ; =data_ov00_020eec68 - blx func_ov00_020d73bc - pop {r3, pc} - nop - thumb_func_end _ZN11ItemManager18func_ov00_020ae648Ejjj -_020ae6e8: .word gItemManager -_020ae6ec: .word data_ov00_020eec68 - .global _ZNK11ItemManager18IsTreasureSalvagedEjj thumb_func_start _ZNK11ItemManager18IsTreasureSalvagedEjj _ZNK11ItemManager18IsTreasureSalvagedEjj: ; 0x020ae6f0 diff --git a/asm/ov00/ov00_020c3e54.s b/asm/ov00/ov00_020c3e54.s index c4c39b8b..7236a01d 100644 --- a/asm/ov00/ov00_020c3e54.s +++ b/asm/ov00/ov00_020c3e54.s @@ -24429,9 +24429,9 @@ _020d73b0: ldmia sp!, {r4, pc} arm_func_end func_ov00_020d7394 - .global func_ov00_020d73bc - arm_func_start func_ov00_020d73bc -func_ov00_020d73bc: ; 0x020d73bc + .global PlaySoundEffect + arm_func_start PlaySoundEffect +PlaySoundEffect: ; 0x020d73bc stmdb sp!, {r3, r4, r5, lr} mov r4, r1 mov r5, r0 @@ -24445,7 +24445,7 @@ func_ov00_020d73bc: ; 0x020d73bc str ip, [sp] bl func_ov00_020d6d30 ldmia sp!, {r3, r4, r5, pc} - arm_func_end func_ov00_020d73bc + arm_func_end PlaySoundEffect .global func_ov00_020d73f0 arm_func_start func_ov00_020d73f0 diff --git a/asm/ov05.inc b/asm/ov05.inc index c7c925c8..843a02d2 100644 --- a/asm/ov05.inc +++ b/asm/ov05.inc @@ -26,7 +26,7 @@ .extern _ZN10PlayerBase18func_ov00_020a7c00Ei .extern _ZN11ItemManager12GetItemModelEj .extern _ZN11ItemManager15LoadFanfareItemEi -.extern _ZN11ItemManager18func_ov00_020ae648Ejjj +.extern _ZN11ItemManager18PlayItemFanfareSfxEi .extern _ZN11ItemManager8GiveItemEi .extern _ZN12ActorManager11DeleteActorEjb .extern _ZN12ActorManager12FilterActorsEP15ActorFilterBaseP9ActorList diff --git a/asm/ov05.s b/asm/ov05.s index a14b206c..cd59e77b 100644 --- a/asm/ov05.s +++ b/asm/ov05.s @@ -10245,7 +10245,7 @@ _02109354: cmp r0, #0 beq _02109380 ldr r0, [r5, #0x74] - blx _ZN11ItemManager18func_ov00_020ae648Ejjj + blx _ZN11ItemManager18PlayItemFanfareSfxEi _02109380: mov r0, r5 bl _ZN13LinkStateBase18func_ov00_020a8d50Ev diff --git a/asm/ov12.inc b/asm/ov12.inc index deae5042..dc1fa955 100644 --- a/asm/ov12.inc +++ b/asm/ov12.inc @@ -632,7 +632,7 @@ .extern func_ov00_020d70a4 .extern func_ov00_020d716c .extern func_ov00_020d7180 -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d7404 .extern func_ov00_020d77e4 .extern func_ov00_020d7a84 diff --git a/asm/ov12.s b/asm/ov12.s index ab0603fa..70704064 100644 --- a/asm/ov12.s +++ b/asm/ov12.s @@ -20651,7 +20651,7 @@ _021239cc: bl func_ov12_02124dfc mov r1, r0 ldr r0, _02123a20 ; =data_ov00_020eec68 - bl func_ov00_020d73bc + bl PlaySoundEffect b _02123a04 _021239ec: ldrb r0, [r6, #0x370] @@ -20659,7 +20659,7 @@ _021239ec: beq _02123a04 ldr r0, _02123a20 ; =data_ov00_020eec68 mov r1, #0x2b - bl func_ov00_020d73bc + bl PlaySoundEffect _02123a04: mov r0, #7 str r0, [r6, #0xc] diff --git a/asm/ov14/ov14_0213b778.inc b/asm/ov14/ov14_0213b778.inc index eca286d9..7cbae315 100644 --- a/asm/ov14/ov14_0213b778.inc +++ b/asm/ov14/ov14_0213b778.inc @@ -11,7 +11,7 @@ .extern _ZN11ItemManager15SetEquippedItemEi .extern _ZN11ItemManager17EquipPreviousItemEv .extern _ZN11ItemManager18EquipItem_vfunc_38Ei -.extern _ZN11ItemManager18func_ov00_020ae648Ejjj +.extern _ZN11ItemManager18PlayItemFanfareSfxEi .extern _ZN11ItemManager8GiveItemEi .extern _ZN11ItemManager9SetPotionEjh .extern _ZN12ActorManager12FilterActorsEP15ActorFilterBaseP9ActorList diff --git a/asm/ov14/ov14_0213b778.s b/asm/ov14/ov14_0213b778.s index 7e597829..6466c829 100644 --- a/asm/ov14/ov14_0213b778.s +++ b/asm/ov14/ov14_0213b778.s @@ -27197,7 +27197,7 @@ _021508ce: ldr r0, [r4, #8] blx func_ov03_020fc10c ldr r0, [r4, #8] - bl _ZN11ItemManager18func_ov00_020ae648Ejjj + bl _ZN11ItemManager18PlayItemFanfareSfxEi pop {r4, pc} .align 2, 0 thumb_func_end func_ov14_021508b8 diff --git a/asm/ov15.inc b/asm/ov15.inc index 095396d5..80e6e728 100644 --- a/asm/ov15.inc +++ b/asm/ov15.inc @@ -14,7 +14,7 @@ .extern _ZN11ItemManager10SetUnk_09eEjt .extern _ZN11ItemManager15LoadFanfareItemEi .extern _ZN11ItemManager18func_ov00_020ad528Ev -.extern _ZN11ItemManager18func_ov00_020ae648Ejjj +.extern _ZN11ItemManager18PlayItemFanfareSfxEi .extern _ZN11ItemManager19SetTreasureSalvagedEj .extern _ZN11ItemManager8GiveItemEi .extern _ZN12ActorManager12FilterActorsEP15ActorFilterBaseP9ActorList @@ -723,7 +723,7 @@ .extern func_ov00_020d70a4 .extern func_ov00_020d716c .extern func_ov00_020d71a0 -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d7424 .extern func_ov00_020d74bc .extern func_ov00_020d77e4 diff --git a/asm/ov15.s b/asm/ov15.s index 671a1e83..305cfb66 100644 --- a/asm/ov15.s +++ b/asm/ov15.s @@ -42710,7 +42710,7 @@ _0214389c: ldr r0, _02143a38 ; =data_ov00_020eec68 mov r1, #0xda str r2, [r7, #0x378] - bl func_ov00_020d73bc + bl PlaySoundEffect _021438f4: ldr r0, [r7, #0x20] bl func_ov15_02149acc @@ -43237,7 +43237,7 @@ _02144020: bl func_ov00_020d716c ldr r0, _0214415c ; =data_ov00_020eec68 mov r1, #0xdb - bl func_ov00_020d73bc + bl PlaySoundEffect add r0, sp, #0 bl func_ov00_0209a4f4 mov r2, #0 @@ -43346,7 +43346,7 @@ _021441a8: bl func_ov00_020d716c ldr r0, _021442d8 ; =data_ov00_020eec68 mov r1, #0xdb - bl func_ov00_020d73bc + bl PlaySoundEffect add r0, sp, #0 bl func_ov00_0209a4f4 mov r2, #0 @@ -44561,7 +44561,7 @@ _02145370: mov r4, r0 bl func_ov03_020fc10c mov r0, r4 - blx _ZN11ItemManager18func_ov00_020ae648Ejjj + blx _ZN11ItemManager18PlayItemFanfareSfxEi mov r0, #0x10 strb r0, [r9, #0x34d] b _02145420 @@ -61729,7 +61729,7 @@ _02153b28: bl func_ov15_02153938 ldr r0, [r4, #0x41c] add r0, r0, #0x46 - blx _ZN11ItemManager18func_ov00_020ae648Ejjj + blx _ZN11ItemManager18PlayItemFanfareSfxEi mov r0, #5 strb r0, [r5, #0x436] b _02153d74 @@ -62211,7 +62211,7 @@ _02154254: bl func_ov15_02153938 ldr r0, [r5, #0x41c] add r0, r0, #0x46 - blx _ZN11ItemManager18func_ov00_020ae648Ejjj + blx _ZN11ItemManager18PlayItemFanfareSfxEi mov r0, #5 strb r0, [r4, #0x436] b _02154304 @@ -62311,7 +62311,7 @@ _02154374: bl func_ov00_020d716c ldr r0, _02154620 ; =data_ov00_020eec68 mov r1, #0xde - bl func_ov00_020d73bc + bl PlaySoundEffect mov r0, #1 strb r0, [r5, #0x436] mov r0, #0 @@ -88292,7 +88292,7 @@ _0216a994: bl func_ov03_020fc10c ldr r0, _0216aa24 ; =data_ov00_020eec68 mov r1, #0x28 - bl func_ov00_020d73bc + bl PlaySoundEffect mov r1, #0 sub r0, r1, #0x1000 str r0, [sp, #0x18] diff --git a/asm/ov23.inc b/asm/ov23.inc index 114655f7..694a2f3f 100644 --- a/asm/ov23.inc +++ b/asm/ov23.inc @@ -457,7 +457,7 @@ .extern func_ov00_020d1980 .extern func_ov00_020d70a4 .extern func_ov00_020d716c -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d77e4 .extern func_ov00_020d7a84 .extern func_ov00_020d7b20 diff --git a/asm/ov23.s b/asm/ov23.s index 1d821bf2..4e6986ee 100644 --- a/asm/ov23.s +++ b/asm/ov23.s @@ -1892,14 +1892,14 @@ _0216ee88: _0216eea4: ldr r0, _0216eeec ; =data_ov00_020eec68 mov r1, #0xc2 - bl func_ov00_020d73bc + bl PlaySoundEffect add sp, sp, #8 mov r0, #1 ldmia sp!, {r4, r5, r6, pc} _0216eebc: ldr r0, _0216eeec ; =data_ov00_020eec68 mov r1, #0xc4 - bl func_ov00_020d73bc + bl PlaySoundEffect add sp, sp, #8 mov r0, #1 ldmia sp!, {r4, r5, r6, pc} diff --git a/asm/ov26.inc b/asm/ov26.inc index 650cf411..d963359b 100644 --- a/asm/ov26.inc +++ b/asm/ov26.inc @@ -406,7 +406,7 @@ .extern func_ov00_020d70a4 .extern func_ov00_020d716c .extern func_ov00_020d7180 -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d73f0 .extern func_ov00_020d77e4 .extern func_ov00_020d7c8c diff --git a/asm/ov26.s b/asm/ov26.s index f57e934c..49805e0d 100644 --- a/asm/ov26.s +++ b/asm/ov26.s @@ -8276,7 +8276,7 @@ _02173dac: str r0, [r4, #0x78] ldr r0, _02173de8 ; =data_ov00_020eec68 mov r1, #0x4c - blx func_ov00_020d73bc + blx PlaySoundEffect pop {r3, r4, r5, pc} nop thumb_func_end func_ov26_02173cec diff --git a/asm/ov38.inc b/asm/ov38.inc index 8ef6b033..916faf43 100644 --- a/asm/ov38.inc +++ b/asm/ov38.inc @@ -217,7 +217,7 @@ .extern func_ov00_020d5f98 .extern func_ov00_020d70a4 .extern func_ov00_020d716c -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d73f0 .extern func_ov00_020d7c8c .extern func_ov00_020d7d18 diff --git a/asm/ov38.s b/asm/ov38.s index 3c3f2290..966dfbbc 100644 --- a/asm/ov38.s +++ b/asm/ov38.s @@ -208,7 +208,7 @@ func_ov38_0217bf48: ; 0x0217bf48 bl func_ov00_020d8388 ldr r0, _0217c048 ; =data_ov00_020eec68 mov r1, #0xcf - bl func_ov00_020d73bc + bl PlaySoundEffect ldr r0, _0217c04c ; =data_ov38_021891e0 ldr r0, [r0, #0x58] bl func_ov38_02184a18 diff --git a/asm/ov39.inc b/asm/ov39.inc index 67243319..88466feb 100644 --- a/asm/ov39.inc +++ b/asm/ov39.inc @@ -230,7 +230,7 @@ .extern func_ov00_020d18f4 .extern func_ov00_020d1980 .extern func_ov00_020d716c -.extern func_ov00_020d73bc +.extern PlaySoundEffect .extern func_ov00_020d73f0 .extern func_ov00_020d77e4 .extern func_ov00_020d7ad4 diff --git a/asm/ov39.s b/asm/ov39.s index f76adc68..362cbf5b 100644 --- a/asm/ov39.s +++ b/asm/ov39.s @@ -112,7 +112,7 @@ _0217bed4: bl func_ov00_0207c5d4 ldr r0, _0217bf2c ; =data_ov00_020eec68 mov r1, #0xd2 - bl func_ov00_020d73bc + bl PlaySoundEffect ldr r1, [r4, #8] ldr r0, [r1, #0x158] bic r0, r0, #0x4000000 diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index 7a6a0416..9535d9d2 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -89,7 +89,7 @@ enum ItemFlag_ { typedef s32 ItemId; enum ItemId_ { - /* 0x00 */ ItemId_Unk_0 = 0, + /* 0x00 */ ItemId_None = 0, /* 0x01 */ ItemId_SmallKey = 1, /* 0x02 */ ItemId_GreenRupee = 2, /* 0x03 */ ItemId_OshusSword = 3, diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 46c2d70b..1edd9a48 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -15,6 +15,7 @@ extern "C" { #include "Map/MapManager.hpp" #include "Player/EquipItem.hpp" #include "Player/HealthManager.hpp" +#include "Sound/Sfx.hpp" #include "System/SysNew.hpp" #include "System/OverlayManager.hpp" #include "Render/ModelRender.hpp" @@ -222,7 +223,7 @@ private: /* 138 */ u32 mSalvagedTreasureFlags; /* 13c */ ShipPartPricesShown mShipPartPricesShown; /* 148 */ u32 mTreasurePriceShownFlags[CEIL_DIV(Treasure_COUNT, 32)]; - /* 14c */ unk8 mUnk_14c; + /* 14c */ bool mUnk_14c; /* 14d */ u8 mUnk_14d; /* 14e */ unk8 mUnk_14e[0x2]; /* 150 */ @@ -278,6 +279,7 @@ public: void LoadFanfareItem(ItemId id); bool GetFanfareItemScale(Vec3p *pScale) const; void LoadDungeonItemModels(); + static void PlayItemFanfareSfx(ItemId item); // Ship ShipType GetEquippedShipPart(ShipPart part) const; @@ -327,7 +329,6 @@ public: // Unknown void func_ov00_020ae4dc(s32 param1); - void func_ov00_020ae648(unk32 param1, unk32 param2, unk32 param3); }; extern ItemManager *gItemManager; diff --git a/include/Sound/Sfx.hpp b/include/Sound/Sfx.hpp new file mode 100644 index 00000000..b87eb8c6 --- /dev/null +++ b/include/Sound/Sfx.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include "global.h" +#include "types.h" + +typedef u32 SfxId; +enum SfxId_ { + SfxId_FanfareDefault = 0x28, + SfxId_FanfareRupee = 0x29, + SfxId_FanfareGoldRupee = 0x2a, + SfxId_FanfareRupoor = 0x2b, + SfxId_FanfareNothing = 0x2c, + SfxId_FanfareHeartContainer = 0x2d, + SfxId_FanfareGem = 0x2e, +}; diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index b77717eb..f46fa040 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -716,7 +716,7 @@ THUMB void ItemManager::GiveItem(ItemId id) { this->GiveRupees(-50, true); } break; - case ItemId_Unk_0: break; + case ItemId_None: break; case ItemId_Unk_5: break; case ItemId_Unk_16: break; case ItemId_Unk_131: break; @@ -914,3 +914,54 @@ THUMB void ItemManager::LoadDungeonItemModels() { func_020196fc(mDungeonItemModels[i], unk2); } } + +extern unk32 data_ov00_020eec68; +extern "C" void PlaySoundEffect(void *param1, SfxId sfx); +THUMB void ItemManager::PlayItemFanfareSfx(ItemId item) { + if (gItemManager->mUnk_14c == true) { + gItemManager->mUnk_14c = false; + return; + } + SfxId sfx; + switch (item) { + case ItemId_PowerGem: + case ItemId_WisdomGem: + case ItemId_CourageGem: { + sfx = SfxId_FanfareGem; + } break; + + case ItemId_GoldRupee: { + sfx = SfxId_FanfareGoldRupee; + } break; + + case ItemId_SmallKey: + case ItemId_GreenRupee: + case ItemId_BlueRupee: + case ItemId_RedRupee: { + sfx = SfxId_FanfareRupee; + } break; + + case ItemId_Rupoor10: + case ItemId_Rupoor50: { + sfx = SfxId_FanfareRupoor; + } break; + + case ItemId_None: + case ItemId_HerosNewClothes: { + sfx = SfxId_FanfareNothing; + } break; + + case ItemId_HeartContainer: { + sfx = SfxId_FanfareHeartContainer; + } break; + + default: { + sfx = SfxId_FanfareDefault; + } break; + } + if (gItemManager->mUnk_11c != 0) { + sfx = gItemManager->mUnk_11c; + gItemManager->mUnk_11c = 0; + } + PlaySoundEffect(&data_ov00_020eec68, sfx); +}