diff --git a/config/RZDE01_00/symbols.txt b/config/RZDE01_00/symbols.txt
index ee0751a3d2..311ff1fdc7 100644
--- a/config/RZDE01_00/symbols.txt
+++ b/config/RZDE01_00/symbols.txt
@@ -10518,8 +10518,8 @@ Cos__7cSAngleCFv = .text:0x80259FFC; // type:function size:0x4C scope:global ali
__mi__7cSAngleCFv = .text:0x8025A048; // type:function size:0x10 scope:global align:4
__pl__7cSAngleCFRC7cSAngle = .text:0x8025A058; // type:function size:0x14 scope:global align:4
__mi__7cSAngleCFRC7cSAngle = .text:0x8025A06C; // type:function size:0x14 scope:global align:4
-__apl__7cSAngleFR7cSAngle = .text:0x8025A080; // type:function size:0x14 scope:global align:4
-__ami__7cSAngleFR7cSAngle = .text:0x8025A094; // type:function size:0x14 scope:global align:4
+__apl__7cSAngleFRC7cSAngle = .text:0x8025A080; // type:function size:0x14 scope:global align:4
+__ami__7cSAngleFRC7cSAngle = .text:0x8025A094; // type:function size:0x14 scope:global align:4
__pl__7cSAngleCFs = .text:0x8025A0A8; // type:function size:0x10 scope:global align:4
__mi__7cSAngleCFs = .text:0x8025A0B8; // type:function size:0x10 scope:global align:4
__apl__7cSAngleFs = .text:0x8025A0C8; // type:function size:0x10 scope:global align:4
diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt
index c60a58ff9f..8f67cc379d 100644
--- a/config/ShieldD/symbols.txt
+++ b/config/ShieldD/symbols.txt
@@ -64475,7 +64475,7 @@ lbl_8074C86D = .sbss:0x8074C86D; // type:object size:0x1 data:byte hash:0xE376DC
@LOCAL@listenPropertyEvent__10dEvM_HIO_cFPC16JORPropertyEvent@debug_data = .sbss:0x8074C878; // type:object size:0x4 scope:local data:4byte hash:0x8C84444C dhash:0xA4EAC8E3
l_HIO_before = .sbss:0x8074C880; // type:object size:0x4 scope:global data:4byte hash:0x3759C8DE
l_HIO_top = .sbss:0x8074C884; // type:object size:0x4 scope:global data:4byte hash:0xCA8DD4EC
-l_debugMode = .sbss:0x8074C888; // type:object size:0x4 scope:global data:4byte hash:0x5F325704
+l_debugMode = .sbss:0x8074C888; // type:object size:0x4 scope:local data:4byte hash:0x5F325704
l_jumpTop = .sbss:0x8074C88C; // type:object size:0x4 scope:global align:4 data:float hash:0xEC66737F
lbl_8074C890 = .sbss:0x8074C890; // type:object size:0x1 data:byte hash:0xB74E392C dhash:0xBD2F6E4C
lbl_8074C891 = .sbss:0x8074C891; // type:object size:0x1 data:byte hash:0xC3C1301D dhash:0xBD2F6E4C
@@ -64526,16 +64526,16 @@ m_dropAngleY__20daPy_boomerangMove_c = .sbss:0x8074C914; // type:object size:0x2
m_eventKeepFlg__20daPy_boomerangMove_c = .sbss:0x8074C916; // type:object size:0x2 scope:global data:2byte hash:0x7AB48561 dhash:0x0892FF43
Stage__22@unnamed@d_camera_cpp@ = .sbss:0x8074C918; // type:object size:0x4 scope:global data:4byte hash:0xB45C73E7 dhash:0xC45A5407
WideTurnSaving__22@unnamed@d_camera_cpp@ = .sbss:0x8074C91C; // type:object size:0x4 scope:global align:4 data:float hash:0xA4CEF485 dhash:0x54B4F3A5
-lbl_8074C920 = .sbss:0x8074C920; // type:object size:0x1 data:byte hash:0x88EE1272 dhash:0xF8A332E3
-@LOCAL@chaseCamera__9dCamera_cFl@LatitudeLimitMax@4 = .sbss:0x8074C924; // type:object size:0x2 scope:local hash:0x63D10E5A dhash:0xE67A53CB
-lbl_8074C926 = .sbss:0x8074C926; // type:object size:0x1 data:byte hash:0x334E5811 dhash:0xB5076729
+l_debugMode = .sbss:0x8074C920; // type:object size:0x4 scope:local data:4byte hash:0x88EE1272 dhash:0xF8A332E3
+@LOCAL@chaseCamera__9dCamera_cFl@LatitudeLimitMax@0 = .sbss:0x8074C924; // type:object size:0x2 scope:local hash:0x63D10E5A dhash:0xE67A53CB
+@GUARD@railCamera__9dCamera_cFl@_120 = .sbss:0x8074C926; // type:object size:0x1 data:byte hash:0x334E5811 dhash:0xB5076729
@LOCAL@railCamera__9dCamera_cFl@_120 = .sbss:0x8074C928; // type:object size:0x2 scope:local hash:0x24055AF9 dhash:0x18F891C1
-lbl_8074C92A = .sbss:0x8074C92A; // type:object size:0x1 data:byte hash:0xBCB1D8B3 dhash:0xAAE861CB
+@GUARD@paraRailCamera__9dCamera_cFl@_120 = .sbss:0x8074C92A; // type:object size:0x1 data:byte hash:0xBCB1D8B3 dhash:0xAAE861CB
@LOCAL@paraRailCamera__9dCamera_cFl@_120 = .sbss:0x8074C92C; // type:object size:0x2 scope:local hash:0x234ABD5B dhash:0xA108EAA3
-lbl_8074C92E = .sbss:0x8074C92E; // type:object size:0x1 data:byte hash:0xDA185670 dhash:0xE724A005
-@LOCAL@rideCamera__9dCamera_cFl@LatMin@2 = .sbss:0x8074C930; // type:object size:0x2 scope:local hash:0xC57ADB58 dhash:0xC35AA72D
-lbl_8074C932 = .sbss:0x8074C932; // type:object size:0x1 data:byte hash:0xDA14946F dhash:0xE724A005
-@LOCAL@rideCamera__9dCamera_cFl@LatMax@3 = .sbss:0x8074C934; // type:object size:0x2 scope:local hash:0xC57F5747 dhash:0xC35AA72D
+@GUARD@rideCamera__9dCamera_cFl@LatMin = .sbss:0x8074C92E; // type:object size:0x1 data:byte hash:0xDA185670 dhash:0xE724A005
+@LOCAL@rideCamera__9dCamera_cFl@LatMin = .sbss:0x8074C930; // type:object size:0x2 scope:local hash:0xC57ADB58 dhash:0xC35AA72D
+@GUARD@rideCamera__9dCamera_cFl@LatMax@0 = .sbss:0x8074C932; // type:object size:0x1 data:byte hash:0xDA14946F dhash:0xE724A005
+@LOCAL@rideCamera__9dCamera_cFl@LatMax@0 = .sbss:0x8074C934; // type:object size:0x2 scope:local hash:0xC57F5747 dhash:0xC35AA72D
sInstance__31JASGlobalInstance<10Z2Audience> = .sbss:0x8074C938; // type:object size:0x4 scope:global data:4byte hash:0xEDAF4FB8 dhash:0xC8923EFB
@LOCAL@titleMsgCheck__14dFile_select_cFv@charspaceU@5 = .sbss:0x8074C940; // type:object size:0x8 scope:local hash:0xBAC0AB57 dhash:0x3D4E40C7
@LOCAL@headerTxtSet__14dFile_select_cFUsUcUc@charspace@1 = .sbss:0x8074C948; // type:object size:0x8 scope:local hash:0xAF32C5AC dhash:0x2E781072
diff --git a/include/SSystem/SComponent/c_m3d_g_pla.h b/include/SSystem/SComponent/c_m3d_g_pla.h
index 2fc7463a4d..7f25724b55 100644
--- a/include/SSystem/SComponent/c_m3d_g_pla.h
+++ b/include/SSystem/SComponent/c_m3d_g_pla.h
@@ -22,7 +22,7 @@ public:
virtual ~cM3dGPla() {}
- f32 getPlaneFunc(const Vec* pPoint) const { return mD + VECDotProduct(&mNormal, pPoint); }
+ f32 getPlaneFunc(const Vec* pPoint) const { return mD + PSVECDotProduct(&mNormal, pPoint); }
cXyz* GetNP() { return &mNormal; }
const cXyz* GetNP() const { return &mNormal; }
f32 GetD() const { return mD; }
diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h
index 418aec0e84..a4debb71d2 100644
--- a/include/d/actor/d_a_alink.h
+++ b/include/d/actor/d_a_alink.h
@@ -7435,7 +7435,7 @@ public:
bool checkHorseRideOn() const { return mProcID == PROC_HORSE_RIDE; }
bool checkHorseTurnMode() const { return mProcID == PROC_HORSE_TURN; }
bool checkGrabUp() const { return mProcID == PROC_GRAB_UP; }
- bool checkSpinnerRideWait() const {
+ s16 checkSpinnerRideWait() const {
return mProcID == PROC_SPINNER_WAIT && mProcVar2.field_0x300c == 0;
}
bool checkCopyRodSwingMode() { return mProcID == PROC_COPY_ROD_SWING; }
diff --git a/include/d/actor/d_a_e_rb.h b/include/d/actor/d_a_e_rb.h
index 8b1a3208bb..35dfecf410 100644
--- a/include/d/actor/d_a_e_rb.h
+++ b/include/d/actor/d_a_e_rb.h
@@ -2,6 +2,7 @@
#define D_A_E_RB_H
#include "f_op/f_op_actor_mng.h"
+#include "m_Do/m_Do_ext.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
#include "d/d_bg_s_acch.h"
diff --git a/include/d/actor/d_a_e_ws.h b/include/d/actor/d_a_e_ws.h
index 88df8f29a4..c7b6ae5c58 100644
--- a/include/d/actor/d_a_e_ws.h
+++ b/include/d/actor/d_a_e_ws.h
@@ -2,6 +2,7 @@
#define D_A_E_WS_H
#include "f_op/f_op_actor_mng.h"
+#include "m_Do/m_Do_ext.h"
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_cc_uty.h"
diff --git a/include/d/d_cam_param.h b/include/d/d_cam_param.h
index 5684ae3fa7..c3da29d8bd 100644
--- a/include/d/d_cam_param.h
+++ b/include/d/d_cam_param.h
@@ -1,6 +1,7 @@
#ifndef D_D_CAM_PARAM_H
#define D_D_CAM_PARAM_H
+#include "JSystem/JHostIO/JORFile.h"
#include "SSystem/SComponent/c_angle.h"
struct dCamMath {
@@ -11,24 +12,44 @@ struct dCamMath {
static f32 xyzHorizontalDistance(cXyz&, cXyz&);
};
-class dCstick_c {
+class dCstick_c
+#if DEBUG
+ : public JORReflexible
+#endif
+{
public:
dCstick_c();
bool Shift(u32);
/* 0x0 */ f32 mThresholdLow;
/* 0x4 */ f32 mThresholdHigh;
- /* 0x8 */ int mInputSpeed;
- /* 0xC */ u8 field_0xc[4];
+ /* 0x8 */ s32 mInputSpeed;
+ /* 0xC */ u16 mIsDebugDisplay;
+#if DEBUG
+ /* 0x10 */ s32 mDisplayPosX;
+ /* 0x14 */ s32 mDisplayPosY;
+#endif
virtual ~dCstick_c() {}
+#if DEBUG
+ virtual void genMessage(JORMContext*);
+#endif
+
+ bool CheckFlag(u16 i_flag) {
+ return (i_flag & mIsDebugDisplay) ? true : false;
+ }
f32 SwTHH() { return mThresholdHigh; }
};
-class dCamBGChk_c {
+class dCamBGChk_c
+#if DEBUG
+ : public JORReflexible
+#endif
+{
public:
dCamBGChk_c();
+ ~dCamBGChk_c() {}
f32 WallUpDistance() { return mWallUpDistance; }
f32 FwdDistance(s32 param_0) { return mChkInfo[param_0].mDistance; }
@@ -44,6 +65,10 @@ public:
f32 CornerAngleMax() { return mCornerAngleMax; }
f32 FloorMargin() { return mFloorMargin; }
+#if DEBUG
+ virtual void genMessage(JORMContext*);
+#endif
+
// name is a guess for now
struct ChkInfo {
/* 0x0 */ f32 mDistance;
@@ -67,10 +92,10 @@ public:
struct dCamStyleData {
struct StyleData {
- /* 0x0 */ u32 field_0x0;
+ /* 0x0 */ s32 field_0x0;
/* 0x4 */ u16 field_0x4;
- /* 0x6 */ u16 field_0x6;
- /* 0x8 */ f32 field_0x8[28];
+ /* 0x6 */ u16 mFlags;
+ /* 0x8 */ f32 mParams[28];
}; // Size: 0x78
/* 0x0 */ u8 field_0x0[4];
@@ -78,7 +103,11 @@ struct dCamStyleData {
/* 0x8 */ StyleData* mStyleData;
};
-class dCamParam_c {
+class dCamParam_c
+#if DEBUG
+ : public JORReflexible
+#endif
+{
public:
dCamParam_c(s32);
int Change(s32);
@@ -92,40 +121,56 @@ public:
void Arg0(u8 val) { mMapToolArg0 = val; }
void Fovy(u8 val) { mMapToolFovy = val; }
u8 Fovy() { return mMapToolFovy; }
- bool CheckFlag(u16 flag) { return (flag & mCurrentStyle->field_0x6) != 0; }
+ bool CheckFlag(u16 flag) { return (flag & mCurrentStyle->mFlags) != 0 ? true : false; }
f32 Val(s32 param_0, int param_1) {
- return mCamStyleData[param_0].field_0x8[param_1];
+ return mCamStyleData[param_0].mParams[param_1];
}
void SetVal(s32 param_0, int param_1, f32 i_value) {
- mCamStyleData[param_0].field_0x8[param_1] = i_value;
+ mCamStyleData[param_0].mParams[param_1] = i_value;
}
- /* 0x00 */ u8 mMapToolFovy;
- /* 0x01 */ u8 mMapToolArg0;
- /* 0x02 */ u8 mMapToolArg1;
- /* 0x04 */ int mMapToolArg2;
- /* 0x08 */ dCamStyleData::StyleData* mCamStyleData;
- /* 0x0C */ s32 mStyleNum;
- /* 0x10 */ dCamStyleData::StyleData* mCurrentStyle;
- /* 0x14 */ int mStyleID;
- /* 0x18 */ u8 field_0x18[4];
+ /* 0x02 */ u8 mMapToolFovy;
+ /* 0x03 */ u8 mMapToolArg0;
+ /* 0x04 */ u8 mMapToolArg1;
+ /* 0x08 */ s32 mMapToolArg2;
+ /* 0x0C */ dCamStyleData::StyleData* mCamStyleData;
+ /* 0x10 */ s32 mStyleNum;
+ /* 0x14 */ dCamStyleData::StyleData* mCurrentStyle;
+ /* 0x18 */ s32 mStyleID;
+ /* 0x1C */ u16 field_0x1c;
+ /* 0x1E */ s8 mpHIOChild;
+#if DEBUG
+ /* 0x20 */ JORFile mFile;
+#endif
u32 Id(s32 i_style) { return mCamStyleData[i_style].field_0x0; }
int Algorythmn(s32 i_style) { return mCamStyleData[i_style].field_0x4; }
int Algorythmn() { return mCurrentStyle->field_0x4; }
- u16 Flag(s32 param_0, u16 param_1) { return mCamStyleData[param_0].field_0x6 & param_1; }
- void SetFlag(u16 i_flag) { mCurrentStyle->field_0x6 |= i_flag; }
+ u16 Flag(s32 param_0, u16 param_1) { return mCamStyleData[param_0].mFlags & param_1; }
+ void SetFlag(u16 i_flag) { mCurrentStyle->mFlags |= i_flag; }
virtual ~dCamParam_c();
+#if DEBUG
+ virtual void genMessage(JORMContext*);
+ virtual void listenPropertyEvent(const JORPropertyEvent*);
+ int writeParamXML();
+ void OpenFile();
+ void PrintFile(char*, ...);
+ void CloseFile();
+#endif
};
-class dCamSetup_c {
+class dCamSetup_c
+#if DEBUG
+ : public JORReflexible
+#endif
+{
public:
dCamSetup_c();
bool CheckLatitudeRange(s16*);
f32 PlayerHideDist();
- bool CheckFlag2(u16 i_flag) { return (i_flag & mFlags2) != 0; }
+ bool CheckFlag2(u16 i_flag) { return (i_flag & mFlags2) != 0 ? true : false; }
f32 WaitRollSpeed() { return mWaitRollSpeed; }
int WaitRollTimer() { return mWaitRollTimer; }
int ThrowTimer() { return mThrowTimer; }
@@ -155,16 +200,30 @@ public:
f32 CurveWeight() { return mCurveWeight; }
s16 MapToolCameraLongTimer() { return mMapToolCamLongTimer; }
s16 MapToolCameraShortTimer() { return mMapToolCamShortTimer; }
+ void SetTypeTable(void* i_typeTable, s32 i_typeNum) {
+ mTypeTable = i_typeTable;
+ mTypeNum = i_typeNum;
+ }
+ s32 ForceType() { return mForceType; }
+ s32 ModeSwitchType() { return mModeSwitchType; }
+ f32 Far() { return mDrawFar; }
+ f32 Near() { return mDrawNear; }
+
+#if DEBUG
+ virtual ~dCamSetup_c();
+
+ virtual void genMessage(JORMContext*);
+#endif
/* 0x000 */ f32 mDrawNear;
/* 0x004 */ f32 mDrawFar;
/* 0x008 */ u16 mDebugFlags;
/* 0x00A */ u16 mFlags2;
/* 0x00C */ int field_0xc;
- /* 0x010 */ int mModeSwitchType;
+ /* 0x010 */ s32 mModeSwitchType;
/* 0x014 */ void* mTypeTable;
- /* 0x018 */ int mTypeNum;
- /* 0x01C */ int mForceType;
+ /* 0x018 */ s32 mTypeNum;
+ /* 0x01C */ s32 mForceType;
/* 0x020 */ f32 mCusCus;
/* 0x024 */ f32 field_0x24;
/* 0x028 */ f32 field_0x28;
@@ -186,7 +245,7 @@ public:
/* 0x068 */ f32 mTrimCineScopeHeight;
/* 0x06C */ f32 field_0x6c;
/* 0x070 */ f32 mForceLockOffDist;
- /* 0x074 */ int mForceLockOffTimer;
+ /* 0x074 */ s32 mForceLockOffTimer;
/* 0x078 */ f32 field_0x78;
/* 0x07C */ f32 field_0x7c;
/* 0x080 */ f32 field_0x80;
@@ -194,7 +253,7 @@ public:
/* 0x088 */ f32 mThrowVAngle;
/* 0x08C */ f32 mThrowCtrOffset;
/* 0x090 */ f32 mThrowCushion;
- /* 0x094 */ int mThrowTimer;
+ /* 0x094 */ s32 mThrowTimer;
/* 0x098 */ f32 mWindShakeCtr;
/* 0x09C */ f32 field_0x9c;
/* 0x0A0 */ f32 mWindShakeFvy;
@@ -206,9 +265,9 @@ public:
/* 0x0B8 */ f32 mManualStartCThreshold;
/* 0x0BC */ f32 mManualEndVal;
/* 0x0C0 */ f32 mChargeLatitude;
- /* 0x0C4 */ int mChargeTimer;
+ /* 0x0C4 */ s32 mChargeTimer;
/* 0x0C8 */ f32 mChargeBRatio;
- /* 0x0CC */ int mLockonChangeTimer;
+ /* 0x0CC */ s32 mLockonChangeTimer;
/* 0x0D0 */ f32 mLockonChangeCushion;
/* 0x0D4 */ f32 field_0xd4;
/* 0x0D8 */ f32 field_0xd8;
@@ -223,8 +282,13 @@ public:
/* 0x0F8 */ f32 field_0xf8;
/* 0x0FC vtable */
+#if !DEBUG
virtual ~dCamSetup_c();
+#endif
+#if DEBUG
+ /* 0x100 */ s8 mpHIOChild;
+#endif
/* 0x100 */ dCstick_c mCStick;
/* 0x114 */ dCamBGChk_c mBGChk;
/* 0x15C */ f32 field_0x15c;
@@ -232,9 +296,9 @@ public:
/* 0x164 */ int mWaitRollTimer;
/* 0x168 */ f32 mWaitRollSpeed;
/* 0x16C */ f32 field_0x16c;
- /* 0x170 */ int mScreensaverFirstWaitTimer;
- /* 0x174 */ int mScreensaverWaitTimer;
- /* 0x178 */ int mScreensaverExecTimer;
+ /* 0x170 */ s32 mScreensaverFirstWaitTimer;
+ /* 0x174 */ s32 mScreensaverWaitTimer;
+ /* 0x178 */ s32 mScreensaverExecTimer;
};
#endif /* D_D_CAM_PARAM_H */
diff --git a/include/d/d_camera.h b/include/d/d_camera.h
index d3b6604d03..5b7f46ea5e 100644
--- a/include/d/d_camera.h
+++ b/include/d/d_camera.h
@@ -32,8 +32,7 @@ struct dCamMapToolData {
}
void Clr() {
- mArrowIndex = 0xFF;
- mCameraIndex = 0xFF;
+ mCameraIndex = mArrowIndex = 0xFF;
mFlags = 0;
mpActor = NULL;
mPathId = 0xFF;
@@ -59,7 +58,7 @@ struct dCamForcusLine {
/* 0x38 */ cXyz field_0x38;
/* 0x44 */ GXColor field_0x44;
/* 0x48 */ u8 field_0x48;
- /* 0x49 */ u8 field_0x49;
+ /* 0x49 */ bool field_0x49;
/* 0x4C */ int field_0x4c;
/* 0x50 */ int field_0x50;
/* 0x54 */ int field_0x54;
@@ -73,17 +72,11 @@ struct dCamForcusLine {
/* 0x6C */ f32 field_0x6c;
};
-struct dCamera_FakeAngle_system {
- /* 0x0 */ u8 field_0x0;
- /* 0x2 */ cSAngle field_0x2;
- /* 0x4 */ cSAngle field_0x4;
-};
-
-struct dCamera_monitoring_things {
- /* 0x00 */ cXyz field_0x0;
- /* 0x0C */ f32 field_0xc;
- /* 0x10 */ f32 field_0x10;
- /* 0x14 */ cXyz field_0x14;
+struct UnkManualCameraParam {
+ f32 r;
+ f32 v;
+ f32 u;
+ f32 fov;
};
struct dCamera_event_param {
@@ -92,23 +85,6 @@ struct dCamera_event_param {
/* 0x14 */ int value;
};
-struct dCamera_event_data {
- /* 0x000 */ u8 field_0x0;
- /* 0x004 */ int mStaffIdx;
- /* 0x008 */ int field_0x8;
- /* 0x00C */ int field_0xc;
- /* 0x010 */ u8 field_0x10;
- /* 0x014 */ int field_0x14;
- /* 0x018 */ int field_0x18;
- /* 0x01C */ int field_0x1c;
- /* 0x020 */ int field_0x20;
- /* 0x024 */ int field_0x24;
- /* 0x028 */ u8 field_0x28[0x2C - 0x28];
- /* 0x02C */ dCamera_event_param mEventParams[8];
- /* 0x0EC */ dStage_MapEvent_dt_c* field_0xec;
- /* 0x0F0 */ d2DBSplinePath field_0xf0;
-}; // Size: 0x124
-
struct dCamera_type_data {
/* 0x00 */ char name[24];
/* 0x18 */ s16 field_0x18[2][11];
@@ -170,22 +146,46 @@ public:
/* 0x1C */ _stick mCStick;
};
+ struct dCamera_event_data {
+ /* 0x000 */ u8 field_0x0;
+ /* 0x004 */ int mStaffIdx;
+ /* 0x008 */ int field_0x8;
+ /* 0x00C */ int field_0xc;
+ /* 0x010 */ u8 field_0x10;
+ /* 0x014 */ int field_0x14;
+ /* 0x018 */ int field_0x18;
+ /* 0x01C */ int field_0x1c;
+ /* 0x020 */ int field_0x20;
+ /* 0x024 */ int field_0x24;
+ /* 0x028 */ u8 field_0x28[0x2C - 0x28];
+ /* 0x02C */ dCamera_event_param mEventParams[8];
+ /* 0x0EC */ dStage_MapEvent_dt_c* field_0xec;
+ /* 0x0F0 */ d2DBSplinePath field_0xf0;
+ }; // Size: 0x124
+
+ struct dCamera_monitoring_things {
+ /* 0x00 */ cXyz field_0x0;
+ /* 0x0C */ f32 field_0xc;
+ /* 0x10 */ f32 field_0x10;
+ /* 0x04 */ struct {
+ /* 0x00 */ cXyz field_0x0;
+ } field_0x14;
+ };
+
+ struct dCamera_FakeAngle_system {
+ /* 0x0 */ u8 field_0x0;
+ /* 0x2 */ cSAngle field_0x2;
+ /* 0x4 */ cSAngle field_0x4;
+ };
+
struct BG {
- class {
- public:
+ struct {
/* 0x00 */ bool field_0x0;
/* 0x04 */ dBgS_CamGndChk field_0x4;
/* 0x58 */ f32 field_0x58;
- } /* 0x000 */ field_0x0;
- class {
- public:
- /* 0x00 */ bool field_0x0;
- /* 0x04 */ dBgS_CamGndChk field_0x4;
- /* 0x58 */ f32 field_0x58;
- } /* 0x05C */ field_0x5c;
+ } /* 0x000 */ field_0x0, field_0x5c;
/* 0x0B8 */ u8 field_0xb8[0xC0 - 0xB8];
- class {
- public:
+ struct {
/* 0x00 */ u8 field_0x0;
/* 0x01 */ u8 field_0x1;
/* 0x04 */ cXyz field_0x4;
@@ -201,8 +201,7 @@ public:
/* 0x40 */ int field_0x40;
/* 0x44 */ u8 field_0x44;
} /* 0x0C0 */ field_0xc0;
- class {
- public:
+ struct {
/* 0x0 */ int field_0x0;
/* 0x4 */ f32 field_0x4;
/* 0x8 */ cXyz field_0x8;
@@ -875,6 +874,23 @@ public:
/* 0xA0 */ fopAc_ac_c* field_0xa0;
};
+ struct ManualData {
+ int field_0x00;
+ cXyz field_0x04;
+ cXyz field_0x10;
+ f32 field_0x1c;
+ f32 field_0x20;
+ int field_0x24;
+ u8 field_0x28;
+ f32 field_0x2c;
+ cSGlobe field_0x30;
+ f32 field_0x38;
+ f32 field_0x3c;
+ int field_0x40;
+ cSAngle field_0x44;
+ f32 field_0x48;
+ };
+
int StartEventCamera(int, int, ...);
int EndEventCamera(int);
int searchEventArgData(char*);
@@ -940,6 +956,7 @@ public:
void updateMonitor();
bool checkForceLockTarget();
void infoReport();
+ void debugDrawInit();
bool Run();
bool NotRun();
s16 V();
@@ -948,6 +965,9 @@ public:
bool SetTrimTypeForce(s32);
void CalcTrimSize();
int Draw();
+ void debugDraw();
+ int debugDrawPoint(cXyz&);
+ int debugDrawLine(cXyz&, cXyz&);
void setStageMapToolData();
void setMapToolData();
void SetTagData(fopAc_ac_c*, s32, u16, u8);
@@ -973,6 +993,10 @@ public:
bool pointInSight(cXyz*);
f32 radiusActorInSight(fopAc_ac_c*, fopAc_ac_c*, fopAc_ac_c*);
f32 radiusActorInSight(fopAc_ac_c*, fopAc_ac_c*, cXyz*, cXyz*, f32, s16, f32);
+ f32 radiusActorInSight(fopAc_ac_c* param_0, fopAc_ac_c* param_1) {
+ return radiusActorInSight(param_0, param_1, &mViewCache.mCenter, &mViewCache.mEye, mFovy,
+ mBank, 0.05f);
+ }
f32 groundHeight(cXyz*);
bool lineBGCheck(cXyz*, cXyz*, dBgS_LinChk*, u32);
bool lineBGCheck(cXyz*, cXyz*, u32);
@@ -1046,8 +1070,6 @@ public:
cXyz talkBasePos(fopAc_ac_c* i_actor) { return i_actor->current.pos; }
cXyz talkEyePos(fopAc_ac_c* i_actor) { return i_actor->eyePos; }
- void debugDraw();
-
int CameraID() { return mCameraID; }
bool Active() { return mCurState == 0; }
@@ -1062,7 +1084,7 @@ public:
u32 setFlag(u32 i_flag) { return mEventFlags |= i_flag; }
u32 clrFlag(u32 i_flag) { return mEventFlags &= ~i_flag; }
- bool CheckFlag(u32 i_flag) { return mEventFlags & i_flag; }
+ bool CheckFlag(u32 i_flag) { return (mEventFlags & i_flag) != 0 ? true : false; }
void ResetView() { setView(0.0f, 0.0f, FB_WIDTH, FB_HEIGHT); }
@@ -1114,12 +1136,25 @@ public:
int Gear() { return mGear; }
+ bool HideBGPartsOK() {
+ return chkFlag(0x4);
+ }
+
+ f32 Near4Debug() {
+ return mCamSetup.Near();
+ }
+ f32 Far4Debug() {
+ return mCamSetup.Far();
+ }
+
static engine_fn engine_tbl[];
/* 0x000 */ camera_class* field_0x0;
#if DEBUG
cXyz dbg_field_0x04[16];
- u8 dbg_field_c4[0xDC - 0xC4];
+ s8 dbg_field_0xc4[0x10];
+ u32 dbg_field_0xd4;
+ int dbg_field_0xd8;
#endif
struct {
/* 0x00 */ int mRoomNo;
@@ -1144,6 +1179,11 @@ public:
/* 0x14 */ cXyz mEye;
/* 0x20 */ cSAngle mBank;
/* 0x24 */ f32 mFovy;
+#if defined(__MWERKS__) && __MWERKS__ < 0x4200
+ // Static data members in an anonymous class are illegal in C++, but MWCC for GC accepts it.
+ // However, MWCC for Wii does not so this was removed for the Shield release.
+ static const int PatternLengthMax = 4;
+#endif
}
/* 0x05C */ mViewCache;
/* 0x084 */ f32 field_0x84;
@@ -1181,7 +1221,8 @@ public:
/* 0x168 */ u8 field_0x168;
/* 0x16C */ int field_0x16c;
/* 0x170 */ u32 field_0x170;
- /* 0x174 */ u32 mCurCamStyleTimer; // this might be a signed int in ShieldD
+ /* 0x174 */ u32 mCurCamStyleTimer; // something is weird about this field - it's sometimes (but
+ // not always) treated as signed in ShieldD specifically
/* 0x178 */ u32 mCameraID;
/* 0x17C */ u32 mPadID;
/* 0x180 */ fopAc_ac_c* mpPlayerActor;
@@ -1205,16 +1246,16 @@ public:
/* 0x1FC */ int mCStickUpLatch;
/* 0x200 */ f32 mTriggerLeftLast;
/* 0x204 */ f32 mTriggerLeftDelta;
- /* 0x208 */ u8 mHoldLockL;
- /* 0x209 */ u8 mTrigLockL;
- /* 0x20A */ u8 mLockLActive;
- /* 0x20B */ u8 mLockLJustActivated;
+ /* 0x208 */ bool mHoldLockL;
+ /* 0x209 */ bool mTrigLockL;
+ /* 0x20A */ bool mLockLActive;
+ /* 0x20B */ bool mLockLJustActivated;
/* 0x20C */ f32 mTriggerRightLast;
/* 0x210 */ f32 mTriggerRightDelta;
- /* 0x214 */ u8 mHoldLockR;
- /* 0x215 */ u8 mTrigLockR;
- /* 0x216 */ u8 mLockRActive;
- /* 0x217 */ u8 mLockRJustActivated;
+ /* 0x214 */ bool mHoldLockR;
+ /* 0x215 */ bool mTrigLockR;
+ /* 0x216 */ bool mLockRActive;
+ /* 0x217 */ bool mLockRJustActivated;
/* 0x218 */ bool mHoldX;
/* 0x219 */ bool mTrigX;
/* 0x21A */ bool mHoldY;
@@ -1324,9 +1365,6 @@ public:
/* 0x968 */ f32 field_0x968;
/* 0x96C */ f32 field_0x96c;
/* 0x970 */ dCamSetup_c mCamSetup;
-#if DEBUG
- u8 unk_debug_0xbc4[0x10];
-#endif
/* 0xAEC */ dCamParam_c mCamParam;
/* 0xB0C */ u8 field_0xb0c;
/* 0xB0D */ u8 field_0xb0d[0xd58 - 0xb0d];
diff --git a/include/d/d_debug_camera.h b/include/d/d_debug_camera.h
index 600e1beb10..d5cd7403ac 100644
--- a/include/d/d_debug_camera.h
+++ b/include/d/d_debug_camera.h
@@ -13,6 +13,8 @@ enum dDbgCam_KeyAction {
class dDbgCamera_c;
+extern dDbgCamera_c dDbgCamera;
+
class dDbgCamKey_c {
public:
dDbgCamKey_c() {}
diff --git a/include/d/d_stage.h b/include/d/d_stage.h
index 2fdc6a9cf3..501376909c 100644
--- a/include/d/d_stage.h
+++ b/include/d/d_stage.h
@@ -186,8 +186,12 @@ struct stage_camera_class {
// AROB / RARO
struct stage_arrow_data_class {
- /* 0x00 */ cXyz position;
- /* 0x0C */ csXyz angle;
+ /* 0x00 */ f32 posX;
+ /* 0x04 */ f32 posY;
+ /* 0x08 */ f32 posZ;
+ /* 0x0C */ s16 angleX;
+ /* 0x0E */ s16 angleY;
+ /* 0x10 */ s16 angleZ;
/* 0x12 */ s16 field_0x12;
}; // Size: 0x14
@@ -684,8 +688,8 @@ public:
/* vt[91] */ virtual void setElst(dStage_Elst_c* i_Elst) { mElst = i_Elst; }
/* vt[92] */ virtual dStage_Elst_c* getElst(void);
- s16 getWorldRollAngleX() { return (s16)mWorldRollAngleX; }
- s16 getWorldRollDirAngleY() { return mWorldRollDirAngleY; }
+ s16 getWorldRollAngleX() const { return (s16)mWorldRollAngleX; }
+ s16 getWorldRollDirAngleY() const { return mWorldRollDirAngleY; }
public:
/* 0x08 */ stage_camera_class* mCamera;
diff --git a/include/d/dolzel_base.pch b/include/d/dolzel_base.pch
index 169f985047..eb6533d44e 100644
--- a/include/d/dolzel_base.pch
+++ b/include/d/dolzel_base.pch
@@ -41,6 +41,7 @@
#include "d/d_bg_s_chk.h" // IWYU pragma: export
#include "d/d_bg_w.h" // IWYU pragma: export
#include "d/d_drawlist.h" // IWYU pragma: export
+#include "d/d_bg_s_sph_chk.h" // IWYU pragma: export
#include "d/d_com_inf_game.h" // IWYU pragma: export
#include "m_Do/m_Do_graphic.h" // IWYU pragma: export
#include "JSystem/J2DGraph/J2DOrthoGraph.h" // IWYU pragma: export
diff --git a/src/d/actor/d_a_tag_mhint.cpp b/src/d/actor/d_a_tag_mhint.cpp
index 1844169355..3352b1e9ab 100644
--- a/src/d/actor/d_a_tag_mhint.cpp
+++ b/src/d/actor/d_a_tag_mhint.cpp
@@ -55,8 +55,8 @@ int daTagMhint_c::create() {
->m_entries[field_0x56d]
.m_arrow_idx];
- eyePos.set(arrow_data_p->position.x, arrow_data_p->position.y,
- arrow_data_p->position.z);
+ eyePos.set(arrow_data_p->posX, arrow_data_p->posY,
+ arrow_data_p->posZ);
attention_info.position = eyePos;
}
diff --git a/src/d/actor/d_a_tag_mmsg.cpp b/src/d/actor/d_a_tag_mmsg.cpp
index 05f86f48cc..ef52c329b4 100644
--- a/src/d/actor/d_a_tag_mmsg.cpp
+++ b/src/d/actor/d_a_tag_mmsg.cpp
@@ -25,11 +25,10 @@ int daTagMmsg_c::create() {
if (!checkNoAttention()) {
s32 roomNo = fopAcM_GetRoomNo(this);
- cXyz* tmp =
+ stage_arrow_data_class* arrowData =
&dComIfGp_getRoomArrow(roomNo)
- ->m_entries[dComIfGp_getRoomCamera(roomNo)->m_entries[mAttention].m_arrow_idx]
- .position;
- eyePos.set(tmp->x, tmp->y, tmp->z);
+ ->m_entries[dComIfGp_getRoomCamera(roomNo)->m_entries[mAttention].m_arrow_idx];
+ eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ);
attention_info.position = eyePos;
}
diff --git a/src/d/actor/d_a_tag_mstop.cpp b/src/d/actor/d_a_tag_mstop.cpp
index 83f41a4678..c58e6b0935 100644
--- a/src/d/actor/d_a_tag_mstop.cpp
+++ b/src/d/actor/d_a_tag_mstop.cpp
@@ -55,11 +55,10 @@ int daTagMstop_c::create() {
if (!checkNoAttention()) {
s32 room = fopAcM_GetRoomNo(this);
- cXyz* pos = &dComIfGp_getRoomArrow(room)
- ->m_entries[dComIfGp_getRoomCamera(room)->m_entries[idx].m_arrow_idx]
- .position;
+ stage_arrow_data_class* arrowData = &dComIfGp_getRoomArrow(room)
+ ->m_entries[dComIfGp_getRoomCamera(room)->m_entries[idx].m_arrow_idx];
- eyePos.set(pos->x, pos->y, pos->z);
+ eyePos.set(arrowData->posX, arrowData->posY, arrowData->posZ);
attention_info.position = eyePos;
}
diff --git a/src/d/actor/d_a_tbox.cpp b/src/d/actor/d_a_tbox.cpp
index 117c9b02ba..0112acac9c 100644
--- a/src/d/actor/d_a_tbox.cpp
+++ b/src/d/actor/d_a_tbox.cpp
@@ -1498,8 +1498,8 @@ void daTbox_c::settingDropDemoCamera() {
cXyz spA0;
cXyz spAC;
- spA0.x = stage_arrow_data->position.x;
- spA0.z = stage_arrow_data->position.z;
+ spA0.x = stage_arrow_data->posX;
+ spA0.z = stage_arrow_data->posZ;
spAC.x = home.pos.x;
spAC.z = home.pos.z;
f32 var_f30 = spA0.abs(spAC);
@@ -1510,16 +1510,16 @@ void daTbox_c::settingDropDemoCamera() {
s16 angle;
getDropSAngle(&angle);
- spB8.x = stage_arrow_data->position.x;
+ spB8.x = stage_arrow_data->posX;
spB8.y = 0.0f;
- spB8.z = stage_arrow_data->position.z;
+ spB8.z = stage_arrow_data->posZ;
spB8 -= home.pos;
Mtx mtx;
MTXRotAxisRad(mtx, &spC4, cM_s2rad(angle));
mDoMtx_multVec(mtx, &spB8, &spB8);
spB8 += home.pos;
- spB8.y = stage_arrow_data->position.y;
+ spB8.y = stage_arrow_data->posY;
cXyz cam_eye;
cXyz cam_center;
@@ -1527,10 +1527,10 @@ void daTbox_c::settingDropDemoCamera() {
cam_eye = spB8;
cam_center = home.pos;
- f32 var_f29 = cM_ssin(stage_arrow_data->angle.x);
- f32 var_f28 = cM_scos(stage_arrow_data->angle.x);
+ f32 var_f29 = cM_ssin(stage_arrow_data->angleX);
+ f32 var_f28 = cM_scos(stage_arrow_data->angleX);
f32 dist = var_f30 * (var_f29 / var_f28);
- if (stage_arrow_data->angle.x > 0) {
+ if (stage_arrow_data->angleX > 0) {
dist = -dist;
}
diff --git a/src/d/d_cam_param.cpp b/src/d/d_cam_param.cpp
index d6b383a007..77e62ac4bf 100644
--- a/src/d/d_cam_param.cpp
+++ b/src/d/d_cam_param.cpp
@@ -7,49 +7,87 @@
#include "d/d_cam_param.h"
+#include "JSystem/JHostIO/JORFile.h"
+#include "JSystem/JHostIO/JORServer.h"
#include "SSystem/SComponent/c_math.h"
#include "d/actor/d_a_player.h"
#include "d/d_camera.h"
#include "d/d_com_inf_game.h"
+enum CameraFlags {
+ CAM_PARAM_GAPX, CAM_PARAM_GAPZ,
+ CAM_PARAM_HBAS, CAM_PARAM_HMIN, CAM_PARAM_HMAX,
+ CAM_PARAM_CDST, CAM_PARAM_CANG,
+ CAM_PARAM_RBAS, CAM_PARAM_RMIN, CAM_PARAM_RMAX, CAM_PARAM_RNAR, CAM_PARAM_RFAR,
+ CAM_PARAM_VBAS, CAM_PARAM_VMIN, CAM_PARAM_VMAX, CAM_PARAM_VNAR, CAM_PARAM_VFAR,
+ CAM_PARAM_FBAS, CAM_PARAM_FMIN, CAM_PARAM_FMAX, CAM_PARAM_FNAR, CAM_PARAM_FFAR,
+ CAM_PARAM_UTRN, CAM_PARAM_UNAR, CAM_PARAM_UFAR,
+ CAM_PARAM_HNAR, CAM_PARAM_HFAR,
+ CAM_PARAM_USLW,
+};
+
+#if DEBUG
+namespace camera_names {
+ const char* engine_name[] = {
+ "LET", "CHASE", "LOCKON", "TALK",
+ "SUBJECT", "FIXEDPOS", "FIXEDFRM", "TOWER",
+ "RIDE", "MANUAL", "EVENT", "HOOKSHOT",
+ "COLOSSEUM", "OBSERVE", "MAGNE", "RAIL",
+ "PARARAIL", "ONESIDE", "TEST1", "TEST2",
+ };
+ const char* mode_name[] = {
+ "NORMAL", "PARALLEL", "LOCKON", "TALK",
+ "SUBJECT", "ATTACK", "ATTACK2", "SHOOT",
+ "OBJSHOOT", "HOOKSHOT", "PUSHPULL",
+ };
+ const char* param_name[] = {
+ "GAPX", "GAPZ", "HBAS", "HMIN", "HMAX", "CDST", "CANG", "RBAS",
+ "RMIN", "RMAX", "RNAR", "RFAR", "VBAS", "VMIN", "VMAX", "VNAR",
+ "VFAR", "FBAS", "FMIN", "FMAX", "FNAR", "FFAR", "UTRN", "UNAR",
+ "UFAR", "HNAR", "HFAR", "USLW",
+ };
+ const char* flag_name[] = {
+ "BGCHECK", "BGCHKLIGHT", "BGCHECKOFF", "BUSHCHECK",
+ "COCHKOFF", "FWDCHECKH", "ROLLOFF", "HIGHOFF",
+ "DIRECTSTK", "USEMAPTOOL", "RZOOM", "WIDEUSE1",
+ "WIDEUSE2", "TARGETUSE", "FWDCHECK",
+ };
+}
+#endif
+
f32 dCamMath::rationalBezierRatio(f32 param_0, f32 param_1) {
- f64 var_f31;
- f32 var_f1 = param_0;
+ f64 sp68;
- if (var_f1 >= 0.0f) {
- var_f31 = 1.0;
+ if (param_0 >= 0.0f) {
+ sp68 = 1.0;
} else {
- var_f31 = -1.0;
- var_f1 = -var_f1;
+ sp68 = -1.0;
+ param_0 = -param_0;
}
- f64 temp_f2 = 2.0 * var_f1;
- f64 temp_f2_2 = ((temp_f2 * param_1) - temp_f2) - (2.0 * param_1);
- f64 temp_f29 = -temp_f2_2;
- f64 temp_f28 = temp_f29 - 1.0;
- f64 var_f1_2 = (temp_f2_2 * temp_f2_2) - (4.0 * temp_f28 * var_f1);
+ f64 sp60 = 2.0 * param_0;
+ f64 sp58 = 2.0 * param_1;
+ f64 sp50 = sp60 * param_1;
+ f64 var_f31 = sp50 - sp60 - sp58;
+ f64 sp48 = -var_f31 - 1.0;
+ f64 sp40 = param_0;
+ f64 sp38 = (var_f31 * var_f31) - (4.0 * sp48 * sp40);
- if (var_f1_2 > 0.0) {
- var_f1_2 = sqrt(var_f1_2);
- } else {
- var_f1_2 = 0.0;
- }
+ f64 sp30 = -var_f31 - (sp38 > 0.0 ? sqrt(sp38) : 0.0);
+ f64 sp28 = sp48 * 2.0;
+ if (sp28 > 1e-07 || sp28 < -1e-07) {
+ f64 var_f30 = sp30 / sp28;
+ f64 sp20 = var_f30 * var_f30;
+ f64 sp18 = 1.0 - var_f30;
+ f64 sp10 = sp20 + ((sp18 * sp18) + (param_1 * (2.0 * sp18 * var_f30)));
- f64 temp = temp_f29 - var_f1_2;
- f64 temp_f2_3 = temp_f28 * 2.0;
- if (temp_f2_3 > 1e-07 || temp_f2_3 < -1e-07) {
- f64 temp_f2_4 = temp / temp_f2_3;
- f64 temp_f3 = temp_f2_4 * temp_f2_4;
- f64 temp_f4 = 1.0 - temp_f2_4;
- f64 temp_f1 = temp_f3 + ((temp_f4 * temp_f4) + (param_1 * (2.0 * temp_f4 * temp_f2_4)));
-
- if (temp_f1 > 1.0000000116860974e-07) {
- return var_f31 * (temp_f3 / temp_f1);
+ if (sp10 > 1.0000000116860974e-07) {
+ return sp68 * (sp20 / sp10);
}
return 0.0f;
+ } else {
+ return 0.0f;
}
-
- return 0.0f;
}
static f32 dummy_literal1() {
@@ -59,16 +97,14 @@ static f32 dummy_literal1() {
f32 dCamMath::zoomFovy(f32 param_0, f32 param_1) {
cDegree deg(param_0);
- f32 radian = cM_atan2f(deg.Sin(), param_1 * deg.Cos());
- return cAngle::r2d(radian);
+ return cAngle::r2d(cM_atan2f(deg.Sin(), param_1 * deg.Cos()));
}
cXyz dCamMath::xyzRotateX(cXyz& i_xyz, cSAngle i_angle) {
Mtx m;
cXyz rot_xyz;
- s16 angle = i_angle.Val();
- mDoMtx_XrotS(m, angle);
+ cMtx_XrotS(m, i_angle.Val());
MTXMultVec(m, &i_xyz, &rot_xyz);
return rot_xyz;
}
@@ -77,8 +113,7 @@ cXyz dCamMath::xyzRotateY(cXyz& i_xyz, cSAngle i_angle) {
Mtx m;
cXyz rot_xyz;
- s16 angle = i_angle.Val();
- mDoMtx_YrotS(m, angle);
+ cMtx_YrotS(m, i_angle.Val());
MTXMultVec(m, &i_xyz, &rot_xyz);
return rot_xyz;
}
@@ -94,9 +129,41 @@ dCstick_c::dCstick_c() {
mThresholdLow = 0.2f;
mThresholdHigh = 0.95f;
mInputSpeed = 6;
+#if DEBUG
+ mDisplayPosX = 170;
+ mDisplayPosY = 40;
+#endif
}
+#if DEBUG
+void dCstick_c::genMessage(JORMContext* ctx) {
+ // "- Switch"
+ ctx->genLabel("- スイッチ", 0, 0, NULL, -1, -1, 0x200);
+ // " Threshold: Low"
+ ctx->genSlider(" しきい値 低", &mThresholdLow, 0.0f, 1.0f, 0, NULL, -1, -1, 0x200);
+ // " High"
+ ctx->genSlider(" 高", &mThresholdHigh, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " Input speed"
+ ctx->genSlider(" 入力スピード", &mInputSpeed, 0x0, 0x50, 0, 0, -1);
+
+ ctx->genLabel("-", 0, 0, NULL, -1, -1, 0x200);
+ // " Debug display"
+ ctx->genCheckBox(" デバッグ表示", &mIsDebugDisplay, -0x8000, 0, 0, -1, -1);
+ // " Display position X"
+ ctx->genSlider(" 表示位置 X", &mDisplayPosX, 0x0, 0x280, 0, 0, -1);
+ // " Y"
+ ctx->genSlider(" Y", &mDisplayPosY, 0x0, 0x1e0, 0, 0, -1);
+
+ ctx->genLabel("-", 0, 0, NULL, -1, -1, 0x200);
+}
+#endif
+
bool dCstick_c::Shift(u32 param_0) {
+ UNUSED(param_0);
+#if DEBUG
+ CheckFlag(0x8000);
+#endif
+
return false;
}
@@ -124,11 +191,68 @@ dCamBGChk_c::dCamBGChk_c() {
mCornerAngleMax = 120.0f;
}
+#if DEBUG
+void dCamBGChk_c::genMessage(JORMContext* ctx) {
+ ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200);
+ // "- Floor check"
+ ctx->genLabel("- 床チェック", 0, 0, 0, -1, -1, 0x200);
+ // " Margin"
+ ctx->genSlider(" マージン", &mFloorMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200);
+ ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200);
+ // "- Forward check"
+ ctx->genLabel("- 前方チェック", 0, 0, 0, -1, -1, 0x200);
+ // " [0]Angle"
+ ctx->genSlider(" [0]角度", &mChkInfo[0].mChkAngle, 1.0f, 90.0f, 0, 0, -1, -1, 0x200);
+ // " [0]Length (height X)"
+ ctx->genSlider(" [0]長さ(身長X)", &mChkInfo[0].mDistance, 1.0f, 25.0f, 0, 0, -1, -1, 0x200);
+ // " [0]Weight+"
+ ctx->genSlider(" [0]ウエイト+", &mChkInfo[0].mWeightH, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " [0]Weight-"
+ ctx->genSlider(" [0]ウエイト-", &mChkInfo[0].mWeightL, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " [1]Angle"
+ ctx->genSlider(" [1]角度", &mChkInfo[1].mChkAngle, 1.0f, 90.0f, 0, 0, -1, -1, 0x200);
+ // " [1]Length (height X)"
+ ctx->genSlider(" [1]長さ(身長X)", &mChkInfo[1].mDistance, 1.0f, 25.0f, 0, 0, -1, -1, 0x200);
+ // " [1]Weight+"
+ ctx->genSlider(" [1]ウエイト+", &mChkInfo[1].mWeightH, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " [1]Weight-"
+ ctx->genSlider(" [1]ウエイト-", &mChkInfo[1].mWeightL, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " Margin"
+ ctx->genSlider(" マージン", &mFwdBackMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200);
+ // " Cusion"
+ ctx->genSlider(" クッション", &mFwdCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200);
+ // "- Per camera"
+ ctx->genLabel("- カメラあたり", 0, 0, 0, -1, -1, 0x200);
+ // " Margin"
+ ctx->genSlider(" マージン", &mGazeBackMargin, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200);
+ // BUG: second parameter should be &mCornerAngleMax
+ // " Corner wall detection angle"
+ ctx->genSlider(" 角壁判別角度", &mCornerCushion, 0.0f, 180.0f, 0, 0, -1, -1, 0x200);
+ // " Corner cushion"
+ ctx->genSlider(" 角クッション", &mCornerCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " Wall cushion"
+ ctx->genSlider(" 壁クッション", &mWallCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ // " Wall up distance"
+ ctx->genSlider(" 壁上がり距離", &mWallUpDistance, 0.0f, 1000.0f, 0, 0, -1, -1, 0x200);
+ // " Wall back cushion"
+ ctx->genSlider(" 壁戻クッション", &mWallBackCushion, 0.0f, 1.0f, 0, 0, -1, -1, 0x200);
+ ctx->genLabel("-", 0, 0, 0, -1, -1, 0x200);
+}
+#endif
+
dCamParam_c::dCamParam_c(s32 i_styleID) {
- u8* cam_data = (u8*)dComIfG_getObjectRes(dComIfGp_getCameraParamFileName(0), "camstyle.dat");
+ const char* fileName = dComIfGp_getCameraParamFileName(0);
+ void* objRes = dComIfG_getObjectRes(fileName, "camstyle.dat");
+ u8* cam_data = (u8*)objRes;
mCamStyleData = (dCamStyleData::StyleData*)(cam_data + 8);
mStyleNum = ((dCamStyleData*)cam_data)->mStyleNum;
+
+#if DEBUG
+ mpHIOChild = mDoHIO_createChild("カメラパラメタ", this);
+#endif
+
Change(i_styleID);
mMapToolFovy = 0xFF;
@@ -137,12 +261,21 @@ dCamParam_c::dCamParam_c(s32 i_styleID) {
mMapToolArg2 = -1;
}
-dCamParam_c::~dCamParam_c() {}
+dCamParam_c::~dCamParam_c() {
+#if DEBUG
+ mDoHIO_deleteChild(mpHIOChild);
+#endif
+}
int dCamParam_c::Change(s32 i_styleID) {
if (i_styleID >= 0 && i_styleID < mStyleNum) {
mStyleID = i_styleID;
mCurrentStyle = &mCamStyleData[mStyleID];
+
+#if DEBUG
+ mDoHIO_updateChild(mpHIOChild);
+#endif
+
return 1;
}
@@ -153,17 +286,263 @@ int dCamParam_c::Change(s32 i_styleID) {
int dCamParam_c::SearchStyle(u32 param_0) {
int styleID = -1;
-
- for (int i = 0; i < mStyleNum; i++) {
+ int i = 0;
+ while (i < mStyleNum) {
if (param_0 == mCamStyleData[i].field_0x0) {
styleID = i;
break;
}
+ i++;
}
return styleID;
}
+#if DEBUG
+void dCamParam_c::genMessage(JORMContext* ctx) {
+ ctx->genSlider(" STYLE ID", &mStyleID, 0, mStyleNum, 0x40000000, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Origin C"
+ ctx->genLabel("- 原点C", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Front/back (GAPZ)"
+ ctx->genSlider(" 前後(GAPZ)", &mCurrentStyle->mParams[CAM_PARAM_GAPZ], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Left/right (GAPX)"
+ ctx->genSlider(" 左右(GAPX)", &mCurrentStyle->mParams[CAM_PARAM_GAPX], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Distance (CDST)"
+ ctx->genSlider(" 距離(CDST)", &mCurrentStyle->mParams[CAM_PARAM_CDST], -1.0f, 1.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Angle (CANG)"
+ ctx->genSlider(" 角度(CANG)", &mCurrentStyle->mParams[CAM_PARAM_CANG], -1.0f, 1.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Origin point high"
+ ctx->genLabel("- 原点高", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Standard (HBAS)"
+ ctx->genSlider(" 標準(HBAS)", &mCurrentStyle->mParams[CAM_PARAM_HBAS], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Minimum (HMIN)"
+ ctx->genSlider(" 最小(HMIN)", &mCurrentStyle->mParams[CAM_PARAM_HMIN], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Maximum (HMAX)"
+ ctx->genSlider(" 最大(HMAX)", &mCurrentStyle->mParams[CAM_PARAM_HMAX], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Nearest (HNAR)"
+ ctx->genSlider(" 最近(HNAR)", &mCurrentStyle->mParams[CAM_PARAM_HNAR], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Farthest (HFAR)"
+ ctx->genSlider(" 最遠(HFAR)", &mCurrentStyle->mParams[CAM_PARAM_HFAR], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Distance"
+ ctx->genLabel("- 距離", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" 標準(RBAS)", &mCurrentStyle->mParams[CAM_PARAM_RBAS], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" 最小(RMIN)", &mCurrentStyle->mParams[CAM_PARAM_RMIN], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" 最大(RMAX)", &mCurrentStyle->mParams[CAM_PARAM_RMAX], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" 最近(RNAR)", &mCurrentStyle->mParams[CAM_PARAM_RNAR], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" 最遠(RFAR)", &mCurrentStyle->mParams[CAM_PARAM_RFAR], -10000.0f, 10000.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genLabel("- 縦角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Standard (VBAS)"
+ ctx->genSlider(" 標準(VBAS)", &mCurrentStyle->mParams[CAM_PARAM_VBAS], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Minimuum (VMIN)"
+ ctx->genSlider(" 最小(VMIN)", &mCurrentStyle->mParams[CAM_PARAM_VMIN], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Maximum (VMAX)"
+ ctx->genSlider(" 最大(VMAX)", &mCurrentStyle->mParams[CAM_PARAM_VMAX], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Nearest (VNAR)"
+ ctx->genSlider(" 最近(VNAR)", &mCurrentStyle->mParams[CAM_PARAM_VNAR], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Farthest (VFAR)"
+ ctx->genSlider(" 最遠(VFAR)", &mCurrentStyle->mParams[CAM_PARAM_VFAR], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Horizontal angle"
+ ctx->genLabel("- 横角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Rotation speed (UTRN)"
+ ctx->genSlider(" 回速(UTRN)", &mCurrentStyle->mParams[CAM_PARAM_UTRN], -1.0f, 1.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Lap behind (USLW)"
+ ctx->genSlider(" 回遅(USLW)", &mCurrentStyle->mParams[CAM_PARAM_USLW], -1.0f, 1.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Nearest (UNAR)"
+ ctx->genSlider(" 最近(UNAR)", &mCurrentStyle->mParams[CAM_PARAM_UNAR], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Farthest (UFAR)"
+ ctx->genSlider(" 最遠(UFAR)", &mCurrentStyle->mParams[CAM_PARAM_UFAR], -180.0f, 180.0f, 0,
+ NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Field of view"
+ ctx->genLabel("- 画角", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Standard (FBAS)"
+ ctx->genSlider(" 標準(FBAS)", &mCurrentStyle->mParams[CAM_PARAM_FBAS], -30.0f, 90.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Minimum (FMIN)"
+ ctx->genSlider(" 最小(FMIN)", &mCurrentStyle->mParams[CAM_PARAM_FMIN], -30.0f, 90.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Maximum (FMAX)"
+ ctx->genSlider(" 最大(FMAX)", &mCurrentStyle->mParams[CAM_PARAM_FMAX], -30.0f, 90.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Nearest (FNAR)"
+ ctx->genSlider(" 最近(FNAR)", &mCurrentStyle->mParams[CAM_PARAM_FNAR], -30.0f, 90.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Farthest (FFAR)"
+ ctx->genSlider(" 最遠(FFAR)", &mCurrentStyle->mParams[CAM_PARAM_FFAR], -30.0f, 90.0f, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ // "- Flag"
+ ctx->genLabel("- フラグ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "BG check (BGCHECK)"
+ ctx->genCheckBox(" BGチェック(BGCHECK)", &mCurrentStyle->mFlags, 0x1, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "BG check light (BGCHKLIGHT)"
+ ctx->genCheckBox(" BGチェック軽(BGCHKLIGHT)", &mCurrentStyle->mFlags, 0x2, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Grass check (BUSHCHECK)"
+ ctx->genCheckBox(" 草チェック(BUSHCHECK)", &mCurrentStyle->mFlags, 0x8, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Front check (FWDCHECK)"
+ ctx->genCheckBox(" 前方チェック(FWDCHECK)", &mCurrentStyle->mFlags, 0x4000, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "CO check prohibited (COCHKOFF)"
+ ctx->genCheckBox(" COチェック禁止(COCHKOFF)", &mCurrentStyle->mFlags, 0x10, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "R button zoom (RZOOM)"
+ ctx->genCheckBox(" Rボタンズーム(RZOOM)", &mCurrentStyle->mFlags, 0x400, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Stick direct value (DIRECTSTK)"
+ ctx->genCheckBox(" スティック直値(DIRECTSTK)", &mCurrentStyle->mFlags, 0x100, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "Use map tool (USEMAPTOOL)"
+ ctx->genCheckBox(" マップツール使用(USEMAPTOOL)", &mCurrentStyle->mFlags, 0x200, 0, NULL,
+ 0xffff, 0xffff, 0x200, 0x18);
+ // "No BG check (BGCHECKOFF)"
+ ctx->genCheckBox(" BGチェック無(BGCHECKOFF)", &mCurrentStyle->mFlags, 0x4, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Forward check distance (FWDCHECKH)"
+ ctx->genCheckBox(" 前方チェック遠(FWDCHECKH)", &mCurrentStyle->mFlags, 0x20, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "C-axis rotation prohibited (ROLLOFF)"
+ ctx->genCheckBox(" C回転禁止(ROLLOFF)", &mCurrentStyle->mFlags, 0x40, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "C pulling prohibited (HIGHOFF)"
+ ctx->genCheckBox(" C引き禁止(HIGHOFF)", &mCurrentStyle->mFlags, 0x80, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "General purpose 1 (WIDEUSE1)"
+ ctx->genCheckBox(" 汎用1(WIDEUSE1)", &mCurrentStyle->mFlags, 0x800, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+ // "General purpose 2 (WIDEUSE2)"
+ ctx->genCheckBox(" 汎用2(WIDEUSE2)", &mCurrentStyle->mFlags, 0x1000, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Target specification (TARGETUSE)"
+ ctx->genCheckBox(" 対象指定(TARGETUSE)", &mCurrentStyle->mFlags, 0x2000, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Map tools"
+ ctx->genLabel("- マップツール", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Field of view"
+ ctx->genSlider(" 画角 ", &mMapToolFovy, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Argument 0"
+ ctx->genSlider(" 引数0", &mMapToolArg0, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Argument 1"
+ ctx->genSlider(" 引数1", &mMapToolArg1, 0, 0xff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Argument 2"
+ ctx->genSlider(" 引数2", &mMapToolArg2, 0, 0xffff, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Output file"
+ ctx->genLabel("- ファイル出力", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Save"
+ ctx->genButton(" 保存 ", 0x12d, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+}
+
+void dCamParam_c::listenPropertyEvent(const JORPropertyEvent* event) {
+ JORReflexible::listenPropertyEvent(event);
+ JORMContext* ctx = attachJORMContext(8);
+ switch ((int)event->id) {
+ case 0x12d:
+ writeParamXML();
+ break;
+ }
+}
+
+int dCamParam_c::writeParamXML() {
+ int i;
+ char styleName[5];
+ styleName[0] = (mCurrentStyle->field_0x0 >> 24) & 0xff;
+ styleName[1] = (mCurrentStyle->field_0x0 >> 16) & 0xff;
+ styleName[2] = (mCurrentStyle->field_0x0 >> 8) & 0xff;
+ styleName[3] = (mCurrentStyle->field_0x0 >> 0) & 0xff;
+ styleName[4] = '\0';
+
+ OpenFile();
+ PrintFile("\n");
+ PrintFile(" \n");
+ PrintFile("\n");
+ CloseFile();
+ return 1;
+}
+
+void dCamParam_c::OpenFile() {
+ char fileSuffix[9];
+ fileSuffix[0] = (mCurrentStyle->field_0x0 >> 24) & 0xff;
+ fileSuffix[1] = (mCurrentStyle->field_0x0 >> 16) & 0xff;
+ fileSuffix[2] = (mCurrentStyle->field_0x0 >> 8) & 0xff;
+ fileSuffix[3] = (mCurrentStyle->field_0x0 >> 0) & 0xff;
+ fileSuffix[4] = '.';
+ fileSuffix[5] = 'x';
+ fileSuffix[6] = 'c';
+ fileSuffix[7] = 's';
+ fileSuffix[8] = '\0';
+ const char ext[] = "パラメタベースファイル(*.xcs)\0*.xcs\0その他のファイル(*.*)\0*.*\0";
+ mFile.open(JORFile::EFlags_WRITE | JORFile::EFlags_UNK_0x4, ext, "xcs", NULL, fileSuffix);
+}
+
+void dCamParam_c::PrintFile(char* i_fmt, ...) {
+ UNUSED(i_fmt);
+ char buf[0x100];
+ va_list args;
+ va_start(args, i_fmt);
+ vsnprintf(buf, sizeof(buf), i_fmt, args);
+ va_end(args);
+
+ mFile.writeData(buf, strlen(buf));
+}
+
+void dCamParam_c::CloseFile() {
+ mFile.close();
+}
+#endif
+
static f32 dummy_literal2() {
return 0.25f;
}
@@ -202,8 +581,8 @@ dCamSetup_c::dCamSetup_c() {
mDebugFlags = 1;
mFlags2 = 0x118;
- mFlags2 |= 0x200;
- mFlags2 |= 0x400;
+ mFlags2 |= (u16)0x200;
+ mFlags2 |= (u16)0x400;
mChargeLatitude = 27.0f;
mChargeTimer = 90;
@@ -227,12 +606,28 @@ dCamSetup_c::dCamSetup_c() {
mWindShakeFvy = 0.3f;
mMapToolCamShortTimer = 60;
mMapToolCamLongTimer = 120;
- mDebugFlags |= 0x4800;
+#if DEBUG
+ mDebugFlags |= (u16)0x3000;
+ mpHIOChild = mDoHIO_createChild("カメラ", this);
+#endif
+#if PLATFORM_WII
+ mDebugFlags |= (u16)0x7800;
+#else
+ mDebugFlags |= (u16)0x4800;
+#endif
field_0x15c = 0.0f;
field_0x160 = 0.0f;
- mDebugFlags |= 0x800;
+ mDebugFlags |= (u16)0x800;
+#if PLATFORM_GCN
mWaitRollTimer = 120;
+#else
+ mWaitRollTimer = 20;
+#endif
+#if PLATFORM_GCN
mWaitRollSpeed = 0.02f;
+#else
+ mWaitRollSpeed = 0.05f;
+#endif
field_0x16c = 1200.0f;
field_0xe0 = 0.06f;
field_0xec = 25;
@@ -248,7 +643,11 @@ dCamSetup_c::dCamSetup_c() {
dCam_getBody()->EventRecoverNotime();
}
-dCamSetup_c::~dCamSetup_c() {}
+dCamSetup_c::~dCamSetup_c() {
+#if DEBUG
+ mDoHIO_deleteChild(mpHIOChild);
+#endif
+}
bool dCamSetup_c::CheckLatitudeRange(s16* param_0) {
s16 temp0 = cAngle::d2s(field_0x60);
@@ -268,9 +667,244 @@ bool dCamSetup_c::CheckLatitudeRange(s16* param_0) {
}
f32 dCamSetup_c::PlayerHideDist() {
- if (daPy_py_c::checkNowWolf()) {
- return 120.0f;
- }
-
- return mSubjLinkCullDist;
+ return daPy_py_c::checkNowWolf() ? 120.0f : mSubjLinkCullDist;
}
+
+#if DEBUG
+void dCamSetup_c::genMessage(JORMContext* ctx) {
+ int i;
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Debug"
+ ctx->genLabel("- デバッグ", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Camera information display"
+ ctx->genCheckBox(" カメラ情報表示", &mDebugFlags, 0x8000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Event information display"
+ ctx->genCheckBox(" イベント情報表示", &mDebugFlags, 0x40, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Player 2D position"
+ ctx->genCheckBox(" プレイヤ2D位置", &mDebugFlags, 0x80, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Imaginary line"
+ ctx->genCheckBox(" イマジナリライン", &mDebugFlags, 0x100, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Location information"
+ ctx->genCheckBox(" 位置情報", &mDebugFlags, 0x200, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Camera type switching"
+ ctx->startComboBox("カメラタイプ切替", &mForceType, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
+ // "Unused"
+ ctx->genComboBoxItem("未使用", -1);
+ for (i = 0; i < mTypeNum; i++) {
+ ctx->genComboBoxItem((char*)((int)mTypeTable + i * 0x44), i);
+ }
+ ctx->endComboBox();
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Wolf special attack"
+ ctx->genLabel("- 狼特殊攻撃", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Return timer"
+ ctx->genSlider(" もどりタイマー", &mChargeTimer, 1, 3000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Screensaver"
+ ctx->genLabel("- スクリーンセーバー", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Enabled"
+ ctx->genCheckBox(" 有効", &mFlags2, 0x800, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Initial wait time (s)"
+ ctx->genSlider(" 待ち時間最初(s)", &mScreensaverFirstWaitTimer, 1, 0xe10, 0, NULL, 0xffff,
+ 0xffff, 0x200, 0x18);
+ // "Wait time"
+ ctx->genSlider(" 待ち時間(s)", &mScreensaverWaitTimer, 1, 0xe10, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Execution time"
+ ctx->genSlider(" 実行時間(s)", &mScreensaverExecTimer, 1, 0xe10, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Event"
+ ctx->genLabel("- イベント", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Conversation cut switching"
+ ctx->startComboBox("会話カット切替", &mModeSwitchType, 0, NULL, 0xffff, 0xffff, 0x100, 0x1a);
+ // "Unused"
+ ctx->genComboBoxItem("未使用", -1);
+ // "00. Default"
+ ctx->genComboBoxItem("00.デフォルト", 0);
+ // "50. Default (no connection)"
+ ctx->genComboBoxItem("50.デフォルト繋ぎ無", 50);
+ // "11. Speaker to listener"
+ ctx->genComboBoxItem("11.話し手から聞き手", 11);
+ // "12. Listener to speaker"
+ ctx->genComboBoxItem("12.聞き手から話し手", 12);
+ // "13. Long shot"
+ ctx->genComboBoxItem("13.ロングショット", 13);
+ // "14. Listener's point of view"
+ ctx->genComboBoxItem("14.聞き手の主観", 14);
+ // "15. Speaker's point of view"
+ ctx->genComboBoxItem("15.話し手の主観", 15);
+ // "16. Close-up of listener"
+ ctx->genComboBoxItem("16.聞き手のアップ", 16);
+ // "17. Close-up of speaker"
+ ctx->genComboBoxItem("17.話し手のアップ", 17);
+ // "61. Close of of speaker B"
+ ctx->genComboBoxItem("61.話し手のアップB", 61);
+ // "18. From the side of the listener"
+ ctx->genComboBoxItem("18.聞き手の横から", 18);
+ // "19. From the side of the speaker"
+ ctx->genComboBoxItem("19.話し手の横から", 19);
+ // "20. Listener from the front"
+ ctx->genComboBoxItem("20.聞き手正面", 20);
+ // "21. Speaker from the front"
+ ctx->genComboBoxItem("21.話し手正面", 21);
+ // "62. Speaker from the front B"
+ ctx->genComboBoxItem("62.話し手正面B", 62);
+ // "22. Listener bust shot"
+ ctx->genComboBoxItem("22.聞き手胸像", 22);
+ // "23. Speaker bust shot"
+ ctx->genComboBoxItem("23.話し手胸像", 23);
+ // "63. Speaker bust shot B"
+ ctx->genComboBoxItem("63.話し手胸像B", 63);
+ // "24. Listener from the front diagonal"
+ ctx->genComboBoxItem("24.聞き手斜前", 24);
+ // "25. Speaker from the front diagonal"
+ ctx->genComboBoxItem("25.話し手斜前", 25);
+ // "26. Listener from the lower diagonal"
+ ctx->genComboBoxItem("26.聞き手斜下", 26);
+ // "27 Speaker from the lower diagonal"
+ ctx->genComboBoxItem("27.話し手斜下", 27);
+ // "28. From the side"
+ ctx->genComboBoxItem("28.横から", 28);
+ // "29. Large face from the front"
+ ctx->genComboBoxItem("29.でか顔正面", 29);
+ // "30. Speaker to listener (wide)"
+ ctx->genComboBoxItem("30.話し手から聞き手広", 30);
+ // "31. Listener to speaker (wide)"
+ ctx->genComboBoxItem("31.聞き手から話し手広", 31);
+ // "32. Long shot from the side"
+ ctx->genComboBoxItem("32.横からロング", 32);
+ // "33. Midna"
+ ctx->genComboBoxItem("33.ミドナ", 33);
+ // "34. Midna back"
+ ctx->genComboBoxItem("34.ミドナ後", 34);
+ // "35. Midna diagonal"
+ ctx->genComboBoxItem("35.ミドナ斜", 35);
+ // "36. Midna diagonal back"
+ ctx->genComboBoxItem("36.ミドナ斜後", 36);
+ // "37. Midna attention, long shot"
+ ctx->genComboBoxItem("37.ミドナ注目ロング", 37);
+ // "38. Over the shoulder shot"
+ ctx->genComboBoxItem("38.肩なめ", 38);
+ // "39. Listener from the front (upper body)"
+ ctx->genComboBoxItem("39.聞き手正面上", 39);
+ // "40. Speaker from the front (upper body)"
+ ctx->genComboBoxItem("40.話し手正面上", 40);
+ // "64: Speaker from the front (upper body) B"
+ ctx->genComboBoxItem("64.話し手正面上B", 64);
+ // "41. Listener from the waist up"
+ ctx->genComboBoxItem("41.聞き手腰上", 41);
+ // "42. Speaker from the waist up"
+ ctx->genComboBoxItem("42.話し手腰上", 42);
+ // "65. Speaker from the waist up B"
+ ctx->genComboBoxItem("65.話し手腰上B", 65);
+ ctx->endComboBox();
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Short connection"
+ ctx->genSlider(" 短つなぎ", &mMapToolCamShortTimer, 0, 3000, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Long connection"
+ ctx->genSlider(" 長つなぎ", &mMapToolCamLongTimer, 0, 3000, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Attention"
+ ctx->genLabel("- 注目", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Switching timer"
+ ctx->genSlider(" 切替タイマー", &mLockonChangeTimer, 0, 400, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Switching cushion"
+ ctx->genSlider(" 切替クッション", &mLockonChangeCushion, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Subject"
+ ctx->genLabel("- 主観", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Distance to cull the link"
+ ctx->genSlider(" リンク消す距離", &mSubjLinkCullDist, 0.0f, 400.0f, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Manual"
+ ctx->genLabel("- マニュアル", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Start C threshold"
+ ctx->genSlider(" 開始Cしきい", &mManualStartCThreshold, 0.0f, 400.0f, 0, NULL, 0xffff, 0xffff,
+ 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Trimming"
+ ctx->genLabel("- トリミング", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Vista"
+ ctx->genSlider(" ビスタ", &mTrimVistaHeight, 0.0f, 200.0f, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Cinemascope"
+ ctx->genSlider(" シネスコ", &mTrimCineScopeHeight, 0.0f, 200.0f, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Fake angle system"
+ ctx->genLabel("- 嘘アングルシステム", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Value"
+ ctx->genSlider(" 値", &mFalseValue, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Angle"
+ ctx->genSlider(" 角度", &mFalseAngle, 0.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Forced attention"
+ ctx->genLabel("- 強制注目", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Limit distance"
+ ctx->genSlider(" 限界距離", &mForceLockOffDist, 0.0, 100000.0, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Timer"
+ ctx->genSlider(" タイマー", &mForceLockOffTimer, 0, 100000, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Object avoidance"
+ ctx->genLabel("- オブジェクト避け", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Valid"
+ ctx->genCheckBox(" 有効", &mFlags2, 0x400, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Windstorm shaking experiment"
+ ctx->genLabel("- 暴風揺れ実験", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Valid"
+ ctx->genCheckBox(" 有効", &mFlags2, 0x100, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Focal point"
+ ctx->genSlider(" 注視点", &mWindShakeCtr, 0.0, 100.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Angle of view"
+ ctx->genSlider(" 画角", &mWindShakeFvy, 0.0, 10.0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- After throwing"
+ ctx->genLabel("- 投げ後", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Angle"
+ ctx->genSlider(" 角度", &mThrowVAngle, -180.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Height (relative)"
+ ctx->genSlider(" 高さ(相対)", &mThrowCtrOffset, -180.0f, 180.0f, 0, NULL, 0xffff, 0xffff, 0x200,
+ 0x18);
+ // "Timer"
+ ctx->genSlider(" タイマー", &mThrowTimer, 1, 3000, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Cushion"
+ ctx->genSlider(" クッション", &mThrowCushion, 0.0f, 1.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "- Drawing settings"
+ ctx->genLabel("- 描画設定", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ // "Valid"
+ ctx->genCheckBox(" 有効", &mDebugFlags, 0x400, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" near", &mDrawNear, 0.0f, 1000000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+ ctx->genSlider(" far", &mDrawFar, 0.0f, 1000000.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+
+ ctx->genLabel("-", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18);
+}
+#endif
diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp
index 6ccde84b20..838192f95b 100644
--- a/src/d/d_camera.cpp
+++ b/src/d/d_camera.cpp
@@ -3,7 +3,6 @@
#include "d/d_camera.h"
#include "SSystem/SComponent/c_counter.h"
#include "SSystem/SComponent/c_math.h"
-#include