d_stage_parse ok

This commit is contained in:
robojumper
2025-03-09 16:39:21 +01:00
parent 32b7ce138d
commit 7225fbe4ff
16 changed files with 852 additions and 153 deletions
+4 -4
View File
@@ -160,11 +160,11 @@ public:
public:
/* 8002e630 */ static dAcObjBase_c *create(
fProfile::PROFILE_NAME_e actorId, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale,
fProfile::PROFILE_NAME_e actorId, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale,
u32 params2
);
/* 8002e6d0 */ static dAcObjBase_c *create(
char *name, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id,
const char *name, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale, u32 params2, u16 id,
s8 viewclipId
);
/* 8002e770 */ static dAcObjBase_c *
@@ -208,8 +208,8 @@ public:
u32 params2
);
/* 8002f260 */ static dAcBase_c *createActorUnkGroup3(
char *name, u32 roomId, u32 params1, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, u32 params2, u16 id,
u8 viewclipId
const char *name, u32 roomId, u32 params1, const mVec3_c *pos, const mAng3_c *rot, const mVec3_c *scale,
u32 params2, u16 id, s8 viewclipId
);
};
+38 -5
View File
@@ -5,6 +5,12 @@
#include "m/m_angle.h"
#include "m/m_vec.h"
// https://github.com/lepelog/skywardsword-tools/blob/master/bzs.py
// Size 0x2
struct ARCN {
/* 0x00 */ u16 offset;
};
// Size 0x20
struct AREA {
@@ -53,11 +59,21 @@ struct EVNT {
/* 0x18 */ char name[32];
};
// Size 0x???
struct bzsFILE {
// ???
};
struct LAY {
/* 0x00 */ u16 mCount;
/* 0x04 */ u32 mOffset;
};
// Size 0x04
struct LYLT {
/* 0x0 */ u8 layer;
/* 0x1 */ u8 demoHigh;
/* 0x2 */ u8 demoLow;
/* 0x1 */ s8 demoHigh;
/* 0x2 */ s8 demoLow;
/* 0x3 */ u8 dummy;
};
@@ -78,6 +94,11 @@ struct OBJ {
/* 0x1C */ char name[8];
};
// Size 0x2
struct OBJN {
/* 0x00 */ u16 offset;
};
// Size 0xC
struct PATH {
/* 0x00 */ u8 field_0x00;
@@ -101,9 +122,12 @@ struct PCAM {
// Size 0x18
struct PLY {
/* 0x00 */ u16 storyFlag;
/* 0x02 */ u8 playCutscene;
/* 0x03 */ u8 _0x03[1];
// The Ghidra struct seems to overambitiously encode
// the params themselves, this is just an u32 link actor params
// /* 0x00 */ u16 storyFlag;
// /* 0x02 */ u8 playCutscene;
// /* 0x03 */ u8 _0x03[1];
/* 0x00 */ u32 linkParams;
/* 0x04 */ mVec3_c position;
/* 0x10 */ mAng3_c angle;
/* 0x16 */ u16 entranceId;
@@ -146,6 +170,15 @@ struct SOBJ {
/* 0x28 */ char name[8];
};
// Size 0x???
struct SBPT {
// ???
};
// Parsed the same way in ss-tools
typedef PNT SPNT;
typedef PATH SPTH;
// Size 0x14
struct STIF {
/* 0x00 */ f32 field_0x00;
+103 -42
View File
@@ -115,24 +115,24 @@ class dRoom_c : public dBase_c {
public:
dRoom_c()
: mStateMgr(*this, sStateID::null),
field_0x15C(nullptr),
scen(nullptr),
ply(nullptr),
cam(nullptr),
evnt(nullptr),
path(nullptr),
pnt(nullptr),
bpnt(nullptr),
AREA(nullptr),
unkCount(0),
scenCount(0),
plyCount(0),
camCount(0),
evntCount(0),
pathCount(0),
pntCount(0),
bpntCount(0),
areaCount(0),
mpFile(nullptr),
mpScen(nullptr),
mpPly(nullptr),
mpCam(nullptr),
mpEvnt(nullptr),
mpPath(nullptr),
mpPnt(nullptr),
mpBpnt(nullptr),
mpArea(nullptr),
mFileCount(0),
mScenCount(0),
mPlyCount(0),
mCamCount(0),
mEvntCount(0),
mPathCount(0),
mPntCount(0),
mBpntCount(0),
mAreaCount(0),
mFlags(0) {}
virtual ~dRoom_c() {}
@@ -150,6 +150,7 @@ public:
void drawOnMapIfVisible(mMtx_c *mtx, int param);
void getBounds(mVec3_c *min, mVec3_c *max) const;
const PLY *getEntranceById(u8 id) const;
void someLastBossThing(bool arg);
f32 getFrame() const;
@@ -157,6 +158,66 @@ public:
typedef void (*foreachObjCallback)(dAcBase_c *obj);
s32 foreachObject(foreachObjCallback cb);
void setFile(const bzsFILE *file, u16 count) {
mFileCount = count;
mpFile = file;
}
void setScen(const SCEN *scen, u16 count) {
mScenCount = count;
mpScen = scen;
}
void setCam(const CAM *file, u16 count) {
mCamCount = count;
mpCam = file;
}
void setEvnt(const EVNT *evnt, u16 count) {
mEvntCount = count;
mpEvnt = evnt;
}
void setPath(const PATH *path, u16 count) {
mPathCount = count;
mpPath = path;
}
void setPnt(const PNT *pnt, u16 count) {
mPntCount = count;
mpPnt = pnt;
}
void setBpnt(const BPNT *bpnt, u16 count) {
mBpntCount = count;
mpBpnt = bpnt;
}
void setSpth(const SPTH *spth, u16 count) {
mSpthCount = count;
mpSpth = spth;
}
void setSpnt(const SPNT *spnt, u16 count) {
mSpntCount = count;
mpSpnt = spnt;
}
void setSbpt(const SBPT *sbpt, u16 count) {
mSbptCount = count;
mpSbpt = sbpt;
}
void setArea(const AREA *path, u16 count) {
mAreaCount = count;
mpArea = path;
}
void setPly(const PLY *ply, u16 count) {
mPlyCount = count;
mpPly = ply;
}
private:
bool setupBg();
void executeBg();
@@ -175,30 +236,30 @@ private:
/* 0x220 */ dBgWKCol mBg[2];
/* 0x4E0 */ STATE_MGR_DECLARE(dRoom_c);
/* 0x51C */ void *field_0x15C;
/* 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 */ AREA *AREA;
/* 0x54C */ u16 unkCount;
/* 0x54E */ u16 scenCount;
/* 0x550 */ u16 plyCount;
/* 0x552 */ u16 camCount;
/* 0x554 */ u16 evntCount;
/* 0x556 */ u16 pathCount;
/* 0x558 */ u16 pntCount;
/* 0x55A */ u16 bpntCount;
/* 0x55C */ u16 spthCount;
/* 0x55E */ u16 unk2Count;
/* 0x560 */ u16 unk3Count;
/* 0x562 */ u16 areaCount;
/* 0x51C */ const bzsFILE *mpFile;
/* 0x520 */ const SCEN *mpScen;
/* 0x524 */ const PLY *mpPly;
/* 0x528 */ const CAM *mpCam;
/* 0x52C */ const EVNT *mpEvnt;
/* 0x530 */ const PATH *mpPath;
/* 0x534 */ const PNT *mpPnt;
/* 0x538 */ const BPNT *mpBpnt;
/* 0x53C */ const SPTH *mpSpth;
/* 0x540 */ const SPNT *mpSpnt;
/* 0x544 */ const SBPT *mpSbpt;
/* 0x548 */ const AREA *mpArea;
/* 0x54C */ u16 mFileCount;
/* 0x54E */ u16 mScenCount;
/* 0x550 */ u16 mPlyCount;
/* 0x552 */ u16 mCamCount;
/* 0x554 */ u16 mEvntCount;
/* 0x556 */ u16 mPathCount;
/* 0x558 */ u16 mPntCount;
/* 0x55A */ u16 mBpntCount;
/* 0x55C */ u16 mSpthCount;
/* 0x55E */ u16 mSpntCount;
/* 0x560 */ u16 mSbptCount;
/* 0x562 */ u16 mAreaCount;
// peak vtable placement
class UnkRoomClass {
+27 -3
View File
@@ -59,7 +59,7 @@ struct SpawnInfo {
/* 0x20 */ u16 transitionFadeFrames;
/* 0x22 */ u8 room;
/* 0x23 */ u8 layer;
/* 0x24 */ s8 entrance;
/* 0x24 */ u8 entrance;
/* 0x25 */ u8 night;
/* 0x26 */ u8 trial;
/* 0x27 */ u8 transitionType;
@@ -104,13 +104,13 @@ struct SpawnInfoExt : public SpawnInfo {
struct LinkReloadInfo {
LinkReloadInfo() : mType0CsFlag(0) {}
void set(u8 roomid, const mVec3_c &pos, mAng rot, u32 flags);
void set(u8 roomid, const mVec3_c &pos, mAng rot, u32 linkParams);
/* 0x00 */ mVec3_c mPosition;
/* 0x0C */ mAng mRotY;
/* 0x0E */ u8 mRoomId;
/* 0x0F */ u8 mType0CsFlag;
/* 0x10 */ u32 mUnkFlags;
/* 0x10 */ u32 mLinkParams;
};
class dScGame_c : public dScene_c {
@@ -166,6 +166,30 @@ public:
mSavePromptFlag = val;
}
u8 getType0CsFlag() const {
return mReloadInfo.mType0CsFlag;
}
void setType0CsFlag(u8 flag) {
mReloadInfo.mType0CsFlag = flag;
}
u8 getType0PosFlag() const {
return mType0PosFlag;
}
void setType0PosFlag(u8 flag) {
mType0PosFlag = flag;
}
static u8 getReloaderType() {
return sReloaderType;
}
static void setReloaderType(u8 type) {
sReloaderType = type;
}
protected:
static u32 sUpdateFrameCount;
static u8 sCurrentLayer;
+3
View File
@@ -122,6 +122,9 @@ public:
void drawMap(mMtx_c *mtx, int);
dRoom_c *getRoom(s32 idx);
void setRoom(int roomid, dRoom_c *room);
void handleRoomChange(int roomid);
bool checkEnemyDefeatFlag(u16 flag);
bool fadeIn(s32 fadeType, u16 frames);
bool fadeOut(s32 fadeType, u16 frames);
+54 -5
View File
@@ -65,10 +65,58 @@ public:
void initUnkWithWater(u32 val, UnkWithWater *waterThing);
void destroyUnkWithWater(u32 val, UnkWithWater *waterThing);
const RMPL *getRmpl() const {
return mpRmpl;
}
u16 getRmplCount() const {
return mRmplCount;
}
void setRmpl(const RMPL *pcam, u16 count) {
mRmplCount = count;
mpRmpl = pcam;
}
const PCAM *getPcam() const {
return mpPcam;
}
u16 getPcamCount() const {
return mPcamCount;
}
void setPcam(const PCAM *pcam, u16 count) {
mPcamCount = count;
mpPcam = pcam;
}
void setLyse(const LYSE *lyse, u16 count) {
mLyseCount = count;
mpLyse = lyse;
}
void overrideLayer0WithLyse();
void setStif(const STIF *stif);
s16 getFlagIndex() const;
void setDemoName(const SizedString<16>& name) {
mDemoName = name;
}
const char *getDemoName() const {
return mDemoName;
}
void addLayerArcn(const char *path);
void addStageArcn(const char *path);
void addObjId(u16 id);
void addActorId(u16 actorId);
private:
static void lastExecuteCallback();
void triggerFade(s32 fadeType, u8 fadeFrames);
static dStageMgr_c *sInstance;
@@ -83,6 +131,7 @@ private:
/* 0x0580 */ LayoutArcControl mLayoutArcCtrl2;
/* 0x058C */ dBgS mBg;
// ...
u8 _0x00001[0x7D0];
/* 0x3E40 */ dCcS mCc;
// ...
/* 0x7930 */ dFader_c mFader;
@@ -91,10 +140,10 @@ private:
/* 0x7956 */ u16 mLyseCount;
/* 0x7958 */ u16 mRmplCount;
/* 0x795C */ PCAM *pcam;
/* 0x7960 */ PCAM *lyse;
/* 0x7964 */ STIF *stif;
/* 0x7968 */ RMPL *rmpl;
/* 0x795C */ const PCAM *mpPcam;
/* 0x7960 */ const LYSE *mpLyse;
/* 0x7964 */ const STIF *mpStif;
/* 0x7968 */ const RMPL *mpRmpl;
/* 0x799C */ mDvd_callback_c *mpDvdCallback;
/* 0x79A0 */ mDvd_callback_c *mpDvdCallback2;
@@ -105,7 +154,7 @@ private:
/* 0x8694 */ dTimeAreaMgr_c mTimeAreaMgr;
// ...
u8 ___[2450];
u8 ___[446];
/* 0x88A0 */ u32 field_0x88A0;
/* 0x88A4 */ SizedString<16> mDemoName;
+6 -7
View File
@@ -1,12 +1,11 @@
#ifndef D_STAGE_PARSE_H
#define D_STAGE_PARSE_H
#include "common.h"
typedef s32 parseCallbackArg;
void parseStageBzs(parseCallbackArg arg, void *bzs);
void parseRoomStageBzs(parseCallbackArg arg, void *bzs);
void parseBzsStageRoom(parseCallbackArg arg, void *bzs);
void parseRoomStageBzs(int roomid, const void *bzs);
void parseBzsStageRoom(int roomid, const void *bzs);
void parseStageBzs(int roomid, const void *bzs);
void parseRoomBzs(int roomid, const void *bzs);
void parseRoomReactivateBzs(int roomid, const void *bzs);
void parseRoomActivateBzs(int roomid, const void *bzs);
#endif
+2 -2
View File
@@ -210,12 +210,12 @@ public:
/* 8000CAD0 */ bool isNew_FileA();
/* 8000CB00 */ void setSceneFlagIndex(u16 idx);
/* 8000CB00 */ void setSceneFlagIndex(s16 idx);
/* 8000CB30 */ u32 getSceneFlagIndex();
/* 8000CB80 */ s32 getFileAreaIndex();
/* 8000CBD0 */ void fn_8000CBD0(u8);
/* 8000CC00 */ void fn_8000CC00();
/* 8000CC00 */ u8 fn_8000CC00();
/* 8000CC50 */ void setFileTimes();
/* 8000CCB0 */ void setPlayTime(s64 time);