start coins decomp

This commit is contained in:
DizzyEggg 2017-09-09 14:24:18 +02:00
parent 307278374b
commit 3355389eab
9 changed files with 100 additions and 156 deletions

View File

@ -5,148 +5,8 @@
.text
thumb_func_start PrintCoinsString
@ void PrintCoinsString(s32 coinAmount)
PrintCoinsString: @ 8145B54
push {r4,lr}
sub sp, 0xC
adds r1, r0, 0
ldr r0, =gStringVar1
movs r2, 0x1
movs r3, 0x4
bl ConvertIntToDecimalStringN
ldr r4, =gStringVar4
ldr r1, =gUnknown_085E8DAB
adds r0, r4, 0
bl StringExpandPlaceholders
movs r0, 0x1
adds r1, r4, 0
movs r2, 0x40
bl GetStringRightAlignXOffset
adds r3, r0, 0
ldr r0, =gUnknown_0203AB9C
ldrb r0, [r0]
lsls r3, 24
lsrs r3, 24
movs r1, 0x1
str r1, [sp]
movs r1, 0
str r1, [sp, 0x4]
str r1, [sp, 0x8]
movs r1, 0x1
adds r2, r4, 0
bl PrintTextOnWindow
add sp, 0xC
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end PrintCoinsString
thumb_func_start ShowCoinsWindow
@ void ShowCoinsWindow(s32 coinAmount, u8 x, u8 y)
ShowCoinsWindow: @ 8145BAC
push {r4,r5,lr}
sub sp, 0x18
adds r5, r0, 0
adds r4, r1, 0
adds r3, r2, 0
lsls r4, 24
lsrs r4, 24
lsls r3, 24
lsrs r3, 24
movs r0, 0x8
str r0, [sp]
movs r0, 0x2
str r0, [sp, 0x4]
movs r0, 0xF
str r0, [sp, 0x8]
ldr r0, =0x00000141
str r0, [sp, 0xC]
add r0, sp, 0x10
movs r1, 0
adds r2, r4, 0
bl rbox_template_set
ldr r4, =gUnknown_0203AB9C
add r0, sp, 0x10
bl AddWindow
strb r0, [r4]
ldrb r0, [r4]
movs r1, 0
bl FillWindowPixelBuffer
ldrb r0, [r4]
bl PutWindowTilemap
ldrb r0, [r4]
movs r2, 0x85
lsls r2, 2
movs r1, 0
movs r3, 0xE
bl SetWindowBorderStyle
adds r0, r5, 0
bl PrintCoinsString
add sp, 0x18
pop {r4,r5}
pop {r0}
bx r0
.pool
thumb_func_end ShowCoinsWindow
thumb_func_start HideCoinsWindow
@ void HideCoinsWindow()
HideCoinsWindow: @ 8145C14
push {r4,lr}
ldr r4, =gUnknown_0203AB9C
ldrb r0, [r4]
movs r1, 0x1
bl sub_819746C
ldrb r0, [r4]
bl RemoveWindow
pop {r4}
pop {r0}
bx r0
.pool
thumb_func_end HideCoinsWindow
thumb_func_start GetCoins
@ u16 GetCoins()
GetCoins: @ 8145C30
ldr r0, =gSaveBlock1Ptr
ldr r1, [r0]
ldr r0, =0x00000494
adds r1, r0
ldr r0, =gSaveBlock2Ptr
ldr r0, [r0]
adds r0, 0xAC
ldr r0, [r0]
ldrh r1, [r1]
eors r0, r1
lsls r0, 16
lsrs r0, 16
bx lr
.pool
thumb_func_end GetCoins
thumb_func_start SetCoins
@ void SetCoins(u16 amount)
SetCoins: @ 8145C58
lsls r0, 16
lsrs r0, 16
ldr r1, =gSaveBlock1Ptr
ldr r2, [r1]
ldr r1, =gSaveBlock2Ptr
ldr r1, [r1]
adds r1, 0xAC
ldr r1, [r1]
eors r0, r1
ldr r1, =0x00000494
adds r2, r1
strh r0, [r2]
bx lr
.pool
thumb_func_end SetCoins
thumb_func_start AddCoins
@ bool8 AddCoins(u16 amount)
@ bool8 AddCoins(u16 toAdd)
AddCoins: @ 8145C80
push {r4,lr}
lsls r0, 16
@ -187,7 +47,7 @@ _08145CC0:
thumb_func_end AddCoins
thumb_func_start SubtractCoins
@ bool8 SubtractCoins(u16 amount)
@ bool8 SubtractCoins(u16 toSub)
SubtractCoins: @ 8145CCC
push {r4,lr}
lsls r0, 16

View File

@ -52968,7 +52968,7 @@ sub_80248B0: @ 80248B0
movs r1, 0
movs r2, 0x1
movs r3, 0x1
bl rbox_template_set
bl SetWindowTemplateFields
ldr r4, =gUnknown_02022C94
add r0, sp, 0x10
bl AddWindow

View File

@ -202,7 +202,7 @@ sub_80E52EC: @ 80E52EC
add r0, sp, 0x10
movs r1, 0
adds r2, r4, 0
bl rbox_template_set
bl SetWindowTemplateFields
ldr r4, =gUnknown_02039F98
add r0, sp, 0x10
bl AddWindow

View File

