diff options
-rw-r--r-- | arm9/arm9.lsf | 6 | ||||
-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.s | 14 | ||||
-rw-r--r-- | arm9/asm/unk_02028910.s | 81 | ||||
-rw-r--r-- | arm9/asm/unk_020377F0.s | 6 | ||||
-rw-r--r-- | arm9/asm/unk_0206E2F0.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 14 | ||||
-rw-r--r-- | arm9/modules/05/asm/mod05_021E1AD8.s | 2 | ||||
-rw-r--r-- | arm9/src/coins.c | 44 | ||||
-rw-r--r-- | include/coins.h | 13 | ||||
-rw-r--r-- | include/options.h | 13 | ||||
-rw-r--r-- | include/player_data.h | 39 | ||||
-rw-r--r-- | include/save_block_2.h | 38 |
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 |