diff options
-rw-r--r-- | arm9/asm/player_data.s | 364 | ||||
-rw-r--r-- | arm9/asm/unk_02025954.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0202DB14.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020476CC.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0204CB20.s | 6 | ||||
-rw-r--r-- | arm9/global.inc | 4 | ||||
-rw-r--r-- | arm9/modules/05/asm/module_05.s | 2 | ||||
-rw-r--r-- | arm9/modules/06/asm/module_06.s | 6 | ||||
-rw-r--r-- | arm9/modules/11/asm/module_11_thumb1.s | 2 | ||||
-rw-r--r-- | arm9/modules/51/asm/module_51.s | 2 | ||||
-rw-r--r-- | arm9/modules/55/asm/module_55.s | 12 | ||||
-rw-r--r-- | arm9/modules/56/asm/module_56.s | 4 | ||||
-rw-r--r-- | arm9/modules/71/asm/module_71.s | 2 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 4 | ||||
-rw-r--r-- | arm9/src/player_data.c | 232 | ||||
-rw-r--r-- | include/options.h | 2 | ||||
-rw-r--r-- | include/player_data.h | 45 |
17 files changed, 297 insertions, 396 deletions
diff --git a/arm9/asm/player_data.s b/arm9/asm/player_data.s deleted file mode 100644 index 9761eb48..00000000 --- a/arm9/asm/player_data.s +++ /dev/null @@ -1,364 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start Sav2_PlayerData_sizeof -Sav2_PlayerData_sizeof: ; 0x020238C4 - mov r0, #0x2c - bx lr - - thumb_func_start Sav2_PlayerData_init -Sav2_PlayerData_init: ; 0x020238C8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0x0 - add r1, r4, #0x0 - mov r2, #0x2c - bl MIi_CpuClearFast - add r0, r4, #0x0 - bl Options_init - add r0, r4, #0x4 - bl PlayerProfile_Clear - add r0, r4, #0x0 - add r0, #0x24 - bl InitCoins - add r4, #0x26 - add r0, r4, #0x0 - bl InitIGT - pop {r4, pc} - - thumb_func_start Sav2_PlayerData_GetProfileAddr -Sav2_PlayerData_GetProfileAddr: ; 0x020238F4 - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, r0, #0x4 - pop {r3, pc} - - thumb_func_start Sav2_PlayerData_GetOptionsAddr -Sav2_PlayerData_GetOptionsAddr: ; 0x02023900 - ldr r3, _02023908 ; =SavArray_get - mov r1, #0x1 - bx r3 - nop -_02023908: .word SavArray_get - - thumb_func_start Sav2_PlayerData_GetCoinsAddr -Sav2_PlayerData_GetCoinsAddr: ; 0x0202390C - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, #0x24 - pop {r3, pc} - - thumb_func_start Sav2_PlayerData_GetIGTAddr -Sav2_PlayerData_GetIGTAddr: ; 0x02023918 - push {r3, lr} - mov r1, #0x1 - bl SavArray_get - add r0, #0x26 - pop {r3, pc} - - thumb_func_start PlayerProfile_sizeof -PlayerProfile_sizeof: ; 0x02023924 - mov r0, #0x20 - bx lr - - thumb_func_start PlayerProfile_init -PlayerProfile_init: ; 0x02023928 - push {r4, lr} - mov r1, #0x20 - bl AllocFromHeap - add r4, r0, #0x0 - bl PlayerProfile_Clear - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start PlayerProfile_Copy -PlayerProfile_Copy: ; 0x0202393C - ldr r3, _02023944 ; =MI_CpuCopy8 - mov r2, #0x20 - bx r3 - nop -_02023944: .word MI_CpuCopy8 - - thumb_func_start PlayerProfile_Clear -PlayerProfile_Clear: ; 0x02023948 - push {r4, lr} - mov r1, #0x0 - mov r2, #0x20 - add r4, r0, #0x0 - bl memset - mov r0, #0x2 - strb r0, [r4, #0x19] - pop {r4, pc} - .balign 4 - - thumb_func_start CopyPlayerName -CopyPlayerName: ; 0x0202395C - push {r3-r5, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl StringLength - cmp r0, #0x8 - blt _02023970 - bl ErrorHandling -_02023970: - add r0, r5, #0x0 - add r1, r4, #0x0 - bl CopyU16StringArray - pop {r3-r5, pc} - .balign 4 - - thumb_func_start PlayerName_StringToFlat -PlayerName_StringToFlat: ; 0x0202397C - ldr r3, _02023988 ; =CopyStringToU16Array - add r2, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - mov r2, #0x8 - bx r3 - .balign 4 -_02023988: .word CopyStringToU16Array - - thumb_func_start PlayerProfile_GetNamePtr -PlayerProfile_GetNamePtr: ; 0x0202398C - bx lr - .balign 4 - - thumb_func_start PlayerName_FlatToString -PlayerName_FlatToString: ; 0x02023990 - ldr r3, _0202399C ; =CopyU16ArrayToString - add r2, r0, #0x0 - add r0, r1, #0x0 - add r1, r2, #0x0 - bx r3 - nop -_0202399C: .word CopyU16ArrayToString - - thumb_func_start PlayerProfile_GetPlayerName_NewString -PlayerProfile_GetPlayerName_NewString: ; 0x020239A0 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r0, #0x8 - bl String_ctor - add r4, r0, #0x0 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl PlayerName_FlatToString - add r0, r4, #0x0 - pop {r3-r5, pc} - - thumb_func_start PlayerProfile_SetTrainerID -PlayerProfile_SetTrainerID: ; 0x020239B8 - str r1, [r0, #0x10] - bx lr - - thumb_func_start PlayerProfile_GetTrainerID -PlayerProfile_GetTrainerID: ; 0x020239BC - ldr r0, [r0, #0x10] - bx lr - - thumb_func_start PlayerProfile_GetTrainerID_VisibleHalf -PlayerProfile_GetTrainerID_VisibleHalf: ; 0x020239C0 - ldr r0, [r0, #0x10] - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr - - thumb_func_start PlayerProfile_SetTrainerGender -PlayerProfile_SetTrainerGender: ; 0x020239C8 - strb r1, [r0, #0x18] - bx lr - - thumb_func_start PlayerProfile_GetTrainerGender -PlayerProfile_GetTrainerGender: ; 0x020239CC - ldrb r0, [r0, #0x18] - bx lr - - thumb_func_start PlayerProfile_TestBadgeFlag -PlayerProfile_TestBadgeFlag: ; 0x020239D0 - ldrb r3, [r0, #0x1a] - mov r0, #0x1 - add r2, r0, #0x0 - lsl r2, r1 - add r1, r3, #0x0 - tst r1, r2 - bne _020239E0 - mov r0, #0x0 -_020239E0: - bx lr - .balign 4 - - thumb_func_start PlayerProfile_SetBadgeFlag -PlayerProfile_SetBadgeFlag: ; 0x020239E4 - ldrb r3, [r0, #0x1a] - mov r2, #0x1 - lsl r2, r1 - add r1, r3, #0x0 - orr r1, r2 - strb r1, [r0, #0x1a] - bx lr - .balign 4 - - thumb_func_start PlayerProfile_CountBadges -PlayerProfile_CountBadges: ; 0x020239F4 - ldrb r3, [r0, #0x1a] - mov r2, #0x0 - cmp r3, #0x0 - beq _02023A0A - mov r0, #0x1 -_020239FE: - add r1, r3, #0x0 - tst r1, r0 - beq _02023A06 - add r2, r2, #0x1 -_02023A06: - lsr r3, r3, #0x1 - bne _020239FE -_02023A0A: - add r0, r2, #0x0 - bx lr - .balign 4 - - thumb_func_start PlayerProfile_GetMoney -PlayerProfile_GetMoney: ; 0x02023A10 - ldr r0, [r0, #0x14] - bx lr - - thumb_func_start PlayerProfile_SetMoney -PlayerProfile_SetMoney: ; 0x02023A14 - ldr r2, _02023A24 ; =0x000F423F - cmp r1, r2 - bls _02023A1C - add r1, r2, #0x0 -_02023A1C: - str r1, [r0, #0x14] - add r0, r1, #0x0 - bx lr - nop -_02023A24: .word 0x000F423F - - thumb_func_start FUN_02023A28 -FUN_02023A28: ; 0x02023A28 - ldrb r0, [r0, #0x1b] - bx lr - - thumb_func_start FUN_02023A2C -FUN_02023A2C: ; 0x02023A2C - strb r1, [r0, #0x1b] - bx lr - - thumb_func_start PlayerProfile_AddMoney -PlayerProfile_AddMoney: ; 0x02023A30 - ldr r2, _02023A50 ; =0x000F423F - cmp r1, r2 - bls _02023A3A - str r2, [r0, #0x14] - b _02023A40 -_02023A3A: - ldr r2, [r0, #0x14] - add r1, r2, r1 - str r1, [r0, #0x14] -_02023A40: - ldr r2, [r0, #0x14] - ldr r1, _02023A50 ; =0x000F423F - cmp r2, r1 - bls _02023A4A - str r1, [r0, #0x14] -_02023A4A: - ldr r0, [r0, #0x14] - bx lr - nop -_02023A50: .word 0x000F423F - - thumb_func_start PlayerProfile_SubMoney -PlayerProfile_SubMoney: ; 0x02023A54 - ldr r2, [r0, #0x14] - cmp r2, r1 - bhs _02023A5E - mov r1, #0x0 - b _02023A60 -_02023A5E: - sub r1, r2, r1 -_02023A60: - str r1, [r0, #0x14] - ldr r0, [r0, #0x14] - bx lr - .balign 4 - - thumb_func_start FUN_02023A68 -FUN_02023A68: ; 0x02023A68 - ldrb r0, [r0, #0x1c] - bx lr - - thumb_func_start FUN_02023A6C -FUN_02023A6C: ; 0x02023A6C - strb r1, [r0, #0x1c] - bx lr - - thumb_func_start FUN_02023A70 -FUN_02023A70: ; 0x02023A70 - ldrb r0, [r0, #0x19] - bx lr - - thumb_func_start FUN_02023A74 -FUN_02023A74: ; 0x02023A74 - strb r1, [r0, #0x19] - bx lr - - thumb_func_start FUN_02023A78 -FUN_02023A78: ; 0x02023A78 - ldrb r2, [r0, #0x1d] - mov r1, #0x1 - bic r2, r1 - mov r1, #0x1 - orr r1, r2 - strb r1, [r0, #0x1d] - bx lr - .balign 4 - - thumb_func_start FUN_02023A88 -FUN_02023A88: ; 0x02023A88 - ldrb r0, [r0, #0x1d] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - bx lr - - thumb_func_start FUN_02023A90 -FUN_02023A90: ; 0x02023A90 - ldrb r2, [r0, #0x1d] - mov r1, #0x2 - orr r1, r2 - strb r1, [r0, #0x1d] - bx lr - .balign 4 - - thumb_func_start FUN_02023A9C -FUN_02023A9C: ; 0x02023A9C - ldrb r0, [r0, #0x1d] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - bx lr - - thumb_func_start PlayerProfile_NameAndOTIDMatchPlayer -PlayerProfile_NameAndOTIDMatchPlayer: ; 0x02023AA4 - push {r3-r5, lr} - mov r2, #0x7 - add r5, r0, #0x0 - add r4, r1, #0x0 - bl StringNotEqualN - cmp r0, #0x0 - bne _02023AC0 - ldr r1, [r5, #0x10] - ldr r0, [r4, #0x10] - cmp r1, r0 - bne _02023AC0 - mov r0, #0x1 - pop {r3-r5, pc} -_02023AC0: - mov r0, #0x0 - pop {r3-r5, pc} diff --git a/arm9/asm/unk_02025954.s b/arm9/asm/unk_02025954.s index bb8ebe4f..51653819 100644 --- a/arm9/asm/unk_02025954.s +++ b/arm9/asm/unk_02025954.s @@ -549,7 +549,7 @@ _02025CE8: cmp r0, #0x0 beq _02025D32 add r0, r1, #0x0 - bl PlayerProfile_init + bl PlayerProfile_new ldr r1, [sp, #0x0] add r6, r0, #0x0 add r1, r7, r1 diff --git a/arm9/asm/unk_0202DB14.s b/arm9/asm/unk_0202DB14.s index a725a6c0..22ffb2e4 100644 --- a/arm9/asm/unk_0202DB14.s +++ b/arm9/asm/unk_0202DB14.s @@ -452,7 +452,7 @@ FUN_0202DE78: ; 0x0202DE78 mov r0, #0xd2 lsl r0, r0, #0x2 ldr r0, [r1, r0] - bl PlayerProfile_Clear + bl PlayerProfile_init ldr r0, _0202DEA0 ; =UNK_021C59E4 mov r2, #0x0 ldr r0, [r0, #0x0] diff --git a/arm9/asm/unk_020476CC.s b/arm9/asm/unk_020476CC.s index 9bf1d22a..0a74196b 100644 --- a/arm9/asm/unk_020476CC.s +++ b/arm9/asm/unk_020476CC.s @@ -85,7 +85,7 @@ _02047748: add r4, r7, #0x0 _0204775C: add r0, r5, #0x0 - bl PlayerProfile_init + bl PlayerProfile_new add r1, r4, #0x0 add r1, #0xf8 add r6, r6, #0x1 diff --git a/arm9/asm/unk_0204CB20.s b/arm9/asm/unk_0204CB20.s index e95b8c81..52fbcfa7 100644 --- a/arm9/asm/unk_0204CB20.s +++ b/arm9/asm/unk_0204CB20.s @@ -4714,7 +4714,7 @@ FUN_0204EEBC: ; 0x0204EEBC beq _0204EF44 mov r0, #0xf lsl r4, r5, #0x2 - bl PlayerProfile_init + bl PlayerProfile_new mov r3, #0x29 ldr r1, _0204EF48 ; =UNK_021C5A68 add r2, r0, #0x0 @@ -6044,7 +6044,7 @@ FUN_0204F930: ; 0x0204F930 pop {r3-r5, pc} _0204F96E: mov r0, #0xf - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0x0 mov r0, #0x14 mov r1, #0xf @@ -6190,7 +6190,7 @@ FUN_0204FA78: ; 0x0204FA78 _0204FA98: mov r0, #0xf lsl r4, r5, #0x2 - bl PlayerProfile_init + bl PlayerProfile_new ldr r2, _0204FAC8 ; =UNK_021C5A68 ldr r1, [r2, #0x0] add r3, r1, r4 diff --git a/arm9/global.inc b/arm9/global.inc index 2416f1b7..a5386482 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -1476,9 +1476,9 @@ .extern Sav2_PlayerData_GetCoinsAddr .extern Sav2_PlayerData_GetIGTAddr .extern PlayerProfile_sizeof -.extern PlayerProfile_init +.extern PlayerProfile_new .extern PlayerProfile_Copy -.extern PlayerProfile_Clear +.extern PlayerProfile_init .extern CopyPlayerName .extern PlayerName_StringToFlat .extern PlayerProfile_GetNamePtr diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index dabce6d4..8ed0618c 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -22038,7 +22038,7 @@ _021F000E: bl FUN_020286EC add r7, r0, #0 mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 add r0, r7, #0 add r1, r4, #0 diff --git a/arm9/modules/06/asm/module_06.s b/arm9/modules/06/asm/module_06.s index fd961cc0..01f04425 100644 --- a/arm9/modules/06/asm/module_06.s +++ b/arm9/modules/06/asm/module_06.s @@ -11448,7 +11448,7 @@ _0223EF28: ldr r1, [r1] str r0, [r1, #0x78] mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new ldr r1, _0223EFF4 ; =0x02252420 ldr r2, [r1] str r0, [r2, #0x7c] @@ -31000,9 +31000,9 @@ _0224886C: bl AllocMonZeroed str r0, [r4, #4] add r0, r5, #0 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [r4, #8] - bl PlayerProfile_Clear + bl PlayerProfile_init add r0, r5, #0 add r1, r6, #4 bl GetInGameTradeMonOrPartnerName diff --git a/arm9/modules/11/asm/module_11_thumb1.s b/arm9/modules/11/asm/module_11_thumb1.s index b5cc45b0..87056e2f 100644 --- a/arm9/modules/11/asm/module_11_thumb1.s +++ b/arm9/modules/11/asm/module_11_thumb1.s @@ -1741,7 +1741,7 @@ MOD11_0222E520: ; 0x0222E520 add r5, r1, #0 _0222E532: mov r0, #5 - bl PlayerProfile_init + bl PlayerProfile_new add r1, r0, #0 add r0, r5, #0 str r1, [r6, #0x48] diff --git a/arm9/modules/51/asm/module_51.s b/arm9/modules/51/asm/module_51.s index c28270a3..72a21ef0 100644 --- a/arm9/modules/51/asm/module_51.s +++ b/arm9/modules/51/asm/module_51.s @@ -1834,7 +1834,7 @@ MOD51_02255690: ; 0x02255690 cmp r0, #0 bne _02255714 mov r0, #4 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [sp, #4] mov r6, #0 _022556AA: diff --git a/arm9/modules/55/asm/module_55.s b/arm9/modules/55/asm/module_55.s index 78542890..eb124639 100644 --- a/arm9/modules/55/asm/module_55.s +++ b/arm9/modules/55/asm/module_55.s @@ -1974,7 +1974,7 @@ MOD55_021D84C8: ; 0x021D84C8 cmp r0, #0 beq _021D8534 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 add r0, r5, #0 add r0, #0xd4 @@ -3314,7 +3314,7 @@ _021D8F1A: add r0, r5, r1 bl FUN_02019220 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new mov r1, #0xf2 lsl r1, r1, #2 ldrb r1, [r5, r1] @@ -3504,7 +3504,7 @@ MOD55_021D90D8: ; 0x021D90D8 orr r0, r1 beq _021D9170 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new mov r1, #0xf2 lsl r1, r1, #2 ldrb r1, [r5, r1] @@ -4166,7 +4166,7 @@ _021D969A: mov r1, #0 bl FUN_02019620 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new str r0, [sp, #0x20] ldr r0, [sp, #0x1c] ldr r1, [sp, #0x18] @@ -4406,7 +4406,7 @@ _021D987C: add r3, r1, #0 bl AddTextPrinterParameterized2 mov r0, #0x34 - bl PlayerProfile_init + bl PlayerProfile_new add r5, r0, #0 ldr r0, [sp, #0x1c] ldr r1, [sp, #0x18] @@ -5204,7 +5204,7 @@ MOD55_021D9F8C: ; 0x021D9F8C add r5, r0, #0 mov r0, #0x34 add r6, r1, #0 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 ldr r0, [r5, #8] bl FUN_020286EC diff --git a/arm9/modules/56/asm/module_56.s b/arm9/modules/56/asm/module_56.s index 48a760dd..755f3092 100644 --- a/arm9/modules/56/asm/module_56.s +++ b/arm9/modules/56/asm/module_56.s @@ -7098,7 +7098,7 @@ _02215532: add r3, r1, #0 bl AddTextPrinterParameterized2 mov r0, #0x36 - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 ldr r0, [r5] add r1, r4, #0 @@ -8431,7 +8431,7 @@ MOD56_022160E4: ; 0x022160E4 cmp r6, r0 beq _0221611C mov r0, #0x36 - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 ldr r0, [r5] add r1, r6, #0 diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index b61bff20..53041f4d 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -4348,7 +4348,7 @@ _0222F9A0: ldr r0, _0222FA24 ; =0x00003670 str r4, [r5, r0] mov r0, #0x1a - bl PlayerProfile_init + bl PlayerProfile_new add r6, r0, #0 ldr r0, _0222FA28 ; =0x00003694 add r1, r4, #0 diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index d45b6251..03973e76 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -17647,9 +17647,9 @@ MOD80_022361AC: ; 0x022361AC push {r3, r4, r5, lr} add r5, r0, #0 mov r0, #0x3e - bl PlayerProfile_init + bl PlayerProfile_new add r4, r0, #0 - bl PlayerProfile_Clear + bl PlayerProfile_init mov r1, #0x43 lsl r1, r1, #2 add r0, r4, #0 diff --git a/arm9/src/player_data.c b/arm9/src/player_data.c new file mode 100644 index 00000000..35daf328 --- /dev/null +++ b/arm9/src/player_data.c @@ -0,0 +1,232 @@ +#include "global.h" +#include "save_block_2.h" +#include "player_data.h" +#include "MI_memory.h" +#include "heap.h" +#include "string16.h" +#include "options.h" +#include "coins.h" + +#pragma thumb on + +void PlayerProfile_init(struct PlayerData * data); + +u32 Sav2_PlayerData_sizeof(void) +{ + return sizeof(struct PlayerDataSav); +} + +void Sav2_PlayerData_init(struct PlayerDataSav * pds) +{ + MI_CpuClearFast(pds, sizeof(struct PlayerDataSav)); + Options_init(&pds->options); + PlayerProfile_init(&pds->data); + InitCoins(&pds->coins); + InitIGT(&pds->igt); +} + +struct PlayerData * Sav2_PlayerData_GetProfileAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->data; +} + +struct Options * Sav2_PlayerData_GetOptionsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->options; +} + +u16 * Sav2_PlayerData_GetCoinsAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->coins; +} + +struct IGT * Sav2_PlayerData_GetIGTAddr(struct SaveBlock2 * sav2) +{ + return &((struct PlayerDataSav *)SavArray_get(sav2, 1))->igt; +} + +u32 PlayerProfile_sizeof(void) +{ + return sizeof(struct PlayerData); +} + +struct PlayerData * PlayerProfile_new(u32 heap_id) +{ + struct PlayerData * ret = (struct PlayerData *)AllocFromHeap(heap_id, sizeof(struct PlayerData)); + PlayerProfile_init(ret); + return ret; +} + +void PlayerProfile_Copy(const struct PlayerData * src, struct PlayerData * dest) +{ + MI_CpuCopy8(src, dest, sizeof(struct PlayerData)); +} + +void PlayerProfile_init(struct PlayerData * data) +{ + memset(data, 0, sizeof(struct PlayerData)); + data->language = LANGUAGE_ENGLISH; +} + +void CopyPlayerName(u16 * dest, struct PlayerData * data) +{ + GF_ASSERT((s32)StringLength(data->playerName) < OT_NAME_LENGTH + 1); + CopyU16StringArray(dest, data->playerName); +} + +void PlayerName_StringToFlat(struct PlayerData * data, struct String * str) +{ + CopyStringToU16Array(str, data->playerName, OT_NAME_LENGTH + 1); +} + +u16 * PlayerProfile_GetNamePtr(struct PlayerData * data) +{ + return data->playerName; +} + +void PlayerName_FlatToString(struct PlayerData * data, struct String * str) +{ + CopyU16ArrayToString(str, data->playerName); +} + +struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData * data, u32 heap_id) +{ + struct String * str = String_ctor(OT_NAME_LENGTH + 1, heap_id); + PlayerName_FlatToString(data, str); + return str; +} + +void PlayerProfile_SetTrainerID(struct PlayerData * data, u32 otid) +{ + data->playerId = otid; +} + +u32 PlayerProfile_GetTrainerID(struct PlayerData * data) +{ + return data->playerId; +} + +u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data) +{ + return (u16)data->playerId; +} + +void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender) +{ + data->gender = gender; +} + +u32 PlayerProfile_GetTrainerGender(struct PlayerData * data) +{ + return data->gender; +} + +BOOL PlayerProfile_TestBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + return (data->badges & (1 << badgeno)) != 0; +} + +void PlayerProfile_SetBadgeFlag(struct PlayerData * data, u32 badgeno) +{ + data->badges |= (1 << badgeno); +} + +u32 PlayerProfile_CountBadges(struct PlayerData * data) +{ + u32 count; + u32 badges; + for (count = 0, badges = data->badges; badges != 0; badges >>= 1) + { + if (badges & 1) + count++; + } + return count; +} + +u32 PlayerProfile_GetMoney(struct PlayerData * data) +{ + return data->money; +} + +u32 PlayerProfile_SetMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + amount = 999999; + data->money = amount; + return amount; +} + +u8 FUN_02023A28(struct PlayerData * data) +{ + return data->avatar; +} + +void FUN_02023A2C(struct PlayerData * data, u8 avatar) +{ + data->avatar = avatar; +} + +u32 PlayerProfile_AddMoney(struct PlayerData * data, u32 amount) +{ + if (amount > 999999) + data->money = 999999; + else + data->money += amount; + if (data->money > 999999) + data->money = 999999; + return data->money; +} + +u32 PlayerProfile_SubMoney(struct PlayerData * data, u32 amount) +{ + if (data->money < amount) + data->money = 0; + else + data->money -= amount; + return data->money; +} + +u8 FUN_02023A68(struct PlayerData * data) +{ + return data->field_1C; +} + +void FUN_02023A6C(struct PlayerData * data, u8 a1) +{ + data->field_1C = a1; +} + +u8 FUN_02023A70(struct PlayerData * data) +{ + return data->language; +} + +void FUN_02023A74(struct PlayerData * data, u8 language) +{ + data->language = language; +} + +void FUN_02023A78(struct PlayerData * data) +{ + data->field_1D_0 = 1; +} + +BOOL FUN_02023A88(struct PlayerData * data) +{ + return data->field_1D_0; +} + +void FUN_02023A90(struct PlayerData * data) +{ + data->field_1D_1 = 1; +} + +BOOL FUN_02023A9C(struct PlayerData * data) +{ + return data->field_1D_1; +} + +BOOL PlayerProfile_NameAndOTIDMatchPlayer(struct PlayerData * a, struct PlayerData * b) +{ + return !StringNotEqualN(a->playerName, b->playerName, OT_NAME_LENGTH) && a->playerId == b->playerId; +} diff --git a/include/options.h b/include/options.h index 4ed466df..5f7a3d3f 100644 --- a/include/options.h +++ b/include/options.h @@ -10,4 +10,6 @@ struct Options { u16 unk0_A:5; }; +void Options_init(struct Options * options); + #endif //POKEDIAMOND_OPTIONS_H diff --git a/include/player_data.h b/include/player_data.h index 3c78de8f..229f3cc4 100644 --- a/include/player_data.h +++ b/include/player_data.h @@ -3,6 +3,7 @@ #include "options.h" #include "igt.h" +#include "string16.h" struct SaveBlock2; @@ -12,7 +13,7 @@ struct PlayerData /* 0x10 */ u32 playerId; /* 0x14 */ u32 money; /* 0x18 */ u8 gender; - /* 0x19 */ u8 country; + /* 0x19 */ u8 language; /* 0x1A */ u8 badges; /* 0x1B */ u8 avatar; /* 0x1C */ u8 field_1C; @@ -32,13 +33,43 @@ struct PlayerDataSav u8 padding2[2]; }; -struct Options * Sav2_PlayerData_GetOptionsAddr(struct SaveBlock2 *); -struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData *, u32 heap_id); -u32 PlayerProfile_GetTrainerID(struct PlayerData *); -u32 PlayerProfile_GetTrainerGender(struct PlayerData *); u32 Sav2_PlayerData_sizeof(void); -void Sav2_PlayerData_init(struct PlayerDataSav *); -u16 * PlayerProfile_GetNamePtr(struct PlayerData * data); +void Sav2_PlayerData_init(struct PlayerDataSav * pds); struct PlayerData * Sav2_PlayerData_GetProfileAddr(struct SaveBlock2 * sav2); +struct Options * Sav2_PlayerData_GetOptionsAddr(struct SaveBlock2 * sav2); +u16 * Sav2_PlayerData_GetCoinsAddr(struct SaveBlock2 * sav2); +struct IGT * Sav2_PlayerData_GetIGTAddr(struct SaveBlock2 * sav2); +u32 PlayerProfile_sizeof(void); +struct PlayerData * PlayerProfile_new(u32 heap_id); +void PlayerProfile_Copy(const struct PlayerData * src, struct PlayerData * dest); +void PlayerProfile_init(struct PlayerData * data); +void CopyPlayerName(u16 * dest, struct PlayerData * data); +void PlayerName_StringToFlat(struct PlayerData * data, struct String * str); +u16 * PlayerProfile_GetNamePtr(struct PlayerData * data); +void PlayerName_FlatToString(struct PlayerData * data, struct String * str); +struct String * PlayerProfile_GetPlayerName_NewString(struct PlayerData * data, u32 heap_id); +void PlayerProfile_SetTrainerID(struct PlayerData * data, u32 otid); +u32 PlayerProfile_GetTrainerID(struct PlayerData * data); +u16 PlayerProfile_GetTrainerID_VisibleHalf(struct PlayerData * data); +void PlayerProfile_SetTrainerGender(struct PlayerData * data, u8 gender); +u32 PlayerProfile_GetTrainerGender(struct PlayerData * data); +BOOL PlayerProfile_TestBadgeFlag(struct PlayerData * data, u32 badgeno); +void PlayerProfile_SetBadgeFlag(struct PlayerData * data, u32 badgeno); +u32 PlayerProfile_CountBadges(struct PlayerData * data); +u32 PlayerProfile_GetMoney(struct PlayerData * data); +u32 PlayerProfile_SetMoney(struct PlayerData * data, u32 amount); +u8 FUN_02023A28(struct PlayerData * data); +void FUN_02023A2C(struct PlayerData * data, u8 avatar); +u32 PlayerProfile_AddMoney(struct PlayerData * data, u32 amount); +u32 PlayerProfile_SubMoney(struct PlayerData * data, u32 amount); +u8 FUN_02023A68(struct PlayerData * data); +void FUN_02023A6C(struct PlayerData * data, u8 a1); +u8 FUN_02023A70(struct PlayerData * data); +void FUN_02023A74(struct PlayerData * data, u8 language); +void FUN_02023A78(struct PlayerData * data); +BOOL FUN_02023A88(struct PlayerData * data); +void FUN_02023A90(struct PlayerData * data); +BOOL FUN_02023A9C(struct PlayerData * data); +BOOL PlayerProfile_NameAndOTIDMatchPlayer(struct PlayerData * a, struct PlayerData * b); #endif //POKEDIAMOND_PLAYER_DATA_H |