Complete felicity bank

This commit is contained in:
Kermalis 2023-07-22 23:11:28 -04:00
parent 117feaf92b
commit 908f09a642
5 changed files with 176 additions and 256 deletions

View File

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

View File

@ -39,4 +39,7 @@ struct FelicityBankWork
extern struct FelicityBankWork *gFelicityBankWork;
#define FELICITY_BANK_ACTION_WITHDRAW 0
#define FELICITY_BANK_ACTION_DEPOSIT 1
#endif

View File

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

View File

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

View File

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