summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lsf6
-rw-r--r--arm9/asm/options.s (renamed from arm9/asm/unk_02024F30.s)6
-rw-r--r--arm9/asm/player_data.s (renamed from arm9/asm/unk_020238C4.s)4
-rw-r--r--arm9/asm/scrcmd_14.s14
-rw-r--r--arm9/asm/unk_02028910.s81
-rw-r--r--arm9/asm/unk_020377F0.s6
-rw-r--r--arm9/asm/unk_0206E2F0.s2
-rw-r--r--arm9/global.inc14
-rw-r--r--arm9/modules/05/asm/mod05_021E1AD8.s2
-rw-r--r--arm9/src/coins.c44
-rw-r--r--include/coins.h13
-rw-r--r--include/options.h13
-rw-r--r--include/player_data.h39
-rw-r--r--include/save_block_2.h38
14 files changed, 137 insertions, 145 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf
index 5d663de4..fa1828ce 100644
--- a/arm9/arm9.lsf
+++ b/arm9/arm9.lsf
@@ -84,11 +84,11 @@ Static arm9
Object unk_02022504.o
Object save.o
Object unk_0202376C.o
- Object unk_020238C4.o
+ Object player_data.o
Object unk_02023AC4.o
Object unk_02023C40.o
Object unk_02024E64.o
- Object unk_02024F30.o
+ Object options.o
Object unk_020250A4.o
Object unk_02025484.o
Object unk_020254B8.o
@@ -98,7 +98,7 @@ Static arm9
Object unk_02027E30.o
Object unk_020281E0.o
Object unk_020286F8.o
- Object unk_02028910.o
+ Object coins.o
Object unk_02028980.o
Object unk_02029A84.o
Object unk_02029AE0.o
diff --git a/arm9/asm/unk_02024F30.s b/arm9/asm/options.s
index 0ee173aa..5869b5b1 100644
--- a/arm9/asm/unk_02024F30.s
+++ b/arm9/asm/options.s
@@ -11,7 +11,7 @@ FUN_02024F30: ; 0x02024F30
mov r1, #0x2
bl AllocFromHeap
add r4, r0, #0x0
- bl FUN_02024F50
+ bl Options_init
add r0, r4, #0x0
pop {r4, pc}
.balign 4
@@ -24,8 +24,8 @@ FUN_02024F44: ; 0x02024F44
nop
_02024F4C: .word MI_CpuCopy8
- thumb_func_start FUN_02024F50
-FUN_02024F50: ; 0x02024F50
+ thumb_func_start Options_init
+Options_init: ; 0x02024F50
push {r4, lr}
add r4, r0, #0x0
mov r1, #0x0
diff --git a/arm9/asm/unk_020238C4.s b/arm9/asm/player_data.s
index 8a32582c..edcf1391 100644
--- a/arm9/asm/unk_020238C4.s
+++ b/arm9/asm/player_data.s
@@ -17,12 +17,12 @@ Sav2_PlayerData_init: ; 0x020238C8
mov r2, #0x2c
bl MIi_CpuClearFast
add r0, r4, #0x0
- bl FUN_02024F50
+ bl Options_init
add r0, r4, #0x4
bl PlayerData_Clear
add r0, r4, #0x0
add r0, #0x24
- bl FUN_02028910
+ bl InitCoins
add r4, #0x26
add r0, r4, #0x0
bl FUN_02029E48
diff --git a/arm9/asm/scrcmd_14.s b/arm9/asm/scrcmd_14.s
index 516d9cf4..f8addc83 100644
--- a/arm9/asm/scrcmd_14.s
+++ b/arm9/asm/scrcmd_14.s
@@ -87,7 +87,7 @@ FUN_02043ACC: ; 0x02043ACC
bl GetVarPointer
add r5, r0, #0x0
add r0, r4, #0x0
- bl FUN_02028930
+ bl CheckCoins
strh r0, [r5, #0x0]
mov r0, #0x0
pop {r3-r5, pc}
@@ -110,7 +110,7 @@ FUN_02043AFC: ; 0x02043AFC
bl VarGet
add r1, r0, #0x0
add r0, r5, #0x0
- bl FUN_02028934
+ bl GiveCoins
mov r0, #0x0
pop {r3-r5, pc}
@@ -131,7 +131,7 @@ FUN_02043B28: ; 0x02043B28
bl VarGet
add r1, r0, #0x0
add r0, r5, #0x0
- bl FUN_0202896C
+ bl TakeCoins
mov r0, #0x0
pop {r3-r5, pc}
@@ -153,7 +153,7 @@ FUN_02043B54: ; 0x02043B54
add r1, r0, #0x0
ldrh r1, [r1, #0x0]
add r0, r4, #0x0
- bl FUN_0202896C
+ bl TakeCoins
mov r0, #0x0
pop {r3-r5, pc}
.balign 4
@@ -182,7 +182,7 @@ FUN_02043B84: ; 0x02043B84
bl ScriptReadWord
add r4, r0, #0x0
add r0, r6, #0x0
- bl FUN_02028930
+ bl CheckCoins
cmp r0, r4
bhs _02043BC8
mov r0, #0x0
@@ -222,7 +222,7 @@ FUN_02043BD0: ; 0x02043BD0
bl GetVarPointer
ldrh r5, [r0, #0x0]
add r0, r6, #0x0
- bl FUN_02028930
+ bl CheckCoins
cmp r0, r5
bhs _02043C1E
mov r0, #0x0
@@ -260,7 +260,7 @@ FUN_02043C28: ; 0x02043C28
bl VarGet
add r1, r0, #0x0
add r0, r6, #0x0
- bl FUN_02028954
+ bl CanGiveCoins
strh r0, [r4, #0x0]
mov r0, #0x0
pop {r4-r6, pc}
diff --git a/arm9/asm/unk_02028910.s b/arm9/asm/unk_02028910.s
deleted file mode 100644
index 7dd124e0..00000000
--- a/arm9/asm/unk_02028910.s
+++ /dev/null
@@ -1,81 +0,0 @@
- .include "asm/macros.inc"
- .include "global.inc"
-
- .text
-
- thumb_func_start FUN_02028910
-FUN_02028910: ; 0x02028910
- mov r1, #0x0
- strh r1, [r0, #0x0]
- bx lr
- .balign 4
-
- thumb_func_start FUN_02028918
-FUN_02028918: ; 0x02028918
- push {r3-r5, lr}
- add r5, r0, #0x0
- ldr r0, _0202892C ; =0x0000C350
- add r4, r1, #0x0
- cmp r4, r0
- bls _02028928
- bl ErrorHandling
-_02028928:
- strh r4, [r5, #0x0]
- pop {r3-r5, pc}
- .balign 4
-_0202892C: .word 0x0000C350
-
- thumb_func_start FUN_02028930
-FUN_02028930: ; 0x02028930
- ldrh r0, [r0, #0x0]
- bx lr
-
- thumb_func_start FUN_02028934
-FUN_02028934: ; 0x02028934
- ldrh r3, [r0, #0x0]
- ldr r2, _02028950 ; =0x0000C350
- cmp r3, r2
- blo _02028940
- mov r0, #0x0
- bx lr
-_02028940:
- add r1, r3, r1
- strh r1, [r0, #0x0]
- ldrh r1, [r0, #0x0]
- cmp r1, r2
- bls _0202894C
- strh r2, [r0, #0x0]
-_0202894C:
- mov r0, #0x1
- bx lr
- .balign 4
-_02028950: .word 0x0000C350
-
- thumb_func_start FUN_02028954
-FUN_02028954: ; 0x02028954
- ldrh r0, [r0, #0x0]
- add r1, r1, r0
- ldr r0, _02028968 ; =0x0000C350
- cmp r1, r0
- bhi _02028962
- mov r0, #0x1
- bx lr
-_02028962:
- mov r0, #0x0
- bx lr
- nop
-_02028968: .word 0x0000C350
-
- thumb_func_start FUN_0202896C
-FUN_0202896C: ; 0x0202896C
- ldrh r2, [r0, #0x0]
- cmp r2, r1
- bhs _02028976
- mov r0, #0x0
- bx lr
-_02028976:
- sub r1, r2, r1
- strh r1, [r0, #0x0]
- mov r0, #0x1
- bx lr
- .balign 4
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index a063db6f..d8ae2ca5 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -2379,7 +2379,7 @@ _02038956:
str r0, [sp, #0x4]
ldr r0, [sp, #0x0]
add r6, r1, #0x0
- bl FUN_02028930
+ bl CheckCoins
str r0, [sp, #0x8]
ldr r0, [r5, #0x4]
ldr r1, [r5, #0x8]
@@ -2397,7 +2397,7 @@ _02038956:
ldr r0, [r4, #0xc]
bl FUN_0202390C
ldr r1, [r5, #0x0]
- bl FUN_02028918
+ bl SetCoins
add r0, r7, #0x0
bl FUN_0205F6C8
ldr r1, [r5, #0x18]
@@ -2435,7 +2435,7 @@ FUN_020389CC: ; 0x020389CC
str r4, [r4, #0xc]
ldr r0, [r5, #0xc]
bl FUN_0202390C
- bl FUN_02028930
+ bl CheckCoins
str r0, [r4, #0x0]
bl FUN_020126FC
str r0, [r4, #0x4]
diff --git a/arm9/asm/unk_0206E2F0.s b/arm9/asm/unk_0206E2F0.s
index 6d87f0fa..87dc3013 100644
--- a/arm9/asm/unk_0206E2F0.s
+++ b/arm9/asm/unk_0206E2F0.s
@@ -128,7 +128,7 @@ FUN_0206E394: ; 0x0206E394
FUN_0206E39C: ; 0x0206E39C
push {r3, lr}
bl FUN_0202390C
- bl FUN_02028930
+ bl CheckCoins
pop {r3, pc}
thumb_func_start FUN_0206E3A8
diff --git a/arm9/global.inc b/arm9/global.inc
index 9da41335..c50189e6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -1588,7 +1588,7 @@
.extern FUN_02024F18
.extern FUN_02024F30
.extern FUN_02024F44
-.extern FUN_02024F50
+.extern Options_init
.extern FUN_02024F9C
.extern FUN_02024FD8
.extern FUN_02024FE0
@@ -1897,12 +1897,12 @@
.extern FUN_02028854
.extern FUN_0202888C
.extern FUN_020288AC
-.extern FUN_02028910
-.extern FUN_02028918
-.extern FUN_02028930
-.extern FUN_02028934
-.extern FUN_02028954
-.extern FUN_0202896C
+.extern InitCoins
+.extern SetCoins
+.extern CheckCoins
+.extern GiveCoins
+.extern CanGiveCoins
+.extern TakeCoins
.extern FUN_02028980
.extern FUN_02028994
.extern FUN_020289A4
diff --git a/arm9/modules/05/asm/mod05_021E1AD8.s b/arm9/modules/05/asm/mod05_021E1AD8.s
index eb8f906e..db4c4e07 100644
--- a/arm9/modules/05/asm/mod05_021E1AD8.s
+++ b/arm9/modules/05/asm/mod05_021E1AD8.s
@@ -1956,7 +1956,7 @@ MOD05_021E29C8: ; 0x021E29C8
str r0, [sp, #0x10]
ldr r0, [r6, #0xc]
bl FUN_0202390C
- bl FUN_02028930
+ bl CheckCoins
add r2, r0, #0
mov r0, #1
str r0, [sp]
diff --git a/arm9/src/coins.c b/arm9/src/coins.c
new file mode 100644
index 00000000..80efb768
--- /dev/null
+++ b/arm9/src/coins.c
@@ -0,0 +1,44 @@
+#include "global.h"
+#include "coins.h"
+
+#pragma thumb on
+
+void InitCoins(u16 * coins)
+{
+ *coins = 0;
+}
+
+void SetCoins(u16 * coins, u16 value)
+{
+ GF_ASSERT(value <= MAX_COINS);
+ *coins = value;
+}
+
+u16 CheckCoins(u16 * coins)
+{
+ return *coins;
+}
+
+BOOL GiveCoins(u16 * coins, u16 amount)
+{
+ if (*coins >= MAX_COINS)
+ return FALSE;
+ *coins += amount;
+ if (*coins > MAX_COINS)
+ *coins = MAX_COINS;
+ return TRUE;
+}
+
+BOOL CanGiveCoins(u16 * coins, u16 amount)
+{
+
+ return (u32)(amount + *coins) <= MAX_COINS;
+}
+
+BOOL TakeCoins(u16 * coins, u16 amount)
+{
+ if (*coins < amount)
+ return FALSE;
+ *coins -= amount;
+ return TRUE;
+}
diff --git a/include/coins.h b/include/coins.h
new file mode 100644
index 00000000..f68d44a0
--- /dev/null
+++ b/include/coins.h
@@ -0,0 +1,13 @@
+#ifndef POKEDIAMOND_COINS_H
+#define POKEDIAMOND_COINS_H
+
+#define MAX_COINS 50000
+
+void InitCoins(u16 * coins);
+void SetCoins(u16 * coins, u16 value);
+u16 CheckCoins(u16 * coins);
+BOOL GiveCoins(u16 * coins, u16 amount);
+BOOL CanGiveCoins(u16 * coins, u16 amount);
+BOOL TakeCoins(u16 * coins, u16 amount);
+
+#endif //POKEDIAMOND_COINS_H
diff --git a/include/options.h b/include/options.h
new file mode 100644
index 00000000..4ed466df
--- /dev/null
+++ b/include/options.h
@@ -0,0 +1,13 @@
+#ifndef POKEDIAMOND_OPTIONS_H
+#define POKEDIAMOND_OPTIONS_H
+
+struct Options {
+ u16 unk0_0:4;
+ u16 unk0_4:2;
+ u16 unk0_6:1;
+ u16 unk0_7:1;
+ u16 unk0_8:2;
+ u16 unk0_A:5;
+};
+
+#endif //POKEDIAMOND_OPTIONS_H
diff --git a/include/player_data.h b/include/player_data.h
new file mode 100644
index 00000000..f051b1ce
--- /dev/null
+++ b/include/player_data.h
@@ -0,0 +1,39 @@
+#ifndef POKEDIAMOND_PLAYER_DATA_H
+#define POKEDIAMOND_PLAYER_DATA_H
+
+#include "options.h"
+
+struct SaveBlock2;
+
+struct PlayerData
+{
+ /* 0x00 */ u16 playerName[OT_NAME_LENGTH + 1];
+ /* 0x10 */ u32 playerId;
+ /* 0x14 */ u32 money;
+ /* 0x18 */ u8 gender;
+ /* 0x19 */ u8 language;
+ /* 0x1A */ u8 badges;
+ /* 0x1B */ u8 avatar;
+ /* 0x1C */ u8 field_1C;
+ /* 0x1D */ u8 field_1D_0:1;
+ u8 field_1D_1:1;
+ u8 field_1D_pad:6;
+ /* 0x1E */ u8 padding_1E[2];
+};
+
+struct PlayerDataSav
+{
+ struct Options options;
+ u8 padding[2];
+ struct PlayerData data;
+ u16 field_24;
+ u16 field_26;
+ u32 field_28;
+};
+
+struct Options * LoadPlayerDataAddress(struct SaveBlock2 *);
+struct String * PlayerData_GetPlayerName_NewString(struct PlayerData *, u32 heap_id);
+u32 PlayerData_GetTrainerID(struct PlayerData *);
+u32 PlayerData_GetTrainerGender(struct PlayerData *);
+
+#endif //POKEDIAMOND_PLAYER_DATA_H
diff --git a/include/save_block_2.h b/include/save_block_2.h
index e969bde7..fe052b1d 100644
--- a/include/save_block_2.h
+++ b/include/save_block_2.h
@@ -2,13 +2,7 @@
#define POKEDIAMOND_SAVE_BLOCK_2_H
#include "MATH_crc.h"
-
-struct Options {
- u16 unk0_0:4;
- u16 unk0_4:2;
- u16 unk0_6:10;
- u8 padding[2]; // TODO: finish me
-};
+#include "player_data.h"
struct SavArrayHeader
{
@@ -19,31 +13,6 @@ struct SavArrayHeader
u16 field_E;
};
-struct PlayerData
-{
- /* 0x00 */ u16 playerName[OT_NAME_LENGTH + 1];
- /* 0x10 */ u32 playerId;
- /* 0x14 */ u32 money;
- /* 0x18 */ u8 gender;
- /* 0x19 */ u8 language;
- /* 0x1A */ u8 badges;
- /* 0x1B */ u8 avatar;
- /* 0x1C */ u8 field_1C;
- /* 0x1D */ u8 field_1D_0:1;
- u8 field_1D_1:1;
- u8 field_1D_pad:6;
- /* 0x1E */ u8 padding_1E[2];
-};
-
-struct PlayerDataSav
-{
- struct Options options;
- struct PlayerData data;
- u16 field_24;
- u16 field_26;
- u32 field_28;
-};
-
struct SaveBlock2_Sub_20464 {
u8 unk_0;
u8 padding[3];
@@ -73,11 +42,6 @@ struct SaveBlock2
// TODO: finish this struct
}; // size: 0x204A8
-struct String * PlayerData_GetPlayerName_NewString(struct PlayerData *, u32 heap_id);
-u32 PlayerData_GetTrainerID(struct PlayerData *);
-u32 PlayerData_GetTrainerGender(struct PlayerData *);
void * SavArray_get(struct SaveBlock2 *, int);
-struct Options * LoadPlayerDataAddress(struct SaveBlock2 *);
-
#endif //POKEDIAMOND_SAVE_BLOCK_2_H