summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/arm9.lcf4
-rw-r--r--arm9/asm/pokemon_s.s183
-rw-r--r--arm9/src/pokemon.c65
-rw-r--r--include/proto.h16
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