mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-19 01:11:30 -05:00
Complete felicity bank
This commit is contained in:
parent
117feaf92b
commit
908f09a642
|
|
@ -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
|
||||
|
|
@ -39,4 +39,7 @@ struct FelicityBankWork
|
|||
|
||||
extern struct FelicityBankWork *gFelicityBankWork;
|
||||
|
||||
#define FELICITY_BANK_ACTION_WITHDRAW 0
|
||||
#define FELICITY_BANK_ACTION_DEPOSIT 1
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user