From 984fc8caa6ae9dd4d0cbddecefbcd7ec86adabbe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Apr 2024 11:30:07 -0400 Subject: [PATCH] Decompile field/overlay_01_021E66E4.c --- asm/include/overlay_01_021E5900.inc | 6 +- asm/include/overlay_01_021E66E4.inc | 12 +- asm/include/overlay_01_021FC05C.inc | 6 +- asm/include/overlay_02.inc | 8 +- asm/overlay_01_021E5900.s | 6 +- asm/overlay_01_021E66E4.s | 243 ---------------- asm/overlay_01_021FC05C.s | 14 +- asm/overlay_02_02245B80.s | 78 +++--- include/field/legend_cutscene_camera.h | 4 +- include/field/overlay_01_021E66E4.h | 38 +-- include/field_system.h | 2 +- main.lsf | 2 +- src/field/legend_cutscene_camera.c | 368 ++++++++++++------------- src/field/overlay_01_021E66E4.c | 92 +++++++ src/scrcmd_c.c | 4 +- 15 files changed, 367 insertions(+), 516 deletions(-) delete mode 100644 asm/overlay_01_021E66E4.s create mode 100644 src/field/overlay_01_021E66E4.c diff --git a/asm/include/overlay_01_021E5900.inc b/asm/include/overlay_01_021E5900.inc index 76d8eb1ba..824a32a01 100644 --- a/asm/include/overlay_01_021E5900.inc +++ b/asm/include/overlay_01_021E5900.inc @@ -117,9 +117,9 @@ .public ov01_021E631C .public ov01_021E6340 .public ov01_021E636C -.public ov01_021E66E4 -.public ov01_021E6734 -.public ov01_021E6768 +.public Field3dObjectTaskManager_Create +.public Field3dObjectTaskManager_Delete +.public Field3dObjectTaskManager_RunDrawTasks .public ov01_021E7F00 .public ov01_021E87E4 .public ov01_021E8A28 diff --git a/asm/include/overlay_01_021E66E4.inc b/asm/include/overlay_01_021E66E4.inc index 8f90a10c6..b809d64ed 100644 --- a/asm/include/overlay_01_021E66E4.inc +++ b/asm/include/overlay_01_021E66E4.inc @@ -11,9 +11,9 @@ .public GF_AssertFail .public sub_0203DF8C .public MIi_CpuClear32 -.public ov01_021E66E4 -.public ov01_021E6734 -.public ov01_021E6768 -.public ov01_021E67BC -.public ov01_021E683C -.public ov01_021E687C +.public Field3dObjectTaskManager_Create +.public Field3dObjectTaskManager_Delete +.public Field3dObjectTaskManager_RunDrawTasks +.public Field3dObjectTaskManager_CreateTask +.public Field3dObjectTask_Delete +.public Field3dObjectTask_GetData diff --git a/asm/include/overlay_01_021FC05C.inc b/asm/include/overlay_01_021FC05C.inc index e3e505235..43146aa4c 100644 --- a/asm/include/overlay_01_021FC05C.inc +++ b/asm/include/overlay_01_021FC05C.inc @@ -21,9 +21,9 @@ .public G2x_SetBlendAlpha_ .public memset .public _s32_div_f -.public ov01_021E67BC -.public ov01_021E683C -.public ov01_021E687C +.public Field3dObjectTaskManager_CreateTask +.public Field3dObjectTask_Delete +.public Field3dObjectTask_GetData .public ov01_021EB31C .public GetHoneySweetScentWorkSize .public Task_HoneyOrSweetScent diff --git a/asm/include/overlay_02.inc b/asm/include/overlay_02.inc index ebc1de5bf..454abcc78 100644 --- a/asm/include/overlay_02.inc +++ b/asm/include/overlay_02.inc @@ -378,9 +378,9 @@ .public gGameVersion .public FX_SinCosTable_ .public gSystem -.public ov01_021E67BC -.public ov01_021E683C -.public ov01_021E687C +.public Field3dObjectTaskManager_CreateTask +.public Field3dObjectTask_Delete +.public Field3dObjectTask_GetData .public ov01_021E8970 .public ov01_021E8A8C .public ov01_021E8B04 @@ -510,7 +510,7 @@ .public ov02_022507B4 .public ov02_022508B4 .public ov02_02250A60 -.public ov02_02250AC8 +.public LegendCutscene_EndKimonoDance .public ov02_02250AE8 .public ov02_02250AFC .public ov02_02250B30 diff --git a/asm/overlay_01_021E5900.s b/asm/overlay_01_021E5900.s index 3d17e32ad..5af3c42db 100644 --- a/asm/overlay_01_021E5900.s +++ b/asm/overlay_01_021E5900.s @@ -158,7 +158,7 @@ _021E5A12: add r0, r4, #0 mov r1, #4 mov r2, #8 - bl ov01_021E66E4 + bl Field3dObjectTaskManager_Create ldr r1, [r4, #4] str r0, [r1, #4] ldr r1, _021E5BCC ; =0x00000D69 @@ -583,7 +583,7 @@ _021E5E12: bl GF3dRender_DeleteSimpleManager ldr r0, [r4, #4] ldr r0, [r0, #4] - bl ov01_021E6734 + bl Field3dObjectTaskManager_Delete mov r0, #0 add r1, r0, #0 bl Main_SetVBlankIntrCB @@ -1166,7 +1166,7 @@ _021E6294: bl NNS_G3dGlbFlushP ldr r0, [r4, #4] ldr r0, [r0, #4] - bl ov01_021E6768 + bl Field3dObjectTaskManager_RunDrawTasks ldr r1, _021E6318 ; =gG3dDepthBufferingMode add r0, r5, #0 ldr r1, [r1] diff --git a/asm/overlay_01_021E66E4.s b/asm/overlay_01_021E66E4.s deleted file mode 100644 index 2d6441687..000000000 --- a/asm/overlay_01_021E66E4.s +++ /dev/null @@ -1,243 +0,0 @@ -#include "constants/sndseq.h" -#include "constants/moves.h" -#include "constants/std_script.h" -#include "constants/species.h" -#include "constants/sprites.h" -#include "constants/maps.h" -#include "constants/mmodel.h" -#include "constants/items.h" -#include "msgdata/msg/msg_0096_D31R0201.h" -#include "msgdata/msg/msg_0066_D23R0102.h" - .include "asm/macros.inc" - .include "overlay_01_021E66E4.inc" - .include "global.inc" - - .text - - thumb_func_start ov01_021E66E4 -ov01_021E66E4: ; 0x021E66E4 - push {r3, r4, r5, r6, r7, lr} - add r5, r1, #0 - add r7, r0, #0 - add r0, r5, #0 - mov r1, #0x14 - add r6, r2, #0 - bl AllocFromHeap - add r4, r0, #0 - str r7, [r4] - str r5, [r4, #4] - mov r0, #0x14 - add r7, r6, #0 - mul r7, r0 - str r6, [r4, #8] - add r0, r5, #0 - add r1, r7, #0 - bl AllocFromHeap - str r0, [r4, #0xc] - ldr r1, [r4, #0xc] - mov r0, #0 - add r2, r7, #0 - bl MIi_CpuClear32 - add r0, r6, #0 - bl SysTaskQueue_GetArenaSize - add r1, r0, #0 - add r0, r5, #0 - bl AllocFromHeap - str r0, [r4, #0x10] - ldr r1, [r4, #0x10] - add r0, r6, #0 - bl SysTaskQueue_PlacementNew - str r0, [r4, #0x10] - add r0, r4, #0 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end ov01_021E66E4 - - thumb_func_start ov01_021E6734 -ov01_021E6734: ; 0x021E6734 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, [r5, #8] - mov r6, #0 - cmp r0, #0 - ble _021E6754 - add r4, r6, #0 -_021E6742: - ldr r0, [r5, #0xc] - add r0, r0, r4 - bl ov01_021E683C - ldr r0, [r5, #8] - add r6, r6, #1 - add r4, #0x14 - cmp r6, r0 - blt _021E6742 -_021E6754: - ldr r0, [r5, #0xc] - bl FreeToHeap - ldr r0, [r5, #0x10] - bl FreeToHeap - add r0, r5, #0 - bl FreeToHeap - pop {r4, r5, r6, pc} - thumb_func_end ov01_021E6734 - - thumb_func_start ov01_021E6768 -ov01_021E6768: ; 0x021E6768 - ldr r3, _021E6770 ; =SysTaskQueue_RunTasks - ldr r0, [r0, #0x10] - bx r3 - nop -_021E6770: .word SysTaskQueue_RunTasks - thumb_func_end ov01_021E6768 - - thumb_func_start ov01_021E6774 -ov01_021E6774: ; 0x021E6774 - push {r4, lr} - add r4, r1, #0 - ldr r0, [r4] - ldr r0, [r0] - bl sub_0203DF8C - cmp r0, #0 - beq _021E6796 - ldr r0, [r4, #0xc] - ldr r3, [r0, #0x10] - cmp r3, #0 - beq _021E6796 - ldr r1, [r4] - ldr r2, [r4, #0x10] - ldr r1, [r1] - add r0, r4, #0 - blx r3 -_021E6796: - pop {r4, pc} - thumb_func_end ov01_021E6774 - - thumb_func_start ov01_021E6798 -ov01_021E6798: ; 0x021E6798 - push {r4, lr} - add r4, r1, #0 - ldr r0, [r4] - ldr r0, [r0] - bl sub_0203DF8C - cmp r0, #0 - beq _021E67BA - ldr r0, [r4, #0xc] - ldr r3, [r0, #0x14] - cmp r3, #0 - beq _021E67BA - ldr r1, [r4] - ldr r2, [r4, #0x10] - ldr r1, [r1] - add r0, r4, #0 - blx r3 -_021E67BA: - pop {r4, pc} - thumb_func_end ov01_021E6798 - - thumb_func_start ov01_021E67BC -ov01_021E67BC: ; 0x021E67BC - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r2, [r5, #8] - add r6, r1, #0 - mov r1, #0 - ldr r4, [r5, #0xc] - cmp r2, #0 - ble _021E682C -_021E67CC: - ldr r0, [r4, #4] - cmp r0, #0 - bne _021E6824 - ldr r0, _021E6834 ; =ov01_021E6774 - ldr r2, [r6] - add r1, r4, #0 - bl SysTask_CreateOnMainQueue - str r0, [r4, #4] - ldr r0, [r5, #0x10] - ldr r1, _021E6838 ; =ov01_021E6798 - ldr r3, [r6] - add r2, r4, #0 - bl SysTaskQueue_InsertTask - str r0, [r4, #8] - str r5, [r4] - str r6, [r4, #0xc] - ldr r0, [r4, #4] - cmp r0, #0 - bne _021E67FA - bl GF_AssertFail -_021E67FA: - ldr r0, [r4, #8] - cmp r0, #0 - bne _021E6804 - bl GF_AssertFail -_021E6804: - ldrh r1, [r6, #4] - cmp r1, #0 - beq _021E6812 - ldr r0, [r5, #4] - bl AllocFromHeap - str r0, [r4, #0x10] -_021E6812: - ldr r3, [r6, #8] - cmp r3, #0 - beq _021E6820 - ldr r1, [r5] - ldr r2, [r4, #0x10] - add r0, r4, #0 - blx r3 -_021E6820: - add r0, r4, #0 - pop {r4, r5, r6, pc} -_021E6824: - add r1, r1, #1 - add r4, #0x14 - cmp r1, r2 - blt _021E67CC -_021E682C: - bl GF_AssertFail - mov r0, #0 - pop {r4, r5, r6, pc} - .balign 4, 0 -_021E6834: .word ov01_021E6774 -_021E6838: .word ov01_021E6798 - thumb_func_end ov01_021E67BC - - thumb_func_start ov01_021E683C -ov01_021E683C: ; 0x021E683C - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4, #4] - cmp r1, #0 - beq _021E687A - ldr r1, [r4, #0xc] - ldr r3, [r1, #0xc] - cmp r3, #0 - beq _021E6856 - ldr r1, [r4] - ldr r2, [r4, #0x10] - ldr r1, [r1] - blx r3 -_021E6856: - ldr r0, [r4, #0xc] - ldrh r0, [r0, #4] - cmp r0, #0 - beq _021E6864 - ldr r0, [r4, #0x10] - bl FreeToHeap -_021E6864: - ldr r0, [r4, #4] - bl SysTask_Destroy - ldr r0, [r4, #8] - bl SysTask_Destroy - mov r0, #0 - add r1, r4, #0 - mov r2, #0x14 - bl MIi_CpuClear32 -_021E687A: - pop {r4, pc} - thumb_func_end ov01_021E683C - - thumb_func_start ov01_021E687C -ov01_021E687C: ; 0x021E687C - ldr r0, [r0, #0x10] - bx lr - thumb_func_end ov01_021E687C diff --git a/asm/overlay_01_021FC05C.s b/asm/overlay_01_021FC05C.s index 0b7d4f513..2c15b6365 100644 --- a/asm/overlay_01_021FC05C.s +++ b/asm/overlay_01_021FC05C.s @@ -118,27 +118,27 @@ ov01_021FC10C: ; 0x021FC10C thumb_func_start ov01_021FC110 ov01_021FC110: ; 0x021FC110 ldr r0, [r0, #4] - ldr r3, _021FC11C ; =ov01_021E67BC + ldr r3, _021FC11C ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _021FC120 ; =ov01_02208BCC bx r3 nop -_021FC11C: .word ov01_021E67BC +_021FC11C: .word Field3dObjectTaskManager_CreateTask _021FC120: .word ov01_02208BCC thumb_func_end ov01_021FC110 thumb_func_start ov01_021FC124 ov01_021FC124: ; 0x021FC124 - ldr r3, _021FC128 ; =ov01_021E683C + ldr r3, _021FC128 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_021FC128: .word ov01_021E683C +_021FC128: .word Field3dObjectTask_Delete thumb_func_end ov01_021FC124 thumb_func_start ov01_021FC12C ov01_021FC12C: ; 0x021FC12C push {r3, lr} - bl ov01_021E687C + bl Field3dObjectTask_GetData ldr r0, [r0, #0x14] pop {r3, pc} .balign 4, 0 @@ -147,12 +147,12 @@ ov01_021FC12C: ; 0x021FC12C thumb_func_start ov01_021FC138 ov01_021FC138: ; 0x021FC138 ldr r0, [r0, #4] - ldr r3, _021FC144 ; =ov01_021E67BC + ldr r3, _021FC144 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _021FC148 ; =ov01_02208BE4 bx r3 nop -_021FC144: .word ov01_021E67BC +_021FC144: .word Field3dObjectTaskManager_CreateTask _021FC148: .word ov01_02208BE4 thumb_func_end ov01_021FC138 diff --git a/asm/overlay_02_02245B80.s b/asm/overlay_02_02245B80.s index 20475283c..2bee94614 100644 --- a/asm/overlay_02_02245B80.s +++ b/asm/overlay_02_02245B80.s @@ -15782,39 +15782,39 @@ _0224D2C4: .word ov02_0224D1DC thumb_func_start ov02_0224D2C8 ov02_0224D2C8: ; 0x0224D2C8 ldr r0, [r0, #4] - ldr r3, _0224D2D4 ; =ov01_021E67BC + ldr r3, _0224D2D4 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D2D8 ; =ov02_02253974 bx r3 nop -_0224D2D4: .word ov01_021E67BC +_0224D2D4: .word Field3dObjectTaskManager_CreateTask _0224D2D8: .word ov02_02253974 thumb_func_end ov02_0224D2C8 thumb_func_start ov02_0224D2DC ov02_0224D2DC: ; 0x0224D2DC ldr r0, [r0, #4] - ldr r3, _0224D2E8 ; =ov01_021E67BC + ldr r3, _0224D2E8 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D2EC ; =ov02_022539BC bx r3 nop -_0224D2E8: .word ov01_021E67BC +_0224D2E8: .word Field3dObjectTaskManager_CreateTask _0224D2EC: .word ov02_022539BC thumb_func_end ov02_0224D2DC thumb_func_start ov02_0224D2F0 ov02_0224D2F0: ; 0x0224D2F0 - ldr r3, _0224D2F4 ; =ov01_021E683C + ldr r3, _0224D2F4 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224D2F4: .word ov01_021E683C +_0224D2F4: .word Field3dObjectTask_Delete thumb_func_end ov02_0224D2F0 thumb_func_start ov02_0224D2F8 ov02_0224D2F8: ; 0x0224D2F8 push {r3, lr} - bl ov01_021E687C + bl Field3dObjectTask_GetData add r0, #0xec ldr r0, [r0] cmp r0, #1 @@ -15951,39 +15951,39 @@ _0224D3F0: .word ov02_0224D1DC thumb_func_start ov02_0224D3F4 ov02_0224D3F4: ; 0x0224D3F4 ldr r0, [r0, #4] - ldr r3, _0224D400 ; =ov01_021E67BC + ldr r3, _0224D400 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D404 ; =ov02_022538FC bx r3 nop -_0224D400: .word ov01_021E67BC +_0224D400: .word Field3dObjectTaskManager_CreateTask _0224D404: .word ov02_022538FC thumb_func_end ov02_0224D3F4 thumb_func_start ov02_0224D408 ov02_0224D408: ; 0x0224D408 ldr r0, [r0, #4] - ldr r3, _0224D414 ; =ov01_021E67BC + ldr r3, _0224D414 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D418 ; =ov02_0225398C bx r3 nop -_0224D414: .word ov01_021E67BC +_0224D414: .word Field3dObjectTaskManager_CreateTask _0224D418: .word ov02_0225398C thumb_func_end ov02_0224D408 thumb_func_start ov02_0224D41C ov02_0224D41C: ; 0x0224D41C - ldr r3, _0224D420 ; =ov01_021E683C + ldr r3, _0224D420 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224D420: .word ov01_021E683C +_0224D420: .word Field3dObjectTask_Delete thumb_func_end ov02_0224D41C thumb_func_start ov02_0224D424 ov02_0224D424: ; 0x0224D424 push {r3, lr} - bl ov01_021E687C + bl Field3dObjectTask_GetData add r0, #0xec ldr r0, [r0] cmp r0, #1 @@ -16179,21 +16179,21 @@ _0224D586: thumb_func_start ov02_0224D598 ov02_0224D598: ; 0x0224D598 ldr r0, [r0, #4] - ldr r3, _0224D5A4 ; =ov01_021E67BC + ldr r3, _0224D5A4 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D5A8 ; =ov02_02253944 bx r3 nop -_0224D5A4: .word ov01_021E67BC +_0224D5A4: .word Field3dObjectTaskManager_CreateTask _0224D5A8: .word ov02_02253944 thumb_func_end ov02_0224D598 thumb_func_start ov02_0224D5AC ov02_0224D5AC: ; 0x0224D5AC - ldr r3, _0224D5B0 ; =ov01_021E683C + ldr r3, _0224D5B0 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224D5B0: .word ov01_021E683C +_0224D5B0: .word Field3dObjectTask_Delete thumb_func_end ov02_0224D5AC thumb_func_start ov02_0224D5B4 @@ -16300,21 +16300,21 @@ _0224D678: .word ov02_0224D1DC thumb_func_start ov02_0224D67C ov02_0224D67C: ; 0x0224D67C ldr r0, [r0, #4] - ldr r3, _0224D688 ; =ov01_021E67BC + ldr r3, _0224D688 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D68C ; =ov02_02253914 bx r3 nop -_0224D688: .word ov01_021E67BC +_0224D688: .word Field3dObjectTaskManager_CreateTask _0224D68C: .word ov02_02253914 thumb_func_end ov02_0224D67C thumb_func_start ov02_0224D690 ov02_0224D690: ; 0x0224D690 - ldr r3, _0224D694 ; =ov01_021E683C + ldr r3, _0224D694 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224D694: .word ov01_021E683C +_0224D694: .word Field3dObjectTask_Delete thumb_func_end ov02_0224D690 thumb_func_start ov02_0224D698 @@ -16737,21 +16737,21 @@ _0224D994: thumb_func_start ov02_0224D9A4 ov02_0224D9A4: ; 0x0224D9A4 ldr r0, [r0, #4] - ldr r3, _0224D9B0 ; =ov01_021E67BC + ldr r3, _0224D9B0 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224D9B4 ; =ov02_0225395C bx r3 nop -_0224D9B0: .word ov01_021E67BC +_0224D9B0: .word Field3dObjectTaskManager_CreateTask _0224D9B4: .word ov02_0225395C thumb_func_end ov02_0224D9A4 thumb_func_start ov02_0224D9B8 ov02_0224D9B8: ; 0x0224D9B8 - ldr r3, _0224D9BC ; =ov01_021E683C + ldr r3, _0224D9BC ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224D9BC: .word ov01_021E683C +_0224D9BC: .word Field3dObjectTask_Delete thumb_func_end ov02_0224D9B8 thumb_func_start ov02_0224D9C0 @@ -17103,39 +17103,39 @@ _0224DC60: .word ov02_0224D1DC thumb_func_start ov02_0224DC64 ov02_0224DC64: ; 0x0224DC64 ldr r0, [r0, #4] - ldr r3, _0224DC70 ; =ov01_021E67BC + ldr r3, _0224DC70 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224DC74 ; =ov02_022539A4 bx r3 nop -_0224DC70: .word ov01_021E67BC +_0224DC70: .word Field3dObjectTaskManager_CreateTask _0224DC74: .word ov02_022539A4 thumb_func_end ov02_0224DC64 thumb_func_start ov02_0224DC78 ov02_0224DC78: ; 0x0224DC78 ldr r0, [r0, #4] - ldr r3, _0224DC84 ; =ov01_021E67BC + ldr r3, _0224DC84 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224DC88 ; =ov02_0225392C bx r3 nop -_0224DC84: .word ov01_021E67BC +_0224DC84: .word Field3dObjectTaskManager_CreateTask _0224DC88: .word ov02_0225392C thumb_func_end ov02_0224DC78 thumb_func_start ov02_0224DC8C ov02_0224DC8C: ; 0x0224DC8C - ldr r3, _0224DC90 ; =ov01_021E683C + ldr r3, _0224DC90 ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224DC90: .word ov01_021E683C +_0224DC90: .word Field3dObjectTask_Delete thumb_func_end ov02_0224DC8C thumb_func_start ov02_0224DC94 ov02_0224DC94: ; 0x0224DC94 push {r3, lr} - bl ov01_021E687C + bl Field3dObjectTask_GetData ldr r1, _0224DCAC ; =0x00000113 ldrb r0, [r0, r1] cmp r0, #1 @@ -17314,33 +17314,33 @@ _0224DDD0: thumb_func_start ov02_0224DDE0 ov02_0224DDE0: ; 0x0224DDE0 ldr r0, [r0, #4] - ldr r3, _0224DDEC ; =ov01_021E67BC + ldr r3, _0224DDEC ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224DDF0 ; =ov02_022539D4 bx r3 nop -_0224DDEC: .word ov01_021E67BC +_0224DDEC: .word Field3dObjectTaskManager_CreateTask _0224DDF0: .word ov02_022539D4 thumb_func_end ov02_0224DDE0 thumb_func_start ov02_0224DDF4 ov02_0224DDF4: ; 0x0224DDF4 ldr r0, [r0, #4] - ldr r3, _0224DE00 ; =ov01_021E67BC + ldr r3, _0224DE00 ; =Field3dObjectTaskManager_CreateTask ldr r0, [r0, #4] ldr r1, _0224DE04 ; =ov02_022539EC bx r3 nop -_0224DE00: .word ov01_021E67BC +_0224DE00: .word Field3dObjectTaskManager_CreateTask _0224DE04: .word ov02_022539EC thumb_func_end ov02_0224DDF4 thumb_func_start ov02_0224DE08 ov02_0224DE08: ; 0x0224DE08 - ldr r3, _0224DE0C ; =ov01_021E683C + ldr r3, _0224DE0C ; =Field3dObjectTask_Delete bx r3 .balign 4, 0 -_0224DE0C: .word ov01_021E683C +_0224DE0C: .word Field3dObjectTask_Delete thumb_func_end ov02_0224DE08 thumb_func_start ov02_0224DE10 diff --git a/include/field/legend_cutscene_camera.h b/include/field/legend_cutscene_camera.h index 4fe3309de..6cbb89e4e 100644 --- a/include/field/legend_cutscene_camera.h +++ b/include/field/legend_cutscene_camera.h @@ -4,8 +4,8 @@ #include "global.h" #include "field_system.h" -void ov02_02250A60(FieldSystem *fieldSystem); -void ov02_02250AC8(FieldSystem *fieldSystem); +void LegendCutscene_BeginKimonoDance(FieldSystem *fieldSystem); +void LegendCutscene_EndKimonoDance(FieldSystem *fieldSystem); void ov02_02250AE8(FieldSystem *fieldSystem); void ov02_02250AFC(FieldSystem *fieldSystem, u8 a1); void ov02_02250B30(FieldSystem *fieldSystem); diff --git a/include/field/overlay_01_021E66E4.h b/include/field/overlay_01_021E66E4.h index 99582ce46..8f8fe68ba 100644 --- a/include/field/overlay_01_021E66E4.h +++ b/include/field/overlay_01_021E66E4.h @@ -6,39 +6,41 @@ struct FieldSystem; -typedef struct UnkStruct_Overlay01_021E66E4_subC UnkStruct_Overlay01_021E66E4_subC; +typedef struct Field3dObjectTask Field3dObjectTask; -typedef void (*Ov01_021E66E4_subC_func)(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSystem *a1, void *a2); +typedef void (*Field3dObjectTaskFunc)(Field3dObjectTask *task, struct FieldSystem *fieldSystem, void *data); -typedef struct UnkStruct_Overlay01_021E67BC_template { +typedef struct Field3dObjectTaskTemplate { int taskPriority; u16 dataSize; - Ov01_021E66E4_subC_func initFunc; - Ov01_021E66E4_subC_func destroyFunc; - Ov01_021E66E4_subC_func buildFunc; - Ov01_021E66E4_subC_func renderFunc; -} UnkStruct_Overlay01_021E67BC_template; + Field3dObjectTaskFunc initFunc; + Field3dObjectTaskFunc destroyFunc; + Field3dObjectTaskFunc updateFunc; + Field3dObjectTaskFunc renderFunc; +} Field3dObjectTaskTemplate; -struct UnkStruct_Overlay01_021E66E4_subC { - BOOL inUse; +struct Field3dObjectTask { + struct Field3dObjectTaskManager *manager; SysTask *mainTask; SysTask *g3dRenderTask; - const UnkStruct_Overlay01_021E67BC_template *param; + const Field3dObjectTaskTemplate *param; void *data; }; -typedef struct UnkStruct_Overlay01_021E66E4 { +typedef struct Field3dObjectTaskManager { struct FieldSystem *fieldSystem; HeapID heapId; int max; - UnkStruct_Overlay01_021E66E4_subC *tasks; + Field3dObjectTask *tasks; SysTaskQueue *taskQueue; -} UnkStruct_Overlay01_021E66E4; +} Field3dObjectTaskManager; // @red031000: struct keyword is necessary because cannot double-typedef and cannot circular include -UnkStruct_Overlay01_021E66E4 *ov01_021E66E4(struct FieldSystem *a0, HeapID heapId, int num); -UnkStruct_Overlay01_021E66E4_subC *ov01_021E67BC(UnkStruct_Overlay01_021E66E4 *a0, const UnkStruct_Overlay01_021E67BC_template *a1); // Create -void ov01_021E683C(UnkStruct_Overlay01_021E66E4_subC *a0); // Destroy -void *ov01_021E687C(UnkStruct_Overlay01_021E66E4_subC *a0); // GetData +Field3dObjectTaskManager *Field3dObjectTaskManager_Create(struct FieldSystem *fieldSystem, HeapID heapId, int num); +void Field3dObjectTaskManager_Delete(Field3dObjectTaskManager *manager); +void Field3dObjectTaskManager_RunDrawTasks(Field3dObjectTaskManager *manager); +Field3dObjectTask *Field3dObjectTaskManager_CreateTask(Field3dObjectTaskManager *manager, const Field3dObjectTaskTemplate *template); +void Field3dObjectTask_Delete(Field3dObjectTask *task); +void *Field3dObjectTask_GetData(Field3dObjectTask *task); #endif //POKEHEARTGOLD_FIELD_OVERLAY_01_021E66E4_H diff --git a/include/field_system.h b/include/field_system.h index 5adc87e09..0036b24ba 100644 --- a/include/field_system.h +++ b/include/field_system.h @@ -103,7 +103,7 @@ struct FieldSystemUnkSub68 { typedef struct FieldSystemUnkSub4 { u32 unk0; - UnkStruct_Overlay01_021E66E4 *unk4; + Field3dObjectTaskManager *field3dObjectTaskManager; u32 unk8; void *unk_0C; // weather related? u8 unk10[0x4]; diff --git a/main.lsf b/main.lsf index 0e9d8dfab..05a6a9e9b 100644 --- a/main.lsf +++ b/main.lsf @@ -441,7 +441,7 @@ Overlay field { After main Object asm/overlay_01_021E5900.o - Object asm/overlay_01_021E66E4.o + Object src/field/overlay_01_021E66E4.o Object asm/overlay_01_021E6880.o Object asm/overlay_01_021E7FDC.o Object asm/overlay_01_021E8744.o diff --git a/src/field/legend_cutscene_camera.c b/src/field/legend_cutscene_camera.c index 2073009a7..5c1d30c9f 100644 --- a/src/field/legend_cutscene_camera.c +++ b/src/field/legend_cutscene_camera.c @@ -12,11 +12,11 @@ #include "fielddata/script/scr_seq/event_D17R0110.h" typedef struct KimonoDanceCutsceneCamera { - UnkStruct_Overlay01_021E66E4 *unk_00; - UnkStruct_Overlay01_021E66E4_subC *unk_04; + Field3dObjectTaskManager *field3dObjectTaskManager; + Field3dObjectTask *draw3dTask; GFCameraTranslationWrapper *translation; - VecFx32 unk_0C; - VecFx32 unk_18; + VecFx32 lookAtTarget; + VecFx32 lookAtPos; int gameVersion; } KimonoDanceCutsceneCamera; // size: 0x28 @@ -31,13 +31,13 @@ typedef struct LugiaArrivesCutsceneCamera { GFCameraTranslationWrapper *translation; } LugiaArrivesCutsceneCamera; -typedef struct UnkStruct_ov02_02250BB0_sub38C { +typedef struct KimonoDanceCutscene3dObjectTaskData_SoulSilver { Field3dModel model; Field3DModelAnimation anims[2]; Field3dObject object; -} UnkStruct_ov02_02250BB0_sub38C; +} KimonoDanceCutscene3dObjectTaskData_SoulSilver; -typedef struct UnkStruct_ov02_02250BB0_sub43C { +typedef struct KimonoDanceCutscene3dObjectTaskData_HeartGold { NNSG2dScreenData *bg2ScrnData[6]; NNSG2dScreenData *bg3ScrnData[6]; void *bg2ScrnRaw[6]; @@ -48,10 +48,10 @@ typedef struct UnkStruct_ov02_02250BB0_sub43C { u8 switchTilemapDelayTimer; BgConfig *bgConfig; int tilemapIndex; -} UnkStruct_ov02_02250BB0_sub43C; +} KimonoDanceCutscene3dObjectTaskData_HeartGold; -typedef struct UnkStruct_ov02_02250BB0 { - NNSFndAllocator unk_000; +typedef struct KimonoDanceCutscene3dObjectTaskData { + NNSFndAllocator allocator; u8 state; u8 unk_011; u16 gameVersion; @@ -64,20 +64,20 @@ typedef struct UnkStruct_ov02_02250BB0 { Field3dObject unk_0BC; Field3dObject unk_134; Field3dObject unk_1AC[4]; - UnkStruct_ov02_02250BB0_sub38C unk_38C; - UnkStruct_ov02_02250BB0_sub43C unk_43C; + KimonoDanceCutscene3dObjectTaskData_SoulSilver unk_38C; + KimonoDanceCutscene3dObjectTaskData_HeartGold unk_43C; SysTask *unk_4A8; u32 unk_4AC; const CameraParam *cameraParam; const VecFx32 *cameraOffset; -} UnkStruct_ov02_02250BB0; // size: 0x4B8 +} KimonoDanceCutscene3dObjectTaskData; // size: 0x4B8 typedef struct UnkStruct_ov02_02250B80 { - NNSFndAllocator unk_00; - Field3dModel unk_10; - Field3DModelAnimation unk_20[3]; - Field3dObject unk_5C; - int unk_D4; + NNSFndAllocator allocator; + Field3dModel model; + Field3DModelAnimation anims[3]; + Field3dObject object; + int eyeGlimmerDelayTimer; } UnkStruct_ov02_02250B80; typedef struct UnkStruct_ov02_022515A4 { @@ -85,26 +85,26 @@ typedef struct UnkStruct_ov02_022515A4 { fx32 unk_04; u16 unk_08; u16 unk_0A; - NNSFndAllocator unk_0C; - Field3dModel unk_1C; - Field3DModelAnimation unk_2C[3]; - Field3dObject unk_68; + NNSFndAllocator allocator; + Field3dModel model; + Field3DModelAnimation anims[3]; + Field3dObject object; u16 gameVersion; u16 unk_E2; } UnkStruct_ov02_022515A4; static void ov02_02250B44(FieldSystem *fieldSystem); static BOOL ov02_02250B58(TaskManager *taskman); -static void ov02_02250BB0(KimonoDanceCutsceneCamera *cam); -static void ov02_02250BC4(UnkStruct_Overlay01_021E66E4_subC *a0, FieldSystem *a1, void *a2); -static void ov02_02250EC0(UnkStruct_Overlay01_021E66E4_subC *a0, FieldSystem *fieldSystem, void *a2); -static void ov02_02250F1C(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSystem *a1, void *a2); -static void ov02_02250FE0(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSystem *a1, void *a2); -static void ov02_02251018(UnkStruct_ov02_02250BB0 *a0); +static void KimonoDanceCutscene_CreateField3dObjectTask(KimonoDanceCutsceneCamera *cam); +static void Field3dObjectTaskInit_KimonoDanceCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData); +static void Field3dObjectTaskDestroy_KimonoDanceCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData); +static void Field3dObjectTaskUpdate_KimonoDanceCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData); +static void Field3dObjectTaskRender_KimonoDanceCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData); +static void ov02_02251018(KimonoDanceCutscene3dObjectTaskData *a0); static void modelAnimListSetFrameIndex(Field3DModelAnimation *animation, u32 num, fx32 frame); static BOOL modelAnimListAdvanceNoLoop(Field3DModelAnimation *animation, u32 num); static void modelAnimListAdvanceLooping(Field3DModelAnimation *animation, u32 num); -static void ov02_02251164(UnkStruct_ov02_02250BB0 *a0, int a1); +static void ov02_02251164(KimonoDanceCutscene3dObjectTaskData *a0, int a1); static void ov02_022511AC(HeapID heapId, FieldSystem *fieldSystem, UnkStruct_ov02_02250B80 *a2); static void ov02_02251280(UnkStruct_ov02_02250B80 *a0); static BOOL ov02_022512AC(TaskManager *taskman); @@ -115,17 +115,17 @@ static void ov02_022518F8(FieldSystem *fieldSystem); static void ov02_022519B0(FieldSystem *fieldSystem); static void ov02_02251BA8(SysTask *task, void *taskData); static void ov02_02251BC4(SysTask *task, void *taskData); -static void ov02_02251B4C(UnkStruct_ov02_02250BB0 *unk); -static void ov02_02251B70(UnkStruct_ov02_02250BB0 *unk); +static void ov02_02251B4C(KimonoDanceCutscene3dObjectTaskData *unk); +static void ov02_02251B70(KimonoDanceCutscene3dObjectTaskData *unk); static BOOL ov02_02251E44(TaskManager *taskman); -static const UnkStruct_Overlay01_021E67BC_template ov02_02253B4C = { +static const Field3dObjectTaskTemplate sField3dObjectTaskTemplate_KimonoDanceCutscene = { 3, - sizeof(UnkStruct_ov02_02250BB0), - ov02_02250BC4, - ov02_02250EC0, - ov02_02250F1C, - ov02_02250FE0, + sizeof(KimonoDanceCutscene3dObjectTaskData), + Field3dObjectTaskInit_KimonoDanceCutscene, + Field3dObjectTaskDestroy_KimonoDanceCutscene, + Field3dObjectTaskUpdate_KimonoDanceCutscene, + Field3dObjectTaskRender_KimonoDanceCutscene, }; static const CameraParam sCameraParam_HeartGold[] = { @@ -223,7 +223,7 @@ static const u8 sBg2TilemapFileIDs[] = { 46, }; -void ov02_02250A60(FieldSystem *fieldSystem) { +void LegendCutscene_BeginKimonoDance(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam; fieldSystem->unk4->legendCutsceneCamera = AllocFromHeapAtEnd(HEAP_ID_4, sizeof(KimonoDanceCutsceneCamera)); @@ -231,13 +231,13 @@ void ov02_02250A60(FieldSystem *fieldSystem) { cam->translation = CreateCameraTranslationWrapper(HEAP_ID_4, fieldSystem->camera); cam->gameVersion = gGameVersion; - cam->unk_0C = Camera_GetLookAtCamTarget(fieldSystem->camera); - cam->unk_18 = Camera_GetLookAtCamPos(fieldSystem->camera); - cam->unk_00 = fieldSystem->unk4->unk4; - ov02_02250BB0(cam); + cam->lookAtTarget = Camera_GetLookAtCamTarget(fieldSystem->camera); + cam->lookAtPos = Camera_GetLookAtCamPos(fieldSystem->camera); + cam->field3dObjectTaskManager = fieldSystem->unk4->field3dObjectTaskManager; + KimonoDanceCutscene_CreateField3dObjectTask(cam); } -void ov02_02250AC8(FieldSystem *fieldSystem) { +void LegendCutscene_EndKimonoDance(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; DeleteCameraTranslationWrapper(cam->translation); FreeToHeap(fieldSystem->unk4->legendCutsceneCamera); @@ -246,19 +246,19 @@ void ov02_02250AC8(FieldSystem *fieldSystem) { void ov02_02250AE8(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); - unk->state = 1; + KimonoDanceCutscene3dObjectTaskData *draw3dTaskData = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); + draw3dTaskData->state = 1; } void ov02_02250AFC(FieldSystem *fieldSystem, u8 a1) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); - if (unk->state != 3) { + KimonoDanceCutscene3dObjectTaskData *draw3dTaskData = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); + if (draw3dTaskData->state != 3) { GF_ASSERT(FALSE); TaskManager_Call(fieldSystem->taskman, ov02_02250B58, NULL); return; } - unk->unk_011 = a1; + draw3dTaskData->unk_011 = a1; ov02_02250B44(fieldSystem); } @@ -268,14 +268,14 @@ void ov02_02250B30(FieldSystem *fieldSystem) { static void ov02_02250B44(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *unk = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); unk->state = 4; } static BOOL ov02_02250B58(TaskManager *taskman) { FieldSystem *fieldSystem = TaskManager_GetFieldSystem(taskman); KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *unk = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); if (unk->state == 3) { ov02_02250B44(fieldSystem); return TRUE; @@ -286,86 +286,86 @@ static BOOL ov02_02250B58(TaskManager *taskman) { void ov02_02250B80(FieldSystem *fieldSystem) { UnkStruct_ov02_02250B80 *unk = AllocFromHeapAtEnd(HEAP_ID_4, sizeof(UnkStruct_ov02_02250B80)); - unk->unk_D4 = 0; + unk->eyeGlimmerDelayTimer = 0; ov02_022511AC(HEAP_ID_4, fieldSystem, unk); TaskManager_Call(fieldSystem->taskman, ov02_022512AC, unk); } -static void ov02_02250BB0(KimonoDanceCutsceneCamera *cam) { - cam->unk_04 = ov01_021E67BC(cam->unk_00, &ov02_02253B4C); +static void KimonoDanceCutscene_CreateField3dObjectTask(KimonoDanceCutsceneCamera *cam) { + cam->draw3dTask = Field3dObjectTaskManager_CreateTask(cam->field3dObjectTaskManager, &sField3dObjectTaskTemplate_KimonoDanceCutscene); } -static void ov02_02250BC4(UnkStruct_Overlay01_021E66E4_subC *a0, FieldSystem *fieldSystem, void *a2) { - UnkStruct_ov02_02250BB0 *r5 = (UnkStruct_ov02_02250BB0 *)a2; +static void Field3dObjectTaskInit_KimonoDanceCutscene(Field3dObjectTask *task, FieldSystem *fieldSystem, void *taskData) { + KimonoDanceCutscene3dObjectTaskData *kimonoDanceObjData = (KimonoDanceCutscene3dObjectTaskData *)taskData; KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - r5->gameVersion = cam->gameVersion; - GF_ExpHeap_FndInitAllocator(&r5->unk_000, HEAP_ID_4, 0x20); - Field3dModel_LoadFromFilesystem(&r5->unk_014, NARC_a_1_7_4, 18, HEAP_ID_4); - Field3dModel_LoadFromFilesystem(&r5->unk_024, NARC_a_1_7_4, 25, HEAP_ID_4); - Field3dModel_LoadFromFilesystem(&r5->unk_034, NARC_a_1_7_4, 32, HEAP_ID_4); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_044[0], &r5->unk_014, NARC_a_1_7_4, 19, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_044[1], &r5->unk_014, NARC_a_1_7_4, 20, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_044[2], &r5->unk_014, NARC_a_1_7_4, 21, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_080[0], &r5->unk_024, NARC_a_1_7_4, 26, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_080[1], &r5->unk_024, NARC_a_1_7_4, 27, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&r5->unk_0A8[0], &r5->unk_034, NARC_a_1_7_4, 33, HEAP_ID_4, &r5->unk_000); - Field3dObject_InitFromModel(&r5->unk_0BC, &r5->unk_014); - Field3dObject_InitFromModel(&r5->unk_134, &r5->unk_024); - Field3dObject_AddAnimation(&r5->unk_0BC, &r5->unk_044[0]); - Field3dObject_AddAnimation(&r5->unk_0BC, &r5->unk_044[1]); - Field3dObject_AddAnimation(&r5->unk_0BC, &r5->unk_044[2]); - Field3dObject_AddAnimation(&r5->unk_134, &r5->unk_080[0]); - Field3dObject_AddAnimation(&r5->unk_134, &r5->unk_080[1]); - Field3dObject_SetActiveFlag(&r5->unk_0BC, FALSE); - Field3dObject_SetActiveFlag(&r5->unk_134, FALSE); + kimonoDanceObjData->gameVersion = cam->gameVersion; + GF_ExpHeap_FndInitAllocator(&kimonoDanceObjData->allocator, HEAP_ID_4, 0x20); + Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->unk_014, NARC_a_1_7_4, 18, HEAP_ID_4); + Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->unk_024, NARC_a_1_7_4, 25, HEAP_ID_4); + Field3dModel_LoadFromFilesystem(&kimonoDanceObjData->unk_034, NARC_a_1_7_4, 32, HEAP_ID_4); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[0], &kimonoDanceObjData->unk_014, NARC_a_1_7_4, 19, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[1], &kimonoDanceObjData->unk_014, NARC_a_1_7_4, 20, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_044[2], &kimonoDanceObjData->unk_014, NARC_a_1_7_4, 21, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_080[0], &kimonoDanceObjData->unk_024, NARC_a_1_7_4, 26, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_080[1], &kimonoDanceObjData->unk_024, NARC_a_1_7_4, 27, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dModelAnimation_LoadFromFilesystem(&kimonoDanceObjData->unk_0A8[0], &kimonoDanceObjData->unk_034, NARC_a_1_7_4, 33, HEAP_ID_4, &kimonoDanceObjData->allocator); + Field3dObject_InitFromModel(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_014); + Field3dObject_InitFromModel(&kimonoDanceObjData->unk_134, &kimonoDanceObjData->unk_024); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[0]); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[1]); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_0BC, &kimonoDanceObjData->unk_044[2]); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_134, &kimonoDanceObjData->unk_080[0]); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_134, &kimonoDanceObjData->unk_080[1]); + Field3dObject_SetActiveFlag(&kimonoDanceObjData->unk_0BC, FALSE); + Field3dObject_SetActiveFlag(&kimonoDanceObjData->unk_134, FALSE); for (u8 i = 0; i < 4; ++i) { - Field3dObject_InitFromModel(&r5->unk_1AC[i], &r5->unk_034); - Field3dObject_AddAnimation(&r5->unk_1AC[i], &r5->unk_0A8[0]); - Field3dObject_SetActiveFlag(&r5->unk_1AC[i], FALSE); + Field3dObject_InitFromModel(&kimonoDanceObjData->unk_1AC[i], &kimonoDanceObjData->unk_034); + Field3dObject_AddAnimation(&kimonoDanceObjData->unk_1AC[i], &kimonoDanceObjData->unk_0A8[0]); + Field3dObject_SetActiveFlag(&kimonoDanceObjData->unk_1AC[i], FALSE); } - modelAnimListSetFrameIndex(r5->unk_044, 3, 0); - modelAnimListSetFrameIndex(r5->unk_080, 2, 0); - modelAnimListSetFrameIndex(r5->unk_0A8, 1, 0); + modelAnimListSetFrameIndex(kimonoDanceObjData->unk_044, 3, 0); + modelAnimListSetFrameIndex(kimonoDanceObjData->unk_080, 2, 0); + modelAnimListSetFrameIndex(kimonoDanceObjData->unk_0A8, 1, 0); VecFx32 pos; MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &pos); - Field3dObj_SetPosEx(&r5->unk_0BC, pos.x, pos.y, pos.z); - Field3dObj_SetPosEx(&r5->unk_134, pos.x, pos.y, pos.z); - if (r5->gameVersion == VERSION_SOULSILVER) { - Field3dObj_SetPosEx(&r5->unk_1AC[0], pos.x + FX32_CONST(128), pos.y + FX32_CONST(32), pos.z - FX32_CONST(180)); - Field3dObj_SetPosEx(&r5->unk_1AC[1], pos.x - FX32_CONST(128), pos.y + FX32_CONST(32), pos.z - FX32_CONST(180)); - Field3dObj_SetPosEx(&r5->unk_1AC[2], 0, 0, 0); - Field3dObj_SetPosEx(&r5->unk_1AC[3], 0, 0, 0); - r5->unk_4AC = 0x131; - r5->cameraParam = sCameraParam_SoulSilver; - r5->cameraOffset = sCameraOffset_SoulSilver; + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_0BC, pos.x, pos.y, pos.z); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_134, pos.x, pos.y, pos.z); + if (kimonoDanceObjData->gameVersion == VERSION_SOULSILVER) { + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[0], pos.x + FX32_CONST(128), pos.y + FX32_CONST(32), pos.z - FX32_CONST(180)); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[1], pos.x - FX32_CONST(128), pos.y + FX32_CONST(32), pos.z - FX32_CONST(180)); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[2], 0, 0, 0); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[3], 0, 0, 0); + kimonoDanceObjData->unk_4AC = 0x131; + kimonoDanceObjData->cameraParam = sCameraParam_SoulSilver; + kimonoDanceObjData->cameraOffset = sCameraOffset_SoulSilver; } else { - Field3dObj_SetPosEx(&r5->unk_1AC[0], pos.x + FX32_CONST(200), pos.y - FX32_CONST(73), pos.z + FX32_CONST(144)); - Field3dObj_SetPosEx(&r5->unk_1AC[1], pos.x - FX32_CONST(198), pos.y - FX32_CONST(73), pos.z + FX32_CONST(144)); - Field3dObj_SetPosEx(&r5->unk_1AC[2], pos.x + FX32_CONST(200), pos.y - FX32_CONST(73), pos.z - FX32_CONST(270)); - Field3dObj_SetPosEx(&r5->unk_1AC[3], pos.x - FX32_CONST(198), pos.y - FX32_CONST(73), pos.z - FX32_CONST(270)); - r5->unk_4AC = 0x130; - r5->cameraParam = sCameraParam_HeartGold; - r5->cameraOffset = sCameraOffset_HeartGold; + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[0], pos.x + FX32_CONST(200), pos.y - FX32_CONST(73), pos.z + FX32_CONST(144)); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[1], pos.x - FX32_CONST(198), pos.y - FX32_CONST(73), pos.z + FX32_CONST(144)); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[2], pos.x + FX32_CONST(200), pos.y - FX32_CONST(73), pos.z - FX32_CONST(270)); + Field3dObj_SetPosEx(&kimonoDanceObjData->unk_1AC[3], pos.x - FX32_CONST(198), pos.y - FX32_CONST(73), pos.z - FX32_CONST(270)); + kimonoDanceObjData->unk_4AC = 0x130; + kimonoDanceObjData->cameraParam = sCameraParam_HeartGold; + kimonoDanceObjData->cameraOffset = sCameraOffset_HeartGold; } - r5->state = 0; + kimonoDanceObjData->state = 0; } -static void ov02_02250EC0(UnkStruct_Overlay01_021E66E4_subC *a0, FieldSystem *fieldSystem, void *a2) { - UnkStruct_ov02_02250BB0 *r4 = (UnkStruct_ov02_02250BB0 *)a2; - Field3dModelAnimation_Unload(&r4->unk_044[2], &r4->unk_000); - Field3dModelAnimation_Unload(&r4->unk_044[1], &r4->unk_000); - Field3dModelAnimation_Unload(&r4->unk_044[0], &r4->unk_000); - Field3dModelAnimation_Unload(&r4->unk_080[1], &r4->unk_000); - Field3dModelAnimation_Unload(&r4->unk_080[0], &r4->unk_000); - Field3dModelAnimation_Unload(&r4->unk_0A8[0], &r4->unk_000); +static void Field3dObjectTaskDestroy_KimonoDanceCutscene(Field3dObjectTask *a0, FieldSystem *fieldSystem, void *a2) { + KimonoDanceCutscene3dObjectTaskData *r4 = (KimonoDanceCutscene3dObjectTaskData *)a2; + Field3dModelAnimation_Unload(&r4->unk_044[2], &r4->allocator); + Field3dModelAnimation_Unload(&r4->unk_044[1], &r4->allocator); + Field3dModelAnimation_Unload(&r4->unk_044[0], &r4->allocator); + Field3dModelAnimation_Unload(&r4->unk_080[1], &r4->allocator); + Field3dModelAnimation_Unload(&r4->unk_080[0], &r4->allocator); + Field3dModelAnimation_Unload(&r4->unk_0A8[0], &r4->allocator); Field3dModel_Unload(&r4->unk_014); Field3dModel_Unload(&r4->unk_024); Field3dModel_Unload(&r4->unk_034); } -static void ov02_02250F1C(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSystem *a1, void *a2) { - UnkStruct_ov02_02250BB0 *r4 = (UnkStruct_ov02_02250BB0 *)a2; +static void Field3dObjectTaskUpdate_KimonoDanceCutscene(Field3dObjectTask *a0, struct FieldSystem *a1, void *a2) { + KimonoDanceCutscene3dObjectTaskData *r4 = (KimonoDanceCutscene3dObjectTaskData *)a2; switch (r4->state) { case 0: @@ -402,8 +402,8 @@ static void ov02_02250F1C(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSys } } -static void ov02_02250FE0(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSystem *a1, void *a2) { - UnkStruct_ov02_02250BB0 *r4 = (UnkStruct_ov02_02250BB0 *)a2; +static void Field3dObjectTaskRender_KimonoDanceCutscene(Field3dObjectTask *a0, struct FieldSystem *a1, void *a2) { + KimonoDanceCutscene3dObjectTaskData *r4 = (KimonoDanceCutscene3dObjectTaskData *)a2; Field3dObj_Draw(&r4->unk_0BC); Field3dObj_Draw(&r4->unk_134); @@ -412,16 +412,16 @@ static void ov02_02250FE0(UnkStruct_Overlay01_021E66E4_subC *a0, struct FieldSys } } -static void ov02_02251018(UnkStruct_ov02_02250BB0 *a0) { +static void ov02_02251018(KimonoDanceCutscene3dObjectTaskData *a0) { Field3dObject_RemoveAnimation(&a0->unk_0BC, &a0->unk_044[0]); Field3dObject_RemoveAnimation(&a0->unk_0BC, &a0->unk_044[1]); Field3dObject_RemoveAnimation(&a0->unk_0BC, &a0->unk_044[2]); - Field3dModelAnimation_Unload(&a0->unk_044[2], &a0->unk_000); - Field3dModelAnimation_Unload(&a0->unk_044[1], &a0->unk_000); - Field3dModelAnimation_Unload(&a0->unk_044[0], &a0->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[0], &a0->unk_014, NARC_a_1_7_4, 22, HEAP_ID_4, &a0->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[1], &a0->unk_014, NARC_a_1_7_4, 23, HEAP_ID_4, &a0->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[2], &a0->unk_014, NARC_a_1_7_4, 24, HEAP_ID_4, &a0->unk_000); + Field3dModelAnimation_Unload(&a0->unk_044[2], &a0->allocator); + Field3dModelAnimation_Unload(&a0->unk_044[1], &a0->allocator); + Field3dModelAnimation_Unload(&a0->unk_044[0], &a0->allocator); + Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[0], &a0->unk_014, NARC_a_1_7_4, 22, HEAP_ID_4, &a0->allocator); + Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[1], &a0->unk_014, NARC_a_1_7_4, 23, HEAP_ID_4, &a0->allocator); + Field3dModelAnimation_LoadFromFilesystem(&a0->unk_044[2], &a0->unk_014, NARC_a_1_7_4, 24, HEAP_ID_4, &a0->allocator); Field3dObject_AddAnimation(&a0->unk_0BC, &a0->unk_044[0]); Field3dObject_AddAnimation(&a0->unk_0BC, &a0->unk_044[1]); Field3dObject_AddAnimation(&a0->unk_0BC, &a0->unk_044[2]); @@ -450,7 +450,7 @@ static void modelAnimListAdvanceLooping(Field3DModelAnimation *animation, u32 nu } } -static void ov02_02251164(UnkStruct_ov02_02250BB0 *a0, int a1) { +static void ov02_02251164(KimonoDanceCutscene3dObjectTaskData *a0, int a1) { u32 r5 = a0->gameVersion == VERSION_SOULSILVER ? 2 : 4; Field3dObject_SetActiveFlag(&a0->unk_134, a1); if (!a0->unk_011) { @@ -461,30 +461,30 @@ static void ov02_02251164(UnkStruct_ov02_02250BB0 *a0, int a1) { } static void ov02_022511AC(HeapID heapId, FieldSystem *fieldSystem, UnkStruct_ov02_02250B80 *a2) { - GF_ExpHeap_FndInitAllocator(&a2->unk_00, heapId, 0x20); - Field3dModel_LoadFromFilesystem(&a2->unk_10, NARC_a_1_7_4, 28, heapId); - Field3dModelAnimation_LoadFromFilesystem(&a2->unk_20[0], &a2->unk_10, NARC_a_1_7_4, 29, heapId, &a2->unk_00); - Field3dModelAnimation_LoadFromFilesystem(&a2->unk_20[1], &a2->unk_10, NARC_a_1_7_4, 30, heapId, &a2->unk_00); - Field3dModelAnimation_LoadFromFilesystem(&a2->unk_20[2], &a2->unk_10, NARC_a_1_7_4, 31, heapId, &a2->unk_00); - Field3dObject_InitFromModel(&a2->unk_5C, &a2->unk_10); - Field3dObject_AddAnimation(&a2->unk_5C, &a2->unk_20[0]); - Field3dObject_AddAnimation(&a2->unk_5C, &a2->unk_20[1]); - Field3dObject_AddAnimation(&a2->unk_5C, &a2->unk_20[2]); - modelAnimListSetFrameIndex(a2->unk_20, 3, 0); + GF_ExpHeap_FndInitAllocator(&a2->allocator, heapId, 0x20); + Field3dModel_LoadFromFilesystem(&a2->model, NARC_a_1_7_4, 28, heapId); + Field3dModelAnimation_LoadFromFilesystem(&a2->anims[0], &a2->model, NARC_a_1_7_4, 29, heapId, &a2->allocator); + Field3dModelAnimation_LoadFromFilesystem(&a2->anims[1], &a2->model, NARC_a_1_7_4, 30, heapId, &a2->allocator); + Field3dModelAnimation_LoadFromFilesystem(&a2->anims[2], &a2->model, NARC_a_1_7_4, 31, heapId, &a2->allocator); + Field3dObject_InitFromModel(&a2->object, &a2->model); + Field3dObject_AddAnimation(&a2->object, &a2->anims[0]); + Field3dObject_AddAnimation(&a2->object, &a2->anims[1]); + Field3dObject_AddAnimation(&a2->object, &a2->anims[2]); + modelAnimListSetFrameIndex(a2->anims, 3, 0); VecFx32 pos; MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &pos); pos.y += FX32_CONST(100); pos.z -= FX32_CONST(350); - Field3dObj_SetPosEx(&a2->unk_5C, pos.x, pos.y, pos.z); - Field3dObject_SetActiveFlag(&a2->unk_5C, TRUE); + Field3dObj_SetPosEx(&a2->object, pos.x, pos.y, pos.z); + Field3dObject_SetActiveFlag(&a2->object, TRUE); } static void ov02_02251280(UnkStruct_ov02_02250B80 *a0) { - Field3dModelAnimation_Unload(&a0->unk_20[2], &a0->unk_00); - Field3dModelAnimation_Unload(&a0->unk_20[1], &a0->unk_00); - Field3dModelAnimation_Unload(&a0->unk_20[0], &a0->unk_00); - Field3dModel_Unload(&a0->unk_10); + Field3dModelAnimation_Unload(&a0->anims[2], &a0->allocator); + Field3dModelAnimation_Unload(&a0->anims[1], &a0->allocator); + Field3dModelAnimation_Unload(&a0->anims[0], &a0->allocator); + Field3dModel_Unload(&a0->model); } static BOOL ov02_022512AC(TaskManager *taskman) { @@ -493,14 +493,14 @@ static BOOL ov02_022512AC(TaskManager *taskman) { switch (*pState) { case 0: - ++unk->unk_D4; - if (unk->unk_D4 == 2) { + ++unk->eyeGlimmerDelayTimer; + if (unk->eyeGlimmerDelayTimer == 2) { PlaySE(SEQ_SE_GS_RUGIA_MENOHIKARI); } - if (modelAnimListAdvanceNoLoop(unk->unk_20, 3)) { + if (modelAnimListAdvanceNoLoop(unk->anims, 3)) { ++(*pState); } - Field3dObj_Draw(&unk->unk_5C); + Field3dObj_Draw(&unk->object); break; case 1: ov02_02251280(unk); @@ -517,7 +517,7 @@ static BOOL ov02_02251320(TaskManager *taskman) { NNSG3dRenderObj *r7; u8 i; KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *r5 = ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *r5 = Field3dObjectTask_GetData(cam->draw3dTask); switch (*pState) { case 0: @@ -553,12 +553,12 @@ static BOOL ov02_02251320(TaskManager *taskman) { void ov02_02251424(FieldSystem *fieldSystem, u8 a1) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *r4 = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *r4 = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); GF_ASSERT(a1 < 3); - Camera_SetLookAtCamTarget(&cam->unk_0C, fieldSystem->camera); - Camera_SetLookAtCamPos(&cam->unk_18, fieldSystem->camera); + Camera_SetLookAtCamTarget(&cam->lookAtTarget, fieldSystem->camera); + Camera_SetLookAtCamPos(&cam->lookAtPos, fieldSystem->camera); Camera_SetDistance(r4->cameraParam[a1].distance, fieldSystem->camera); Camera_SetAnglePos(&r4->cameraParam[a1].angle, fieldSystem->camera); Camera_SetPerspectiveAngle(r4->cameraParam[a1].perspective, fieldSystem->camera); @@ -573,7 +573,7 @@ void ov02_02251424(FieldSystem *fieldSystem, u8 a1) { void ov02_022514C8(FieldSystem *fieldSystem, u8 a1) { int duration; KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *r6 = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *r6 = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); CameraTranslationPathTemplate template; int whichPoint = a1 == 0 ? 0 : 3; @@ -623,7 +623,7 @@ void ov02_022515A4(FieldSystem *fieldSystem) { static BOOL ov02_022515D0(TaskManager *taskman) { int species; - int spC; + int firstFlapDelay; int flapSfx; int mapObjectId; LocalMapObject *mapObject; @@ -634,12 +634,12 @@ static BOOL ov02_022515D0(TaskManager *taskman) { if (unk->gameVersion == VERSION_SOULSILVER) { species = SPECIES_LUGIA; mapObjectId = obj_D40R0107_lug_obj01; - spC = 18; + firstFlapDelay = 18; flapSfx = SEQ_SE_GS_RUGIA_HABATAKI; } else { species = SPECIES_HO_OH; mapObjectId = obj_D17R0110_hou_obj01; - spC = 0; + firstFlapDelay = 0; flapSfx = SEQ_SE_GS_HOUOU_HABATAKI; } @@ -648,17 +648,17 @@ static BOOL ov02_022515D0(TaskManager *taskman) { switch (*pState) { case 0: - GF_ExpHeap_FndInitAllocator(&unk->unk_0C, HEAP_ID_4, 0x20); - Field3dModel_LoadFromFilesystem(&unk->unk_1C, NARC_a_1_7_4, 34, HEAP_ID_4); - Field3dModelAnimation_LoadFromFilesystem(&unk->unk_2C[0], &unk->unk_1C, NARC_a_1_7_4, 35, HEAP_ID_4, &unk->unk_0C); - Field3dModelAnimation_LoadFromFilesystem(&unk->unk_2C[1], &unk->unk_1C, NARC_a_1_7_4, 36, HEAP_ID_4, &unk->unk_0C); - Field3dModelAnimation_LoadFromFilesystem(&unk->unk_2C[2], &unk->unk_1C, NARC_a_1_7_4, 37, HEAP_ID_4, &unk->unk_0C); - Field3dObject_InitFromModel(&unk->unk_68, &unk->unk_1C); - Field3dObject_AddAnimation(&unk->unk_68, &unk->unk_2C[0]); - Field3dObject_AddAnimation(&unk->unk_68, &unk->unk_2C[1]); - Field3dObject_AddAnimation(&unk->unk_68, &unk->unk_2C[2]); - Field3dObject_SetActiveFlag(&unk->unk_68, FALSE); - modelAnimListSetFrameIndex(unk->unk_2C,3, 0); + GF_ExpHeap_FndInitAllocator(&unk->allocator, HEAP_ID_4, 0x20); + Field3dModel_LoadFromFilesystem(&unk->model, NARC_a_1_7_4, 34, HEAP_ID_4); + Field3dModelAnimation_LoadFromFilesystem(&unk->anims[0], &unk->model, NARC_a_1_7_4, 35, HEAP_ID_4, &unk->allocator); + Field3dModelAnimation_LoadFromFilesystem(&unk->anims[1], &unk->model, NARC_a_1_7_4, 36, HEAP_ID_4, &unk->allocator); + Field3dModelAnimation_LoadFromFilesystem(&unk->anims[2], &unk->model, NARC_a_1_7_4, 37, HEAP_ID_4, &unk->allocator); + Field3dObject_InitFromModel(&unk->object, &unk->model); + Field3dObject_AddAnimation(&unk->object, &unk->anims[0]); + Field3dObject_AddAnimation(&unk->object, &unk->anims[1]); + Field3dObject_AddAnimation(&unk->object, &unk->anims[2]); + Field3dObject_SetActiveFlag(&unk->object, FALSE); + modelAnimListSetFrameIndex(unk->anims,3, 0); { VecFx32 sp2C; MapObject_GetPositionVec(PlayerAvatar_GetMapObject(fieldSystem->playerAvatar), &sp2C); @@ -668,7 +668,7 @@ static BOOL ov02_022515D0(TaskManager *taskman) { } else { sp2C.z -= FX32_CONST(280); } - Field3dObj_SetPosEx(&unk->unk_68, sp2C.x, sp2C.y, sp2C.z); + Field3dObj_SetPosEx(&unk->object, sp2C.x, sp2C.y, sp2C.z); } ++(*pState); break; @@ -692,7 +692,7 @@ static BOOL ov02_022515D0(TaskManager *taskman) { break; case 2: ++unk->unk_08; - if (unk->unk_08 >= spC) { + if (unk->unk_08 >= firstFlapDelay) { if (unk->unk_E2 == 0) { PlaySE(flapSfx); unk->unk_E2 = 24; @@ -727,7 +727,7 @@ static BOOL ov02_022515D0(TaskManager *taskman) { case 4: ++unk->unk_08; if (unk->unk_08 >= 50) { - Field3dObject_SetActiveFlag(&unk->unk_68, TRUE); + Field3dObject_SetActiveFlag(&unk->object, TRUE); PlayCry(species, 0); unk->unk_0A = 0; unk->unk_08 = 0; @@ -736,7 +736,7 @@ static BOOL ov02_022515D0(TaskManager *taskman) { break; case 5: { - BOOL animDone = modelAnimListAdvanceNoLoop(unk->unk_2C, 3); + BOOL animDone = modelAnimListAdvanceNoLoop(unk->anims, 3); ++unk->unk_0A; if (animDone && unk->unk_0A >= 65) { sub_0205F328(mapObject, 0); @@ -744,7 +744,7 @@ static BOOL ov02_022515D0(TaskManager *taskman) { ++(*pState); } } - Field3dObj_Draw(&unk->unk_68); + Field3dObj_Draw(&unk->object); break; case 6: ++unk->unk_08; @@ -753,10 +753,10 @@ static BOOL ov02_022515D0(TaskManager *taskman) { } break; case 7: - Field3dModelAnimation_Unload(&unk->unk_2C[2], &unk->unk_0C); - Field3dModelAnimation_Unload(&unk->unk_2C[1], &unk->unk_0C); - Field3dModelAnimation_Unload(&unk->unk_2C[0], &unk->unk_0C); - Field3dModel_Unload(&unk->unk_1C); + Field3dModelAnimation_Unload(&unk->anims[2], &unk->allocator); + Field3dModelAnimation_Unload(&unk->anims[1], &unk->allocator); + Field3dModelAnimation_Unload(&unk->anims[0], &unk->allocator); + Field3dModel_Unload(&unk->model); FreeToHeap(unk); return TRUE; } @@ -775,12 +775,12 @@ void ov02_022518E0(FieldSystem *fieldSystem) { static void ov02_022518F8(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *r5 = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); - UnkStruct_ov02_02250BB0_sub38C *sub_38C = &r5->unk_38C; + KimonoDanceCutscene3dObjectTaskData *r5 = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); + KimonoDanceCutscene3dObjectTaskData_SoulSilver *sub_38C = &r5->unk_38C; Field3dModel_LoadFromFilesystem(&sub_38C->model, NARC_a_1_7_4, 38, HEAP_ID_4); - Field3dModelAnimation_LoadFromFilesystem(&sub_38C->anims[0], &sub_38C->model, NARC_a_1_7_4, 39, HEAP_ID_4, &r5->unk_000); - Field3dModelAnimation_LoadFromFilesystem(&sub_38C->anims[1], &sub_38C->model, NARC_a_1_7_4, 40, HEAP_ID_4, &r5->unk_000); + Field3dModelAnimation_LoadFromFilesystem(&sub_38C->anims[0], &sub_38C->model, NARC_a_1_7_4, 39, HEAP_ID_4, &r5->allocator); + Field3dModelAnimation_LoadFromFilesystem(&sub_38C->anims[1], &sub_38C->model, NARC_a_1_7_4, 40, HEAP_ID_4, &r5->allocator); Field3dObject_InitFromModel(&sub_38C->object, &sub_38C->model); Field3dObject_AddAnimation(&sub_38C->object, &sub_38C->anims[0]); Field3dObject_AddAnimation(&sub_38C->object, &sub_38C->anims[1]); @@ -795,8 +795,8 @@ static void ov02_022518F8(FieldSystem *fieldSystem) { static void ov02_022519B0(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *sp10 = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); - UnkStruct_ov02_02250BB0_sub43C *sub_43C = &sp10->unk_43C; + KimonoDanceCutscene3dObjectTaskData *sp10 = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); + KimonoDanceCutscene3dObjectTaskData_HeartGold *sub_43C = &sp10->unk_43C; sub_43C->bgConfig = fieldSystem->bgConfig; @@ -826,7 +826,7 @@ static void ov02_022519B0(FieldSystem *fieldSystem) { void ov02_02251B14(FieldSystem *fieldSystem) { KimonoDanceCutsceneCamera *cam = fieldSystem->unk4->legendCutsceneCamera; - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)ov01_021E687C(cam->unk_04); + KimonoDanceCutscene3dObjectTaskData *unk = (KimonoDanceCutscene3dObjectTaskData *)Field3dObjectTask_GetData(cam->draw3dTask); SysTask_Destroy(unk->unk_4A8); unk->unk_4A8 = NULL; if (cam->gameVersion == VERSION_SOULSILVER) { @@ -836,15 +836,15 @@ void ov02_02251B14(FieldSystem *fieldSystem) { } } -static void ov02_02251B4C(UnkStruct_ov02_02250BB0 *unk) { - UnkStruct_ov02_02250BB0_sub38C *sub_38C = &unk->unk_38C; - Field3dModelAnimation_Unload(&sub_38C->anims[1], &unk->unk_000); - Field3dModelAnimation_Unload(&sub_38C->anims[0], &unk->unk_000); +static void ov02_02251B4C(KimonoDanceCutscene3dObjectTaskData *unk) { + KimonoDanceCutscene3dObjectTaskData_SoulSilver *sub_38C = &unk->unk_38C; + Field3dModelAnimation_Unload(&sub_38C->anims[1], &unk->allocator); + Field3dModelAnimation_Unload(&sub_38C->anims[0], &unk->allocator); Field3dModel_Unload(&sub_38C->model); } -static void ov02_02251B70(UnkStruct_ov02_02250BB0 *unk) { - UnkStruct_ov02_02250BB0_sub43C *sub_43C = &unk->unk_43C; +static void ov02_02251B70(KimonoDanceCutscene3dObjectTaskData *unk) { + KimonoDanceCutscene3dObjectTaskData_HeartGold *sub_43C = &unk->unk_43C; GfGfx_EngineATogglePlanes(GX_PLANEMASK_BG2, GF_PLANE_TOGGLE_OFF); GfGfx_EngineATogglePlanes(GX_PLANEMASK_BG3, GF_PLANE_TOGGLE_OFF); for (u8 i = 0; i < 6; ++i) { @@ -854,15 +854,15 @@ static void ov02_02251B70(UnkStruct_ov02_02250BB0 *unk) { } static void ov02_02251BA8(SysTask *task, void *taskData) { - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)taskData; - UnkStruct_ov02_02250BB0_sub38C *sub_38C = &unk->unk_38C; + KimonoDanceCutscene3dObjectTaskData *unk = (KimonoDanceCutscene3dObjectTaskData *)taskData; + KimonoDanceCutscene3dObjectTaskData_SoulSilver *sub_38C = &unk->unk_38C; modelAnimListAdvanceLooping(sub_38C->anims, 2); Field3dObj_Draw(&sub_38C->object); } static void ov02_02251BC4(SysTask *task, void *taskData) { - UnkStruct_ov02_02250BB0 *unk = (UnkStruct_ov02_02250BB0 *)taskData; - UnkStruct_ov02_02250BB0_sub43C *sub_43C = &unk->unk_43C; + KimonoDanceCutscene3dObjectTaskData *unk = (KimonoDanceCutscene3dObjectTaskData *)taskData; + KimonoDanceCutscene3dObjectTaskData_HeartGold *sub_43C = &unk->unk_43C; ++sub_43C->switchTilemapDelayTimer; if (sub_43C->switchTilemapDelayTimer >= 6) { diff --git a/src/field/overlay_01_021E66E4.c b/src/field/overlay_01_021E66E4.c new file mode 100644 index 000000000..a81468955 --- /dev/null +++ b/src/field/overlay_01_021E66E4.c @@ -0,0 +1,92 @@ +#include "global.h" +#include "field_system.h" +#include "field/overlay_01_021E66E4.h" + +static void Task_Field3dObject_Update(SysTask *task, void *taskdata); +static void Task_Field3dObject_Render(SysTask *task, void *taskData); + +Field3dObjectTaskManager *Field3dObjectTaskManager_Create(struct FieldSystem *fieldSystem, HeapID heapId, int num) { + Field3dObjectTaskManager *ret = AllocFromHeap(heapId, sizeof(Field3dObjectTaskManager)); + ret->fieldSystem = fieldSystem; + ret->heapId = heapId; + ret->max = num; + ret->tasks = AllocFromHeap(heapId, num * sizeof(Field3dObjectTask)); + MI_CpuClear32(ret->tasks, num * sizeof(Field3dObjectTask)); + ret->taskQueue = (SysTaskQueue *)AllocFromHeap(heapId, SysTaskQueue_GetArenaSize(num)); + ret->taskQueue = SysTaskQueue_PlacementNew(num, ret->taskQueue); + return ret; +} + +void Field3dObjectTaskManager_Delete(Field3dObjectTaskManager *manager) { + for (int i = 0; i < manager->max; ++i) { + Field3dObjectTask_Delete(&manager->tasks[i]); + } + FreeToHeap(manager->tasks); + FreeToHeap(manager->taskQueue); + FreeToHeap(manager); +} + +void Field3dObjectTaskManager_RunDrawTasks(Field3dObjectTaskManager *manager) { + SysTaskQueue_RunTasks(manager->taskQueue); +} + +static void Task_Field3dObject_Update(SysTask *task, void *taskData) { + Field3dObjectTask *objTask = (Field3dObjectTask *)taskData; + if (sub_0203DF8C(objTask->manager->fieldSystem)) { + if (objTask->param->updateFunc != NULL) { + objTask->param->updateFunc(objTask, objTask->manager->fieldSystem, objTask->data); + } + } +} + +static void Task_Field3dObject_Render(SysTask *task, void *taskData) { + Field3dObjectTask *objTask = (Field3dObjectTask *)taskData; + if (sub_0203DF8C(objTask->manager->fieldSystem)) { + if (objTask->param->renderFunc != NULL) { + objTask->param->renderFunc(objTask, objTask->manager->fieldSystem, objTask->data); + } + } +} + +Field3dObjectTask *Field3dObjectTaskManager_CreateTask(Field3dObjectTaskManager *manager, const Field3dObjectTaskTemplate *template) { + int i; + Field3dObjectTask *ret; + for (ret = manager->tasks, i = 0; i < manager->max; ++ret, ++i) { + if (ret->mainTask == NULL) { + ret->mainTask = SysTask_CreateOnMainQueue(Task_Field3dObject_Update, ret, template->taskPriority); + ret->g3dRenderTask = SysTaskQueue_InsertTask(manager->taskQueue, Task_Field3dObject_Render, ret, template->taskPriority); + ret->manager = manager; + ret->param = template; + GF_ASSERT(ret->mainTask != NULL); + GF_ASSERT(ret->g3dRenderTask != NULL); + if (template->dataSize != 0) { + ret->data = AllocFromHeap(manager->heapId, template->dataSize); + } + if (template->initFunc != NULL) { + template->initFunc(ret, manager->fieldSystem, ret->data); + } + return ret; + } + } + + GF_ASSERT(FALSE); + return NULL; +} + +void Field3dObjectTask_Delete(Field3dObjectTask *task) { + if (task->mainTask != NULL) { + if (task->param->destroyFunc != NULL) { + task->param->destroyFunc(task, task->manager->fieldSystem, task->data); + } + if (task->param->dataSize != 0) { + FreeToHeap(task->data); + } + SysTask_Destroy(task->mainTask); + SysTask_Destroy(task->g3dRenderTask); + MI_CpuClear32(task, sizeof(Field3dObjectTask)); + } +} + +void *Field3dObjectTask_GetData(Field3dObjectTask *task) { + return task->data; +} diff --git a/src/scrcmd_c.c b/src/scrcmd_c.c index f9665fd8e..57e6a212f 100644 --- a/src/scrcmd_c.c +++ b/src/scrcmd_c.c @@ -5156,12 +5156,12 @@ BOOL ScrCmd_TryHeadbuttEncounter(ScriptContext *ctx) { } BOOL ScrCmd_755(ScriptContext *ctx) { - ov02_02250A60(ctx->fieldSystem); + LegendCutscene_BeginKimonoDance(ctx->fieldSystem); return FALSE; } BOOL ScrCmd_756(ScriptContext *ctx) { - ov02_02250AC8(ctx->fieldSystem); + LegendCutscene_EndKimonoDance(ctx->fieldSystem); return FALSE; }