mirror of
https://github.com/zeldaret/ss
synced 2026-09-01 17:39:55 -04:00
d_stage_parse ok
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user