diff --git a/asm/felicity_bank.s b/asm/felicity_bank.s deleted file mode 100644 index 37d77eb6b..000000000 --- a/asm/felicity_bank.s +++ /dev/null @@ -1,104 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start CreateFelicityBankShopMenu -CreateFelicityBankShopMenu: - push {r4-r7,lr} - ldr r4, _08016980 - ldr r0, [r4] - adds r0, 0x54 - movs r1, 0 - movs r2, 0x10 - bl MemoryFill16 - ldr r3, [r4] - movs r2, 0 - ldr r0, _08016984 - ldr r0, [r0] - str r0, [r3, 0x14] - movs r0, 0x2 - str r0, [r3, 0x18] - movs r1, 0x1 - ldr r0, _08016988 - ldr r0, [r0] - str r0, [r3, 0x1C] - movs r0, 0x3 - str r0, [r3, 0x20] - ldr r0, _0801698C - ldr r0, [r0] - str r0, [r3, 0x24] - movs r0, 0x4 - str r0, [r3, 0x28] - ldr r0, _08016990 - ldr r0, [r0] - str r0, [r3, 0x2C] - str r1, [r3, 0x30] - movs r6, 0x4 - str r2, [r3, 0x34] - str r1, [r3, 0x38] - movs r5, 0 - mov r12, r3 - adds r3, 0x18 - mov r2, r12 - adds r2, 0x54 -_0801694C: - ldrh r0, [r2] - cmp r0, 0 - bne _0801695C - ldr r1, [r3] - mov r7, r12 - ldr r0, [r7, 0x10] - cmp r1, r0 - beq _080169B6 -_0801695C: - adds r3, 0x8 - adds r2, 0x2 - adds r5, 0x1 - cmp r5, r6 - blt _0801694C - movs r5, 0 - cmp r5, r6 - bge _080169B6 - ldr r1, [r4] - adds r0, r1, 0 - adds r0, 0x54 - ldrh r0, [r0] - cmp r0, 0 - bne _08016994 - ldr r0, [r1, 0x18] - str r0, [r1, 0x10] - b _080169B6 - .align 2, 0 -_08016980: .4byte gFelicityBankWork -_08016984: .4byte gUnknown_80D4958 -_08016988: .4byte gUnknown_80D4964 -_0801698C: .4byte gUnknown_80D4970 -_08016990: .4byte gUnknown_80D4934 -_08016994: - adds r5, 0x1 - cmp r5, r6 - bge _080169B6 - ldr r2, [r4] - lsls r0, r5, 1 - adds r1, r2, 0 - adds r1, 0x54 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _08016994 - lsls r0, r5, 3 - adds r1, r2, 0 - adds r1, 0x18 - adds r1, r0 - ldr r0, [r1] - str r0, [r2, 0x10] -_080169B6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end CreateFelicityBankShopMenu - - .align 2,0 diff --git a/include/felicity_bank.h b/include/felicity_bank.h index 31754d740..84f5715d8 100644 --- a/include/felicity_bank.h +++ b/include/felicity_bank.h @@ -39,4 +39,7 @@ struct FelicityBankWork extern struct FelicityBankWork *gFelicityBankWork; +#define FELICITY_BANK_ACTION_WITHDRAW 0 +#define FELICITY_BANK_ACTION_DEPOSIT 1 + #endif diff --git a/ld_script.txt b/ld_script.txt index 8b7fc615a..606578f03 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -99,8 +99,6 @@ SECTIONS { asm/code_80130A8.o(.text); src/code_8012A18_1.o(.text); src/felicity_bank.o(.text); - asm/felicity_bank.o(.text); - src/felicity_bank_1.o(.text); src/kangaskhan_storage.o(.text); asm/kangaskhan_storage.o(.text); src/kangaskhan_storage_1.o(.text); diff --git a/src/felicity_bank.c b/src/felicity_bank.c index e54804d8f..3f1618087 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -5,35 +5,50 @@ #include "felicity_bank.h" #include "memory.h" #include "team_inventory.h" +#include "text.h" +#include "menu_input.h" extern u32 gUnknown_202DE30; extern u8 gUnknown_202E1C8[]; extern u8 gUnknown_202E5D8[]; +extern u8 *gUnknown_80D4934[]; +extern u8 *gUnknown_80D4958[]; +extern u8 *gUnknown_80D4964[]; +extern u8 *gUnknown_80D4970[]; +extern u8 *gFelicityDeposit; +extern u8 *gFelicityWithdraw; +extern u8 *gFelicityDialogue[2][15]; extern struct UnkTextStruct2 gUnknown_80DB6DC; extern struct UnkTextStruct2 gUnknown_80DB6F4; extern struct UnkTextStruct2 gUnknown_80DB70C; -extern u8 *gFelicityDialogue[2][15]; - -extern void Felicity_DepositMoney(); -extern void Felicity_WithdrawMoney(); +extern u8 gFelicitySavings[]; +extern u8 gFelicityMoney[]; +extern u8 gUnknown_80DB738; +extern void PlaySound(u32); +extern void sub_80073B8(u32); +extern void sub_80073E0(u32); +extern void sub_8008C54(u32); extern void sub_8013AA0(u32 *); +extern u32 sub_8013BBC(u32 *); +extern void sub_8013C68(u32 *); extern void sub_80141B4(const u8 *, u32, struct OpenedFile **, u32); extern void sub_8014248(const u8 *, u32, u32, const struct MenuItem *, void *, u32, u32, struct OpenedFile **, u32); +extern s32 sub_80144A4(s32 *); extern void sub_801645C(); extern void sub_80169BC(); extern void sub_8016B00(); extern void sub_8016B24(); +void CreateFelicityBankShopMenu(void); +void CreateFelicityMoneySavingsHeader(u32); +void Felicity_DepositMoney(); +void Felicity_WithdrawMoney(); +void sub_8016B48(u8 action); void UpdateFelicityBankDialogue(); void UpdateFelicityBankState(u32); -// TODO: Don't extern these once I merge the files -extern void CreateFelicityBankShopMenu(void); -extern void CreateFelicityMoneySavingsHeader(u32); -extern void sub_8016B48(u8 action); - u32 CreateFelicityBank(s32 isAsleep) { char *monName; @@ -257,4 +272,153 @@ void UpdateFelicityBankDialogue(void) sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][13], 0, gFelicityBankWork->unkA4, 0x10D); break; } +} + +void CreateFelicityBankShopMenu(void) +{ + s32 loopMax; + s32 i; + loopMax = 0; + + MemoryFill16(gFelicityBankWork->unk54, 0, sizeof(gFelicityBankWork->unk54)); + + gFelicityBankWork->unk14[loopMax].text = *gUnknown_80D4958; // Store + gFelicityBankWork->unk14[loopMax].menuAction = 2; + loopMax++; + gFelicityBankWork->unk14[loopMax].text = *gUnknown_80D4964; // Take + gFelicityBankWork->unk14[loopMax].menuAction = 3; + loopMax++; + gFelicityBankWork->unk14[loopMax].text = *gUnknown_80D4970; // Info + gFelicityBankWork->unk14[loopMax].menuAction = 4; + loopMax++; + gFelicityBankWork->unk14[loopMax].text = *gUnknown_80D4934; // Cancel + gFelicityBankWork->unk14[loopMax].menuAction = 1; + loopMax++; + gFelicityBankWork->unk14[loopMax].text = NULL; + gFelicityBankWork->unk14[loopMax].menuAction = 1; + + for (i = 0; i < loopMax; i++) { + if (gFelicityBankWork->unk54[i] == 0 && gFelicityBankWork->unk14[i].menuAction == gFelicityBankWork->menuAction) + return; + } + for (i = 0; i < loopMax; i++) { + if (gFelicityBankWork->unk54[i] == 0) { + gFelicityBankWork->menuAction = gFelicityBankWork->unk14[i].menuAction; + break; + } + } +} + +void sub_80169BC(void) +{ + s32 menuAction; + + if (sub_80144A4(&menuAction) == 0) { + gFelicityBankWork->menuAction = menuAction; + switch (menuAction) + { + case 2: + UpdateFelicityBankState(7); + break; + case 3: + UpdateFelicityBankState(10); + break; + case 4: + UpdateFelicityBankState(3); + break; + case 1: + UpdateFelicityBankState(4); + break; + } + } +} + +void Felicity_DepositMoney(void) +{ + switch (sub_8013BBC(&gFelicityBankWork->unk64)) { + case 1: + sub_8016B48(FELICITY_BANK_ACTION_DEPOSIT); + break; + case 3: + gFelicityBankWork->chosenAmount = gFelicityBankWork->unk64; + gTeamInventory_203B460->teamSavings += gFelicityBankWork->chosenAmount; + gTeamInventory_203B460->teamMoney -= gFelicityBankWork->chosenAmount; + PlaySound(0x14c); + UpdateFelicityBankState(9); + break; + case 2: + UpdateFelicityBankState(5); + break; + case 0: + break; + } +} + +void Felicity_WithdrawMoney(void) +{ + switch (sub_8013BBC(&gFelicityBankWork->unk64)) { + case 1: + sub_8016B48(FELICITY_BANK_ACTION_WITHDRAW); + break; + case 3: + gFelicityBankWork->chosenAmount = gFelicityBankWork->unk64; + gTeamInventory_203B460->teamMoney += gFelicityBankWork->chosenAmount; + gTeamInventory_203B460->teamSavings -= gFelicityBankWork->chosenAmount; + PlaySound(0x14c); + UpdateFelicityBankState(0xc); + break; + case 2: + UpdateFelicityBankState(5); + break; + case 0: + break; + } +} + +void sub_8016B00(void) +{ + s32 auStack8; + + if (sub_80144A4(&auStack8) == 0) + UpdateFelicityBankState(gFelicityBankWork->fallbackState); +} + +void sub_8016B24(void) +{ + s32 auStack8; + + if (sub_80144A4(&auStack8) == 4) + UpdateFelicityBankState(gFelicityBankWork->fallbackState); +} + +void sub_8016B48(u8 action) +{ + sub_8008C54(gFelicityBankWork->unk78); + sub_80073B8(gFelicityBankWork->unk78); + if (action != FELICITY_BANK_ACTION_WITHDRAW) + xxx_call_draw_string(12, 0, gFelicityDeposit, gFelicityBankWork->unk78, 0); + else + xxx_call_draw_string(12, 0, gFelicityWithdraw, gFelicityBankWork->unk78, 0); + sub_8013C68(&gFelicityBankWork->unk64); + sub_80073E0(gFelicityBankWork->unk78); +} + +void CreateFelicityMoneySavingsHeader(u32 param_1) +{ + sub_8008C54(param_1); + sub_80073B8(param_1); + xxx_call_draw_string(16, 4, gFelicityMoney, param_1, 0); + sub_8012BC4(96, 4, gTeamInventory_203B460->teamMoney, 5, 5, param_1); + xxx_call_draw_string(112, 4, gFelicitySavings, param_1, 0); + sub_8012BC4(200, 4, gTeamInventory_203B460->teamSavings, 7, 5, param_1); + sub_80073E0(param_1); +} + +void DrawTeamMoneyBox(u32 param_1) +{ + sub_8008C54(param_1); + sub_80073B8(param_1); + xxx_call_draw_string(6, 0, &gUnknown_80DB738, param_1, 0); // Money + sub_8012BC4(42, 12, gTeamInventory_203B460->teamMoney, 5, 5, param_1); + sub_80073E0(param_1); } \ No newline at end of file diff --git a/src/felicity_bank_1.c b/src/felicity_bank_1.c deleted file mode 100644 index fe15d1fb4..000000000 --- a/src/felicity_bank_1.c +++ /dev/null @@ -1,141 +0,0 @@ -#include "global.h" -#include "item.h" -#include "team_inventory.h" -#include "felicity_bank.h" -#include "menu_input.h" - -extern u8 gUnknown_80DB738; -extern u8 gFelicityMoney[]; -extern u8 gFelicitySavings[]; -extern u8 *gFelicityWithdraw; -extern u8 *gFelicityDeposit; - -extern void PlaySound(u32); -extern void UpdateFelicityBankState(u32); -extern void xxx_call_draw_string(s32 x, u32 y, u8 *str, u32 , u32); - -extern void sub_80073B8(u32); -extern void sub_80073E0(u32); -extern void sub_8008C54(u32); -extern u32 sub_8013BBC(u32 *); -extern void sub_8013C68(u32 *); -extern s32 sub_80144A4(s32 *); - -void sub_8016B48(u8 action); - -#define FELICITY_BANK_ACTION_WITHDRAW 0 -#define FELICITY_BANK_ACTION_DEPOSIT 1 - -void sub_80169BC(void) -{ - s32 menuAction; - - if (sub_80144A4(&menuAction) == 0) { - gFelicityBankWork->menuAction = menuAction; - switch (menuAction) - { - case 2: - UpdateFelicityBankState(7); - break; - case 3: - UpdateFelicityBankState(10); - break; - case 4: - UpdateFelicityBankState(3); - break; - case 1: - UpdateFelicityBankState(4); - break; - } - } -} - -void Felicity_DepositMoney(void) -{ - switch (sub_8013BBC(&gFelicityBankWork->unk64)) { - case 1: - sub_8016B48(FELICITY_BANK_ACTION_DEPOSIT); - break; - case 3: - gFelicityBankWork->chosenAmount = gFelicityBankWork->unk64; - gTeamInventory_203B460->teamSavings += gFelicityBankWork->chosenAmount; - gTeamInventory_203B460->teamMoney -= gFelicityBankWork->chosenAmount; - PlaySound(0x14c); - UpdateFelicityBankState(9); - break; - case 2: - UpdateFelicityBankState(5); - break; - case 0: - break; - } -} - -void Felicity_WithdrawMoney(void) -{ - switch (sub_8013BBC(&gFelicityBankWork->unk64)) { - case 1: - sub_8016B48(FELICITY_BANK_ACTION_WITHDRAW); - break; - case 3: - gFelicityBankWork->chosenAmount = gFelicityBankWork->unk64; - gTeamInventory_203B460->teamMoney += gFelicityBankWork->chosenAmount; - gTeamInventory_203B460->teamSavings -= gFelicityBankWork->chosenAmount; - PlaySound(0x14c); - UpdateFelicityBankState(0xc); - break; - case 2: - UpdateFelicityBankState(5); - break; - case 0: - break; - } -} - -void sub_8016B00(void) -{ - s32 auStack8; - - if (sub_80144A4(&auStack8) == 0) - UpdateFelicityBankState(gFelicityBankWork->fallbackState); -} - -void sub_8016B24(void) -{ - s32 auStack8; - - if (sub_80144A4(&auStack8) == 4) - UpdateFelicityBankState(gFelicityBankWork->fallbackState); -} - -void sub_8016B48(u8 action) -{ - sub_8008C54(gFelicityBankWork->unk78); - sub_80073B8(gFelicityBankWork->unk78); - if (action != FELICITY_BANK_ACTION_WITHDRAW) - xxx_call_draw_string(12, 0, gFelicityDeposit, gFelicityBankWork->unk78, 0); - else - xxx_call_draw_string(12, 0, gFelicityWithdraw, gFelicityBankWork->unk78, 0); - sub_8013C68(&gFelicityBankWork->unk64); - sub_80073E0(gFelicityBankWork->unk78); -} - -void CreateFelicityMoneySavingsHeader(u32 param_1) -{ - sub_8008C54(param_1); - sub_80073B8(param_1); - xxx_call_draw_string(16, 4, gFelicityMoney, param_1, 0); - sub_8012BC4(96, 4, gTeamInventory_203B460->teamMoney, 5, 5, param_1); - xxx_call_draw_string(112, 4, gFelicitySavings, param_1, 0); - sub_8012BC4(200, 4, gTeamInventory_203B460->teamSavings, 7, 5, param_1); - sub_80073E0(param_1); -} - -void DrawTeamMoneyBox(u32 param_1) -{ - sub_8008C54(param_1); - sub_80073B8(param_1); - xxx_call_draw_string(6, 0, &gUnknown_80DB738, param_1, 0); // Money - sub_8012BC4(42, 12, gTeamInventory_203B460->teamMoney, 5, 5, param_1); - sub_80073E0(param_1); -}