diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-13 13:49:41 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-13 13:49:41 -0400 |
commit | 321da97e6fdd66192484ca9aa60581b69fb3e7a4 (patch) | |
tree | 8d3793df30bb480a9c682846042184d8c83ec1d8 | |
parent | f93a6043eb52c63d1a64a3e9f10c113d4e5acc02 (diff) |
Through ModifyStatByNature
-rw-r--r-- | arm9/asm/pokemon_s.s | 344 | ||||
-rw-r--r-- | arm9/asm/unk_0202B034.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_0206B688.s | 8 | ||||
-rw-r--r-- | arm9/asm/unk_02079C70.s | 4 | ||||
-rw-r--r-- | arm9/asm/unk_020842DC.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 14 | ||||
-rw-r--r-- | arm9/modules/05/asm/module_05.s | 4 | ||||
-rw-r--r-- | arm9/modules/14/asm/module_14.s | 28 | ||||
-rw-r--r-- | arm9/modules/27/asm/module_27.s | 4 | ||||
-rw-r--r-- | arm9/modules/35/asm/module_35.s | 4 | ||||
-rw-r--r-- | arm9/modules/69/asm/module_69.s | 6 | ||||
-rw-r--r-- | arm9/modules/71/asm/module_71.s | 4 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 16 | ||||
-rw-r--r-- | arm9/modules/81/asm/module_81.s | 4 | ||||
-rw-r--r-- | arm9/modules/83/asm/module_83.s | 4 | ||||
-rw-r--r-- | arm9/src/pokemon.c | 172 | ||||
-rw-r--r-- | include/filesystem.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 24 |
18 files changed, 238 insertions, 409 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s index 987aaf06..a2fb59bb 100644 --- a/arm9/asm/pokemon_s.s +++ b/arm9/asm/pokemon_s.s @@ -16,320 +16,10 @@ __local_str_poketool_personal_pms_narc: ; 0x02105FC8 .asciz "poketool/personal/pms.narc" - .section .bss - - .global UNK_021C5AC0 -UNK_021C5AC0: ; 0x021C5AC0 - .space 0x194 - .text - thumb_func_start GetPercentProgressTowardsNextLevel -GetPercentProgressTowardsNextLevel: ; 0x02068698 - push {r3-r7, lr} - add r5, r0, #0x0 - bl TryDecryptMon - str r0, [sp, #0x0] - add r0, r5, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x10 - lsr r6, r0, #0x10 - add r0, r5, #0x0 - mov r1, #0xa0 - mov r2, #0x0 - bl GetMonData - lsl r0, r0, #0x18 - lsr r7, r0, #0x18 - add r0, r6, #0x0 - add r1, r7, #0x0 - bl GetMonExpBySpeciesAndLevel - add r4, r0, #0x0 - add r0, r6, #0x0 - add r1, r7, #0x1 - bl GetMonExpBySpeciesAndLevel - add r6, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - mov r2, #0x0 - bl GetMonData - add r7, r0, #0x0 - ldr r1, [sp, #0x0] - add r0, r5, #0x0 - bl TryEncryptMon - sub r1, r7, r4 - mov r0, #0x64 - mul r0, r1 - sub r1, r6, r4 - bl _u32_div_f - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - pop {r3-r7, pc} - - thumb_func_start CalcMonExpToNextLevelEncrypted -CalcMonExpToNextLevelEncrypted: ; 0x020686F8 - ldr r3, _020686FC ; =CalcBoxMonExpToNextLevelEncrypted - bx r3 - .balign 4 -_020686FC: .word CalcBoxMonExpToNextLevelEncrypted - - thumb_func_start CalcBoxMonExpToNextLevelEncrypted -CalcBoxMonExpToNextLevelEncrypted: ; 0x02068700 - push {r4-r6, lr} - mov r1, #0x5 - mov r2, #0x0 - add r4, r0, #0x0 - bl GetBoxMonData - lsl r0, r0, #0x10 - lsr r6, r0, #0x10 - add r0, r4, #0x0 - bl CalcBoxMonLevelEncrypted - add r0, r0, #0x1 - lsl r0, r0, #0x10 - lsr r5, r0, #0x10 - add r0, r4, #0x0 - mov r1, #0x8 - mov r2, #0x0 - bl GetBoxMonData - add r4, r0, #0x0 - add r0, r6, #0x0 - add r1, r5, #0x0 - bl GetMonExpBySpeciesAndLevel - sub r0, r0, r4 - pop {r4-r6, pc} - - thumb_func_start GetMonBaseExperienceAtCurrentLevel -GetMonBaseExperienceAtCurrentLevel: ; 0x02068734 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xa0 - mov r2, #0x0 - bl GetMonData - add r1, r0, #0x0 - add r0, r4, #0x0 - bl GetMonExpBySpeciesAndLevel - pop {r3-r5, pc} - .balign 4 - - thumb_func_start GetMonExpBySpeciesAndLevel -GetMonExpBySpeciesAndLevel: ; 0x02068758 - push {r4, lr} - add r4, r1, #0x0 - mov r1, #0x15 - bl GetMonBaseStat - add r1, r4, #0x0 - bl GetExpByGrowthRateAndLevel - pop {r4, pc} - .balign 4 - - thumb_func_start LoadGrowthTable -LoadGrowthTable: ; 0x0206876C - push {r3-r5, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - cmp r5, #0x8 - blt _0206877A - bl ErrorHandling -_0206877A: - add r0, r4, #0x0 - mov r1, #0x3 ; NARC_POKETOOL_PERSONAL_GROWTBL - add r2, r5, #0x0 - bl ReadWholeNarcMemberByIdPair - pop {r3-r5, pc} - .balign 4 - - thumb_func_start GetExpByGrowthRateAndLevel -GetExpByGrowthRateAndLevel: ; 0x02068788 - push {r4-r6, lr} - add r6, r0, #0x0 - add r5, r1, #0x0 - cmp r6, #0x8 - blt _02068796 - bl ErrorHandling -_02068796: - cmp r5, #0x65 - ble _0206879E - bl ErrorHandling -_0206879E: - mov r1, #0x65 - mov r0, #0x0 - lsl r1, r1, #0x2 - bl AllocFromHeap - add r4, r0, #0x0 - add r0, r6, #0x0 - add r1, r4, #0x0 - bl LoadGrowthTable - lsl r0, r5, #0x2 - ldr r5, [r4, r0] - add r0, r4, #0x0 - bl FreeToHeap - add r0, r5, #0x0 - pop {r4-r6, pc} - - thumb_func_start CalcMonLevelEncrypted -CalcMonLevelEncrypted: ; 0x020687C0 - ldr r3, _020687C4 ; =CalcBoxMonLevelEncrypted - bx r3 - .balign 4 -_020687C4: .word CalcBoxMonLevelEncrypted - - thumb_func_start CalcBoxMonLevelEncrypted -CalcBoxMonLevelEncrypted: ; 0x020687C8 - push {r3-r7, lr} - add r5, r0, #0x0 - bl TryDecryptBoxMon - add r6, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetBoxMonData - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x8 - mov r2, #0x0 - bl GetBoxMonData - add r7, r0, #0x0 - add r0, r5, #0x0 - add r1, r6, #0x0 - bl TryEncryptBoxMon - lsl r0, r4, #0x10 - lsr r0, r0, #0x10 - add r1, r7, #0x0 - bl CalcLevelBySpeciesAndExp - pop {r3-r7, pc} - .balign 4 - - thumb_func_start CalcLevelBySpeciesAndExp -CalcLevelBySpeciesAndExp: ; 0x02068800 - 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 CalcLevelBySpeciesAndExp_PreloadedPersonal - add r4, r0, #0x0 - add r0, r6, #0x0 - bl FreeMonPersonal - add r0, r4, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start CalcLevelBySpeciesAndExp_PreloadedPersonal -CalcLevelBySpeciesAndExp_PreloadedPersonal: ; 0x02068824 - push {r4, lr} - mov r1, #0x15 - add r4, r2, #0x0 - bl GetPersonalAttr - ldr r1, _0206884C ; =UNK_021C5AC0 - bl LoadGrowthTable - ldr r2, _02068850 ; =UNK_021C5AC0 + 4 - mov r1, #0x1 -_02068838: - ldr r0, [r2, #0x0] - cmp r0, r4 - bhi _02068846 - add r1, r1, #0x1 - add r2, r2, #0x4 - cmp r1, #0x65 - blt _02068838 -_02068846: - sub r0, r1, #0x1 - pop {r4, pc} - nop -_0206884C: .word UNK_021C5AC0 -_02068850: .word UNK_021C5AC0 + 4 - - thumb_func_start GetMonNature -GetMonNature: ; 0x02068854 - ldr r3, _02068858 ; =GetBoxMonNature - bx r3 - .balign 4 -_02068858: .word GetBoxMonNature - - thumb_func_start GetBoxMonNature -GetBoxMonNature: ; 0x0206885C - push {r4-r6, lr} - add r5, r0, #0x0 - bl TryDecryptBoxMon - mov r1, #0x0 - add r4, r0, #0x0 - add r0, r5, #0x0 - add r2, r1, #0x0 - bl GetBoxMonData - add r6, r0, #0x0 - add r0, r5, #0x0 - add r1, r4, #0x0 - bl TryEncryptBoxMon - add r0, r6, #0x0 - bl GetNatureFromPersonality - pop {r4-r6, pc} - .balign 4 - - thumb_func_start GetNatureFromPersonality -GetNatureFromPersonality: ; 0x02068884 - push {r3, lr} - mov r1, #0x19 - bl _u32_div_f - lsl r0, r1, #0x18 - lsr r0, r0, #0x18 - pop {r3, pc} - .balign 4 - - thumb_func_start ApplyNatureModToStat -ApplyNatureModToStat: ; 0x02068894 - push {r3, lr} - cmp r2, #0x1 - blo _0206889E - cmp r2, #0x5 - bls _020688A2 -_0206889E: - add r0, r1, #0x0 - pop {r3, pc} -_020688A2: - lsl r3, r0, #0x2 - add r3, r0, r3 - ldr r0, _020688E4 ; =sNatureStatMods - sub r2, r2, #0x1 - add r0, r0, r3 - ldrsb r2, [r2, r0] - mov r0, #0x0 - mvn r0, r0 - cmp r2, r0 - beq _020688CE - cmp r2, #0x1 - bne _020688E0 - mov r0, #110 - mul r0, r1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - mov r1, #100 - bl _s32_div_f - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - b _020688E0 -_020688CE: - mov r0, #90 - mul r0, r1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - mov r1, #100 - bl _s32_div_f - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 -_020688E0: - add r0, r1, #0x0 - pop {r3, pc} - .balign 4 -_020688E4: .word sNatureStatMods + .extern LoadGrowthTable + .extern GetExpByGrowthRateAndLevel thumb_func_start MonApplyFriendshipModEncrypted MonApplyFriendshipModEncrypted: ; 0x020688E8 @@ -468,7 +158,7 @@ _020689E4: .word GetBoxMonGenderEncrypted GetBoxMonGenderEncrypted: ; 0x020689E8 push {r3-r7, lr} add r5, r0, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock add r6, r0, #0x0 add r0, r5, #0x0 mov r1, #0x5 @@ -483,7 +173,7 @@ GetBoxMonGenderEncrypted: ; 0x020689E8 add r7, r0, #0x0 add r0, r5, #0x0 add r1, r6, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add r0, r4, #0x0 add r1, r7, #0x0 bl GetGenderBySpeciesAndPersonality @@ -682,7 +372,7 @@ FUN_02068B70: ; 0x02068B70 str r0, [sp, #0xc] add r0, r5, #0x0 str r2, [sp, #0x10] - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0x18] add r0, r5, #0x0 mov r1, #0xad @@ -734,7 +424,7 @@ _02068BD8: bl FUN_02068C00 ldr r1, [sp, #0x18] add r0, r5, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x1c pop {r4-r7, pc} nop @@ -2142,7 +1832,7 @@ InitBoxMonMoveset: ; 0x020695F4 bl AllocFromHeap str r0, [sp, #0x0] add r0, r5, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0x4] add r0, r5, #0x0 mov r1, #0x5 @@ -2156,7 +1846,7 @@ InitBoxMonMoveset: ; 0x020695F4 bl GetBoxMonData add r7, r0, #0x0 add r0, r5, #0x0 - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel lsl r0, r0, #0x18 lsr r6, r0, #0x18 ldr r2, [sp, #0x0] @@ -2201,7 +1891,7 @@ _0206967C: bl FreeToHeap ldr r1, [sp, #0x4] add r0, r5, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x8 pop {r3-r7, pc} nop @@ -2225,7 +1915,7 @@ FUN_020696A8: ; 0x020696A8 ldr r1, _02069700 ; =0x0000FFFF add r6, r0, #0x0 str r1, [sp, #0x4] - bl TryDecryptBoxMon + bl AcquireBoxMonLock mov r4, #0x0 str r0, [sp, #0x0] add r7, r4, #0x0 @@ -2258,7 +1948,7 @@ _020696EA: _020696F0: ldr r1, [sp, #0x0] add r0, r6, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r0, [sp, #0x4] add sp, #0x8 pop {r3-r7, pc} @@ -2281,7 +1971,7 @@ FUN_02069718: ; 0x02069718 sub sp, #0x20 add r5, r0, #0x0 str r1, [sp, #0x0] - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0xc] add r0, sp, #0x18 mov r4, #0x0 @@ -2356,7 +2046,7 @@ _0206978A: blt _0206978A ldr r1, [sp, #0xc] add r0, r5, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x20 pop {r3-r7, pc} .balign 4 @@ -3702,7 +3392,7 @@ FUN_0206A1CC: ; 0x0206A1CC push {r3-r7, lr} sub sp, #0x8 add r5, r0, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock add r7, r0, #0x0 add r0, r5, #0x0 mov r1, #0x5 @@ -3746,7 +3436,7 @@ _0206A226: _0206A230: add r0, r5, #0x0 add r1, r7, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x8 pop {r3-r7, pc} @@ -5029,7 +4719,7 @@ FUN_0206AAB4: ; 0x0206AAB4 push {r3-r7, lr} sub sp, #0x8 add r5, r0, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock mov r4, #0x0 str r0, [sp, #0x0] add r7, r4, #0x0 @@ -5059,7 +4749,7 @@ _0206AAF0: blt _0206AAC6 ldr r1, [sp, #0x0] add r0, r5, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x8 pop {r3-r7, pc} .balign 4 diff --git a/arm9/asm/unk_0202B034.s b/arm9/asm/unk_0202B034.s index 9caae8d5..1f26f48a 100644 --- a/arm9/asm/unk_0202B034.s +++ b/arm9/asm/unk_0202B034.s @@ -79,7 +79,7 @@ _0202B0BA: add r1, r7, #0x0 bl FUN_0206B9B0 add r4, r0, #0x0 - bl TryDecryptMon + bl AcquireMonLock str r0, [sp, #0xc] add r0, r4, #0x0 mov r1, #0x4c @@ -162,7 +162,7 @@ _0202B17C: _0202B17E: ldr r1, [sp, #0xc] add r0, r4, #0x0 - bl TryEncryptMon + bl ReleaseMonLock ldr r0, [sp, #0x10] add r7, r7, #0x1 cmp r7, r0 diff --git a/arm9/asm/unk_0206B688.s b/arm9/asm/unk_0206B688.s index dc966ba6..9b6e863e 100644 --- a/arm9/asm/unk_0206B688.s +++ b/arm9/asm/unk_0206B688.s @@ -46,7 +46,7 @@ UNK_020F8074: ; 0x020F8074 FUN_0206B688: ; 0x0206B688 push {r3-r7, lr} add r5, r0, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock add r7, r0, #0x0 add r0, r5, #0x0 mov r1, #0x5 @@ -67,7 +67,7 @@ FUN_0206B688: ; 0x0206B688 add r4, r0, #0x0 add r0, r5, #0x0 add r1, r7, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add r0, r4, #0x0 pop {r3-r7, pc} @@ -289,7 +289,7 @@ _0206B838: .word UNK_020F8074 FUN_0206B83C: ; 0x0206B83C push {r3-r7, lr} add r5, r0, #0x0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock add r4, r0, #0x0 add r0, r5, #0x0 bl FUN_0206B754 @@ -306,7 +306,7 @@ FUN_0206B83C: ; 0x0206B83C str r0, [sp, #0x0] add r0, r5, #0x0 add r1, r4, #0x0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r2, [sp, #0x0] add r0, r7, #0x0 add r1, r6, #0x0 diff --git a/arm9/asm/unk_02079C70.s b/arm9/asm/unk_02079C70.s index b3b27fb5..978c1f6d 100644 --- a/arm9/asm/unk_02079C70.s +++ b/arm9/asm/unk_02079C70.s @@ -1843,7 +1843,7 @@ FUN_0207AB0C: ; 0x0207AB0C add r7, r0, #0x0 add r0, r6, #0x0 add r5, r2, #0x0 - bl TryDecryptMon + bl AcquireMonLock str r0, [sp, #0x4] add r0, r6, #0x0 mov r1, #0x5 @@ -2308,7 +2308,7 @@ _0207AF04: blo _0207AECC ldr r1, [sp, #0x4] add r0, r6, #0x0 - bl TryEncryptMon + bl ReleaseMonLock add sp, #0x8 pop {r3-r7, pc} nop diff --git a/arm9/asm/unk_020842DC.s b/arm9/asm/unk_020842DC.s index f06037c2..fa59f95c 100644 --- a/arm9/asm/unk_020842DC.s +++ b/arm9/asm/unk_020842DC.s @@ -797,7 +797,7 @@ _0208495C: cmp r0, #0x64 bge _020849B2 add r0, r5, #0x0 - bl CalcMonExpToNextLevelEncrypted + bl CalcMonExpToNextLevel add r2, r0, #0x0 add r0, r5, #0x0 mov r1, #0x8 diff --git a/arm9/global.inc b/arm9/global.inc index 21cfb40c..e61ae077 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -4708,10 +4708,10 @@ .extern ZeroBoxMonData
.extern SizeOfStructPokemon
.extern AllocMonZeroed
-.extern TryDecryptMon
-.extern TryEncryptMon
-.extern TryDecryptBoxMon
-.extern TryEncryptBoxMon
+.extern AcquireMonLock
+.extern ReleaseMonLock
+.extern AcquireBoxMonLock
+.extern ReleaseBoxMonLock
.extern CreateMon
.extern CreateMonWithNature
.extern CreateMonWithGenderNatureLetter
@@ -4730,11 +4730,11 @@ .extern GetMonBaseStat_HandleFormeConversion
.extern GetMonBaseStat
.extern GetPercentProgressTowardsNextLevel
-.extern CalcMonExpToNextLevelEncrypted
+.extern CalcMonExpToNextLevel
.extern GetMonBaseExperienceAtCurrentLevel
.extern GetMonExpBySpeciesAndLevel
-.extern CalcMonLevelEncrypted
-.extern CalcBoxMonLevelEncrypted
+.extern CalcMonLevel
+.extern CalcBoxMonLevel
.extern CalcLevelBySpeciesAndExp
.extern CalcLevelBySpeciesAndExp_PreloadedPersonal
.extern GetMonNature
diff --git a/arm9/modules/05/asm/module_05.s b/arm9/modules/05/asm/module_05.s index cb8c25bd..736c4f38 100644 --- a/arm9/modules/05/asm/module_05.s +++ b/arm9/modules/05/asm/module_05.s @@ -43403,7 +43403,7 @@ MOD05_021EC744: ; 0x021EC744 add r2, sp, #0 bl SetBoxMonData add r0, r4, #0 - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel add r4, r0, #0 add r0, r7, #0 bl FreeToHeap @@ -43416,7 +43416,7 @@ MOD05_021EC78C: ; 0x021EC78C add r5, r0, #0 bl FUN_02023C7C add r6, r0, #0 - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel lsl r0, r0, #0x18 lsr r4, r0, #0x18 add r0, r5, #0 diff --git a/arm9/modules/14/asm/module_14.s b/arm9/modules/14/asm/module_14.s index e8b7dfbc..0b764ed1 100644 --- a/arm9/modules/14/asm/module_14.s +++ b/arm9/modules/14/asm/module_14.s @@ -4713,7 +4713,7 @@ _021D9B9E: add r1, r6, #0 bl FUN_0206B9B0 add r4, r0, #0 - bl TryDecryptMon + bl AcquireMonLock add r7, r0, #0 add r0, r4, #0 mov r1, #0xac @@ -4731,7 +4731,7 @@ _021D9B9E: _021D9BD2: add r0, r4, #0 add r1, r7, #0 - bl TryEncryptMon + bl ReleaseMonLock cmp r5, #2 blt _021D9BE4 add sp, #8 @@ -5455,7 +5455,7 @@ MOD14_021DA168: ; 0x021DA168 mov r1, #0 add r5, r0, #0 str r1, [sp, #4] - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp] add r0, r5, #0 mov r1, #0xac @@ -5483,7 +5483,7 @@ _021DA1A2: _021DA1A8: ldr r1, [sp] add r0, r5, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r0, [sp, #4] add sp, #8 pop {r3, r4, r5, r6, r7, pc} @@ -9189,7 +9189,7 @@ MOD14_021DBEAC: ; 0x021DBEAC add r0, r5, #0 add r6, r2, #0 add r4, #0x4c - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp] str r5, [r7, #0x4c] add r0, r5, #0 @@ -9323,7 +9323,7 @@ _021DBFB8: bl FreeMonPersonal ldr r1, [sp] add r0, r5, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock pop {r3, r4, r5, r6, r7, pc} thumb_func_start MOD14_021DBFF4 @@ -9371,7 +9371,7 @@ _021DC034: mov r0, #0x1a lsl r0, r0, #4 ldr r0, [r5, r0] - bl TryDecryptMon + bl AcquireMonLock add r6, r0, #0 mov r0, #0x1a lsl r0, r0, #4 @@ -9489,7 +9489,7 @@ _021DC034: lsl r0, r0, #4 ldr r0, [r5, r0] add r1, r6, #0 - bl TryEncryptMon + bl ReleaseMonLock add r0, r7, #0 add r0, #0xa4 ldrb r0, [r0] @@ -18859,7 +18859,7 @@ MOD14_021E0940: ; 0x021E0940 str r2, [sp, #8] str r3, [sp, #0xc] ldr r4, [sp, #0x64] - bl TryDecryptBoxMon + bl AcquireBoxMonLock lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x10] @@ -18971,7 +18971,7 @@ _021E0A36: bl MOD14_021E0B54 ldr r1, [sp, #0x10] add r0, r6, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x44 pop {r4, r5, r6, r7, pc} .align 2, 0 @@ -18987,7 +18987,7 @@ MOD14_021E0A60: ; 0x021E0A60 str r2, [sp, #8] add r7, r3, #0 ldr r4, [sp, #0x70] - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0x14] add r0, r6, #0 mov r1, #0x4c @@ -19079,7 +19079,7 @@ _021E0B28: bl MOD14_021E0B54 ldr r1, [sp, #0x14] add r0, r6, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x40 pop {r3, r4, r5, r6, r7, pc} nop @@ -21819,7 +21819,7 @@ _021E204A: bl FUN_0206B5E4 add r4, r4, #1 add r5, r0, #0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock lsl r0, r0, #0x18 lsr r0, r0, #0x18 str r0, [sp, #0x1c] @@ -21876,7 +21876,7 @@ _021E20AA: _021E20C8: ldr r1, [sp, #0x1c] add r0, r5, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r0, [sp, #0x24] add r6, r6, #2 add r0, r0, #1 diff --git a/arm9/modules/27/asm/module_27.s b/arm9/modules/27/asm/module_27.s index 58b7d707..ee9a4bd1 100644 --- a/arm9/modules/27/asm/module_27.s +++ b/arm9/modules/27/asm/module_27.s @@ -305,7 +305,7 @@ _02254A62: add r1, r6, #0 bl FUN_0206B9B0 add r4, r0, #0 - bl TryDecryptMon + bl AcquireMonLock add r7, r0, #0 add r0, r4, #0 bl FUN_0206B688 @@ -354,7 +354,7 @@ _02254ABE: strb r0, [r5, #0x13] add r0, r4, #0 add r1, r7, #0 - bl TryEncryptMon + bl ReleaseMonLock ldr r0, [sp] add r6, r6, #1 ldr r0, [r0] diff --git a/arm9/modules/35/asm/module_35.s b/arm9/modules/35/asm/module_35.s index 5ef1d37f..760c2f64 100644 --- a/arm9/modules/35/asm/module_35.s +++ b/arm9/modules/35/asm/module_35.s @@ -330,7 +330,7 @@ _02254A7A: str r0, [sp, #8] bl FUN_02023C7C add r4, r0, #0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0xc] add r0, r4, #0 bl FUN_0206B688 @@ -353,7 +353,7 @@ _02254A7A: str r0, [r5, #0x14] ldr r1, [sp, #0xc] add r0, r4, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r0, [sp] add r7, r7, #1 ldrb r0, [r0] diff --git a/arm9/modules/69/asm/module_69.s b/arm9/modules/69/asm/module_69.s index 2e724605..3199be5d 100644 --- a/arm9/modules/69/asm/module_69.s +++ b/arm9/modules/69/asm/module_69.s @@ -2360,7 +2360,7 @@ MOD69_0222E8FC: ; 0x0222E8FC mov r1, #0 bl FUN_0200AC60 ldr r0, [r4, #0x24] - bl CalcMonLevelEncrypted + bl CalcMonLevel add r2, r0, #0 mov r0, #0 str r0, [sp] @@ -4037,7 +4037,7 @@ MOD69_0222F6C4: ; 0x0222F6C4 add r5, r0, #0 add r0, r4, #0 add r6, r2, #0 - bl TryDecryptMon + bl AcquireMonLock str r0, [sp] add r0, r4, #0 mov r1, #0x79 @@ -4124,7 +4124,7 @@ _0222F778: _0222F77A: ldr r1, [sp] add r0, r4, #0 - bl TryEncryptMon + bl ReleaseMonLock add r0, r5, #0 pop {r3, r4, r5, r6, r7, pc} nop diff --git a/arm9/modules/71/asm/module_71.s b/arm9/modules/71/asm/module_71.s index 3e877d49..bc13fe8f 100644 --- a/arm9/modules/71/asm/module_71.s +++ b/arm9/modules/71/asm/module_71.s @@ -1343,7 +1343,7 @@ MOD71_0222E118: ; 0x0222E118 push {r3, r4, r5, r6, r7, lr} add r5, r0, #0 add r4, r1, #0 - bl TryDecryptMon + bl AcquireMonLock add r7, r0, #0 add r0, r5, #0 mov r1, #0x9a @@ -1382,7 +1382,7 @@ MOD71_0222E118: ; 0x0222E118 add r6, r0, #0 add r0, r5, #0 add r1, r7, #0 - bl TryEncryptMon + bl ReleaseMonLock ldrh r0, [r4] cmp r0, #0 beq _0222E18E diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s index 4762946f..ffa44bd8 100644 --- a/arm9/modules/80/asm/module_80.s +++ b/arm9/modules/80/asm/module_80.s @@ -10777,7 +10777,7 @@ MOD80_02232BD4: ; 0x02232BD4 MOD80_02232C2C: ; 0x02232C2C push {r4, lr} add r4, r1, #0 - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel strb r0, [r4, #3] pop {r4, pc} thumb_func_end MOD80_02232C2C @@ -10832,7 +10832,7 @@ MOD80_02232C88: ; 0x02232C88 add r7, r2, #0 add r6, r3, #0 ldr r4, [sp, #0x40] - bl TryDecryptBoxMon + bl AcquireBoxMonLock add r0, r5, #0 mov r1, #0xab mov r2, #0 @@ -10874,7 +10874,7 @@ MOD80_02232C88: ; 0x02232C88 _02232CF2: add r0, r5, #0 mov r1, #1 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock ldr r0, [sp, #0x1c] cmp r0, #0 beq _02232D60 @@ -11266,7 +11266,7 @@ MOD80_02233018: ; 0x02233018 push {r3, r4, r5, r6, r7, lr} add r7, r0, #0 mov r4, #0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock ldr r5, _02233050 ; =0x02237220 str r0, [sp] add r6, r4, #0 @@ -11282,7 +11282,7 @@ _02233028: blt _02233028 ldr r1, [sp] add r0, r7, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock cmp r4, #0 beq _0223304C mov r0, #1 @@ -11397,7 +11397,7 @@ MOD80_022330E4: ; 0x022330E4 add r0, sp, #0 strb r1, [r0, #2] add r0, r5, #0 - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel add r1, sp, #0 strb r0, [r1, #3] add r0, sp, #0 @@ -11433,7 +11433,7 @@ MOD80_0223311C: ; 0x0223311C add r0, r5, #0 add r0, #0xbc ldr r0, [r0] - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel add r1, sp, #0 strb r0, [r1, #9] add r0, r4, #0 @@ -13381,7 +13381,7 @@ MOD80_022340DC: ; 0x022340DC bl GetBoxMonData add r6, r0, #1 ldr r0, [sp, #0xc] - bl CalcBoxMonLevelEncrypted + bl CalcBoxMonLevel str r0, [sp, #0x10] add r0, r4, #0 mov r1, #0x64 diff --git a/arm9/modules/81/asm/module_81.s b/arm9/modules/81/asm/module_81.s index abe12301..82f5fbd1 100644 --- a/arm9/modules/81/asm/module_81.s +++ b/arm9/modules/81/asm/module_81.s @@ -999,7 +999,7 @@ _0223860E: ldr r4, [r0, #4] _02238610: add r0, r4, #0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock str r0, [sp, #0x20] add r0, sp, #0x34 add r1, r4, #0 @@ -1051,7 +1051,7 @@ _02238648: bl FUN_02017E14 ldr r1, [sp, #0x20] add r0, r4, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add r0, r7, #0 bl FreeToHeap _02238690: diff --git a/arm9/modules/83/asm/module_83.s b/arm9/modules/83/asm/module_83.s index 1dbf90c3..bd2f6d2f 100644 --- a/arm9/modules/83/asm/module_83.s +++ b/arm9/modules/83/asm/module_83.s @@ -21866,7 +21866,7 @@ MOD83_02237F6C: ; 0x02237F6C add r0, r4, #0 bl ZeroBoxMonData add r0, r4, #0 - bl TryDecryptBoxMon + bl AcquireBoxMonLock mov r1, #0 str r0, [sp] add r0, r6, #0 @@ -22580,7 +22580,7 @@ _0223853E: bl SetBoxMonData ldr r1, [sp] add r0, r4, #0 - bl TryEncryptBoxMon + bl ReleaseBoxMonLock add sp, #0x30 pop {r3, r4, r5, r6, r7, pc} nop diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index 02428ff6..663b581a 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -2,6 +2,7 @@ #define IN_POKEMON_C #include "proto.h" #include "pokemon.h" +#include "filesystem.h" #include "heap.h" #include "MI_memory.h" #include "math_util.h" @@ -18,6 +19,7 @@ void SetMonDataInternal(struct Pokemon * pokemon, int attr, void * ptr); 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); void LoadMonPersonal(int species, struct BaseStats * personal); int ResolveMonForme(int species, int forme); @@ -28,7 +30,7 @@ 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); -int ApplyNatureModToStat(u8 nature, u16 statval, u32 statno); +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 @@ -113,7 +115,7 @@ const s8 UNK_020F7F16[][5] = { { 0, 0, 0, 0, 0}, }; -const u8 sNatureStatMods[][5] = { +const s8 sNatureStatMods[][5] = { { 0, 0, 0, 0, 0 }, { 1, -1, 0, 0, 0 }, { 1, 0, -1, 0, 0 }, @@ -166,7 +168,7 @@ struct Pokemon * AllocMonZeroed(u32 heap_id) return pokemon; } -BOOL TryDecryptMon(struct Pokemon * mon) +BOOL AcquireMonLock(struct Pokemon * mon) { BOOL ret = FALSE; @@ -182,7 +184,7 @@ BOOL TryDecryptMon(struct Pokemon * mon) return ret; } -BOOL TryEncryptMon(struct Pokemon * mon, BOOL decrypt_result) +BOOL ReleaseMonLock(struct Pokemon * mon, BOOL decrypt_result) { BOOL ret = FALSE; if (mon->box.party_lock == TRUE && decrypt_result == TRUE) @@ -197,7 +199,7 @@ BOOL TryEncryptMon(struct Pokemon * mon, BOOL decrypt_result) return ret; } -BOOL TryDecryptBoxMon(struct BoxPokemon * mon) +BOOL AcquireBoxMonLock(struct BoxPokemon * mon) { BOOL ret = FALSE; @@ -210,7 +212,7 @@ BOOL TryDecryptBoxMon(struct BoxPokemon * mon) return ret; } -BOOL TryEncryptBoxMon(struct BoxPokemon * mon, BOOL decrypt_result) +BOOL ReleaseBoxMonLock(struct BoxPokemon * mon, BOOL decrypt_result) { BOOL ret = FALSE; if (mon->box_lock == TRUE && decrypt_result == TRUE) @@ -250,7 +252,7 @@ void CreateBoxMon(struct BoxPokemon * boxPokemon, int species, int level, int fi u32 exp; u32 iv; ZeroBoxMonData(boxPokemon); - decry = TryDecryptBoxMon(boxPokemon); + decry = AcquireBoxMonLock(boxPokemon); if (hasFixedPersonality == 0) { fixedPersonality = (rand_LC() | (rand_LC() << 16)); @@ -317,7 +319,7 @@ void CreateBoxMon(struct BoxPokemon * boxPokemon, int species, int level, int fi exp = GetBoxMonGenderEncrypted(boxPokemon); SetBoxMonData(boxPokemon, MON_DATA_GENDER, &exp); InitBoxMonMoveset(boxPokemon); - TryEncryptBoxMon(boxPokemon, decry); + ReleaseBoxMonLock(boxPokemon, decry); } void CreateMonWithNature(struct Pokemon * pokemon, u16 species, u8 level, u8 fixedIv, u8 nature) @@ -381,11 +383,11 @@ void CreateMonWithFixedIVs(struct Pokemon * pokemon, int species, int level, int void CalcMonLevelAndStats(struct Pokemon * pokemon) { - BOOL decry = TryDecryptMon(pokemon); - u32 level = CalcMonLevelEncrypted(pokemon); + BOOL decry = AcquireMonLock(pokemon); + u32 level = CalcMonLevel(pokemon); SetMonData(pokemon, MON_DATA_LEVEL, &level); CalcMonStats(pokemon); - TryEncryptMon(pokemon, decry); + ReleaseMonLock(pokemon, decry); } void CalcMonStats(struct Pokemon * pokemon) @@ -414,7 +416,7 @@ void CalcMonStats(struct Pokemon * pokemon) int newSpeed; int newSpatk; int newSpdef; - BOOL decry = TryDecryptMon(pokemon); + BOOL decry = AcquireMonLock(pokemon); level = (int)GetMonData(pokemon, MON_DATA_LEVEL, NULL); maxHp = (int)GetMonData(pokemon, MON_DATA_MAXHP, NULL); hp = (int)GetMonData(pokemon, MON_DATA_HP, NULL); @@ -445,23 +447,23 @@ void CalcMonStats(struct Pokemon * pokemon) SetMonData(pokemon, MON_DATA_MAXHP, &newMaxHp); newAtk = (baseStats->atk * 2 + atkIv + atkEv / 4) * level / 100 + 5; - newAtk = ApplyNatureModToStat(GetMonNature(pokemon), newAtk, 1); + newAtk = ModifyStatByNature(GetMonNature(pokemon), newAtk, 1); SetMonData(pokemon, MON_DATA_ATK, &newAtk); newDef = (baseStats->def * 2 + defIv + defEv / 4) * level / 100 + 5; - newDef = ApplyNatureModToStat(GetMonNature(pokemon), newDef, 2); + newDef = ModifyStatByNature(GetMonNature(pokemon), newDef, 2); SetMonData(pokemon, MON_DATA_DEF, &newDef); newSpeed = (baseStats->speed * 2 + speedIv + speedEv / 4) * level / 100 + 5; - newSpeed = ApplyNatureModToStat(GetMonNature(pokemon), newSpeed, 3); + newSpeed = ModifyStatByNature(GetMonNature(pokemon), newSpeed, 3); SetMonData(pokemon, MON_DATA_SPEED, &newSpeed); newSpatk = (baseStats->spatk * 2 + spatkIv + spatkEv / 4) * level / 100 + 5; - newSpatk = ApplyNatureModToStat(GetMonNature(pokemon), newSpatk, 4); + newSpatk = ModifyStatByNature(GetMonNature(pokemon), newSpatk, 4); SetMonData(pokemon, MON_DATA_SPATK, &newSpatk); newSpdef = (baseStats->spdef * 2 + spdefIv + spdefEv / 4) * level / 100 + 5; - newSpdef = ApplyNatureModToStat(GetMonNature(pokemon), newSpdef, 5); + newSpdef = ModifyStatByNature(GetMonNature(pokemon), newSpdef, 5); SetMonData(pokemon, MON_DATA_SPDEF, &newSpdef); FreeToHeap(baseStats); @@ -477,7 +479,7 @@ void CalcMonStats(struct Pokemon * pokemon) } if (hp != 0) SetMonData(pokemon, MON_DATA_HP, &hp); - TryEncryptMon(pokemon, decry); + ReleaseMonLock(pokemon, decry); } u32 GetMonData(struct Pokemon * pokemon, int attr, void * dest) @@ -1881,3 +1883,137 @@ int GetMonBaseStat(int species, enum BaseStat attr) FreeMonPersonal(personal); return ret; } + +u8 GetPercentProgressTowardsNextLevel(struct Pokemon * pokemon) +{ + BOOL decry = AcquireMonLock(pokemon); + u16 species = GetMonData(pokemon, MON_DATA_SPECIES, NULL); + u8 level = GetMonData(pokemon, MON_DATA_LEVEL, NULL); + u32 lo = GetMonExpBySpeciesAndLevel(species, level); + u32 hi = GetMonExpBySpeciesAndLevel(species, level + 1); + u32 cur = GetMonData(pokemon, MON_DATA_EXPERIENCE, NULL); + ReleaseMonLock(pokemon, decry); + return 100 * (cur - lo) / (hi - lo); +} + +u32 CalcMonExpToNextLevel(struct Pokemon * pokemon) +{ + return CalcBoxMonExpToNextLevel(&pokemon->box); +} + +u32 CalcBoxMonExpToNextLevel(struct BoxPokemon * boxmon) +{ + u16 species = GetBoxMonData(boxmon, MON_DATA_SPECIES, NULL); + u16 level = CalcBoxMonLevel(boxmon) + 1; + u32 cur = GetBoxMonData(boxmon, MON_DATA_EXPERIENCE, NULL); + u32 hi = GetMonExpBySpeciesAndLevel(species, level); + return hi - cur; +} + +u32 GetMonBaseExperienceAtCurrentLevel(struct Pokemon * pokemon) +{ + int species = GetMonData(pokemon, MON_DATA_SPECIES, NULL); + int level = GetMonData(pokemon, MON_DATA_LEVEL, NULL); + return GetMonExpBySpeciesAndLevel(species, level); +} + +u32 GetMonExpBySpeciesAndLevel(int species, int level) +{ + return GetExpByGrowthRateAndLevel(GetMonBaseStat(species, BASE_GROWTH_RATE), level); +} + +void LoadGrowthTable(int growthRate, u32 * dest) +{ + GF_ASSERT(growthRate < 8); + ReadWholeNarcMemberByIdPair(dest, NARC_POKETOOL_PERSONAL_GROWTBL, growthRate); +} + +u32 GetExpByGrowthRateAndLevel(int growthRate, int level) +{ + u32 * table; + u32 ret; + GF_ASSERT(growthRate < 8); + GF_ASSERT(level <= 101); + table = (u32 *)AllocFromHeap(0, 101 * sizeof(u32)); + LoadGrowthTable(growthRate, table); + ret = table[level]; + FreeToHeap(table); + return ret; +} + +int CalcMonLevel(struct Pokemon * pokemon) +{ + return CalcBoxMonLevel(&pokemon->box); +} + +int CalcBoxMonLevel(struct BoxPokemon * boxmon) +{ + BOOL decry = AcquireBoxMonLock(boxmon); + int species = GetBoxMonData(boxmon, MON_DATA_SPECIES, NULL); + int exp = GetBoxMonData(boxmon, MON_DATA_EXPERIENCE, NULL); + ReleaseBoxMonLock(boxmon, decry); + return CalcLevelBySpeciesAndExp(species, exp); +} + +int CalcLevelBySpeciesAndExp(u16 species, u32 exp) +{ + int level; + struct BaseStats * personal = AllocAndLoadMonPersonal(species, 0); + level = CalcLevelBySpeciesAndExp_PreloadedPersonal(personal, species, exp); + FreeMonPersonal(personal); + return level; +} + +int CalcLevelBySpeciesAndExp_PreloadedPersonal(struct BaseStats * personal, u16 species, u32 exp) +{ + static u32 table[101]; + int i; + LoadGrowthTable(GetPersonalAttr(personal, BASE_GROWTH_RATE), table); + for (i = 1; i < 101; i++) + { + if (table[i] > exp) + break; + } + return i - 1; +} + +u8 GetMonNature(struct Pokemon * pokemon) +{ + return GetBoxMonNature(&pokemon->box); +} + +u8 GetBoxMonNature(struct BoxPokemon * boxmon) +{ + BOOL decry = AcquireBoxMonLock(boxmon); + u32 personality = GetBoxMonData(boxmon, MON_DATA_PERSONALITY, NULL); + ReleaseBoxMonLock(boxmon, decry); + return GetNatureFromPersonality(personality); +} + +u8 GetNatureFromPersonality(u32 pid) +{ + return pid % 25; +} + +u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) +{ + u16 retVal; + + // Dont modify HP, Accuracy, or Evasion by nature + if (statIndex < 1 || statIndex > 5) + return n; + + switch (sNatureStatMods[nature][statIndex - 1]) + { + case 1: + retVal = (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast + break; + case -1: + retVal = (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above + break; + default: + retVal = n; + break; + } + return retVal; +} diff --git a/include/filesystem.h b/include/filesystem.h index 37f73bb0..6b5a16d6 100644 --- a/include/filesystem.h +++ b/include/filesystem.h @@ -2,6 +2,7 @@ #define POKEDIAMOND_FILESYSTEM_H #include "nitro/types.h" +#include "FS_file.h" typedef struct NARC { diff --git a/include/pokemon.h b/include/pokemon.h index b7642f74..3e277ee1 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -471,10 +471,10 @@ void ZeroMonData(struct Pokemon * pokemon); void ZeroBoxMonData(struct BoxPokemon * boxmon); u32 SizeOfStructPokemon(void); struct Pokemon * AllocMonZeroed(u32 heap_id); -BOOL TryDecryptMon(struct Pokemon * mon); -BOOL TryEncryptMon(struct Pokemon * mon, BOOL decrypt_result); -BOOL TryDecryptBoxMon(struct BoxPokemon * mon); -BOOL TryEncryptBoxMon(struct BoxPokemon * mon, BOOL decrypt_result); +BOOL AcquireMonLock(struct Pokemon * mon); +BOOL ReleaseMonLock(struct Pokemon * mon, BOOL decrypt_result); +BOOL AcquireBoxMonLock(struct BoxPokemon * mon); +BOOL ReleaseBoxMonLock(struct BoxPokemon * mon, BOOL decrypt_result); void CreateMon(struct Pokemon * pokemon, int species, int level, int fixedIV, int hasFixedPersonality, int fixedPersonality, int otIdType, int fixedOtId); void CreateBoxMon(struct BoxPokemon * boxPokemon, int species, int level, int fixedIV, int hasFixedPersonality, int fixedPersonality, int otIdType, int fixedOtId); void CreateMonWithNature(struct Pokemon * pokemon, u16 species, u8 level, u8 fixedIv, u8 nature); @@ -494,18 +494,20 @@ void SetMonData(struct Pokemon * pokemon, int attr, void * ptr); void SetBoxMonData(struct BoxPokemon * pokemon, int attr, void * ptr); void AddMonData(struct Pokemon * pokemon, int attr, int amount); struct BaseStats * AllocAndLoadMonPersonal(int species, u32 heap_id); +int GetMonBaseStat_HandleFormeConversion(int species, int form, enum BaseStat stat_id); +int GetMonBaseStat(int species, enum BaseStat stat_id); +u32 GetMonExpBySpeciesAndLevel(int species, int level); +void LoadGrowthTable(int growthRate, u32 * table); +u32 GetExpByGrowthRateAndLevel(int rate, int level); +int CalcMonLevel(struct Pokemon * pokemon); +int CalcBoxMonLevel(struct BoxPokemon * boxmon); +int CalcLevelBySpeciesAndExp(u16 species, u32 experience); +int CalcLevelBySpeciesAndExp_PreloadedPersonal(struct BaseStats * personal, u16 species, u32 experience); -u32 CalcMonLevelEncrypted(struct Pokemon * pokemon); u8 GetBoxMonNature(struct BoxPokemon * boxmon); u8 GetMonNature(struct Pokemon * mon); u8 GetNatureFromPersonality(u32 pid); u8 GetGenderBySpeciesAndPersonality(u16 species, u32 pid); u32 GetBoxMonGenderEncrypted(struct BoxPokemon * boxmon); -int GetMonBaseStat_HandleFormeConversion(int species, int form, enum BaseStat stat_id); -int GetMonBaseStat(int species, enum BaseStat stat_id); -u32 GetMonExpBySpeciesAndLevel(int species, int level); -void LoadGrowthTable(int species, int * table); -int GetExpByGrowthRateAndLevel(int rate, int level); -int CalcLevelBySpeciesAndExp(int species, int experience); #endif //POKEDIAMOND_POKEMON_H |