diff options
author | red031000 <rubenru09@aol.com> | 2020-07-31 14:46:39 +0100 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2020-07-31 14:46:39 +0100 |
commit | fbef7a4533b586518661a174ee6011e8cf9fac37 (patch) | |
tree | 2292258b55319a0559249acc27efc74848f541e3 /arm9/modules | |
parent | 90b0ca8e0ed243029c773428e98f5e56319f2b60 (diff) |
mod63_021DB5CC
Diffstat (limited to 'arm9/modules')
-rw-r--r-- | arm9/modules/63/asm/mod63_021DB450_asm.s | 180 | ||||
-rw-r--r-- | arm9/modules/63/include/mod63_021DB450.h | 16 | ||||
-rw-r--r-- | arm9/modules/63/src/mod63_021DB450.c | 87 |
3 files changed, 95 insertions, 188 deletions
diff --git a/arm9/modules/63/asm/mod63_021DB450_asm.s b/arm9/modules/63/asm/mod63_021DB450_asm.s index e32c5ccf..28265e78 100644 --- a/arm9/modules/63/asm/mod63_021DB450_asm.s +++ b/arm9/modules/63/asm/mod63_021DB450_asm.s @@ -5,174 +5,7 @@ .extern MOD63_021DBED8 .extern MOD63_021DBEC0 .extern MOD63_021DBEDC - - thumb_func_start MOD63_021DB5CC -MOD63_021DB5CC: ; 0x021DB5CC - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r4, r0, #0 - add r7, r2, #0 - ldrb r2, [r4, #0x1c] - add r5, r4, #0 - add r6, r1, #0 - add r5, #0x1c - cmp r2, #5 - bls _021DB5E2 - b _021DB6FC -_021DB5E2: - add r2, r2, r2 - add r2, pc - ldrh r2, [r2, #6] - lsl r2, r2, #0x10 - asr r2, r2, #0x10 - add pc, r2 -_021DB5EE: ; jump table - .short _021DB5FA - _021DB5EE - 2 ; case 0 - .short _021DB63C - _021DB5EE - 2 ; case 1 - .short _021DB658 - _021DB5EE - 2 ; case 2 - .short _021DB690 - _021DB5EE - 2 ; case 3 - .short _021DB6BE - _021DB5EE - 2 ; case 4 - .short _021DB6E4 - _021DB5EE - 2 ; case 5 -_021DB5FA: - ldr r0, _021DB704 ; =0x0400004A - mov r1, #0x3f - ldrh r2, [r0] - add r7, r4, #4 - bic r2, r1 - mov r1, #0x11 - orr r1, r2 - mov r2, #0x20 - orr r1, r2 - strh r1, [r0] - lsl r0, r6, #2 - str r0, [sp] - ldr r0, [r7, r0] - mov r1, #0xc - lsl r2, r2, #5 - bl FUN_02007558 - ldr r0, [sp] - mov r2, #1 - ldr r0, [r7, r0] - mov r1, #0xd - lsl r2, r2, #0xa - bl FUN_02007558 - ldr r0, [sp] - mov r1, #6 - ldr r0, [r7, r0] - mov r2, #0 - bl FUN_02007558 - ldrb r0, [r5] - add r0, r0, #1 - strb r0, [r5] -_021DB63C: - ldr r2, _021DB708 ; =MOD63_021DBED8 - lsl r3, r6, #3 - ldr r2, [r2, r3] - add r0, r4, #0 - add r1, r6, #0 - blx r2 - cmp r0, #0 - beq _021DB6FC - mov r0, #0 - strb r0, [r4, #0x1d] - ldrb r0, [r5] - add r0, r0, #1 - strb r0, [r5] - b _021DB6FC -_021DB658: - ldr r0, [r4, #0x18] - mov r1, #1 - bl FUN_02013440 - lsl r0, r6, #2 - str r0, [sp, #4] - ldr r1, _021DB70C ; =MOD63_021DBF08 - lsl r6, r6, #3 - ldr r3, [sp, #4] - add r7, r4, #4 - ldr r0, [r4, #0x18] - ldr r1, [r1, r6] - ldr r2, _021DB710 ; =MOD63_021DB940 - ldr r3, [r7, r3] - bl FUN_020133AC - ldr r1, _021DB714 ; =MOD63_021DBF0C - ldr r3, [sp, #4] - ldr r0, [r4, #0x18] - ldr r1, [r1, r6] - ldr r2, _021DB710 ; =MOD63_021DB940 - ldr r3, [r7, r3] - bl FUN_020133AC - ldrb r0, [r5] - add r0, r0, #1 - strb r0, [r5] - b _021DB6FC -_021DB690: - ldr r0, [r4, #0x18] - bl FUN_020133C8 - cmp r0, #0 - bne _021DB6FC - ldr r0, _021DB718 ; =MOD63_021DBEC0 - lsl r1, r6, #2 - ldr r0, [r0, r1] - cmp r7, r0 - blt _021DB6FC - ldr r1, _021DB704 ; =0x0400004A - mov r0, #0x3f - ldrh r2, [r1] - bic r2, r0 - mov r0, #0x10 - orr r2, r0 - mov r0, #0x20 - orr r0, r2 - strh r0, [r1] - ldrb r0, [r5] - add r0, r0, #1 - strb r0, [r5] - b _021DB6FC -_021DB6BE: - ldr r2, _021DB71C ; =MOD63_021DBEDC - lsl r3, r6, #3 - ldr r2, [r2, r3] - blx r2 - cmp r0, #0 - beq _021DB6FC - lsl r0, r6, #2 - add r0, r4, r0 - ldr r0, [r0, #4] - mov r1, #6 - mov r2, #1 - bl FUN_02007558 - mov r0, #0 - strb r0, [r4, #0x1d] - ldrb r0, [r5] - add r0, r0, #1 - strb r0, [r5] - b _021DB6FC -_021DB6E4: - ldrb r0, [r4, #0x1d] - add r0, r0, #1 - strb r0, [r4, #0x1d] - ldrb r0, [r4, #0x1d] - cmp r0, #0x14 - blo _021DB6FC - mov r0, #0 - strb r0, [r4, #0x1d] - strb r0, [r5] - add sp, #8 - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} -_021DB6FC: - mov r0, #0 - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop -_021DB704: .word 0x0400004A -_021DB708: .word MOD63_021DBED8 -_021DB70C: .word MOD63_021DBF08 -_021DB710: .word MOD63_021DB940 -_021DB714: .word MOD63_021DBF0C -_021DB718: .word MOD63_021DBEC0 -_021DB71C: .word MOD63_021DBEDC - thumb_func_end MOD63_021DB5CC + .extern MOD63_021DBF08 thumb_func_start MOD63_021DB720 MOD63_021DB720: ; 0x021DB720 @@ -496,14 +329,3 @@ MOD63_021DB940: ; 0x021DB940 pop {r4, r5, pc} .align 2, 0 thumb_func_end MOD63_021DB940 - - .section .rodata - - .global MOD63_021DBF08 -MOD63_021DBF08: ; 0x021DBF08 - .byte 0x04, 0x00, 0x00, 0x00 - - .global MOD63_021DBF0C -MOD63_021DBF0C: ; 0x021DBF0C - .byte 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 diff --git a/arm9/modules/63/include/mod63_021DB450.h b/arm9/modules/63/include/mod63_021DB450.h index 2fd902ce..617912a7 100644 --- a/arm9/modules/63/include/mod63_021DB450.h +++ b/arm9/modules/63/include/mod63_021DB450.h @@ -44,6 +44,21 @@ typedef struct UnkStruct63_021DB5A8 //possibly the same as above u32 field_00; } UnkStruct63_021DB5A8; +typedef struct UnkStruct63_021DB5CC +{ + u8 filler_00[4]; + u32 field_04[5]; + u32 field_18; + u8 field_1C; + u8 field_1D; +} UnkStruct63_021DB5CC; + +typedef struct UnkStruct63_021DBED8 +{ + BOOL (*unk_00)(struct UnkStruct63_021DB5CC *, u32); + BOOL (*unk_04)(struct UnkStruct63_021DB5CC *, u32); +} UnkStruct63_021DBED8; + u32 MOD63_021DB450(u32 param0, u32 param1); u32 MOD63_021DB474(u32 param0, u32 param1); u32 MOD63_021DB498(void); @@ -51,5 +66,6 @@ void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB49C * arg0); void MOD63_021DB580(UnkStruct63_021DB580 *param0); void MOD63_021DB598(UnkStruct63_021DB598 *param0); void MOD63_021DB5A8(UnkStruct63_021DB5A8 *param0); +BOOL MOD63_021DB5CC(UnkStruct63_021DB5CC *param0, u32 param1, s32 param2); #endif //POKEDIAMOND_MOD63_021DB450_H diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c index 20aaa310..a1704f68 100644 --- a/arm9/modules/63/src/mod63_021DB450.c +++ b/arm9/modules/63/src/mod63_021DB450.c @@ -1,6 +1,7 @@ #include "global.h" #include "heap.h" #include "constants/species.h" +#include "gx.h" #include "mod63_021DB450.h" //todo resolve to static code @@ -33,16 +34,21 @@ extern u32 FUN_02006ED4(u32 param0); extern void MOD63_021DB934(void); extern void FUN_020222B4(u32, u32); +extern void FUN_02013440(u32, u32); +extern void FUN_020133AC(u32, u32, const void *, u32); +extern BOOL FUN_020133C8(u32); + //todo funcs -void MOD63_021DB720(); -void MOD63_021DB784(); -void MOD63_021DB7D0(); -void MOD63_021DB838(); -void MOD63_021DB884(); -void MOD63_021DB8E8(); +extern BOOL MOD63_021DB720(struct UnkStruct63_021DB5CC *, u32); +extern BOOL MOD63_021DB784(struct UnkStruct63_021DB5CC *, u32); +extern BOOL MOD63_021DB7D0(struct UnkStruct63_021DB5CC *, u32); +extern BOOL MOD63_021DB838(struct UnkStruct63_021DB5CC *, u32); +extern BOOL MOD63_021DB884(struct UnkStruct63_021DB5CC *, u32); +extern BOOL MOD63_021DB8E8(struct UnkStruct63_021DB5CC *, u32); +extern void MOD63_021DB940(); //todo data -const u32 MOD63_021DBEC0[3] = {0x703, 0x7CE, 0x8A8}; +const s32 MOD63_021DBEC0[3] = {0x703, 0x7CE, 0x8A8}; const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3]; THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1) @@ -117,11 +123,74 @@ THUMB_FUNC void MOD63_021DB5A8(UnkStruct63_021DB5A8 *param0) FUN_020222B4(1, 0); } -void * const MOD63_021DBED8 = MOD63_021DB720; -void * const MOD63_021DBEDC[5] = { MOD63_021DB784, MOD63_021DB7D0, MOD63_021DB838, MOD63_021DB884, MOD63_021DB8E8 }; +const struct UnkStruct63_021DBED8 MOD63_021DBED8[3] = { + {MOD63_021DB720, MOD63_021DB784}, + {MOD63_021DB7D0, MOD63_021DB838}, + {MOD63_021DB884, MOD63_021DB8E8} +}; const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3] = { {0x080, 0xC0}, {0x100, 0xC0}, {0x050, 0xC0} }; + +const struct UnkStruct63_021DBEF0 MOD63_021DBF08[3] = { //no idea if this is the right type + {4, 5}, + {2, 3}, + {0, 1} +}; + +THUMB_FUNC BOOL MOD63_021DB5CC(UnkStruct63_021DB5CC *param0, u32 param1, s32 param2) +{ + u8 * state = ¶m0->field_1C; + switch(*state) + { + case 0: + G2_SetWndOutsidePlane(GX_WND_PLANEMASK_OBJ | GX_WND_PLANEMASK_BG0, TRUE); + FUN_02007558(param0->field_04[param1], 12, 0x400); + FUN_02007558(param0->field_04[param1], 13, 0x400); + FUN_02007558(param0->field_04[param1], 6, 0); + (*state)++; + // fallthrough + case 1: + if (MOD63_021DBED8[param1].unk_00(param0, param1)) + { + param0->field_1D = 0; + (*state)++; + } + break; + case 2: + FUN_02013440(param0->field_18, 1); + FUN_020133AC(param0->field_18, MOD63_021DBF08[param1].field_00, MOD63_021DB940, param0->field_04[param1]); + FUN_020133AC(param0->field_18, MOD63_021DBF08[param1].field_04, MOD63_021DB940, param0->field_04[param1]); + (*state)++; + break; + case 3: + if (!FUN_020133C8(param0->field_18) && param2 >= MOD63_021DBEC0[param1]) + { + G2_SetWndOutsidePlane(GX_WND_PLANEMASK_OBJ, TRUE); + (*state)++; + } + break; + case 4: + if (MOD63_021DBED8[param1].unk_04(param0, param1)) + { + FUN_02007558(param0->field_04[param1], 6, 1); + param0->field_1D = 0; + (*state)++; + } + break; + case 5: + param0->field_1D++; + if (param0->field_1D >= 20) + { + param0->field_1D = 0; + *state = 0; + return TRUE; + } + break; + } + return FALSE; +} + |