From ce73f7f7656aeb9dc290e473ac6d4aea57f5021b Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 18 Apr 2024 19:37:21 +0200 Subject: [PATCH] Decomp `ItemManager::GiveItem` --- asm/main.inc | 2 +- asm/main.s | 2 +- asm/ov00/Item/ItemManager.inc | 4 +- asm/ov00/Item/ItemManager.s | 797 +------------------------------ asm/ov00/ov00_020b1498.inc | 2 +- asm/ov00/ov00_020b1498.s | 2 +- asm/ov05.inc | 2 +- asm/ov05.s | 2 +- asm/ov09.inc | 2 +- asm/ov09.s | 20 +- asm/ov14/Actor/ActorRupee.inc | 2 +- asm/ov14/Actor/ActorRupee.s | 2 +- asm/ov14/ov14_0213b778.inc | 2 +- asm/ov14/ov14_0213b778.s | 2 +- asm/ov15.inc | 4 +- asm/ov15.s | 8 +- asm/ov28.inc | 2 +- asm/ov28.s | 2 +- asm/ov31.inc | 4 +- asm/ov31.s | 4 +- asm/ov45.inc | 2 +- asm/ov45.s | 2 +- asm/ov46.inc | 2 +- asm/ov46.s | 2 +- asm/ov49.inc | 2 +- asm/ov49.s | 2 +- asm/ov52.inc | 2 +- asm/ov52.s | 2 +- asm/ov55.inc | 2 +- asm/ov55.s | 2 +- include/Item/Item.hpp | 2 +- include/Item/ItemManager.hpp | 2 +- include/Save/AdventureFlags.hpp | 2 +- src/00_Core/Item/ItemManager.cpp | 279 +++++++++++ 34 files changed, 339 insertions(+), 833 deletions(-) diff --git a/asm/main.inc b/asm/main.inc index 1071f33c..f0597b61 100644 --- a/asm/main.inc +++ b/asm/main.inc @@ -1,6 +1,6 @@ #pragma once .extern Divide -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager7AddItemEi .extern _ZN11ItemManager8GiveKeysEj .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j diff --git a/asm/main.s b/asm/main.s index 8ccc1852..2e63355d 100644 --- a/asm/main.s +++ b/asm/main.s @@ -76814,7 +76814,7 @@ _0203826c: ldr r1, [r4, #4] ldr r0, [r0] mov r2, #1 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi add sp, sp, #0x18 mov r0, #2 ldmia sp!, {r3, r4, r5, pc} diff --git a/asm/ov00/Item/ItemManager.inc b/asm/ov00/Item/ItemManager.inc index 435edbdc..f344faea 100644 --- a/asm/ov00/Item/ItemManager.inc +++ b/asm/ov00/Item/ItemManager.inc @@ -21,6 +21,6 @@ .extern func_ov00_020cf374 .extern func_ov00_020d73bc .extern func_ov05_02104004 -.extern func_ov09_0211c700 -.extern func_ov09_0211ca20 +.extern EquipLinebeckCannon +.extern GiveShipPart .extern gItemManager diff --git a/asm/ov00/Item/ItemManager.s b/asm/ov00/Item/ItemManager.s index 373211dd..c8778259 100644 --- a/asm/ov00/Item/ItemManager.s +++ b/asm/ov00/Item/ItemManager.s @@ -3,782 +3,9 @@ .text - .global _ZN11ItemManager8GiveItemEi - thumb_func_start _ZN11ItemManager8GiveItemEi -_ZN11ItemManager8GiveItemEi: ; 0x020adcdc - push {r3, r4, r5, lr} - cmp r1, #0x76 - bgt _020addd2 - blt _020adce6 - b _020ae128 -_020adce6: - cmp r1, #0x6f - bgt _020adda0 - blt _020adcee - b _020ae0ec -_020adcee: - cmp r1, #0x6c - bgt _020add8e - blt _020adcf6 - b _020ae0bc -_020adcf6: - cmp r1, #0x3d - bgt _020add86 - cmp r1, #0 - blt _020add8c - add r2, r1, r1 - add r2, pc - ldrh r2, [r2, #6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 -_020add0a: ; jump table - .short _020ae222 - _020add0a - 2 ; case 0 - .short _020ade36 - _020add0a - 2 ; case 1 - .short _020ade3e - _020add0a - 2 ; case 2 - .short _020ade7c - _020add0a - 2 ; case 3 - .short _020ade98 - _020add0a - 2 ; case 4 - .short _020ae222 - _020add0a - 2 ; case 5 - .short _020ae1fe - _020add0a - 2 ; case 6 - .short _020adeb4 - _020add0a - 2 ; case 7 - .short _020adec8 - _020add0a - 2 ; case 8 - .short _020ade5c - _020add0a - 2 ; case 9 - .short _020ae1fe - _020add0a - 2 ; case 10 - .short _020ae1fe - _020add0a - 2 ; case 11 - .short _020aded2 - _020add0a - 2 ; case 12 - .short _020adedc - _020add0a - 2 ; case 13 - .short _020adebe - _020add0a - 2 ; case 14 - .short _020ae1fe - _020add0a - 2 ; case 15 - .short _020ae222 - _020add0a - 2 ; case 16 - .short _020ae1fe - _020add0a - 2 ; case 17 - .short _020adefa - _020add0a - 2 ; case 18 - .short _020adf12 - _020add0a - 2 ; case 19 - .short _020adf2c - _020add0a - 2 ; case 20 - .short _020adf46 - _020add0a - 2 ; case 21 - .short _020adf60 - _020add0a - 2 ; case 22 - .short _020ae1fe - _020add0a - 2 ; case 23 - .short _020ade48 - _020add0a - 2 ; case 24 - .short _020ade52 - _020add0a - 2 ; case 25 - .short _020ade66 - _020add0a - 2 ; case 26 - .short _020ade70 - _020add0a - 2 ; case 27 - .short _020ae1fe - _020add0a - 2 ; case 28 - .short _020ae1fe - _020add0a - 2 ; case 29 - .short _020ae1fe - _020add0a - 2 ; case 30 - .short _020adee6 - _020add0a - 2 ; case 31 - .short _020adef0 - _020add0a - 2 ; case 32 - .short _020ae1fe - _020add0a - 2 ; case 33 - .short _020ae1fe - _020add0a - 2 ; case 34 - .short _020ae1fe - _020add0a - 2 ; case 35 - .short _020adf7a - _020add0a - 2 ; case 36 - .short _020adf96 - _020add0a - 2 ; case 37 - .short _020adfbe - _020add0a - 2 ; case 38 - .short _020adfd8 - _020add0a - 2 ; case 39 - .short _020adff2 - _020add0a - 2 ; case 40 - .short _020adff8 - _020add0a - 2 ; case 41 - .short _020adffe - _020add0a - 2 ; case 42 - .short _020ae1fe - _020add0a - 2 ; case 43 - .short _020ae004 - _020add0a - 2 ; case 44 - .short _020ae024 - _020add0a - 2 ; case 45 - .short _020ae032 - _020add0a - 2 ; case 46 - .short _020ae040 - _020add0a - 2 ; case 47 - .short _020ae1fe - _020add0a - 2 ; case 48 - .short _020ae1fe - _020add0a - 2 ; case 49 - .short _020ae1fe - _020add0a - 2 ; case 50 - .short _020ae1fe - _020add0a - 2 ; case 51 - .short _020ae1fe - _020add0a - 2 ; case 52 - .short _020ae1fe - _020add0a - 2 ; case 53 - .short _020ae1fe - _020add0a - 2 ; case 54 - .short _020ae1fe - _020add0a - 2 ; case 55 - .short _020ae014 - _020add0a - 2 ; case 56 - .short _020ae1fe - _020add0a - 2 ; case 57 - .short _020ae1fe - _020add0a - 2 ; case 58 - .short _020ae1fe - _020add0a - 2 ; case 59 - .short _020ae1fe - _020add0a - 2 ; case 60 - .short _020ae04e - _020add0a - 2 ; case 61 -_020add86: - cmp r1, #0x6b - bne _020add8c - b _020ae0ac -_020add8c: - b _020ae1fe -_020add8e: - cmp r1, #0x6d - bgt _020add98 - bne _020add96 - b _020ae0cc -_020add96: - b _020ae1fe -_020add98: - cmp r1, #0x6e - bne _020add9e - b _020ae0dc -_020add9e: - b _020ae1fe -_020adda0: - cmp r1, #0x72 - bgt _020addba - blt _020adda8 - b _020ae082 -_020adda8: - cmp r1, #0x70 - bgt _020addb2 - bne _020addb0 - b _020ae0fc -_020addb0: - b _020ae1fe -_020addb2: - cmp r1, #0x71 - bne _020addb8 - b _020ae072 -_020addb8: - b _020ae1fe -_020addba: - cmp r1, #0x74 - bgt _020addca - blt _020addc2 - b _020ae09e -_020addc2: - cmp r1, #0x73 - bne _020addc8 - b _020ae090 -_020addc8: - b _020ae1fe -_020addca: - cmp r1, #0x75 - bne _020addd0 - b _020ae10c -_020addd0: - b _020ae1fe -_020addd2: - cmp r1, #0x7c - bgt _020ade06 - blt _020addda - b _020ae1b0 -_020addda: - cmp r1, #0x79 - bgt _020addf4 - blt _020adde2 - b _020ae16c -_020adde2: - cmp r1, #0x77 - bgt _020addec - bne _020addea - b _020ae144 -_020addea: - b _020ae1fe -_020addec: - cmp r1, #0x78 - bne _020addf2 - b _020ae160 -_020addf2: - b _020ae1fe -_020addf4: - cmp r1, #0x7a - bgt _020addfe - bne _020addfc - b _020ae182 -_020addfc: - b _020ae1fe -_020addfe: - cmp r1, #0x7b - bne _020ade04 - thumb_func_end _ZN11ItemManager8GiveItemEi -_020ade02: - b _020ae198 -_020ade04: - b _020ae1fe -_020ade06: - cmp r1, #0x81 - bgt _020ade20 - blt _020ade0e - b _020ae1e6 -_020ade0e: - cmp r1, #0x7f - bgt _020ade18 - bne _020ade16 - b _020ae1c6 -_020ade16: - b _020ae1fe -_020ade18: - cmp r1, #0x80 - bne _020ade1e - b _020ae1d6 -_020ade1e: - b _020ae1fe -_020ade20: - cmp r1, #0x83 - bgt _020ade2e - bge _020ade32 - cmp r1, #0x82 - bne _020ade2c - b _020ae1f2 -_020ade2c: - b _020ae1fe -_020ade2e: - cmp r1, #0x84 - bne _020ade34 -_020ade32: - b _020ae222 -_020ade34: - b _020ae1fe -_020ade36: - mov r1, #1 - bl _ZN11ItemManager8GiveKeysEj - b _020ae222 -_020ade3e: - mov r1, #1 - add r2, r1, #0 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade48: - mov r1, #5 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade52: - mov r1, #0x14 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade5c: - mov r1, #0x64 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade66: - mov r1, #0xc8 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade70: - mov r1, #0x4b - lsl r1, r1, #2 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ade7c: - mov r2, #0x4a - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #1 - orr r1, r3 - str r1, [r0, r2] - mov r1, #0 - blx _ZN11ItemManager12GetEquipItemEi - ldr r2, [r0] - mov r1, #1 - ldr r2, [r2, #0x20] - blx r2 - b _020ae222 -_020ade98: - mov r2, #0x4a - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #2 - orr r1, r3 - str r1, [r0, r2] - mov r1, #1 - blx _ZN11ItemManager12GetEquipItemEi - ldr r2, [r0] - mov r1, #1 - ldr r2, [r2, #0x20] - blx r2 - b _020ae222 -_020adeb4: - mov r1, #4 - mov r2, #0xa - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adebe: - mov r1, #7 - mov r2, #0xa - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adec8: - mov r1, #5 - mov r2, #0x14 - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020aded2: - mov r1, #2 - mov r2, #1 - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adedc: - mov r1, #3 - mov r2, #1 - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adee6: - mov r1, #8 - mov r2, #1 - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adef0: - mov r1, #6 - mov r2, #1 - bl _ZN11ItemManager13GiveEquipItemEij - b _020ae222 -_020adefa: - mov r1, #0x4b - lsl r1, r1, #2 - ldr r3, [r0, r1] - mov r2, #1 - orr r3, r2 - str r3, [r0, r1] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x13 - ldr r0, [r0] - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf12: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #2 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #9 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf2c: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #4 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0xa - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf46: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #8 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0xb - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf60: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #0x10 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0xc - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf7a: - mov r2, #0x4b - lsl r2, r2, #2 - add r1, r2, #0 - ldr r3, [r0, r2] - sub r1, #0x2c - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x2b - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adf96: - mov r2, #0x4b - lsl r2, r2, #2 - add r1, r2, #0 - ldr r3, [r0, r2] - add r1, #0xd4 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x30 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - mov r0, #3 - mov r1, #0 - bl func_ov09_0211ca20 - bl func_ov09_0211c700 - b _020ae222 -_020adfbe: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #0x40 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x16 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adfd8: - mov r2, #0x4b - lsl r2, r2, #2 - ldr r3, [r0, r2] - mov r1, #0x80 - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x17 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020adff2: - bl _ZN11ItemManager13UpgradeQuiverEv - b _020ae222 -_020adff8: - bl _ZN11ItemManager14UpgradeBombBagEv - b _020ae222 -_020adffe: - bl _ZN11ItemManager17UpgradeBombchuBagEv - b _020ae222 -_020ae004: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0xa - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae014: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0xa - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae024: - add r1, r0, #0 - add r1, #0x25 - ldrb r1, [r1] - add r0, #0x25 - add r1, r1, #1 - strb r1, [r0] - b _020ae222 -_020ae032: - add r1, r0, #0 - add r1, #0x26 - ldrb r1, [r1] - add r0, #0x26 - add r1, r1, #1 - strb r1, [r0] - b _020ae222 -_020ae040: - add r1, r0, #0 - add r1, #0x24 - ldrb r1, [r1] - add r0, #0x24 - add r1, r1, #1 - strb r1, [r0] - b _020ae222 -_020ae04e: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0xc - orr r1, r3 - str r1, [r0, r2] - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x8c - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - ldr r0, _020ae248 ; =gHealthManager - mov r1, #5 - ldr r0, [r0] - strh r1, [r0, #8] - b _020ae222 -_020ae072: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0xc - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae082: - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x7e - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020ae090: - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x7d - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020ae09e: - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x7f - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - b _020ae222 -_020ae0ac: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0x18 - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae0bc: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0x18 - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae0cc: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0x16 - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae0dc: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0x1a - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae0ec: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0x1c - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae0fc: - mov r2, #0x4a - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0x1a - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae10c: - mov r1, #0 -_020ae10e: - add r2, r0, r1 - add r2, #0xbc - ldrb r2, [r2] - cmp r2, #0 - bne _020ae120 - mov r2, #1 - blx _ZN11ItemManager9SetPotionEjj - b _020ae222 -_020ae120: - add r1, r1, #1 - cmp r1, #2 - blt _020ae10e - b _020ae222 -_020ae128: - mov r1, #0 -_020ae12a: - add r2, r0, r1 - add r2, #0xbc - ldrb r2, [r2] - cmp r2, #0 - bne _020ae13c - mov r2, #2 - blx _ZN11ItemManager9SetPotionEjj - b _020ae222 -_020ae13c: - add r1, r1, #1 - cmp r1, #2 - blt _020ae12a - b _020ae222 -_020ae144: - mov r1, #0 -_020ae146: - add r2, r0, r1 - add r2, #0xbc - ldrb r2, [r2] - cmp r2, #0 - bne _020ae158 - mov r2, #3 - blx _ZN11ItemManager9SetPotionEjj - b _020ae222 -_020ae158: - add r1, r1, #1 - cmp r1, #2 - blt _020ae146 - b _020ae222 -_020ae160: - mov r1, #0xe1 - ldr r2, [r0, #0xc] - lsl r1, r1, #4 - add r1, r2, r1 - str r1, [r0, #0xc] - b _020ae222 -_020ae16c: - ldr r0, _020ae244 ; =gAdventureFlags - ldr r1, _020ae24c ; =0x00000126 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - mov r0, #6 - mov r1, #8 - bl func_ov09_0211ca20 - b _020ae222 -_020ae182: - ldr r0, _020ae244 ; =gAdventureFlags - ldr r1, _020ae250 ; =0x00000127 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - mov r0, #4 - mov r1, #8 - bl func_ov09_0211ca20 - b _020ae222 -_020ae198: - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x4a - ldr r0, [r0] - lsl r1, r1, #2 - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - mov r0, #3 - mov r1, #8 - bl func_ov09_0211ca20 - b _020ae222 -_020ae1b0: - ldr r0, _020ae244 ; =gAdventureFlags - ldr r1, _020ae254 ; =0x00000129 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb - mov r0, #2 - mov r1, #8 - bl func_ov09_0211ca20 - b _020ae222 -_020ae1c6: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #1 - ldr r3, [r0, r2] - lsl r1, r1, #0xe - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae1d6: - mov r2, #0x4b - lsl r2, r2, #2 - mov r1, #2 - ldr r3, [r0, r2] - lsl r1, r1, #0xe - orr r1, r3 - str r1, [r0, r2] - b _020ae222 -_020ae1e6: - mov r1, #9 - mvn r1, r1 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ae1f2: - mov r1, #0x31 - mvn r1, r1 - mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj - b _020ae222 -_020ae1fe: - cmp r1, #0x4b - blt _020ae222 - cmp r1, #0x6a - bgt _020ae222 - mov r2, #0x4a - lsl r2, r2, #2 - add r1, #0x15 - add r3, r0, r2 - lsr r0, r1, #5 - mov r4, #0x1f - lsl r2, r0, #2 - mov r5, #1 - and r1, r4 - add r4, r5, #0 - ldr r0, [r3, r2] - lsl r4, r1 - orr r0, r4 - str r0, [r3, r2] -_020ae222: - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x7d - ldr r0, [r0] - blx _ZN14AdventureFlags3GetEj - cmp r0, #0 - beq _020ae270 - ldr r0, _020ae244 ; =gAdventureFlags - mov r1, #0x7e - ldr r0, [r0] - blx _ZN14AdventureFlags3GetEj - cmp r0, #0 - beq _020ae270 - ldr r0, _020ae244 ; =gAdventureFlags - b _020ae258 - nop -_020ae244: .word gAdventureFlags -_020ae248: .word gHealthManager -_020ae24c: .word 0x00000126 -_020ae250: .word 0x00000127 -_020ae254: .word 0x00000129 -_020ae258: - mov r1, #0x7f - ldr r0, [r0] - blx _ZN14AdventureFlags3GetEj - cmp r0, #0 - beq _020ae270 - ldr r0, _020ae274 ; =gAdventureFlags - mov r1, #0x80 - ldr r0, [r0] - mov r2, #1 - blx _ZN14AdventureFlags3SetEjb -_020ae270: - pop {r3, r4, r5, pc} - nop -_020ae274: .word gAdventureFlags - - .global _ZN11ItemManager13GiveEquipItemEij - thumb_func_start _ZN11ItemManager13GiveEquipItemEij -_ZN11ItemManager13GiveEquipItemEij: ; 0x020ae278 + .global _ZN11ItemManager13GiveEquipItemEit + thumb_func_start _ZN11ItemManager13GiveEquipItemEit +_ZN11ItemManager13GiveEquipItemEit: ; 0x020ae278 push {r3, r4, r5, r6, r7, lr} add r6, r1, #0 str r2, [sp] @@ -815,7 +42,7 @@ _ZN11ItemManager13GiveEquipItemEij: ; 0x020ae278 _020ae2bc: pop {r3, r4, r5, r6, r7, pc} .align 2, 0 - thumb_func_end _ZN11ItemManager13GiveEquipItemEij + thumb_func_end _ZN11ItemManager13GiveEquipItemEit .global _ZN11ItemManager13UnequipPotionEv thumb_func_start _ZN11ItemManager13UnequipPotionEv @@ -842,9 +69,9 @@ _ZNK11ItemManager12GetMaxRupeesEv: ; 0x020ae2d4 arm_func_end _ZNK11ItemManager12GetMaxRupeesEv _020ae2dc: .word 0x0000270f - .global _ZN11ItemManager10GiveRupeesEjj - arm_func_start _ZN11ItemManager10GiveRupeesEjj -_ZN11ItemManager10GiveRupeesEjj: ; 0x020ae2e0 + .global _ZN11ItemManager10GiveRupeesEsi + arm_func_start _ZN11ItemManager10GiveRupeesEsi +_ZN11ItemManager10GiveRupeesEsi: ; 0x020ae2e0 stmdb sp!, {r4, r5, r6, lr} mov r6, r0 ldrh r3, [r6, #0x22] @@ -876,7 +103,7 @@ _020ae344: strh r4, [r6, #0x22] ldmia sp!, {r4, r5, r6, pc} .align 2, 0 - arm_func_end _ZN11ItemManager10GiveRupeesEjj + arm_func_end _ZN11ItemManager10GiveRupeesEsi _020ae34c: .word data_027e103c .global _ZNK11ItemManager18func_ov00_020ae350Ev @@ -1115,9 +342,9 @@ _ZN11ItemManager18func_ov00_020ae4dcEj: ; 0x020ae4dc bx lr arm_func_end _ZN11ItemManager18func_ov00_020ae4dcEj - .global _ZN11ItemManager9SetPotionEjj - arm_func_start _ZN11ItemManager9SetPotionEjj -_ZN11ItemManager9SetPotionEjj: ; 0x020ae50c + .global _ZN11ItemManager9SetPotionEjh + arm_func_start _ZN11ItemManager9SetPotionEjh +_ZN11ItemManager9SetPotionEjh: ; 0x020ae50c add r3, r0, r1 strb r2, [r3, #0xbc] cmp r2, #0 @@ -1141,7 +368,7 @@ _020ae544: orr r0, r2, r1, lsl r0 str r0, [ip, r3, lsl #2] bx lr - arm_func_end _ZN11ItemManager9SetPotionEjj + arm_func_end _ZN11ItemManager9SetPotionEjh .global _ZNK11ItemManager9HasPotionEj arm_func_start _ZNK11ItemManager9HasPotionEj diff --git a/asm/ov00/ov00_020b1498.inc b/asm/ov00/ov00_020b1498.inc index ef562e77..5a8e25be 100644 --- a/asm/ov00/ov00_020b1498.inc +++ b/asm/ov00/ov00_020b1498.inc @@ -8,7 +8,7 @@ .extern _ZN10PlayerBase8TeleportEP5Vec3psibb .extern _ZN10PlayerBase8vfunc_04Ev .extern _ZN10PlayerBase9AddHealthEs -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager12GetEquipItemEi .extern _ZN11ItemManager12GetItemModelEj .extern _ZN11ItemManager13UnequipPotionEv diff --git a/asm/ov00/ov00_020b1498.s b/asm/ov00/ov00_020b1498.s index 76f4c215..96402f64 100644 --- a/asm/ov00/ov00_020b1498.s +++ b/asm/ov00/ov00_020b1498.s @@ -15332,7 +15332,7 @@ func_ov00_020bd510: ; 0x020bd510 ldmltia sp!, {r3, r4, r5, pc} rsb r1, r2, #0 mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi mvn lr, #0 mov r3, #0 str r3, [sp, #0xc] diff --git a/asm/ov05.inc b/asm/ov05.inc index 8abfb05c..09634718 100644 --- a/asm/ov05.inc +++ b/asm/ov05.inc @@ -510,7 +510,7 @@ .extern func_ov09_02118cd4 .extern func_ov09_0211c724 .extern func_ov09_0211c808 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov12_02134208 .extern func_ov14_02127df4 diff --git a/asm/ov05.s b/asm/ov05.s index 41bcb2e9..44a5dda3 100644 --- a/asm/ov05.s +++ b/asm/ov05.s @@ -9681,7 +9681,7 @@ _02108b9c: str r0, [r4, #0x74] ldr r0, [sp, #4] ldr r1, [sp] - blx func_ov09_0211ca20 + blx GiveShipPart b _02108be8 _02108bb4: ldr r0, _02108cf0 ; =gItemManager diff --git a/asm/ov09.inc b/asm/ov09.inc index 7742fd4b..9461dc15 100644 --- a/asm/ov09.inc +++ b/asm/ov09.inc @@ -1,6 +1,6 @@ #pragma once .extern Divide -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager13EquipShipPartEjj .extern _ZN11ItemManager16SetShipPartCountEjjc .extern _ZN11ItemManager16SetTreasureCountEjc diff --git a/asm/ov09.s b/asm/ov09.s index a0391a4a..99fd5dfe 100644 --- a/asm/ov09.s +++ b/asm/ov09.s @@ -16992,9 +16992,9 @@ _0211c6f2: thumb_func_end func_ov09_0211c6b4 _0211c6fc: .word gItemManager - .global func_ov09_0211c700 - thumb_func_start func_ov09_0211c700 -func_ov09_0211c700: ; 0x0211c700 + .global EquipLinebeckCannon + thumb_func_start EquipLinebeckCannon +EquipLinebeckCannon: ; 0x0211c700 push {r3, lr} ldr r0, _0211c720 ; =gItemManager mov r1, #3 @@ -17010,7 +17010,7 @@ func_ov09_0211c700: ; 0x0211c700 _0211c71c: pop {r3, pc} nop - thumb_func_end func_ov09_0211c700 + thumb_func_end EquipLinebeckCannon _0211c720: .word gItemManager .global func_ov09_0211c724 @@ -17414,7 +17414,7 @@ func_ov09_0211c9a8: ; 0x0211c9a8 add r1, r0, #0 add r0, r6, #0 mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj + blx _ZN11ItemManager10GiveRupeesEsi ldr r0, _0211c9e4 ; =gItemManager add r1, r5, #0 ldr r6, [r0] @@ -17445,7 +17445,7 @@ func_ov09_0211c9e8: ; 0x0211c9e8 add r1, r0, #0 add r0, r4, #0 mov r2, #1 - blx _ZN11ItemManager10GiveRupeesEjj + blx _ZN11ItemManager10GiveRupeesEsi ldr r0, _0211ca1c ; =gItemManager add r1, r5, #0 ldr r4, [r0] @@ -17463,9 +17463,9 @@ func_ov09_0211c9e8: ; 0x0211c9e8 thumb_func_end func_ov09_0211c9e8 _0211ca1c: .word gItemManager - .global func_ov09_0211ca20 - thumb_func_start func_ov09_0211ca20 -func_ov09_0211ca20: ; 0x0211ca20 + .global GiveShipPart + thumb_func_start GiveShipPart +GiveShipPart: ; 0x0211ca20 push {r3, r4, r5, r6, lr} sub sp, #4 add r5, r0, #0 @@ -17538,7 +17538,7 @@ _0211ca94: add sp, #4 pop {r3, r4, r5, r6, pc} .align 2, 0 - thumb_func_end func_ov09_0211ca20 + thumb_func_end GiveShipPart _0211caa8: .word gItemManager _0211caac: .word data_ov09_0211f294 _0211cab0: .word data_ov09_0211f298 diff --git a/asm/ov14/Actor/ActorRupee.inc b/asm/ov14/Actor/ActorRupee.inc index b72e0342..48b79951 100644 --- a/asm/ov14/Actor/ActorRupee.inc +++ b/asm/ov14/Actor/ActorRupee.inc @@ -1,5 +1,5 @@ #pragma once -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN5Actor10SetUnk_11bEv .extern _ZN5Actor11SetVelocityEP5Vec3p .extern _ZN5Actor12ApplyGravityEv diff --git a/asm/ov14/Actor/ActorRupee.s b/asm/ov14/Actor/ActorRupee.s index e386fed3..95ba28fd 100644 --- a/asm/ov14/Actor/ActorRupee.s +++ b/asm/ov14/Actor/ActorRupee.s @@ -371,7 +371,7 @@ _0213b2f8: mov r1, r0 mov r0, r6 mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi ldr r0, [r5, #0x158] mvn r1, #0 cmp r0, #0 diff --git a/asm/ov14/ov14_0213b778.inc b/asm/ov14/ov14_0213b778.inc index 7cef6c17..bc8d8d64 100644 --- a/asm/ov14/ov14_0213b778.inc +++ b/asm/ov14/ov14_0213b778.inc @@ -13,7 +13,7 @@ .extern _ZN11ItemManager18EquipItem_vfunc_38Ei .extern _ZN11ItemManager18func_ov00_020ae648Ejjj .extern _ZN11ItemManager8GiveItemEi -.extern _ZN11ItemManager9SetPotionEjj +.extern _ZN11ItemManager9SetPotionEjh .extern _ZN12ActorManager12FilterActorsEP15ActorFilterBaseP9ActorList .extern _ZN12ActorManager13FindActorByIdEj .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j diff --git a/asm/ov14/ov14_0213b778.s b/asm/ov14/ov14_0213b778.s index 4c02e2c6..aced9e81 100644 --- a/asm/ov14/ov14_0213b778.s +++ b/asm/ov14/ov14_0213b778.s @@ -5280,7 +5280,7 @@ _0213f516: ldr r0, _0213f598 ; =gItemManager mov r2, #0 ldr r0, [r0] - blx _ZN11ItemManager9SetPotionEjj + blx _ZN11ItemManager9SetPotionEjh b _0213f534 _0213f52c: add r1, r1, #1 diff --git a/asm/ov15.inc b/asm/ov15.inc index 5e6636d2..4ad1b0ee 100644 --- a/asm/ov15.inc +++ b/asm/ov15.inc @@ -9,7 +9,7 @@ .extern _ZN10PlayerBase8TeleportEP5Vec3psibb .extern _ZN10PlayerBase8vfunc_04Ev .extern _ZN10PlayerBase9AddHealthEs -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager10SetUnk_09eEjt .extern _ZN11ItemManager15LoadFanfareItemEi .extern _ZN11ItemManager18func_ov00_020ad528Ev @@ -892,7 +892,7 @@ .extern func_ov09_0211c6b4 .extern func_ov09_0211c724 .extern func_ov09_0211c808 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov09_0211cc74 .extern func_ov09_0211cc98 diff --git a/asm/ov15.s b/asm/ov15.s index c34a942a..b822c5e1 100644 --- a/asm/ov15.s +++ b/asm/ov15.s @@ -44522,7 +44522,7 @@ _021452d4: bl func_ov15_0214651c mov r1, r0 mov r0, r4 - blx func_ov09_0211ca20 + blx GiveShipPart b _02145334 _02145300: cmp r5, #0x30 @@ -54185,7 +54185,7 @@ func_ov15_0214d358: ; 0x0214d358 mov r1, r0 mov r0, r5 mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi ldr r1, [r4, #0x158] ldr r0, _0214d3dc ; =data_ov00_020eec9c add r1, r1, #0xfa @@ -88224,7 +88224,7 @@ _0216a8a8: bl func_ov15_0214651c mov r1, r0 mov r0, r6 - blx func_ov09_0211ca20 + blx GiveShipPart b _0216a8f8 _0216a8cc: cmp r4, #0x30 @@ -99853,7 +99853,7 @@ func_ov15_02174794: ; 0x02174794 mov r1, r0 mov r0, r5 mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi ldr r1, [r4, #0x2c] ldr r0, _02174878 ; =data_ov00_020eec9c add r1, r1, #0xfa diff --git a/asm/ov28.inc b/asm/ov28.inc index b0b44d2c..722c3bc9 100644 --- a/asm/ov28.inc +++ b/asm/ov28.inc @@ -323,7 +323,7 @@ .extern func_ov09_0211c45c .extern func_ov09_0211c724 .extern func_ov09_0211c808 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov14_02120ac4 .extern func_ov14_021231d4 diff --git a/asm/ov28.s b/asm/ov28.s index 9a874ae3..8511428d 100644 --- a/asm/ov28.s +++ b/asm/ov28.s @@ -2701,7 +2701,7 @@ _0216faf8: blx func_ov09_0211c724 ldr r0, [sp, #4] ldr r1, [sp] - blx func_ov09_0211ca20 + blx GiveShipPart _0216fb20: mov r0, r4 add sp, sp, #0xc diff --git a/asm/ov31.inc b/asm/ov31.inc index e4542e00..98ece2ad 100644 --- a/asm/ov31.inc +++ b/asm/ov31.inc @@ -1,7 +1,7 @@ #pragma once .extern Divide .extern LoadTreasureItemFanfare -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager8GiveAmmoEit .extern _ZN12ActorManager8GetActorEP8ActorRef .extern _ZN5Actor10SetUnk_11bEv @@ -183,7 +183,7 @@ .extern func_ov09_0211c1a8 .extern func_ov09_0211c980 .extern func_ov09_0211c9a0 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov09_0211cca4 .extern func_ov09_0211ccb4 diff --git a/asm/ov31.s b/asm/ov31.s index e903ca8a..6476fc0d 100644 --- a/asm/ov31.s +++ b/asm/ov31.s @@ -1049,7 +1049,7 @@ _0217cae4: ldr r0, [r0] rsb r1, r1, #0 mov r2, #1 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi bl func_ov31_0217cf1c ldr r0, [r0, #0x470] cmp r0, #0 @@ -5443,7 +5443,7 @@ func_ov31_0217ff08: ; 0x0217ff08 bl func_ov31_02180260 mov r1, r0 mov r0, r4 - blx func_ov09_0211ca20 + blx GiveShipPart bl func_ov31_0217bdb8 bl func_ov31_0217bd80 cmp r0, #0 diff --git a/asm/ov45.inc b/asm/ov45.inc index b1e99fbf..1c341534 100644 --- a/asm/ov45.inc +++ b/asm/ov45.inc @@ -239,7 +239,7 @@ .extern func_ov09_0211c9a0 .extern func_ov09_0211c9a8 .extern func_ov09_0211c9e8 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov09_0211cb3c .extern func_ov09_0211cb5c diff --git a/asm/ov45.s b/asm/ov45.s index c8a7a2f8..ba36a1ca 100644 --- a/asm/ov45.s +++ b/asm/ov45.s @@ -1976,7 +1976,7 @@ func_ov45_0218ad80: ; 0x0218ad80 add r0, ip, r0, asr #1 sub r1, lr, r1 mov r4, #0x2b - blx func_ov09_0211ca20 + blx GiveShipPart b _0218ae0c _0218ae00: sub r0, lr, #0x48 diff --git a/asm/ov46.inc b/asm/ov46.inc index f6d86327..11a612e6 100644 --- a/asm/ov46.inc +++ b/asm/ov46.inc @@ -1,6 +1,6 @@ #pragma once .extern Approach_thunk -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager16SetTreasureCountEjc .extern _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j .extern _ZN12ActorManager22FindNearestActorOfTypeEP8ActorRefPS_jP5Vec3p diff --git a/asm/ov46.s b/asm/ov46.s index 71b99700..871c0867 100644 --- a/asm/ov46.s +++ b/asm/ov46.s @@ -3035,7 +3035,7 @@ _02192754: strb r2, [r5, #0x48b] ldr r0, [r0] mov r2, #1 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi ldrb r2, [r5, #0x48a] ldr r0, _021927d0 ; =gItemManager sub r1, r4, #1 diff --git a/asm/ov49.inc b/asm/ov49.inc index 3f8d442c..6af8dfd1 100644 --- a/asm/ov49.inc +++ b/asm/ov49.inc @@ -2,7 +2,7 @@ .extern Divide .extern _ZN10ActorRupee18func_ov14_0213b5f4EjiP5Vec3pb .extern _ZN10PlayerBase18func_ov00_020a7c1cEP8Cylinder -.extern _ZN11ItemManager10GiveRupeesEjj +.extern _ZN11ItemManager10GiveRupeesEsi .extern _ZN11ItemManager10RemoveItemEi .extern _ZN11ItemManager12GetItemModelEj .extern _ZN5Actor10SetUnk_11bEv diff --git a/asm/ov49.s b/asm/ov49.s index b0b5a182..f300a945 100644 --- a/asm/ov49.s +++ b/asm/ov49.s @@ -894,7 +894,7 @@ _02196068: mov r0, r5 rsb r1, r1, #0 mov r2, #0 - bl _ZN11ItemManager10GiveRupeesEjj + bl _ZN11ItemManager10GiveRupeesEsi ldrb r1, [r4, #0x5c9] ldr r0, _021960f0 ; =gItemManager add r1, r1, #1 diff --git a/asm/ov52.inc b/asm/ov52.inc index f64f3a75..b9995467 100644 --- a/asm/ov52.inc +++ b/asm/ov52.inc @@ -169,7 +169,7 @@ .extern func_ov05_021082e4 .extern func_ov09_0211c724 .extern func_ov09_0211c808 -.extern func_ov09_0211ca20 +.extern GiveShipPart .extern func_ov09_0211cac0 .extern func_ov14_021448f4 .extern func_ov14_02144a90 diff --git a/asm/ov52.s b/asm/ov52.s index 6591a1ee..6205c120 100644 --- a/asm/ov52.s +++ b/asm/ov52.s @@ -1159,7 +1159,7 @@ _021963c4: blx func_ov09_0211c724 ldr r0, [sp, #4] ldr r1, [sp] - blx func_ov09_0211ca20 + blx GiveShipPart _021963ec: mov r0, r4 add sp, sp, #0xc diff --git a/asm/ov55.inc b/asm/ov55.inc index 355c21b1..e5849d2e 100644 --- a/asm/ov55.inc +++ b/asm/ov55.inc @@ -1,7 +1,7 @@ #pragma once .extern _ZN11ItemManager12GetItemModelEj .extern _ZN11ItemManager17EquipPreviousItemEv -.extern _ZN11ItemManager9SetPotionEjj +.extern _ZN11ItemManager9SetPotionEjh .extern _ZN12ActorManager8GetActorEP8ActorRef .extern _ZN13LinkStateBase12GetGrabActorEv .extern _ZN13LinkStateBase12GetPlayerPosEv diff --git a/asm/ov55.s b/asm/ov55.s index f4b8ebdc..9a5e51f0 100644 --- a/asm/ov55.s +++ b/asm/ov55.s @@ -432,7 +432,7 @@ _02199244: ldr r1, [r4, #0xc] ldr r0, [r0] mov r2, #0 - bl _ZN11ItemManager9SetPotionEjj + bl _ZN11ItemManager9SetPotionEjh ldr r0, _0219926c ; =gItemManager ldr r0, [r0] bl _ZN11ItemManager17EquipPreviousItemEv diff --git a/include/Item/Item.hpp b/include/Item/Item.hpp index 68e05cda..7a6a0416 100644 --- a/include/Item/Item.hpp +++ b/include/Item/Item.hpp @@ -224,7 +224,7 @@ enum ItemId_ { /* 0x80 */ ItemId_Unk_128 = 128, /* 0x81 */ ItemId_Rupoor10 = 129, /* 0x82 */ ItemId_Rupoor50 = 130, - + /* 0x83 */ ItemId_Unk_131 = 131, /* 0x84 */ ItemId_Unk_132 = 132, /* 0x85 */ ItemId_Unk_133 = 133, /* 0x86 */ ItemId_Unk_134 = 134, diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index 99bf3edc..0caf7c97 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -307,7 +307,7 @@ public: // Rupees u32 GetMaxRupees() const; - void GiveRupees(u16 amount, unk32 param2); + void GiveRupees(s16 amount, unk32 param2); // Potion void SetPotion(u32 index, Potion potion); diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp index 5282b09c..bfe511f9 100644 --- a/include/Save/AdventureFlags.hpp +++ b/include/Save/AdventureFlags.hpp @@ -23,7 +23,7 @@ enum AdventureFlag_ { /* 0x30 */ AdventureFlag_Cannon = 48, - /* 0x7d */ AdventureFlag_Azurine = 126, + /* 0x7d */ AdventureFlag_Azurine = 125, /* 0x7e */ AdventureFlag_Crimsonine = 126, /* 0x7f */ AdventureFlag_Aquanine = 127, /* 0x80 */ AdventureFlag_Unk_128 = 128, diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index 14f47b4c..00e74217 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -458,3 +458,282 @@ THUMB bool ItemManager::GetFanfareItemScale(Vec3p *scale) const { return false; } +extern "C" void GiveShipPart(ShipPart part, ShipType type); +extern "C" void EquipLinebeckCannon(); +THUMB void ItemManager::GiveItem(ItemId id) { + switch (id) { + case ItemId_SmallKey: { + this->GiveKeys(1); + } break; + + case ItemId_GreenRupee: { + this->GiveRupees(1, true); + } break; + + case ItemId_BlueRupee: { + this->GiveRupees(5, true); + } break; + + case ItemId_RedRupee: { + this->GiveRupees(20, true); + } break; + + case ItemId_BigGreenRupee: { + this->GiveRupees(100, true); + } break; + + case ItemId_BigRedRupee: { + this->GiveRupees(200, true); + } break; + + case ItemId_GoldRupee: { + this->GiveRupees(300, true); + } break; + + case ItemId_OshusSword: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_OshusSword); + this->GetEquipItem(ItemFlag_OshusSword)->GiveAmmo(1); + } break; + + case ItemId_WoodenShield: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_WoodenShield); + this->GetEquipItem(ItemFlag_WoodenShield)->GiveAmmo(1); + } break; + + case ItemId_BombBag: { + this->GiveEquipItem(ItemFlag_BombBag, 10); + } break; + + case ItemId_BombchuBag: { + this->GiveEquipItem(ItemFlag_BombchuBag, 10); + } break; + + case ItemId_Bow: { + this->GiveEquipItem(ItemFlag_Bow, 20); + } break; + + case ItemId_Boomerang: { + this->GiveEquipItem(ItemFlag_Boomerang, 1); + } break; + + case ItemId_Scoop: { + this->GiveEquipItem(ItemFlag_Shovel, 1); + } break; + + case ItemId_Hammer: { + this->GiveEquipItem(ItemFlag_Hammer, 1); + } break; + + case ItemId_Rope: { + this->GiveEquipItem(ItemFlag_GrapplingHook, 1); + } break; + + case ItemId_PhantomHourglass: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_Hourglass); + gAdventureFlags->Set(AdventureFlag_Hourglass, true); + } break; + + case ItemId_SWSeaChart: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartSW); + gAdventureFlags->Set(AdventureFlag_SWSeaChart, true); + } break; + + case ItemId_NWSeaChart: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartNW); + gAdventureFlags->Set(AdventureFlag_NWSeaChart, true); + } break; + + case ItemId_SESeaChart: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartSE); + gAdventureFlags->Set(AdventureFlag_SESeaChart, true); + } break; + + case ItemId_NESeaChart: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SeaChartNE); + gAdventureFlags->Set(AdventureFlag_NESeaChart, true); + } break; + + case ItemId_FishingRod: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_FishingRod); + gAdventureFlags->Set(AdventureFlag_FishingRod, true); + } break; + + case ItemId_Cannon: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_Cannon); + gAdventureFlags->Set(AdventureFlag_Cannon, true); + GiveShipPart(ShipPart_Cannon, ShipType_Linebeck); + EquipLinebeckCannon(); + } break; + + case ItemId_SunKey: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SunKey); + gAdventureFlags->Set(AdventureFlag_SunKey, true); + } break; + + case ItemId_Unk_39: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_Unk_39); + gAdventureFlags->Set(AdventureFlag_Unk_23, true); + } break; + + case ItemId_Quiver: { + this->UpgradeQuiver(); + } break; + + case ItemId_BigBombBag: { + this->UpgradeBombBag(); + } break; + + case ItemId_BigBombchuBag: { + this->UpgradeBombchuBag(); + } break; + + case ItemId_KingsKey: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_KingsKey); + } break; + + case ItemId_GhostKey: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_GhostKey); + } break; + + case ItemId_PowerGem: { + this->mNumGems[Gem_Power] += 1; + } break; + + case ItemId_WisdomGem: { + this->mNumGems[Gem_Wisdom] += 1; + } break; + + case ItemId_CourageGem: { + this->mNumGems[Gem_Courage] += 1; + } break; + + case ItemId_SalvageArm: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SalvageArm); + gAdventureFlags->Set(AdventureFlag_SalvageArm, true); + gHealthManager->mSalvageArmHealth = 5; + } break; + + case ItemId_SwordsmanScroll: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_SwordsmansScroll); + } break; + + case ItemId_Crimsonine: { + gAdventureFlags->Set(AdventureFlag_Crimsonine, true); + } break; + + case ItemId_Azurine: { + gAdventureFlags->Set(AdventureFlag_Azurine, true); + } break; + + case ItemId_Aquanine: { + gAdventureFlags->Set(AdventureFlag_Aquanine, true); + } break; + + case ItemId_SpiritOfPowerUpgradeLvl1: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_PowerLv1); + } break; + + case ItemId_SpiritOfWisdomUpgradeLvl1: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_WisdomLv1); + } break; + + case ItemId_SpiritOfCourageUpgradeLvl1: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_CourageLv1); + } break; + + case ItemId_SpiritOfPowerUpgradeLvl2: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_PowerLv2); + } break; + + case ItemId_SpiritOfWisdomUpgradeLvl2: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_WisdomLv2); + } break; + + case ItemId_SpiritOfCourageUpgradeLvl2: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_CourageLv2); + } break; + + case ItemId_RedPotion: { + for (s32 i = 0; i < 2; ++i) { + if (this->mPotions[i] != Potion_None) continue; + this->SetPotion(i, Potion_Red); + break; + } + } break; + + case ItemId_PurplePotion: { + for (s32 i = 0; i < 2; ++i) { + if (this->mPotions[i] != Potion_None) continue; + this->SetPotion(i, Potion_Purple); + break; + } + } break; + + case ItemId_YellowPotion: { + for (s32 i = 0; i < 2; ++i) { + if (this->mPotions[i] != Potion_None) continue; + this->SetPotion(i, Potion_Yellow); + break; + } + } break; + + case ItemId_SandOfHours: { + this->mHourglassSandFrames += 3600; + } break; + + case ItemId_GoldenChimney: { + gAdventureFlags->Set(AdventureFlag_ReceivedGoldenChimney, true); + GiveShipPart(ShipPart_Chimney, ShipType_Golden); + } break; + + case ItemId_GoldenHandrail: { + gAdventureFlags->Set(AdventureFlag_ReceivedGoldenHandrail, true); + GiveShipPart(ShipPart_Handrail, ShipType_Golden); + } break; + + case ItemId_GoldenCannon: { + gAdventureFlags->Set(AdventureFlag_ReceivedGoldenCannon, true); + GiveShipPart(ShipPart_Cannon, ShipType_Golden); + } break; + + case ItemId_GoldenHull: { + gAdventureFlags->Set(AdventureFlag_ReceivedGoldenHull, true); + GiveShipPart(ShipPart_Hull, ShipType_Golden); + } break; + + case ItemId_CycloneSlate: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_CycloneSlate); + } break; + + case ItemId_Unk_128: { + SET_FLAG(this->mItemFlags.flags, ItemFlag_Unk_47); + } break; + + case ItemId_Rupoor10: { + this->GiveRupees(-10, true); + } break; + + case ItemId_Rupoor50: { + this->GiveRupees(-50, true); + } break; + + case ItemId_Unk_0: break; + case ItemId_Unk_5: break; + case ItemId_Unk_16: break; + case ItemId_Unk_131: break; + case ItemId_Unk_132: break; + + default: { + if (ItemId_TREASURE_CHART_START <= id && id <= ItemId_TREASURE_CHART_END) { + SET_FLAG(this->mItemFlags.flags, id + ItemFlag_TREASURE_CHART_START - ItemId_TreasureChart1); + } + } break; + } + if ( + gAdventureFlags->Get(AdventureFlag_Azurine) && + gAdventureFlags->Get(AdventureFlag_Crimsonine) && + gAdventureFlags->Get(AdventureFlag_Aquanine) + ) { + gAdventureFlags->Set(AdventureFlag_Unk_128, true); + } +}