diff options
-rw-r--r-- | arm9/modules/63/asm/mod63_021DB450_asm.s | 130 | ||||
-rw-r--r-- | arm9/modules/63/include/mod63_021DB450.h | 24 | ||||
-rw-r--r-- | arm9/modules/63/src/mod63_021DB450.c | 57 |
3 files changed, 84 insertions, 127 deletions
diff --git a/arm9/modules/63/asm/mod63_021DB450_asm.s b/arm9/modules/63/asm/mod63_021DB450_asm.s index b16b248d..23e0b3a9 100644 --- a/arm9/modules/63/asm/mod63_021DB450_asm.s +++ b/arm9/modules/63/asm/mod63_021DB450_asm.s @@ -2,110 +2,9 @@ .include "global.inc" .section .text - .extern MOD63_021DB450 - .extern MOD63_021DB474 - - thumb_func_start MOD63_021DB49C -MOD63_021DB49C: ; 0x021DB49C - push {r4, r5, r6, r7, lr} - sub sp, #0x2c - ldr r3, _021DB56C ; =MOD63_021DBECC - add r5, r0, #0 - ldmia r3!, {r0, r1} - add r2, sp, #0x10 - stmia r2!, {r0, r1} - ldr r0, [r3] - str r0, [r2] - mov r0, #0x4c - bl FUN_02006D98 - ldr r7, _021DB570 ; =MOD63_021DBEF0 - str r0, [r5] - mov r4, #0 -_021DB4BA: - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - str r0, [sp, #8] - lsl r6, r4, #2 - add r1, sp, #0x10 - ldr r1, [r1, r6] - add r0, sp, #0x1c - lsl r1, r1, #0x10 - lsr r1, r1, #0x10 - mov r2, #0 - mov r3, #2 - bl FUN_02068C00 - ldr r0, _021DB574 ; =0x000003FF - lsl r2, r4, #3 - str r0, [sp] - str r4, [sp, #4] - mov r0, #0 - str r0, [sp, #8] - str r0, [sp, #0xc] - add r3, r7, r2 - ldr r0, [r5] - ldr r2, [r7, r2] - ldr r3, [r3, #4] - add r1, sp, #0x1c - add r6, r5, r6 - bl FUN_020073A0 - mov r1, #6 - mov r2, #1 - str r0, [r6, #4] - bl FUN_02007558 - add r0, r4, #1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - cmp r4, #3 - blo _021DB4BA - ldr r0, [r5, #8] - mov r1, #0x23 - mov r2, #1 - bl FUN_02007558 - mov r0, #1 - str r0, [r5, #0x10] - bl FUN_02012CC8 - mov r1, #0x12 - mov r0, #0x4c - lsl r1, r1, #0xa - bl AllocFromHeap - str r0, [r5, #0x14] - mov r0, #1 - str r0, [sp] - mov r0, #0x4c - str r0, [sp, #4] - mov r3, #0x12 - ldr r0, _021DB578 ; =MOD63_021DB450 - ldr r1, _021DB57C ; =MOD63_021DB474 - ldr r2, [r5, #0x14] - lsl r3, r3, #0xa - bl FUN_02012CDC - str r0, [r5, #0x18] - bl FUN_0201343C - add r2, r0, #0 - mov r0, #1 - mov r1, #0xe1 - lsl r0, r0, #0xc - lsl r1, r1, #0xe - bl FUN_0201EC94 - mov r0, #0x3d - mov r1, #4 - mov r2, #0x4c - bl FUN_0201318C - add r1, r0, #0 - ldr r0, [r5, #0x18] - mov r2, #0xa - mov r3, #1 - bl FUN_02013194 - add sp, #0x2c - pop {r4, r5, r6, r7, pc} - nop -_021DB56C: .word MOD63_021DBECC -_021DB570: .word MOD63_021DBEF0 -_021DB574: .word 0x000003FF -_021DB578: .word MOD63_021DB450 -_021DB57C: .word MOD63_021DB474 - thumb_func_end MOD63_021DB49C + .extern MOD63_021DBED8 + .extern MOD63_021DBEC0 + .extern MOD63_021DBEDC thumb_func_start MOD63_021DB580 MOD63_021DB580: ; 0x021DB580 @@ -643,29 +542,6 @@ MOD63_021DB940: ; 0x021DB940 .section .rodata - .global MOD63_021DBEC0 -MOD63_021DBEC0: ; 0x021DBEC0 - .byte 0x03, 0x07, 0x00, 0x00, 0xCE, 0x07, 0x00, 0x00 - .byte 0xA8, 0x08, 0x00, 0x00 - - .global MOD63_021DBECC -MOD63_021DBECC: ; 0x021DBECC - .byte 0x83, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00 - - .global MOD63_021DBED8 -MOD63_021DBED8: ; 0x021DBED8 - .word MOD63_021DB720 - - .global MOD63_021DBEDC -MOD63_021DBEDC: ; 0x021DBEDC - .word MOD63_021DB784, MOD63_021DB7D0, MOD63_021DB838, MOD63_021DB884 - .word MOD63_021DB8E8 - - .global MOD63_021DBEF0 -MOD63_021DBEF0: ; 0x021DBEF0 - .byte 0x80, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00 - .byte 0x00, 0x01, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00 - .global MOD63_021DBF08 MOD63_021DBF08: ; 0x021DBF08 .byte 0x04, 0x00, 0x00, 0x00 diff --git a/arm9/modules/63/include/mod63_021DB450.h b/arm9/modules/63/include/mod63_021DB450.h index 915d2d00..9d8df284 100644 --- a/arm9/modules/63/include/mod63_021DB450.h +++ b/arm9/modules/63/include/mod63_021DB450.h @@ -3,8 +3,32 @@ #include "global.h" +typedef struct UnkStruct63_021DB49C +{ + u32 field_00; + u32 field_04[3]; + u32 field_10; + void * field_14; + void * field_18; +} UnkStruct63_021DB49C; + +typedef struct UnkStruct63_021DB49C_2 +{ + u32 field_00; + u32 field_04; + u32 field_08; + u32 field_0C; +} UnkStruct63_021DB49C_2; + +typedef struct UnkStruct63_021DBEF0 +{ + u32 field_00; + u32 field_04; +} UnkStruct63_021DBEF0; + u32 MOD63_021DB450(u32 param0, u32 param1); u32 MOD63_021DB474(u32 param0, u32 param1); u32 MOD63_021DB498(void); +void MOD63_021DB49C(struct UnkStruct63_021DB49C * arg0); #endif //POKEDIAMOND_MOD63_021DB450_H diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c index 127c079f..ce641d47 100644 --- a/arm9/modules/63/src/mod63_021DB450.c +++ b/arm9/modules/63/src/mod63_021DB450.c @@ -1,4 +1,6 @@ #include "global.h" +#include "heap.h" +#include "constants/species.h" #include "mod63_021DB450.h" //todo resolve to static code @@ -8,6 +10,30 @@ extern u32 (*UNK_021064C0)(u32 param0, u32 param1, u32 param2); extern void FUN_0201327C(u32 param0); extern void FUN_020132BC(u32 param0); +extern void * FUN_02012CDC(void *, void *, void *, u32, u32, u32); +extern u32 FUN_020073A0(u32, struct UnkStruct63_021DB49C_2 *, u32, u32, u32, u32, u32, u32); + +extern u32 FUN_02006D98(u32); +extern void FUN_02068C00(struct UnkStruct63_021DB49C_2*, u16, u32, u32, u32, u32, u32); +extern void FUN_02012CC8(void); +extern void FUN_02007558(u32, u32, u32); +extern void FUN_0201EC94(u32, u32, u32); +extern u32 FUN_0201343C(void); +extern void FUN_02013194(void *, u32, u32, u32); +extern u32 FUN_0201318C(u32, u32, u32); + +//todo funcs +void MOD63_021DB720(); +void MOD63_021DB784(); +void MOD63_021DB7D0(); +void MOD63_021DB838(); +void MOD63_021DB884(); +void MOD63_021DB8E8(); + +//todo data +const u32 MOD63_021DBEC0[3] = {0x703, 0x7CE, 0x8A8}; +const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3]; + THUMB_FUNC u32 MOD63_021DB450(u32 param0, u32 param1) { u32 res0 = (UNK_021064B8)(param0, param1, 0); @@ -28,3 +54,34 @@ THUMB_FUNC u32 MOD63_021DB498(void) { return 32; } + +THUMB_FUNC void MOD63_021DB49C(struct UnkStruct63_021DB49C * arg0) +{ + struct UnkStruct63_021DB49C_2 sp1C; + int sp10[3] = {SPECIES_TURTWIG, SPECIES_CHIMCHAR, SPECIES_PIPLUP}; + + arg0->field_00 = FUN_02006D98(76); + + for (u8 i = 0; i < 3; i++) + { + FUN_02068C00(&sp1C, (u16)sp10[i], 0, 2, 0, 0, 0); + arg0->field_04[i] = FUN_020073A0(arg0->field_00, &sp1C, MOD63_021DBEF0[i].field_00, MOD63_021DBEF0[i].field_04, 0x3FF, i, 0, 0); + FUN_02007558(arg0->field_04[i], 6, 1); + } + FUN_02007558(arg0->field_04[1], 35, 1); + arg0->field_10 = 1; + FUN_02012CC8(); + arg0->field_14 = AllocFromHeap(0x4C, 0x4800); + arg0->field_18 = FUN_02012CDC(MOD63_021DB450, MOD63_021DB474, arg0->field_14, 0x4800, 1, 0x4C); + FUN_0201EC94(0x1000, 0x384000, FUN_0201343C()); + FUN_02013194(arg0->field_18, FUN_0201318C(0x3D, 4, 0x4C), 10, 1); +} + +const void * const MOD63_021DBED8 = MOD63_021DB720; +const void * const MOD63_021DBEDC[5] = { MOD63_021DB784, MOD63_021DB7D0, MOD63_021DB838, MOD63_021DB884, MOD63_021DB8E8 }; + +const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3] = { + {0x080, 0xC0}, + {0x100, 0xC0}, + {0x050, 0xC0} +}; |