diff options
Diffstat (limited to 'arm9')
-rw-r--r-- | arm9/asm/pokemon_s.s | 271 | ||||
-rw-r--r-- | arm9/asm/scrcmd_12.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02023C40.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_0204A01C.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0206F3FC.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0207550C.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02079C70.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02080C38.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 6 | ||||
-rw-r--r-- | arm9/modules/05/asm/module_05.s | 8 | ||||
-rw-r--r-- | arm9/modules/07/asm/module_07.s | 2 | ||||
-rw-r--r-- | arm9/modules/09/asm/module_09.s | 2 | ||||
-rw-r--r-- | arm9/modules/11/asm/module_11.s | 14 | ||||
-rw-r--r-- | arm9/modules/35/asm/module_35.s | 2 | ||||
-rw-r--r-- | arm9/modules/65/asm/module_65.s | 2 | ||||
-rw-r--r-- | arm9/modules/69/asm/module_69.s | 2 | ||||
-rw-r--r-- | arm9/modules/71/asm/module_71.s | 2 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 2 | ||||
-rw-r--r-- | arm9/modules/83/asm/module_83.s | 4 | ||||
-rw-r--r-- | arm9/src/pokemon.c | 105 |
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); +} |