summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-06-13 21:04:04 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-06-13 21:04:04 -0400
commitc5eb6d2669cdb27cc9f5ad35fae73577edf8aac6 (patch)
tree72d1a0e4b7c13179def0d1ad9bade7406401a748
parentd716e7b851b9949689985eedb24dfa2bc8619496 (diff)
through FUN_020690E8
-rw-r--r--arm9/asm/pokemon_s.s173
-rw-r--r--arm9/asm/unk_020377F0.s2
-rw-r--r--arm9/asm/unk_0206F3FC.s2
-rw-r--r--arm9/asm/unk_02072548.s2
-rw-r--r--arm9/asm/unk_0207550C.s2
-rw-r--r--arm9/asm/unk_020842DC.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/modules/11/asm/module_11.s2
-rw-r--r--arm9/modules/80/asm/module_80.s4
-rw-r--r--arm9/src/pokemon.c86
-rw-r--r--include/pokemon.h21
-rw-r--r--include/proto.h3
12 files changed, 118 insertions, 183 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s
index 7cd8fca4..706b19f4 100644
--- a/arm9/asm/pokemon_s.s
+++ b/arm9/asm/pokemon_s.s
@@ -23,177 +23,8 @@ __local_str_poketool_personal_pms_narc: ; 0x02105FC8
.extern BoxMonIsShiny
- thumb_func_start FUN_02069038
-FUN_02069038: ; 0x02069038
- push {r3-r7, lr}
- sub sp, #0x28
- add r4, r0, #0x0
- add r6, r2, #0x0
- add r5, r3, #0x0
- mov r3, #0x1c
- add r0, sp, #0x8
- add r7, r1, #0x0
- str r3, [sp, #0x0]
- add r0, #0x2
- mov r1, #0x72 ; NARC_POKETOOL_POKEANM_POKEANM
- mov r2, #0x0
- mul r3, r6
- bl ReadFromNarcMemberByIdPair
- cmp r5, #0x2
- bne _0206906C
- add r1, sp, #0x4
- mov r0, #0x6
- ldrsb r0, [r1, r0]
- strh r0, [r1, #0x0]
- ldrb r0, [r1, #0x7]
- strh r0, [r1, #0x2]
- ldr r0, [sp, #0x44]
- strb r0, [r1, #0x4]
- b _02069096
-_0206906C:
- ldr r0, [sp, #0x40]
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- bl FUN_02014C3C
- add r5, r0, #0x0
- cmp r5, #0x3
- blt _02069080
- bl ErrorHandling
-_02069080:
- lsl r2, r5, #0x1
- add r0, sp, #0xc
- ldrsb r1, [r0, r2]
- add r0, sp, #0x4
- strh r1, [r0, #0x0]
- add r1, sp, #0xc
- add r1, #0x1
- ldrb r1, [r1, r2]
- strh r1, [r0, #0x2]
- ldr r1, [sp, #0x44]
- strb r1, [r0, #0x4]
-_02069096:
- ldr r3, [sp, #0x48]
- add r0, r4, #0x0
- lsl r3, r3, #0x18
- add r1, r7, #0x0
- add r2, sp, #0x4
- lsr r3, r3, #0x18
- bl FUN_02014C54
- add sp, #0x28
- pop {r3-r7, pc}
- .balign 4
-
- thumb_func_start FUN_020690AC
-FUN_020690AC: ; 0x020690AC
- mov r2, #0x3c
- strh r2, [r0, #0x0]
- lsl r1, r1, #0x1
- strh r1, [r0, #0x2]
- add r1, r1, #0x1
- strh r1, [r0, #0x4]
- mov r1, #0x0
- strh r1, [r0, #0x6]
- strb r1, [r0, #0x8]
- str r1, [r0, #0xc]
- bx lr
- .balign 4
-
- thumb_func_start FUN_020690C4
-FUN_020690C4: ; 0x020690C4
- mov r0, #0xec
- bx lr
-
- thumb_func_start FUN_020690C8
-FUN_020690C8: ; 0x020690C8
- mov r0, #0x88
- bx lr
-
- thumb_func_start FUN_020690CC
-FUN_020690CC: ; 0x020690CC
- ldr r3, _020690D0 ; =FUN_020690D4
- bx r3
- .balign 4
-_020690D0: .word FUN_020690D4
-
- thumb_func_start FUN_020690D4
-FUN_020690D4: ; 0x020690D4
- push {r3, lr}
- mov r1, #0x70
- mov r2, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x18
- lsr r0, r0, #0x18
- pop {r3, pc}
-
- thumb_func_start FUN_020690E4
-FUN_020690E4: ; 0x020690E4
- bx lr
- .balign 4
-
- thumb_func_start FUN_020690E8
-FUN_020690E8: ; 0x020690E8
- push {r3-r5, lr}
- sub sp, #0x8
- mov r1, #0x5
- mov r2, #0x0
- add r4, r0, #0x0
- bl GetMonData
- lsl r0, r0, #0x10
- lsr r5, r0, #0x10
- add r0, r4, #0x0
- mov r1, #0xa0
- mov r2, #0x0
- bl GetMonData
- add r1, r0, #0x1
- add r0, sp, #0x0
- strb r1, [r0, #0x0]
- add r0, r4, #0x0
- mov r1, #0x8
- mov r2, #0x0
- bl GetMonData
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- mov r1, #0x15
- bl GetMonBaseStat
- mov r1, #0x64
- add r5, r0, #0x0
- bl GetExpByGrowthRateAndLevel
- ldr r1, [sp, #0x4]
- cmp r1, r0
- bls _02069138
- str r0, [sp, #0x4]
- add r0, r4, #0x0
- mov r1, #0x8
- add r2, sp, #0x4
- bl SetMonData
-_02069138:
- add r0, sp, #0x0
- ldrb r1, [r0, #0x0]
- cmp r1, #0x64
- bls _02069146
- add sp, #0x8
- mov r0, #0x0
- pop {r3-r5, pc}
-_02069146:
- add r0, r5, #0x0
- bl GetExpByGrowthRateAndLevel
- ldr r1, [sp, #0x4]
- cmp r1, r0
- blo _02069162
- add r0, r4, #0x0
- mov r1, #0xa0
- add r2, sp, #0x0
- bl SetMonData
- add sp, #0x8
- mov r0, #0x1
- pop {r3-r5, pc}
-_02069162:
- mov r0, #0x0
- add sp, #0x8
- pop {r3-r5, pc}
-
- thumb_func_start FUN_02069168
-FUN_02069168: ; 0x02069168
+ thumb_func_start GetMonEvolution
+GetMonEvolution: ; 0x02069168
push {r4-r7, lr}
sub sp, #0x44
add r7, r1, #0x0
diff --git a/arm9/asm/unk_020377F0.s b/arm9/asm/unk_020377F0.s
index 0c8fe8c6..3959856b 100644
--- a/arm9/asm/unk_020377F0.s
+++ b/arm9/asm/unk_020377F0.s
@@ -1594,7 +1594,7 @@ _020382F6:
mov r0, #0x0
mov r2, #0x1
lsr r3, r3, #0x10
- bl FUN_02069168
+ bl GetMonEvolution
str r0, [sp, #0x20]
cmp r0, #0x0
beq _02038380
diff --git a/arm9/asm/unk_0206F3FC.s b/arm9/asm/unk_0206F3FC.s
index 984a657d..05ed529d 100644
--- a/arm9/asm/unk_0206F3FC.s
+++ b/arm9/asm/unk_0206F3FC.s
@@ -5436,7 +5436,7 @@ _02071E5A:
str r0, [sp, #0x0]
ldrh r3, [r3, #0x24]
mov r0, #0x0
- bl FUN_02069168
+ bl GetMonEvolution
ldr r1, _02071F1C ; =0x000005A4
ldr r2, [r5, r1]
strh r0, [r2, #0x38]
diff --git a/arm9/asm/unk_02072548.s b/arm9/asm/unk_02072548.s
index 8b491bc6..ca80e1db 100644
--- a/arm9/asm/unk_02072548.s
+++ b/arm9/asm/unk_02072548.s
@@ -1219,7 +1219,7 @@ _02072E98:
ldr r3, [r5, r3]
mov r2, #0x3
ldrh r3, [r3, #0x24]
- bl FUN_02069168
+ bl GetMonEvolution
cmp r0, #0x0
bne _02072ED0
add r0, r5, #0x0
diff --git a/arm9/asm/unk_0207550C.s b/arm9/asm/unk_0207550C.s
index ca869d5a..dfbddd58 100644
--- a/arm9/asm/unk_0207550C.s
+++ b/arm9/asm/unk_0207550C.s
@@ -2260,7 +2260,7 @@ _02076814:
ldr r0, [r1, #0x0]
add r1, r5, #0x0
lsr r3, r3, #0x10
- bl FUN_02069168
+ bl GetMonEvolution
ldr r1, _02076878 ; =0x000005A4
ldr r2, [r4, r1]
strh r0, [r2, #0x38]
diff --git a/arm9/asm/unk_020842DC.s b/arm9/asm/unk_020842DC.s
index fa59f95c..a1b65c4a 100644
--- a/arm9/asm/unk_020842DC.s
+++ b/arm9/asm/unk_020842DC.s
@@ -175,7 +175,7 @@ _0208443A:
ldr r3, [sp, #0x4]
add r1, r6, #0x0
mov r2, #0x3
- bl FUN_02069168
+ bl GetMonEvolution
cmp r0, #0x0
beq _02084464
add r0, r4, #0x0
diff --git a/arm9/global.inc b/arm9/global.inc
index c033aa3e..0dc52bc5 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -4764,7 +4764,7 @@
.extern FUN_020690D4
.extern FUN_020690E4
.extern FUN_020690E8
-.extern FUN_02069168
+.extern GetMonEvolution
.extern ReadFromPersonalPmsNarc
.extern GetEggSpecies
.extern FUN_02069698
diff --git a/arm9/modules/11/asm/module_11.s b/arm9/modules/11/asm/module_11.s
index f8a593a1..2a3e4f64 100644
--- a/arm9/modules/11/asm/module_11.s
+++ b/arm9/modules/11/asm/module_11.s
@@ -6911,7 +6911,7 @@ _02230D9C:
ldr r0, [r5, #4]
mov r2, #0
lsr r3, r3, #0x10
- bl FUN_02069168
+ bl GetMonEvolution
str r0, [sp, #4]
cmp r0, #0
bne _02230DD0
diff --git a/arm9/modules/80/asm/module_80.s b/arm9/modules/80/asm/module_80.s
index 8b553253..52e2cc5f 100644
--- a/arm9/modules/80/asm/module_80.s
+++ b/arm9/modules/80/asm/module_80.s
@@ -17443,7 +17443,7 @@ _02235FDE:
add r1, r7, #0
mov r2, #1
lsr r3, r3, #0x10
- bl FUN_02069168
+ bl GetMonEvolution
str r0, [sp, #0x24]
cmp r0, #0
beq _02236052
@@ -17534,7 +17534,7 @@ _022360B6:
add r1, r7, #0
mov r2, #1
lsr r3, r3, #0x10
- bl FUN_02069168
+ bl GetMonEvolution
str r0, [sp, #0x28]
cmp r0, #0
beq _02236118
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index f6875b10..0a2e160c 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -2388,7 +2388,87 @@ void FUN_02068FE0(struct SomeDrawPokemonStruct * a0, u16 a1, int a2)
void FUN_02069010(void * dest, int a1)
{
- u8 buffer[28];
- ReadFromNarcMemberByIdPair(buffer, NARC_POKETOOL_POKEANM_POKEANM, 0, 28 * a1, 28);
- MI_CpuCopy8(buffer + 8, dest, 20);
+ struct Pokeanm buffer;
+ ReadFromNarcMemberByIdPair(&buffer, NARC_POKETOOL_POKEANM_POKEANM, 0, 28 * a1, 28);
+ MI_CpuCopy8(buffer.unk8, dest, 20);
+}
+
+void FUN_02069038(u32 a0, u32 a1, u32 a2, s32 a3, u32 a4, u32 a5, u32 a6)
+{
+ struct UnkStruct_02069038 sp4;
+ ReadFromNarcMemberByIdPair(&sp4.anim, NARC_POKETOOL_POKEANM_POKEANM, 0, a2 * 28, 28);
+ if (a3 == 2)
+ {
+ sp4.unk0 = sp4.anim.unk0[0].unk0;
+ sp4.unk2 = sp4.anim.unk0[0].unk1;
+ sp4.unk4 = a5;
+ }
+ else
+ {
+ a3 = FUN_02014C3C(a4);
+ GF_ASSERT(a3 < 3);
+ sp4.unk0 = sp4.anim.unk0[a3 + 1].unk0;
+ sp4.unk2 = sp4.anim.unk0[a3 + 1].unk1;
+ sp4.unk4 = a5;
+ }
+ FUN_02014C54(a0, a1, &sp4, a6);
+}
+
+void FUN_020690AC(struct SomeDrawPokemonStruct * a0, u32 a1)
+{
+ a0->unk0 = 60;
+ a0->unk2 = a1 * 2;
+ a0->unk4 = a1 * 2 + 1;
+ a0->unk6 = 0;
+ a0->unk8 = 0;
+ a0->unkC = 0;
+}
+
+u32 FUN_020690C4(void)
+{
+ return sizeof(struct Pokemon);
+}
+
+u32 FUN_020690C8(void)
+{
+ return sizeof(struct BoxPokemon);
+}
+
+u8 FUN_020690D4(struct BoxPokemon * boxmon);
+
+u8 FUN_020690CC(struct Pokemon * pokemon)
+{
+ return FUN_020690D4(&pokemon->box);
+}
+
+u8 FUN_020690D4(struct BoxPokemon * boxmon)
+{
+ return GetBoxMonData(boxmon, MON_DATA_FORME, NULL);
+}
+
+void FUN_020690E4(void)
+{
+
+}
+
+BOOL FUN_020690E8(struct Pokemon * pokemon)
+{
+ u16 species = GetMonData(pokemon, MON_DATA_SPECIES, NULL);
+ u8 level = GetMonData(pokemon, MON_DATA_LEVEL, NULL) + 1;
+ u32 exp = GetMonData(pokemon, MON_DATA_EXPERIENCE, NULL);
+ u32 growthrate = GetMonBaseStat(species, BASE_GROWTH_RATE);
+ u32 maxexp = GetExpByGrowthRateAndLevel(growthrate, 100);
+ if (exp > maxexp)
+ {
+ exp = maxexp;
+ SetMonData(pokemon, MON_DATA_EXPERIENCE, &exp);
+ }
+ if (level > 100)
+ return FALSE;
+ if (exp >= GetExpByGrowthRateAndLevel(growthrate, level))
+ {
+ SetMonData(pokemon, MON_DATA_LEVEL, &level);
+ return TRUE;
+ }
+ return FALSE;
}
diff --git a/include/pokemon.h b/include/pokemon.h
index 5ba57915..66ad03f2 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -478,6 +478,27 @@ struct SomeDrawPokemonStruct
u32 unkC;
};
+struct PokeanmSub
+{
+ s8 unk0;
+ u8 unk1;
+};
+
+struct Pokeanm
+{
+ struct PokeanmSub unk0[4];
+ u8 unk8[20];
+};
+
+struct UnkStruct_02069038
+{
+ u16 unk0;
+ u16 unk2;
+ u8 unk4;
+ u8 padding;
+ struct Pokeanm anim;
+};
+
void ZeroMonData(struct Pokemon * pokemon);
void ZeroBoxMonData(struct BoxPokemon * boxmon);
u32 SizeOfStructPokemon(void);
diff --git a/include/proto.h b/include/proto.h
index c8f50d33..3a6081b4 100644
--- a/include/proto.h
+++ b/include/proto.h
@@ -2,6 +2,7 @@
#define POKEDIAMOND_PROTO_H
// For homeless function declarations
+struct UnkStruct_02069038;
u16 * FUN_0200AA50(u16 species, u32 heap_id);
void FUN_02021A74(u16 * dest, u16 * src);
@@ -10,5 +11,7 @@ void FUN_02021E28(u16 * dest, u16 * src);
void FUN_02021EF0(const u16 * src, u16 * dest, u32 count);
u32 FUN_0206E7B8(u16 item, u32 a1, u32 a2);
u32 GetArceusTypeByPlate(u16 plate);
+int FUN_02014C3C(u8);
+void FUN_02014C54(int, int, struct UnkStruct_02069038 *, u8);
#endif //POKEDIAMOND_PROTO_H