d_s_room / d_a_bg first pass

This commit is contained in:
TakaRikka 2023-01-03 17:43:38 -08:00
parent e1114ebcf9
commit 92c2ef1ce3
23 changed files with 973 additions and 707 deletions

View File

@ -15,8 +15,8 @@ lbl_804582B8:
/* 804582EC 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
/* 804582F0 3C 63 00 02 */ addis r3, r3, 2
/* 804582F4 3B A3 D4 F8 */ addi r29, r3, -11016
/* 804582F8 3C 60 80 46 */ lis r3, data_80459424@ha /* 0x80459424@ha */
/* 804582FC 3A C3 94 24 */ addi r22, r3, data_80459424@l /* 0x80459424@l */
/* 804582F8 3C 60 80 46 */ lis r3, l_modelName@ha /* 0x80459424@ha */
/* 804582FC 3A C3 94 24 */ addi r22, r3, l_modelName@l /* 0x80459424@l */
lbl_80458300:
/* 80458300 7F 83 E3 78 */ mr r3, r28
/* 80458304 7C 96 DA 14 */ add r4, r22, r27
@ -26,8 +26,8 @@ lbl_80458300:
/* 80458314 7C 78 1B 79 */ or. r24, r3, r3
/* 80458318 40 82 00 24 */ bne lbl_8045833C
/* 8045831C 7F 83 E3 78 */ mr r3, r28
/* 80458320 3C 80 80 46 */ lis r4, data_80459468@ha /* 0x80459468@ha */
/* 80458324 38 04 94 68 */ addi r0, r4, data_80459468@l /* 0x80459468@l */
/* 80458320 3C 80 80 46 */ lis r4, l_modelName2@ha /* 0x80459468@ha */
/* 80458324 38 04 94 68 */ addi r0, r4, l_modelName2@l /* 0x80459468@l */
/* 80458328 7C 80 DA 14 */ add r4, r0, r27
/* 8045832C 7F A5 EB 78 */ mr r5, r29
/* 80458330 38 C0 00 40 */ li r6, 0x40
@ -55,8 +55,8 @@ lbl_80458374:
/* 8045837C 7C 03 00 40 */ cmplw r3, r0
/* 80458380 41 80 FF E0 */ blt lbl_80458360
/* 80458384 7F 83 E3 78 */ mr r3, r28
/* 80458388 3C 80 80 46 */ lis r4, data_804594AC@ha /* 0x804594AC@ha */
/* 8045838C 38 04 94 AC */ addi r0, r4, data_804594AC@l /* 0x804594AC@l */
/* 80458388 3C 80 80 46 */ lis r4, l_btkName@ha /* 0x804594AC@ha */
/* 8045838C 38 04 94 AC */ addi r0, r4, l_btkName@l /* 0x804594AC@l */
/* 80458390 7C 80 DA 14 */ add r4, r0, r27
/* 80458394 7F A5 EB 78 */ mr r5, r29
/* 80458398 38 C0 00 40 */ li r6, 0x40
@ -91,8 +91,8 @@ lbl_804583F8:
/* 804583FC C0 03 93 88 */ lfs f0, lit_4125@l(r3) /* 0x80459388@l */
/* 80458400 D0 1E 00 10 */ stfs f0, 0x10(r30)
/* 80458404 7F 83 E3 78 */ mr r3, r28
/* 80458408 3C 80 80 46 */ lis r4, data_804594F0@ha /* 0x804594F0@ha */
/* 8045840C 38 04 94 F0 */ addi r0, r4, data_804594F0@l /* 0x804594F0@l */
/* 80458408 3C 80 80 46 */ lis r4, l_brkName@ha /* 0x804594F0@ha */
/* 8045840C 38 04 94 F0 */ addi r0, r4, l_brkName@l /* 0x804594F0@l */
/* 80458410 7C 80 DA 14 */ add r4, r0, r27
/* 80458414 7F A5 EB 78 */ mr r5, r29
/* 80458418 38 C0 00 40 */ li r6, 0x40

View File

@ -106,8 +106,8 @@ lbl_80458A38:
/* 80458A44 41 80 FF AC */ blt lbl_804589F0
/* 80458A48 3C 60 80 43 */ lis r3, g_env_light@ha /* 0x8042CA54@ha */
/* 80458A4C 38 63 CA 54 */ addi r3, r3, g_env_light@l /* 0x8042CA54@l */
/* 80458A50 3C 80 80 46 */ lis r4, data_80459534@ha /* 0x80459534@ha */
/* 80458A54 38 84 95 34 */ addi r4, r4, data_80459534@l /* 0x80459534@l */
/* 80458A50 3C 80 80 46 */ lis r4, l_tevStrType@ha /* 0x80459534@ha */
/* 80458A54 38 84 95 34 */ addi r4, r4, l_tevStrType@l /* 0x80459534@l */
/* 80458A58 7C 84 F0 2E */ lwzx r4, r4, r30
/* 80458A5C 38 A0 00 00 */ li r5, 0
/* 80458A60 80 D6 00 0C */ lwz r6, 0xc(r22)

View File

