summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2017-05-07 21:10:44 -0700
committerYamaArashi <shadow962@live.com>2017-05-07 21:10:44 -0700
commit9c75355d718ab63bbe53fbdf3ab0eb414982a77e (patch)
tree784bdcb70d75559fd424573d2a7cbb7b651ab09b
parent02c44d7f38cb37968de9118e184825083d02c231 (diff)
decompile more pokemon functions
-rw-r--r--asm/battle_3.s2
-rw-r--r--asm/battle_4.s4
-rw-r--r--asm/daycare.s2
-rw-r--r--asm/egg_hatch.s2
-rw-r--r--asm/evolution_scene.s4
-rw-r--r--asm/pokemon_3.s221
-rw-r--r--asm/pokemon_storage_system.s2
-rw-r--r--data/pokemon.s18
-rw-r--r--include/pokemon.h2
-rw-r--r--src/pokemon_2.c2
-rw-r--r--src/pokemon_3.c79
11 files changed, 98 insertions, 240 deletions
diff --git a/asm/battle_3.s b/asm/battle_3.s
index 7805bd722..4252e7222 100644
--- a/asm/battle_3.s
+++ b/asm/battle_3.s
@@ -11669,7 +11669,7 @@ sub_801B928: @ 801B928
adds r2, r5, 0
adds r2, 0x3C
adds r1, r2
- bl sub_8040AD0
+ bl IsOtherTrainer
lsls r0, 24
cmp r0, 0
beq _0801B9DA
diff --git a/asm/battle_4.s b/asm/battle_4.s
index 6b89e2b6a..c1a6513be 100644
--- a/asm/battle_4.s
+++ b/asm/battle_4.s
@@ -8832,7 +8832,7 @@ _080203B8:
muls r0, r1
ldr r1, _08020400 @ =gPlayerParty
adds r0, r1
- bl sub_8040AA4
+ bl IsTradedMon
lsls r0, 24
cmp r0, 0
beq _08020404
@@ -15948,7 +15948,7 @@ _08023CC8:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08023D20
ldr r0, _08023D14 @ =0x0000013f
diff --git a/asm/daycare.s b/asm/daycare.s
index 86beb9ca3..0e8a796d9 100644
--- a/asm/daycare.s
+++ b/asm/daycare.s
@@ -170,7 +170,7 @@ _0804144A:
movs r2, 0x50
bl memcpy
adds r0, r4, 0
- bl pokemon_restore_pp
+ bl BoxMonRestorePP
movs r0, 0x88
lsls r0, 1
add r0, r8
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 83ba28eaa..90ae6aaf7 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -73,7 +73,7 @@ AddHatchedMonToParty: @ 80429EC
movs r1, 0x23
bl SetMonData
adds r0, r5, 0
- bl sub_8040B1C
+ bl MonRestorePP
adds r0, r5, 0
bl CalculateMonStats
add sp, 0x14
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index db324f846..404270195 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -2408,7 +2408,7 @@ _08112DCC:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08112E24
ldr r0, _08112E10 @ =gUnknown_08400F8C
@@ -3701,7 +3701,7 @@ _08113910:
lsls r0, 16
lsrs r4, r0, 16
adds r0, r4, 0
- bl sub_8040A00
+ bl IsHMMove2
cmp r0, 0
beq _08113970
ldr r0, _0811395C @ =gUnknown_08400F8C
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s
index 50d22a1de..b1e3d1d02 100644
--- a/asm/pokemon_3.s
+++ b/asm/pokemon_3.s
@@ -6,227 +6,6 @@
.text
- thumb_func_start sub_8040A00
-sub_8040A00: @ 8040A00
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r2, _08040A24 @ =gUnknown_0820831A
- ldrh r0, [r2]
- ldr r1, _08040A28 @ =0x0000ffff
- cmp r0, r1
- beq _08040A32
- adds r4, r1, 0
- adds r1, r2, 0
-_08040A14:
- ldrh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- cmp r0, r3
- bne _08040A2C
- movs r0, 0x1
- b _08040A34
- .align 2, 0
-_08040A24: .4byte gUnknown_0820831A
-_08040A28: .4byte 0x0000ffff
-_08040A2C:
- ldrh r0, [r1]
- cmp r0, r4
- bne _08040A14
-_08040A32:
- movs r0, 0
-_08040A34:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8040A00
-
- thumb_func_start sub_8040A3C
-sub_8040A3C: @ 8040A3C
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _08040A50 @ =gBaseStats
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x19]
- lsrs r0, 7
- bx lr
- .align 2, 0
-_08040A50: .4byte gBaseStats
- thumb_func_end sub_8040A3C
-
- thumb_func_start sub_8040A54
-sub_8040A54: @ 8040A54
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08040A78 @ =gUnknown_083F7E28
- lsls r1, r0, 2
- adds r1, r0
- adds r1, r4
- adds r1, r2
- movs r0, 0
- ldrsb r0, [r1, r0]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040A78: .4byte gUnknown_083F7E28
- thumb_func_end sub_8040A54
-
- thumb_func_start sub_8040A7C
-sub_8040A7C: @ 8040A7C
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl GetNatureFromPersonality
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08040AA0 @ =gUnknown_083F7E28
- lsls r1, r0, 2
- adds r1, r0
- adds r1, r4
- adds r1, r2
- movs r0, 0
- ldrsb r0, [r1, r0]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08040AA0: .4byte gUnknown_083F7E28
- thumb_func_end sub_8040A7C
-
- thumb_func_start sub_8040AA4
-sub_8040AA4: @ 8040AA4
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- movs r1, 0x7
- mov r2, sp
- bl GetMonData
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0
- bl GetMonData
- mov r1, sp
- bl sub_8040AD0
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8040AA4
-
- thumb_func_start sub_8040AD0
-sub_8040AD0: @ 8040AD0
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r3, _08040B10 @ =gSaveBlock2
- ldrb r2, [r3, 0xA]
- ldrb r1, [r3, 0xB]
- lsls r1, 8
- orrs r2, r1
- ldrb r1, [r3, 0xC]
- lsls r1, 16
- orrs r2, r1
- ldrb r1, [r3, 0xD]
- lsls r1, 24
- orrs r2, r1
- cmp r0, r2
- bne _08040B14
- movs r4, 0
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _08040B0C
- adds r2, r5, 0
-_08040AF8:
- adds r1, r4, r3
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08040B14
- adds r2, 0x1
- adds r4, 0x1
- ldrb r0, [r2]
- cmp r0, 0xFF
- bne _08040AF8
-_08040B0C:
- movs r0, 0
- b _08040B16
- .align 2, 0
-_08040B10: .4byte gSaveBlock2
-_08040B14:
- movs r0, 0x1
-_08040B16:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8040AD0
-
- thumb_func_start sub_8040B1C
-sub_8040B1C: @ 8040B1C
- push {lr}
- bl pokemon_restore_pp
- pop {r0}
- bx r0
- thumb_func_end sub_8040B1C
-
- thumb_func_start pokemon_restore_pp
-pokemon_restore_pp: @ 8040B28
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r6, 0
-_08040B30:
- adds r4, r6, 0
- adds r4, 0xD
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonData
- cmp r0, 0
- beq _08040B7C
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x15
- movs r2, 0
- bl GetBoxMonData
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r2, r6, 24
- lsrs r2, 24
- adds r0, r4, 0
- bl CalculatePPWithBonus
- mov r1, sp
- strb r0, [r1]
- adds r1, r6, 0
- adds r1, 0x11
- adds r0, r5, 0
- mov r2, sp
- bl SetBoxMonData
-_08040B7C:
- adds r6, 0x1
- cmp r6, 0x3
- ble _08040B30
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end pokemon_restore_pp
-
thumb_func_start sub_8040B8C
sub_8040B8C: @ 8040B8C
push {r4,r5,lr}
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s
index bcf005f2f..89f0e2865 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -11660,7 +11660,7 @@ _0809B508:
ldr r0, _0809B540 @ =0x000025b4
adds r4, r0
adds r0, r4, 0
- bl pokemon_restore_pp
+ bl BoxMonRestorePP
ldr r3, _0809B544 @ =gPokemonStorage
lsls r0, r5, 2
adds r0, r5
diff --git a/data/pokemon.s b/data/pokemon.s
index 758e6c77e..cae39c0f2 100644
--- a/data/pokemon.s
+++ b/data/pokemon.s
@@ -115,15 +115,15 @@ gUnknown_082082FE:: @ 82082FE
.byte -5, -5, -10
.align 1
-gUnknown_0820831A:: @ 820831A
- .2byte 0xF
- .2byte 0x13
- .2byte 0x39
- .2byte 0x46
- .2byte 0x94
- .2byte 0xF9
- .2byte 0x7F
- .2byte 0x123
+gHMMoves:: @ 820831A
+ .2byte MOVE_CUT
+ .2byte MOVE_FLY
+ .2byte MOVE_SURF
+ .2byte MOVE_STRENGTH
+ .2byte MOVE_FLASH
+ .2byte MOVE_ROCK_SMASH
+ .2byte MOVE_WATERFALL
+ .2byte MOVE_DIVE
.2byte 0xFFFF
@ "Nidoran♂" Japanese name
diff --git a/include/pokemon.h b/include/pokemon.h
index 3be89c868..cfa71fe77 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -457,7 +457,7 @@ u8 GetNatureFromPersonality(u32 personality);
u16 nature_stat_mod(u8 nature, u16 n, u8 statIndex);
-void sub_8040B1C(void *);
+void MonRestorePP(struct Pokemon *);
u8 *sub_803F378(u16 itemId);
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index 9030fe096..4711eda46 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -1079,7 +1079,7 @@ u8 SendMonToPC(struct Pokemon *mon)
{
if (GetBoxMonData(&gPokemonStorage.boxes[i][j], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
{
- sub_8040B1C(mon);
+ MonRestorePP(mon);
CopyMon(&gPokemonStorage.boxes[i][j], &mon->box, sizeof(mon->box));
return 1;
}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 927580a4e..bbf083a86 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -92,6 +92,8 @@ extern u8 gBattleMonForms[];
extern const u8 BattleText_Wally[];
extern const struct SpritePalette gMonPaletteTable[];
extern const struct SpritePalette gMonShinyPaletteTable[];
+extern const u16 gHMMoves[];
+extern s8 gUnknown_083F7E28[];
extern u8 gUnknown_082082F8[];
extern u8 gUnknown_083FFDB3[];
@@ -1241,3 +1243,80 @@ const struct SpritePalette *sub_80409C8(u16 species, u32 otId , u32 personality)
else
return &gMonPaletteTable[species];
}
+
+bool8 IsHMMove2(u16 move)
+{
+ int i = 0;
+ while (gHMMoves[i] != 0xFFFF)
+ {
+ if (gHMMoves[i++] == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_8040A3C(u16 species)
+{
+ return gBaseStats[species].bodyColor >> 7; // XXX: should this be a bitfield instead?
+}
+
+s8 sub_8040A54(struct Pokemon *mon, u8 a2)
+{
+ u8 nature = GetNature(mon);
+ return gUnknown_083F7E28[nature * 5 + a2];
+}
+
+s8 sub_8040A7C(u32 personality, u8 a2)
+{
+ u8 nature = GetNatureFromPersonality(personality);
+ return gUnknown_083F7E28[nature * 5 + a2];
+}
+
+bool8 IsOtherTrainer(u32, u8 *);
+
+bool8 IsTradedMon(struct Pokemon *mon)
+{
+ u8 otName[8];
+ u32 otId;
+ GetMonData(mon, MON_DATA_OT_NAME, otName);
+ otId = GetMonData(mon, MON_DATA_OT_ID, 0);
+ return IsOtherTrainer(otId, otName);
+}
+
+bool8 IsOtherTrainer(u32 otId, u8 *otName)
+{
+ if (otId == (gSaveBlock2.playerTrainerId[0] | (gSaveBlock2.playerTrainerId[1] << 8) | (gSaveBlock2.playerTrainerId[2] << 16) | (gSaveBlock2.playerTrainerId[3] << 24)))
+ {
+ int i;
+
+ for (i = 0; otName[i] != EOS; i++)
+ if (otName[i] != gSaveBlock2.playerName[i])
+ return TRUE;
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void BoxMonRestorePP(struct BoxPokemon *);
+
+void MonRestorePP(struct Pokemon *mon)
+{
+ BoxMonRestorePP(&mon->box);
+}
+
+void BoxMonRestorePP(struct BoxPokemon *boxMon)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0))
+ {
+ u16 move = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, 0);
+ u16 bonus = GetBoxMonData(boxMon, MON_DATA_PP_BONUSES, 0);
+ u8 pp = CalculatePPWithBonus(move, bonus, i);
+ SetBoxMonData(boxMon, MON_DATA_PP1 + i, &pp);
+ }
+ }
+}