diff options
author | YamaArashi <shadow962@live.com> | 2017-05-07 12:56:19 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2017-05-07 12:56:19 -0700 |
commit | 5ac20d9896d1e3d3323311d7181e8c425ae6942a (patch) | |
tree | a9a5028e1ce9cf7591d5b3c0d6e6b60b69c68a80 | |
parent | 68ce0d8bb0369c2e3178241e97bdd5051eac53c9 (diff) |
decompile level-up and TM function
-rw-r--r-- | asm/pokemon_3.s | 108 | ||||
-rw-r--r-- | src/pokemon_3.c | 36 |
2 files changed, 36 insertions, 108 deletions
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index 897c87ca9..7596de54f 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -6,114 +6,6 @@ .text - thumb_func_start TryIncrementMonLevel -TryIncrementMonLevel: @ 8040300 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r6, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - adds r0, 0x1 - mov r1, sp - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0x19 - movs r2, 0 - bl GetMonData - ldr r5, _08040358 @ =gExperienceTables - mov r1, sp - ldrb r2, [r1] - lsls r2, 2 - ldr r3, _0804035C @ =gBaseStats - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - adds r1, r3 - ldrb r3, [r1, 0x13] - movs r1, 0xCA - lsls r1, 1 - muls r1, r3 - adds r2, r1 - adds r2, r5 - ldr r1, [r2] - cmp r0, r1 - bhi _08040360 - movs r0, 0 - b _0804036C - .align 2, 0 -_08040358: .4byte gExperienceTables -_0804035C: .4byte gBaseStats -_08040360: - adds r0, r6, 0 - movs r1, 0x38 - mov r2, sp - bl SetMonData - movs r0, 0x1 -_0804036C: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end TryIncrementMonLevel - - thumb_func_start CanMonLearnTMHM -CanMonLearnTMHM: @ 8040374 - push {r4,r5,lr} - lsls r1, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - adds r3, r1, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - bne _08040396 - movs r0, 0 - b _080403C2 -_08040396: - cmp r4, 0x1F - bls _080403B4 - adds r0, r4, 0 - subs r0, 0x20 - movs r2, 0x1 - lsls r2, r0 - ldr r0, _080403B0 @ =gTMHMLearnsets - lsls r1, 3 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - ands r0, r2 - b _080403C2 - .align 2, 0 -_080403B0: .4byte gTMHMLearnsets -_080403B4: - movs r1, 0x1 - lsls r1, r5 - ldr r2, _080403C8 @ =gTMHMLearnsets - lsls r0, r3, 3 - adds r0, r2 - ldr r0, [r0] - ands r0, r1 -_080403C2: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080403C8: .4byte gTMHMLearnsets - thumb_func_end CanMonLearnTMHM - thumb_func_start sub_80403CC sub_80403CC: @ 80403CC push {r4-r7,lr} diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 9f13e0e1c..857eb5935 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -82,6 +82,8 @@ extern u16 gTrainerBattleOpponent; extern u16 gBattleTypeFlags; extern struct BaseStats gBaseStats[]; extern u32 gBitTable[]; +extern u32 gExperienceTables[8][101]; +extern u32 gTMHMLearnsets[][2]; extern u8 gUnknown_082082F8[]; extern u8 gUnknown_083FFDB3[]; @@ -977,3 +979,37 @@ void PartySpreadPokerus(struct Pokemon *party) } } } + +bool8 TryIncrementMonLevel(struct Pokemon *mon) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES, 0); + u8 nextLevel = GetMonData(mon, MON_DATA_LEVEL, 0) + 1; + if (GetMonData(mon, MON_DATA_EXP, 0) > gExperienceTables[gBaseStats[species].growthRate][nextLevel]) + { + SetMonData(mon, MON_DATA_LEVEL, &nextLevel); + return TRUE; + } + else + { + return FALSE; + } +} + +u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm) +{ + u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); + if (species == SPECIES_EGG) + { + return 0; + } + else if (tm < 32) + { + u32 mask = 1 << tm; + return gTMHMLearnsets[species][0] & mask; + } + else + { + u32 mask = 1 << (tm - 32); + return gTMHMLearnsets[species][1] & mask; + } +} |