@ -368,6 +368,9 @@ public:
calcTransform(getFrame(), param_0, pSRTInfo);
}
u16 getUpdateMaterialID(u16 idx) const { return mUpdateMaterialID[idx]; }
u16 getUpdateMaterialNum() const { return field_0x14 / 3; }
private:
/* 0x0C */ int field_0xc;
/* 0x10 */ int field_0x10;
@ -379,7 +382,7 @@ private:
/* 0x20 */ int field_0x20;
/* 0x24 */ int field_0x24;
/* 0x28 */ u8 mUpdateTexMtxID[4];
/* 0x2C */ u16 mUpdateMaterialID[2];
/* 0x2C */ u16* mUpdateMaterialID;
/* 0x30 */ JUTNameTab field_0x30;
/* 0x40 */ int field_0x40;
/* 0x44 */ u16 field_0x44;
@ -427,6 +430,12 @@ public:
/* 8032BD9C */ virtual ~J3DAnmTevRegKey();
/* 8032BE24 */ virtual s32 getKind() const;
u16 getCRegUpdateMaterialNum() const { return mCRegUpdateMaterialNum; }
u16 getKRegUpdateMaterialNum() const { return mKRegUpdateMaterialNum; }
u16 getCRegUpdateMaterialID(u16 idx) const { return mCRegUpdateMaterialID[idx]; }
u16 getKRegUpdateMaterialID(u16 idx) const { return mKRegUpdateMaterialID[idx]; }
private:
/* 0x0C */ u16 mCRegUpdateMaterialNum;
/* 0x0E */ u16 mKRegUpdateMaterialNum;
@ -438,8 +447,10 @@ private:
/* 0x1A */ u16 field_0x1a;
/* 0x1C */ u16 field_0x1c;
/* 0x1E */ u16 field_0x1e;
/* 0x20 */ u16 mCRegUpdateMaterialID[20];
/* 0x34 */ u16 mKRegUpdateMaterialID[20];
/* 0x20 */ u16* mCRegUpdateMaterialID;
/* 0x24 */ u8 field_0x24[0x34 - 0x24];
/* 0x34 */ u16* mKRegUpdateMaterialID;
/* 0x38 */ u8 field_0x38[0x48 - 0x38];
/* 0x48 */ void* field_0x48;
/* 0x4C */ void* field_0x4c;
/* 0x50 */ int field_0x50;

View File

@ -32,6 +32,8 @@ public:
J3DTexture* getTexture() const { return mTexture; }
JUTNameTab* getTextureName() const { return mTextureName; }
JUTNameTab* getMaterialName() const { return mMaterialName; }
u16 getMaterialNum() const { return mMaterialNum; }
bool isLocked() const { return field_0x1c == 1; }

View File

@ -22,6 +22,7 @@ public:
/* 8032617C */ virtual ~J3DModelData();
J3DMaterialTable& getMaterialTable() { return mMaterialTable; }
JUTNameTab* getMaterialName() const { return mMaterialTable.getMaterialName(); }
J3DVertexData& getVertexData() { return mVertexData; }
u16 getShapeNum() const { return mShapeTable.getShapeNum(); }
u16 getMaterialNum() const { return mMaterialTable.getMaterialNum(); }

View File

@ -63,6 +63,8 @@ public:
u32 getTexNo(u32 idx) const { return mTevBlock->getTexNo(idx); }
void setTevColor(u32 i, const J3DGXColorS10* i_color) { mTevBlock->setTevColor(i, i_color); }
void setTevKColor(u32 i, const J3DGXColor* i_color) { mTevBlock->setTevKColor(i, i_color); }
void setMaterialAnm(J3DMaterialAnm* i_anm) { mMaterialAnm = i_anm; }
public:
/* 0x04 */ J3DMaterial* mNext;

View File

@ -97,16 +97,19 @@ public:
void setScaleFlagArray(u8* pScaleFlagArray) { mScaleFlagArray = pScaleFlagArray; }
void setDrawMtx(Mtx** pDrawMtx) { mDrawMtx = pDrawMtx; }
void setNrmMtx(Mtx33** pNrmMtx) { mNrmMtx = pNrmMtx; }
void setTexMtxLoadType(u32 type) { mFlags = (mFlags & 0xFFFF0FFF) | type; }
bool getNBTFlag() const { return mHasNBT; }
u32 getBumpMtxOffset() const { return mBumpMtxOffset; }
inline J3DMaterial* getMaterial() const { return mMaterial; }
inline u32 getIndex() const { return mIndex; }
inline u32 getPipeline() const { return (mFlags >> 2) & 0x07; }
inline u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
inline u32 getMtxGroupNum() const { return mMtxGroupNum; }
inline J3DShapeDraw* getShapeDraw(u32 idx) const { return mShapeDraw[idx]; }
inline J3DShapeMtx* getShapeMtx(u32 idx) const { return mShapeMtx[idx]; }
J3DMaterial* getMaterial() const { return mMaterial; }
u32 getIndex() const { return mIndex; }
u32 getPipeline() const { return (mFlags >> 2) & 0x07; }
u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
u32 getMtxGroupNum() const { return mMtxGroupNum; }
J3DShapeDraw* getShapeDraw(u32 idx) const { return mShapeDraw[idx]; }
J3DShapeMtx* getShapeMtx(u32 idx) const { return mShapeMtx[idx]; }
Vec* getMin() { return &mMin; }
Vec* getMax() { return &mMax; }
static void resetVcdVatCache() { sOldVcdVatCmd = NULL; }

View File

