Match UpdateFelicityBankDialogue()

This commit is contained in:
Kermalis 2023-07-22 20:50:44 -04:00
parent a5c7e736f9
commit 5dec0a0a32
5 changed files with 139 additions and 477 deletions

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -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;
}
}

View File

@ -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[];