summaryrefslogtreecommitdiff
path: root/arm9
diff options
context:
space:
mode:
Diffstat (limited to 'arm9')
-rw-r--r--arm9/asm/pokemon_s.s271
-rw-r--r--arm9/asm/scrcmd_12.s2
-rw-r--r--arm9/asm/unk_02023C40.s4
-rw-r--r--arm9/asm/unk_0204A01C.s2
-rw-r--r--arm9/asm/unk_0206F3FC.s2
-rw-r--r--arm9/asm/unk_0207550C.s2
-rw-r--r--arm9/asm/unk_02079C70.s2
-rw-r--r--arm9/asm/unk_02080C38.s2
-rw-r--r--arm9/global.inc6
-rw-r--r--arm9/modules/05/asm/module_05.s8
-rw-r--r--arm9/modules/07/asm/module_07.s2
-rw-r--r--arm9/modules/09/asm/module_09.s2
-rw-r--r--arm9/modules/11/asm/module_11.s14
-rw-r--r--arm9/modules/35/asm/module_35.s2
-rw-r--r--arm9/modules/65/asm/module_65.s2
-rw-r--r--arm9/modules/69/asm/module_69.s2
-rw-r--r--arm9/modules/71/asm/module_71.s2
-rw-r--r--arm9/modules/80/asm/module_80.s2
-rw-r--r--arm9/modules/83/asm/module_83.s4
-rw-r--r--arm9/src/pokemon.c105
20 files changed, 136 insertions, 302 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s
index a2fb59bb..82548f30 100644
--- a/arm9/asm/pokemon_s.s
+++ b/arm9/asm/pokemon_s.s
@@ -21,272 +21,7 @@ __local_str_poketool_personal_pms_narc: ; 0x02105FC8
.extern LoadGrowthTable
.extern GetExpByGrowthRateAndLevel
- thumb_func_start MonApplyFriendshipModEncrypted
-MonApplyFriendshipModEncrypted: ; 0x020688E8
- push {r3-r7, lr}
- sub sp, #0x8
- add r6, r1, #0x0
- add r5, r0, #0x0
- str r2, [sp, #0x0]
- cmp r6, #0x5
- bne _02068900
- bl rand_LC
- mov r1, #0x1
- tst r0, r1
- bne _020689D4
-_02068900:
- add r0, r5, #0x0
- mov r1, #0xad
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r1, r0, #0x10
- beq _020689D4
- ldr r0, _020689D8 ; =SPECIES_EGG
- cmp r1, r0
- beq _020689D4
- add r0, r5, #0x0
- mov r1, #0x6
- mov r2, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r0, r0, #0x10
- mov r1, #0x1
- mov r2, #0x0
- bl FUN_0206E7B8
- lsl r0, r0, #0x18
- mov r4, #0x0
- lsr r7, r0, #0x18
- add r0, r5, #0x0
- mov r1, #0x9
- add r2, r4, #0x0
- bl GetMonData
- add r1, sp, #0x4
- strh r0, [r1, #0x0]
- add r0, r4, #0x0
- ldrsh r1, [r1, r0]
- cmp r1, #0x64
- blt _0206894E
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_0206894E:
- cmp r1, #0xc8
- blt _02068958
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- lsr r4, r0, #0x18
-_02068958:
- lsl r0, r6, #0x1
- add r1, r6, r0
- ldr r0, _020689DC ; =sFriendshipModTable
- add r0, r0, r1
- ldrsb r4, [r4, r0]
- cmp r4, #0x0
- ble _0206897A
- add r0, r5, #0x0
- mov r1, #0x9a
- mov r2, #0x0
- bl GetMonData
- cmp r0, #0xb
- bne _0206897A
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- asr r4, r0, #0x18
-_0206897A:
- cmp r4, #0x0
- ble _02068994
- add r0, r5, #0x0
- mov r1, #0x97
- mov r2, #0x0
- bl GetMonData
- ldr r1, [sp, #0x0]
- cmp r1, r0
- bne _02068994
- add r0, r4, #0x1
- lsl r0, r0, #0x18
- asr r4, r0, #0x18
-_02068994:
- cmp r4, #0x0
- ble _020689AA
- cmp r7, #0x34
- bne _020689AA
- mov r0, #0x96
- mul r0, r4
- mov r1, #0x64
- bl _s32_div_f
- lsl r0, r0, #0x18
- asr r4, r0, #0x18
-_020689AA:
- add r0, sp, #0x4
- mov r1, #0x0
- ldrsh r2, [r0, r1]
- add r2, r2, r4
- strh r2, [r0, #0x0]
- ldrsh r2, [r0, r1]
- cmp r2, #0x0
- bge _020689BC
- strh r1, [r0, #0x0]
-_020689BC:
- add r1, sp, #0x4
- mov r0, #0x0
- ldrsh r0, [r1, r0]
- cmp r0, #0xff
- ble _020689CA
- mov r0, #0xff
- strh r0, [r1, #0x0]
-_020689CA:
- add r0, r5, #0x0
- mov r1, #0x9
- add r2, sp, #0x4
- bl SetMonData
-_020689D4:
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_020689D8: .word SPECIES_EGG
-_020689DC: .word sFriendshipModTable
-
- thumb_func_start GetMonGenderEncrypted
-GetMonGenderEncrypted: ; 0x020689E0
- ldr r3, _020689E4 ; =GetBoxMonGenderEncrypted
- bx r3
- .balign 4
-_020689E4: .word GetBoxMonGenderEncrypted
-
- thumb_func_start GetBoxMonGenderEncrypted
-GetBoxMonGenderEncrypted: ; 0x020689E8
- push {r3-r7, lr}
- add r5, r0, #0x0
- bl AcquireBoxMonLock
- add r6, r0, #0x0
- add r0, r5, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x10
- mov r1, #0x0
- lsr r4, r0, #0x10
- add r0, r5, #0x0
- add r2, r1, #0x0
- bl GetBoxMonData
- add r7, r0, #0x0
- add r0, r5, #0x0
- add r1, r6, #0x0
- bl ReleaseBoxMonLock
- add r0, r4, #0x0
- add r1, r7, #0x0
- bl GetGenderBySpeciesAndPersonality
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start GetGenderBySpeciesAndPersonality
-GetGenderBySpeciesAndPersonality: ; 0x02068A20
- push {r4-r6, lr}
- add r4, r1, #0x0
- add r5, r0, #0x0
- mov r1, #0x0
- bl AllocAndLoadMonPersonal
- add r6, r0, #0x0
- add r1, r5, #0x0
- add r2, r4, #0x0
- bl GetGenderBySpeciesAndPersonality_PreloadedPersonal
- add r4, r0, #0x0
- add r0, r6, #0x0
- bl FreeMonPersonal
- add r0, r4, #0x0
- pop {r4-r6, pc}
- .balign 4
-
- thumb_func_start GetGenderBySpeciesAndPersonality_PreloadedPersonal
-GetGenderBySpeciesAndPersonality_PreloadedPersonal: ; 0x02068A44
- push {r4, lr}
- mov r1, #0x12
- add r4, r2, #0x0
- bl GetPersonalAttr
- lsl r0, r0, #0x18
- lsr r1, r0, #0x18
- beq _02068A5E
- cmp r1, #0xfe
- beq _02068A62
- cmp r1, #0xff
- beq _02068A66
- b _02068A6A
-_02068A5E:
- mov r0, #0x0
- pop {r4, pc}
-_02068A62:
- mov r0, #0x1
- pop {r4, pc}
-_02068A66:
- mov r0, #0x2
- pop {r4, pc}
-_02068A6A:
- lsl r0, r4, #0x18
- lsr r0, r0, #0x18
- cmp r1, r0
- bls _02068A76
- mov r0, #0x1
- b _02068A78
-_02068A76:
- mov r0, #0x0
-_02068A78:
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- pop {r4, pc}
- .balign 4
-
- thumb_func_start MonIsShiny
-MonIsShiny: ; 0x02068A80
- ldr r3, _02068A84 ; =BoxMonIsShiny
- bx r3
- .balign 4
-_02068A84: .word BoxMonIsShiny
-
- thumb_func_start BoxMonIsShiny
-BoxMonIsShiny: ; 0x02068A88
- push {r3-r5, lr}
- mov r1, #0x7
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetBoxMonData
- mov r1, #0x0
- add r4, r0, #0x0
- add r0, r5, #0x0
- add r2, r1, #0x0
- bl GetBoxMonData
- add r1, r0, #0x0
- add r0, r4, #0x0
- bl CalcShininessByOtIdAndPersonality
- pop {r3-r5, pc}
- .balign 4
-
- thumb_func_start CalcShininessByOtIdAndPersonality
-CalcShininessByOtIdAndPersonality: ; 0x02068AAC
- ldr r3, _02068AD4 ; =0xFFFF0000
- lsl r2, r1, #0x10
- and r1, r3
- and r3, r0
- lsl r0, r0, #0x10
- lsr r3, r3, #0x10
- lsr r0, r0, #0x10
- lsr r1, r1, #0x10
- eor r0, r3
- lsr r2, r2, #0x10
- eor r0, r1
- eor r0, r2
- cmp r0, #0x8
- bhs _02068ACC
- mov r0, #0x1
- b _02068ACE
-_02068ACC:
- mov r0, #0x0
-_02068ACE:
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bx lr
- .balign 4
-_02068AD4: .word 0xFFFF0000
+ .extern BoxMonIsShiny
thumb_func_start GenerateShinyPersonality
GenerateShinyPersonality: ; 0x02068AD8
@@ -381,7 +116,7 @@ FUN_02068B70: ; 0x02068B70
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r5, #0x0
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
str r0, [sp, #0x14]
add r0, r5, #0x0
bl BoxMonIsShiny
@@ -754,7 +489,7 @@ FUN_02068E1C: ; 0x02068E1C
lsl r0, r0, #0x10
lsr r4, r0, #0x10
add r0, r5, #0x0
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
mov r1, #0x0
str r0, [sp, #0x4]
add r0, r5, #0x0
diff --git a/arm9/asm/scrcmd_12.s b/arm9/asm/scrcmd_12.s
index a941eb48..3c0ac2f0 100644
--- a/arm9/asm/scrcmd_12.s
+++ b/arm9/asm/scrcmd_12.s
@@ -391,7 +391,7 @@ _02042FE8:
add r0, r4, #0x0
bl FUN_0206A23C
add r0, r4, #0x0
- bl GetMonGenderEncrypted
+ bl GetMonGender
str r0, [sp, #0x30]
add r0, r4, #0x0
mov r1, #0x6f
diff --git a/arm9/asm/unk_02023C40.s b/arm9/asm/unk_02023C40.s
index 480a9e7a..46a01c79 100644
--- a/arm9/asm/unk_02023C40.s
+++ b/arm9/asm/unk_02023C40.s
@@ -1926,7 +1926,7 @@ FUN_0202498C: ; 0x0202498C
bl GetMonData
add r7, r0, #0x0
ldr r0, [sp, #0x0]
- bl GetMonGenderEncrypted
+ bl GetMonGender
add r6, r0, #0x0
ldr r1, [r5, #0x0]
ldr r0, _02024AE4 ; =0xBEEFCAFE
@@ -2113,7 +2113,7 @@ FUN_02024AF0: ; 0x02024AF0
bl GetMonData
str r0, [sp, #0x4]
ldr r0, [sp, #0x0]
- bl GetMonGenderEncrypted
+ bl GetMonGender
add r7, r0, #0x0
ldr r1, [r4, #0x0]
ldr r0, _02024C78 ; =0xBEEFCAFE
diff --git a/arm9/asm/unk_0204A01C.s b/arm9/asm/unk_0204A01C.s
index 2864246e..5ea5d8c5 100644
--- a/arm9/asm/unk_0204A01C.s
+++ b/arm9/asm/unk_0204A01C.s
@@ -378,7 +378,7 @@ _0204A2EA:
add r0, r5, #0x0
mov r1, #0x7
add r6, r6, #0x1
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
_0204A306:
add r7, r7, #0x1
_0204A308:
diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s
index eddf119f..984a657d 100644
--- a/arm9/asm/unk_0206F3FC.s
+++ b/arm9/asm/unk_0206F3FC.s
@@ -1775,7 +1775,7 @@ _0207018E:
ldr r0, _020701FC ; =0x0000070E
add r6, r5, r0
add r0, r7, #0x0
- bl GetMonGenderEncrypted
+ bl GetMonGender
lsl r0, r0, #0x1e
ldrh r2, [r6, r4]
ldr r1, _02070204 ; =0xFFFF9FFF
diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s
index 879b13ea..ca869d5a 100644
--- a/arm9/asm/unk_0207550C.s
+++ b/arm9/asm/unk_0207550C.s
@@ -3121,7 +3121,7 @@ _02076F98:
add r2, r0, #0x0
add r0, r4, #0x0
mov r1, #0x4
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
_02076FA8:
add sp, #0x4
pop {r3-r6, pc}
diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s
index 978c1f6d..8b972fcc 100644
--- a/arm9/asm/unk_02079C70.s
+++ b/arm9/asm/unk_02079C70.s
@@ -1961,7 +1961,7 @@ _0207AC16:
strb r0, [r5, #0x12]
_0207AC1E:
add r0, r6, #0x0
- bl GetMonGenderEncrypted
+ bl GetMonGender
ldrb r1, [r5, #0x13]
mov r2, #0x3
bic r1, r2
diff --git a/arm9/asm/unk_02080C38.s b/arm9/asm/unk_02080C38.s
index 3437cc36..bf8c6901 100644
--- a/arm9/asm/unk_02080C38.s
+++ b/arm9/asm/unk_02080C38.s
@@ -3748,7 +3748,7 @@ _02082820:
lsl r2, r2, #0x10
mov r1, #0x9
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
_0208283A:
add sp, #0xc
pop {r4-r7, pc}
diff --git a/arm9/global.inc b/arm9/global.inc
index e61ae077..c033aa3e 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -4740,9 +4740,9 @@
.extern GetMonNature
.extern GetBoxMonNature
.extern GetNatureFromPersonality
-.extern MonApplyFriendshipModEncrypted
-.extern GetMonGenderEncrypted
-.extern GetBoxMonGenderEncrypted
+.extern MonApplyFriendshipMod
+.extern GetMonGender
+.extern GetBoxMonGender
.extern GetGenderBySpeciesAndPersonality
.extern GetGenderBySpeciesAndPersonality_PreloadedPersonal
.extern MonIsShiny
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s
index 736c4f38..ea4a9191 100644
--- a/arm9/modules/05/asm/module_05.s
+++ b/arm9/modules/05/asm/module_05.s
@@ -3290,7 +3290,7 @@ _021D8FF6:
bl FUN_0206B9B0
mov r1, #5
add r2, r5, #0
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
add r4, r4, #1
cmp r4, r7
blt _021D8FF6
@@ -43564,7 +43564,7 @@ MOD05_021EC8A8: ; 0x021EC8A8
add r5, sp, #4
_021EC8BC:
ldr r0, [r5]
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
cmp r0, #1
bne _021EC8C8
str r4, [sp]
@@ -44316,7 +44316,7 @@ _021ECE56:
b _021ECE8C
_021ECE7A:
ldr r0, [r7, r6]
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
cmp r0, #1
bne _021ECE8C
mov r0, #1
@@ -44377,7 +44377,7 @@ _021ECEDE:
lsl r1, r0, #2
add r0, sp, #4
ldr r0, [r0, r1]
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
cmp r0, #1
beq _021ECF02
ldrb r1, [r5, #1]
diff --git a/arm9/modules/07/asm/module_07.s b/arm9/modules/07/asm/module_07.s
index 116ffbed..5f048017 100644
--- a/arm9/modules/07/asm/module_07.s
+++ b/arm9/modules/07/asm/module_07.s
@@ -3758,7 +3758,7 @@ _02213CEA:
ldr r0, _02213D28 ; =0x00000222
strb r1, [r7, r0]
add r0, r4, #0
- bl GetMonGenderEncrypted
+ bl GetMonGender
ldr r1, _02213D2C ; =0x00000221
strb r0, [r5, r1]
add r0, r4, #0
diff --git a/arm9/modules/09/asm/module_09.s b/arm9/modules/09/asm/module_09.s
index 6312dd4f..26c682ce 100644
--- a/arm9/modules/09/asm/module_09.s
+++ b/arm9/modules/09/asm/module_09.s
@@ -2535,7 +2535,7 @@ _022132C2:
add r6, r0, #0
ldr r0, [r4, #4]
add r6, #0x1b
- bl GetMonGenderEncrypted
+ bl GetMonGender
ldrb r1, [r6, r5]
mov r2, #7
bic r1, r2
diff --git a/arm9/modules/11/asm/module_11.s b/arm9/modules/11/asm/module_11.s
index 2e80cbba..f8a593a1 100644
--- a/arm9/modules/11/asm/module_11.s
+++ b/arm9/modules/11/asm/module_11.s
@@ -2898,7 +2898,7 @@ _0222EE8C:
add r1, r7, #0
lsl r2, r2, #0x10
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
ldr r0, [r4, #0x68]
add r5, r5, #1
bl FUN_0206B9AC
@@ -2920,7 +2920,7 @@ _0222EEBC:
add r1, r7, #0
lsl r2, r2, #0x10
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
ldr r0, [r4, #0x70]
add r5, r5, #1
bl FUN_0206B9AC
@@ -27099,7 +27099,7 @@ _0223AB58:
add r0, r6, #0
mov r1, #0
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
add r0, r6, #0
bl CalcMonStats
ldr r1, [r4, #4]
@@ -31697,7 +31697,7 @@ _0223D148:
add r0, r7, #0
mov r1, #8
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
pop {r3, r4, r5, r6, r7, pc}
_0223D18E:
add r0, r5, #0
@@ -31707,7 +31707,7 @@ _0223D18E:
add r0, r7, #0
mov r1, #6
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
pop {r3, r4, r5, r6, r7, pc}
_0223D1A4:
add r0, r5, #0
@@ -31717,7 +31717,7 @@ _0223D1A4:
add r0, r7, #0
mov r1, #6
lsr r2, r2, #0x10
- bl MonApplyFriendshipModEncrypted
+ bl MonApplyFriendshipMod
_0223D1B8:
pop {r3, r4, r5, r6, r7, pc}
nop
@@ -43613,7 +43613,7 @@ _02242D2E:
add r0, r7, r1
str r0, [sp, #0x1c]
add r0, r4, #0
- bl GetMonGenderEncrypted
+ bl GetMonGender
ldr r1, [sp, #0x1c]
mov r2, #0xf
ldrb r1, [r1, r5]
diff --git a/arm9/modules/35/asm/module_35.s b/arm9/modules/35/asm/module_35.s
index 760c2f64..a07a6426 100644
--- a/arm9/modules/35/asm/module_35.s
+++ b/arm9/modules/35/asm/module_35.s
@@ -349,7 +349,7 @@ _02254A7A:
bl MOD05_021EC7B4
str r0, [r5, #0xc]
add r0, r4, #0
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
str r0, [r5, #0x14]
ldr r1, [sp, #0xc]
add r0, r4, #0
diff --git a/arm9/modules/65/asm/module_65.s b/arm9/modules/65/asm/module_65.s
index c62ef6e6..fa4d0c5b 100644
--- a/arm9/modules/65/asm/module_65.s
+++ b/arm9/modules/65/asm/module_65.s
@@ -3376,7 +3376,7 @@ MOD65_021D8F34: ; 0x021D8F34
strh r0, [r4, #0x34]
ldr r0, [r4, #0x10]
ldr r0, [r0]
- bl GetMonGenderEncrypted
+ bl GetMonGender
add r1, r4, #0
add r1, #0x37
strb r0, [r1]
diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s
index 3199be5d..32eb8847 100644
--- a/arm9/modules/69/asm/module_69.s
+++ b/arm9/modules/69/asm/module_69.s
@@ -2370,7 +2370,7 @@ MOD69_0222E8FC: ; 0x0222E8FC
mov r3, #3
bl FUN_0200AD38
ldr r0, [r4, #0x24]
- bl GetMonGenderEncrypted
+ bl GetMonGender
cmp r0, #0
beq _0222E93C
cmp r0, #1
diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s
index bc13fe8f..e9d79012 100644
--- a/arm9/modules/71/asm/module_71.s
+++ b/arm9/modules/71/asm/module_71.s
@@ -6435,7 +6435,7 @@ MOD71_02230AE4: ; 0x02230AE4
bl FUN_020239CC
add r5, r0, #0
add r0, r4, #0
- bl GetMonGenderEncrypted
+ bl GetMonGender
add r3, r0, #0
mov r0, #0x1a
lsl r1, r5, #0x18
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index ffa44bd8..8b553253 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -16366,7 +16366,7 @@ MOD80_022357A0: ; 0x022357A0
add r2, sp, #4
bl GetMonData
add r0, r4, #0
- bl GetMonGenderEncrypted
+ bl GetMonGender
add r3, r0, #0
mov r0, #0x3e
str r0, [sp]
diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s
index bd2f6d2f..2aa02a59 100644
--- a/arm9/modules/83/asm/module_83.s
+++ b/arm9/modules/83/asm/module_83.s
@@ -22397,7 +22397,7 @@ _02238332:
add r2, sp, #8
bl SetBoxMonData
add r0, r4, #0
- bl GetBoxMonGenderEncrypted
+ bl GetBoxMonGender
str r0, [sp, #8]
add r0, r4, #0
mov r1, #0x6f
@@ -23885,7 +23885,7 @@ MOD83_02238F94: ; 0x02238F94
add r7, r2, #0
add r6, r3, #0
ldr r4, [sp, #0x40]
- bl GetMonGenderEncrypted
+ bl GetMonGender
str r0, [sp, #0x24]
ldr r0, [sp, #0x20]
bl MonIsShiny
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 663b581a..58030ee1 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -10,6 +10,7 @@
#include "string_util.h"
#include "text.h"
#include "constants/abilities.h"
+#include "constants/items.h"
#pragma thumb on
@@ -20,9 +21,13 @@ void SetBoxMonDataInternal(struct BoxPokemon * pokemon, int attr, void * ptr);
void AddMonDataInternal(struct Pokemon * pokemon, int attr, int amount);
void AddBoxMonData(struct BoxPokemon * pokemon, int attr, int amount);
u32 CalcBoxMonExpToNextLevel(struct BoxPokemon * boxmon);
+u16 ModifyStatByNature(u8 nature, u16 statval, u8 statno);
+u8 GetGenderBySpeciesAndPersonality_PreloadedPersonal(struct BaseStats * personal, u16 species, u32 pid);
+u8 BoxMonIsShiny(struct BoxPokemon * boxmon);
+u8 CalcShininessByOtIdAndPersonality(u32 otid, u32 pid);
void LoadMonPersonal(int species, struct BaseStats * personal);
-int ResolveMonForme(int species, int forme);
+int ResolveMonForme(int species, int forme);
void MonEncryptSegment(void * datap, u32 size, u32 key);
void MonDecryptSegment(void * datap, u32 size, u32 key);
u16 MonEncryptionLCRNG(u32 * seed);
@@ -30,7 +35,6 @@ u16 CalcMonChecksum(void * datap, u32 size);
void InitBoxMonMoveset(struct BoxPokemon * boxmon);
PokemonDataBlock * GetSubstruct(struct BoxPokemon * boxmon, u32 personality, u32 which_struct);
void LoadMonBaseStats_HandleAlternateForme(u32 species, u32 forme, struct BaseStats * baseStats);
-u16 ModifyStatByNature(u8 nature, u16 statval, u8 statno);
#define ENCRY_ARGS_PTY(mon) &(mon)->party, sizeof((mon)->party), (mon)->box.pid
#define ENCRY_ARGS_BOX(boxmon) &(boxmon)->substructs, sizeof((boxmon)->substructs), (boxmon)->checksum
@@ -316,7 +320,7 @@ void CreateBoxMon(struct BoxPokemon * boxPokemon, int species, int level, int fi
}
else
SetBoxMonData(boxPokemon, MON_DATA_ABILITY, &exp);
- exp = GetBoxMonGenderEncrypted(boxPokemon);
+ exp = GetBoxMonGender(boxPokemon);
SetBoxMonData(boxPokemon, MON_DATA_GENDER, &exp);
InitBoxMonMoveset(boxPokemon);
ReleaseBoxMonLock(boxPokemon, decry);
@@ -2017,3 +2021,98 @@ u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
}
return retVal;
}
+
+void MonApplyFriendshipMod(struct Pokemon * pokemon, u32 kind, u32 location)
+{
+ u16 species;
+ u8 effect;
+ u8 r4;
+ s16 friendship;
+ s8 mod;
+
+ if (kind == 5 && (rand_LC() & 1))
+ return;
+
+ species = GetMonData(pokemon, MON_DATA_SPECIES2, NULL);
+ if (species == SPECIES_NONE || species == SPECIES_EGG)
+ return;
+
+ effect = FUN_0206E7B8(GetMonData(pokemon, MON_DATA_HELD_ITEM, NULL), 1, 0);
+ r4 = 0;
+ friendship = GetMonData(pokemon, MON_DATA_FRIENDSHIP, NULL);
+ if (friendship >= 100)
+ r4++;
+ if (friendship >= 200)
+ r4++;
+ mod = sFriendshipModTable[kind][r4];
+ if (mod > 0 && GetMonData(pokemon, MON_DATA_POKEBALL, NULL) == ITEM_LUXURY_BALL)
+ mod++;
+ if (mod > 0 && GetMonData(pokemon, MON_DATA_EGG_MET_LOCATION, NULL) == location)
+ mod++;
+ if (mod > 0 && effect == 52) // Soothe Bell effect?
+ mod = mod * 150 / 100;
+ friendship += mod;
+ if (friendship < 0)
+ friendship = 0;
+ if (friendship > 255)
+ friendship = 255;
+ SetMonData(pokemon, MON_DATA_FRIENDSHIP, &friendship);
+}
+
+u8 GetMonGender(struct Pokemon * pokemon)
+{
+ return GetBoxMonGender(&pokemon->box);
+}
+
+u8 GetBoxMonGender(struct BoxPokemon * boxmon)
+{
+ BOOL decry = AcquireBoxMonLock(boxmon);
+ u16 species = GetBoxMonData(boxmon, MON_DATA_SPECIES, NULL);
+ u32 personality = GetBoxMonData(boxmon, MON_DATA_PERSONALITY, NULL);
+ ReleaseBoxMonLock(boxmon, decry);
+ return GetGenderBySpeciesAndPersonality(species, personality);
+}
+
+u8 GetGenderBySpeciesAndPersonality(u16 species, u32 pid)
+{
+ struct BaseStats * personal = AllocAndLoadMonPersonal(species, 0);
+ u8 gender = GetGenderBySpeciesAndPersonality_PreloadedPersonal(personal, species, pid);
+ FreeMonPersonal(personal);
+ return gender;
+}
+
+u8 GetGenderBySpeciesAndPersonality_PreloadedPersonal(struct BaseStats * personal, u16 species, u32 pid)
+{
+ u8 ratio = GetPersonalAttr(personal, BASE_GENDER_RATIO);
+ switch (ratio)
+ {
+ case MON_RATIO_MALE:
+ return MON_MALE;
+ case MON_RATIO_FEMALE:
+ return MON_FEMALE;
+ case MON_RATIO_UNKNOWN:
+ return MON_GENDERLESS;
+ default:
+ if (ratio > (u8)pid)
+ return MON_FEMALE;
+ else
+ return MON_MALE;
+ }
+}
+
+u8 MonIsShiny(struct Pokemon * pokemon)
+{
+ return BoxMonIsShiny(&pokemon->box);
+}
+
+u8 BoxMonIsShiny(struct BoxPokemon * boxmon)
+{
+ u32 otid = GetBoxMonData(boxmon, MON_DATA_OTID, NULL);
+ u32 pid = GetBoxMonData(boxmon, MON_DATA_PERSONALITY, NULL);
+ return CalcShininessByOtIdAndPersonality(otid, pid);
+}
+
+u8 CalcShininessByOtIdAndPersonality(u32 otid, u32 pid)
+{
+ return SHINY_CHECK(otid, pid);
+}