@ -17,6 +17,10 @@ class dBgW_Base : public cBgW_BgId {
public:
enum PushPullLabel {};
enum PRIORITY {
PRIORITY_0,
};
typedef s32 (*PushPull_CallBack)(cBgS_PolyInfo const&, fopAc_ac_c*, s16,
dBgW_Base::PushPullLabel);
@ -91,6 +95,7 @@ public:
bool ChkPushPullOk() const { return m_pushPull_Ok; }
void SetRoomId(int id) { m_roomId = id; }
bool ChkPriority(int prio) { return m_priority == prio; }
void SetPriority(PRIORITY priority) { m_priority = priority; }
private:
/* 0x08 */ u8 m_priority;

View File

@ -825,6 +825,7 @@ BOOL dComIfGs_isEventBit(u16 i_flag);
int dComIfGs_isItemFirstBit(u8 i_no);
u16 dComIfGs_getRupee();
static u16 dComIfGs_getLife();
s8 dComIfGs_BossLife_public_Get();
inline void dComIfGs_init() {
g_dComIfG_gameInfo.info.init();
@ -1523,6 +1524,10 @@ inline void dComIfGs_setMemoryToCard(u8* i_saveData, int i_dataNum) {
g_dComIfG_gameInfo.info.memory_to_card((char*)i_saveData, i_dataNum);
}
inline int dComIfGs_createZone(int roomNo) {
return g_dComIfG_gameInfo.info.createZone(roomNo);
}
void dComIfGp_setSelectItem(int index);
s32 dComIfGp_offHeapLockFlag(int flag);
@ -1544,6 +1549,7 @@ int dComIfGp_getSelectItemMaxNum(int index);
void dComIfGp_mapShow();
void dComIfGp_mapHide();
bool dComIfGp_checkMapShow();
void dComIfGp_ret_wp_set(s8);
s32 dComIfGp_setHeapLockFlag(u8 flag);
u8 dComIfGp_world_dark_get();
JKRExpHeap* dComIfGp_getSubHeap2D(int flag);
@ -1567,6 +1573,7 @@ static u8 dComIfGp_getDoStatus();
static u8 dComIfGp_getRStatus();
static dAttCatch_c* dComIfGp_att_getCatghTarget();
static void dComIfGp_setBottleStatus(u8 param_0, u8 param_1);
bool dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle);
inline bool i_dComIfGp_checkPlayerStatus0(int param_0, u32 flag) {
return g_dComIfG_gameInfo.play.checkPlayerStatus(param_0, 0, flag);
@ -2347,6 +2354,10 @@ inline s32 dComIfGp_roomControl_getStayNo() {
return dStage_roomControl_c::getStayNo();
}
inline s32 dComIfGp_roomControl_getZoneNo(int i_roomNo) {
return dStage_roomControl_c::getZoneNo(i_roomNo);
}
inline void dComIfGp_roomControl_initZone() {
g_dComIfG_gameInfo.play.getRoomControl()->initZone();
}
@ -2375,12 +2386,28 @@ inline void dComIfGp_roomControl_setStayNo(int stayNo) {
g_dComIfG_gameInfo.play.getRoomControl()->setStayNo(stayNo);
}
inline void dComIfGp_roomControl_setZoneNo(int roomNo, int zoneNo) {
g_dComIfG_gameInfo.play.getRoomControl()->setZoneNo(roomNo, zoneNo);
}
inline dKy_tevstr_c* dComIfGp_roomControl_getTevStr(int i_roomNo) {
return g_dComIfG_gameInfo.play.getRoomControl()->getTevStr(i_roomNo);
}
inline bool dComIfGp_roomControl_checkStatusFlag(int i_roomNo, u8 flag) {
return g_dComIfG_gameInfo.play.mRoomControl.checkStatusFlag(i_roomNo, flag);
inline BOOL dComIfGp_roomControl_checkStatusFlag(int i_roomNo, u8 flag) {
return g_dComIfG_gameInfo.play.getRoomControl()->checkStatusFlag(i_roomNo, flag);
}
inline void dComIfGp_roomControl_offStatusFlag(int i_roomNo, u8 flag) {
return g_dComIfG_gameInfo.play.getRoomControl()->offStatusFlag(i_roomNo, flag);
}
inline void dComIfGp_roomControl_onStatusFlag(int i_roomNo, u8 flag) {
return g_dComIfG_gameInfo.play.getRoomControl()->onStatusFlag(i_roomNo, flag);
}
inline void dComIfGp_roomControl_setStatusFlag(int i_roomNo, u8 flag) {
return g_dComIfG_gameInfo.play.getRoomControl()->setStatusFlag(i_roomNo, flag);
}
inline void dComIfGp_roomControl_zoneCountCheck(int i_roomNo) {

View File

@ -48,6 +48,11 @@ public:
/* 80031434 */ static bool check(s8 i_roomNo, cXyz const& i_pos);
/* 800315A4 */ static void execute();
static void reset(int roomNo) {
room_c* room = (room_c*)mRoom; // tmp
room[roomNo].reset();
}
static u8 mData[1152];
static u8 mRoom[256];
static s16 mSetTop;

View File

@ -273,6 +273,7 @@ public:
static dDemo_actor_c* getActor(u8 param_0) { return m_object->getActor(param_0); }
static u32 getFrameNoMsg() { return m_frameNoMsg; }
static s32 getMode() { return m_mode; }
static int getFrame() { return m_frame; }
static JStudio::stb::TControl* getControl() { return m_control; }
static bool isStatus(u32 status) { return m_status & status; }
static void onStatus(u32 status) { m_status |= status; }

View File

@ -684,6 +684,7 @@ public:
/* 0x68 */ int mVrboxcolNumInfo;
}; // Size: 0x6C
class dBgW_base;
class dStage_roomStatus_c {
public:
/* 0x000 */ dStage_roomDt_c mRoomDt;
@ -695,7 +696,7 @@ public:
/* 0x3F8 */ s8 mMemBlockID;
/* 0x3F9 */ u8 mRegionNo;
/* 0x3FC */ int mProcID;
/* 0x400 */ int field_0x400;
/* 0x400 */ dBgW_base* mpBgW;
int getZoneNo() const { return mZoneNo; }
~dStage_roomStatus_c() {}
@ -723,6 +724,11 @@ public:
/* 0x04 */ void** m_dzs;
};
struct nameData {
/* 0x0 */ s8 m_num;
/* 0x1 */ char m_names[32][10]; // ?
};
static void createRoomDzs(u8 i_num) { m_roomDzs.create(i_num); }
static void* addRoomDzs(u8 i_num, u8 roomNo) { return m_roomDzs.add(i_num, roomNo); }
static void removeRoomDzs() { m_roomDzs.remove(); }
@ -744,7 +750,7 @@ public:
/* 80024940 */ static char* getArcBank(int);
/* 80024954 */ static bool resetArchiveBank(int);
/* 80024DB0 */ static void SetTimePass(int);
/* 8025BAAC */ void setZoneNo(int, int);
/* 8025BAAC */ static void setZoneNo(int, int);
static s32 GetTimePass();
static s8 getStayNo() { return mStayNo; }
@ -763,14 +769,28 @@ public:
static void offNoChangeRoom() { mNoChangeRoom = false; }
static void setProcID(u32 id) { mProcID = id; }
static u32 getProcID() { return mProcID; }
static void setStatusProcID(int i_roomNo, unsigned int i_id) { mStatus[i_roomNo].mProcID = i_id; }
static int getStatusProcID(int i_roomNo) { return mStatus[i_roomNo].mProcID; }
static void setFileList2(int i_roomNo, dStage_FileList2_dt_c* list) {
mStatus[i_roomNo].mRoomDt.mFileList2Info = list;
}
bool checkStatusFlag(int i_roomNo, u8 flag) const {
static void setBgW(int param_0, dBgW_base* i_bgw) {
mStatus[param_0].mpBgW = i_bgw;
}
BOOL checkStatusFlag(int i_roomNo, u8 flag) const {
return cLib_checkBit(mStatus[i_roomNo].mFlag, flag);
}
void offStatusFlag(int i_roomNo, u8 flag) {
return cLib_offBit(mStatus[i_roomNo].mFlag, flag);
}
void onStatusFlag(int i_roomNo, u8 flag) {
return cLib_onBit(mStatus[i_roomNo].mFlag, flag);
}
static JKRExpHeap* mMemoryBlock[19];
static char mArcBank[32][10];
static dStage_roomStatus_c mStatus[0x40];
@ -917,6 +937,12 @@ static s32 dStage_stagInfo_GetSaveTbl(stage_stag_info_class* param_0);
void dStage_restartRoom(u32 roomParam, u32 mode, int param_2);
struct cBgS_GndChk;
int dStage_RoomCheck(cBgS_GndChk* gndChk);
void dStage_dt_c_roomReLoader(void* i_data, dStage_dt_c* stageDt, int param_2);
void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* stageDt, int param_2);
inline bool dStage_roomRead_dt_c_ChkBg(u8 param_0) {
return param_0 & 0x80;
}
inline s32 dStage_roomRead_dt_c_GetVrboxswitch(roomRead_data_class& data) {
return data.field_0x2 & 8;
@ -970,6 +996,10 @@ inline s8 dStage_stagInfo_GetTimeH(stage_stag_info_class* p_info) {
return p_info->field_0x0c >> 8;
}
inline BOOL dStage_staginfo_GetArchiveHeap(stage_stag_info_class* p_info) {
return p_info->field_0x0a & 0x1000;
}
inline u32 dStage_sclsInfo_getSceneLayer(stage_scls_info_class* p_info) {
return p_info->field_0xb & 0xF;
}

View File

@ -37,7 +37,7 @@ static void GxFog_set();
static void GxXFog_set();
u8 dKy_pol_argument_get(cBgS_PolyInfo const* i_poly);
void dKy_Sound_set(cXyz param_0, int param_1, unsigned int param_2, int param_3);
void dKy_bg_MAxx_proc(void* param_0);
struct LIGHT_INFLUENCE {
/* 800CFC7C */ ~LIGHT_INFLUENCE() {}

View File

@ -344,6 +344,8 @@ public:
JKRExpHeap* getResHeap() { return m_resHeap; }
void levelAllForceOnEventMove() { field_0x210.allForceOnEventMove(); }
static void onStatus(u8 status) { mStatus |= status; }
static void offStatus(u8 status) { mStatus &= ~status; }
static bool isStatus(u8 status) { return mStatus & status; }

View File

@ -26,4 +26,8 @@ inline int fopScnM_LayerID(void* proc) {
return fpcM_LayerID(proc);
}
inline u32 fopScnM_GetParam(void* proc) {
return fpcM_GetParam(proc);
}
#endif

View File

@ -10,6 +10,7 @@
#include "f_pc/f_pc_stdcreate_req.h"
#include "f_pc/f_pc_executor.h"
#include "f_pc/f_pc_leaf.h"
#include "f_pc/f_pc_layer_iter.h"
typedef int (*FastCreateReqFunc)(void*);
typedef void (*fpcM_ManagementFunc)(void);
@ -66,6 +67,10 @@ inline BOOL fpcM_IsExecuting(unsigned int id) {
return fpcEx_IsExist(id);
}
inline void* fpcM_LyJudge(process_node_class* i_node, fpcLyIt_JudgeFunc i_func, void* i_data) {
return fpcLyIt_Judge(&i_node->mLayer, i_func, i_data);
}
void fpcM_Draw(void* pProc);
s32 fpcM_DrawIterater(fpcM_DrawIteraterFunc pFunc);
s32 fpcM_Execute(void* pProc);

View File

@ -61,6 +61,10 @@ public:
}
int remove(J3DModelData* i_modelData) { return i_modelData->removeTexMtxAnimator(mpAnm); }
void entryFrame() { entryFrame(getFrame()); }
void entryFrame(f32 frame) { setFrame(frame); }
J3DAnmTextureSRTKey* getBtkAnm() const { return mpAnm; }
private:
/* 0x14 */ J3DAnmTextureSRTKey* mpAnm;
@ -87,6 +91,10 @@ public:
}
int remove(J3DModelData* i_modelData) { return i_modelData->removeTevRegAnimator(mpAnm); }
void entryFrame() { entryFrame(getFrame()); }
void entryFrame(f32 frame) { setFrame(frame); }
J3DAnmTevRegKey* getBrkAnm() const { return mpAnm; }
private:
/* 0x14 */ J3DAnmTevRegKey* mpAnm;
@ -508,6 +516,7 @@ J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 param_1, u32 pa
void mDoExt_setAraCacheSize(u32 size);
int mDoExt_resIDToIndex(JKRArchive* p_archive, u16 id);
void mDoExt_modelEntryDL(J3DModel* i_model);
void mDoExt_setupStageTexture(J3DModelData* i_modelData);
struct JUTFont;
JUTFont* mDoExt_getMesgFont();

View File

@ -8,6 +8,15 @@
struct mDoLib_clipper {
/* 8001528C */ void setup(f32, f32, f32, f32);
static void changeFar(f32 far) {
mClipper.setFar(far);
mClipper.calcViewFrustum();
}
static u32 clip(const Mtx m, const Vec* param_1, const Vec* param_2) {
return mClipper.clip(m, (Vec*)param_1, (Vec*)param_2);
}
static J3DUClipper mClipper;
static f32 mSystemFar;
static f32 mFovyRate;

View File

@ -17,6 +17,7 @@ M3_O_FILES := \
M3_LIBS := \
M3_CFLAGS := \
-pool off \
-sdata 0 \
-sdata2 0 \

File diff suppressed because it is too large Load Diff

View File

@ -1365,10 +1365,10 @@ int dComIfGd_setSimpleShadow(cXyz* i_pos, f32 param_1, f32 param_2, cBgS_PolyInf
}
/* 8002D1AC-8002D25C 027AEC 00B0+00 0/0 0/0 1/1 .text dComIfGp_getMapTrans__FiPfPfPs */
int dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle) {
bool dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angle) {
dStage_Multi_c* multi = dComIfGp_getMulti();
if (multi == NULL) {
return 0;
return false;
}
dStage_Mult_info* info = multi->mInfo;
@ -1377,12 +1377,12 @@ int dComIfGp_getMapTrans(int i_roomNo, f32* o_transX, f32* o_transY, s16* o_angl
*o_transX = info->mTransX;
*o_transY = info->mTransY;
*o_angle = info->mAngle;
return 1;
return true;
}
info++;
}
return 0;
return false;
}
/* 8002D25C-8002D2AC 027B9C 0050+00 0/0 3/3 3/3 .text dComIfGp_getRoomCamera__Fi */

View File

@ -528,7 +528,7 @@ void dStage_roomControl_c::init() {
}
status->mMemBlockID = -1;
status->field_0x400 = 0;
status->mpBgW = NULL;
status++;
}

View File

@ -5,24 +5,25 @@
#include "d/s/d_s_room.h"
#include "d/com/d_com_inf_game.h"
#include "d/d_procname.h"
#include "d/s/d_s_play.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "f_op/f_op_scene.h"
static bool resetArchiveBank(int param_0);
static bool setArchiveBank(int param_0);
//
// Types:
//
class room_of_scene_class : public process_node_class {
class room_of_scene_class : public scene_class {
public:
/* 0x1AC */ process_method_class* mpProcessMtd;
/* 0x1B0 */ scene_tag_class* field_0x1b0;
/* 0x1B4 */ u8 field_0x1b4[0x10];
/* 0x1C4 */ request_of_phase_process_class field_0x1c4;
/* 0x1CC */ void* field_0x1cc;
/* 0x1D0 */ dStage_roomDt_c* field_0x1d0;
/* 0x1CC */ void* mpDzrRes;
/* 0x1D0 */ dStage_roomDt_c* mpRoomDt;
/* 0x1D4 */ s8 field_0x1d4;
/* 0x1D5 */ s8 field_0x1d5;
/* 0x1D5 */ u8 field_0x1d5;
/* 0x1D6 */ u8 field_0x1d6[2];
/* 0x1D8 */ u8 field_0x1d8;
};
@ -110,15 +111,14 @@ extern "C" u8 mDemoArcName__20dStage_roomControl_c[10 + 2 /* padding */];
extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */];
extern "C" u8 mArcBankName__20dStage_roomControl_c[4];
extern "C" u8 mArcBankData__20dStage_roomControl_c[4];
extern "C" extern u8 pauseTimer__9dScnPly_c[4];
//
// Declarations:
//
/* 8025AE1C-8025AE24 25575C 0008+00 1/0 0/0 0/0 .text dScnRoom_Draw__FP19room_of_scene_class */
static bool dScnRoom_Draw(room_of_scene_class* param_0) {
return true;
static int dScnRoom_Draw(room_of_scene_class* i_this) {
return 1;
}
/* ############################################################################################## */
@ -132,21 +132,17 @@ SECTION_DEAD static char const* const stringBase_8039A388 = "";
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void getResetArchiveBank(int param_0, u8 const** param_1) {
static asm int getResetArchiveBank(int param_0, u8 const** param_1) {
nofralloc
#include "asm/d/s/d_s_room/getResetArchiveBank__FiPPCUc.s"
}
#pragma pop
/* 8025AF24-8025AF4C 255864 0028+00 1/1 0/0 0/0 .text resetArchiveBank__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void resetArchiveBank(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/resetArchiveBank__Fi.s"
static bool resetArchiveBank(int param_0) {
const u8* tmp;
return dStage_roomControl_c::resetArchiveBank(getResetArchiveBank(param_0, &tmp));
}
#pragma pop
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -161,51 +157,44 @@ SECTION_DEAD static char const* const stringBase_8039A39B = "Bank[%d] : %s.arc R
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void setArchiveBank(int param_0) {
static asm bool setArchiveBank(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/setArchiveBank__Fi.s"
}
#pragma pop
/* 8025B0F0-8025B150 255A30 0060+00 1/1 0/0 0/0 .text objectDeleteJugge__FPvPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void objectDeleteJugge(void* param_0, void* param_1) {
nofralloc
#include "asm/d/s/d_s_room/objectDeleteJugge__FPvPv.s"
static int objectDeleteJugge(void* i_obj, void*) {
if (fpcM_GetProfName(i_obj) != PROC_BG) {
if (fopAcM_IsActor(i_obj) && !fopAcM_CheckCondition((fopAc_ac_c*)i_obj, 4)) {
return 0;
}
fpcM_Delete(i_obj);
}
return 0;
}
#pragma pop
/* 8025B150-8025B174 255A90 0024+00 1/1 0/0 0/0 .text deleteJugge__FPvPv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void deleteJugge(void* param_0, void* param_1) {
nofralloc
#include "asm/d/s/d_s_room/deleteJugge__FPvPv.s"
static int deleteJugge(void* i_obj, void*) {
fpcM_Delete(i_obj);
return 0;
}
#pragma pop
/* 8025B174-8025B194 255AB4 0020+00 1/1 0/0 0/0 .text isCreatingCallback__FP10create_tagPUi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void isCreatingCallback(create_tag* param_0, unsigned int* param_1) {
static asm void* isCreatingCallback(create_tag* param_0, unsigned int* param_1) {
nofralloc
#include "asm/d/s/d_s_room/isCreatingCallback__FP10create_tagPUi.s"
}
#pragma pop
/* 8025B194-8025B1D0 255AD4 003C+00 2/2 0/0 0/0 .text isCreating__FUi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void isCreating(unsigned int param_0) {
nofralloc
#include "asm/d/s/d_s_room/isCreating__FUi.s"
static bool isCreating(unsigned int param_0) {
return fpcCtIt_Judge((fpcCtIt_JudgeFunc)isCreatingCallback, &param_0);
}
#pragma pop
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@ -225,146 +214,269 @@ static asm void loadDemoArchive(int param_0) {
#pragma pop
/* 8025B2EC-8025B564 255C2C 0278+00 3/3 0/0 0/0 .text objectSetCheck__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void objectSetCheck(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/objectSetCheck__FP19room_of_scene_class.s"
static bool objectSetCheck(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
BOOL status_flag_8 = dComIfGp_roomControl_checkStatusFlag(roomNo, 8);
BOOL status_flag_20 = dComIfGp_roomControl_checkStatusFlag(roomNo, 0x20);
if (i_this->field_0x1d4 == 0 || (i_this->field_0x1d4 > 0 && !status_flag_8)) {
if (!status_flag_8) {
switch (i_this->field_0x1d4) {
case 0:
if (!resetArchiveBank(roomNo)) {
return 0;
}
i_this->field_0x1d4++;
case 1:
if (!setArchiveBank(roomNo)) {
return 0;
}
if (i_this->mpDzrRes != NULL) {
loadDemoArchive(roomNo);
}
default:
if (*dStage_roomControl_c::getDemoArcName() != '\0') {
int phase = dComIfG_syncObjectRes(dStage_roomControl_c::getDemoArcName());
if (phase >= 0 && phase > 0) {
return 0;
}
}
fopAcM_create(PROC_BG, roomNo, NULL, -1, NULL, NULL, -1);
dComIfGp_getPEvtManager()->demoInit();
dComIfGp_getPEvtManager()->roomInit(roomNo);
dStage_dt_c_roomReLoader(i_this->mpDzrRes, i_this->mpRoomDt, roomNo);
dComIfGp_ret_wp_set(roomNo);
i_this->field_0x1d4 = -1;
i_this->field_0x1d5 = 1;
}
}
} else if (status_flag_8) {
if (isCreating(fpcM_LayerID(i_this))) {
return 0;
}
fpcM_LyJudge(&i_this->mBase, (fpcLyIt_JudgeFunc)deleteJugge, NULL);
g_dComIfG_gameInfo.play.getParticle()->levelAllForceOnEventMove();
dComIfGs_clearRoomSwitch(dComIfGp_roomControl_getZoneNo(roomNo));
dComIfGs_clearRoomItem(dComIfGp_roomControl_getZoneNo(roomNo));
dComIfGp_roomControl_offStatusFlag(roomNo, 0x20);
i_this->field_0x1d4 = 0;
} else if (status_flag_20) {
fpcM_LyJudge(&i_this->mBase, (fpcLyIt_JudgeFunc)objectDeleteJugge, NULL);
g_dComIfG_gameInfo.play.getParticle()->levelAllForceOnEventMove();
}
return 1;
}
#pragma pop
/* 8025B564-8025B674 255EA4 0110+00 1/0 0/0 0/0 .text dScnRoom_Execute__FP19room_of_scene_class */
#ifdef NONMATCHING
static int dScnRoom_Execute(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
if (dComIfGp_roomControl_checkStatusFlag(roomNo, 2)) {
dComIfGp_roomControl_offStatusFlag(roomNo, 2);
dComIfGp_roomControl_onStatusFlag(roomNo, 1);
} else if (objectSetCheck(i_this)) {
if (dComIfGp_roomControl_checkStatusFlag(roomNo, 4)) {
fopScnM_DeleteReq(i_this);
} else if (i_this->field_0x1d4 < 0 && i_this->field_0x1d5 != 0 &&
!i_dComIfGp_event_runCheck() &&
(int)fopScnM_GetParam(i_this) == dComIfGp_roomControl_getStayNo()) {
if (isCreating(fpcM_LayerID(i_this))) {
dScnPly_c::setPauseTimer(2);
} else {
i_this->field_0x1d5 = 0;
}
}
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Execute(room_of_scene_class* param_0) {
static asm int dScnRoom_Execute(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Execute__FP19room_of_scene_class.s"
}
#pragma pop
#endif
/* 8025B674-8025B67C 255FB4 0008+00 1/0 0/0 0/0 .text dScnRoom_IsDelete__FP19room_of_scene_class
*/
static bool dScnRoom_IsDelete(room_of_scene_class* param_0) {
return true;
static int dScnRoom_IsDelete(room_of_scene_class*) {
return 1;
}
/* 8025B67C-8025B73C 255FBC 00C0+00 1/1 0/0 0/0 .text isReadRoom__Fi */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void isReadRoom(int param_0) {
nofralloc
#include "asm/d/s/d_s_room/isReadRoom__Fi.s"
static bool isReadRoom(int param_0) {
roomRead_class* room = dComIfGp_getStageRoom();
if (room == NULL) {
return false;
}
if (room->field_0x0 <= param_0) {
return false;
}
roomRead_data_class* roomData = room->field_0x4[dComIfGp_getNextStageRoomNo()];
u8* tmp = roomData->field_0x4;
for (int i = 0; i < roomData->field_0x0; i++) {
if (dStage_roomRead_dt_c_ChkBg(*tmp) &&
param_0 == dStage_roomRead_dt_c_GetLoadRoomIndex(*tmp)) {
return true;
}
tmp++;
}
return false;
}
inline const char* setArcName(room_of_scene_class* i_room) {
return dComIfG_getRoomArcName(fopAcM_GetParam(i_room));
}
#pragma pop
/* 8025B73C-8025B870 25607C 0134+00 1/0 0/0 0/0 .text dScnRoom_Delete__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Delete(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Delete__FP19room_of_scene_class.s"
static int dScnRoom_Delete(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
dComIfGp_roomControl_setStatusFlag(roomNo, 0);
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.init();
if (mDoRst::isReset() || !dComIfGp_isEnableNextStage() ||
strcmp(dComIfGp_getNextStageName(), dComIfGp_getStartStageName()) ||
(roomNo != dComIfGp_getNextStageRoomNo() && !isReadRoom(roomNo))) {
dComIfG_deleteStageRes(setArcName(i_this));
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
heap->freeAll();
}
}
dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt.init();
dComIfGp_getPEvtManager()->roomFinish(roomNo);
return 1;
}
#pragma pop
/* 8025B870-8025B8A4 2561B0 0034+00 1/0 0/0 0/0 .text phase_0__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_0(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_0__FP19room_of_scene_class.s"
static int phase_0(room_of_scene_class* i_this) {
int roomNo = fopScnM_GetParam(i_this);
dStage_roomControl_c::setStatusProcID(roomNo, fopScnM_GetID(i_this));
return 2;
}
#pragma pop
/* 8025B8A4-8025B980 2561E4 00DC+00 1/0 0/0 0/0 .text phase_1__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_1(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_1__FP19room_of_scene_class.s"
}
#pragma pop
static int phase_1(room_of_scene_class* i_this) {
i_this->field_0x1d8 = 1;
/* ############################################################################################## */
/* 8039A388-8039A388 0269E8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039A3CA = "room.dzr";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039A3D3 = "\0\0\0\0";
#pragma pop
int roomNo = fopScnM_GetParam(i_this);
const char* arcName = setArcName(i_this);
if (dComIfG_syncStageRes(arcName) < 0) {
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
if (heap->getTotalUsedSize() != 0) {
return 0;
}
} else {
stage_stag_info_class* stagInfo = i_dComIfGp_getStage()->getStagInfo();
if (dStage_staginfo_GetArchiveHeap(stagInfo) != NULL) {
heap = mDoExt_getArchiveHeap();
}
}
if (!dComIfG_setStageRes(arcName, heap)) {
return cPhs_ERROR_e;
}
}
return 2;
}
/* 8025B980-8025BAAC 2562C0 012C+00 1/0 0/0 0/0 .text phase_2__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_2(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_2__FP19room_of_scene_class.s"
static int phase_2(room_of_scene_class* i_this) {
const char* arcName = setArcName(i_this);
int phase = dComIfG_syncStageRes(arcName);
if (phase < 0) {
return cPhs_ERROR_e;
}
if (phase != 0) {
return 0;
}
int roomNo = fopScnM_GetParam(i_this);
if (dComIfGp_roomControl_getZoneNo(roomNo) < 0) {
dComIfGp_roomControl_setZoneNo(roomNo, dComIfGs_createZone(roomNo));
}
i_this->mpRoomDt = &dComIfGp_roomControl_getStatusRoomDt(roomNo)->mRoomDt;
i_this->mpRoomDt->setRoomNo(roomNo);
i_this->mpDzrRes = dComIfG_getStageRes(arcName, "room.dzr");
if (i_this->mpDzrRes != NULL) {
dStage_dt_c_roomLoader(i_this->mpDzrRes, i_this->mpRoomDt, roomNo);
}
JKRHeap* old_heap = NULL;
JKRExpHeap* heap = dStage_roomControl_c::getMemoryBlock(roomNo);
if (heap != NULL) {
old_heap = mDoExt_setCurrentHeap(heap);
}
if (old_heap != NULL) {
mDoExt_setCurrentHeap(old_heap);
}
return 2;
}
#pragma pop
/* 8025BAAC-8025BAC4 2563EC 0018+00 1/1 0/0 0/0 .text setZoneNo__20dStage_roomControl_cFii */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void dStage_roomControl_c::setZoneNo(int param_0, int param_1) {
nofralloc
#include "asm/d/s/d_s_room/setZoneNo__20dStage_roomControl_cFii.s"
void dStage_roomControl_c::setZoneNo(int i_roomNo, int i_zoneNo) {
mStatus[i_roomNo].mZoneNo = i_zoneNo;
}
#pragma pop
/* 8025BAC4-8025BAF8 256404 0034+00 1/0 0/0 0/0 .text phase_3__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_3(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_3__FP19room_of_scene_class.s"
static int phase_3(room_of_scene_class* i_this) {
return objectSetCheck(i_this) ? 2 : 0;
}
#pragma pop
/* 8025BAF8-8025BB48 256438 0050+00 1/0 0/0 0/0 .text phase_4__FP19room_of_scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void phase_4(room_of_scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/phase_4__FP19room_of_scene_class.s"
}
#pragma pop
static int phase_4(room_of_scene_class* i_this) {
if (dComIfGp_getPlayer(0) == NULL) {
return 0;
}
/* ############################################################################################## */
/* 803C3260-803C3274 -00001 0014+00 1/1 0/0 0/0 .data l_method$4056 */
SECTION_DATA static void* l_method[5] = {
(void*)phase_0__FP19room_of_scene_class, (void*)phase_1__FP19room_of_scene_class,
(void*)phase_2__FP19room_of_scene_class, (void*)phase_3__FP19room_of_scene_class,
(void*)phase_4__FP19room_of_scene_class,
};
return objectSetCheck(i_this) ? cPhs_COMPLEATE_e : 0;
}
/* 8025BB48-8025BB78 256488 0030+00 1/0 0/0 0/0 .text dScnRoom_Create__FP11scene_class */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void dScnRoom_Create(scene_class* param_0) {
nofralloc
#include "asm/d/s/d_s_room/dScnRoom_Create__FP11scene_class.s"
static int dScnRoom_Create(scene_class* i_this) {
static int (*l_method[5])(void*) = {
(int (*)(void*))phase_0, (int (*)(void*))phase_1, (int (*)(void*))phase_2,
(int (*)(void*))phase_3, (int (*)(void*))phase_4,
};
room_of_scene_class* room = static_cast<room_of_scene_class*>(i_this);
return dComLbG_PhaseHandler(&room->field_0x1c4, l_method, i_this);
}
#pragma pop
/* ############################################################################################## */
/* 803C3274-803C3288 -00001 0014+00 1/0 0/0 0/0 .data l_dScnRoom_Method */
SECTION_DATA static void* l_dScnRoom_Method[5] = {
(void*)dScnRoom_Create__FP11scene_class,
(void*)dScnRoom_Delete__FP19room_of_scene_class,
(void*)dScnRoom_Execute__FP19room_of_scene_class,
(void*)dScnRoom_IsDelete__FP19room_of_scene_class,
(void*)dScnRoom_Draw__FP19room_of_scene_class,
(void*)dScnRoom_Create, (void*)dScnRoom_Delete, (void*)dScnRoom_Execute,
(void*)dScnRoom_IsDelete, (void*)dScnRoom_Draw,
};
/* 803C3288-803C32B0 -00001 0028+00 0/0 0/0 1/0 .data g_profile_ROOM_SCENE */