@ -19160,9 +19160,9 @@ sub_81989B8: @ 81989B8
bx r0
thumb_func_end sub_81989B8
thumb_func_start rbox_template_set
@ void rbox_template_set(WindowTemplate *template, char bg_id, char x, char y, char w, char h, char a7, s16 a8)
rbox_template_set: @ 8198A24
thumb_func_start SetWindowTemplateFields
@ void SetWindowTemplateFields(WindowTemplate *template, char bg_id, char x, char y, char w, char h, char a7, s16 a8)
SetWindowTemplateFields: @ 8198A24
push {r4-r7,lr}
mov r7, r8
push {r7}
@ -19184,7 +19184,7 @@ rbox_template_set: @ 8198A24
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end rbox_template_set
thumb_func_end SetWindowTemplateFields
thumb_func_start sub_8198A50
sub_8198A50: @ 8198A50
@ -19216,7 +19216,7 @@ sub_8198A50: @ 8198A50
str r5, [sp, 0x8]
str r6, [sp, 0xC]
add r0, sp, 0x10
bl rbox_template_set
bl SetWindowTemplateFields
ldr r0, [sp, 0x10]
ldr r1, [sp, 0x14]
mov r2, r8
@ -19263,7 +19263,7 @@ sub_8198AA4: @ 8198AA4
adds r1, r4, 0
adds r2, r5, 0
adds r3, r6, 0
bl rbox_template_set
bl SetWindowTemplateFields
add r0, sp, 0x10
bl AddWindow
lsls r0, 16
@ -70120,7 +70120,7 @@ _081B31D2:
add r0, sp, 0x14
movs r1, 0x2
movs r2, 0x13
bl rbox_template_set
bl SetWindowTemplateFields
b _081B3226
.pool
_081B320C:

View File

@ -420,7 +420,7 @@ gUnknown_085E8DA0:: @ 85E8DA0
.string "×{STR_VAR_1}$"
.string " BERRY$"
gUnknown_085E8DAB:: @ 85E8DAB
gOtherText_Coins2:: @ 85E8DAB
.string "{STR_VAR_1} COINS$"

View File

@ -1,6 +1,12 @@
#ifndef GUARD_COINS_H
#define GUARD_COINS_H
void SetCoins(u16 newValue);
void PrintCoinsString(u32 coinAmount);
void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y);
void HideCoinsWindow(void);
u16 GetCoins(void);
void SetCoins(u16 coinAmount);
bool8 AddCoins(u16 toAdd);
bool8 SubtractCoins(u16 toSub);
#endif // GUARD_COINS_H

View File

@ -180,6 +180,7 @@ SECTIONS {
asm/evolution_scene.o(.text);
asm/roulette.o(.text);
asm/pokedex_cry_screen.o(.text);
src/coins.o(.text);
asm/coins.o(.text);
asm/landmark.o(.text);
asm/fldeff_strength.o(.text);

77
src/coins.c Normal file
View File

@ -0,0 +1,77 @@
#include "global.h"
#include "coins.h"
#include "text.h"
#include "window.h"
#include "text_window.h"
#include "string_util.h"
#define MAX_COINS 9999
EWRAM_DATA u8 sCoinsWindowId = 0;
extern s32 GetStringRightAlignXOffset(u8 fontId, u8 *str, s32 totalWidth);
extern void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
extern void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, s16 tileStart, s8 palette);
extern void sub_819746C(u8 windowId, bool8 copyToVram);
extern const u8 gOtherText_Coins2[];
void PrintCoinsString(u32 coinAmount)
{
u32 xAlign;
ConvertIntToDecimalStringN(gStringVar1, coinAmount, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gOtherText_Coins2);
xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40);
PrintTextOnWindow(sCoinsWindowId, 1, gStringVar4, xAlign, 1, 0, NULL);
}
void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y)
{
struct WindowTemplate template;
SetWindowTemplateFields(&template, 0, x, y, 8, 2, 0xF, 0x141);
sCoinsWindowId = AddWindow(&template);
FillWindowPixelBuffer(sCoinsWindowId, 0);
PutWindowTilemap(sCoinsWindowId);
SetWindowBorderStyle(sCoinsWindowId, FALSE, 0x214, 0xE);
PrintCoinsString(coinAmount);
}
void HideCoinsWindow(void)
{
sub_819746C(sCoinsWindowId, TRUE);
RemoveWindow(sCoinsWindowId);
}
u16 GetCoins(void)
{
return gSaveBlock1Ptr->coins ^ gSaveBlock2Ptr->encryptionKey;
}
void SetCoins(u16 coinAmount)
{
gSaveBlock1Ptr->coins = coinAmount ^ gSaveBlock2Ptr->encryptionKey;
}
/* Can't match it lol
bool8 AddCoins(u16 toAdd)
{
u16 newAmount;
u16 ownedCoins = GetCoins();
if (ownedCoins >= MAX_COINS)
return FALSE;
// check overflow, can't have less coins than previously
if (ownedCoins > ownedCoins + toAdd)
{
newAmount = MAX_COINS;
}
else
{
newAmount = ownedCoins + toAdd;
if (newAmount > MAX_COINS)
newAmount = MAX_COINS;
}
SetCoins(newAmount);
return TRUE;
}*/

View File

@ -1514,9 +1514,9 @@ gUnknown_0203AB94: @ 203AB94
gUnknown_0203AB98: @ 203AB98
.space 0x4
gUnknown_0203AB9C: @ 203AB9C
.space 0x4
.include "src/coins.o"
.align 2
sTransitionStructPtr: @ 203ABA0
.space 0x4