diff options
Diffstat (limited to 'arm9')
| -rw-r--r-- | arm9/asm/pokemon_s.s | 263 | ||||
| -rw-r--r-- | arm9/src/pokemon.c | 103 | 
2 files changed, 103 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; +} | 
