summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-26 17:26:38 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-26 17:26:38 -0400
commitca8ea19637e8e1c81358dc2f150d9f89cb6393fb (patch)
tree89b0725fa9065f23ef44fba18a22b9d56e242691 /arm9
parenta192a6ec0bc03443a2fed9f3dba262a034c39828 (diff)
Decompile player_data
Diffstat (limited to 'arm9')
-rw-r--r--arm9/asm/player_data.s364
-rw-r--r--arm9/asm/unk_02025954.s2
-rw-r--r--arm9/asm/unk_0202DB14.s2
-rw-r--r--arm9/asm/unk_020476CC.s2
-rw-r--r--arm9/asm/unk_0204CB20.s6
-rw-r--r--arm9/global.inc4
-rw-r--r--arm9/modules/05/asm/module_05.s2
-rw-r--r--arm9/modules/06/asm/module_06.s6
-rw-r--r--arm9/modules/11/asm/module_11_thumb1.s2
-rw-r--r--arm9/modules/51/asm/module_51.s2
-rw-r--r--arm9/modules/55/asm/module_55.s12
-rw-r--r--arm9/modules/56/asm/module_56.s4
-rw-r--r--arm9/modules/71/asm/module_71.s2
-rw-r--r--arm9/modules/80/asm/module_80.s4
-rw-r--r--arm9/src/player_data.c232
15 files changed, 257 insertions, 389 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;
+}