diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-13 21:04:04 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-06-13 21:04:04 -0400 |
commit | c5eb6d2669cdb27cc9f5ad35fae73577edf8aac6 (patch) | |
tree | 72d1a0e4b7c13179def0d1ad9bade7406401a748 | |
parent | d716e7b851b9949689985eedb24dfa2bc8619496 (diff) |
through FUN_020690E8
-rw-r--r-- | arm9/asm/pokemon_s.s | 173 | ||||
-rw-r--r-- | arm9/asm/unk_020377F0.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0206F3FC.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_02072548.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_0207550C.s | 2 | ||||
-rw-r--r-- | arm9/asm/unk_020842DC.s | 2 | ||||
-rw-r--r-- | arm9/global.inc | 2 | ||||
-rw-r--r-- | arm9/modules/11/asm/module_11.s | 2 | ||||
-rw-r--r-- | arm9/modules/80/asm/module_80.s | 4 | ||||
-rw-r--r-- | arm9/src/pokemon.c | 86 | ||||
-rw-r--r-- | include/pokemon.h | 21 | ||||
-rw-r--r-- | include/proto.h | 3 |
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 |