Decompile field/overlay_01_021E66E4.c

This commit is contained in:
PikalaxALT 2024-04-22 11:30:07 -04:00
parent f8ebf1b9d6
commit 984fc8caa6
15 changed files with 367 additions and 516 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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];

View File

@ -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

View File

@ -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) {

View File

@ -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;
}

View File

@ -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;
}