summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arm9/asm/pokemon_s.s263
-rw-r--r--arm9/src/pokemon.c103
-rw-r--r--include/pokemon.h3
3 files changed, 106 insertions, 263 deletions
diff --git a/arm9/asm/pokemon_s.s b/arm9/asm/pokemon_s.s
index 320c6252..e53b2d48 100644
--- a/arm9/asm/pokemon_s.s
+++ b/arm9/asm/pokemon_s.s
@@ -23,269 +23,6 @@ __local_str_poketool_personal_pms_narc: ; 0x02105FC8
.extern BoxMonIsShiny
- thumb_func_start FUN_02068E14
-FUN_02068E14: ; 0x02068E14
- ldr r3, _02068E18 ; =FUN_02068E1C
- bx r3
- .balign 4
-_02068E18: .word FUN_02068E1C
-
- thumb_func_start FUN_02068E1C
-FUN_02068E1C: ; 0x02068E1C
- push {r3-r7, lr}
- sub sp, #0x8
- add r7, r1, #0x0
- mov r1, #0xad
- mov r2, #0x0
- add r5, r0, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x10
- lsr r4, r0, #0x10
- add r0, r5, #0x0
- bl GetBoxMonGender
- mov r1, #0x0
- str r0, [sp, #0x4]
- add r0, r5, #0x0
- add r2, r1, #0x0
- bl GetBoxMonData
- add r6, r0, #0x0
- ldr r0, _02068E80 ; =SPECIES_EGG
- cmp r4, r0
- bne _02068E62
- add r0, r5, #0x0
- mov r1, #0x5
- mov r2, #0x0
- bl GetBoxMonData
- ldr r1, _02068E84 ; =SPECIES_MANAPHY
- cmp r0, r1
- bne _02068E5E
- mov r3, #0x1
- b _02068E70
-_02068E5E:
- mov r3, #0x0
- b _02068E70
-_02068E62:
- add r0, r5, #0x0
- mov r1, #0x70
- mov r2, #0x0
- bl GetBoxMonData
- lsl r0, r0, #0x18
- lsr r3, r0, #0x18
-_02068E70:
- str r6, [sp, #0x0]
- ldr r1, [sp, #0x4]
- add r0, r4, #0x0
- add r2, r7, #0x0
- bl FUN_02068E88
- add sp, #0x8
- pop {r3-r7, pc}
- .balign 4
-_02068E80: .word SPECIES_EGG
-_02068E84: .word 0x000001EA
-
- thumb_func_start FUN_02068E88
-FUN_02068E88: ; 0x02068E88
- push {r3-r5, lr}
- ldr r4, _02068FDC ; =SPECIES_CHERRIM
- cmp r0, r4
- bgt _02068ED6
- bge _02068F54
- add r5, r4, #0x0
- sub r5, #0x46
- cmp r0, r5
- bgt _02068EA6
- sub r4, #0x46
- cmp r0, r4
- bge _02068F74
- cmp r0, #0xc9
- beq _02068F94
- b _02068FB8
-_02068EA6:
- add r5, r4, #0x0
- sub r5, #0x23
- cmp r0, r5
- bgt _02068EB6
- sub r4, #0x23
- cmp r0, r4
- beq _02068F84
- b _02068FB8
-_02068EB6:
- add r5, r4, #0x0
- sub r5, #0x8
- cmp r0, r5
- bgt _02068FB8
- add r5, r4, #0x0
- sub r5, #0x9
- cmp r0, r5
- blt _02068FB8
- add r5, r4, #0x0
- sub r5, #0x9
- cmp r0, r5
- beq _02068F14
- sub r4, #0x8
- cmp r0, r4
- beq _02068F26
- b _02068FB8
-_02068ED6:
- add r5, r4, #0x0
- add r5, #0x48
- cmp r0, r5
- bgt _02068EFC
- add r5, r4, #0x0
- add r5, #0x48
- cmp r0, r5
- bge _02068F62
- add r5, r4, #0x2
- cmp r0, r5
- bgt _02068FB8
- add r5, r4, #0x1
- cmp r0, r5
- blt _02068FB8
- beq _02068F38
- add r4, r4, #0x2
- cmp r0, r4
- beq _02068F46
- b _02068FB8
-_02068EFC:
- add r5, r4, #0x0
- add r5, #0x49
- cmp r0, r5
- bgt _02068F0C
- add r4, #0x49
- cmp r0, r4
- beq _02068FA6
- b _02068FB8
-_02068F0C:
- add r4, #0x4a
- cmp r0, r4
- beq _02068FB2
- b _02068FB8
-_02068F14:
- cmp r3, #0x2
- bls _02068F1A
- mov r3, #0x0
-_02068F1A:
- lsr r1, r2, #0x1
- add r1, #0x48
- lsl r0, r3, #0x1
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r1, r0
- b _02068FCA
-_02068F26:
- cmp r3, #0x2
- bls _02068F2C
- mov r3, #0x0
-_02068F2C:
- lsr r1, r2, #0x1
- add r1, #0x4e
- lsl r0, r3, #0x1
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r1, r0
- b _02068FCA
-_02068F38:
- cmp r3, #0x1
- bls _02068F3E
- mov r3, #0x0
-_02068F3E:
- add r2, #0x54
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r2, r3
- b _02068FCA
-_02068F46:
- cmp r3, #0x1
- bls _02068F4C
- mov r3, #0x0
-_02068F4C:
- add r2, #0x58
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r2, r3
- b _02068FCA
-_02068F54:
- cmp r3, #0x1
- bls _02068F5A
- mov r3, #0x0
-_02068F5A:
- add r2, #0x5c
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r2, r3
- b _02068FCA
-_02068F62:
- cmp r3, #0x11
- bls _02068F68
- mov r3, #0x0
-_02068F68:
- lsr r1, r2, #0x1
- add r1, #0x60
- lsl r0, r3, #0x1
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r1, r0
- b _02068FCA
-_02068F74:
- cmp r3, #0x3
- bls _02068F7A
- mov r3, #0x0
-_02068F7A:
- lsl r0, r2, #0x1
- add r0, #0x40
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r3, r0
- b _02068FCA
-_02068F84:
- cmp r3, #0x3
- bls _02068F8A
- mov r3, #0x0
-_02068F8A:
- lsr r1, r2, #0x1
- lsl r0, r3, #0x1
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r1, r0
- b _02068FCA
-_02068F94:
- cmp r3, #0x1c
- blo _02068F9A
- mov r3, #0x0
-_02068F9A:
- lsr r1, r2, #0x1
- add r1, #0x8
- lsl r0, r3, #0x1
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, r1, r0
- b _02068FCA
-_02068FA6:
- cmp r3, #0x1
- bls _02068FAC
- mov r3, #0x0
-_02068FAC:
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- add r3, #0x84
- b _02068FCA
-_02068FB2:
- mov r4, #0x79 ; NARC_POKETOOL_POKEGRA_HEIGHT_O
- mov r3, #0x84
- b _02068FCA
-_02068FB8:
- mov r4, #0x5 ; NARC_POKETOOL_POKEGRA_HEIGHT
- cmp r1, #0x1
- beq _02068FC2
- mov r1, #0x1
- b _02068FC4
-_02068FC2:
- mov r1, #0x0
-_02068FC4:
- lsl r0, r0, #0x2
- add r0, r2, r0
- add r3, r0, r1
-_02068FCA:
- add r0, sp, #0x0
- add r1, r4, #0x0
- add r2, r3, #0x0
- bl ReadWholeNarcMemberByIdPair
- add r0, sp, #0x0
- ldrb r0, [r0, #0x0]
- pop {r3-r5, pc}
- nop
-_02068FDC: .word SPECIES_CHERRIM
-
thumb_func_start FUN_02068FE0
FUN_02068FE0: ; 0x02068FE0
push {r4, lr}
diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c
index 5ecfb39b..882a138a 100644
--- a/arm9/src/pokemon.c
+++ b/arm9/src/pokemon.c
@@ -2266,3 +2266,106 @@ void FUN_02068C00(struct SomeDrawPokemonStruct * spC, int species, u8 gender, u8
break;
}
}
+
+u8 FUN_02068E14(struct Pokemon * pokemon, u32 a1)
+{
+ return FUN_02068E1C(&pokemon->box, a1);
+}
+
+u8 FUN_02068E1C(struct BoxPokemon * boxmon, u32 a1)
+{
+ u16 species = GetBoxMonData(boxmon, MON_DATA_SPECIES2, NULL);
+ u8 gender = GetBoxMonGender(boxmon);
+ u32 pid = GetBoxMonData(boxmon, MON_DATA_PERSONALITY, NULL);
+ u8 forme;
+ if (species == SPECIES_EGG)
+ {
+ if (GetBoxMonData(boxmon, MON_DATA_SPECIES, NULL) == SPECIES_MANAPHY)
+ forme = 1;
+ else
+ forme = 0;
+ }
+ else
+ forme = GetBoxMonData(boxmon, MON_DATA_FORME, NULL);
+ return FUN_02068E88(species, gender, a1, forme, pid);
+}
+
+u8 FUN_02068E88(int species, u8 gender, u32 a1, u8 forme, u32 pid)
+{
+ u8 ret;
+ s32 fileId;
+ enum NarcId narc;
+ switch (species)
+ {
+ case SPECIES_BURMY:
+ if (forme > 2)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 / 2 + 0x48 + forme * 2;
+ break;
+ case SPECIES_WORMADAM:
+ if (forme > 2)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 / 2 + 0x4E + forme * 2;
+ break;
+ case SPECIES_SHELLOS:
+ if (forme > 1)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 + 0x54 + forme;
+ break;
+ case SPECIES_GASTRODON:
+ if (forme > 1)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 + 0x58 + forme;
+ break;
+ case SPECIES_CHERRIM:
+ if (forme > 1)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 + 0x5C + forme;
+ break;
+ case SPECIES_ARCEUS:
+ if (forme > 17)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 / 2 + 0x60 + 2 * forme;
+ break;
+ case SPECIES_CASTFORM:
+ if (forme > 3)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 * 2 + 0x40 + forme;
+ break;
+ case SPECIES_DEOXYS:
+ if (forme > 3)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 / 2 + forme * 2;
+ break;
+ case SPECIES_UNOWN:
+ if (forme >= 28)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = a1 / 2 + 0x8 + forme * 2;
+ break;
+ case SPECIES_EGG:
+ if (forme > 1)
+ forme = 0;
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = 0x84 + forme;
+ break;
+ case SPECIES_MANAPHY_EGG:
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT_O;
+ fileId = 0x84;
+ break;
+ default:
+ narc = NARC_POKETOOL_POKEGRA_HEIGHT;
+ fileId = 4 * species + a1 + (gender != MON_FEMALE ? 1 : 0);
+ break;
+ }
+ ReadWholeNarcMemberByIdPair(&ret, narc, fileId);
+ return ret;
+}
diff --git a/include/pokemon.h b/include/pokemon.h
index 7c358370..d4df2bce 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -530,5 +530,8 @@ u8 MonIsShiny(struct Pokemon * pokemon);
u32 GenerateShinyPersonality(u32 otid);
void FUN_02068B70(struct SomeDrawPokemonStruct * spC, struct BoxPokemon * boxmon, u8 sp10);
void FUN_02068C00(struct SomeDrawPokemonStruct * spC, int species, u8 gender, u8 sp10, u8 shiny, u8 forme, u32 personality);
+u8 FUN_02068E14(struct Pokemon * pokemon, u32 a1);
+u8 FUN_02068E1C(struct BoxPokemon * boxmon, u32 a1);
+u8 FUN_02068E88(int species, u8 gender, u32 a2, u8 forme, u32 pid);
#endif //POKEDIAMOND_POKEMON_H