d_stage progress

This commit is contained in:
robojumper
2025-03-08 18:54:53 +01:00
parent 03c99fc37c
commit c558c88f25
37 changed files with 885 additions and 200 deletions
+5 -2
View File
@@ -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
View File
@@ -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
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(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"),
+163
View File
@@ -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
+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 -16
View File
@@ -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;
+4
View File
@@ -152,6 +152,10 @@ public:
void clearSpawnInfo();
const SpawnInfoExt &getSpawnInfo() const;
static void resetUpdateFrameCount() {
sUpdateFrameCount = 0;
}
protected:
static u32 sUpdateFrameCount;
static u8 sCurrentLayer;
+174
View File
@@ -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 &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);
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
+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);
+6 -2
View File
@@ -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);
}
+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);
}
+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
View File
@@ -6,6 +6,8 @@
#include "sized_string.h"
#include "toBeSorted/event.h"
#include <cstring>
class dAcBase_c;
class EventManager {
+3
View File
@@ -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
-61
View File
@@ -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
+4
View File
@@ -69,6 +69,10 @@ public:
return field_0x78;
}
void setField0x78(bool val) {
field_0x78 = val;
}
void setField0x7A(bool val) {
field_0x7A = val;
}
+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");
+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));
+3 -4
View File
@@ -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();
+9 -9
View File
@@ -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);
}
+3 -3
View File
@@ -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
View File
@@ -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();
-1
View File
@@ -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"
+392
View File
@@ -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();
}
+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();
-3
View File
@@ -1,3 +0,0 @@
#include "toBeSorted/room_manager.h"
RoomManager* RoomManager::m_Instance;