mirror of
https://github.com/zeldaret/ss
synced 2026-06-22 08:35:39 -04:00
d_stage progress
This commit is contained in:
@@ -154,7 +154,7 @@ d/d_scene.cpp:
|
||||
.sbss start:0x80575220 end:0x80575228
|
||||
.bss start:0x805A06F0 end:0x805A0720
|
||||
|
||||
d/d_stage.cpp:
|
||||
d/d_stage_parse.cpp:
|
||||
.text start:0x80062E40 end:0x80064250
|
||||
|
||||
d/d_sys.cpp:
|
||||
@@ -648,9 +648,12 @@ 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
|
||||
|
||||
+46
-46
@@ -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
|
||||
setRoom__11RoomManagerFiP7dRoom_c = .text:0x801B3960; // type:function size:0x10
|
||||
GetRoomByIndex__11RoomManagerFi = .text:0x801B3970; // type:function size:0x10
|
||||
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
|
||||
RoomManager__handleRoomChangeMaybe = .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
|
||||
hasVisitedRoomId__11RoomManagerCFl = .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
|
||||
getMA0IndirectSrt__11RoomManagerFPQ34nw4r3g3d12ResAnmTexSrtRCQ34nw4r3g3d6ResMdl = .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
|
||||
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,13 +11014,13 @@ 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
|
||||
AcStageSelect__ctor = .text:0x801B5BD0; // type:function size:0x4C
|
||||
AcStageSelect__dtor = .text:0x801B5C20; // type:function size:0x5C
|
||||
dRoom_c_classInit__Fv = .text:0x801B5C80; // type:function size:0x17C
|
||||
@@ -34180,18 +34180,18 @@ 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:0xC
|
||||
@@ -40234,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
|
||||
|
||||
+2
-1
@@ -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(NonMatching, "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,7 @@ 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.cpp"),
|
||||
Object(NonMatching, "d/d_room.cpp"),
|
||||
Object(NonMatching, "d/d_cs_base.cpp"),
|
||||
Object(NonMatching, "d/d_cs_game.cpp"),
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
#ifndef D_STAGE_TYPES_H
|
||||
#define D_STAGE_TYPES_H
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
|
||||
// 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 0x04
|
||||
struct LYLT {
|
||||
/* 0x0 */ u8 layer;
|
||||
/* 0x1 */ u8 demoHigh;
|
||||
/* 0x2 */ u8 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 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 {
|
||||
/* 0x00 */ u16 storyFlag;
|
||||
/* 0x02 */ u8 playCutscene;
|
||||
/* 0x03 */ u8 _0x03[1];
|
||||
/* 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 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
|
||||
@@ -59,6 +59,10 @@ public:
|
||||
mFadeInFrame = frame;
|
||||
}
|
||||
|
||||
void setFadeOutFrame(u16 frame) {
|
||||
mFadeOutFrame = frame;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x08 */ mColorFader_c *mpColorFader;
|
||||
/* 0x0C */ dLytFader_c *mpLytFader;
|
||||
|
||||
+17
-16
@@ -5,6 +5,7 @@
|
||||
#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"
|
||||
@@ -115,13 +116,13 @@ public:
|
||||
dRoom_c()
|
||||
: mStateMgr(*this, sStateID::null),
|
||||
field_0x15C(nullptr),
|
||||
SCEN(nullptr),
|
||||
PLY(nullptr),
|
||||
CAM(nullptr),
|
||||
EVNT(nullptr),
|
||||
PATH(nullptr),
|
||||
PNT(nullptr),
|
||||
BPNT(nullptr),
|
||||
scen(nullptr),
|
||||
ply(nullptr),
|
||||
cam(nullptr),
|
||||
evnt(nullptr),
|
||||
path(nullptr),
|
||||
pnt(nullptr),
|
||||
bpnt(nullptr),
|
||||
AREA(nullptr),
|
||||
unkCount(0),
|
||||
scenCount(0),
|
||||
@@ -175,17 +176,17 @@ private:
|
||||
/* 0x4E0 */ STATE_MGR_DECLARE(dRoom_c);
|
||||
|
||||
/* 0x51C */ void *field_0x15C;
|
||||
/* 0x520 */ void *SCEN;
|
||||
/* 0x524 */ void *PLY;
|
||||
/* 0x528 */ void *CAM;
|
||||
/* 0x52C */ void *EVNT;
|
||||
/* 0x530 */ void *PATH;
|
||||
/* 0x534 */ void *PNT;
|
||||
/* 0x538 */ void *BPNT;
|
||||
/* 0x53C */ void *SPTH;
|
||||
/* 0x520 */ SCEN *scen;
|
||||
/* 0x524 */ PLY *ply;
|
||||
/* 0x528 */ CAM *cam;
|
||||
/* 0x52C */ EVNT *evnt;
|
||||
/* 0x530 */ PATH *path;
|
||||
/* 0x534 */ PNT *pnt;
|
||||
/* 0x538 */ BPNT *bpnt;
|
||||
/* 0x53C */ PATH *spth;
|
||||
/* 0x540 */ void *field_0x540;
|
||||
/* 0x544 */ void *field_0x544;
|
||||
/* 0x548 */ void *AREA;
|
||||
/* 0x548 */ AREA *AREA;
|
||||
/* 0x54C */ u16 unkCount;
|
||||
/* 0x54E */ u16 scenCount;
|
||||
/* 0x550 */ u16 plyCount;
|
||||
|
||||
@@ -152,6 +152,10 @@ public:
|
||||
void clearSpawnInfo();
|
||||
const SpawnInfoExt &getSpawnInfo() const;
|
||||
|
||||
static void resetUpdateFrameCount() {
|
||||
sUpdateFrameCount = 0;
|
||||
}
|
||||
|
||||
protected:
|
||||
static u32 sUpdateFrameCount;
|
||||
static u8 sCurrentLayer;
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
#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 "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 EggScreenEffectBlur {
|
||||
public:
|
||||
EggScreenEffectBlur();
|
||||
~EggScreenEffectBlur();
|
||||
|
||||
private:
|
||||
u8 _0x00[0x38 - 0x00];
|
||||
};
|
||||
|
||||
class EggPostEffectBlur {
|
||||
public:
|
||||
EggPostEffectBlur();
|
||||
~EggPostEffectBlur() {}
|
||||
|
||||
void setField0x30(f32 val) {
|
||||
field_0x30 = val;
|
||||
}
|
||||
|
||||
private:
|
||||
u8 _0x00[0x30 - 0x00];
|
||||
f32 field_0x30;
|
||||
u8 _0x03[0x78 - 0x34];
|
||||
};
|
||||
|
||||
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 */ EggScreenEffectBlur mScreenEffect;
|
||||
/* 0x168 */ EggPostEffectBlur 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 ¢er, 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);
|
||||
|
||||
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
|
||||
@@ -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);
|
||||
|
||||
+6
-2
@@ -8,14 +8,18 @@ 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;
|
||||
}
|
||||
|
||||
mFaderBase_c::EStatus getStatus() const {
|
||||
return mpFader->getStatus();
|
||||
}
|
||||
|
||||
void setStatus(mFaderBase_c::EStatus status) {
|
||||
mpFader->setStatus(status);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "sized_string.h"
|
||||
#include "toBeSorted/event.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
class dAcBase_c;
|
||||
|
||||
class EventManager {
|
||||
|
||||
@@ -10,4 +10,7 @@ extern "C" void fn_8035E310(void *);
|
||||
extern "C" void *ENEMY_SOUND_MGR;
|
||||
extern "C" void fn_80362150(void *, u16);
|
||||
|
||||
extern "C" void *ENEMY_BGM_RELATED_MGR;
|
||||
extern "C" void fn_80384570(void *, bool);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
#ifndef ROOM_MANAGER_H
|
||||
#define ROOM_MANAGER_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_base.h"
|
||||
#include "d/d_room.h"
|
||||
#include "m/m_allocator.h"
|
||||
#include "m/types_m.h"
|
||||
#include "nw4r/g3d/res/g3d_resmdl.h"
|
||||
|
||||
#define MAX_ROOM_NUMBER 64
|
||||
|
||||
class dRoomTable {
|
||||
/* 801b4670 */ dRoomTable(dRoomTable *roomTable);
|
||||
virtual ~dRoomTable();
|
||||
dRoom_c *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_c *GetRoomByIndex(int roomid);
|
||||
/* 801b42b0 */ static dRoom_c *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 *, const nw4r::g3d::ResMdl &mdl);
|
||||
/* 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 */);
|
||||
/* 801b6c60 */ bool hasVisitedRoomId(s32 roomid) const;
|
||||
|
||||
void setRoom(int roomid, dRoom_c *room);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -69,6 +69,10 @@ public:
|
||||
return field_0x78;
|
||||
}
|
||||
|
||||
void setField0x78(bool val) {
|
||||
field_0x78 = val;
|
||||
}
|
||||
|
||||
void setField0x7A(bool val) {
|
||||
field_0x7A = val;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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,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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
#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);
|
||||
|
||||
@@ -50,9 +50,8 @@ int dTgGenkiDwsTgt_c::actorExecute() {
|
||||
if (flag) {
|
||||
deleteRequest();
|
||||
} else {
|
||||
RoomManager *mgr = RoomManager::m_Instance;
|
||||
if (mgr != nullptr) {
|
||||
dRoom_c *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
|
||||
if (dStage_c::GetInstance() != nullptr) {
|
||||
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
|
||||
if (room != nullptr) {
|
||||
if (room->checkFlag(8)) {
|
||||
mDowsingTarget.doRegister();
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
#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
|
||||
@@ -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,14 +427,14 @@ 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_c *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
|
||||
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
|
||||
return (room->checkFlag(0x4 | 0x2));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#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"
|
||||
@@ -32,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);
|
||||
|
||||
@@ -1192,7 +1192,7 @@ int dAcTbox_c::actorExecute() {
|
||||
(this->*mRegisterDowsingTarget)();
|
||||
}
|
||||
|
||||
dRoom_c *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
|
||||
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
|
||||
bool hasFlags = r->checkFlag(0x1E);
|
||||
if (hasFlags) {
|
||||
setObjectProperty(0x200);
|
||||
@@ -1328,7 +1328,7 @@ int dAcTbox_c::actorExecuteInEvent() {
|
||||
(this->*mRegisterDowsingTarget)();
|
||||
}
|
||||
|
||||
dRoom_c *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
|
||||
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
|
||||
bool hasFlags = r->checkFlag(0x1E);
|
||||
if (hasFlags) {
|
||||
setObjectProperty(0x200);
|
||||
|
||||
+7
-7
@@ -8,6 +8,7 @@
|
||||
#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/flag/sceneflag_manager.h"
|
||||
#include "d/flag/storyflag_manager.h"
|
||||
#include "d/t/d_t_mass_obj.h"
|
||||
@@ -35,7 +36,6 @@
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "sized_string.h"
|
||||
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
|
||||
#include "toBeSorted/room_manager.h"
|
||||
#include "toBeSorted/stage_manager.h"
|
||||
#include "toBeSorted/time_area_mgr.h"
|
||||
#include "toBeSorted/unk_with_water.h"
|
||||
@@ -66,8 +66,8 @@ int dRoom_c::create() {
|
||||
bool anyError = false;
|
||||
|
||||
mRoomRes = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "g3d/room.brres"));
|
||||
RoomManager::bindStageResToFile(&mRoomRes);
|
||||
RoomManager::bindSkyCmnToResFile(&mRoomRes);
|
||||
dStage_c::bindStageResToFile(&mRoomRes);
|
||||
dStage_c::bindSkyCmnToResFile(&mRoomRes);
|
||||
|
||||
for (s32 i = 0; i < 8; i++) {
|
||||
model_c *mdl = &mModels[i];
|
||||
@@ -99,7 +99,7 @@ int dRoom_c::create() {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
RoomManager::m_Instance->setRoom(roomid, this);
|
||||
dStage_c::GetInstance()->setRoom(roomid, this);
|
||||
BZS = CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "dat/room.bzs");
|
||||
parseRoomBzs(roomid, BZS);
|
||||
mDidAlreadyInit = (params >> 6) & 1;
|
||||
@@ -123,7 +123,7 @@ int dRoom_c::doDelete() {
|
||||
stageMr->destroyUnkWithWater(val, &mWaterThing);
|
||||
}
|
||||
|
||||
RoomManager::m_Instance->setRoom(roomid, nullptr);
|
||||
dStage_c::GetInstance()->setRoom(roomid, nullptr);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
@@ -265,7 +265,7 @@ void dRoom_c::drawOnMapIfVisible(mMtx_c *mtx, int param) {
|
||||
// Visited rooms are shown filled out
|
||||
bool drawFully = true;
|
||||
if (dStageMgr_c::GetInstance()->isAreaTypeDungeonOrBoss()) {
|
||||
drawFully = RoomManager::m_Instance->hasVisitedRoomId(roomid);
|
||||
drawFully = dStage_c::GetInstance()->hasVisitedRoom(roomid);
|
||||
if (!drawFully && !dAcItem_c::checkFlag(/* DUNGEON_MAP_FI */ 0x32)) {
|
||||
return;
|
||||
}
|
||||
@@ -505,7 +505,7 @@ bool dRoom_c::model_c::create(nw4r::g3d::ResFile resFile, mAllocator_c &alloc, s
|
||||
|
||||
nw4r::g3d::ResAnmTexSrt anmSrt = resFile.GetResAnmTexSrt(mdlName);
|
||||
if (!anmSrt.IsValid()) {
|
||||
RoomManager::getMA0IndirectSrt(&anmSrt, mdl);
|
||||
dStage_c::getMA0IndirectSrt(&anmSrt, mdl);
|
||||
}
|
||||
if (anmSrt.IsValid()) {
|
||||
mpAnmSrt = new m3d::anmTexSrt_c();
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#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"
|
||||
|
||||
|
||||
@@ -0,0 +1,392 @@
|
||||
#include "d/d_stage.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/d_base.h"
|
||||
#include "d/d_room.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/d_sc_title.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);
|
||||
|
||||
int dStage_c::create() {
|
||||
if (mPhase.step() != sFPhaseBase::PHASE_ALL_DONE) {
|
||||
return NOT_READY;
|
||||
}
|
||||
|
||||
// dStageMgr_c *stageMgr = dStageMgr_c::GetInstance();
|
||||
// for (int i = 0; i < dSta)
|
||||
|
||||
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();
|
||||
}
|
||||
@@ -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,3 +0,0 @@
|
||||
#include "toBeSorted/room_manager.h"
|
||||
|
||||
RoomManager* RoomManager::m_Instance;
|
||||
Reference in New Issue
Block a user