diff --git a/asm/felicity_bank.s b/asm/felicity_bank.s index cfe3220e4..37d77eb6b 100644 --- a/asm/felicity_bank.s +++ b/asm/felicity_bank.s @@ -5,473 +5,6 @@ .text - thumb_func_start UpdateFelicityBankDialogue -UpdateFelicityBankDialogue: - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _08016558 - ldr r0, [r1] - ldr r0, [r0, 0x4] - adds r2, r1, 0 - cmp r0, 0xC - bls _0801654E - b _080168EC -_0801654E: - lsls r0, 2 - ldr r1, _0801655C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08016558: .4byte gFelicityBankWork -_0801655C: .4byte _08016560 - .align 2, 0 -_08016560: - .4byte _08016594 - .4byte _080165B4 - .4byte _080168B2 - .4byte _08016650 - .4byte _08016668 - .4byte _080166C4 - .4byte _080168EC - .4byte _080166DC - .4byte _0801674C - .4byte _080167A8 - .4byte _080167CC - .4byte _0801685C - .4byte _080168C4 -_08016594: - ldr r2, [r2] - movs r0, 0x1 - str r0, [r2, 0x8] - ldr r3, _080165B0 - ldr r1, [r2] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r0, r3 - ldr r0, [r0] - adds r2, 0xA4 - ldr r2, [r2] - b _08016844 - .align 2, 0 -_080165B0: .4byte gFelicityDialogue -_080165B4: - bl CreateFelicityBankShopMenu - ldr r0, _080165FC - ldr r0, [r0] - mov r12, r0 - movs r0, 0x2 - mov r1, r12 - str r0, [r1, 0x8] - ldr r0, _08016600 - ldr r0, [r0] - movs r3, 0x99 - lsls r3, 2 - adds r0, r3 - ldr r4, [r0] - cmp r4, 0 - bne _08016608 - ldr r2, _08016604 - ldr r1, [r1] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x4 - adds r0, r2 - ldr r0, [r0] - mov r5, r12 - ldr r2, [r5, 0x10] - mov r3, r12 - adds r3, 0x14 - mov r1, r12 - adds r1, 0x54 - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r4, [sp, 0x8] - b _08016632 - .align 2, 0 -_080165FC: .4byte gFelicityBankWork -_08016600: .4byte gTeamInventory_203B460 -_08016604: .4byte gFelicityDialogue -_08016608: - ldr r0, _08016648 - str r4, [r0] - ldr r2, _0801664C - mov r0, r12 - ldr r1, [r0] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x8 - adds r0, r2 - ldr r0, [r0] - mov r1, r12 - ldr r2, [r1, 0x10] - mov r3, r12 - adds r3, 0x14 - adds r1, 0x54 - str r1, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] -_08016632: - mov r1, r12 - adds r1, 0xA4 - ldr r1, [r1] - str r1, [sp, 0xC] - movs r1, 0xC - str r1, [sp, 0x10] - movs r1, 0 - bl sub_8014248 - b _080168EC - .align 2, 0 -_08016648: .4byte gUnknown_202DE30 -_0801664C: .4byte gFelicityDialogue -_08016650: - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08016664 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x38 - b _0801683C - .align 2, 0 -_08016664: .4byte gFelicityDialogue -_08016668: - ldr r3, [r2] - movs r0, 0x6 - str r0, [r3, 0x8] - ldr r0, _08016698 - ldr r0, [r0] - movs r5, 0x99 - lsls r5, 2 - adds r0, r5 - ldr r1, [r0] - cmp r1, 0 - bne _080166A0 - ldr r2, _0801669C - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x10 - adds r0, r2 - ldr r0, [r0] - adds r1, r3, 0 - adds r1, 0xA4 - ldr r2, [r1] - b _08016844 - .align 2, 0 -_08016698: .4byte gTeamInventory_203B460 -_0801669C: .4byte gFelicityDialogue -_080166A0: - ldr r0, _080166BC - str r1, [r0] - ldr r2, _080166C0 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x14 - adds r0, r2 - ldr r0, [r0] - adds r1, r3, 0 - adds r1, 0xA4 - ldr r2, [r1] - b _08016844 - .align 2, 0 -_080166BC: .4byte gUnknown_202DE30 -_080166C0: .4byte gFelicityDialogue -_080166C4: - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _080166D8 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0xC - b _0801683C - .align 2, 0 -_080166D8: .4byte gFelicityDialogue -_080166DC: - ldr r0, _08016700 - ldr r1, [r0] - movs r3, 0x98 - lsls r3, 2 - adds r0, r1, r3 - ldr r0, [r0] - cmp r0, 0 - bne _08016708 - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08016704 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x1C - b _0801683C - .align 2, 0 -_08016700: .4byte gTeamInventory_203B460 -_08016704: .4byte gFelicityDialogue -_08016708: - movs r5, 0x99 - lsls r5, 2 - adds r0, r1, r5 - ldr r1, [r0] - ldr r0, _0801672C - cmp r1, r0 - ble _08016734 - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08016730 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x20 - b _0801683C - .align 2, 0 -_0801672C: .4byte 0x0098967e -_08016730: .4byte gFelicityDialogue -_08016734: - ldr r3, [r2] - movs r0, 0x8 - str r0, [r3, 0x8] - ldr r2, _08016748 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x18 - b _0801683C - .align 2, 0 -_08016748: .4byte gFelicityDialogue -_0801674C: - ldr r4, [r2] - ldr r0, _080167A0 - ldr r3, [r0] - movs r1, 0x99 - lsls r1, 2 - adds r0, r3, r1 - ldr r1, [r0] - ldr r0, _080167A4 - subs r0, r1 - str r0, [r4, 0x70] - movs r5, 0x98 - lsls r5, 2 - adds r1, r3, r5 - ldr r1, [r1] - cmp r0, r1 - ble _0801676E - str r1, [r4, 0x70] -_0801676E: - ldr r2, [r2] - ldr r0, [r2, 0x70] - str r0, [r2, 0x68] - movs r0, 0x1 - str r0, [r2, 0x6C] - movs r0, 0x5 - str r0, [r2, 0x74] - movs r0, 0x2 - str r0, [r2, 0x78] - adds r0, r2, 0 - adds r0, 0xD8 - str r0, [r2, 0x7C] - adds r1, r2, 0 - adds r1, 0x80 - movs r0, 0x50 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x12 - str r0, [r1] - adds r0, r2, 0 - adds r0, 0x64 - bl sub_8013AA0 - movs r0, 0x1 - b _080168AE - .align 2, 0 -_080167A0: .4byte gTeamInventory_203B460 -_080167A4: .4byte 0x0098967f -_080167A8: - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r1, _080167C4 - ldr r0, [r3, 0xC] - str r0, [r1] - ldr r2, _080167C8 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x24 - b _0801683C - .align 2, 0 -_080167C4: .4byte gUnknown_202DE30 -_080167C8: .4byte gFelicityDialogue -_080167CC: - ldr r0, _080167F4 - ldr r3, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r3, r1 - ldr r1, [r0] - ldr r0, _080167F8 - cmp r1, r0 - ble _08016800 - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _080167FC - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x30 - b _0801683C - .align 2, 0 -_080167F4: .4byte gTeamInventory_203B460 -_080167F8: .4byte 0x0001869e -_080167FC: .4byte gFelicityDialogue -_08016800: - movs r5, 0x99 - lsls r5, 2 - adds r4, r3, r5 - ldr r0, [r4] - cmp r0, 0 - bne _08016824 - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r2, _08016820 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x2C - b _0801683C - .align 2, 0 -_08016820: .4byte gFelicityDialogue -_08016824: - ldr r3, [r2] - movs r0, 0xB - str r0, [r3, 0x8] - ldr r1, _08016850 - ldr r0, [r4] - str r0, [r1] - ldr r2, _08016854 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x28 -_0801683C: - adds r0, r2 - ldr r0, [r0] - adds r3, 0xA4 - ldr r2, [r3] -_08016844: - ldr r3, _08016858 - movs r1, 0 - bl sub_80141B4 - b _080168EC - .align 2, 0 -_08016850: .4byte gUnknown_202DE30 -_08016854: .4byte gFelicityDialogue -_08016858: .4byte 0x0000010d -_0801685C: - ldr r4, [r2] - ldr r0, _080168BC - ldr r3, [r0] - movs r1, 0x98 - lsls r1, 2 - adds r0, r3, r1 - ldr r1, [r0] - ldr r0, _080168C0 - subs r0, r1 - str r0, [r4, 0x70] - movs r5, 0x99 - lsls r5, 2 - adds r1, r3, r5 - ldr r1, [r1] - cmp r0, r1 - ble _0801687E - str r1, [r4, 0x70] -_0801687E: - ldr r2, [r2] - ldr r0, [r2, 0x70] - str r0, [r2, 0x68] - movs r0, 0x1 - str r0, [r2, 0x6C] - movs r0, 0x5 - str r0, [r2, 0x74] - movs r0, 0x2 - str r0, [r2, 0x78] - adds r0, r2, 0 - adds r0, 0xD8 - str r0, [r2, 0x7C] - adds r1, r2, 0 - adds r1, 0x80 - movs r0, 0x50 - str r0, [r1] - adds r1, 0x4 - movs r0, 0x12 - str r0, [r1] - adds r0, r2, 0 - adds r0, 0x64 - bl sub_8013AA0 - movs r0, 0 -_080168AE: - bl sub_8016B48 -_080168B2: - movs r0, 0x3 - bl CreateFelicityMoneySavingsHeader - b _080168EC - .align 2, 0 -_080168BC: .4byte gTeamInventory_203B460 -_080168C0: .4byte 0x0001869f -_080168C4: - ldr r3, [r2] - movs r0, 0x1 - str r0, [r3, 0x8] - ldr r1, _080168F4 - ldr r0, [r3, 0xC] - str r0, [r1] - ldr r2, _080168F8 - ldr r1, [r3] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 2 - adds r2, 0x34 - adds r0, r2 - ldr r0, [r0] - adds r3, 0xA4 - ldr r2, [r3] - ldr r3, _080168FC - movs r1, 0 - bl sub_80141B4 -_080168EC: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080168F4: .4byte gUnknown_202DE30 -_080168F8: .4byte gFelicityDialogue -_080168FC: .4byte 0x0000010d - thumb_func_end UpdateFelicityBankDialogue - thumb_func_start CreateFelicityBankShopMenu CreateFelicityBankShopMenu: push {r4-r7,lr} diff --git a/include/felicity_bank.h b/include/felicity_bank.h index 030e377e3..31754d740 100644 --- a/include/felicity_bank.h +++ b/include/felicity_bank.h @@ -16,9 +16,15 @@ struct FelicityBankWork struct MenuItem unk14[8]; u16 unk54[8]; u32 unk64; - u8 fill68[0x78 - 0x68]; + s32 unk68; + s32 unk6C; + /* 0x70 */ s32 maximumDepositWithdraw; + s32 unk74; u32 unk78; - u8 fill7C[0x94 - 0x7C]; + struct UnkTextStruct2 *unk7C; + s32 unk80; + s32 unk84; + u8 fill88[0x94 - 0x88]; /* 0x94 */ struct OpenedFile *faceFile; /* 0x98 */ u8 *faceData; u16 unk9C; @@ -31,4 +37,6 @@ struct FelicityBankWork struct UnkTextStruct2 unkA8[4]; }; +extern struct FelicityBankWork *gFelicityBankWork; + #endif diff --git a/include/team_inventory.h b/include/team_inventory.h index e4b774d86..0c7ab7d49 100644 --- a/include/team_inventory.h +++ b/include/team_inventory.h @@ -4,18 +4,20 @@ #define MAX_KECLEON_ITEM_SHOP_ITEMS 8 #define MAX_KECLEON_WARE_SHOP_ITEMS 4 +// size: 0x268 struct TeamInventory { - struct Item teamItems[INVENTORY_SIZE]; - u16 teamStorage[NUMBER_OF_ITEM_IDS]; - struct BulkItem kecleonShopItems[MAX_KECLEON_ITEM_SHOP_ITEMS]; - struct BulkItem kecleonWareItems[MAX_KECLEON_WARE_SHOP_ITEMS]; + /* 0x0 */ struct Item teamItems[INVENTORY_SIZE]; + /* 0x50 */ u16 teamStorage[STORAGE_SIZE]; + /* 0x230 */ struct BulkItem kecleonShopItems[MAX_KECLEON_ITEM_SHOP_ITEMS]; + /* 0x250 */ struct BulkItem kecleonWareItems[MAX_KECLEON_WARE_SHOP_ITEMS]; /* 0x260 */ s32 teamMoney; - /* 0x264 */ u32 teamSavings; + /* 0x264 */ s32 teamSavings; }; extern struct TeamInventory *gTeamInventory_203B460; #define MAX_TEAM_MONEY 99999 +#define MAX_TEAM_SAVINGS 9999999 #endif diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 91dcb9b25..e54804d8f 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -4,18 +4,23 @@ #include "input.h" #include "felicity_bank.h" #include "memory.h" +#include "team_inventory.h" +extern u32 gUnknown_202DE30; extern u8 gUnknown_202E1C8[]; extern u8 gUnknown_202E5D8[]; -extern struct FelicityBankWork *gFelicityBankWork; 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 void sub_8013AA0(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 void sub_801645C(); extern void sub_80169BC(); extern void sub_8016B00(); @@ -24,6 +29,11 @@ extern void sub_8016B24(); 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; @@ -137,3 +147,114 @@ void sub_801645C(void) break; } } + +void UpdateFelicityBankDialogue(void) +{ + switch (gFelicityBankWork->currState) { + case 0x0: + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][0], 0, gFelicityBankWork->unkA4, 0x10D); + break; + case 0x1: + CreateFelicityBankShopMenu(); + gFelicityBankWork->fallbackState = 2; + if (gTeamInventory_203B460->teamSavings == 0) + sub_8014248(gFelicityDialogue[gFelicityBankWork->isAsleep][1], 0, gFelicityBankWork->menuAction, + gFelicityBankWork->unk14, gFelicityBankWork->unk54, 4, 0, gFelicityBankWork->unkA4, 0xC); + else { + gUnknown_202DE30 = gTeamInventory_203B460->teamSavings; + sub_8014248(gFelicityDialogue[gFelicityBankWork->isAsleep][2], 0, gFelicityBankWork->menuAction, + gFelicityBankWork->unk14, gFelicityBankWork->unk54, 4, 0, gFelicityBankWork->unkA4, 0xC); + } + break; + case 0x3: + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][14], 0, gFelicityBankWork->unkA4, 0x10D); + break; + case 0x4: + gFelicityBankWork->fallbackState = 6; + if (gTeamInventory_203B460->teamSavings == 0) + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][4], 0, gFelicityBankWork->unkA4, 0x10D); + else { + gUnknown_202DE30 = gTeamInventory_203B460->teamSavings; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][5], 0, gFelicityBankWork->unkA4, 0x10D); + } + break; + case 0x5: + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][3], 0, gFelicityBankWork->unkA4, 0x10D); + break; + case 0x7: + if (gTeamInventory_203B460->teamMoney == 0) { + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][7], 0, gFelicityBankWork->unkA4, 0x10D); + } + else if (gTeamInventory_203B460->teamSavings >= MAX_TEAM_SAVINGS) { + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][8], 0, gFelicityBankWork->unkA4, 0x10D); + } + else { + gFelicityBankWork->fallbackState = 8; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][6], 0, gFelicityBankWork->unkA4, 0x10D); + } + break; + case 0x8: + gFelicityBankWork->maximumDepositWithdraw = MAX_TEAM_SAVINGS - gTeamInventory_203B460->teamSavings; + if (gFelicityBankWork->maximumDepositWithdraw > gTeamInventory_203B460->teamMoney) + gFelicityBankWork->maximumDepositWithdraw = gTeamInventory_203B460->teamMoney; + gFelicityBankWork->unk68 = gFelicityBankWork->maximumDepositWithdraw; + gFelicityBankWork->unk6C = 1; + gFelicityBankWork->unk74 = 5; + gFelicityBankWork->unk78 = 2; + gFelicityBankWork->unk7C = &gFelicityBankWork->unkA8[2]; + gFelicityBankWork->unk80 = 0x50; + gFelicityBankWork->unk84 = 0x12; + sub_8013AA0(&gFelicityBankWork->unk64); + sub_8016B48(1); + CreateFelicityMoneySavingsHeader(3); + break; + case 0x9: + gFelicityBankWork->fallbackState = 1; + gUnknown_202DE30 = gFelicityBankWork->chosenAmount; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][9], 0, gFelicityBankWork->unkA4, 0x10D); + break; + case 0xA: + if (gTeamInventory_203B460->teamMoney >= MAX_TEAM_MONEY) { + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][12], 0, gFelicityBankWork->unkA4, 0x10D); + } + else if (gTeamInventory_203B460->teamSavings == 0) { + gFelicityBankWork->fallbackState = 1; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][11], 0, gFelicityBankWork->unkA4, 0x10D); + } + else { + gFelicityBankWork->fallbackState = 11; + gUnknown_202DE30 = gTeamInventory_203B460->teamSavings; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][10], 0, gFelicityBankWork->unkA4, 0x10D); + } + break; + case 0xB: + gFelicityBankWork->maximumDepositWithdraw = MAX_TEAM_MONEY - gTeamInventory_203B460->teamMoney; + if (gFelicityBankWork->maximumDepositWithdraw > gTeamInventory_203B460->teamSavings) + gFelicityBankWork->maximumDepositWithdraw = gTeamInventory_203B460->teamSavings; + gFelicityBankWork->unk68 = gFelicityBankWork->maximumDepositWithdraw; + gFelicityBankWork->unk6C = 1; + gFelicityBankWork->unk74 = 5; + gFelicityBankWork->unk78 = 2; + gFelicityBankWork->unk7C = &gFelicityBankWork->unkA8[2]; + gFelicityBankWork->unk80 = 0x50; + gFelicityBankWork->unk84 = 0x12; + sub_8013AA0(&gFelicityBankWork->unk64); + sub_8016B48(0); + CreateFelicityMoneySavingsHeader(3); + break; + case 0x2: + CreateFelicityMoneySavingsHeader(3); + break; + case 0xC: + gFelicityBankWork->fallbackState = 1; + gUnknown_202DE30 = gFelicityBankWork->chosenAmount; + sub_80141B4(gFelicityDialogue[gFelicityBankWork->isAsleep][13], 0, gFelicityBankWork->unkA4, 0x10D); + break; + } +} \ No newline at end of file diff --git a/src/felicity_bank_1.c b/src/felicity_bank_1.c index 4a37148ee..fe15d1fb4 100644 --- a/src/felicity_bank_1.c +++ b/src/felicity_bank_1.c @@ -4,8 +4,6 @@ #include "felicity_bank.h" #include "menu_input.h" -extern struct FelicityBankWork *gFelicityBankWork; - extern u8 gUnknown_80DB738; extern u8 gFelicityMoney[]; extern u8 gFelicitySavings[];