Merge pull request #126 from robojumper/d_room

d_stage_parse OK, d_room largely matching, some d_stage, d_stage_mgr
This commit is contained in:
robojumper
2025-03-09 19:07:57 +01:00
committed by GitHub
71 changed files with 3352 additions and 539 deletions
+46 -3
View File
@@ -154,8 +154,11 @@ d/d_scene.cpp:
.sbss start:0x80575220 end:0x80575228
.bss start:0x805A06F0 end:0x805A0720
d/d_stage.cpp:
.text start:0x80062E40 end:0x80064250
d/d_stage_parse.cpp:
.text start:0x80062ED0 end:0x8006424C
.rodata start:0x804E0B38 end:0x804E0C98
.data start:0x8050DE48 end:0x8050DE58
.sdata2 start:0x80577920 end:0x80577928
d/d_sys.cpp:
.text start:0x80064250 end:0x80064920
@@ -206,6 +209,10 @@ toBeSorted/dowsing_target.cpp:
.sdata2 start:0x80579640 end:0x80579670
.bss start:0x805A2FB0 end:0x805A3010
toBeSorted/minigame_mgr.cpp:
.text start:0x800A5060 end:0x800A5608
.ctors start:0x804DB6C4 end:0x804DB6C8
d/lyt/d2d.cpp:
.text start:0x800A9D30 end:0x800ACAB8
.data start:0x8050FFC8 end:0x80510088
@@ -619,6 +626,16 @@ d/lyt/d_screen_fader.cpp:
.data start:0x80528D68 end:0x80528D90
.sdata2 start:0x8057ABE0 end:0x8057AC08
d/a/d_a_bird_base.cpp:
.text start:0x80175FD0 end:0x80179128
d/a/d_a_door_base.cpp:
.text start:0x80179130 end:0x801792C4
.ctors start:0x804DB7DC end:0x804DB7E0
d/lyt/d_lyt_map_popup.cpp:
.text start:0x801792D0 end:0x80189F9C
d/a/d_a_fish_mgr_base.cpp:
.text start:0x8018B880 end:0x8018BFC8
.ctors start:0x804DB7E4 end:0x804DB7E8
@@ -627,6 +644,9 @@ d/a/d_a_fish_base.cpp:
.text start:0x8018BFD0 end:0x8018E378
.ctors start:0x804DB7E8 end:0x804DB7EC
toBeSorted/sword_proj_effect_list.cpp:
.text start:0x8018E380 end:0x8018F188
d/a/d_a_insect.cpp:
.text start:0x8018F190 end:0x80190710
.data start:0x8052ABD8 end:0x8052ACC0
@@ -640,17 +660,40 @@ d/a/d_a_salbage_npc.cpp:
.text start:0x80192B00 end:0x80194080
.ctors start:0x804DB7F0 end:0x804DB7F4
d/d_stage_mgr.cpp:
.text start:0x801975C0 end:0x8019CFD8
.ctors start:0x804DB7FC end:0x804DB800
.data start:0x8052B708 end:0x8052C128
d/d_last.cpp:
.text start:0x8019CFE0 end:0x8019D15C
d/d_camera.cpp:
.text start:0x8019D160 end:0x8019ED0C
.ctors start:0x804DB800 end:0x804DB804
d/d_light_obj.cpp:
.text start:0x8019ED10 end:0x801A65C8
d/tg/d_t_weather.cpp:
.text start:0x801A65D0 end:0x801AF7D8
.ctors start:0x804DB804 end:0x804DB808
d/d_room_mgr.cpp:
d/d_stage.cpp:
.text start:0x801B32A0 end:0x801B5BC8
.ctors start:0x804DB80C end:0x804DB810
.data start:0x8052DF40 end:0x8052E080
.sdata start:0x80573290 end:0x805732F8
.sdata2 start:0x8057B4E8 end:0x8057B528
d/d_room.cpp:
.text start:0x801B5C80 end:0x801B84D8
.ctors start:0x804DB810 end:0x804DB814
.rodata start:0x804EAB60 end:0x804EAB88
.data start:0x8052E0D8 end:0x8052E358
.sdata start:0x805732F8 end:0x80573348
.sdata2 start:0x8057B528 end:0x8057B540
.bss start:0x805B36E0 end:0x805B3760
d/d_sc_title.cpp:
.text start:0x801B9230 end:0x801BA3A0
+282 -281
View File
@@ -379,7 +379,7 @@ getNightT1__11FileManagerFv = .text:0x8000CA00; // type:function size:0x44
setNightT3__11FileManagerFb = .text:0x8000CA50; // type:function size:0x30
getNightT3__11FileManagerFv = .text:0x8000CA80; // type:function size:0x44
isNew_FileA__11FileManagerFv = .text:0x8000CAD0; // type:function size:0x24
setSceneFlagIndex__11FileManagerFUs = .text:0x8000CB00; // type:function size:0x30
setSceneFlagIndex__11FileManagerFs = .text:0x8000CB00; // type:function size:0x30
getSceneFlagIndex__11FileManagerFv = .text:0x8000CB30; // type:function size:0x44
getFileAreaIndex__11FileManagerFv = .text:0x8000CB80; // type:function size:0x44
fn_8000CBD0__11FileManagerFUc = .text:0x8000CBD0; // type:function size:0x30
@@ -596,7 +596,7 @@ fn_80018EA0 = .text:0x80018EA0; // type:function size:0x58
fn_80018F00 = .text:0x80018F00; // type:function size:0x60
fn_80018F60 = .text:0x80018F60; // type:function size:0x7C
fn_80018FE0 = .text:0x80018FE0; // type:function size:0xD0
fn_800190B0 = .text:0x800190B0; // type:function size:0xB8
remove__12UnkWithWaterFv = .text:0x800190B0; // type:function size:0xB8
fn_80019170 = .text:0x80019170; // type:function size:0x74
fn_800191F0 = .text:0x800191F0; // type:function size:0x9C
fn_80019290 = .text:0x80019290; // type:function size:0x5C
@@ -632,7 +632,7 @@ fn_80019E30 = .text:0x80019E30; // type:function size:0x44
fn_80019E80 = .text:0x80019E80; // type:function size:0x3A8
attach__14dScnCallback_cFRQ23m3d9scnLeaf_c = .text:0x8001A230; // type:function size:0x50
setPCAMpos2 = .text:0x8001A280; // type:function size:0x144
fn_8001A3D0 = .text:0x8001A3D0; // type:function size:0x140
linkMdl__12UnkWithWaterFRQ34nw4r3g3d6ResMdlP12UnkWithWater = .text:0x8001A3D0; // type:function size:0x140
fn_8001A510 = .text:0x8001A510; // type:function size:0x4
fn_8001A520 = .text:0x8001A520; // type:function size:0x4
fn_8001A530 = .text:0x8001A530; // type:function size:0x4
@@ -1118,8 +1118,8 @@ postExecute__12dAcObjBase_cFQ27fBase_c12MAIN_STATE_e = .text:0x8002E2A0; // type
preDraw__12dAcObjBase_cFv = .text:0x8002E330; // type:function size:0x27C
getObjectListEntry__12dAcObjBase_cFv = .text:0x8002E5B0; // type:function size:0x8
restorePosRotFromCopy__12dAcObjBase_cFv = .text:0x8002E5C0; // type:function size:0x70
create__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eUlUlP7mVec3_cP7mAng3_cP7mVec3_cUl = .text:0x8002E630; // type:function size:0x98
create__12dAcObjBase_cFPcUlUlP7mVec3_cP7mAng3_cP7mVec3_cUlUsSc = .text:0x8002E6D0; // type:function size:0xA0
create__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eUlUlPC7mVec3_cPC7mAng3_cPC7mVec3_cUl = .text:0x8002E630; // type:function size:0x98
create__12dAcObjBase_cFPCcUlUlPC7mVec3_cPC7mAng3_cPC7mVec3_cUlUsSc = .text:0x8002E6D0; // type:function size:0xA0
ActorObjectBase__findObject = .text:0x8002E770; // type:function size:0x7C
getNextObject__12dAcObjBase_cFP9fLiMgBa_cP12dAcObjBase_c = .text:0x8002E7F0; // type:function size:0x58
isPlayer__12dAcObjBase_cFv = .text:0x8002E850; // type:function size:0x14
@@ -1144,7 +1144,7 @@ fn_8002EFA0 = .text:0x8002EFA0; // type:function size:0x50
fn_8002EFF0 = .text:0x8002EFF0; // type:function size:0x194
fn_8002F190 = .text:0x8002F190; // type:function size:0x24
createActorUnkGroup3__12dAcObjBase_cFQ28fProfile14PROFILE_NAME_eUlUlP7mVec3_cP7mAng3_cP7mVec3_cUl = .text:0x8002F1C0; // type:function size:0x98
fn_8002F260 = .text:0x8002F260; // type:function size:0xA0
createActorUnkGroup3__12dAcObjBase_cFPCcUlUlPC7mVec3_cPC7mAng3_cPC7mVec3_cUlUsSc = .text:0x8002F260; // type:function size:0xA0
__ct__11dAcEnBase_cFv = .text:0x8002F300; // type:function size:0x74
ActorEnemyBase__dtor = .text:0x8002F380; // type:function size:0x74
ActorEnemyBase__shouldUpdateMaybe = .text:0x8002F400; // type:function size:0xB4
@@ -1636,7 +1636,7 @@ initializeState__22sFStateID_c<8dAcNpc_c>CFR8dAcNpc_c = .text:0x8003EFF0; // typ
fn_8003F020 = .text:0x8003F020; // type:function size:0x40
fn_8003F060 = .text:0x8003F060; // type:function size:0x40
fn_8003F0A0 = .text:0x8003F0A0; // type:function size:0x40
__sinit_\d_a_npc_cpp = .text:0x8003F0E0; // type:function size:0x330
__sinit_\d_a_npc_cpp = .text:0x8003F0E0; // type:function size:0x330 scope:local
__dt__22sFStateID_c<8dAcNpc_c>Fv = .text:0x8003F410; // type:function size:0x58
__dt__29sFStateVirtualID_c<8dAcNpc_c>Fv = .text:0x8003F470; // type:function size:0x5C
number__29sFStateVirtualID_c<8dAcNpc_c>CFv = .text:0x8003F4D0; // type:function size:0xDC
@@ -1985,7 +1985,7 @@ fn_8004CC60 = .text:0x8004CC60; // type:function size:0x4
fn_8004CC70 = .text:0x8004CC70; // type:function size:0x8
fn_8004CC80 = .text:0x8004CC80; // type:function size:0x8
fn_8004CC90 = .text:0x8004CC90; // type:function size:0x40
__sinit_\d_a_ordinary_npc_cpp = .text:0x8004CCD0; // type:function size:0x784
__sinit_\d_a_ordinary_npc_cpp = .text:0x8004CCD0; // type:function size:0x784 scope:local
__dt__31sFStateID_c<16dAcOrdinaryNpc_c>Fv = .text:0x8004D460; // type:function size:0x58
__dt__38sFStateVirtualID_c<16dAcOrdinaryNpc_c>Fv = .text:0x8004D4C0; // type:function size:0x5C
baseID_Wait<8dAcNpc_c>__Fv_RC10sStateID_c = .text:0x8004D520; // type:function size:0xC
@@ -2784,44 +2784,44 @@ fn_80062E40 = .text:0x80062E40; // type:function size:0x4
fn_80062E50 = .text:0x80062E50; // type:function size:0x60
fn_80062EB0 = .text:0x80062EB0; // type:function size:0x4
fn_80062EC0 = .text:0x80062EC0; // type:function size:0x4
parseBzsPcam = .text:0x80062ED0; // type:function size:0x1C
parseBzsLyse = .text:0x80062EF0; // type:function size:0x20
parseBzsStif = .text:0x80062F10; // type:function size:0x54
parseBzsRmpl = .text:0x80062F70; // type:function size:0x1C
fn_80062F90 = .text:0x80062F90; // type:function size:0x54
parseBzsLylt = .text:0x80062FF0; // type:function size:0xD8
handleBzsPcam__FiPC14BzsSectionHead = .text:0x80062ED0; // type:function size:0x1C
handleBzsLyse__FiPC14BzsSectionHead = .text:0x80062EF0; // type:function size:0x20
handleBzsStif__FiPC14BzsSectionHead = .text:0x80062F10; // type:function size:0x54
handleBzsRmpl__FiPC14BzsSectionHead = .text:0x80062F70; // type:function size:0x1C
handleBzsFile__FiPC14BzsSectionHead = .text:0x80062F90; // type:function size:0x54
handleBzsLylt__FiPC14BzsSectionHead = .text:0x80062FF0; // type:function size:0xD8
sprintf__15SizedString<16>FPCce = .text:0x800630D0; // type:function size:0xD0
parseBzsScen = .text:0x800631A0; // type:function size:0x54
parseBzsCam = .text:0x80063200; // type:function size:0x54
parseBzsEvnt = .text:0x80063260; // type:function size:0x54
parseBzsPath = .text:0x800632C0; // type:function size:0x54
parseBzsPnt = .text:0x80063320; // type:function size:0x54
parseBzsBpnt = .text:0x80063380; // type:function size:0x54
parseBzsSpth = .text:0x800633E0; // type:function size:0x54
fn_80063440 = .text:0x80063440; // type:function size:0x54
fn_800634A0 = .text:0x800634A0; // type:function size:0x54
parseBzsArea = .text:0x80063500; // type:function size:0x54
parseBzsPlyAndAlsoSpawnLink = .text:0x80063560; // type:function size:0x330
parseBzsObjn = .text:0x80063890; // type:function size:0x78
parseBzsArcn = .text:0x80063910; // type:function size:0x78
parseBzsObjn2 = .text:0x80063990; // type:function size:0x84
parseBzsArcn2 = .text:0x80063A20; // type:function size:0x78
getEnemyDefeatFlagFromId = .text:0x80063AA0; // type:function size:0x3C
getViewClipIndexFromId = .text:0x80063AE0; // type:function size:0x1C
parseBzsObj = .text:0x80063B00; // type:function size:0xB8
parseBzsSobj = .text:0x80063BC0; // type:function size:0xB8
parseBzsStas = .text:0x80063C80; // type:function size:0xB8
fn_80063D40 = .text:0x80063D40; // type:function size:0x78
parseBzsLay = .text:0x80063DC0; // type:function size:0x80
fn_80063E40 = .text:0x80063E40; // type:function size:0x80
fn_80063EC0 = .text:0x80063EC0; // type:function size:0x80
findAndRunStageTagParseFunc = .text:0x80063F40; // type:function size:0x48
parseRoomStageBzs = .text:0x80063F90; // type:function size:0x70
parseBzsStageRoom = .text:0x80064000; // type:function size:0x70
parseStageBzs = .text:0x80064070; // type:function size:0x7C
parseRoomBzs = .text:0x800640F0; // type:function size:0x70
fn_80064160 = .text:0x80064160; // type:function size:0x70
fn_800641D0 = .text:0x800641D0; // type:function size:0x7C
handleBzsScen__FiPC14BzsSectionHead = .text:0x800631A0; // type:function size:0x54
handleBzsCam__FiPC14BzsSectionHead = .text:0x80063200; // type:function size:0x54
handleBzsEvnt__FiPC14BzsSectionHead = .text:0x80063260; // type:function size:0x54
handleBzsPath__FiPC14BzsSectionHead = .text:0x800632C0; // type:function size:0x54
handleBzsPnt__FiPC14BzsSectionHead = .text:0x80063320; // type:function size:0x54
handleBzsBpnt__FiPC14BzsSectionHead = .text:0x80063380; // type:function size:0x54
handleBzsSpth__FiPC14BzsSectionHead = .text:0x800633E0; // type:function size:0x54
handleBzsSpnt__FiPC14BzsSectionHead = .text:0x80063440; // type:function size:0x54
handleBzsSbpt__FiPC14BzsSectionHead = .text:0x800634A0; // type:function size:0x54
handleBzsArea__FiPC14BzsSectionHead = .text:0x80063500; // type:function size:0x54
handleBzsPly__FiPC14BzsSectionHead = .text:0x80063560; // type:function size:0x330
handleBzsObjn__FiPC14BzsSectionHead = .text:0x80063890; // type:function size:0x78
handleBzsArcn__FiPC14BzsSectionHead = .text:0x80063910; // type:function size:0x78
handleBzsLayerObjn__FiPC14BzsSectionHead = .text:0x80063990; // type:function size:0x84
handleBzsLayerArcn__FiPC14BzsSectionHead = .text:0x80063A20; // type:function size:0x78
getEnemyDefeatFlagFromId__FlUs = .text:0x80063AA0; // type:function size:0x3C
getViewClipIndexFromId__FUs = .text:0x80063AE0; // type:function size:0x1C
handleBzsObj__FiPC14BzsSectionHead = .text:0x80063B00; // type:function size:0xB8
handleBzsSobj__FiPC14BzsSectionHead = .text:0x80063BC0; // type:function size:0xB8
handleBzsStas__FiPC14BzsSectionHead = .text:0x80063C80; // type:function size:0xB8
parseLayerBzs__FiUlPC3LAYPC17BzsTagToParseFuncl = .text:0x80063D40; // type:function size:0x78
handleBzsLay__FiPC14BzsSectionHead = .text:0x80063DC0; // type:function size:0x80
handleBzsLay2__FiPC14BzsSectionHead = .text:0x80063E40; // type:function size:0x80
handleBzsLay3__FiPC14BzsSectionHead = .text:0x80063EC0; // type:function size:0x80
findAndRunStageTagParseFunc__FiPC14BzsSectionHeadPC17BzsTagToParseFuncl = .text:0x80063F40; // type:function size:0x48
parseRoomStageBzs__FiPCv = .text:0x80063F90; // type:function size:0x70
parseBzsStageRoom__FiPCv = .text:0x80064000; // type:function size:0x70
parseStageBzs__FiPCv = .text:0x80064070; // type:function size:0x7C
parseRoomBzs__FiPCv = .text:0x800640F0; // type:function size:0x70
parseRoomReactivateBzs__FiPCv = .text:0x80064160; // type:function size:0x70
parseRoomActivateBzs__FiPCv = .text:0x800641D0; // type:function size:0x7C
dSys_c__initAudioMgr = .text:0x80064250; // type:function size:0xB0
dSys_c__beginRender = .text:0x80064300; // type:function size:0x38
dSys_c__endRender = .text:0x80064340; // type:function size:0x18
@@ -2997,7 +2997,7 @@ unloadRoomArc__22CurrentStageArcManagerFi = .text:0x80069590; // type:function s
decrement__22CurrentStageArcManagerFPCc = .text:0x800695D0; // type:function size:0x28
loadFromRoomArc__22CurrentStageArcManagerFiPCc = .text:0x80069600; // type:function size:0x48
getDataFromRoomArc__22CurrentStageArcManagerFiPCc = .text:0x80069650; // type:function size:0x48
getHeap__Fv = .text:0x800696A0; // type:function size:0x8
getHeap__22CurrentStageArcManagerFl = .text:0x800696A0; // type:function size:0x8
getCurrentStageDirectory__22CurrentStageArcManagerFv = .text:0x800696B0; // type:function size:0x12C
getRoomArcDirectory__22CurrentStageArcManagerCFi = .text:0x800697E0; // type:function size:0xB0
create__22CurrentStageArcManagerFPQ23EGG4Heap = .text:0x80069890; // type:function size:0x64
@@ -4415,7 +4415,7 @@ fn_800C7A10 = .text:0x800C7A10; // type:function size:0x8
Timekeeper__doCount = .text:0x800C7A20; // type:function size:0x130
fn_800C7B50 = .text:0x800C7B50; // type:function size:0x8
__ct__18SpecialItemDropMgrFv = .text:0x800C7B60; // type:function size:0x14
SpecialItemDropMgr__ctor = .text:0x800C7B80; // type:function size:0x30
create__18SpecialItemDropMgrFv = .text:0x800C7B80; // type:function size:0x30
fn_800C7BB0__18SpecialItemDropMgrFi = .text:0x800C7BB0; // type:function size:0x150
shouldTryExtraHearts__18SpecialItemDropMgrFi = .text:0x800C7D00; // type:function size:0x1C
shouldTryExtraRupees__18SpecialItemDropMgrFi = .text:0x800C7D20; // type:function size:0x1C
@@ -10516,21 +10516,21 @@ fn_801973C0 = .text:0x801973C0; // type:function size:0x58
fn_80197420 = .text:0x80197420; // type:function size:0x140
fn_80197560 = .text:0x80197560; // type:function size:0x28
fn_80197590 = .text:0x80197590; // type:function size:0x28
StageManager__ctor = .text:0x801975C0; // type:function size:0x34
dStageMgr_c_classInit__Fv = .text:0x801975C0; // type:function size:0x34
fn_80197600 = .text:0x80197600; // type:function size:0xA0
fn_801976A0 = .text:0x801976A0; // type:function size:0x90
StageManager__ctorCont = .text:0x80197730; // type:function size:0x39C
__ct__11dStageMgr_cFv = .text:0x80197730; // type:function size:0x39C
fn_80197AD0 = .text:0x80197AD0; // type:function size:0x4C
fn_80197B20 = .text:0x80197B20; // type:function size:0x54
fn_80197B80 = .text:0x80197B80; // type:function size:0x40
__dt__Q23EGG6ScreenFv = .text:0x80197B80; // type:function size:0x40
fn_80197BC0 = .text:0x80197BC0; // type:function size:0x40
fn_80197C00 = .text:0x80197C00; // type:function size:0x64
fn_80197C70 = .text:0x80197C70; // type:function size:0x5C
fn_80197CD0 = .text:0x80197CD0; // type:function size:0x58
fn_80197D30 = .text:0x80197D30; // type:function size:0x58
fn_80197D90 = .text:0x80197D90; // type:function size:0x6C
fn_80197E00 = .text:0x80197E00; // type:function size:0xA0
fn_80197EA0 = .text:0x80197EA0; // type:function size:0xA4
__dt__22sFPhase<11dStageMgr_c>Fv = .text:0x80197CD0; // type:function size:0x58
__dt__24sFState_c<11dStageMgr_c>Fv = .text:0x80197D30; // type:function size:0x58
__dt__27sFStateFct_c<11dStageMgr_c>Fv = .text:0x80197D90; // type:function size:0x6C
__dt__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80197E00; // type:function size:0xA0
__dt__50sFStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c>Fv = .text:0x80197EA0; // type:function size:0xA4
fn_80197F50 = .text:0x80197F50; // type:function size:0x5C
fn_80197FB0 = .text:0x80197FB0; // type:function size:0x5C
fn_80198010 = .text:0x80198010; // type:function size:0x60
@@ -10539,25 +10539,25 @@ EGG__DrawPathShadowVolume____dt = .text:0x801980E0; // type:function size:0x60
fn_80198140 = .text:0x80198140; // type:function size:0x58
fn_801981A0 = .text:0x801981A0; // type:function size:0x58
fn_80198200 = .text:0x80198200; // type:function size:0x58
fn_80198260 = .text:0x80198260; // type:function size:0x308
__dt__11dStageMgr_cFv = .text:0x80198260; // type:function size:0x308
StageManager__init = .text:0x80198570; // type:function size:0xDC
fn_80198650 = .text:0x80198650; // type:function size:0x1CC
StageManager__baseUpdate = .text:0x80198820; // type:function size:0x3D8
fn_80198C00 = .text:0x80198C00; // type:function size:0x10
fn_80198C10 = .text:0x80198C10; // type:function size:0x10
getStateID__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x80198C00; // type:function size:0x10
executeState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x80198C10; // type:function size:0x10
StageManager__draw = .text:0x80198C20; // type:function size:0x14C
fn_80198D70 = .text:0x80198D70; // type:function size:0x14
StageManager__init2 = .text:0x80198D90; // type:function size:0x25C
fn_80198FF0 = .text:0x80198FF0; // type:function size:0x10
changeState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x80198FF0; // type:function size:0x10
fn_80199000 = .text:0x80199000; // type:function size:0x110
fn_80199110 = .text:0x80199110; // type:function size:0x8
fn_80199120 = .text:0x80199120; // type:function size:0x10
StageManager__addObjnId = .text:0x80199130; // type:function size:0x8
StageManager__addStageArcn = .text:0x80199140; // type:function size:0x8
StageManager__addActorId = .text:0x80199150; // type:function size:0x8
StageManager__addLayerArcn = .text:0x80199160; // type:function size:0x8
initUnkWithWater = .text:0x80199170; // type:function size:0x18
fn_80199190 = .text:0x80199190; // type:function size:0x18
addObjId__11dStageMgr_cFUs = .text:0x80199130; // type:function size:0x8
addStageArcn__11dStageMgr_cFPCc = .text:0x80199140; // type:function size:0x8
addActorId__11dStageMgr_cFUs = .text:0x80199150; // type:function size:0x8
addLayerArcn__11dStageMgr_cFPCc = .text:0x80199160; // type:function size:0x8
initUnkWithWater__11dStageMgr_cFUlP12UnkWithWater = .text:0x80199170; // type:function size:0x18
destroyUnkWithWater__11dStageMgr_cFUlP12UnkWithWater = .text:0x80199190; // type:function size:0x18
fn_801991B0 = .text:0x801991B0; // type:function size:0xA0
fn_80199250 = .text:0x80199250; // type:function size:0x3C
fn_80199290 = .text:0x80199290; // type:function size:0x164
@@ -10565,9 +10565,9 @@ fn_80199400 = .text:0x80199400; // type:function size:0xE8
fn_801994F0 = .text:0x801994F0; // type:function size:0x4
triggerEntranceRestart = .text:0x80199500; // type:function size:0x40
getPCAMfromId = .text:0x80199540; // type:function size:0x34
StageManager__overrideLayer0WithLyse = .text:0x80199580; // type:function size:0xF8
StageManager__setSTIF = .text:0x80199680; // type:function size:0x1AC
StageManager__getFlagindex = .text:0x80199830; // type:function size:0x2C
overrideLayer0WithLyse__11dStageMgr_cFv = .text:0x80199580; // type:function size:0xF8
setStif__11dStageMgr_cFPC4STIF = .text:0x80199680; // type:function size:0x1AC
getFlagIndex__11dStageMgr_cCFv = .text:0x80199830; // type:function size:0x2C
getAreaType__11dStageMgr_cCFv = .text:0x80199860; // type:function size:0x1C
StageManager__isAreaTypeNormal = .text:0x80199880; // type:function size:0x28
isAreaTypeDungeon__11dStageMgr_cCFv = .text:0x801998B0; // type:function size:0x2C
@@ -10575,14 +10575,14 @@ StageManager__isAreaTypeBoss = .text:0x801998E0; // type:function size:0x2C
StageManager__isAreaTypeSkyloft = .text:0x80199910; // type:function size:0x2C
StageManager__isAreaTypeHouse = .text:0x80199940; // type:function size:0x2C
isAreaTypeSky__11dStageMgr_cCFv = .text:0x80199970; // type:function size:0x2C
StageManager__isAreaTypeOverworldOrSkyloft = .text:0x801999A0; // type:function size:0x3C
StageManager__isAreaTypeDungeonOrBoss = .text:0x801999E0; // type:function size:0x3C
isAreaTypeOverworldOrSkyloft__11dStageMgr_cCFv = .text:0x801999A0; // type:function size:0x3C
isAreaTypeDungeonOrBoss__11dStageMgr_cCFv = .text:0x801999E0; // type:function size:0x3C
StageManager__getSTIFmapNameId = .text:0x80199A20; // type:function size:0x20
StageManager__getSTIFbyte4 = .text:0x80199A40; // type:function size:0x20
fn_80199A60 = .text:0x80199A60; // type:function size:0x3C
isSTIFbyte4_5or6 = .text:0x80199AA0; // type:function size:0x3C
fn_80199AE0 = .text:0x80199AE0; // type:function size:0x3C
StageManager__getSTIFunk1 = .text:0x80199B20; // type:function size:0x20
getSTIFunk1__11dStageMgr_cCFv = .text:0x80199B20; // type:function size:0x20
StageManager__getSTIFunk3 = .text:0x80199B40; // type:function size:0x1C
fn_80199B60 = .text:0x80199B60; // type:function size:0xC
fn_80199B70 = .text:0x80199B70; // type:function size:0x1C
@@ -10601,41 +10601,41 @@ fn_8019A390 = .text:0x8019A390; // type:function size:0x44
fn_8019A3E0 = .text:0x8019A3E0; // type:function size:0x2C8
fn_8019A6B0 = .text:0x8019A6B0; // type:function size:0xF0
fn_8019A7A0 = .text:0x8019A7A0; // type:function size:0x3C
StageMgr__stateReadStageResEnter = .text:0x8019A7E0; // type:function size:0x10
StageMgr__stateReadStageResUpdate = .text:0x8019A7F0; // type:function size:0x58
StageMgr__stateReadStageResLeave = .text:0x8019A850; // type:function size:0x60
StageManager__loadRoomsAndAdditionalLayouts = .text:0x8019A8B0; // type:function size:0x218
StageMgr__stateReadRoomResUpdate = .text:0x8019AAD0; // type:function size:0x6C
StageMgr__stateReadRoomResLeave = .text:0x8019AB40; // type:function size:0xB8
StageMgr__stateReadObjectResEnter = .text:0x8019AC00; // type:function size:0x8
StageMgr__stateReadObjectResUpdate = .text:0x8019AC10; // type:function size:0x54
StageMgr__stateReadObjectResLeave = .text:0x8019AC70; // type:function size:0x4
StageMgr__stateReadStageLayerResEnter = .text:0x8019AC80; // type:function size:0x14
StageMgr__stateReadStageLayerResUpdate = .text:0x8019ACA0; // type:function size:0x58
StageMgr__stateReadObjectResLeave2 = .text:0x8019AD00; // type:function size:0x4
StageMgr__stateReadLayerObjectResEnter = .text:0x8019AD10; // type:function size:0x19C
StageMgr__stateReadLayerObjectResUpdate = .text:0x8019AEB0; // type:function size:0x68
StageMgr__stateReadLayerObjectResLeave = .text:0x8019AF20; // type:function size:0x98
initializeState_ReadStageRes__11dStageMgr_cFv = .text:0x8019A7E0; // type:function size:0x10
executeState_ReadStageRes__11dStageMgr_cFv = .text:0x8019A7F0; // type:function size:0x58
finalizeState_ReadStageRes__11dStageMgr_cFv = .text:0x8019A850; // type:function size:0x60
initializeState_ReadRoomRes__11dStageMgr_cFv = .text:0x8019A8B0; // type:function size:0x218
executeState_ReadRoomRes__11dStageMgr_cFv = .text:0x8019AAD0; // type:function size:0x6C
finalizeState_ReadRoomRes__11dStageMgr_cFv = .text:0x8019AB40; // type:function size:0xB8
initializeState_ReadObjectRes__11dStageMgr_cFv = .text:0x8019AC00; // type:function size:0x8
executeState_ReadObjectRes__11dStageMgr_cFv = .text:0x8019AC10; // type:function size:0x54
finalizeState_ReadObjectRes__11dStageMgr_cFv = .text:0x8019AC70; // type:function size:0x4
initializeState_ReadStageLayerRes__11dStageMgr_cFv = .text:0x8019AC80; // type:function size:0x14
executeState_ReadStageLayerRes__11dStageMgr_cFv = .text:0x8019ACA0; // type:function size:0x58
finalizeState_ReadStageLayerRes__11dStageMgr_cFv = .text:0x8019AD00; // type:function size:0x4
initializeState_ReadLayerObjectRes__11dStageMgr_cFv = .text:0x8019AD10; // type:function size:0x19C
executeState_ReadLayerObjectRes__11dStageMgr_cFv = .text:0x8019AEB0; // type:function size:0x68
finalizeState_ReadLayerObjectRes__11dStageMgr_cFv = .text:0x8019AF20; // type:function size:0x98
fn_8019AFC0 = .text:0x8019AFC0; // type:function size:0x28
StageMgr__stateSoundLoadSceneDataEnter = .text:0x8019AFF0; // type:function size:0x44
StageMgr__stateSoundLoadSceneDataUpdate = .text:0x8019B040; // type:function size:0x34
StageMgr__stateSoundLoadSceneDataLeave = .text:0x8019B080; // type:function size:0x38
StageMgr__stateCreateObjectEnter = .text:0x8019B0C0; // type:function size:0x684
StageMgr__stateCreateObjectUpdate = .text:0x8019B750; // type:function size:0x50
StageMgr__stateCreateObjectLeave = .text:0x8019B7A0; // type:function size:0x4
initializeState_SoundLoadSceneData__11dStageMgr_cFv = .text:0x8019AFF0; // type:function size:0x44
executeState_SoundLoadSceneData__11dStageMgr_cFv = .text:0x8019B040; // type:function size:0x34
finalizeState_SoundLoadSceneData__11dStageMgr_cFv = .text:0x8019B080; // type:function size:0x38
initializeState_CreateObject__11dStageMgr_cFv = .text:0x8019B0C0; // type:function size:0x684
executeState_CreateObject__11dStageMgr_cFv = .text:0x8019B750; // type:function size:0x50
finalizeState_CreateObject__11dStageMgr_cFv = .text:0x8019B7A0; // type:function size:0x4
fn_8019B7B0 = .text:0x8019B7B0; // type:function size:0x28
StageMgr__stateReadObjectSoundEnter = .text:0x8019B7E0; // type:function size:0x3C
StageMgr__stateReadObjectSoundUpdate = .text:0x8019B820; // type:function size:0x7C
StageMgr__stateReadObjectSoundLeave = .text:0x8019B8A0; // type:function size:0x4C
StageMgr__stateSceneChangeSaveEnter = .text:0x8019B8F0; // type:function size:0x54
StageMgr__stateSceneChangeSaveUpdate = .text:0x8019B950; // type:function size:0x4C
StageMgr__stateSceneChangeSaveLeave = .text:0x8019B9A0; // type:function size:0x1C
StageMgr__stateRestartSceneWaitEnter = .text:0x8019B9C0; // type:function size:0x8
StageMgr__stateRestartSceneWaitUpdate = .text:0x8019B9D0; // type:function size:0x118
StageMgr__stateRestartSceneWaitLeave = .text:0x8019BAF0; // type:function size:0x4
StageMgr__stateRestartSceneEnter = .text:0x8019BB00; // type:function size:0x5C
StageMgr__stateRestartSceneUpdate = .text:0x8019BB60; // type:function size:0x130
StageMgr__stateRestartSceneLeave = .text:0x8019BC90; // type:function size:0x28
initializeState_ReadObjectSound__11dStageMgr_cFv = .text:0x8019B7E0; // type:function size:0x3C
executeState_ReadObjectSound__11dStageMgr_cFv = .text:0x8019B820; // type:function size:0x7C
finalizeState_ReadObjectSound__11dStageMgr_cFv = .text:0x8019B8A0; // type:function size:0x4C
initializeState_SceneChangeSave__11dStageMgr_cFv = .text:0x8019B8F0; // type:function size:0x54
executeState_SceneChangeSave__11dStageMgr_cFv = .text:0x8019B950; // type:function size:0x4C
finalizeState_SceneChangeSave__11dStageMgr_cFv = .text:0x8019B9A0; // type:function size:0x1C
initializeState_RestartSceneWait__11dStageMgr_cFv = .text:0x8019B9C0; // type:function size:0x8
executeState_RestartSceneWait__11dStageMgr_cFv = .text:0x8019B9D0; // type:function size:0x118
finalizeState_RestartSceneWait__11dStageMgr_cFv = .text:0x8019BAF0; // type:function size:0x4
initializeState_RestartScene__11dStageMgr_cFv = .text:0x8019BB00; // type:function size:0x5C
executeState_RestartScene__11dStageMgr_cFv = .text:0x8019BB60; // type:function size:0x130
finalizeState_RestartScene__11dStageMgr_cFv = .text:0x8019BC90; // type:function size:0x28
fn_8019BCC0 = .text:0x8019BCC0; // type:function size:0x16C
fn_8019BE30 = .text:0x8019BE30; // type:function size:0x8
fn_8019BE40 = .text:0x8019BE40; // type:function size:0x74
@@ -10656,21 +10656,21 @@ fn_8019C270 = .text:0x8019C270; // type:function size:0x4
fn_8019C280 = .text:0x8019C280; // type:function size:0x4
fn_8019C290 = .text:0x8019C290; // type:function size:0x8
fn_8019C2A0 = .text:0x8019C2A0; // type:function size:0x8
fn_8019C2B0 = .text:0x8019C2B0; // type:function size:0x60
fn_8019C310 = .text:0x8019C310; // type:function size:0xC
fn_8019C320 = .text:0x8019C320; // type:function size:0x1C
fn_8019C340 = .text:0x8019C340; // type:function size:0x1C
fn_8019C360 = .text:0x8019C360; // type:function size:0x1C
fn_8019C380 = .text:0x8019C380; // type:function size:0x10
fn_8019C390 = .text:0x8019C390; // type:function size:0x10
fn_8019C3A0 = .text:0x8019C3A0; // type:function size:0x10
fn_8019C3B0 = .text:0x8019C3B0; // type:function size:0x10
fn_8019C3C0 = .text:0x8019C3C0; // type:function size:0x10
fn_8019C3D0 = .text:0x8019C3D0; // type:function size:0x10
fn_8019C3E0 = .text:0x8019C3E0; // type:function size:0x30
fn_8019C410 = .text:0x8019C410; // type:function size:0xC
fn_8019C420 = .text:0x8019C420; // type:function size:0x10
fn_8019C430 = .text:0x8019C430; // type:function size:0x2C
build__27sFStateFct_c<11dStageMgr_c>FRC12sStateIDIf_c = .text:0x8019C2B0; // type:function size:0x60
dispose__27sFStateFct_c<11dStageMgr_c>FRP10sStateIf_c = .text:0x8019C310; // type:function size:0xC
initialize__24sFState_c<11dStageMgr_c>Fv = .text:0x8019C320; // type:function size:0x1C
execute__24sFState_c<11dStageMgr_c>Fv = .text:0x8019C340; // type:function size:0x1C
finalize__24sFState_c<11dStageMgr_c>Fv = .text:0x8019C360; // type:function size:0x1C
initializeState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8019C380; // type:function size:0x10
finalizeState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8019C390; // type:function size:0x10
refreshState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x8019C3A0; // type:function size:0x10
getState__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8019C3B0; // type:function size:0x10
getNewStateID__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8019C3C0; // type:function size:0x10
getOldStateID__80sStateMgr_c<11dStageMgr_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x8019C3D0; // type:function size:0x10
callPhase__22sFPhase<11dStageMgr_c>Fv = .text:0x8019C3E0; // type:function size:0x30
onReset__22sFPhase<11dStageMgr_c>Fv = .text:0x8019C410; // type:function size:0xC
nextPhase__22sFPhase<11dStageMgr_c>Fv = .text:0x8019C420; // type:function size:0x10
hasReachedEnd__22sFPhase<11dStageMgr_c>CFv = .text:0x8019C430; // type:function size:0x2C
fn_8019C460 = .text:0x8019C460; // type:function size:0x10
fn_8019C470 = .text:0x8019C470; // type:function size:0x10
fn_8019C480 = .text:0x8019C480; // type:function size:0x10
@@ -10678,12 +10678,12 @@ fn_8019C490 = .text:0x8019C490; // type:function size:0x8
fn_8019C4A0 = .text:0x8019C4A0; // type:function size:0x10
fn_8019C4B0 = .text:0x8019C4B0; // type:function size:0x8
fn_8019C4C0 = .text:0x8019C4C0; // type:function size:0x10
fn_8019C4D0 = .text:0x8019C4D0; // type:function size:0x30
fn_8019C500 = .text:0x8019C500; // type:function size:0x30
fn_8019C530 = .text:0x8019C530; // type:function size:0x30
StageMgr__initStates = .text:0x8019C560; // type:function size:0x87C
StageMgr__state_dtor = .text:0x8019CDE0; // type:function size:0x58
fn_8019CE40 = .text:0x8019CE40; // type:function size:0x88
finalizeState__26sFStateID_c<11dStageMgr_c>CFR11dStageMgr_c = .text:0x8019C4D0; // type:function size:0x30
executeState__26sFStateID_c<11dStageMgr_c>CFR11dStageMgr_c = .text:0x8019C500; // type:function size:0x30
initializeState__26sFStateID_c<11dStageMgr_c>CFR11dStageMgr_c = .text:0x8019C530; // type:function size:0x30
__sinit_\d_stage_mgr_cpp = .text:0x8019C560; // type:function size:0x87C scope:local
__dt__26sFStateID_c<11dStageMgr_c>Fv = .text:0x8019CDE0; // type:function size:0x58
isSameName__26sFStateID_c<11dStageMgr_c>CFPCc = .text:0x8019CE40; // type:function size:0x88
fn_8019CED0 = .text:0x8019CED0; // type:function size:0x8
fn_8019CEE0 = .text:0x8019CEE0; // type:function size:0x8
fn_8019CEF0 = .text:0x8019CEF0; // type:function size:0x8
@@ -10951,52 +10951,52 @@ fn_801B31B0 = .text:0x801B31B0; // type:function size:0x24
fn_801B31E0 = .text:0x801B31E0; // type:function size:0x34
fn_801B3220 = .text:0x801B3220; // type:function size:0x64
initCurrentLangString = .text:0x801B3290; // type:function size:0xC
RoomManager__ctor = .text:0x801B32A0; // type:function size:0x30
RoomManager__ctorCont = .text:0x801B32D0; // type:function size:0xF0
fn_801B33C0 = .text:0x801B33C0; // type:function size:0x58
fn_801B3420 = .text:0x801B3420; // type:function size:0x40
dStage_c_classInit__Fv = .text:0x801B32A0; // type:function size:0x30
__ct__8dStage_cFv = .text:0x801B32D0; // type:function size:0xF0
__dt__18sFPhase<8dStage_c>Fv = .text:0x801B33C0; // type:function size:0x58
__dt__12dRoomTable_cFv = .text:0x801B3420; // type:function size:0x40
fn_801B3460 = .text:0x801B3460; // type:function size:0x40
RoomManager__init = .text:0x801B34A0; // type:function size:0x1D8
fn_801B3680 = .text:0x801B3680; // type:function size:0x30
RoomManager__baseUpdate = .text:0x801B36B0; // type:function size:0x3C
RoomManager__draw = .text:0x801B36F0; // type:function size:0x24
fn_801B3720 = .text:0x801B3720; // type:function size:0x4
RoomManager__createRoomsAfterRespawnMaybe = .text:0x801B3730; // type:function size:0x200
fn_801B3930 = .text:0x801B3930; // type:function size:0x30
RoomManager__setRoom = .text:0x801B3960; // type:function size:0x10
GetRoomByIndex__11RoomManagerFi = .text:0x801B3970; // type:function size:0x10
RoomManager__handleRoomChangeMaybe = .text:0x801B3980; // type:function size:0x114
create__8dStage_cFv = .text:0x801B34A0; // type:function size:0x1D8
doDelete__8dStage_cFv = .text:0x801B3680; // type:function size:0x30
execute__8dStage_cFv = .text:0x801B36B0; // type:function size:0x3C
draw__8dStage_cFv = .text:0x801B36F0; // type:function size:0x24
deleteReady__8dStage_cFv = .text:0x801B3720; // type:function size:0x4
createRooms__8dStage_cFv = .text:0x801B3730; // type:function size:0x200
waitForRooms__8dStage_cFv = .text:0x801B3930; // type:function size:0x30
setRoom__8dStage_cFiP7dRoom_c = .text:0x801B3960; // type:function size:0x10
getRoom__8dStage_cFl = .text:0x801B3970; // type:function size:0x10
handleRoomChange__8dStage_cFi = .text:0x801B3980; // type:function size:0x114
RoomManager__updateRoomFlags = .text:0x801B3AA0; // type:function size:0x134
RoomManager__checkOtherRoomLoaded = .text:0x801B3BE0; // type:function size:0x78
fn_801B3C60 = .text:0x801B3C60; // type:function size:0x9C
RoomManager__fadeIn = .text:0x801B3D00; // type:function size:0xA8
RoomManager__fadeOut = .text:0x801B3DB0; // type:function size:0xA8
RoomManager__somethingFadeOutRelated = .text:0x801B3E60; // type:function size:0x40
RoomManager__somethingFadeInRelated = .text:0x801B3EA0; // type:function size:0x40
fadeIn__8dStage_cFlUs = .text:0x801B3D00; // type:function size:0xA8
fadeOut__8dStage_cFlUs = .text:0x801B3DB0; // type:function size:0xA8
forceFadeOut__8dStage_cFv = .text:0x801B3E60; // type:function size:0x40
forceFadeIn__8dStage_cFv = .text:0x801B3EA0; // type:function size:0x40
fn_801B3EE0 = .text:0x801B3EE0; // type:function size:0x3C
fn_801B3F20 = .text:0x801B3F20; // type:function size:0x8
fn_801B3F30 = .text:0x801B3F30; // type:function size:0x8
RoomManager__someCollisionThing = .text:0x801B3F40; // type:function size:0x90
drawMap__8dStage_cFP6mMtx_ci = .text:0x801B3F40; // type:function size:0x90
RoomManager__getRMPLForRoom = .text:0x801B3FD0; // type:function size:0x34
RoomManager__getDungeonflagAndShiftForRoomVisit = .text:0x801B4010; // type:function size:0x34
RoomManager__hasVisitedRoomId = .text:0x801B4050; // type:function size:0x8C
RoomManager__setRoomVisited = .text:0x801B40E0; // type:function size:0x12C
RoomManager__createRoom = .text:0x801B4210; // type:function size:0x28
RoomManager__createLytSeekerStone = .text:0x801B4240; // type:function size:0x68
getRoom__11RoomManagerFi = .text:0x801B42B0; // type:function size:0x20
bindStageResToFile__11RoomManagerFPQ34nw4r3g3d7ResFile = .text:0x801B42D0; // type:function size:0x50
bindSkyCmnToResFile__11RoomManagerFPQ34nw4r3g3d7ResFile = .text:0x801B4320; // type:function size:0x54
RoomManager__getMA0AnmTexSrt = .text:0x801B4380; // type:function size:0xA0
RoomManager__getMA0IndirectSrt = .text:0x801B4420; // type:function size:0x9C
changeLoadedEntities__11RoomManagerFP11RoomManagerUlb = .text:0x801B44C0; // type:function size:0x50
getFlagPositionForRoomVisit__FiPUsPUs = .text:0x801B4010; // type:function size:0x34
hasVisitedRoom__8dStage_cCFi = .text:0x801B4050; // type:function size:0x8C
setRoomVisited__8dStage_cFi = .text:0x801B40E0; // type:function size:0x12C
createRoom__8dStage_cFib = .text:0x801B4210; // type:function size:0x28
createLytSeekerStone__8dStage_cFv = .text:0x801B4240; // type:function size:0x68
getParentForRoom__8dStage_cFl = .text:0x801B42B0; // type:function size:0x20
bindStageResToFile__8dStage_cFPQ34nw4r3g3d7ResFile = .text:0x801B42D0; // type:function size:0x50
bindSkyCmnToResFile__8dStage_cFPQ34nw4r3g3d7ResFile = .text:0x801B4320; // type:function size:0x54
getMA0AnmTexSrt__8dStage_cFPQ34nw4r3g3d12ResAnmTexSrtPCc = .text:0x801B4380; // type:function size:0xA0
getMA0IndirectSrt__8dStage_cFPQ34nw4r3g3d12ResAnmTexSrtRCQ34nw4r3g3d6ResMdl = .text:0x801B4420; // type:function size:0x9C
changeLoadedEntities__8dStage_cFUlb = .text:0x801B44C0; // type:function size:0x50
RoomManager__checkRoomFlag = .text:0x801B4510; // type:function size:0x3C
RoomManager__checkEnemyDefeatFlag = .text:0x801B4550; // type:function size:0x6C
checkEnemyDefeatFlag__8dStage_cFUs = .text:0x801B4550; // type:function size:0x6C
fn_801B45C0 = .text:0x801B45C0; // type:function size:0xAC
RoomManager__RoomTable__ctor = .text:0x801B4670; // type:function size:0x110
RoomManager__MapRelated__init = .text:0x801B4780; // type:function size:0x180
fn_801B4900 = .text:0x801B4900; // type:function size:0x44
fn_801B4950 = .text:0x801B4950; // type:function size:0x40
fn_801B4990 = .text:0x801B4990; // type:function size:0x84
__ct__12dRoomTable_cFv = .text:0x801B4670; // type:function size:0x110
__ct__10MapRelatedFv = .text:0x801B4780; // type:function size:0x180
__ct__Q210MapRelated5ChildFv = .text:0x801B4900; // type:function size:0x44
__dt__Q210MapRelated5ChildFv = .text:0x801B4950; // type:function size:0x40
__dt__10MapRelatedFv = .text:0x801B4990; // type:function size:0x84
fn_801B4A20 = .text:0x801B4A20; // type:function size:0xBC
fn_801B4AE0 = .text:0x801B4AE0; // type:function size:0x44
fn_801B4B30 = .text:0x801B4B30; // type:function size:0x24
@@ -11014,91 +11014,91 @@ fn_801B5180 = .text:0x801B5180; // type:function size:0x7F0
fn_801B5970 = .text:0x801B5970; // type:function size:0x38
fn_801B59B0 = .text:0x801B59B0; // type:function size:0x58
fn_801B5A10 = .text:0x801B5A10; // type:function size:0x58
RoomManager__dtor = .text:0x801B5A70; // type:function size:0x94
fn_801B5B10 = .text:0x801B5B10; // type:function size:0x30
fn_801B5B40 = .text:0x801B5B40; // type:function size:0xC
fn_801B5B50 = .text:0x801B5B50; // type:function size:0x10
fn_801B5B60 = .text:0x801B5B60; // type:function size:0x2C
__dt__8dStage_cFv = .text:0x801B5A70; // type:function size:0x94
callPhase__18sFPhase<8dStage_c>Fv = .text:0x801B5B10; // type:function size:0x30
onReset__18sFPhase<8dStage_c>Fv = .text:0x801B5B40; // type:function size:0xC
nextPhase__18sFPhase<8dStage_c>Fv = .text:0x801B5B50; // type:function size:0x10
hasReachedEnd__18sFPhase<8dStage_c>CFv = .text:0x801B5B60; // type:function size:0x2C
fn_801B5B90 = .text:0x801B5B90; // type:function size:0x10
fn_801B5BA0 = .text:0x801B5BA0; // type:function size:0x28
__sinit_\d_stage_cpp = .text:0x801B5BA0; // type:function size:0x28 scope:local
AcStageSelect__ctor = .text:0x801B5BD0; // type:function size:0x4C
AcStageSelect__dtor = .text:0x801B5C20; // type:function size:0x5C
dRoom__ctor = .text:0x801B5C80; // type:function size:0x17C
RoomModel_ctor = .text:0x801B5E00; // type:function size:0x5C
fn_801B5E60 = .text:0x801B5E60; // type:function size:0x7C
fn_801B5EE0 = .text:0x801B5EE0; // type:function size:0x15C
fn_801B6040 = .text:0x801B6040; // type:function size:0x58
fn_801B60A0 = .text:0x801B60A0; // type:function size:0x6C
fn_801B6110 = .text:0x801B6110; // type:function size:0xA0
fn_801B61B0 = .text:0x801B61B0; // type:function size:0xA4
fn_801B6260 = .text:0x801B6260; // type:function size:0x40
dRoom__init = .text:0x801B62A0; // type:function size:0x33C
fn_801B65E0 = .text:0x801B65E0; // type:function size:0x10
dRoom__destory = .text:0x801B65F0; // type:function size:0x74
dRoom__baseUpdate = .text:0x801B6670; // type:function size:0x140
fn_801B67B0 = .text:0x801B67B0; // type:function size:0x10
dRoom__draw = .text:0x801B67C0; // type:function size:0x84
dRoom__getEntranceById = .text:0x801B6850; // type:function size:0x34
dRoom_c_classInit__Fv = .text:0x801B5C80; // type:function size:0x17C
__ct__Q27dRoom_c7model_cFv = .text:0x801B5E00; // type:function size:0x5C
__dt__Q27dRoom_c5mdl_cFv = .text:0x801B5E60; // type:function size:0x7C
__dt__Q27dRoom_c7model_cFv = .text:0x801B5EE0; // type:function size:0x15C
__dt__19sFState_c<7dRoom_c>Fv = .text:0x801B6040; // type:function size:0x58
__dt__22sFStateFct_c<7dRoom_c>Fv = .text:0x801B60A0; // type:function size:0x6C
__dt__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B6110; // type:function size:0xA0
__dt__45sFStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c>Fv = .text:0x801B61B0; // type:function size:0xA4
__dt__Q27dRoom_c12UnkRoomClassFv = .text:0x801B6260; // type:function size:0x40
create__7dRoom_cFv = .text:0x801B62A0; // type:function size:0x33C
changeState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x801B65E0; // type:function size:0x10
doDelete__7dRoom_cFv = .text:0x801B65F0; // type:function size:0x74
execute__7dRoom_cFv = .text:0x801B6670; // type:function size:0x140
executeState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B67B0; // type:function size:0x10
draw__7dRoom_cFv = .text:0x801B67C0; // type:function size:0x84
getEntranceById__7dRoom_cCFUc = .text:0x801B6850; // type:function size:0x34
fn_801B6890 = .text:0x801B6890; // type:function size:0x10
RoomManager__getEVNTForIndex = .text:0x801B68A0; // type:function size:0x10
fn_801B68B0 = .text:0x801B68B0; // type:function size:0x20
fn_801B68D0 = .text:0x801B68D0; // type:function size:0x54
fn_801B6930 = .text:0x801B6930; // type:function size:0x20
fn_801B6950 = .text:0x801B6950; // type:function size:0x58
fn_801B69B0 = .text:0x801B69B0; // type:function size:0xBC
registerRoomCollisions = .text:0x801B6A70; // type:function size:0x110
fn_801B6B80 = .text:0x801B6B80; // type:function size:0x70
fn_801B6BF0 = .text:0x801B6BF0; // type:function size:0x6C
fn_801B6C60 = .text:0x801B6C60; // type:function size:0xFC
getFullRoomModelBounds = .text:0x801B6D60; // type:function size:0xC8
fn_801B6E30 = .text:0x801B6E30; // type:function size:0x14
fn_801B6E50 = .text:0x801B6E50; // type:function size:0xD0
fn_801B6F20 = .text:0x801B6F20; // type:function size:0x78
fn_801B6FA0 = .text:0x801B6FA0; // type:function size:0x4C
fn_801B6FF0 = .text:0x801B6FF0; // type:function size:0x80
fn_801B7070 = .text:0x801B7070; // type:function size:0x8
Room__stateActiveEnter = .text:0x801B7080; // type:function size:0x88
Room__stateActiveUpdate = .text:0x801B7110; // type:function size:0x44
Room__stateActiveLeave = .text:0x801B7160; // type:function size:0x4
fn_801B7170 = .text:0x801B7170; // type:function size:0x10
Room__stateInactiveEnter = .text:0x801B7180; // type:function size:0x50
Room__stateInactiveUpdate = .text:0x801B71D0; // type:function size:0x28
Room__stateInactiveLeave = .text:0x801B7200; // type:function size:0x10
fn_801B7210 = .text:0x801B7210; // type:function size:0x54
fn_801B7270 = .text:0x801B7270; // type:function size:0x170
fn_801B73E0 = .text:0x801B73E0; // type:function size:0x4
fn_801B73F0 = .text:0x801B73F0; // type:function size:0xE4
fn_801B74E0 = .text:0x801B74E0; // type:function size:0xB0
fn_801B7590 = .text:0x801B7590; // type:function size:0x98
createRoomModel = .text:0x801B7630; // type:function size:0x490
fn_801B7AC0 = .text:0x801B7AC0; // type:function size:0x168
fn_801B7C30 = .text:0x801B7C30; // type:function size:0x68
fn_801B7CA0 = .text:0x801B7CA0; // type:function size:0x38
fn_801B7CE0 = .text:0x801B7CE0; // type:function size:0x18
m3d__bmdl_c__getBounds = .text:0x801B7D00; // type:function size:0x4
fn_801B7D10 = .text:0x801B7D10; // type:function size:0x3C
fn_801B7D50 = .text:0x801B7D50; // type:function size:0xBC
fn_801B7E10 = .text:0x801B7E10; // type:function size:0xF8
fn_801B7F10 = .text:0x801B7F10; // type:function size:0x2C
fn_801B7F40 = .text:0x801B7F40; // type:function size:0x10
fn_801B7F50 = .text:0x801B7F50; // type:function size:0x60
fn_801B7FB0 = .text:0x801B7FB0; // type:function size:0xC
fn_801B7FC0 = .text:0x801B7FC0; // type:function size:0x1C
fn_801B7FE0 = .text:0x801B7FE0; // type:function size:0x1C
fn_801B8000 = .text:0x801B8000; // type:function size:0x1C
fn_801B8020 = .text:0x801B8020; // type:function size:0x10
fn_801B8030 = .text:0x801B8030; // type:function size:0x10
fn_801B8040 = .text:0x801B8040; // type:function size:0x10
fn_801B8050 = .text:0x801B8050; // type:function size:0x10
fn_801B8060 = .text:0x801B8060; // type:function size:0x10
fn_801B8070 = .text:0x801B8070; // type:function size:0x10
fn_801B8080 = .text:0x801B8080; // type:function size:0x30
fn_801B80B0 = .text:0x801B80B0; // type:function size:0x30
fn_801B80E0 = .text:0x801B80E0; // type:function size:0x30
dRoom__dtor = .text:0x801B8110; // type:function size:0x11C
Room__initStates = .text:0x801B8230; // type:function size:0x1C0
Room__ActorStatedtor = .text:0x801B83F0; // type:function size:0x58
fn_801B8450 = .text:0x801B8450; // type:function size:0x88
deactivateUpdatesCb__FP9dAcBase_c = .text:0x801B68B0; // type:function size:0x20
deactivateUpdates__7dRoom_cFv = .text:0x801B68D0; // type:function size:0x54
activateUpdatesCb__FP9dAcBase_c = .text:0x801B6930; // type:function size:0x20
activateUpdates__7dRoom_cFv = .text:0x801B6950; // type:function size:0x58
foreachObject__7dRoom_cFPFP9dAcBase_c_v = .text:0x801B69B0; // type:function size:0xBC
setupBg__7dRoom_cFv = .text:0x801B6A70; // type:function size:0x110
executeBg__7dRoom_cFv = .text:0x801B6B80; // type:function size:0x70
releaseBg__7dRoom_cFv = .text:0x801B6BF0; // type:function size:0x6C
drawOnMapIfVisible__7dRoom_cFP6mMtx_ci = .text:0x801B6C60; // type:function size:0xFC
getBounds__7dRoom_cCFP7mVec3_cP7mVec3_c = .text:0x801B6D60; // type:function size:0xC8
formatObj__7dRoom_cFiR14SizedString<8> = .text:0x801B6E30; // type:function size:0x14
sprintf__14SizedString<8>FPCce = .text:0x801B6E50; // type:function size:0xD0
updateObjNodeInEachRoom__7dRoom_cFib = .text:0x801B6F20; // type:function size:0x78
destroyModels__7dRoom_cFv = .text:0x801B6FA0; // type:function size:0x4C
someLastBossThing__7dRoom_cFb = .text:0x801B6FF0; // type:function size:0x80
getFrame__7dRoom_cCFv = .text:0x801B7070; // type:function size:0x8
initializeState_Active__7dRoom_cFv = .text:0x801B7080; // type:function size:0x88
executeState_Active__7dRoom_cFv = .text:0x801B7110; // type:function size:0x44
finalizeState_Active__7dRoom_cFv = .text:0x801B7160; // type:function size:0x4
deleteActor__FP9dAcBase_c = .text:0x801B7170; // type:function size:0x10
initializeState_NonActive__7dRoom_cFv = .text:0x801B7180; // type:function size:0x50
executeState_NonActive__7dRoom_cFv = .text:0x801B71D0; // type:function size:0x28
finalizeState_NonActive__7dRoom_cFv = .text:0x801B7200; // type:function size:0x10
remove__Q27dRoom_c5mdl_cFv = .text:0x801B7210; // type:function size:0x54
create__Q27dRoom_c5mdl_cFQ34nw4r3g3d6ResMdlR12mAllocator_c = .text:0x801B7270; // type:function size:0x170
__ct__Q34nw4r4math4AABBFv = .text:0x801B73E0; // type:function size:0x4
configureSomething__Q27dRoom_c5mdl_cFv = .text:0x801B73F0; // type:function size:0xE4
somethingVisibility__Q27dRoom_c5mdl_cFUlb = .text:0x801B74E0; // type:function size:0xB0
doSomethingWithVis__Q27dRoom_c5mdl_cFb = .text:0x801B7590; // type:function size:0x98
create__Q27dRoom_c7model_cFQ34nw4r3g3d7ResFileR12mAllocator_clP12UnkWithWater = .text:0x801B7630; // type:function size:0x490
execute__Q27dRoom_c7model_cFlbf = .text:0x801B7AC0; // type:function size:0x168
draw__Q27dRoom_c7model_cFi = .text:0x801B7C30; // type:function size:0x68
configureSomething__Q27dRoom_c7model_cFiPQ27dRoom_c5mdl_c = .text:0x801B7CA0; // type:function size:0x38
getDrawPriority__Q27dRoom_c7model_cFl = .text:0x801B7CE0; // type:function size:0x18
getBounds__Q27dRoom_c7model_cCFP7mVec3_cP7mVec3_c = .text:0x801B7D00; // type:function size:0x4
getResNode__Q27dRoom_c7model_cFPCc = .text:0x801B7D10; // type:function size:0x3C
updateObjNode__Q27dRoom_c7model_cFPCcb = .text:0x801B7D50; // type:function size:0xBC
destroy__Q27dRoom_c7model_cFv = .text:0x801B7E10; // type:function size:0xF8
getFrame__Q27dRoom_c7model_cCFv = .text:0x801B7F10; // type:function size:0x2C
getStateID__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801B7F40; // type:function size:0x10
build__22sFStateFct_c<7dRoom_c>FRC12sStateIDIf_c = .text:0x801B7F50; // type:function size:0x60
dispose__22sFStateFct_c<7dRoom_c>FRP10sStateIf_c = .text:0x801B7FB0; // type:function size:0xC
initialize__19sFState_c<7dRoom_c>Fv = .text:0x801B7FC0; // type:function size:0x1C
execute__19sFState_c<7dRoom_c>Fv = .text:0x801B7FE0; // type:function size:0x1C
finalize__19sFState_c<7dRoom_c>Fv = .text:0x801B8000; // type:function size:0x1C
initializeState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B8020; // type:function size:0x10
finalizeState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B8030; // type:function size:0x10
refreshState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x801B8040; // type:function size:0x10
getState__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801B8050; // type:function size:0x10
getNewStateID__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801B8060; // type:function size:0x10
getOldStateID__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x801B8070; // type:function size:0x10
finalizeState__21sFStateID_c<7dRoom_c>CFR7dRoom_c = .text:0x801B8080; // type:function size:0x30
executeState__21sFStateID_c<7dRoom_c>CFR7dRoom_c = .text:0x801B80B0; // type:function size:0x30
initializeState__21sFStateID_c<7dRoom_c>CFR7dRoom_c = .text:0x801B80E0; // type:function size:0x30
__dt__7dRoom_cFv = .text:0x801B8110; // type:function size:0x11C
__sinit_\d_room_cpp = .text:0x801B8230; // type:function size:0x1C0 scope:local
__dt__21sFStateID_c<7dRoom_c>Fv = .text:0x801B83F0; // type:function size:0x58
isSameName__21sFStateID_c<7dRoom_c>CFPCc = .text:0x801B8450; // type:function size:0x88
TagVrbox__ctor = .text:0x801B84E0; // type:function size:0x5C
TagVrbox__setStageSpecificSkyCameraStuffMaybeMaybe = .text:0x801B8540; // type:function size:0x25C
fn_801B87A0 = .text:0x801B87A0; // type:function size:0x15C
@@ -11188,7 +11188,7 @@ fn_801BB2E0 = .text:0x801BB2E0; // type:function size:0xC
setSpawnData__12SpawnInfoExtFPCcUcUcUcRC7mVec3_c4mAng = .text:0x801BB2F0; // type:function size:0x88
set__14LinkReloadInfoFUcRC7mVec3_c4mAngUl = .text:0x801BB380; // type:function size:0x34
isCurrentStage__9dScGame_cFPCc = .text:0x801BB3C0; // type:function size:0x10
isStageSkyloftLayer20 = .text:0x801BB3D0; // type:function size:0x54
isStageSkyloftLayer20__9dScGame_cFv = .text:0x801BB3D0; // type:function size:0x54
isInCredits = .text:0x801BB430; // type:function size:0x54
isStateLayerWithSeekerStoneHintMenu = .text:0x801BB490; // type:function size:0x78
copySpawnNextToCurrent__9dScGame_cFv = .text:0x801BB510; // type:function size:0xBC
@@ -11229,7 +11229,7 @@ hasReachedEnd__19sFPhase<9dScGame_c>CFv = .text:0x801BC070; // type:function siz
finalizeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC0A0; // type:function size:0x30
executeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC0D0; // type:function size:0x30
initializeState__23sFStateID_c<9dScGame_c>CFR9dScGame_c = .text:0x801BC100; // type:function size:0x30
__sinit_\d_sc_game_cpp = .text:0x801BC130; // type:function size:0x27C
__sinit_\d_sc_game_cpp = .text:0x801BC130; // type:function size:0x27C scope:local
__dt__23sFStateID_c<9dScGame_c>Fv = .text:0x801BC3B0; // type:function size:0x58
__dt__30sFStateVirtualID_c<9dScGame_c>Fv = .text:0x801BC410; // type:function size:0x5C
number__30sFStateVirtualID_c<9dScGame_c>CFv = .text:0x801BC470; // type:function size:0xDC
@@ -14571,7 +14571,7 @@ TgMassObj__destroy = .text:0x802760F0; // type:function size:0xB4
fn_802761B0 = .text:0x802761B0; // type:function size:0x7C
TgMassObj__update = .text:0x80276230; // type:function size:0xEC
TgMassObj__draw = .text:0x80276320; // type:function size:0x74
fn_802763A0 = .text:0x802763A0; // type:function size:0x60
unloadRoom__12dTgMassObj_cFUs = .text:0x802763A0; // type:function size:0x60
fn_80276400 = .text:0x80276400; // type:function size:0x250
fn_80276650 = .text:0x80276650; // type:function size:0x260
fn_802768B0 = .text:0x802768B0; // type:function size:0xB4
@@ -17593,7 +17593,7 @@ setCullMode__Q23m3d6bmdl_cFUl11_GXCullModeb = .text:0x802E9FA0; // type:function
setCullModeAll__Q23m3d6bmdl_cF11_GXCullModeb = .text:0x802EA090; // type:function size:0x120
setMatVisible__Q23m3d6bmdl_cFUlb = .text:0x802EA1B0; // type:function size:0xE4
setMatTexture__Q23m3d6bmdl_cFPcP9_GXTexObjbPvii = .text:0x802EA2A0; // type:function size:0x2F0
getBounds__Q23m3d6bmdl_cFP7mVec3_cP7mVec3_c = .text:0x802EA590; // type:function size:0x150
getBounds__Q23m3d6bmdl_cCFP7mVec3_cP7mVec3_c = .text:0x802EA590; // type:function size:0x150
remove__Q23m3d6bmdl_cFv = .text:0x802EA6E0; // type:function size:0xC
__ct__Q23m3d11calcRatio_cFv = .text:0x802EA6F0; // type:function size:0x38
__dt__Q23m3d11calcRatio_cFv = .text:0x802EA730; // type:function size:0x40
@@ -19157,9 +19157,9 @@ dBgS_MoveBGProc_Typical__FP4dBgWPvRC13cBgS_PolyInfobP7mVec3_cP7mAng3_cP7mAng3_c
dBgS_MoveBGProc_RotY__FP4dBgWPvRC13cBgS_PolyInfobP7mVec3_cP7mAng3_cP7mAng3_c = .text:0x8033CDD0; // type:function size:0x34
dBgS_MoveBGProc_TypicalRotY__FP4dBgWPvRC13cBgS_PolyInfobP7mVec3_cP7mAng3_cP7mAng3_c = .text:0x8033CE10; // type:function size:0x6C
RideCallBack__4dBgSFRC13cBgS_PolyInfoP12dAcObjBase_c = .text:0x8033CE80; // type:function size:0x80
ArrowStickCallBack__4dBgSFRC13cBgS_PolyInfoP9dAcBase_cR7mVec3_c = .text:0x8033CF00; // type:function size:0x78
UnkCallback__4dBgSFRC13cBgS_PolyInfoP9dAcBase_c = .text:0x8033CF80; // type:function size:0x88
PushPullCallBack__4dBgSFRC13cBgS_PolyInfoP9dAcBase_cQ29dBgW_Base13PushPullLabel = .text:0x8033D010; // type:function size:0x98
ArrowStickCallBack__4dBgSFRC13cBgS_PolyInfoP12dAcObjBase_cR7mVec3_c = .text:0x8033CF00; // type:function size:0x78
UnkCallback__4dBgSFRC13cBgS_PolyInfoP12dAcObjBase_c = .text:0x8033CF80; // type:function size:0x88
PushPullCallBack__4dBgSFRC13cBgS_PolyInfoP12dAcObjBase_cQ29dBgW_Base13PushPullLabel = .text:0x8033D010; // type:function size:0x98
dBgS_CheckBWallPoly__FRC13cBgS_PolyInfo = .text:0x8033D0B0; // type:function size:0x70
dBgS_CheckBGroundPoly__FRC13cBgS_PolyInfo = .text:0x8033D120; // type:function size:0x5C
dBgS_CheckBRoofPoly__FRC13cBgS_PolyInfo = .text:0x8033D180; // type:function size:0x5C
@@ -19169,10 +19169,10 @@ UpdateScrollTex__4dBgSFv = .text:0x8033D280; // type:function size:0x90
SetupMapGX__4dBgSFP6mMtx_c = .text:0x8033D310; // type:function size:0x4E0
SetupMapMaterial__4dBgSFibl = .text:0x8033D7F0; // type:function size:0x224
GetMapAccessor__4dBgSFv = .text:0x8033DA20; // type:function size:0x8
DrawMap__4dBgSFUcP6mMtx_cbi = .text:0x8033DA30; // type:function size:0x1A8
DrawMap__4dBgSFiP6mMtx_cbi = .text:0x8033DA30; // type:function size:0x1A8
SetupScrollGX__4dBgSFv = .text:0x8033DBE0; // type:function size:0x2A0
SetupScrollMaterial__4dBgSFilb = .text:0x8033DE80; // type:function size:0x408
DrawMapScroll__4dBgSFUcP6mMtx_cbi = .text:0x8033E290; // type:function size:0x200
DrawMapScroll__4dBgSFiP6mMtx_cbi = .text:0x8033E290; // type:function size:0x200
DrawSkyKeepMap__4dBgSFP6mMtx_ci = .text:0x8033E490; // type:function size:0x2E4
ConfigureMapTexture__4dBgSFPQ23EGG4Heap = .text:0x8033E780; // type:function size:0x1A0
__ct__14MapLineSegmentFv = .text:0x8033E920; // type:function size:0x20
@@ -28179,14 +28179,14 @@ lbl_804E0AE4 = .rodata:0x804E0AE4; // type:object size:0x14
lbl_804E0AF8 = .rodata:0x804E0AF8; // type:object size:0x14
lbl_804E0B0C = .rodata:0x804E0B0C; // type:object size:0x14 data:float
lbl_804E0B20 = .rodata:0x804E0B20; // type:object size:0x18 data:float
lbl_804E0B38 = .rodata:0x804E0B38; // type:object size:0x10
lbl_804E0B48 = .rodata:0x804E0B48; // type:object size:0x18
lbl_804E0B60 = .rodata:0x804E0B60; // type:object size:0x30
lbl_804E0B90 = .rodata:0x804E0B90; // type:object size:0x70
lbl_804E0C00 = .rodata:0x804E0C00; // type:object size:0x10
lbl_804E0C10 = .rodata:0x804E0C10; // type:object size:0x10
lbl_804E0C20 = .rodata:0x804E0C20; // type:object size:0x60
lbl_804E0C80 = .rodata:0x804E0C80; // type:object size:0x18
layerHandlers = .rodata:0x804E0B38; // type:object size:0x10
layerHandlers2 = .rodata:0x804E0B48; // type:object size:0x18
layerHandlers3 = .rodata:0x804E0B60; // type:object size:0x30
defaultHandlers = .rodata:0x804E0B90; // type:object size:0x70
roomStageHandlers = .rodata:0x804E0C00; // type:object size:0x10
stageRoomHandlers = .rodata:0x804E0C10; // type:object size:0x10
roomHandlers = .rodata:0x804E0C20; // type:object size:0x60
roomReactivateHandlers = .rodata:0x804E0C80; // type:object size:0x18
lbl_804E0C98 = .rodata:0x804E0C98; // type:object size:0x3C
lbl_804E0CD4 = .rodata:0x804E0CD4; // type:object size:0x3C
lbl_804E0D10 = .rodata:0x804E0D10; // type:object size:0x3C
@@ -28406,8 +28406,8 @@ lbl_804EA934 = .rodata:0x804EA934; // type:object size:0x1C
lbl_804EA950 = .rodata:0x804EA950; // type:object size:0x78 data:4byte
lbl_804EA9C8 = .rodata:0x804EA9C8; // type:object size:0x58 data:4byte
lbl_804EAA20 = .rodata:0x804EAA20; // type:object size:0x140
RoomCollisionData = .rodata:0x804EAB60; // type:object size:0x10 data:4byte
lbl_804EAB70 = .rodata:0x804EAB70; // type:object size:0x18
sRoomBg = .rodata:0x804EAB60; // type:object size:0x10 scope:local data:4byte
cfg = .rodata:0x804EAB70; // type:object size:0x18 scope:local
TRANSITION_TYPES = .rodata:0x804EAB88; // type:object size:0x10
GODDESS_WALL_FLAGS = .rodata:0x804EAB98; // type:object size:0x78 data:4byte
BIPPING_STORY_FLAGS = .rodata:0x804EAC10; // type:object size:0x28 data:4byte
@@ -29875,7 +29875,8 @@ lbl_80500948 = .data:0x80500948; // type:object size:0x14
lbl_8050095C = .data:0x8050095C; // type:object size:0xC
lbl_80500968 = .data:0x80500968; // type:object size:0x2C
lbl_80500994 = .data:0x80500994; // type:object size:0x2C
lbl_805009C0 = .data:0x805009C0; // type:object size:0x60
__vt__12UnkWithWater = .data:0x805009C0; // type:object size:0x10
lbl_805009D0 = .data:0x805009D0; // type:object size:0x50
AnimModelWrapper__vtable = .data:0x80500A20; // type:object size:0x50
lbl_80500A70 = .data:0x80500A70; // type:object size:0x2C
lbl_80500A9C = .data:0x80500A9C; // type:object size:0xC
@@ -30777,7 +30778,7 @@ lbl_8050DDB8 = .data:0x8050DDB8; // type:object size:0x20
@4669 = .data:0x8050DDD8; // type:object size:0xE scope:local data:string
@4670 = .data:0x8050DDE8; // type:object size:0xB scope:local data:string
__vt__8dScene_c = .data:0x8050DDF8; // type:object size:0x4C
lbl_8050DE48 = .data:0x8050DE48; // type:object size:0x10
lbl_8050DE48 = .data:0x8050DE48; // type:object size:0xE data:string
lbl_8050DE58 = .data:0x8050DE58; // type:object size:0x5C
lbl_8050DEB4 = .data:0x8050DEB4; // type:object size:0x10
lbl_8050DEC4 = .data:0x8050DEC4; // type:object size:0x10
@@ -34179,21 +34180,21 @@ lbl_8052DE68 = .data:0x8052DE68; // type:object size:0x10
GlobalMessageRelatedContext__vtable = .data:0x8052DE78; // type:object size:0x4C
ActorEventFlowManager__vtable = .data:0x8052DEC4; // type:object size:0x78
g_profile_STAGE = .data:0x8052DF40; // type:object size:0xC
actorInit.defaultFlags = .data:0x8052DF4C; // type:object size:0x24
sCallbacks__8dStage_c = .data:0x8052DF4C; // type:object size:0x24
lbl_8052DF70 = .data:0x8052DF70; // type:object size:0x10
lbl_8052DF80 = .data:0x8052DF80; // type:object size:0x10
lbl_8052DF90 = .data:0x8052DF90; // type:object size:0x10 data:string
lbl_8052DFA0 = .data:0x8052DFA0; // type:object size:0x10 data:string
lbl_8052DFB0 = .data:0x8052DFB0; // type:object size:0xC data:4byte
sMatsToTry = .data:0x8052DFB0; // type:object size:0xC data:4byte
lbl_8052DFBC = .data:0x8052DFBC; // type:object size:0x1C
lbl_8052DFD8 = .data:0x8052DFD8; // type:object size:0x1C
RoomManager__vtable = .data:0x8052DFF4; // type:object size:0x4C
__vt__8dStage_c = .data:0x8052DFF4; // type:object size:0x4C
lbl_8052E040 = .data:0x8052E040; // type:object size:0xC
RoomManager__RoomTable__vtable = .data:0x8052E04C; // type:object size:0xC
lbl_8052E058 = .data:0x8052E058; // type:object size:0x24
__vt__12dRoomTable_c = .data:0x8052E04C; // type:object size:0xC
__vt__18sFPhase<8dStage_c> = .data:0x8052E058; // type:object size:0x24
g_profile_STAGE_SELECT = .data:0x8052E080; // type:object size:0xC
AcStageSelect__vtable = .data:0x8052E08C; // type:object size:0x4C
g_profile_ROOM = .data:0x8052E0D8; // type:object size:0x44
g_profile_ROOM = .data:0x8052E0D8; // type:object size:0xC
lbl_8052E11C = .data:0x8052E11C; // type:object size:0x10
lbl_8052E12C = .data:0x8052E12C; // type:object size:0x10
lbl_8052E13C = .data:0x8052E13C; // type:object size:0x10
@@ -34201,14 +34202,14 @@ lbl_8052E14C = .data:0x8052E14C; // type:object size:0x10
lbl_8052E15C = .data:0x8052E15C; // type:object size:0xC
lbl_8052E168 = .data:0x8052E168; // type:object size:0xC
lbl_8052E174 = .data:0x8052E174; // type:object size:0x14
dRoom__vtable = .data:0x8052E188; // type:object size:0x4C
lbl_8052E1D4 = .data:0x8052E1D4; // type:object size:0xC
lbl_8052E1E0 = .data:0x8052E1E0; // type:object size:0x30
lbl_8052E210 = .data:0x8052E210; // type:object size:0x30
lbl_8052E240 = .data:0x8052E240; // type:object size:0x18
lbl_8052E258 = .data:0x8052E258; // type:object size:0x18
lbl_8052E270 = .data:0x8052E270; // type:object size:0xB4
lbl_8052E324 = .data:0x8052E324; // type:object size:0x34
__vt__7dRoom_c = .data:0x8052E188; // type:object size:0x4C
__vt__Q27dRoom_c12UnkRoomClass = .data:0x8052E1D4; // type:object size:0xC
__vt__45sFStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c> = .data:0x8052E1E0; // type:object size:0x30
__vt__75sStateMgr_c<7dRoom_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x8052E210; // type:object size:0x30
__vt__22sFStateFct_c<7dRoom_c> = .data:0x8052E240; // type:object size:0x14
__vt__19sFState_c<7dRoom_c> = .data:0x8052E258; // type:object size:0x18
__vt__Q27dRoom_c5mdl_c = .data:0x8052E270; // type:object size:0x2C
__vt__21sFStateID_c<7dRoom_c> = .data:0x8052E324; // type:object size:0x34
g_profile_VRBOX_TAG = .data:0x8052E358; // type:object size:0x10
lbl_8052E368 = .data:0x8052E368; // type:object size:0x18
lbl_8052E380 = .data:0x8052E380; // type:object size:0x20
@@ -40233,7 +40234,7 @@ lbl_80575749 = .sbss:0x80575749; // type:object size:0x7 data:byte
CURRENT_LANGUAGE_STRING = .sbss:0x80575750; // type:object size:0x8 data:byte
lbl_80575758 = .sbss:0x80575758; // type:object size:0x4 data:4byte
lbl_8057575C = .sbss:0x8057575C; // type:object size:0x4 data:4byte
m_Instance__11RoomManager = .sbss:0x80575760; // type:object size:0x4 data:4byte
sInstance__8dStage_c = .sbss:0x80575760; // type:object size:0x4 data:4byte
lbl_80575764 = .sbss:0x80575764; // type:object size:0x1 data:byte
lbl_80575768 = .sbss:0x80575768; // type:object size:0x8 data:byte
lbl_80575770 = .sbss:0x80575770; // type:object size:0x4 data:float
@@ -40380,7 +40381,7 @@ sCurrentObtainingItemOarcName = .sbss:0x80575918; // type:object size:0x4 data:4
@GUARD@draw__9dAcTbox_cFv@shadowDirs = .sbss:0x80575926; // type:object size:0x1 data:byte
@GUARD@checkIsClear__9dAcTbox_cCFv@offsets = .sbss:0x80575927; // type:object size:0x1 data:byte
lbl_80575928 = .sbss:0x80575928; // type:object size:0x8 data:byte
TgMassObj__MASS_OBJ_TAG_PTR = .sbss:0x80575930; // type:object size:0x4 data:4byte
sInstance__12dTgMassObj_c = .sbss:0x80575930; // type:object size:0x4 data:4byte
lbl_80575934 = .sbss:0x80575934; // type:object size:0x4 data:4byte
lbl_80575938 = .sbss:0x80575938; // type:object size:0x4 data:float
lbl_8057593C = .sbss:0x8057593C; // type:object size:0x4 data:float
@@ -41980,7 +41981,7 @@ lbl_8057790E = .sdata2:0x8057790E; // type:object size:0x2 data:2byte
lbl_80577910 = .sdata2:0x80577910; // type:object size:0x4 data:float
lbl_80577914 = .sdata2:0x80577914; // type:object size:0x4 data:float
lbl_80577918 = .sdata2:0x80577918; // type:object size:0x8 data:float
lbl_80577920 = .sdata2:0x80577920; // type:object size:0x8
roomActivateHandlers = .sdata2:0x80577920; // type:object size:0x8
lbl_80577928 = .sdata2:0x80577928; // type:object size:0x4 data:float
lbl_8057792C = .sdata2:0x8057792C; // type:object size:0x4 data:float
lbl_80577930 = .sdata2:0x80577930; // type:object size:0x8 data:double
@@ -49132,8 +49133,8 @@ lbl_805B31E0 = .bss:0x805B31E0; // type:object size:0x400
MSBT_NAME_IN_ARC = .bss:0x805B35E0; // type:object size:0x80 data:byte
lbl_805B3660 = .bss:0x805B3660; // type:object size:0x80 data:byte
lbl_805B36E0 = .bss:0x805B36E0; // type:object size:0x10
Room__STATE_ACTIVE = .bss:0x805B36F0; // type:object size:0x40 data:4byte
Room__STATE_NON_ACTIVE = .bss:0x805B3730; // type:object size:0x30 data:4byte
StateID_Active__7dRoom_c = .bss:0x805B36F0; // type:object size:0x30 data:4byte
StateID_NonActive__7dRoom_c = .bss:0x805B3730; // type:object size:0x30 data:4byte
lbl_805B3760 = .bss:0x805B3760; // type:object size:0xC
StateID_Stanby__10dScTitle_c = .bss:0x805B376C; // type:object size:0x34
StateID_Action__10dScTitle_c = .bss:0x805B37AC; // type:object size:0x34
+5 -1
View File
@@ -340,7 +340,7 @@ config.libs = [
Object(Matching, "d/d_heap.cpp"),
Object(Matching, "d/d_rawarchive.cpp"),
Object(Matching, "d/d_scene.cpp"),
Object(NonMatching, "d/d_stage.cpp"),
Object(Matching, "d/d_stage_parse.cpp"),
Object(NonMatching, "d/d_sys.cpp"),
Object(NonMatching, "toBeSorted/sound_info.cpp"),
Object(Matching, "toBeSorted/arc_callback_handler.cpp"),
@@ -429,6 +429,10 @@ config.libs = [
Object(Matching, "d/lyt/d_lyt_fader.cpp"),
Object(Matching, "d/lyt/d_screen_fader.cpp"),
Object(NonMatching, "d/a/d_a_insect.cpp"),
Object(NonMatching, "d/d_stage_mgr.cpp"),
Object(NonMatching, "d/d_last.cpp"),
Object(NonMatching, "d/d_stage.cpp"),
Object(NonMatching, "d/d_room.cpp"),
Object(NonMatching, "d/d_cs_base.cpp"),
Object(NonMatching, "d/d_cs_game.cpp"),
Object(Matching, "d/d_sc_title.cpp"),
+1 -1
View File
@@ -94,7 +94,7 @@ public:
/* 0xF4 */ char someStr[4];
/* 0xF8 */ char field_0xf8[0xfc - 0xf8];
protected:
public:
/* 80501544 */ // vtable
/* 0x08 | 8002c880 */ virtual int create();
/* 0x10 | 8002c8f0 */ virtual void postCreate(MAIN_STATE_e state);
+4 -4
View File
@@ -160,11 +160,11 @@ public:
public:
/* 8002e630 */ static dAcObjBase_c *create(
fProfile::PROFILE_NAME_e actorId, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale,
fProfile::PROFILE_NAME_e actorId, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale,
u32 params2
);
/* 8002e6d0 */ static dAcObjBase_c *create(
char *name, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id,
const char *name, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale, u32 params2, u16 id,
s8 viewclipId
);
/* 8002e770 */ static dAcObjBase_c *
@@ -208,8 +208,8 @@ public:
u32 params2
);
/* 8002f260 */ static dAcBase_c *createActorUnkGroup3(
char *name, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id,
u8 viewclipId
const char *name, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale,
u32 params2, u16 id, s8 viewclipId
);
};
+2 -2
View File
@@ -228,10 +228,10 @@ public:
void SetupMapGX(mMtx_c *);
void SetupMapMaterial(int matIdx, bool, s32 roomId);
UNKTYPE *GetMapAccessor();
void DrawMap(u8 roomId, mMtx_c *, bool bColor, int);
void DrawMap(int roomId, mMtx_c *, bool bColor, int);
void SetupScrollGX();
void SetupScrollMaterial(int matIdx, s32, bool);
void DrawMapScroll(u8 roomId, mMtx_c *, bool bColor, int);
void DrawMapScroll(int roomId, mMtx_c *, bool bColor, int);
void DrawSkyKeepMap(mMtx_c *, int);
bool ConfigureMapTexture(EGG::Heap *);
+3
View File
@@ -176,6 +176,9 @@ public:
void SetPriority(PRIORITY priority) {
mPriority = priority;
}
void SetUnkBase() {
mField_0x18.field_0x00 = 1;
}
void OnStickWall() {
field_0x24 |= 1;
}
+4
View File
@@ -1,3 +1,5 @@
#ifndef D_CC_MASS_OBJ_H
#define D_CC_MASS_OBJ_H
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
@@ -102,3 +104,5 @@ public:
// u8 GetResultCam() const;
// void GetCamTopPos(Vec *p_out);
};
#endif
+5
View File
@@ -1,3 +1,6 @@
#ifndef D_CC_S_H
#define D_CC_S_H
#include "common.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/cc/d_cc_mass_s.h"
@@ -76,3 +79,5 @@ public:
static dCcS *GetInstance();
static dCcS *sInstance;
};
#endif
+196
View File
@@ -0,0 +1,196 @@
#ifndef D_STAGE_TYPES_H
#define D_STAGE_TYPES_H
#include "common.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
// https://github.com/lepelog/skywardsword-tools/blob/master/bzs.py
// Size 0x2
struct ARCN {
/* 0x00 */ u16 offset;
};
// Size 0x20
struct AREA {
/* 0x00 */ mVec3_c mPos;
/* 0x0C */ mVec3_c mScale;
/* 0x18 */ mAng mAngleY;
/* 0x1A */ mAng mAngleLink;
/* 0x1C */ u8 field_0x1C;
};
// TODO: double check, copied from ss-tools
// Size 0x28
struct BPNT {
/* 0x00 */ mVec3_c position1;
/* 0x0C */ mVec3_c position2;
/* 0x18 */ mVec3_c position3;
/* 0x24 */ u8 _0x24[4];
};
// TODO: double check, copied from ss-tools
// Size 0x2C
struct CAM {
/* 0x00 */ u8 _0x00[4];
/* 0x04 */ mVec3_c position;
/* 0x10 */ f32 angle;
/* 0x14 */ u8 _0x14[8];
/* 0x1C */ char name[16];
};
// Size 0x38
struct EVNT {
/* 0x00 */ u8 _0x00[2];
/* 0x02 */ u16 storyFlag1;
/* 0x04 */ u16 storyFlag2;
/* 0x06 */ u8 _0x06[3];
/* 0x09 */ u8 exitId;
/* 0x0A */ u8 _0x0A[3];
/* 0x0D */ u8 skipEvent;
/* 0x0E */ u8 _0x0E[1];
/* 0x0F */ u8 sceneFlag1;
/* 0x10 */ u8 sceneFlag2;
/* 0x11 */ u8 skipFlag;
/* 0x12 */ u8 _0x12[2];
/* 0x14 */ u16 item;
/* 0x16 */ u16 _0x16[2];
/* 0x18 */ char name[32];
};
// Size 0x???
struct bzsFILE {
// ???
};
struct LAY {
/* 0x00 */ u16 mCount;
/* 0x04 */ u32 mOffset;
};
// Size 0x04
struct LYLT {
/* 0x0 */ u8 layer;
/* 0x1 */ s8 demoHigh;
/* 0x2 */ s8 demoLow;
/* 0x3 */ u8 dummy;
};
// Size 0x04
struct LYSE {
/* 0x0 */ u16 storyFlag;
/* 0x2 */ u8 night;
/* 0x3 */ u8 layer;
};
// Size 0x24
struct OBJ {
/* 0x00 */ u32 params1;
/* 0x04 */ u32 params2;
/* 0x08 */ mVec3_c position;
/* 0x14 */ mAng3_c angle;
/* 0x1A */ u16 id;
/* 0x1C */ char name[8];
};
// Size 0x2
struct OBJN {
/* 0x00 */ u16 offset;
};
// Size 0xC
struct PATH {
/* 0x00 */ u8 field_0x00;
/* 0x01 */ u8 field_0x01;
/* 0x02 */ u16 pointStartIndex;
/* 0x04 */ u16 pointCount;
/* 0x06 */ u8 _0x06[4];
/* 0x0A */ u8 firstBitIsWrapAround;
/* 0x0B */ u8 _0x0B[1];
};
// Size 0x24
struct PCAM {
/* 0x00 */ mVec3_c position1;
/* 0x0C */ mVec3_c position2;
/* 0x18 */ f32 field_0x18;
/* 0x1C */ f32 field_0x1C;
/* 0x20 */ u8 id;
/* 0x21 */ u8 _0x21[3];
};
// Size 0x18
struct PLY {
// The Ghidra struct seems to overambitiously encode
// the params themselves, this is just an u32 link actor params
// /* 0x00 */ u16 storyFlag;
// /* 0x02 */ u8 playCutscene;
// /* 0x03 */ u8 _0x03[1];
/* 0x00 */ u32 linkParams;
/* 0x04 */ mVec3_c position;
/* 0x10 */ mAng3_c angle;
/* 0x16 */ u16 entranceId;
};
// Size 0x10
struct PNT {
/* 0x00 */ mVec3_c position;
/* 0x0C */ u8 _0x0C[4];
};
// Size 0x4
struct RMPL {
/* 0x0 */ u8 roomId;
/* 0x1 */ u8 count;
/* 0x2 */ u16 offset;
};
// Size 0x28
struct SCEN {
/* 0x00 */ char name[32];
/* 0x20 */ u8 room;
/* 0x21 */ u8 layer;
/* 0x22 */ u8 entrance;
/* 0x23 */ u8 night;
/* 0x24 */ u8 transitionType;
/* 0x25 */ u8 transitionFadeFrames;
/* 0x26 */ u8 zero;
/* 0x27 */ u8 savePrompt;
};
// Size 0x30
struct SOBJ {
/* 0x00 */ u32 params1;
/* 0x04 */ u32 params2;
/* 0x08 */ mVec3_c position;
/* 0x14 */ mVec3_c scale;
/* 0x20 */ mAng3_c angle;
/* 0x26 */ u16 id;
/* 0x28 */ char name[8];
};
// Size 0x???
struct SBPT {
// ???
};
// Parsed the same way in ss-tools
typedef PNT SPNT;
typedef PATH SPTH;
// Size 0x14
struct STIF {
/* 0x00 */ f32 field_0x00;
/* 0x04 */ f32 field_0x04;
/* 0x08 */ f32 defaultCullingDistance;
/* 0x0C */ u16 flagIndex;
/* 0x0E */ u8 areaType;
/* 0x0F */ u8 field_0x0F;
/* 0x10 */ u8 field_0x10;
/* 0x11 */ u8 field_0x11;
/* 0x12 */ u8 mapNameId;
/* 0x13 */ u8 field_0x13;
};
#endif
+4
View File
@@ -59,6 +59,10 @@ public:
mFadeInFrame = frame;
}
void setFadeOutFrame(u16 frame) {
mFadeOutFrame = frame;
}
private:
/* 0x08 */ mColorFader_c *mpColorFader;
/* 0x0C */ dLytFader_c *mpLytFader;
+17
View File
@@ -0,0 +1,17 @@
#ifndef D_LAST_H
#define D_LAST_H
#include "d/d_base.h"
class dLast_c : public dBase_c {
public:
typedef void (*executeCallback)(void);
static void setExecuteCallback(executeCallback cb) {
sExecuteCallback = cb;
}
private:
static executeCallback sExecuteCallback;
};
#endif
+244
View File
@@ -0,0 +1,244 @@
#ifndef D_ROOM_H
#define D_ROOM_H
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/col/bg/d_bg_w_kcol.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_anmtexpat.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_anmvis.h"
#include "m/m3d/m_smdl.h"
#include "m/m_allocator.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/g3d/res/g3d_resnode.h"
#include "nw4r/math/math_geometry.h"
#include "s/s_State.hpp"
#include "sized_string.h"
#include "toBeSorted/raii_ptr.h"
#include "toBeSorted/unk_with_water.h"
struct DrawPriorityConfig {
u8 pDrawOpa1;
u8 pDrawXlu;
u8 pDrawOpa2;
};
class dRoom_c : public dBase_c {
class mdl_c : public m3d::smdl_c {
public:
mdl_c() : mpAabb(nullptr) {}
virtual ~mdl_c() {
remove();
}
virtual void remove() override;
bool hasModel() const {
return getG3dObject() != nullptr;
}
bool create(nw4r::g3d::ResMdl resMdl, mAllocator_c &alloc);
void configureSomething();
void somethingVisibility(u32 id, bool visible);
private:
void doSomethingWithVis(bool arg);
nw4r::math::AABB *mpAabb;
};
class model_c {
friend class dRoom_c;
public:
model_c() {}
bool create(nw4r::g3d::ResFile resFile, mAllocator_c &alloc, s32 idx, UnkWithWater *waterThing);
bool getBounds(mVec3_c *min, mVec3_c *max) const;
nw4r::g3d::ResNode getResNode(const char *nodeName);
void updateObjNode(const char *node, bool visible);
void destroy();
void execute(s32 idx, bool roomfield_0x573, f32 pastState);
void draw(int roomid);
f32 getFrame() const;
void configureSomething(int roomid, mdl_c *mdl);
const DrawPriorityConfig *getDrawPriority(s32 idx);
private:
mdl_c mMdl;
RaiiPtr<m3d::anmMatClr_c> mpAnmClr;
RaiiPtr<m3d::anmTexPat_c> mpAnmPat;
RaiiPtr<m3d::anmTexSrt_c> mpAnmSrt;
RaiiPtr<m3d::anmVis_c> mpAnmVis;
};
public:
dRoom_c()
: mStateMgr(*this, sStateID::null),
mpFile(nullptr),
mpScen(nullptr),
mpPly(nullptr),
mpCam(nullptr),
mpEvnt(nullptr),
mpPath(nullptr),
mpPnt(nullptr),
mpBpnt(nullptr),
mpArea(nullptr),
mFileCount(0),
mScenCount(0),
mPlyCount(0),
mCamCount(0),
mEvntCount(0),
mPathCount(0),
mPntCount(0),
mBpntCount(0),
mAreaCount(0),
mFlags(0) {}
virtual ~dRoom_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int execute() override;
virtual int draw() override;
STATE_FUNC_DECLARE(dRoom_c, Active);
STATE_FUNC_DECLARE(dRoom_c, NonActive);
bool checkFlag(u32 flag) {
return mFlags & flag;
}
void drawOnMapIfVisible(mMtx_c *mtx, int param);
void getBounds(mVec3_c *min, mVec3_c *max) const;
const PLY *getEntranceById(u8 id) const;
void someLastBossThing(bool arg);
f32 getFrame() const;
typedef void (*foreachObjCallback)(dAcBase_c *obj);
s32 foreachObject(foreachObjCallback cb);
void setFile(const bzsFILE *file, u16 count) {
mFileCount = count;
mpFile = file;
}
void setScen(const SCEN *scen, u16 count) {
mScenCount = count;
mpScen = scen;
}
void setCam(const CAM *file, u16 count) {
mCamCount = count;
mpCam = file;
}
void setEvnt(const EVNT *evnt, u16 count) {
mEvntCount = count;
mpEvnt = evnt;
}
void setPath(const PATH *path, u16 count) {
mPathCount = count;
mpPath = path;
}
void setPnt(const PNT *pnt, u16 count) {
mPntCount = count;
mpPnt = pnt;
}
void setBpnt(const BPNT *bpnt, u16 count) {
mBpntCount = count;
mpBpnt = bpnt;
}
void setSpth(const SPTH *spth, u16 count) {
mSpthCount = count;
mpSpth = spth;
}
void setSpnt(const SPNT *spnt, u16 count) {
mSpntCount = count;
mpSpnt = spnt;
}
void setSbpt(const SBPT *sbpt, u16 count) {
mSbptCount = count;
mpSbpt = sbpt;
}
void setArea(const AREA *path, u16 count) {
mAreaCount = count;
mpArea = path;
}
void setPly(const PLY *ply, u16 count) {
mPlyCount = count;
mpPly = ply;
}
private:
bool setupBg();
void executeBg();
void releaseBg();
static void formatObj(int obj, SizedString<8> &str);
void updateObjNodeInEachRoom(int obj, bool visible);
void destroyModels();
void activateUpdates();
void deactivateUpdates();
/* 0x068 */ mHeapAllocator_c mAllocator;
/* 0x084 */ nw4r::g3d::ResFile mRoomRes;
/* 0x088 */ UnkWithWater mWaterThing;
/* 0x0A0 */ model_c mModels[8];
/* 0x220 */ dBgWKCol mBg[2];
/* 0x4E0 */ STATE_MGR_DECLARE(dRoom_c);
/* 0x51C */ const bzsFILE *mpFile;
/* 0x520 */ const SCEN *mpScen;
/* 0x524 */ const PLY *mpPly;
/* 0x528 */ const CAM *mpCam;
/* 0x52C */ const EVNT *mpEvnt;
/* 0x530 */ const PATH *mpPath;
/* 0x534 */ const PNT *mpPnt;
/* 0x538 */ const BPNT *mpBpnt;
/* 0x53C */ const SPTH *mpSpth;
/* 0x540 */ const SPNT *mpSpnt;
/* 0x544 */ const SBPT *mpSbpt;
/* 0x548 */ const AREA *mpArea;
/* 0x54C */ u16 mFileCount;
/* 0x54E */ u16 mScenCount;
/* 0x550 */ u16 mPlyCount;
/* 0x552 */ u16 mCamCount;
/* 0x554 */ u16 mEvntCount;
/* 0x556 */ u16 mPathCount;
/* 0x558 */ u16 mPntCount;
/* 0x55A */ u16 mBpntCount;
/* 0x55C */ u16 mSpthCount;
/* 0x55E */ u16 mSpntCount;
/* 0x560 */ u16 mSbptCount;
/* 0x562 */ u16 mAreaCount;
// peak vtable placement
class UnkRoomClass {
public:
virtual ~UnkRoomClass() {}
};
/* 0x564 */ UnkRoomClass mUnk;
/* 0x568 */ u8 mFlags;
/* 0x56C */ void *BZS;
/* 0x570 */ s8 roomid;
/* 0x571 */ bool field_0x571;
/* 0x572 */ bool mUpdatesDeactivated;
/* 0x573 */ bool mCanHavePastState;
/* 0x574 */ bool mHasAnmTexPat;
/* 0x575 */ bool mDidAlreadyInit;
/* 0x576 */ bool mSkipDrawing;
};
#endif
+45 -6
View File
@@ -57,12 +57,12 @@ struct SpawnInfo {
/* 0x00 */ SizedString<32> stageName;
/* 0x20 */ u16 transitionFadeFrames;
/* 0x22 */ s8 room;
/* 0x22 */ u8 room;
/* 0x23 */ u8 layer;
/* 0x24 */ s8 entrance;
/* 0x24 */ u8 entrance;
/* 0x25 */ u8 night;
/* 0x26 */ u8 trial;
/* 0x27 */ s8 transitionType;
/* 0x27 */ u8 transitionType;
/* 0x28 */ s8 unk;
enum DayNight {
@@ -104,13 +104,13 @@ struct SpawnInfoExt : public SpawnInfo {
struct LinkReloadInfo {
LinkReloadInfo() : mType0CsFlag(0) {}
void set(u8 roomid, const mVec3_c &pos, mAng rot, u32 flags);
void set(u8 roomid, const mVec3_c &pos, mAng rot, u32 linkParams);
/* 0x00 */ mVec3_c mPosition;
/* 0x0C */ mAng mRotY;
/* 0x0E */ u8 mRoomId;
/* 0x0F */ u8 mType0CsFlag;
/* 0x10 */ u32 mUnkFlags;
/* 0x10 */ u32 mLinkParams;
};
class dScGame_c : public dScene_c {
@@ -136,6 +136,9 @@ public:
STATE_VIRTUAL_FUNC_DECLARE(dScGame_c, Action);
static bool isCurrentStage(const char *stageName);
static bool isStageSkyloftLayer20();
static bool isInCredits();
static bool isStateLayerWithSeekerStoneHintMenu();
static SpawnInfo currentSpawnInfo;
static SpawnInfo nextSpawnInfo;
@@ -151,6 +154,42 @@ public:
void clearSpawnInfo();
const SpawnInfoExt &getSpawnInfo() const;
static void resetUpdateFrameCount() {
sUpdateFrameCount = 0;
}
bool savePromptFlag() const {
return mSavePromptFlag;
}
void setSavePromptFlag(bool val) {
mSavePromptFlag = val;
}
u8 getType0CsFlag() const {
return mReloadInfo.mType0CsFlag;
}
void setType0CsFlag(u8 flag) {
mReloadInfo.mType0CsFlag = flag;
}
u8 getType0PosFlag() const {
return mType0PosFlag;
}
void setType0PosFlag(u8 flag) {
mType0PosFlag = flag;
}
static u8 getReloaderType() {
return sReloaderType;
}
static void setReloaderType(u8 type) {
sReloaderType = type;
}
protected:
static u32 sUpdateFrameCount;
static u8 sCurrentLayer;
@@ -220,7 +259,7 @@ protected:
/* 0x29C */ s32 mLastAreaType;
/* 0x2A0 */ u8 mType0PosFlag;
/* 0x2A1 */ u8 field_0x2A1;
/* 0x2A2 */ u8 mSavePromptFlag;
/* 0x2A2 */ bool mSavePromptFlag;
/* 0x2A3 */ bool mPreventSaveRespawnInfo;
};
+155
View File
@@ -0,0 +1,155 @@
#ifndef D_STAGE_H
#define D_STAGE_H
#include "common.h"
#include "d/d_base.h"
#include "d/d_fader.h"
#include "d/d_room.h"
#include "egg/gfx/eggPostEffectBlur.h"
#include "egg/gfx/eggScreenEffectBlur.h"
#include "m/m_allocator.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "s/s_FPhase.h"
#define MAX_ROOM_NUMBER 64
class dRoomTable_c {
public:
/* 801b4670 */ dRoomTable_c();
virtual ~dRoomTable_c() {}
void setRoom(int roomid, dRoom_c *room) {
mRooms[roomid] = room;
}
dRoom_c *getRoom(s32 idx) {
return mRooms[idx];
}
private:
dRoom_c *mRooms[MAX_ROOM_NUMBER - 1];
};
class MapRelated {
friend class dStage_c;
struct Child {
Child() : a(mVec3_c::Zero), b(mVec3_c::Zero), c(false) {}
~Child() {}
mVec3_c a;
mVec3_c b;
bool c;
};
public:
MapRelated();
~MapRelated();
/* 0x000 */ mHeapAllocator_c mAllocator;
/* 0x01C */ Child mChildren[8];
/* 0x0FC */ mVec3_c field_0x0FC;
/* 0x108 */ f32 field_0x108;
/* 0x10C */ f32 field_0x10C;
/* 0x110 */ f32 field_0x110;
/* 0x114 */ f32 field_0x114;
/* 0x118 */ f32 field_0x118;
/* 0x11C */ f32 field_0x11C;
/* 0x120 */ f32 field_0x120;
/* 0x124 */ f32 field_0x124;
/* 0x128 */ f32 field_0x128;
/* 0x12C */ f32 field_0x12C;
/* 0x130 */ EGG::ScreenEffectBlur mScreenEffect;
/* 0x168 */ EGG::PostEffectBlur mPostEffect;
/* 0x1E0 */ u32 field_0x1E0;
/* 0x1E4 */ u16 field_0x1E4;
/* 0x1E6 */ u16 field_0x1E6;
/* 0x1E8 */ u8 field_0x1E8;
/* 0x1E9 */ u8 field_0x1E9;
/* 0x1EA */ s8 field_0x1EA;
/* 0x1EB */ u8 field_0x1EB;
/* 0x1EC */ u8 field_0x1EC;
/* 0x1ED */ u8 field_0x1ED;
/* 0x1EE */ u8 field_0x1EE;
/* 0x1EF */ u8 field_0x1EF;
/* 0x1F0 */ u8 field_0x1F0;
public:
/* 801b4780 */ void init(MapRelated *);
/* 801b4900 */ void fn_801b4900();
void fn_801B4B80(u32 mapParams, const mVec3_c &center, const mVec3_c &size);
void fn_801B4C70(const mVec3_c &);
void fn_801B50C0(s32);
};
// OBJ NAME: STAGE
// Ghidra: RoomManager
// size: 0x239c
// vtable: 8052dff4
class dStage_c : public dBase_c {
public:
dStage_c();
virtual ~dStage_c() {
sInstance = nullptr;
}
int create() override;
int doDelete() override;
int execute() override;
int draw() override;
void deleteReady() override;
void drawMap(mMtx_c *mtx, int);
dRoom_c *getRoom(s32 idx);
void setRoom(int roomid, dRoom_c *room);
void handleRoomChange(int roomid);
bool checkEnemyDefeatFlag(u16 flag);
bool fadeIn(s32 fadeType, u16 frames);
bool fadeOut(s32 fadeType, u16 frames);
void forceFadeIn();
void forceFadeOut();
bool hasVisitedRoom(int roomid) const;
void setRoomVisited(int roomid);
static void bindStageResToFile(nw4r::g3d::ResFile *file);
static void bindSkyCmnToResFile(nw4r::g3d::ResFile *file);
static bool getMA0AnmTexSrt(nw4r::g3d::ResAnmTexSrt *, const char *matName);
static bool getMA0IndirectSrt(nw4r::g3d::ResAnmTexSrt *, const nw4r::g3d::ResMdl &mdl);
/** Returns stage if idx == -1, otherwise room */
static dBase_c *getParentForRoom(s32 idx);
void changeLoadedEntities(u32 index_shift, bool set);
static dStage_c *GetInstance() {
return sInstance;
}
u8 getCurrRoomId() const {
return curr_room_id;
}
private:
dRoom_c *createRoom(int roomid, bool flag0x40);
void createLytSeekerStone();
sFPhaseBase::sFPhaseState createRooms();
sFPhaseBase::sFPhaseState waitForRooms();
static sFPhase<dStage_c>::phaseCallback sCallbacks[];
/* 0x0068 */ sFPhase<dStage_c> mPhase;
/* 0x007C */ dRoomTable_c rooms;
/* 0x017C */ dFader_c mFader;
/* 0x01A0 */ MapRelated mapRelated;
/* 0x0394 */ u8 _0x394[0x39C - 0x394];
/* 0x039C */ u32 loaded_entities[2047];
/* 0x2398 */ u8 curr_room_id;
/* 80575760 */ static dStage_c *sInstance;
};
#endif
+163
View File
@@ -0,0 +1,163 @@
#ifndef D_STAGE_MGR_H
#define D_STAGE_MGR_H
#include "d/col/bg/d_bg_s.h"
#include "d/col/cc/d_cc_s.h"
#include "d/d_base.h"
#include "d/d_dylink.h"
#include "d/d_fader.h"
#include "d/d_bzs_types.h"
#include "egg/gfx/eggScreen.h"
#include "m/m_allocator.h"
#include "m/m_dvd.h"
#include "s/s_FPhase.h"
#include "s/s_State.hpp"
#include "sized_string.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/arc_managers/oarc_manager.h"
#include "toBeSorted/attention.h"
#include "toBeSorted/time_area_mgr.h"
#include "toBeSorted/unk_with_water.h"
class RelObjCtrl {
public:
dDynamicModuleControl mRelCtrl;
ObjectArcControl mOarcCtrl;
void doLoad();
bool isLoaded() const;
};
class dStageMgr_c : public dBase_c {
public:
dStageMgr_c();
virtual ~dStageMgr_c();
STATE_FUNC_DECLARE(dStageMgr_c, ReadStageRes);
STATE_FUNC_DECLARE(dStageMgr_c, ReadRoomRes);
STATE_FUNC_DECLARE(dStageMgr_c, ReadObjectRes);
STATE_FUNC_DECLARE(dStageMgr_c, ReadStageLayerRes);
STATE_FUNC_DECLARE(dStageMgr_c, ReadLayerObjectRes);
STATE_FUNC_DECLARE(dStageMgr_c, SoundLoadSceneData);
STATE_FUNC_DECLARE(dStageMgr_c, CreateObject);
STATE_FUNC_DECLARE(dStageMgr_c, ReadObjectSound);
STATE_FUNC_DECLARE(dStageMgr_c, SceneChangeSave);
STATE_FUNC_DECLARE(dStageMgr_c, RestartSceneWait);
STATE_FUNC_DECLARE(dStageMgr_c, RestartScene);
public:
bool isAreaTypeDungeon() const;
bool isAreaTypeSky() const;
bool isAreaTypeDungeonOrBoss() const;
bool isAreaTypeOverworldOrSkyloft() const;
s32 getSTIFunk1() const;
s32 getAreaType() const;
static dStageMgr_c *GetInstance() {
return sInstance;
}
bool checkFlag0x88A0(u32 flag) const {
return (field_0x88A0 & flag) != 0;
}
void initUnkWithWater(u32 val, UnkWithWater *waterThing);
void destroyUnkWithWater(u32 val, UnkWithWater *waterThing);
const RMPL *getRmpl() const {
return mpRmpl;
}
u16 getRmplCount() const {
return mRmplCount;
}
void setRmpl(const RMPL *pcam, u16 count) {
mRmplCount = count;
mpRmpl = pcam;
}
const PCAM *getPcam() const {
return mpPcam;
}
u16 getPcamCount() const {
return mPcamCount;
}
void setPcam(const PCAM *pcam, u16 count) {
mPcamCount = count;
mpPcam = pcam;
}
void setLyse(const LYSE *lyse, u16 count) {
mLyseCount = count;
mpLyse = lyse;
}
void overrideLayer0WithLyse();
void setStif(const STIF *stif);
s16 getFlagIndex() const;
void setDemoName(const SizedString<16>& name) {
mDemoName = name;
}
const char *getDemoName() const {
return mDemoName;
}
void addLayerArcn(const char *path);
void addStageArcn(const char *path);
void addObjId(u16 id);
void addActorId(u16 actorId);
private:
static void lastExecuteCallback();
void triggerFade(s32 fadeType, u8 fadeFrames);
static dStageMgr_c *sInstance;
static sFPhase<dStageMgr_c>::phaseCallback sCallbacks[];
/* 0x0068 */ mHeapAllocator_c mAlloc;
/* 0x0084 */ sFPhase<dStageMgr_c> mPhase;
/* 0x0098 */ STATE_MGR_DECLARE(dStageMgr_c);
/* 0x00D4 */ RelObjCtrl mStageObjCtrl;
/* 0x0324 */ RelObjCtrl mLayerObjCtrl;
/* 0x0574 */ LayoutArcControl mLayoutArcCtrl1;
/* 0x0580 */ LayoutArcControl mLayoutArcCtrl2;
/* 0x058C */ dBgS mBg;
// ...
u8 _0x00001[0x7D0];
/* 0x3E40 */ dCcS mCc;
// ...
/* 0x7930 */ dFader_c mFader;
/* 0x7954 */ u16 mPcamCount;
/* 0x7956 */ u16 mLyseCount;
/* 0x7958 */ u16 mRmplCount;
/* 0x795C */ const PCAM *mpPcam;
/* 0x7960 */ const LYSE *mpLyse;
/* 0x7964 */ const STIF *mpStif;
/* 0x7968 */ const RMPL *mpRmpl;
/* 0x799C */ mDvd_callback_c *mpDvdCallback;
/* 0x79A0 */ mDvd_callback_c *mpDvdCallback2;
/* 0x79A4 */ EGG::Screen mScreens[2];
/* 0x7AB4 */ AttentionManager mAttention;
/* 0x8694 */ dTimeAreaMgr_c mTimeAreaMgr;
// ...
u8 ___[446];
/* 0x88A0 */ u32 field_0x88A0;
/* 0x88A4 */ SizedString<16> mDemoName;
/* 0x88BC */ bool field_0x88BC;
};
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef D_STAGE_PARSE_H
#define D_STAGE_PARSE_H
void parseRoomStageBzs(int roomid, const void *bzs);
void parseBzsStageRoom(int roomid, const void *bzs);
void parseStageBzs(int roomid, const void *bzs);
void parseRoomBzs(int roomid, const void *bzs);
void parseRoomReactivateBzs(int roomid, const void *bzs);
void parseRoomActivateBzs(int roomid, const void *bzs);
#endif
+1 -1
View File
@@ -48,7 +48,7 @@ public:
}
u16 checkFlag(u16 roomId, u16 flag);
bool checkSceneflagGlobal(u16 sceneIdx, u16 flag);
bool checkTempOrSceneflag(u16 flag);
u16 checkTempOrSceneflag(u16 flag);
u16 checkUncommittedFlag(u16 roomId, u16 flag);
void setZoneflag(u16 roomId, u16 flag);
void setFlag(u16 roomId, u16 flag);
+21
View File
@@ -0,0 +1,21 @@
#ifndef D_T_MASS_OBJ_H
#define D_T_MASS_OBJ_H
#include "d/t/d_tg.h"
class dTgMassObj_c : public dTg_c {
public:
dTgMassObj_c() {}
virtual ~dTgMassObj_c() {}
static dTgMassObj_c *GetInstance() {
return sInstance;
}
void unloadRoom(u16 roomid);
private:
static dTgMassObj_c *sInstance;
};
#endif
+19 -1
View File
@@ -1,6 +1,24 @@
#ifndef EGG_POST_EFFECT_BLUR_H
#define EGG_POST_EFFECT_BLUR_H
namespace EGG {} // namespace EGG
#include "common.h"
namespace EGG {
class PostEffectBlur {
public:
PostEffectBlur();
~PostEffectBlur() {}
void setField0x30(f32 val) {
field_0x30 = val;
}
private:
u8 _0x00[0x30 - 0x00];
f32 field_0x30;
u8 _0x03[0x78 - 0x34];
};
} // namespace EGG
#endif
+13 -1
View File
@@ -1,6 +1,18 @@
#ifndef EGG_SCREEN_EFFECT_BLUR_H
#define EGG_SCREEN_EFFECT_BLUR_H
namespace EGG {} // namespace EGG
#include "common.h"
namespace EGG {
class ScreenEffectBlur {
public:
ScreenEffectBlur();
~ScreenEffectBlur();
private:
u8 _0x00[0x38 - 0x00];
};
} // namespace EGG
#endif
+1 -1
View File
@@ -37,7 +37,7 @@ public:
void setCullModeAll(GXCullMode cullMode, bool bMarkDirty);
void setMatVisible(u32 matId, bool bVisble);
int setMatTexture(char *name, GXTexObj *texObj, bool copy, void *unk, int, int);
bool getBounds(mVec3_c *min, mVec3_c *max);
bool getBounds(mVec3_c *min, mVec3_c *max) const;
private:
banm_c *mpCurrentAnm;
+4
View File
@@ -53,6 +53,10 @@ public:
return mpScnLeaf;
}
inline const nw4r::g3d::ScnLeaf *getG3dObject() const {
return mpScnLeaf;
}
protected:
/* 0x14 */ nw4r::g3d::ScnLeaf *mpScnLeaf;
};
+10 -2
View File
@@ -8,14 +8,22 @@ public:
void draw();
bool setFader(mFaderBase_c *fader);
bool isStatus(mFaderBase_c::EStatus status) {
bool isStatus(mFaderBase_c::EStatus status) const {
return mpFader->getStatus() == status;
}
bool isNotStatus(mFaderBase_c::EStatus status) {
bool isNotStatus(mFaderBase_c::EStatus status) const {
return isStatus(status) != true;
}
bool isSettled() const {
return isStatus(mFaderBase_c::FADED_IN) || isStatus(mFaderBase_c::FADED_OUT);
}
mFaderBase_c::EStatus getStatus() const {
return mpFader->getStatus();
}
void setStatus(mFaderBase_c::EStatus status) {
mpFader->setStatus(status);
}
+4
View File
@@ -565,6 +565,10 @@ public:
return ResTexPlttInfo(&pData[id]);
}
const char *GetName() const {
return ofs_to_ptr<const char>(ref().name);
}
ResMatDLData *GetResMatDLData() {
return ofs_to_ptr<ResMatDLData>(ref().toResMatDLData);
}
+4
View File
@@ -148,6 +148,10 @@ public:
return GetRevision() == REVISION;
}
const char *GetName() const {
return ofs_to_ptr<const char>(ref().name);
}
const u8 *GetResByteCode(const char *pName) const;
ResNode GetResNode(const char *pName) const;
+12 -2
View File
@@ -67,8 +67,8 @@ struct ResNodeData : ResNodeDataTypedef {
math::_VEC3 scale; // at 0x20
math::_VEC3 rot; // at 0x2C
math::_VEC3 translate; // at 0x38
math::VEC3 volume_min; // at 0x44
math::VEC3 volume_max; // at 0x50
math::_VEC3 volume_min; // at 0x44
math::_VEC3 volume_max; // at 0x50
s32 toParentNode; // at 0x5C
s32 toChildNode; // at 0x60
s32 toNextSibling; // at 0x64
@@ -143,6 +143,16 @@ public:
return ref().translate;
}
// not in the dwarf
const math::VEC3 &GetBoundsMin() const {
return *(const math::VEC3*)&ref().volume_min;
}
// not in the dwarf
const math::VEC3 &GetBoundsMax() const {
return *(const math::VEC3*)&ref().volume_max;
}
ResNode GetParentNode() {
return ofs_to_obj<ResNode>(ref().toParentNode);
}
+1
View File
@@ -35,6 +35,7 @@ struct PLANE {
struct AABB {
AABB() {}
AABB(const VEC3 &min, const VEC3 &max) : min(min), max(max) {}
void Set(const VEC3 *points, unsigned int num);
void Set(const AABB *box, const MTX34 *mtx);
+4
View File
@@ -76,6 +76,10 @@ struct SizedString {
va_end(list);
return printed;
}
size_t len() const {
return strlen(mChars);
}
};
// TODO this might be a shared template with SizedString but I'm
@@ -30,7 +30,11 @@ public:
const char *getCurrentStageDirectory();
const char *getRoomArcDirectory(int room) const;
static EGG::ExpHeap *getHeap();
EGG::ExpHeap *getHeap(s32 roomid);
inline int ensureAllEntriesLoaded() {
return mArcTable.ensureAllEntriesLoaded();
}
private:
SizedString<32> mStageName;
@@ -38,4 +38,17 @@ private:
dRawArcTable_c mArcTable;
};
class ObjectArcControl {
public:
ObjectArcControl() : mObjectArcs(nullptr), mNumArcs(0) {}
virtual ~ObjectArcControl();
void set(const char *const *objectArcs, s32 numArcs);
void load(EGG::Heap *heap);
void release();
private:
const char **mObjectArcs;
s32 mNumArcs;
};
#endif
+1 -9
View File
@@ -1,16 +1,8 @@
#ifndef AREA_UTILS_H
#define AREA_UTILS_H
#include "m/m_angle.h"
#include "m/m_vec.h"
struct AREA {
/* 0x00 */ mVec3_c mPos;
/* 0x0C */ mVec3_c mScale;
/* 0x18 */ mAng mAngleY;
/* 0x1A */ mAng mAngleLink;
/* 0x1C */ u8 field_0x1C;
};
#include "d/d_bzs_types.h"
/* 800a9b00 */ bool checkPosInArea(AREA **area, const mVec3_c &pos);
/* 800a9bd0 */ AREA *getAreaForIndexInRoom(s32 areaIndex, s32 roomId);
+2 -15
View File
@@ -9,7 +9,7 @@
#include "m/m3d/m_smdl.h"
#include "m/m_allocator.h"
#include "toBeSorted/effects_struct.h"
#include "toBeSorted/raii_ptr.h"
static const u32 OFF = 'off ';
static const u32 NONE = 'none';
@@ -18,25 +18,12 @@ static const u32 NEXT = 'next';
static const u32 ON = 'on ';
static const u32 AWAY = 'away';
class UniquePtrLike {
public:
m3d::anmChr_c *mPtr;
UniquePtrLike() : mPtr(nullptr) {}
~UniquePtrLike() {
if (mPtr != nullptr) {
delete mPtr;
mPtr = nullptr;
}
}
};
class InteractionMdl {
public:
m3d::smdl_c mMdl;
m3d::anmMatClr_c mAnmClr;
m3d::anmTexPat_c mAnmTex;
UniquePtrLike mAnmChr;
RaiiPtr<m3d::anmChr_c> mAnmChr;
u8 field_0x78;
u8 field_0x79;
+2
View File
@@ -6,6 +6,8 @@
#include "sized_string.h"
#include "toBeSorted/event.h"
#include <cstring>
class dAcBase_c;
class EventManager {
+2 -2
View File
@@ -210,12 +210,12 @@ public:
/* 8000CAD0 */ bool isNew_FileA();
/* 8000CB00 */ void setSceneFlagIndex(u16 idx);
/* 8000CB00 */ void setSceneFlagIndex(s16 idx);
/* 8000CB30 */ u32 getSceneFlagIndex();
/* 8000CB80 */ s32 getFileAreaIndex();
/* 8000CBD0 */ void fn_8000CBD0(u8);
/* 8000CC00 */ void fn_8000CC00();
/* 8000CC00 */ u8 fn_8000CC00();
/* 8000CC50 */ void setFileTimes();
/* 8000CCB0 */ void setPlayTime(s64 time);
+8
View File
@@ -9,5 +9,13 @@ extern "C" void fn_8035E310(void *);
extern "C" void *ENEMY_SOUND_MGR;
extern "C" void fn_80362150(void *, u16);
extern "C" void fn_803625F0(void *, u16);
extern "C" void fn_803618F0(void *);
extern "C" void fn_80362730(void *);
extern "C" void fn_80365D20(void *);
extern "C" void fn_803624F0(void *);
extern "C" void *ENEMY_BGM_RELATED_MGR;
extern "C" void fn_80384570(void *, bool);
#endif
+45
View File
@@ -0,0 +1,45 @@
#ifndef RAII_PTR_H
#define RAII_PTR_H
#include "common.h"
// This could be std::unique_ptr, but we don't have it yet
template <typename T>
class RaiiPtr {
public:
T *mPtr;
RaiiPtr() : mPtr(nullptr) {}
~RaiiPtr() {
if (mPtr != nullptr) {
delete mPtr;
mPtr = nullptr;
}
}
void operator=(T *ptr) {
mPtr = ptr;
}
operator bool() const {
return mPtr != nullptr;
}
const T *operator->() const {
return mPtr;
}
T *operator->() {
return mPtr;
}
const T &operator*() const {
return *this->operator->();
}
T &operator*() {
return *this->operator->();
}
};
#endif
-114
View File
@@ -1,114 +0,0 @@
#ifndef ROOM_MANAGER_H
#define ROOM_MANAGER_H
#include "common.h"
#include "d/d_base.h"
#include "m/m_allocator.h"
#include "m/types_m.h"
#define MAX_ROOM_NUMBER 64
class dRoomModel {
char mainModel[28]; // Actually smdl_c
nw4r::math::AABB *roomBounds;
m3d::anmMatClr_c *anmMatClr;
m3d::anmTexPat_c *anmTexPat;
m3d::anmTexSrt_c *anmTexSrt;
m3d::anmVis_c *anmVis;
};
class dRoomCollision {
char todo[352];
};
class dRoom : public dBase_c {
public:
mAllocator_c allocator;
nw4r::g3d::ResFile *roomRes;
char unkWithWater[24];
dRoomModel roomModels[8];
dRoomCollision roomCollisions[2];
char stateMgr[60];
char _0[4];
void *SCEN;
void *PLY;
void *CAM;
void *EVNT;
void *PATH;
void *PNT;
void *BPNT;
void *SPTH;
void *_1;
void *_2;
void *AREA;
char _3[4];
short plyCount;
short camCount;
short evntCount;
short pathCount;
short pntCount;
short bpntCount;
short spthCount;
short _4;
short _5;
short areaCount;
char _6[4];
u8 flags;
void *BZS;
s8 roomid;
char _7[3];
bool hasAnmTexPat;
bool didAlreadyInit;
bool checkFlag(u32 flag) {
return flags & flag;
}
};
class dRoomTable {
/* 801b4670 */ dRoomTable(dRoomTable *roomTable);
virtual ~dRoomTable();
dRoom *rooms[MAX_ROOM_NUMBER - 1];
};
class MapRelated {
public:
mAllocator_c allocator;
char unk[472];
public:
/* 801b4780 */ void init(MapRelated *);
/* 801b4900 */ void fn_801b4900();
};
// OBJ NAME: STAGE
// Ghidra: RoomManager
// size: 0x239c
// vtable: 8052dff4
class RoomManager : public dBase_c {
public:
/* 0068 */ char field_0x68[0x7C - 0x68];
/* 007C */ dRoomTable rooms;
/* 017c */ char fader[0x1a0 - 0x174]; // size unk
/* 01a0 */ MapRelated mapRelated;
/* 039c */ u32 loaded_entities[2047];
/* 2398 */ u8 curr_room_id;
public:
/* 80575760 */ static RoomManager *m_Instance;
public:
/* 801b3970 */ dRoom *GetRoomByIndex(int roomid);
/* 801b42b0 */ static dRoom *getRoom(int roomid);
/* 801b42d0 */ static void bindStageResToFile(nw4r::g3d::ResFile *);
/* 801b4320 */ static void bindSkyCmnToResFile(nw4r::g3d::ResFile *);
/* 801b4380 */ static bool getMA0AnmTexSrt(nw4r::g3d::ResAnmTexSrt *, char *);
/* 801b4420 */ static bool getMA0IndirectSrt(nw4r::g3d::ResAnmTexSrt *, char *);
/* 801b44c0 */ static void changeLoadedEntities(RoomManager *mgr, u32 index_shift, bool set);
/* 801b4510 */ static u32 checkRoomFlag(RoomManager *mgr, u32 flag);
/* 801b4550 */ static bool checkEnemyDefeatFlag(RoomManager *mgr, u32 flag);
/* 801b45c0 */ static bool fn_801B45C0(RoomManager *mgr /* plus others */);
};
#endif
-20
View File
@@ -1,20 +0,0 @@
#ifndef STAGE_MANAGER_H
#define STAGE_MANAGER_H
#include "d/d_base.h"
class dStageMgr_c : dBase_c {
public:
bool isAreaTypeDungeon() const;
bool isAreaTypeSky() const;
s32 getAreaType() const;
static dStageMgr_c *GetInstance() {
return sInstance;
}
private:
static dStageMgr_c *sInstance;
};
#endif
+20 -1
View File
@@ -61,6 +61,22 @@ public:
static dTimeAreaMgr_c *sInstance;
bool isInLanayruMiningFacility() const {
return mIsInLanayruMiningFacility;
}
bool isField0x78() const {
return field_0x78;
}
void setField0x78(bool val) {
field_0x78 = val;
}
void setField0x7A(bool val) {
field_0x7A = val;
}
private:
/* 0x04 */ u8 field_0x04[0x0C - 0x04];
/* 0x0C */ mHeapAllocator_c mAllocator;
@@ -68,7 +84,10 @@ private:
/* 0x40 */ dTimeAreaMgrProcB_c mProcB;
/* 0x5C */ u8 field_0x5C[0x64 - 0x5C];
/* 0x64 */ s32 field_0x64;
/* 0x68 */ u8 field_0x68[0x7B - 0x68];
/* 0x68 */ u8 field_0x68[0x78 - 0x68];
/* 0x78 */ bool field_0x78;
/* 0x79 */ u8 field_0x79[0x7A - 0x79];
/* 0x7A */ bool field_0x7A;
/* 0x7B */ bool mIsInLanayruMiningFacility;
};
+37
View File
@@ -0,0 +1,37 @@
#ifndef UNK_WITH_WATER_H
#define UNK_WITH_WATER_H
#include "common.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/tlist.h"
struct UnkWithWaterNode {
public:
/* 0x00 */ TListNode<UnkWithWaterNode> mNode;
/* 0x08 */ UNKWORD field_0x08;
/* 0x0C */ UNKWORD field_0x0C;
};
class UnkWithWater {
public:
typedef TList<UnkWithWaterNode, offsetof(UnkWithWaterNode, mNode)> NodeList;
UnkWithWater() : field_0x04(0), field_0x08(0) {}
virtual ~UnkWithWater() {
remove();
}
static bool linkMdl(nw4r::g3d::ResMdl &mdl, UnkWithWater *thing);
bool hasLinks() const {
return mList.mCount != 0;
}
private:
void remove();
/* 0x04 */ UNKWORD field_0x04;
/* 0x08 */ UNKWORD field_0x08;
/* 0x0C */ NodeList mList;
};
#endif
+2 -2
View File
@@ -2,9 +2,9 @@
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "nw4r/types_nw4r.h"
#include "toBeSorted/area_utils.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_APPEAR_BRIDGE, dAcOappearBridge_c, fProfile::OBJ_APPEAR_BRIDGE, 0x01FC, 0, 6);
@@ -18,7 +18,7 @@ STATE_DEFINE(dAcOappearBridge_c, Disappear);
bool dAcOappearBridge_c::createHeap() {
mResFile = nw4r::g3d::ResFile(getOarcResFile("TongueStage"));
RoomManager::bindStageResToFile(&mResFile);
dStage_c::bindStageResToFile(&mResFile);
nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("TongueStage");
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x128));
nw4r::g3d::ResAnmTexSrt srt = mResFile.GetResAnmTexSrt("TongueStage");
+3 -3
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_bamboo_island.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/room_manager.h"
const f32 dAcObambooIsland_c::unusedFloat1 = 100000.0f;
const f32 dAcObambooIsland_c::unusedFloat2 = 0.0f;
@@ -23,8 +23,8 @@ void dAcObambooIsland_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObj
bool dAcObambooIsland_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("IslBamb"));
RoomManager::bindStageResToFile(&mBrres);
RoomManager::bindSkyCmnToResFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
dStage_c::bindSkyCmnToResFile(&mBrres);
for (int i = 0; i < 2; i++) {
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl(sBambooIslandNames[i]);
TRY_CREATE(mModels[i].create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -2,6 +2,7 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "m/m_vec.h"
@@ -10,7 +11,6 @@
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/g3d/res/g3d_resnode.h"
#include "toBeSorted/room_manager.h"
const f32 dAcOislandNusi_c::someFloat = 100000.0f;
@@ -26,8 +26,8 @@ STATE_DEFINE(dAcOislandNusi_c, NusiFight);
bool dAcOislandNusi_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslNusi"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
for (int i = 0; i < 2; i++) {
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(sMdlNames[i]);
TRY_CREATE(mMdls[i].create(mdl, &heap_allocator, 0x160));
+2 -2
View File
@@ -1,13 +1,13 @@
#include "d/a/obj/d_a_obj_lava_F200.h"
#include "d/d_stage.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_LAVA_F200, dAcOlavaF200_c, fProfile::OBJ_LAVA_F200, 0x0214, 0, 0);
bool dAcOlavaF200_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("LavaF200"));
RoomManager::bindStageResToFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
nw4r::g3d::ResMdl mdl0 = mBrres.GetResMdl("LavaF200");
TRY_CREATE(mModels[0].create(mdl0, &heap_allocator, 0x32C));
+3 -3
View File
@@ -3,12 +3,12 @@
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/room_manager.h"
static const char *const sResFiles[] = {
"F000Megami",
@@ -46,8 +46,8 @@ bool dAcOmegamiIsland_c::createHeap() {
mVariant = getVariant();
mRes = nw4r::g3d::ResFile(getOarcResFile(sResFiles[mVariant]));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl1 = mRes.GetResMdl(sMdl1[mVariant]);
TRY_CREATE(mMdls[0].create(mdl1, &heap_allocator, 0x120));
+2 -2
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_pool_cock.h"
#include "d/a/obj/d_a_obj_vortex.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "s/s_Math.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_POOL_COCK, dAcOPoolCock_c, fProfile::OBJ_POOL_COCK, 0x024D, 0, 7);
@@ -11,7 +11,7 @@ STATE_DEFINE(dAcOPoolCock_c, Wait);
bool dAcOPoolCock_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("WaterD101"));
RoomManager::bindStageResToFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl("PoolCockD101");
for (int i = 0; i < 2; i++) {
TRY_CREATE(mModels[i].create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_sun_light.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_SUN_LIGHT, dAcOsunLight_c, fProfile::OBJ_SUN_LIGHT, 0x0219, 0, 3);
@@ -11,8 +11,8 @@ STATE_DEFINE(dAcOsunLight_c, Wait);
bool dAcOsunLight_c::createHeap() {
mBrres = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
RoomManager::bindStageResToFile(&mBrres);
RoomManager::bindSkyCmnToResFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
dStage_c::bindSkyCmnToResFile(&mBrres);
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl("StageF000Light");
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120));
nw4r::g3d::ResAnmTexSrt srt = mBrres.GetResAnmTexSrt("StageF000Light");
+1 -1
View File
@@ -32,7 +32,7 @@ bool dAcOTimeStageBg_c::createHeap() {
TRY_CREATE(mMdl1.create(mdl, &heap_allocator, 0x128));
nw4r::g3d::ResNode nd = mdl.GetResNode(sMdlNames[mSubType]);
field_0x3EC.copyFrom((nd.ref().volume_min + nd.ref().volume_max) * 0.5f);
field_0x3EC.copyFrom((nd.GetBoundsMin() + nd.GetBoundsMax()) * 0.5f);
if (mSubType == 4) {
nw4r::g3d::ResAnmClr a = mRes.GetResAnmClr("Teniobj_0");
TRY_CREATE(mAnm.create(mdl, a, &heap_allocator, nullptr, 1));
+2 -2
View File
@@ -4,12 +4,12 @@
#include "d/a/d_a_base.h"
#include "d/a/obj/d_a_obj_tower_D101.h"
#include "d/col/bg/d_bg_s_wtr_chk.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "f/f_manager.h"
#include "f/f_profile_name.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_TOWER_GEAR_D101, dAcOTowerGearD101_c, fProfile::OBJ_TOWER_GEAR_D101, 0x17E, 0, 7);
@@ -20,7 +20,7 @@ extern "C" void fn_80067340(mVec3_c &, nw4r::g3d::ResMdl *, const char *);
bool dAcOTowerGearD101_c::createHeap() {
const char *name = "TowerGearD101";
mRes = nw4r::g3d::ResFile(getOarcResFile(name));
RoomManager::bindStageResToFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(name);
if (!mMdl.create(mdl, &heap_allocator, 0x120, 1, nullptr)) {
return false;
+2 -2
View File
@@ -5,6 +5,7 @@
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "f/f_base.h"
#include "m/m3d/m_fanm.h"
@@ -17,7 +18,6 @@
#include "s/s_Math.h"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_TOWER_HAND_D101, dAcOTowerHandD101_c, fProfile::OBJ_TOWER_HAND_D101, 0x180, 0, 6);
@@ -108,7 +108,7 @@ bool dAcOTowerHandD101_c::createHeap() {
if (!res.IsValid()) {
return false;
}
RoomManager::bindStageResToFile(&res);
dStage_c::bindStageResToFile(&res);
if (direction == 1) {
mMdl.getModel().setCullModeAll(GX_CULL_FRONT, false);
}
+3 -3
View File
@@ -1,12 +1,12 @@
#include "d/a/obj/d_a_obj_uta_demo_pedest.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/room_manager.h"
static const char *const sMdlNames[] = {
"StageF010rPedest",
@@ -25,8 +25,8 @@ bool dAcOutaDemoPedest_c::createHeap() {
}
mRes = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(sMdlNames[mModelType]);
TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -4,8 +4,8 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/room_manager.h"
static const char *const mMdlNames[] = {
"IslSon",
@@ -24,8 +24,8 @@ void dAcOutajima_c::rideCallback(dBgW *bg, dAcObjBase_c *o1, dAcObjBase_c *o2) {
bool dAcOutajima_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslSon"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl m(nullptr);
+3 -3
View File
@@ -4,13 +4,13 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_utajima_main_mecha.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "f/f_manager.h"
#include "f/f_profile_name.h"
#include "m/m_angle.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "s/s_Math.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_ISLAND, dAcOutajimaIsland_c, fProfile::OBJ_UTAJIMA_ISLAND, 0x1D2, 0, 6);
@@ -25,8 +25,8 @@ const f32 dAcOutajimaIsland_c::floats[] = {
bool dAcOutajimaIsland_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslPuzIslet00"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl m = mRes.GetResMdl("IslPuzIslet00");
TRY_CREATE(mMdl.create(m, &heap_allocator, 0x120));
+3 -3
View File
@@ -2,8 +2,8 @@
#include "common.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "m/m_vec.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_LV2, dAcOutajimaLv2_c, fProfile::OBJ_UTAJIMA_LV2, 0x1D5, 0, 3);
@@ -11,8 +11,8 @@ const f32 dAcOutajimaLv2_c::someFloat = 100000.0f;
bool dAcOutajimaLv2_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslCave"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl("IslCave");
TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+5 -5
View File
@@ -1,9 +1,10 @@
#include "d/t/d_t_genki_dws_tgt.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_GENKI_DOWSING_TARGET, dTgGenkiDwsTgt_c, fProfile::TAG_GENKI_DOWSING_TARGET, 0x02A5, 0, 0);
@@ -49,11 +50,10 @@ int dTgGenkiDwsTgt_c::actorExecute() {
if (flag) {
deleteRequest();
} else {
RoomManager *mgr = RoomManager::m_Instance;
if (mgr != nullptr) {
dRoom *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
if (dStage_c::GetInstance() != nullptr) {
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
if (room != nullptr) {
if (room->flags & 8) {
if (room->checkFlag(8)) {
mDowsingTarget.doRegister();
} else {
mDowsingTarget.doUnregister();
+11 -11
View File
@@ -3,14 +3,15 @@
#include "d/a/d_a_player.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_heap.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/flag/enemyflag_manager.h"
#include "f/f_list_nd.h"
#include "m/m_vec.h"
#include "toBeSorted/event.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/file_manager.h"
#include "toBeSorted/room_manager.h"
#include "toBeSorted/special_item_drop_mgr.h"
// .sdata
@@ -35,7 +36,6 @@ extern "C" s16 targetAngleY(mVec3_c *, mVec3_c *);
extern "C" s16 targetAngleX(mVec3_c *, mVec3_c *);
extern "C" bool checkCollision(mVec3_c *pos);
extern "C" s8 collisionCheckGetRoom();
extern "C" dRoom *getRoomByIndex(RoomManager *mgr, s8 roomid);
bool dAcBase_c::createHeap() {
return true;
@@ -126,13 +126,13 @@ int dAcBase_c::initAllocator(int size, char *name, EGG::Heap *heap, int align) {
}
bool dAcBase_c::addActorToRoom(s32 roomId) {
dBase_c *room = RoomManager::getRoom(roomId);
dBase_c *room = dStage_c::getParentForRoom(roomId);
if (room == nullptr) {
return false;
}
if (setConnectChild(room)) {
if (roomId == -1) {
this->roomid = RoomManager::m_Instance->curr_room_id;
this->roomid = dStage_c::GetInstance()->getCurrRoomId();
} else {
this->roomid = roomId;
}
@@ -427,15 +427,15 @@ void dAcBase_c::updateRoomId(f32 yOffset) {
if (checkCollision(&actorPos)) {
roomid = collisionCheckGetRoom();
} else {
roomid = RoomManager::m_Instance->curr_room_id;
roomid = dStage_c::GetInstance()->getCurrRoomId();
}
}
}
// 8002d540
bool dAcBase_c::isRoomFlags_0x6_Set() {
dRoom *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
return (room->flags & 6);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
return (room->checkFlag(0x4 | 0x2));
}
// Start of SoundSource stuff
@@ -478,12 +478,12 @@ void dAcBase_c::setEnemyDefeatFlag() {
// 8002d940
void dAcBase_c::changeLoadedEntitiesWithSet() {
RoomManager::m_Instance->changeLoadedEntities(RoomManager::m_Instance, obj_id, true);
dStage_c::GetInstance()->changeLoadedEntities(obj_id, true);
}
// 8002d960
void dAcBase_c::changeLoadedEntitiesNoSet() {
RoomManager::m_Instance->changeLoadedEntities(RoomManager::m_Instance, obj_id, false);
dStage_c::GetInstance()->changeLoadedEntities(obj_id, false);
}
// spawns GroupType2 (ACTOR)
@@ -513,7 +513,7 @@ dAcBase_c *dAcBase_c::createActor(
setTempCreateParams(
actorPosition, actorRotation, actorScale, actorRoomid, newParams2, (dAcBase_c *)actorRef, 0, -1, 0xFF, nullptr
);
dBase_c *room = RoomManager::getRoom(roomid);
dBase_c *room = dStage_c::getParentForRoom(roomid);
return (dAcBase_c *)dBase_c::createBase(actorId, room, actorParams1, ACTOR);
}
@@ -544,7 +544,7 @@ dAcBase_c *dAcBase_c::createActorStage(
setTempCreateParams(
actorPosition, actorRotation, actorScale, actorRoomid, newParams2, (dAcBase_c *)actorRef, 0, -1, 0xFF, nullptr
);
dBase_c *room = RoomManager::getRoom(roomid);
dBase_c *room = dStage_c::getParentForRoom(roomid);
return (dAcBase_c *)dBase_c::createBase(actorId, room, actorParams1, STAGE);
}
+4 -3
View File
@@ -11,6 +11,8 @@
#include "d/col/c/c_bg_s_poly_info.h"
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/d_room.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/flag/tboxflag_manager.h"
@@ -31,7 +33,6 @@
#include "toBeSorted/counters/goddess_chest_counter.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(TBOX, dAcTbox_c, fProfile::TBOX, 0x018D, 0, 6);
@@ -1191,7 +1192,7 @@ int dAcTbox_c::actorExecute() {
(this->*mRegisterDowsingTarget)();
}
dRoom *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
bool hasFlags = r->checkFlag(0x1E);
if (hasFlags) {
setObjectProperty(0x200);
@@ -1327,7 +1328,7 @@ int dAcTbox_c::actorExecuteInEvent() {
(this->*mRegisterDowsingTarget)();
}
dRoom *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
bool hasFlags = r->checkFlag(0x1E);
if (hasFlags) {
setObjectProperty(0x200);
+2 -2
View File
@@ -1028,7 +1028,7 @@ UNKTYPE *dBgS::GetMapAccessor() {
return lbl_805754B0;
}
void dBgS::DrawMap(u8 roomId, mMtx_c *, bool bColor, int) {
void dBgS::DrawMap(int roomId, mMtx_c *, bool bColor, int) {
// TODO
}
@@ -1068,7 +1068,7 @@ void dBgS::SetupScrollMaterial(int matIdx, s32, bool) {
// TODO
}
void dBgS::DrawMapScroll(u8 roomId, mMtx_c *, bool bColor, int) {
void dBgS::DrawMapScroll(int roomId, mMtx_c *, bool bColor, int) {
// TODO
}
+1 -2
View File
@@ -4,9 +4,9 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_stage_mgr.h"
#include "f/f_base.h"
#include "rvl/MTX/mtx.h"
#include "toBeSorted/stage_manager.h"
dCcS *dCcS::sInstance;
@@ -168,7 +168,6 @@ void dCcS::ClearArea() {
mAreaCount = 0;
}
extern "C" bool fn_8019A7A0(void *stg, f32 *, f32 *);
void dCcS::AdjustHitPos() {
f32 x, z;
+656
View File
@@ -0,0 +1,656 @@
#include "d/d_room.h"
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/d_a_item.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w_base.h"
#include "d/col/bg/d_bg_w_kcol.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/t/d_t_mass_obj.h"
#include "egg/math/eggMath.h"
#include "f/f_base.h"
#include "m/m3d/m_anmmatclr.h"
#include "m/m3d/m_anmtexpat.h"
#include "m/m3d/m_anmtexsrt.h"
#include "m/m3d/m_anmvis.h"
#include "m/m3d/m_fanm.h"
#include "m/m3d/m_smdl.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/g3d_scnmdl.h"
#include "nw4r/g3d/g3d_scnobj.h"
#include "nw4r/g3d/res/g3d_resanmclr.h"
#include "nw4r/g3d/res/g3d_resanmtexpat.h"
#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
#include "nw4r/g3d/res/g3d_resanmvis.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmat.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/g3d/res/g3d_resnode.h"
#include "nw4r/math/math_geometry.h"
#include "nw4r/math/math_types.h"
#include "sized_string.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/time_area_mgr.h"
#include "toBeSorted/unk_with_water.h"
SPECIAL_BASE_PROFILE(ROOM, dRoom_c, fProfile::ROOM, 0x9, 96);
STATE_DEFINE(dRoom_c, Active);
STATE_DEFINE(dRoom_c, NonActive);
extern "C" void parseRoomBzs(int roomid, void *bzs);
int dRoom_c::create() {
roomid = params & 0x3F;
mCanHavePastState = dStageMgr_c::GetInstance()->getSTIFunk1() == 0 &&
// SSH machine room (less sure about D303...)
!(dScGame_c::isCurrentStage("D301") && roomid == 12) &&
!(dScGame_c::isCurrentStage("D303") && roomid == 12) &&
// LMF first two rooms, Gust Bellows room
!(dScGame_c::isCurrentStage("D300") && (roomid == 0 || roomid == 1 || roomid == 4)) &&
// LMF crawlspace, spike maze
!(dScGame_c::isCurrentStage("D300_1") && (roomid == 7 || roomid == 9));
if (!mAllocator.createNewTempFrmHeap(
-1, CurrentStageArcManager::sInstance->getHeap(roomid), "dRoom_c::m_allocator", 0x20, 0
)) {
return FAILED;
}
bool anyError = false;
mRoomRes = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "g3d/room.brres"));
dStage_c::bindStageResToFile(&mRoomRes);
dStage_c::bindSkyCmnToResFile(&mRoomRes);
for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) {
model_c *mdl = &mModels[i];
if (i != 2 || roomid != 1 || dScGame_c::currentSpawnInfo.layer != 14 || !dScGame_c::isCurrentStage("F406")) {
if (!mdl->create(mRoomRes, mAllocator, i, &mWaterThing)) {
anyError = true;
break;
}
if (mdl->mpAnmPat) {
mHasAnmTexPat = true;
}
}
}
if (!anyError) {
if (mWaterThing.hasLinks()) {
u32 val = 0;
dStageMgr_c *stageMr = dStageMgr_c::GetInstance();
if (stageMr->checkFlag0x88A0(2)) {
val = 3;
}
stageMr->initUnkWithWater(val, &mWaterThing);
}
anyError = setupBg();
}
mAllocator.adjustFrmHeapRestoreCurrent();
if (anyError) {
return FAILED;
}
dStage_c::GetInstance()->setRoom(roomid, this);
BZS = CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "dat/room.bzs");
parseRoomBzs(roomid, BZS);
mDidAlreadyInit = (params >> 6) & 1;
mStateMgr.changeState(StateID_Active);
if (roomid != dScGame_c::currentSpawnInfo.room) {
mFlags |= 2;
deactivateUpdates();
}
return SUCCEEDED;
}
int dRoom_c::doDelete() {
destroyModels();
if (mWaterThing.hasLinks()) {
u32 val = 0;
dStageMgr_c *stageMr = dStageMgr_c::GetInstance();
if (stageMr->checkFlag0x88A0(2)) {
val = 3;
}
stageMr->destroyUnkWithWater(val, &mWaterThing);
}
dStage_c::GetInstance()->setRoom(roomid, nullptr);
return SUCCEEDED;
}
int dRoom_c::execute() {
mStateMgr.executeState();
f32 val = 0.0f;
if (mCanHavePastState) {
val = dTimeAreaMgr_c::sInstance->checkPositionIsInPastState(roomid, mVec3_c::Zero, nullptr, 1000000.0f);
mSkipDrawing = !mHasAnmTexPat && (!dTimeAreaMgr_c::sInstance->isInLanayruMiningFacility() || val > 0.0f) &&
dTimeAreaMgr_c::sInstance->isField0x78();
} else {
mSkipDrawing = false;
}
if ((mFlags & 2) != 0 || mSkipDrawing) {
releaseBg();
return SUCCEEDED;
}
executeBg();
for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) {
mModels[i].execute(i, mCanHavePastState, val);
}
return SUCCEEDED;
}
int dRoom_c::draw() {
if ((mFlags & 2) != 0 || mSkipDrawing) {
return SUCCEEDED;
}
for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) {
mModels[i].draw(roomid);
}
return SUCCEEDED;
}
void deactivateUpdatesCb(dAcBase_c *ac) {
if (!ac->checkActorProperty(0x400)) {
return;
}
ac->unkVirtFunc_0x60();
}
void dRoom_c::deactivateUpdates() {
if (!mUpdatesDeactivated) {
foreachObject(deactivateUpdatesCb);
setProcControlFlag(ROOT_DISABLE_EXECUTE | ROOT_DISABLE_DRAW);
mUpdatesDeactivated = true;
}
}
void activateUpdatesCb(dAcBase_c *ac) {
if (!ac->checkActorProperty(0x400)) {
return;
}
ac->restorePosRotFromCopy();
}
void dRoom_c::activateUpdates() {
if (mUpdatesDeactivated) {
foreachObject(activateUpdatesCb);
clearProcControlFlag(ROOT_DISABLE_EXECUTE);
clearProcControlFlag(ROOT_DISABLE_DRAW);
mUpdatesDeactivated = false;
}
}
s32 dRoom_c::foreachObject(foreachObjCallback cb) {
s32 count = 0;
fBase_c *start = getConnectBrNext();
if (start == nullptr) {
start = getConnectParent();
}
for (fBase_c *base = getConnectChild(); base != nullptr && base != start; base = getConnectTreeNext(base)) {
if (base->group_type == ACTOR || base->group_type == STAGE) {
cb(static_cast<dAcBase_c *>(base));
count++;
}
}
return count;
}
struct BgData {
const char *kcl;
const char *plc;
};
static const BgData sRoomBg[] = {
{ "kcl/room.kcl", "dat/room.plc"},
{"kcl/room_n.kcl", "dat/room_n.plc"},
};
bool dRoom_c::setupBg() {
for (int i = 0; i < ARRAY_LENGTH(mBg); i++) {
dBgWKCol *bg = &mBg[i];
void *kcl = CurrentStageArcManager::sInstance->getDataFromRoomArc(roomid, sRoomBg[i].kcl);
if (kcl != nullptr) {
void *plc = CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, sRoomBg[i].plc);
bg->Set(kcl, plc);
bg->SetRoomId(roomid);
bg->SetPriority(dBgW_Base::PRIORITY_0);
bool ok = (BOOL)bg->InitMapStuff(&mAllocator);
if (!ok) {
return true;
}
if (mCanHavePastState && !mHasAnmTexPat) {
bg->SetUnkBase();
}
// ???
dBgS::GetInstance()->Regist(bg, (dAcObjBase_c *)nullptr);
dBgS::GetInstance()->RegistBg(bg, nullptr);
}
}
return false;
}
void dRoom_c::executeBg() {
for (int i = 0; i < ARRAY_LENGTH(mBg); i++) {
if (!mBg[i].ChkNotReady()) {
dBgS::GetInstance()->Regist(&mBg[i], (dAcObjBase_c *)nullptr);
}
}
}
void dRoom_c::releaseBg() {
for (int i = 0; i < 2; i++) {
if (!mBg[i].ChkNotReady()) {
dBgS::GetInstance()->Release(&mBg[i]);
}
}
}
void dRoom_c::drawOnMapIfVisible(mMtx_c *mtx, int param) {
// Dungeon map shows rooms but doesn't fill them out
// Visited rooms are shown filled out
bool drawFully = true;
if (dStageMgr_c::GetInstance()->isAreaTypeDungeonOrBoss()) {
drawFully = dStage_c::GetInstance()->hasVisitedRoom(roomid);
if (!drawFully && !dAcItem_c::checkFlag(/* DUNGEON_MAP_FI */ 0x32)) {
return;
}
} else {
// Lake Floria interior
if (dStageMgr_c::GetInstance()->isAreaTypeOverworldOrSkyloft() && dScGame_c::isCurrentStage("F102") &&
!StoryflagManager::sInstance->getCounterOrFlag(115) && roomid >= 3 && roomid < 5) {
return;
}
}
dBgS::GetInstance()->DrawMap(roomid, mtx, drawFully, param);
}
void dRoom_c::getBounds(mVec3_c *min, mVec3_c *max) const {
for (int i = 0; i < ARRAY_LENGTH(mModels); i++) {
mVec3_c tMin, tMax;
mModels[i].getBounds(&tMin, &tMax);
if (i == 0) {
*min = tMin;
*max = tMax;
} else {
nw4r::math::VEC3Minimize(min, min, tMin);
nw4r::math::VEC3Maximize(max, max, tMax);
}
}
}
void dRoom_c::formatObj(int obj, SizedString<8> &str) {
str.sprintf("obj%d", obj);
}
void dRoom_c::updateObjNodeInEachRoom(int obj, bool visible) {
SizedString<8> objName;
formatObj(obj, objName);
for (int i = 0; i < ARRAY_LENGTH(mModels); i++) {
mModels[i].updateObjNode(objName, visible);
}
}
void dRoom_c::destroyModels() {
for (int i = 0; i < ARRAY_LENGTH(mModels); i++) {
mModels[i].destroy();
}
}
// Called from d_a_lastboss
void dRoom_c::someLastBossThing(bool arg) {
const char *name = "model0";
if (!arg) {
name = "model_obj0";
}
nw4r::g3d::ResAnmTexSrt anmSrt = mRoomRes.GetResAnmTexSrt(name);
if (anmSrt.IsValid()) {
mModels[0].mpAnmSrt->setAnm(mModels[0].mMdl, anmSrt, 0, m3d::PLAY_MODE_4);
mModels[0].mMdl.setAnm(*mModels[0].mpAnmSrt);
}
}
f32 dRoom_c::getFrame() const {
return mModels[0].getFrame();
}
extern "C" void fn_800641D0(int roomid, void *roomBzs);
extern "C" void fn_80064160(int roomid, void *roomBzs);
void dRoom_c::initializeState_Active() {
SceneflagManager::sInstance->unsetZoneflagsForRoom(roomid);
executeBg();
fn_800641D0(roomid, BZS);
if (mDidAlreadyInit) {
fn_80064160(roomid, BZS);
} else {
mFlags |= 8 | 2;
mDidAlreadyInit = true;
}
}
void dRoom_c::executeState_Active() {
u8 flags = mFlags;
field_0x571 = (flags & (4 | 2)) != 0;
if (field_0x571) {
if ((flags & 8) != 0) {
mStateMgr.changeState(StateID_NonActive);
} else {
deactivateUpdates();
}
return;
}
activateUpdates();
}
void dRoom_c::finalizeState_Active() {}
void deleteActor(dAcBase_c *ac) {
ac->setActorProperty(0x800);
ac->deleteRequest();
}
void dRoom_c::initializeState_NonActive() {
foreachObject(deleteActor);
if (dTgMassObj_c::GetInstance() != nullptr) {
dTgMassObj_c::GetInstance()->unloadRoom(roomid);
}
}
void dRoom_c::executeState_NonActive() {
if ((mFlags & 8) != 0) {
return;
}
mStateMgr.changeState(StateID_Active);
}
void dRoom_c::finalizeState_NonActive() {
mFlags = mFlags & ~8;
destroyModels();
}
void dRoom_c::mdl_c::remove() {
if (mpAabb != nullptr) {
delete[] mpAabb;
mpAabb = nullptr;
doSomethingWithVis(true);
}
}
bool dRoom_c::mdl_c::create(nw4r::g3d::ResMdl resMdl, mAllocator_c &alloc) {
if (!m3d::smdl_c::create(resMdl, &alloc, 0x40)) {
return false;
}
calc(false);
u32 numEntries = resMdl.GetResNodeNumEntries();
mpAabb = new nw4r::math::AABB[numEntries];
if (mpAabb == nullptr) {
return false;
}
nw4r::math::AABB *buf = mpAabb;
u32 id = 0;
if (numEntries != 0) {
for (; id < numEntries; id++) {
mMtx_c mtx;
getNodeWorldMtx(id, mtx);
nw4r::g3d::ResNode resNd = resMdl.GetResNode(id);
mVec3_c min, max;
min.copyFrom(resNd.GetBoundsMin());
max.copyFrom(resNd.GetBoundsMax());
nw4r::math::AABB bb(min, max);
buf->Set(&bb, mtx);
buf++;
}
}
doSomethingWithVis(false);
return true;
}
extern "C" bool fn_801BB750(nw4r::math::AABB *aabb, f32 f);
void dRoom_c::mdl_c::configureSomething() {
nw4r::g3d::ResMdl mdl = getResMdl();
u32 numNodes = mdl.GetResNodeNumEntries();
nw4r::math::AABB *aabbs = mpAabb;
for (u32 i = 0; i < numNodes; i++) {
nw4r::g3d::ResNode nd = mdl.GetResNode(i);
if (nd.IsVisible() && (nd.ref().flags & nw4r::g3d::ResNodeData::FLAG_GEOMETRY) &&
nd.GetBillboardMode() == nw4r::g3d::ResNodeDataTypedef::BILLBOARD_OFF) {
somethingVisibility(i, !fn_801BB750(&aabbs[i], EGG::Math<f32>::maxNumber()));
}
}
}
void dRoom_c::mdl_c::somethingVisibility(u32 id, bool visible) {
nw4r::g3d::ScnMdl *mdl = nw4r::g3d::ScnObj::DynamicCast<nw4r::g3d::ScnMdl>(getG3dObject());
nw4r::g3d::ScnMdl::CopiedVisAccess v(mdl, id);
v.SetVisibility(visible);
}
void dRoom_c::mdl_c::doSomethingWithVis(bool arg) {
nw4r::g3d::ResMdl mdl = getResMdl();
const char *mdlName = mdl.GetName();
if (strequals(mdlName, "model0_s") && dScGame_c::isStageSkyloftLayer20()) {
nw4r::g3d::ResMat mat = mdl.GetResMat("MA03_C_Door_Kasan");
setMatVisible(mat.GetID(), arg);
}
}
bool dRoom_c::model_c::create(nw4r::g3d::ResFile resFile, mAllocator_c &alloc, s32 idx, UnkWithWater *waterThing) {
SizedString<16> mdlName;
mdlName.sprintf("model%d", idx >> 1);
if ((idx & 1) != 0) {
mdlName += "_s";
}
nw4r::g3d::ResMdl mdl = resFile.GetResMdl(mdlName);
if (!mdl.IsValid()) {
return true;
}
bool linkResult = UnkWithWater::linkMdl(mdl, waterThing);
if (!mMdl.create(mdl, alloc)) {
return false;
}
const DrawPriorityConfig *cfg = getDrawPriority(idx);
u8 xlu = linkResult != 0 ? dStageMgr_c::GetInstance()->checkFlag0x88A0(0x2) ? cfg->pDrawXlu : 0x84 : cfg->pDrawXlu;
mMdl.setPriorityDraw(cfg->pDrawOpa1, xlu);
bool anyAnims = false;
nw4r::g3d::ResAnmClr anmClr = resFile.GetResAnmClr(mdlName);
if (anmClr.IsValid()) {
mpAnmClr = new m3d::anmMatClr_c();
if (!mpAnmClr) {
return false;
}
if (!mpAnmClr->create(mdl, anmClr, &alloc, nullptr, 1)) {
return false;
}
mMdl.setAnm(*mpAnmClr);
anyAnims = true;
}
nw4r::g3d::ResAnmTexPat anmPat = resFile.GetResAnmTexPat(mdlName);
if (anmPat.IsValid()) {
mpAnmPat = new m3d::anmTexPat_c();
if (!mpAnmPat) {
return false;
}
if (!mpAnmPat->create(mdl, anmPat, &alloc, nullptr, 1)) {
return false;
}
mMdl.setAnm(*mpAnmPat);
anyAnims = true;
}
nw4r::g3d::ResAnmTexSrt anmSrt = resFile.GetResAnmTexSrt(mdlName);
if (!anmSrt.IsValid()) {
dStage_c::getMA0IndirectSrt(&anmSrt, mdl);
}
if (anmSrt.IsValid()) {
mpAnmSrt = new m3d::anmTexSrt_c();
if (!mpAnmSrt) {
return false;
}
if (!mpAnmSrt->create(mdl, anmSrt, &alloc, nullptr, 1)) {
return false;
}
mMdl.setAnm(*mpAnmSrt);
anyAnims = true;
}
nw4r::g3d::ResAnmVis anmVis = resFile.GetResAnmVis(mdlName);
if (anmVis.IsValid()) {
mpAnmVis = new m3d::anmVis_c();
if (!mpAnmVis) {
return false;
}
if (!mpAnmVis->create(mdl, anmVis, &alloc, nullptr)) {
return false;
}
mMdl.setAnm(*mpAnmVis);
anyAnims = true;
}
if (anyAnims) {
mMdl.setOption(nw4r::g3d::ScnObj::OPTION_DISABLE_CALC_WORLD, false);
}
return true;
}
void dRoom_c::model_c::execute(s32 idx, bool canHavePastState, f32 pastState) {
if (!mMdl.hasModel()) {
return;
}
if (mpAnmClr) {
mpAnmClr->play();
}
if (mpAnmSrt) {
mpAnmSrt->play();
}
if (mpAnmVis) {
mpAnmVis->play();
}
if (canHavePastState && !(idx >= 6)) {
if (mpAnmPat) {
int frame = (pastState > 0.0f);
mpAnmPat->setFrame(frame, 0);
} else {
const DrawPriorityConfig *cfg = getDrawPriority(idx);
if (pastState > 0.0f) {
mMdl.setPriorityDraw(cfg->pDrawOpa2, cfg->pDrawXlu);
} else {
mMdl.setPriorityDraw(cfg->pDrawOpa1, cfg->pDrawXlu);
}
}
} else {
if (mpAnmPat) {
mpAnmPat->play();
}
}
}
void dRoom_c::model_c::draw(int roomid) {
if (!mMdl.hasModel()) {
return;
}
mMdl.configureSomething();
configureSomething(roomid, &mMdl);
mMdl.entry();
}
extern "C" void fn_80017B10(nw4r::g3d::ResMdl &mdl, bool, bool);
void dRoom_c::model_c::configureSomething(int roomid, mdl_c *mdl) {
nw4r::g3d::ResMdl resMdl = mdl->getResMdl();
fn_80017B10(resMdl, true, false);
}
const DrawPriorityConfig cfg[] = {
{0x18, 0x5, 0x7},
{0x1E, 0x5, 0x9},
{0x19, 0x6, 0x7},
{0x1F, 0x6, 0x9},
{0x1A, 0x7, 0x7},
{0x20, 0x7, 0x9},
{0x1B, 0x8, 0x7},
{0x21, 0x8, 0x9},
};
const DrawPriorityConfig *dRoom_c::model_c::getDrawPriority(s32 idx) {
return &cfg[idx];
}
bool dRoom_c::model_c::getBounds(mVec3_c *min, mVec3_c *max) const {
return mMdl.getBounds(min, max);
}
nw4r::g3d::ResNode dRoom_c::model_c::getResNode(const char *nodeName) {
return mMdl.getResMdl().GetResNode(nodeName);
}
void dRoom_c::model_c::updateObjNode(const char *node, bool visible) {
if (!mMdl.hasModel()) {
return;
}
nw4r::g3d::ResNode nd = getResNode(node);
if (!nd.IsValid()) {
return;
}
nd.SetVisibility(visible);
mMdl.somethingVisibility(nd.GetID(), visible);
if (visible) {
dTimeAreaMgr_c::sInstance->setField0x7A(true);
} else {
dTimeAreaMgr_c::sInstance->setField0x7A(false);
}
}
void dRoom_c::model_c::destroy() {
if (!mMdl.hasModel()) {
return;
}
nw4r::g3d::ScnMdl *mdl = nw4r::g3d::ScnObj::DynamicCast<nw4r::g3d::ScnMdl>(mMdl.getG3dObject());
nw4r::g3d::ResMdl resMdl = mMdl.getResMdl();
for (u32 i = 0; i < resMdl.GetResNodeNumEntries(); i++) {
nw4r::g3d::ResNode nd = resMdl.GetResNode(i);
nd.SetVisibility(true);
nw4r::g3d::ScnMdl::CopiedVisAccess v(mdl, i);
v.SetVisibility(true);
}
}
f32 dRoom_c::model_c::getFrame() const {
if (!mMdl.hasModel() || !mpAnmSrt) {
return 0.0f;
}
return mpAnmSrt->getFrame(0);
}
+3 -4
View File
@@ -2,6 +2,7 @@
#include "common.h"
#include "d/d_base.h"
#include "d/d_stage_mgr.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
@@ -14,9 +15,7 @@
#include "toBeSorted/file_manager.h"
#include "toBeSorted/minigame_mgr.h"
#include "toBeSorted/music_mgrs.h"
#include "toBeSorted/room_manager.h"
#include "toBeSorted/some_gxf_thing.h"
#include "toBeSorted/stage_manager.h"
#include <cstring>
@@ -249,11 +248,11 @@ void SpawnInfoExt::setSpawnData(
mType0RotY = rot;
}
void LinkReloadInfo::set(u8 roomid, const mVec3_c &pos, mAng rot, u32 flags) {
void LinkReloadInfo::set(u8 roomid, const mVec3_c &pos, mAng rot, u32 linkParams) {
mRoomId = roomid;
mPosition = pos;
mRotY = rot;
mUnkFlags = flags;
mLinkParams = linkParams;
mType0CsFlag = 1;
}
+399
View File
@@ -0,0 +1,399 @@
#include "d/d_stage.h"
#include "common.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_sc_title.h"
#include "d/d_stage_mgr.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "f/f_profile.h"
#include "f/f_profile_name.h"
#include "m/m_fader_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmat.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/math/math_types.h"
#include "s/s_FPhase.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/arc_managers/oarc_manager.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/music_mgrs.h"
#include "toBeSorted/time_area_mgr.h"
#include <cstring>
SPECIAL_BASE_PROFILE(STAGE, dStage_c, fProfile::STAGE, 6, 0x4E0);
sFPhase<dStage_c>::phaseCallback dStage_c::sCallbacks[] = {
&dStage_c::createRooms,
&dStage_c::waitForRooms,
nullptr,
};
extern "C" void fn_8001BE60(f32, f32);
extern "C" void *SCRAPPER_PTR;
dStage_c::dStage_c() : mPhase(this, sCallbacks) {
memset(loaded_entities, 0, sizeof(loaded_entities));
sInstance = this;
dScGame_c::resetUpdateFrameCount();
SCRAPPER_PTR = nullptr;
fn_8001BE60(2000.0f, 1700.0f);
}
extern "C" void *SCRAPPER_PICKUP_TARGET;
extern "C" void ScrapperPickupMgr__update(void *);
extern "C" void ScrapperPickupMgr__dtor();
extern "C" void fn_80028A80();
extern "C" void fn_80028EC0();
extern "C" void fn_80066D30(s32);
extern "C" void setPCAMpos2(const PCAM *);
int dStage_c::create() {
if (mPhase.step() != sFPhaseBase::PHASE_ALL_DONE) {
return NOT_READY;
}
dStageMgr_c *stageMgr = dStageMgr_c::GetInstance();
const PCAM *pcam = stageMgr->getPcam();
for (int i = 0; i < stageMgr->getPcamCount(); i++) {
setPCAMpos2(pcam);
pcam++;
}
if (mapRelated.field_0x1EB == 0) {
mVec3_c min, max;
for (s32 i = 0; i < MAX_ROOM_NUMBER - 1; i++) {
dRoom_c *room = getRoom(i);
if (room != nullptr) {
mVec3_c tmin, tmax;
room->getBounds(&tmin, &tmax);
if (i == 0) {
min = tmin;
max = tmax;
} else {
nw4r::math::VEC3Minimize(min, min, tmin);
nw4r::math::VEC3Maximize(max, max, tmax);
}
}
}
max.y += 6000.0f;
mVec3_c size = max - min;
mVec3_c center = mVec3_c(min.x + size.x * 0.5f, min.y, min.z + size.z * 0.5f);
mapRelated.fn_801B4B80(0, center, size);
mVec3_c v = mVec3_c(10000.0f, 10000.0f, 100000.0f);
mapRelated.fn_801B4C70(v);
}
mapRelated.fn_801B50C0(0);
fn_80028A80();
return SUCCEEDED;
}
int dStage_c::doDelete() {
fn_80028EC0();
fn_80066D30(-1);
ScrapperPickupMgr__dtor();
return SUCCEEDED;
}
int dStage_c::execute() {
mFader.calc();
ScrapperPickupMgr__update(SCRAPPER_PICKUP_TARGET);
return SUCCEEDED;
}
extern "C" void resetViewClipVals();
int dStage_c::draw() {
resetViewClipVals();
return SUCCEEDED;
}
void dStage_c::deleteReady() {}
sFPhaseBase::sFPhaseState dStage_c::createRooms() {
// TODO
// if (dScGame_c::sCo)
mFader.create();
mFader.setTypes(1, 1);
mFader.setFadeInFrame(1);
mFader.fadeIn();
mFader.calc();
mFader.setFrames(15, 15);
mFader.initForLyt();
// TODO
if (dScTitle_c::sInstance != nullptr) {
dBase_c::createBase(fProfile::TITLE, this, 0, OTHER);
}
dTimeAreaMgr_c::sInstance->setField0x78(false);
return sFPhaseBase::PHASE_NEXT;
}
sFPhaseBase::sFPhaseState dStage_c::waitForRooms() {
if (checkChildProcessCreateState()) {
return sFPhaseBase::PHASE_RETRY;
}
return sFPhaseBase::PHASE_NEXT;
}
void dStage_c::setRoom(int roomid, dRoom_c *room) {
rooms.setRoom(roomid, room);
}
dRoom_c *dStage_c::getRoom(s32 idx) {
return rooms.getRoom(idx);
}
bool dStage_c::fadeIn(s32 fadeType, u16 frames) {
if (mFader.getStatus() != mFaderBase_c::FADED_OUT) {
return false;
}
mFader.setFadeInType(fadeType);
mFader.setFadeInFrame(frames);
mFader.fadeIn();
fn_80384570(ENEMY_BGM_RELATED_MGR, false);
return true;
}
bool dStage_c::fadeOut(s32 fadeType, u16 frames) {
if (mFader.getStatus() != mFaderBase_c::FADED_IN) {
return false;
}
mFader.setFadeOutType(fadeType);
mFader.setFadeOutFrame(frames);
mFader.fadeOut();
fn_80384570(ENEMY_BGM_RELATED_MGR, true);
return true;
}
void dStage_c::forceFadeOut() {
mFader.setStatus(mFaderBase_c::FADED_OUT);
fn_80384570(ENEMY_BGM_RELATED_MGR, true);
}
void dStage_c::forceFadeIn() {
mFader.setStatus(mFaderBase_c::FADED_IN);
fn_80384570(ENEMY_BGM_RELATED_MGR, false);
}
void dStage_c::drawMap(mMtx_c *mtx, int param) {
dBgS::GetInstance()->UpdateScrollTex();
for (s32 i = 0; i < MAX_ROOM_NUMBER - 1; i++) {
dRoom_c *room = getRoom(i);
if (room != nullptr) {
room->drawOnMapIfVisible(mtx, param);
}
}
dBgS::GetInstance()->DrawSkyKeepMap(mtx, param);
}
static void getFlagPositionForRoomVisit(int roomid, u16 *o_flag, u16 *o_shift) {
*o_flag = (roomid / 16) + 8;
*o_shift = 1 << (roomid % 16);
}
bool dStage_c::hasVisitedRoom(int roomid) const {
u16 flag, shift;
getFlagPositionForRoomVisit(roomid, &flag, &shift);
DungeonflagManager *mg = DungeonflagManager::sInstance;
return (mg->getCounterOrFlag(flag, 8) & shift) != 0;
}
void dStage_c::setRoomVisited(int roomid) {
// TODO this is probably an inline but inline bools cause extra instructions
if (EventManager::getCurrentEventName() != nullptr &&
std::strncmp(EventManager::getCurrentEventName(), "Save", 0x20) == 0) {
return;
}
if (dScGame_c::sInstance == nullptr || dScGame_c::sInstance->profile_name == fProfile::GAME) {
u16 flag, shift;
getFlagPositionForRoomVisit(roomid, &flag, &shift);
DungeonflagManager *mg = DungeonflagManager::sInstance;
u16 newVal = shift | mg->getCounterOrFlag(flag, 8);
mg->setToValue(flag, newVal);
}
}
dRoom_c *dStage_c::createRoom(int roomid, bool flag0x40) {
return static_cast<dRoom_c *>(
dBase_c::createBase(fProfile::ROOM, this, (roomid & 0x3F) | (flag0x40 ? 0x40 : 0), OTHER)
);
}
void dStage_c::createLytSeekerStone() {
dBase_c::createBase(fProfile::LYT_CONTROL_GAME, this, 0, OTHER);
if (LayoutArcManager::sInstance->hasEntry("SeekerStone")) {
dBase_c::createBase(fProfile::LYT_SEEKER_STONE, this, 0, OTHER);
}
}
dBase_c *dStage_c::getParentForRoom(s32 idx) {
if (idx == -1) {
return dStage_c::GetInstance();
}
return dStage_c::GetInstance()->getRoom(idx);
}
void dStage_c::bindStageResToFile(nw4r::g3d::ResFile *file) {
nw4r::g3d::ResFile f = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
if (f.IsValid()) {
file->Bind(f);
}
}
void dStage_c::bindSkyCmnToResFile(nw4r::g3d::ResFile *file) {
nw4r::g3d::ResFile f = nw4r::g3d::ResFile(OarcManager::sInstance->getSubEntryData("SkyCmn", "g3d/model.brres"));
if (f.IsValid()) {
file->Bind(f);
}
}
static const char *sMatsToTry[] = {
"MA01",
"MA02",
"MA04",
};
bool dStage_c::getMA0AnmTexSrt(nw4r::g3d::ResAnmTexSrt *o_srt, const char *matName) {
const char **candidate = sMatsToTry;
for (int i = 0; i < ARRAY_LENGTH(sMatsToTry); i++, candidate++) {
if (!std::strncmp(matName, *candidate, std::strlen(*candidate))) {
nw4r::g3d::ResFile mdl = nw4r::g3d::ResFile(OarcManager::sInstance->getMdlFromArc2("Common"));
*o_srt = mdl.GetResAnmTexSrt(*candidate);
return true;
}
}
return false;
}
bool dStage_c::getMA0IndirectSrt(nw4r::g3d::ResAnmTexSrt *o_srt, const nw4r::g3d::ResMdl &mdl) {
for (u32 i = 0; i < mdl.GetResMatNumEntries(); i++) {
nw4r::g3d::ResMat mat = mdl.GetResMat(i);
const char *name = mat.GetName();
if (getMA0AnmTexSrt(o_srt, name)) {
return true;
}
}
return false;
}
dRoomTable_c::dRoomTable_c() {
// Okay
mRooms[0] = nullptr;
mRooms[1] = nullptr;
mRooms[2] = nullptr;
mRooms[3] = nullptr;
mRooms[4] = nullptr;
mRooms[5] = nullptr;
mRooms[6] = nullptr;
mRooms[7] = nullptr;
mRooms[8] = nullptr;
mRooms[9] = nullptr;
mRooms[10] = nullptr;
mRooms[11] = nullptr;
mRooms[12] = nullptr;
mRooms[13] = nullptr;
mRooms[14] = nullptr;
mRooms[15] = nullptr;
mRooms[16] = nullptr;
mRooms[17] = nullptr;
mRooms[18] = nullptr;
mRooms[19] = nullptr;
mRooms[20] = nullptr;
mRooms[21] = nullptr;
mRooms[22] = nullptr;
mRooms[23] = nullptr;
mRooms[24] = nullptr;
mRooms[25] = nullptr;
mRooms[26] = nullptr;
mRooms[27] = nullptr;
mRooms[28] = nullptr;
mRooms[29] = nullptr;
mRooms[30] = nullptr;
mRooms[31] = nullptr;
mRooms[32] = nullptr;
mRooms[33] = nullptr;
mRooms[34] = nullptr;
mRooms[35] = nullptr;
mRooms[36] = nullptr;
mRooms[37] = nullptr;
mRooms[38] = nullptr;
mRooms[39] = nullptr;
mRooms[40] = nullptr;
mRooms[41] = nullptr;
mRooms[42] = nullptr;
mRooms[43] = nullptr;
mRooms[44] = nullptr;
mRooms[45] = nullptr;
mRooms[46] = nullptr;
mRooms[47] = nullptr;
mRooms[48] = nullptr;
mRooms[49] = nullptr;
mRooms[50] = nullptr;
mRooms[51] = nullptr;
mRooms[52] = nullptr;
mRooms[53] = nullptr;
mRooms[54] = nullptr;
mRooms[55] = nullptr;
mRooms[56] = nullptr;
mRooms[57] = nullptr;
mRooms[58] = nullptr;
mRooms[59] = nullptr;
mRooms[60] = nullptr;
mRooms[61] = nullptr;
mRooms[62] = nullptr;
}
MapRelated::MapRelated()
: field_0x0FC(0.0f, 0.0f, 0.0f),
field_0x108(0.0f),
field_0x10C(0.0f),
field_0x110(0.0f),
field_0x114(0.0f),
field_0x118(0.0f),
field_0x11C(0.0f),
field_0x120(0.0f),
field_0x124(0.0f),
field_0x128(0.0f),
field_0x12C(0.0f),
field_0x1E0(0),
field_0x1E6(0),
field_0x1E8(0),
field_0x1E9(4),
field_0x1EA(-3),
field_0x1EB(0),
field_0x1EC(0),
field_0x1ED(0),
field_0x1EE(0),
field_0x1F0(0) {
mPostEffect.setField0x30(0.15f);
bool showPastVariant = true;
bool showDesertPast = dScGame_c::isCurrentStage("S300") ||
((dScGame_c::isCurrentStage("F300") || dScGame_c::isCurrentStage("F300_4")) &&
SceneflagManager::sInstance->checkTempOrSceneflag(3));
if (!showDesertPast) {
bool hideSeaPast = !(dScGame_c::isCurrentStage("F301_1") && StoryflagManager::sInstance->getCounterOrFlag(519));
if (hideSeaPast) {
showPastVariant = false;
}
}
field_0x1EF = showPastVariant;
}
extern "C" void fn_801B4AE0();
MapRelated::~MapRelated() {
fn_801B4AE0();
}
+295
View File
@@ -0,0 +1,295 @@
#include "d/d_stage_mgr.h"
#include "common.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "d/d_heap.h"
#include "d/d_last.h"
#include "d/d_sc_game.h"
#include "d/d_stage_parse.h"
#include "d/d_sys.h"
#include "d/flag/flag_managers.h"
#include "egg/core/eggHeap.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
#include "m/m_dvd.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/arc_managers/oarc_manager.h"
#include "toBeSorted/music_mgrs.h"
SPECIAL_BASE_PROFILE(STAGE_MANAGER, dStageMgr_c, fProfile::STAGE_MANAGER, 0X5, 1536);
STATE_DEFINE(dStageMgr_c, ReadStageRes);
STATE_DEFINE(dStageMgr_c, ReadRoomRes);
STATE_DEFINE(dStageMgr_c, ReadObjectRes);
STATE_DEFINE(dStageMgr_c, ReadStageLayerRes);
STATE_DEFINE(dStageMgr_c, ReadLayerObjectRes);
STATE_DEFINE(dStageMgr_c, SoundLoadSceneData);
STATE_DEFINE(dStageMgr_c, CreateObject);
STATE_DEFINE(dStageMgr_c, ReadObjectSound);
STATE_DEFINE(dStageMgr_c, SceneChangeSave);
STATE_DEFINE(dStageMgr_c, RestartSceneWait);
STATE_DEFINE(dStageMgr_c, RestartScene);
dStageMgr_c::dStageMgr_c() : mStateMgr(*this, sStateID::null), mPhase(this, sCallbacks) {
sInstance = this;
}
dStageMgr_c::~dStageMgr_c() {
sInstance = nullptr;
}
void dStageMgr_c::initializeState_ReadStageRes() {
CurrentStageArcManager::sInstance->setStage(dScGame_c::currentSpawnInfo.stageName);
}
void dStageMgr_c::executeState_ReadStageRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadRoomRes);
}
}
void dStageMgr_c::finalizeState_ReadStageRes() {
const void *stageBzs = CurrentStageArcManager::sInstance->getData("dat/stage.bzs");
if (stageBzs != nullptr) {
parseStageBzs(-1, stageBzs);
parseRoomStageBzs(-1, stageBzs);
}
fn_803618F0(ENEMY_SOUND_MGR);
}
void dStageMgr_c::initializeState_ReadRoomRes() {}
void dStageMgr_c::executeState_ReadRoomRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0 &&
LayoutArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadObjectRes);
}
}
void dStageMgr_c::finalizeState_ReadRoomRes() {
if (mpRmpl != nullptr) {
const RMPL *itRmpl = mpRmpl;
for (int i = 0; i < mRmplCount; itRmpl++, i++) {
const void *bzs = CurrentStageArcManager::sInstance->loadFromRoomArc(itRmpl->roomId, "dat/room.bzs");
parseRoomStageBzs(itRmpl->roomId, bzs);
}
} else {
u32 roomId = dScGame_c::currentSpawnInfo.room;
const void *bzs =
CurrentStageArcManager::sInstance->loadFromRoomArc(dScGame_c::currentSpawnInfo.room, "dat/room.bzs");
parseRoomStageBzs(roomId, bzs);
}
}
void dStageMgr_c::initializeState_ReadObjectRes() {
mStageObjCtrl.doLoad();
}
void dStageMgr_c::executeState_ReadObjectRes() {
if (mStageObjCtrl.isLoaded()) {
mStateMgr.changeState(StateID_ReadStageLayerRes);
}
}
void dStageMgr_c::finalizeState_ReadObjectRes() {}
void dStageMgr_c::initializeState_ReadStageLayerRes() {
CurrentStageArcManager::sInstance->loadFileFromExtraLayerArc(dScGame_c::currentSpawnInfo.layer);
}
void dStageMgr_c::executeState_ReadStageLayerRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadLayerObjectRes);
}
}
void dStageMgr_c::finalizeState_ReadStageLayerRes() {}
const char demoName[] = "";
static const char *sSeekerStoneLayoutArcs[] = {
"SeekerStone",
};
void dStageMgr_c::initializeState_ReadLayerObjectRes() {
mDemoName = demoName;
const void *bzs = CurrentStageArcManager::sInstance->getData("dat/stage.bzs");
if (bzs != nullptr) {
parseBzsStageRoom(-1, bzs);
}
if (mpRmpl != nullptr) {
const RMPL *itRmpl = mpRmpl;
for (int i = 0; i < mRmplCount; itRmpl++, i++) {
const void *bzs = CurrentStageArcManager::sInstance->loadFromRoomArc(itRmpl->roomId, "dat/room.bzs");
parseBzsStageRoom(itRmpl->roomId, bzs);
}
} else {
u32 roomId = dScGame_c::currentSpawnInfo.room;
const void *bzs =
CurrentStageArcManager::sInstance->loadFromRoomArc(dScGame_c::currentSpawnInfo.room, "dat/room.bzs");
parseBzsStageRoom(roomId, bzs);
}
if (dScGame_c::isStateLayerWithSeekerStoneHintMenu()) {
mLayoutArcCtrl2.set(sSeekerStoneLayoutArcs, ARRAY_LENGTH(sSeekerStoneLayoutArcs));
mLayoutArcCtrl2.load(dHeap::work2Heap.heap);
addActorId(fProfile::LYT_SEEKER_STONE);
}
mLayerObjCtrl.doLoad();
}
void dStageMgr_c::executeState_ReadLayerObjectRes() {
if (mLayerObjCtrl.isLoaded() && LayoutArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_SoundLoadSceneData);
}
}
extern "C" void fn_800C85D0(void *, EGG::Heap *heap, bool, void *jpc, void *jpn);
extern "C" void *FOR_LOADED_PARTICLES;
void dStageMgr_c::finalizeState_ReadLayerObjectRes() {
if (mDemoName.len() != 0) {
const char *name = mDemoName;
void *jpc = OarcManager::sInstance->getSubEntryData(name, "dat/jparticle.jpc");
if (jpc != nullptr) {
void *jpn = OarcManager::sInstance->getSubEntryData(name, "dat/jparticle.jpn");
fn_800C85D0(FOR_LOADED_PARTICLES, dHeap::work2Heap.heap, true, jpc, jpn);
}
}
}
static void *soundCallback(void *arg) {
fn_80362730(ENEMY_SOUND_MGR);
return reinterpret_cast<void *>(true);
}
void dStageMgr_c::initializeState_SoundLoadSceneData() {
fn_803624F0(ENEMY_SOUND_MGR);
mpDvdCallback = mDvd_callback_c::createOrDie(soundCallback, nullptr);
}
void dStageMgr_c::executeState_SoundLoadSceneData() {
if (mpDvdCallback != nullptr && mpDvdCallback->mStatus != 0) {
mStateMgr.changeState(StateID_CreateObject);
}
}
void dStageMgr_c::finalizeState_SoundLoadSceneData() {
mpDvdCallback->do_delete();
mpDvdCallback = nullptr;
}
void dStageMgr_c::initializeState_CreateObject() {
// too much egg
}
void dStageMgr_c::executeState_CreateObject() {
if (!checkChildProcessCreateState()) {
mStateMgr.changeState(StateID_ReadObjectSound);
}
}
void dStageMgr_c::finalizeState_CreateObject() {}
static void *soundCallback2(void *arg) {
fn_80365D20(ENEMY_SOUND_MGR);
return reinterpret_cast<void *>(true);
}
void dStageMgr_c::initializeState_ReadObjectSound() {
mpDvdCallback2 = mDvd_callback_c::createOrDie(soundCallback2, nullptr);
}
void dStageMgr_c::executeState_ReadObjectSound() {
if (mpDvdCallback2 == nullptr) {
return;
}
if (mpDvdCallback2->mStatus == 0) {
return;
}
if (dScGame_c::sInstance != nullptr) {
if (dScGame_c::sInstance->savePromptFlag() == true) {
mStateMgr.changeState(StateID_SceneChangeSave);
} else {
mStateMgr.changeState(StateID_RestartSceneWait);
}
return;
}
mStateMgr.changeState(StateID_RestartSceneWait);
}
void dStageMgr_c::finalizeState_ReadObjectSound() {
mpDvdCallback2->do_delete();
// mpDvdCallback2 = nullptr;
clearProcControlFlag(ROOT_DISABLE_EXECUTE);
clearProcControlFlag(ROOT_DISABLE_DRAW);
dLast_c::setExecuteCallback(lastExecuteCallback);
}
extern "C" void *LYT_SAVE_MGR;
extern "C" void fn_80285600(void *, int, int);
void dStageMgr_c::initializeState_SceneChangeSave() {
dScGame_c::sInstance->setSavePromptFlag(false);
if (LYT_SAVE_MGR != nullptr) {
fn_80285600(LYT_SAVE_MGR, 3, 0);
}
dBase_c::s_NextExecuteControlFlags |= 1;
dSys::setFrameRate(2);
}
void dStageMgr_c::executeState_SceneChangeSave() {
if (LYT_SAVE_MGR != nullptr) {
// "isNotSaving???"
if (((u8 *)LYT_SAVE_MGR)[0x119C] == true) {
mStateMgr.changeState(StateID_RestartSceneWait);
}
} else {
mStateMgr.changeState(StateID_RestartSceneWait);
}
}
void dStageMgr_c::finalizeState_SceneChangeSave() {
dBase_c::s_NextExecuteControlFlags &= ~1;
dBase_c::s_DrawControlFlags &= ~1;
}
void dStageMgr_c::initializeState_RestartSceneWait() {
dSys::setFrameRate(2);
}
void dStageMgr_c::executeState_RestartSceneWait() {
if (mFader.isSettled()) {
if (mFader.isStatus(mFaderBase_c::FADED_IN)) {
if (field_0x88BC) {
mStateMgr.changeState(StateID_RestartScene);
}
} else {
mFader.fadeIn();
}
// TODO
mFader.calc();
}
}
void dStageMgr_c::finalizeState_RestartSceneWait() {}
void dStageMgr_c::initializeState_RestartScene() {
triggerFade(dScGame_c::nextSpawnInfo.transitionType, dScGame_c::nextSpawnInfo.transitionFadeFrames);
mFader.setFadeInType(dScGame_c::nextSpawnInfo.transitionType);
fn_803625F0(ENEMY_SOUND_MGR, mFader.getFadeOutFrame());
}
void dStageMgr_c::executeState_RestartScene() {
if (mFader.isStatus(mFaderBase_c::FADED_OUT)) {}
}
void dStageMgr_c::finalizeState_RestartScene() {
commitAllFlagManagers();
dSys::setFrameRate(1);
}
+519
View File
@@ -0,0 +1,519 @@
#include "d/d_stage_parse.h"
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
#include "d/flag/flag_managers.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
#include "m/m_angle.h"
#include "m/m_vec.h"
#include "sized_string.h"
#include "toBeSorted/file_manager.h"
struct BzsHeader {
/* 0x00 */ u32 mName;
/* 0x04 */ u16 mSectionCount;
/* 0x08 */ u32 mOffset;
};
struct BzsSectionHead {
/* 0x00 */ u32 mTag;
/* 0x04 */ u16 mCount;
/* 0x08 */ u32 mOffset;
};
typedef void (*BzsParseFunc)(int roomid, const BzsSectionHead *section);
struct BzsTagToParseFunc {
/* 0x00 */ u32 mTag;
/* 0x04 */ BzsParseFunc mParseFunc;
};
#define OFS_TO_PTR(ty, section) \
(reinterpret_cast<const ty *>(reinterpret_cast<const char *>(section) + section->mOffset))
static void findAndRunStageTagParseFunc(
int roomid, const BzsSectionHead *head, const BzsTagToParseFunc *handlerTable, s32 tableSize
);
static void handleBzsPcam(int roomid, const BzsSectionHead *section) {
dStageMgr_c::GetInstance()->setPcam(OFS_TO_PTR(PCAM, section), section->mCount);
}
static void handleBzsLyse(int roomid, const BzsSectionHead *section) {
dStageMgr_c::GetInstance()->setLyse(OFS_TO_PTR(LYSE, section), section->mCount);
dStageMgr_c::GetInstance()->overrideLayer0WithLyse();
}
static void handleBzsStif(int roomid, const BzsSectionHead *section) {
// section->mCount == 1
dStageMgr_c::GetInstance()->setStif(OFS_TO_PTR(STIF, section));
s16 flagIndex = dStageMgr_c::GetInstance()->getFlagIndex();
FileManager::sInstance->setSceneFlagIndex(flagIndex);
updateFlagForFlagIndex(flagIndex);
}
static void handleBzsRmpl(int roomid, const BzsSectionHead *section) {
dStageMgr_c::GetInstance()->setRmpl(OFS_TO_PTR(RMPL, section), section->mCount);
}
static void handleBzsFile(int roomid, const BzsSectionHead *section) {
const bzsFILE *file = OFS_TO_PTR(bzsFILE, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setFile(file, section->mCount);
}
static void handleBzsLylt(int roomid, const BzsSectionHead *section) {
const LYLT *lylt = OFS_TO_PTR(LYLT, section);
for (s32 i = 0; i < section->mCount; i++) {
if (lylt->layer == dScGame_c::currentSpawnInfo.layer && lylt->demoHigh >= 0) {
SizedString<16> demoName;
demoName.sprintf("Demo%02d_%02d", lylt->demoHigh, lylt->demoLow);
dStageMgr_c::GetInstance()->setDemoName(demoName);
dStageMgr_c::GetInstance()->addLayerArcn(dStageMgr_c::GetInstance()->getDemoName());
}
lylt++;
}
}
static void handleBzsScen(int roomid, const BzsSectionHead *section) {
const SCEN *scen = OFS_TO_PTR(SCEN, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setScen(scen, section->mCount);
}
static void handleBzsCam(int roomid, const BzsSectionHead *section) {
const CAM *cam = OFS_TO_PTR(CAM, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setCam(cam, section->mCount);
}
static void handleBzsEvnt(int roomid, const BzsSectionHead *section) {
const EVNT *evnt = OFS_TO_PTR(EVNT, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setEvnt(evnt, section->mCount);
}
static void handleBzsPath(int roomid, const BzsSectionHead *section) {
const PATH *path = OFS_TO_PTR(PATH, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setPath(path, section->mCount);
}
static void handleBzsPnt(int roomid, const BzsSectionHead *section) {
const PNT *pnt = OFS_TO_PTR(PNT, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setPnt(pnt, section->mCount);
}
static void handleBzsBpnt(int roomid, const BzsSectionHead *section) {
const BPNT *bpnt = OFS_TO_PTR(BPNT, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setBpnt(bpnt, section->mCount);
}
static void handleBzsSpth(int roomid, const BzsSectionHead *section) {
const SPTH *spth = OFS_TO_PTR(SPTH, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setSpth(spth, section->mCount);
}
static void handleBzsSpnt(int roomid, const BzsSectionHead *section) {
const SPNT *spnt = OFS_TO_PTR(SPNT, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setSpnt(spnt, section->mCount);
}
static void handleBzsSbpt(int roomid, const BzsSectionHead *section) {
const SBPT *sbpt = OFS_TO_PTR(SBPT, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setSbpt(sbpt, section->mCount);
}
static void handleBzsArea(int roomid, const BzsSectionHead *section) {
const AREA *area = OFS_TO_PTR(AREA, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setArea(area, section->mCount);
}
extern "C" bool fn_8005C5D0(u32);
extern "C" void spawnLightObject();
extern "C" void spawnWeatherTag();
static void handleBzsPly(int roomid, const BzsSectionHead *section) {
const PLY *ply = OFS_TO_PTR(PLY, section);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
room->setPly(ply, section->mCount);
if (roomid == dScGame_c::currentSpawnInfo.room) {
dScGame_c *sc = dScGame_c::GetInstance();
const mVec3_c *linkPos;
const mAng3_c *linkAngle;
mAng3_c ang(0, 0, 0);
mVec3_c pos;
u32 linkActorParams = 0x7FFFFFF;
bool param = 0;
bool preventSetRespawnInfo = false;
u8 reloaderType = dScGame_c::getReloaderType();
if (reloaderType != 0) {
FileManager *fileMgr = FileManager::sInstance;
if (reloaderType == 2) {
pos = *FileManager::sInstance->getPosT2();
ang.y = fileMgr->getAngleT2();
linkPos = &pos;
linkAngle = &ang;
linkActorParams = 0x7FFFF1B;
} else if (reloaderType == 3) {
pos = *FileManager::sInstance->getPosT3();
ang.y = fileMgr->getAngleT3();
linkPos = &pos;
linkAngle = &ang;
if (!StoryflagManager::sInstance->getCounterOrFlag(752) &&
!StoryflagManager::sInstance->getCounterOrFlag(119)) {
const PLY *entrance = room->getEntranceById(dScGame_c::currentSpawnInfo.entrance);
if (fn_8005C5D0(entrance->linkParams) == true) {
linkActorParams = entrance->linkParams;
}
}
} else {
if (FileManager::sInstance->getEntranceLoadFlagT1() == 0 && dScGame_c::getReloaderType() != 4) {
pos = *fileMgr->getPosT1();
ang.y = fileMgr->getAngleT1();
if (fileMgr->fn_8000CC00() == 2) {
const PLY *entrance = room->getEntranceById(dScGame_c::currentSpawnInfo.entrance);
linkActorParams = entrance->linkParams;
}
linkPos = &pos;
linkAngle = &ang;
} else {
const PLY *entrance = room->getEntranceById(dScGame_c::currentSpawnInfo.entrance);
linkActorParams = entrance->linkParams;
linkPos = &entrance->position;
linkAngle = &entrance->angle;
}
}
dScGame_c::setReloaderType(0);
if (sc->getType0CsFlag() != 0) {
sc->setType0CsFlag(0);
}
} else {
if (dScGame_c::GetInstance()->getType0CsFlag() != 0) {
preventSetRespawnInfo = true;
const LinkReloadInfo &info = dScGame_c::GetInstance()->getLinkReloadInfo();
ang.y = info.mRotY;
linkPos = &info.mPosition;
linkAngle = &ang;
linkActorParams = info.mLinkParams;
sc->setType0CsFlag(0);
} else if (dScGame_c::GetInstance()->getType0PosFlag() != 0) {
const SpawnInfoExt &info = dScGame_c::GetInstance()->getSpawnInfo();
pos = info.mType0Pos;
linkPos = &pos;
ang.y = info.mType0RotY;
linkAngle = &ang;
sc->setType0PosFlag(0);
} else {
const PLY *entrance = room->getEntranceById(dScGame_c::currentSpawnInfo.entrance);
linkActorParams = entrance->linkParams;
linkPos = &entrance->position;
linkAngle = &entrance->angle;
param = true;
}
}
// TODO constify args
dAcObjBase_c::create(
fProfile::PLAYER, -1, linkActorParams, (mVec3_c *)linkPos, (mAng3_c *)linkAngle, nullptr, -1
);
if (!preventSetRespawnInfo) {
dScGame_c::GetInstance()->setRespawnInfo(*linkPos, *linkAngle, param);
}
dStage_c::GetInstance()->handleRoomChange(roomid);
dBase_c::createBase(fProfile::CAMERA, dStage_c::GetInstance(), 0, fBase_c::OTHER);
spawnLightObject();
spawnWeatherTag();
}
}
extern "C" u16 getActorIdForObjName2(const char *objname);
static void handleBzsObjn(int roomid, const BzsSectionHead *section) {
const OBJN *objn = OFS_TO_PTR(OBJN, section);
const char *buf = reinterpret_cast<const char *>(objn);
for (s32 i = 0; i < section->mCount; i++) {
dStageMgr_c::GetInstance()->addObjId(getActorIdForObjName2(buf + objn->offset));
objn++;
}
}
static void handleBzsArcn(int roomid, const BzsSectionHead *section) {
const ARCN *arcn = OFS_TO_PTR(ARCN, section);
const char *buf = reinterpret_cast<const char *>(arcn);
for (s32 i = 0; i < section->mCount; i++) {
dStageMgr_c::GetInstance()->addStageArcn(buf + arcn->offset);
arcn++;
}
}
static void handleBzsLayerObjn(int roomid, const BzsSectionHead *section) {
const OBJN *objn = OFS_TO_PTR(OBJN, section);
const char *buf = reinterpret_cast<const char *>(objn);
for (s32 i = 0; i < section->mCount; i++) {
u16 id = getActorIdForObjName2(buf + objn->offset);
dStageMgr_c::GetInstance()->addActorId(id);
objn++;
}
}
static void handleBzsLayerArcn(int roomid, const BzsSectionHead *section) {
const ARCN *arcn = OFS_TO_PTR(ARCN, section);
const char *buf = reinterpret_cast<const char *>(arcn);
for (s32 i = 0; i < section->mCount; i++) {
dStageMgr_c::GetInstance()->addLayerArcn(buf + arcn->offset);
arcn++;
}
}
static u16 getEnemyDefeatFlagFromId(s32 roomid, u16 id) {
u16 val = id & 0x3FF;
if (val >= 0x400) {
// Interesting condition
return -1;
}
if (roomid == -1) {
return val + (0x3F << 10);
}
return val + (roomid << 10);
}
static s8 getViewClipIndexFromId(u16 id) {
s8 val = (id >> 10) & 0x3F;
if (val == 0x3F) {
return -1;
}
return val;
}
static void handleBzsObj(int roomid, const BzsSectionHead *section) {
dStage_c *stage = dStage_c::GetInstance();
const OBJ *obj = OFS_TO_PTR(OBJ, section);
for (s32 i = 0; i < section->mCount; i++) {
u16 flag = getEnemyDefeatFlagFromId(roomid, obj->id);
s8 viewClipIdx = getViewClipIndexFromId(obj->id);
if (stage->checkEnemyDefeatFlag(flag)) {
dAcObjBase_c::create(
obj->name, roomid, obj->params1, &obj->position, &obj->angle, nullptr, obj->params2, flag, viewClipIdx
);
}
obj++;
}
}
static void handleBzsSobj(int roomid, const BzsSectionHead *section) {
dStage_c *stage = dStage_c::GetInstance();
const SOBJ *obj = OFS_TO_PTR(SOBJ, section);
for (s32 i = 0; i < section->mCount; i++) {
u16 flag = getEnemyDefeatFlagFromId(roomid, obj->id);
s8 viewClipIdx = getViewClipIndexFromId(obj->id);
if (stage->checkEnemyDefeatFlag(flag)) {
dAcObjBase_c::create(
obj->name, roomid, obj->params1, &obj->position, &obj->angle, (mVec3_c *)&obj->scale, obj->params2,
flag, viewClipIdx
);
}
obj++;
}
}
static void handleBzsStas(int roomid, const BzsSectionHead *section) {
dStage_c *stage = dStage_c::GetInstance();
const SOBJ *obj = OFS_TO_PTR(SOBJ, section);
for (s32 i = 0; i < section->mCount; i++) {
u16 flag = getEnemyDefeatFlagFromId(roomid, obj->id);
s8 viewClipIdx = getViewClipIndexFromId(obj->id);
if (stage->checkEnemyDefeatFlag(flag)) {
dAcObjBase_c::createActorUnkGroup3(
obj->name, roomid, obj->params1, &obj->position, &obj->angle, &obj->scale, obj->params2, flag,
viewClipIdx
);
}
obj++;
}
}
static void parseLayerBzs(int roomid, u32 layer, const LAY *head, const BzsTagToParseFunc *handlerTable, s32 tableSize) {
const LAY *lay = head + layer;
const BzsSectionHead *newHead = OFS_TO_PTR(BzsSectionHead, lay);
for (s32 i = 0; i < lay->mCount; i++) {
findAndRunStageTagParseFunc(roomid, newHead++, handlerTable, tableSize);
}
}
static const BzsTagToParseFunc layerHandlers[] = {
{'OBJN', handleBzsLayerObjn},
{'ARCN', handleBzsLayerArcn},
};
static void handleBzsLay(int roomid, const BzsSectionHead *section) {
const LAY *lay = OFS_TO_PTR(LAY, section);
parseLayerBzs(roomid, 0, lay, layerHandlers, ARRAY_LENGTH(layerHandlers));
if (dScGame_c::currentSpawnInfo.layer != 0) {
parseLayerBzs(roomid, dScGame_c::currentSpawnInfo.layer, lay, layerHandlers, ARRAY_LENGTH(layerHandlers));
}
}
static const BzsTagToParseFunc layerHandlers2[] = {
{'OBJ ', handleBzsObj},
{'SOBJ', handleBzsSobj},
{'STAG', handleBzsStas},
};
static void handleBzsLay2(int roomid, const BzsSectionHead *section) {
const LAY *lay = OFS_TO_PTR(LAY, section);
parseLayerBzs(roomid, 0, lay, layerHandlers2, ARRAY_LENGTH(layerHandlers2));
if (dScGame_c::currentSpawnInfo.layer != 0) {
parseLayerBzs(roomid, dScGame_c::currentSpawnInfo.layer, lay, layerHandlers2, ARRAY_LENGTH(layerHandlers2));
}
}
static const BzsTagToParseFunc layerHandlers3[] = {
{'OBJS', handleBzsObj},
{'SOBS', handleBzsSobj},
{'STAS', handleBzsStas},
{'SNDT', handleBzsStas},
{'TBOX', handleBzsObj},
{'DOOR', handleBzsObj},
};
static void handleBzsLay3(int roomid, const BzsSectionHead *section) {
const LAY *lay = OFS_TO_PTR(LAY, section);
parseLayerBzs(roomid, 0, lay, layerHandlers3, ARRAY_LENGTH(layerHandlers3));
if (dScGame_c::currentSpawnInfo.layer != 0) {
parseLayerBzs(roomid, dScGame_c::currentSpawnInfo.layer, lay, layerHandlers3, ARRAY_LENGTH(layerHandlers3));
}
}
static const BzsTagToParseFunc defaultHandlers[] = {
{'PCAM', handleBzsPcam},
{'LYSE', handleBzsLyse},
{'STIF', handleBzsStif},
{'RMPL', handleBzsRmpl},
{'SCEN', handleBzsScen},
{'CAM ', handleBzsCam},
{'EVNT', handleBzsEvnt},
{'PATH', handleBzsPath},
{'PNT ', handleBzsPnt},
{'BPNT', handleBzsBpnt},
{'SPTH', handleBzsSpth},
{'SPNT', handleBzsSpnt},
{'SBPT', handleBzsSbpt},
{'AREA', handleBzsArea},
};
static void findAndRunStageTagParseFunc(
int roomid, const BzsSectionHead *head, const BzsTagToParseFunc *handlerTable, s32 tableSize
) {
if (handlerTable == nullptr) {
tableSize = ARRAY_LENGTH(defaultHandlers);
handlerTable = defaultHandlers;
}
while (tableSize > 0) {
if (head->mTag == handlerTable->mTag) {
handlerTable->mParseFunc(roomid, head);
return;
}
handlerTable++;
tableSize--;
}
}
static const BzsTagToParseFunc roomStageHandlers[] = {
{'OBJN', handleBzsObjn},
{'ARCN', handleBzsArcn},
};
void parseRoomStageBzs(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
findAndRunStageTagParseFunc(roomid, head++, roomStageHandlers, ARRAY_LENGTH(roomStageHandlers));
}
}
static const BzsTagToParseFunc stageRoomHandlers[] = {
{'LYLT', handleBzsLylt},
{'LAY ', handleBzsLay},
};
void parseBzsStageRoom(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
findAndRunStageTagParseFunc(roomid, head++, stageRoomHandlers, ARRAY_LENGTH(stageRoomHandlers));
}
}
void parseStageBzs(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
// Run "default handlers"
findAndRunStageTagParseFunc(roomid, head++, nullptr, 0);
}
}
static const BzsTagToParseFunc roomHandlers[] = {
{'FILE', handleBzsFile},
{'SCEN', handleBzsScen},
{'CAM ', handleBzsCam},
{'EVNT', handleBzsEvnt},
{'PATH', handleBzsPath},
{'PNT ', handleBzsPnt},
{'BPNT', handleBzsBpnt},
{'SPTH', handleBzsSpth},
{'SPNT', handleBzsSpnt},
{'SBPT', handleBzsSbpt},
{'AREA', handleBzsArea},
{'PLY ', handleBzsPly},
};
void parseRoomBzs(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
findAndRunStageTagParseFunc(roomid, head++, roomHandlers, ARRAY_LENGTH(roomHandlers));
}
}
static const BzsTagToParseFunc roomReactivateHandlers[] = {
{'SOBJ', handleBzsSobj},
{'STAG', handleBzsStas},
{'LAY ', handleBzsLay2},
};
void parseRoomReactivateBzs(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
findAndRunStageTagParseFunc(roomid, head++, roomReactivateHandlers, ARRAY_LENGTH(roomReactivateHandlers));
}
}
static const BzsTagToParseFunc roomActivateHandlers[] = {
{'LAY ', handleBzsLay3},
};
void parseRoomActivateBzs(int roomid, const void *bzs) {
const BzsHeader *header = static_cast<const BzsHeader *>(bzs);
const BzsSectionHead *head = OFS_TO_PTR(BzsSectionHead, header);
for (s32 i = 0; i < header->mSectionCount; i++) {
findAndRunStageTagParseFunc(roomid, head++, roomActivateHandlers, ARRAY_LENGTH(roomActivateHandlers));
}
}
+1 -1
View File
@@ -146,7 +146,7 @@ bool SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
u16 *pData = FileManager::sInstance->getSceneFlagsConst();
return mFlagHelper.checkFlag(getSceneflagSlotGlobal(sceneIdx, flag), flag % 16, pData, 0x800);
}
bool SceneflagManager::checkTempOrSceneflag(u16 flag) {
u16 SceneflagManager::checkTempOrSceneflag(u16 flag) {
if (flag >= 0x80) {
u16 tempflag = flag - 0x80;
const u16 *pData = FileManager::sInstance->getTempFlagsConst();
+1 -1
View File
@@ -2,11 +2,11 @@
#include "common.h"
#include "d/d_sc_game.h"
#include "d/d_sc_title.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d_lyt_area_caption.h"
#include "d/lyt/d_lyt_meter_configuration.h"
#include "d/lyt/d_window.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/stage_manager.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
// clang-format on
+1 -1
View File
@@ -219,7 +219,7 @@ int bmdl_c::setMatTexture(char *name, GXTexObj *texObj, bool copy, void *unk, in
// TODO
}
bool bmdl_c::getBounds(mVec3_c *min, mVec3_c *max) {
bool bmdl_c::getBounds(mVec3_c *min, mVec3_c *max) const {
// TODO
}
@@ -95,7 +95,7 @@ void *CurrentStageArcManager::getDataFromRoomArc(int roomId, const char *fileNam
return mArcTable.getSubEntryData(getRoomArcDirectory(roomId), fileName);
}
EGG::ExpHeap *getHeap() {
EGG::ExpHeap *CurrentStageArcManager::getHeap(s32 roomid) {
return dHeap::workExHeap.heap;
}
+2 -2
View File
@@ -235,12 +235,12 @@ u16 *FileManager::getStoryFlagsMut() {
/* 8000CAD0 */ bool FileManager::isNew_FileA() {}
/* 8000CB00 */ void FileManager::setSceneFlagIndex(u16 idx) {}
/* 8000CB00 */ void FileManager::setSceneFlagIndex(s16 idx) {}
/* 8000CB30 */ u32 FileManager::getSceneFlagIndex() {}
/* 8000CB80 */ s32 FileManager::getFileAreaIndex() {}
/* 8000CBD0 */ void FileManager::fn_8000CBD0(u8) {}
/* 8000CC00 */ void FileManager::fn_8000CC00() {}
/* 8000CC00 */ u8 FileManager::fn_8000CC00() {}
/* 8000CC50 */ void FileManager::setFileTimes() {}
/* 8000CCB0 */ void FileManager::setPlayTime(s64 time) {}
-3
View File
@@ -1,3 +0,0 @@
#include "toBeSorted/room_manager.h"
RoomManager* RoomManager::m_Instance;