diff options
-rw-r--r-- | arm9/arm9.lcf | 4 | ||||
-rw-r--r-- | arm9/asm/pokemon_s.s | 183 | ||||
-rw-r--r-- | arm9/src/pokemon.c | 65 | ||||
-rw-r--r-- | include/proto.h | 16 |
4 files changed, 81 insertions, 187 deletions
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf index ddccf15b..adf49127 100644 --- a/arm9/arm9.lcf +++ b/arm9/arm9.lcf @@ -362,7 +362,6 @@ SECTIONS { unk_020653EC.o (.text) unk_02066840.o (.text) pokemon.o (.text) - pokemon_s.o (.text) unk_0206AB04.o (.text) unk_0206ABC4.o (.text) unk_0206B16C.o (.text) @@ -691,7 +690,6 @@ SECTIONS { unk_02064CA8.o (.rodata) unk_020653EC.o (.rodata) pokemon.o (.rodata) - pokemon_s.o (.rodata) unk_0206ABC4.o (.rodata) unk_0206B688.o (.rodata) unk_0206BF90.o (.rodata) @@ -798,7 +796,6 @@ SECTIONS { unk_0205F7A0.o (.data) unk_02060CCC.o (.data) pokemon.o (.data) - pokemon_s.o (.data) unk_02073710.o (.data) unk_020772F0.o (.data) unk_0207C328.o (.data) @@ -891,7 +888,6 @@ SECTIONS { unk_020520AC.o (.bss) unk_02052EE8.o (.bss) pokemon.o (.bss) - pokemon_s.o (.bss) unk_020772F0.o (.bss) unk_020893E0.o (.bss) unk_0208A998.o (.bss) diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s deleted file mode 100644 index c34a280a..00000000 --- a/arm9/asm/pokemon_s.s +++ /dev/null @@ -1,183 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - .include "constants/species.h" - - .extern sLegendaryMonsList - - .text - - thumb_func_start FUN_0206A9AC -FUN_0206A9AC: ; 0x0206A9AC - push {r3-r7, lr} - sub sp, #0x10 - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - add r6, r2, #0x0 - bl FUN_020239BC - str r0, [sp, #0x0] - add r0, r5, #0x0 - mov r1, #0x7 - mov r2, #0x0 - bl GetBoxMonData - str r0, [sp, #0x4] - add r0, r4, #0x0 - bl FUN_020239CC - str r0, [sp, #0x8] - add r0, r5, #0x0 - mov r1, #0x9c - mov r2, #0x0 - bl GetBoxMonData - str r0, [sp, #0xc] - add r0, r4, #0x0 - add r1, r6, #0x0 - bl FUN_020239A0 - add r7, r0, #0x0 - mov r0, #0x8 - add r1, r6, #0x0 - bl FUN_020219F4 - add r6, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x90 - add r2, r6, #0x0 - mov r4, #0x0 - bl GetBoxMonData - ldr r1, [sp, #0x0] - ldr r0, [sp, #0x4] - cmp r1, r0 - bne _0206AA1C - ldr r1, [sp, #0x8] - ldr r0, [sp, #0xc] - cmp r1, r0 - bne _0206AA1C - add r0, r7, #0x0 - add r1, r6, #0x0 - bl FUN_02021CE0 - cmp r0, #0x0 - bne _0206AA1C - mov r4, #0x1 -_0206AA1C: - add r0, r6, #0x0 - bl FUN_02021A20 - add r0, r7, #0x0 - bl FUN_02021A20 - add r0, r4, #0x0 - add sp, #0x10 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_0206AA30 -FUN_0206AA30: ; 0x0206AA30 - push {r3, lr} - cmp r0, #0x3f - bgt _0206AA48 - bge _0206AA6C - cmp r0, #0x1 - bgt _0206AA74 - cmp r0, #0x0 - blt _0206AA74 - beq _0206AA82 - cmp r0, #0x1 - beq _0206AA82 - b _0206AA74 -_0206AA48: - cmp r0, #0x5a - bgt _0206AA50 - beq _0206AA70 - b _0206AA74 -_0206AA50: - add r1, r0, #0x0 - sub r1, #0x5b - cmp r1, #0x3 - bhi _0206AA74 - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_0206AA64: ; jump table (using 16-bit offset) - .short _0206AA70 - _0206AA64 - 2; case 0 - .short _0206AA70 - _0206AA64 - 2; case 1 - .short _0206AA70 - _0206AA64 - 2; case 2 - .short _0206AA70 - _0206AA64 - 2; case 3 -_0206AA6C: - mov r0, #0x2 - pop {r3, pc} -_0206AA70: - sub r0, #0x57 - pop {r3, pc} -_0206AA74: - bl FUN_0206AE00 - cmp r0, #0x1 - bne _0206AA80 - mov r0, #0x1 - pop {r3, pc} -_0206AA80: - mov r0, #0x0 -_0206AA82: - pop {r3, pc} - - thumb_func_start FUN_0206AA84 -FUN_0206AA84: ; 0x0206AA84 - push {r3-r4, lr} - sub sp, #0x1c - add r4, r0, #0x0 - mov r0, #0x0 - add r1, sp, #0x0 - strb r0, [r1, #0x0] - add r1, sp, #0x0 - add r1, #0x1 - mov r2, #0x18 - bl MIi_CpuClearFast - add r0, r4, #0x0 - mov r1, #0xa1 - add r2, sp, #0x0 - bl SetMonData - add r2, sp, #0x0 - add r0, r4, #0x0 - mov r1, #0xaa - add r2, #0x1 - bl SetMonData - add sp, #0x1c - pop {r3-r4, pc} - - thumb_func_start FUN_0206AAB4 -FUN_0206AAB4: ; 0x0206AAB4 - push {r3-r7, lr} - sub sp, #0x8 - add r5, r0, #0x0 - bl AcquireBoxMonLock - mov r4, #0x0 - str r0, [sp, #0x0] - add r7, r4, #0x0 - add r6, sp, #0x4 -_0206AAC6: - add r1, r4, #0x0 - add r0, r5, #0x0 - add r1, #0x36 - add r2, r7, #0x0 - bl GetBoxMonData - cmp r0, #0x0 - beq _0206AAF0 - add r1, r4, #0x0 - add r0, r5, #0x0 - add r1, #0x42 - mov r2, #0x0 - bl GetBoxMonData - add r1, r4, #0x0 - strb r0, [r6, #0x0] - add r0, r5, #0x0 - add r1, #0x3a - add r2, sp, #0x4 - bl SetBoxMonData -_0206AAF0: - add r4, r4, #0x1 - cmp r4, #0x4 - blt _0206AAC6 - ldr r1, [sp, #0x0] - add r0, r5, #0x0 - bl ReleaseBoxMonLock - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index 4fba962b..e307f351 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -3674,3 +3674,68 @@ BOOL FUN_0206A998(struct Pokemon * pokemon) u16 species = GetMonData(pokemon, MON_DATA_SPECIES, NULL); return IsPokemonLegendaryOrMythical(species); } + +BOOL FUN_0206A9AC(struct BoxPokemon * boxmon, struct SaveBlock2 * sb2, u32 heap_id) +{ + u32 myId = FUN_020239BC(sb2); + u32 otId = GetBoxMonData(boxmon, MON_DATA_OTID, NULL); + u32 myGender = FUN_020239CC(sb2); + u32 otGender = GetBoxMonData(boxmon, MON_DATA_MET_GENDER, NULL); + struct String * r7 = FUN_020239A0(sb2, heap_id); + struct String * r6 = FUN_020219F4(OT_NAME_LENGTH + 1, heap_id); + BOOL ret = FALSE; + GetBoxMonData(boxmon, MON_DATA_OT_NAME_2, r6); + if (myId == otId && myGender == otGender && FUN_02021CE0(r7, r6) == 0) + ret = TRUE; + FUN_02021A20(r6); + FUN_02021A20(r7); + return ret; +} + +int FUN_0206AA30(int x) +{ + switch (x) + { + case 63: + return 2; + case 90: + case 91: + case 92: + case 93: + case 94: + return x - 87; + default: + if (FUN_0206AE00(x) == 1) + return 1; + else + return 0; + case 0: + case 1: + return x; + } +} + +void FUN_0206AA84(struct Pokemon * pokemon) +{ + u8 sp0 = 0; + u8 sp1[12][2]; + MIi_CpuClearFast(0, sp1, sizeof(sp1)); + SetMonData(pokemon, MON_DATA_CAPSULE, &sp0); + SetMonData(pokemon, MON_DATA_SEAL_COORDS, sp1); +} + +void FUN_0206AAB4(struct BoxPokemon * boxmon) +{ + int i; + u8 pp; + BOOL decry = AcquireBoxMonLock(boxmon); + for (i = 0; i < 4; i++) + { + if (GetBoxMonData(boxmon, MON_DATA_MOVE1 + i, NULL) != MOVE_NONE) + { + pp = GetBoxMonData(boxmon, MON_DATA_MOVE1MAXPP + i, NULL); + SetBoxMonData(boxmon, MON_DATA_MOVE1PP + i, &pp); + } + } + ReleaseBoxMonLock(boxmon, decry); +} diff --git a/include/proto.h b/include/proto.h index 8c35cca5..24ddff07 100644 --- a/include/proto.h +++ b/include/proto.h @@ -7,6 +7,15 @@ struct UnkStruct_02069038; struct PlayerParty; struct BoxPokemon; +struct SaveBlock2; +struct String +{ + u16 len; + u16 pos; + u32 magic; + u16 unk8; + u16 data[0]; +}; u16 * FUN_0200AA50(u16 species, u32 heap_id); void FUN_02021A74(u16 * dest, u16 * src); @@ -23,4 +32,11 @@ void FUN_02005E90(int, int, int, int); void FUN_020056AC(int, int, int, int, int); void FUN_020808AC(struct BoxPokemon *, int, int, int, int); +struct String * FUN_020239A0(struct SaveBlock2 *, u32 heap_id); +u32 FUN_020239BC(struct SaveBlock2 *); +u32 FUN_020239CC(struct SaveBlock2 *); +struct String * FUN_020219F4(u32 count, u32 heap_id); +int FUN_02021CE0(struct String *, struct String *); +int FUN_0206AE00(int x); + #endif //POKEDIAMOND_PROTO_H |