scannon / scannon_crs / scannon_ten done (#2632)

* scannon done

* scannon_crs done

* scannon_ten done

* pr

* attention debug stuff

* attn flags

* fix build
This commit is contained in:
TakaRikka
2025-09-08 12:01:20 +03:00
committed by GitHub
parent cbe5aaca8f
commit 52aa5f677f
244 changed files with 3067 additions and 3159 deletions
+23
View File
@@ -32,6 +32,29 @@ enum J3DDiffFlag {
J3DDiffFlag_Changed = 0x80000000,
};
#define J3D_DIFF_LIGHTOBJNUM(n) ((n & 0xF) << 4)
#define J3D_DIFF_TEXGENNUM(n) ((n & 0xF) << 8)
#define J3D_DIFF_TEXNONUM(n) ((n & 0xF) << 16)
#define J3D_DIFF_TEVSTAGENUM(n) ((n & 0xF) << 20)
#define J3D_DIFF_FLAG(MatColor, ColorChan, AmbColor, LightNum, TexGenNum, TexGen, TexCoordNum, TevStageNum, TevReg, KColor, TexCoordScale, TevStageInd, Fog, Blend) \
( \
(MatColor << 0) | \
(ColorChan << 1) | \
(AmbColor << 2) | \
((LightNum & 0xF) << 4) | \
((TexGenNum & 0xF) << 8) | \
(TexGen << 12) | \
((TexCoordNum & 0xF) << 16) | \
((TevStageNum & 0xF) << 20) | \
(TevReg << 24) | \
(KColor << 25) | \
(TexCoordScale << 26) | \
(TevStageInd << 27) | \
(Fog << 28) | \
(Blend << 29) \
)
inline u32 getDiffFlag_LightObjNum(u32 diffFlags) {
return (diffFlags & 0xf0) >> 4;
}
+1 -1
View File
@@ -90,7 +90,7 @@ public:
void setDebugFill(bool debugFill) { mDebugFill = debugFill; }
bool getDebugFill() const { return mDebugFill; }
void* getStartAddr() const { return (void*)mStart; }
void* getStartAddr() { return (void*)mStart; }
void* getEndAddr() const { return (void*)mEnd; }
u32 getSize() const { return mSize; }
bool getErrorFlag() const { return mErrorFlag; }
+3 -3
View File
@@ -292,11 +292,11 @@ public:
int chkEvent() {
attention_info.flags = 0;
if (mFlowNodeNum > 0) {
attention_info.flags = 0xa;
attention_info.flags = fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_TALK_e;
}
if (mIsDarkWorld) {
if (daPy_py_c::checkNowWolfEyeUp()) {
attention_info.flags |= 0xc00000;
attention_info.flags |= (fopAc_AttnFlag_UNK_0x800000 | fopAc_AttnFlag_UNK_0x400000);
} else {
attention_info.flags = 0;
}
@@ -314,7 +314,7 @@ public:
}
int orderEvent() {
if ((!mIsDarkWorld || daPy_py_c::checkNowWolfEyeUp()) && mFlowNodeNum > 0 && ((attention_info.flags & 8) || (attention_info.flags & 2))) {
if ((!mIsDarkWorld || daPy_py_c::checkNowWolfEyeUp()) && mFlowNodeNum > 0 && ((attention_info.flags & fopAc_AttnFlag_SPEAK_e) || (attention_info.flags & fopAc_AttnFlag_TALK_e))) {
eventInfo.onCondition(dEvtCnd_CANTALK_e);
}
return 1;
+1 -1
View File
@@ -200,7 +200,7 @@ public:
/* 0xC1C */ u8 field_0xc1c;
u32 fopAcM_checkHawkCarryNow(fopAc_ac_c* param_1) {
return fopAcM_checkStatus(param_1, 0x80000000);
return fopAcM_CheckStatus(param_1, 0x80000000);
}
};
+1 -1
View File
@@ -72,7 +72,7 @@ public:
}
u32 fopAcM_checkHawkCarryNow(fopAc_ac_c* actor) {
return fopAcM_checkStatus(actor, 0x80000000);
return fopAcM_CheckStatus(actor, 0x80000000);
}
void popup(f32 param_1, f32 param_2, cXyz* param_3) {
+64 -14
View File
@@ -11,17 +11,37 @@
* @details
*
*/
class daSCannon_c : public fopAc_ac_c {
class daSCannon_c : public fopAc_ac_c, public request_of_phase_process_class {
public:
struct demoTable_s {
/* 0x0 */ void (daSCannon_c::*(*demo_proc_table)[2])();
/* 0x4 */ char** cut_table;
/* 0x8 */ int cut_num;
};
enum daSCannon_exeMode {
MODE_WAIT,
MODE_ORDER_EVT,
MODE_ACTION_EVT,
MODE_END,
};
enum daSCannon_demoType {
DEMOTYPE_WARP_END,
DEMOTYPE_FIRE_FIRST,
DEMOTYPE_FIRE_TKS,
DEMOTYPE_FIRE_SECOND,
};
/* 80CC6B0C */ daSCannon_c();
/* 80CC6C10 */ ~daSCannon_c();
/* 80CC6D10 */ void create();
/* 80CC7204 */ void execute();
/* 80CC7228 */ void draw();
/* 80CC747C */ void Delete();
/* 80CC6C10 */ virtual ~daSCannon_c();
/* 80CC6D10 */ int create();
/* 80CC7204 */ int execute();
/* 80CC7228 */ int draw();
/* 80CC747C */ int Delete();
/* 80CC7508 */ void setModelMtx();
/* 80CC7578 */ void setPtlModelMtx();
/* 80CC7608 */ void createHeap();
/* 80CC7608 */ int createHeap();
/* 80CC7970 */ void middleExe();
/* 80CC7A10 */ void orderEvtInit();
/* 80CC7AB8 */ void exeModeWait();
@@ -53,15 +73,45 @@ public:
/* 80CC8DA0 */ void delEmtAll();
/* 80CC8DDC */ void setCannonRepair();
static void* const s_demoTable[12];
static u8 s_exeProc[48];
static u8 s_demoExeProc_WarpEnd[48];
static u8 s_demoExeProc_FireTks[72];
static u8 s_demoExeProc_FireFirst[24];
static u8 s_demoExeProc_FireSecond[96];
int getSw1() { return fopAcM_GetParamBit(this, 0, 8); }
int getSw2() { return fopAcM_GetParamBit(this, 8, 8); }
static const demoTable_s s_demoTable[];
static void (daSCannon_c::*s_exeProc[])();
static void (daSCannon_c::*s_demoExeProc_WarpEnd[][2])();
static void (daSCannon_c::*s_demoExeProc_FireTks[][2])();
static void (daSCannon_c::*s_demoExeProc_FireFirst[][2])();
static void (daSCannon_c::*s_demoExeProc_FireSecond[][2])();
private:
/* 0x568 */ u8 field_0x568[0x638 - 0x568];
/* 0x574 */ request_of_phase_process_class mZevPhase;
/* 0x57C */ request_of_phase_process_class mPtlPhase;
/* 0x584 */ mDoExt_bckAnm mBck;
/* 0x5A0 */ cBgS_PolyInfo mGroundPoly;
/* 0x5B0 */ Mtx mBgMtx;
/* 0x5E0 */ dBgW* mpBgW;
/* 0x5E4 */ J3DModel* mpModels[2];
/* 0x5EC */ J3DModel* mpPtlModel;
/* 0x5F0 */ mDoExt_btkAnm* mpCrashBtk;
/* 0x5F4 */ mDoExt_btkAnm* mpPtlBtk;
/* 0x5F8 */ f32 mGroundY;
/* 0x5FC */ u32 mShadowKey;
/* 0x600 */ int mTimer;
/* 0x604 */ int mStaffId;
/* 0x608 */ int mDemoFinishTimer;
/* 0x60C */ int mLayerNo;
/* 0x610 */ s16 mEvtIdx;
/* 0x612 */ u16 mHeadJointNo;
/* 0x614 */ u16 mCrashJointNo;
/* 0x616 */ u8 mMode;
/* 0x617 */ u8 mIsRepaired;
/* 0x618 */ u8 mDemoType;
/* 0x619 */ u8 field_0x619;
/* 0x61A */ u8 mIsPortal;
/* 0x61B */ u8 mDrawShadow;
/* 0x61C */ JPABaseEmitter* mpEmtApp[3];
/* 0x628 */ JPABaseEmitter* mpEmtSmk[3];
/* 0x634 */ JPABaseEmitter* mpEmtLine;
};
STATIC_ASSERT(sizeof(daSCannon_c) == 0x638);
+43 -10
View File
@@ -12,14 +12,23 @@
* @details
*
*/
class daSCannonCrs_c : public fopAc_ac_c {
class daSCannonCrs_c : public fopAc_ac_c, public request_of_phase_process_class {
public:
enum daSCannonCrs_exeMode {
MODE_WAIT,
MODE_PRE_WAIT,
MODE_ORDER_EVT,
MODE_TALK_EVT,
MODE_WARP_EVT,
MODE_END,
};
/* 80CC973C */ daSCannonCrs_c();
/* 80CC983C */ ~daSCannonCrs_c();
/* 80CC9910 */ void create();
/* 80CC9B10 */ void Delete();
/* 80CC9B80 */ void draw();
/* 80CC9C64 */ void execute();
/* 80CC983C */ virtual ~daSCannonCrs_c();
/* 80CC9910 */ int create();
/* 80CC9B10 */ int Delete();
/* 80CC9B80 */ int draw();
/* 80CC9C64 */ int execute();
/* 80CC9CA4 */ void middleExe(daMidna_c*);
/* 80CC9D60 */ void exeModeWait(daMidna_c*);
/* 80CC9F34 */ void exeModePreWait(daMidna_c*);
@@ -30,15 +39,39 @@ public:
/* 80CCA348 */ void demoExe();
/* 80CCA74C */ void init();
/* 80CCA848 */ void setModelMtx();
/* 80CCA8CC */ void createHeap();
/* 80CCAAC4 */ void chkInTalkRange();
/* 80CCA8CC */ int createHeap();
/* 80CCAAC4 */ bool chkInTalkRange();
/* 80CCAB24 */ void initEmtRt(u16, int, u16 const*, JPABaseEmitter**);
/* 80CCAC48 */ void exeEmtRt(u16, int, JPABaseEmitter**);
/* 80CCACD0 */ void callMidnaBeamEmt();
static u8 s_exeProc[72];
int getTalkRange() { return fopAcM_GetParamBit(this, 0, 8); }
int getWarpId() { return fopAcM_GetParamBit(this, 8, 8); }
u16 getMsgId() { return home.angle.x; }
static void (daSCannonCrs_c::*s_exeProc[])(daMidna_c*);
private:
/* 0x568 */ u8 field_0x568[0x674 - 0x568];
/* 0x574 */ cXyz mPortalWaitPos;
/* 0x580 */ dMsgFlow_c mMsgFlow;
/* 0x5CC */ mDoExt_bckAnm mBck;
/* 0x5E8 */ mDoExt_btkAnm mBtk;
/* 0x600 */ J3DModel* mpModel;
/* 0x604 */ dBgW* mpBgW;
/* 0x608 */ Mtx mBgMtx;
/* 0x638 */ f32 mTalkRangeSqDist;
/* 0x63C */ int mStaffId;
/* 0x640 */ int mWarpQuakeTimer;
/* 0x644 */ int mVoiceTimer;
/* 0x648 */ u16 mEffectJointNo;
/* 0x64A */ u16 mCenterJointNo;
/* 0x64C */ s16 mEvtIdx;
/* 0x64E */ u8 mMode;
/* 0x64F */ u8 field_0x64F[0x651 - 0x64F];
/* 0x651 */ u8 field_0x651;
/* 0x652 */ u8 field_0x652;
/* 0x654 */ JPABaseEmitter* mpDisapEmt[4];
/* 0x664 */ JPABaseEmitter* mpBeamEmt[4];
};
STATIC_ASSERT(sizeof(daSCannonCrs_c) == 0x674);
+31 -10
View File
@@ -11,15 +11,22 @@
* @details
*
*/
class daObjSCannonTen_c : public fopAc_ac_c {
class daObjSCannonTen_c : public fopAc_ac_c, public request_of_phase_process_class {
public:
enum daSCannonTen_exeMode {
MODE_WAIT,
MODE_ORDER_EVT,
MODE_ACTION_EVT,
MODE_END,
};
/* 80CCB364 */ daObjSCannonTen_c();
/* 80CCB43C */ ~daObjSCannonTen_c();
/* 80CCB4EC */ void createHeap();
/* 80CCB66C */ void create();
/* 80CCB9E0 */ void Delete();
/* 80CCBA58 */ void draw();
/* 80CCBB6C */ void execute();
/* 80CCB43C */ virtual ~daObjSCannonTen_c();
/* 80CCB4EC */ int createHeap();
/* 80CCB66C */ int create();
/* 80CCB9E0 */ int Delete();
/* 80CCBA58 */ int draw();
/* 80CCBB6C */ int execute();
/* 80CCBB90 */ void middleExe();
/* 80CCBC08 */ void exeModeWait();
/* 80CCBCB0 */ void exeModeOrderEvt();
@@ -48,11 +55,25 @@ public:
/* 80CCC8B8 */ void exeEmtLine();
/* 80CCC97C */ void delEmtAll();
static u8 s_exeProc[48];
static u8 s_demoExeProc[144];
static void (daObjSCannonTen_c::*s_exeProc[])();
static void (daObjSCannonTen_c::*s_demoExeProc[][2])();
private:
/* 0x568 */ u8 field_0x568[0x604 - 0x568];
/* 0x574 */ J3DModel* mpModel;
/* 0x578 */ mDoExt_bckAnm mBck;
/* 0x594 */ dBgW* mpBgW;
/* 0x598 */ cBgS_PolyInfo mGroundPoly;
/* 0x5A8 */ Mtx mBgMtx;
/* 0x5D8 */ f32 mGroundY;
/* 0x5DC */ u32 mShadowKey;
/* 0x5E0 */ int mTimer;
/* 0x5E4 */ int mStaffId;
/* 0x5E8 */ u8 field_0x5E8[0x5EC - 0x5E8];
/* 0x5EC */ s16 mEvtIdx;
/* 0x5EE */ u16 mHeadJointNo;
/* 0x5F0 */ u8 mMode;
/* 0x5F4 */ JPABaseEmitter* mpEmtSmk[3];
/* 0x600 */ JPABaseEmitter* mpEmtLine;
};
STATIC_ASSERT(sizeof(daObjSCannonTen_c) == 0x604);
+25 -5
View File
@@ -4,7 +4,7 @@
#include "SSystem/SComponent/c_angle.h"
#include "m_Do/m_Do_ext.h"
#include "f_pc/f_pc_base.h"
#include "JSystem/JHostIO/JORReflexible.h"
#include "m_Do/m_Do_hostIO.h"
class fopAc_ac_c;
@@ -46,7 +46,7 @@ private:
class dAttParam_c : public JORReflexible {
public:
#ifdef DEBUG
/* 0x04 */ u8 unk_0x4;
/* 0x04 */ s8 mHIOChildNo;
#endif
/* 0x00 */ u16 mFlags;
@@ -67,8 +67,8 @@ public:
/* 0x38 */ f32 field_0x38;
/* 0x3C */ f32 field_0x3c;
#ifdef DEBUG
/* 0x44 */ int unk_0x44;
/* 0x48 */ int unk_0x48;
/* 0x44 */ s32 mDebugDispPosX;
/* 0x48 */ s32 mDebugDispPosY;
#endif
public:
@@ -76,6 +76,14 @@ public:
/* 80070038 */ dAttParam_c(s32);
#ifdef DEBUG
void connectHIO(char* i_name) {
mHIOChildNo = mDoHIO_CREATE_CHILD(i_name, this);
}
void releaseHIO() {
mDoHIO_DELETE_CHILD(mHIOChildNo);
}
virtual void genMessage(JORMContext*);
#endif
/* 80070110 */ virtual ~dAttParam_c();
@@ -90,7 +98,15 @@ public:
EFlag_MARGIN_DEBUG = (1 << 15),
};
bool CheckFlag(u16 flag) { return mFlags & flag; }
bool CheckFlag(u16 flag) { return flag & mFlags ? true : false; }
f32 FreeStick() {
#if DEBUG
return mSWModeDisable;
#else
return -0.9f;
#endif
}
/* 0x40 vtable */
}; // Size: 0x44
@@ -229,6 +245,10 @@ public:
/* 80182AD0 */ void keepLock(int timer) { mAttnBlockTimer = timer; }
/* 8014B010 */ static dist_entry& getDistTable(int i_no) { return dist_table[i_no]; }
#if DEBUG
void runDebugDisp0();
#endif
fopAc_ac_c* getCatghTarget() { return mCatghTarget.getCatghTarget(); }
fopAc_ac_c* getZHintTarget() { return mZHintTarget.getZHintTarget(); }
u8 getCatchChgItem() { return mCatghTarget.getChangeItem(); }
+5 -1
View File
@@ -879,9 +879,13 @@ public:
dSv_player_c& getPlayer() { return mPlayer; }
dSv_event_c& getEvent() { return mEvent; }
dSv_memory_c& getSave(int i_stageNo) { return mSave[i_stageNo]; }
dSv_MiniGame_c& getMiniGame() { return mMiniGame; }
dSv_memory_c& getSave(int i_stageNo) {
JUT_ASSERT(1412, 0 <= i_stageNo && i_stageNo < STAGE_MAX);
return mSave[i_stageNo];
}
void putSave(int i_stageNo, dSv_memory_c mem) {
JUT_ASSERT(1417, 0 <= i_stageNo && i_stageNo < dSv_save_c::STAGE_MAX);
mSave[i_stageNo] = mem;
+1
View File
@@ -1273,6 +1273,7 @@ void dStage_dt_c_roomLoader(void* i_data, dStage_dt_c* stageDt, int param_2);
dStage_KeepDoorInfo* dStage_GetKeepDoorInfo();
dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo();
void dStage_dt_c_fieldMapLoader(void* i_data, dStage_dt_c* i_stage);
const char* dStage_getName(s16 procName, s8 subtype);
#if VERSION == VERSION_WII_USA_R0
void dStage_escapeRestart();
+41 -6
View File
@@ -92,14 +92,54 @@ enum fopAc_attention_type {
fopAc_attn_LOCK_e,
fopAc_attn_TALK_e,
fopAc_attn_BATTLE_e,
#if !PLATFORM_GCN
fopAc_attn_UNK_3,
fopAc_attn_UNK_4,
fopAc_attn_UNK_5,
#endif
fopAc_attn_SPEAK_e,
fopAc_attn_CARRY_e,
fopAc_attn_DOOR_e,
fopAc_attn_JUEL_e,
#if !PLATFORM_GCN
fopAc_attn_UNK_10,
#endif
fopAc_attn_ETC_e,
fopAc_attn_CHECK_e,
fopAc_attn_MAX_e,
};
enum fopAc_AttentionFlag_e {
fopAc_AttnFlag_LOCK_e = (1 << fopAc_attn_LOCK_e),
fopAc_AttnFlag_TALK_e = (1 << fopAc_attn_TALK_e),
fopAc_AttnFlag_BATTLE_e = (1 << fopAc_attn_BATTLE_e),
fopAc_AttnFlag_SPEAK_e = (1 << fopAc_attn_SPEAK_e),
fopAc_AttnFlag_CARRY_e = (1 << fopAc_attn_CARRY_e),
fopAc_AttnFlag_DOOR_e = (1 << fopAc_attn_DOOR_e),
fopAc_AttnFlag_JUEL_e = (1 << fopAc_attn_JUEL_e),
fopAc_AttnFlag_ETC_e = (1 << fopAc_attn_ETC_e),
fopAc_AttnFlag_CHECK_e = (1 << fopAc_attn_CHECK_e),
fopAc_AttnFlag_UNK_0x200000 = 0x200000,
fopAc_AttnFlag_UNK_0x400000 = 0x400000,
fopAc_AttnFlag_UNK_0x800000 = 0x800000,
fopAc_AttnFlag_NOTALK_e = 0x2000000,
fopAc_AttnFlag_ENEMY_NOLOCK_e = 0x4000000,
fopAc_AttnFlag_UNK_0x8000000 = 0x8000000,
fopAc_AttnFlag_TALKCHECK_e = 0x20000000,
fopAc_AttnFlag_TALKREAD_e = 0x40000000,
};
#define fopAc_AttnFlags_LOCK (fopAc_AttnFlag_LOCK_e | fopAc_AttnFlag_TALK_e | fopAc_AttnFlag_BATTLE_e)
#define fopAc_AttnFlags_ACTION (fopAc_AttnFlag_SPEAK_e | fopAc_AttnFlag_CARRY_e | fopAc_AttnFlag_DOOR_e | fopAc_AttnFlag_JUEL_e | fopAc_AttnFlag_ETC_e)
class JKRSolidHeap;
enum dEvt_Command_e {
@@ -175,12 +215,7 @@ struct actor_place {
};
struct actor_attention_types {
/* 0x00 */ u8 distances[9];
#if VERSION > VERSION_GCN_JPN
u8 unk_0x9[4];
#endif
/* 0x00 */ u8 distances[fopAc_attn_MAX_e];
/* 0x0A */ s16 field_0xa;
/* 0x0C */ cXyz position;
/* 0x18 */ u32 flags;
+3 -3
View File
@@ -161,7 +161,7 @@ inline MtxP fopAcM_GetMtx(const fopAc_ac_c* i_actor) {
return i_actor->cullMtx;
}
inline u32 fopAcM_checkStatus(fopAc_ac_c* i_actor, u32 actor_status) {
inline u32 fopAcM_CheckStatus(fopAc_ac_c* i_actor, u32 actor_status) {
return i_actor->actor_status & actor_status;
}
@@ -186,7 +186,7 @@ inline u32 fopAcM_CheckCarryType(const fopAc_ac_c* actor, fopAcM_CARRY type) {
}
inline u32 fopAcM_checkHookCarryNow(fopAc_ac_c* i_actor) {
return fopAcM_checkStatus(i_actor, fopAcM_STATUS_HOOK_CARRY_NOW);
return fopAcM_CheckStatus(i_actor, fopAcM_STATUS_HOOK_CARRY_NOW);
}
inline u32 fopAcM_GetParam(const void* i_actor) {
@@ -818,7 +818,7 @@ inline void fopAcM_setWarningMessage_f(const fopAc_ac_c* i_actor, const char* i_
#define fopAcM_setWarningMessage(...)
#endif
void fopAcM_getNameString(fopAc_ac_c*, char*);
void fopAcM_getNameString(const fopAc_ac_c*, char*);
class fopAcM_lc_c {
public: