summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2017-05-07 12:56:19 -0700
committerYamaArashi <shadow962@live.com>2017-05-07 12:56:19 -0700
commit5ac20d9896d1e3d3323311d7181e8c425ae6942a (patch)
treea9a5028e1ce9cf7591d5b3c0d6e6b60b69c68a80
parent68ce0d8bb0369c2e3178241e97bdd5051eac53c9 (diff)
decompile level-up and TM function
-rw-r--r--asm/pokemon_3.s108
-rw-r--r--src/pokemon_3.c36
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;
+ }
+}