diff --git a/config/ShieldD/splits.txt b/config/ShieldD/splits.txt index c1728a48bb1..98a0f80be83 100644 --- a/config/ShieldD/splits.txt +++ b/config/ShieldD/splits.txt @@ -18,7 +18,7 @@ m_Do/m_Do_main.cpp: .ctors start:0x8062F7C4 end:0x8062F7C8 .data start:0x8065FFA0 end:0x80660CF8 .sdata start:0x8073F140 end:0x8073F264 - .sbss start:0x8074C268 end:0x8074C2A0 + .sbss start:0x8074C260 end:0x8074C298 .sdata2 start:0x8074D740 end:0x8074D768 .bss start:0x80753500 end:0x80753980 @@ -26,7 +26,7 @@ m_Do/m_Do_printf.cpp: .text start:0x8000AF00 end:0x8000B8A0 .data start:0x80660CF8 end:0x80660DE8 .sdata start:0x8073F264 end:0x8073F268 - .sbss start:0x8074C2A0 end:0x8074C2C4 + .sbss start:0x8074C298 end:0x8074C2C4 .bss start:0x80753980 end:0x807541A0 m_Do/m_Do_audio.cpp: diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index f3ce6808583..1e45a750790 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -56883,12 +56883,12 @@ TRK_ISR_OFFSETS = .data:0x8073EEB0; // type:object size:0x3C scope:global data:4 @stringBase0 = .data:0x8073F0E8; // type:object size:0x30 scope:local data:string_table hash:0xA2308515 gTRKExceptionStatus = .data:0x8073F118; // type:object size:0x10 scope:global data:4byte hash:0xD10228AC argument__7mDoMain = .sdata:0x8073F140; // type:object size:0x4 scope:global hash:0x10EF86AC dhash:0xB624F23B -lbl_8073F144 = .sdata:0x8073F144; // type:object size:0x1 data:byte hash:0x67DDC94F dhash:0x8D450DB8 +developmentMode__7mDoMain = .sdata:0x8073F144; // type:object size:0x1 data:byte hash:0x67DDC94F dhash:0x8D450DB8 gameHeapSize__7mDoMain = .sdata:0x8073F148; // type:object size:0x4 scope:global data:4byte hash:0x9FF90D88 dhash:0x56A5165F archiveHeapSize__7mDoMain = .sdata:0x8073F14C; // type:object size:0x4 scope:global data:4byte hash:0x3972AEC4 dhash:0xE081FCB3 memMargin__7mDoMain = .sdata:0x8073F150; // type:object size:0x4 scope:global data:4byte hash:0x349D2104 dhash:0x250ABCB3 e3menu_no__7mDoMain = .sdata:0x8073F154; // type:object size:0x4 scope:global hash:0x124F5384 dhash:0x834B8DF3 -lbl_8073F158 = .sdata:0x8073F158; // type:object size:0x1 data:byte hash:0x75B08B16 +mHeapBriefType = .sdata:0x8073F158; // type:object size:0x1 data:byte hash:0x75B08B16 @115252 = .sdata:0x8073F15C; // type:object size:0x1 scope:local hash:0xAC938A85 @115279 = .sdata:0x8073F160; // type:object size:0x3 scope:local data:string hash:0xAC938A4C @115282 = .sdata:0x8073F164; // type:object size:0x5 scope:local data:string hash:0xAC938B28 diff --git a/configure.py b/configure.py index 2190f7e3315..5c61dfa254e 100755 --- a/configure.py +++ b/configure.py @@ -654,6 +654,7 @@ config.libs = [ Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_eye_hl.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/d_error_msg.cpp"), Object(NonMatching, "d/d_debug_viewer.cpp"), + Object(NonMatching, "d/d_debug_camera.cpp"), Object(NonMatching, "d/actor/d_a_alink.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/actor/d_a_itembase.cpp"), Object(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d/actor/d_a_no_chg_room.cpp"), diff --git a/include/JSystem/JHostIO/JORMContext.h b/include/JSystem/JHostIO/JORMContext.h index f7d68c9776a..d2c01b35145 100644 --- a/include/JSystem/JHostIO/JORMContext.h +++ b/include/JSystem/JHostIO/JORMContext.h @@ -2,9 +2,9 @@ #define JORMCONTEXT_H #include -#include "JSystem/JSupport/JSUMemoryStream.h" -#include "JSystem/JHostIO/JORReflexible.h" #include +#include "JSystem/JHostIO/JORReflexible.h" +#include "JSystem/JSupport/JSUMemoryStream.h" #define MCTX_MSG_RESET 0 #define MCTX_MSG_GET_ROOT_OBJ 2 @@ -30,8 +30,8 @@ #define DEFINE_GEN_CHECKBOX(T, kind) \ void genCheckBox(const char* label, T* pSrc, T mask, u32 style, JOREventListener* pListener, \ u16 posX, u16 posY, u16 width, u16 height) { \ - genCheckBoxSub(kind, label, (uintptr_t)pSrc, style, *pSrc, mask, pListener, posX, posY, width, \ - height); \ + genCheckBoxSub(kind, label, (uintptr_t)pSrc, style, *pSrc, mask, pListener, posX, posY, \ + width, height); \ } #define DEFINE_GEN_CHECKBOX_ID(T, kind) \ @@ -44,8 +44,8 @@ #define DEFINE_GEN_SLIDER(T, kind) \ void genSlider(const char* label, T* pSrc, T rangeMin, T rangeMax, u32 style, \ JOREventListener* pListener, u16 posX, u16 posY, u16 width, u16 height) { \ - genSliderSub(kind, label, (uintptr_t)pSrc, style, *pSrc, rangeMin, rangeMax, pListener, posX, \ - posY, width, height); \ + genSliderSub(kind, label, (uintptr_t)pSrc, style, *pSrc, rangeMin, rangeMax, pListener, \ + posX, posY, width, height); \ } #define DEFINE_GEN_SLIDER_ID(T, kind) \ @@ -55,39 +55,48 @@ width, height); \ } -#define DEFINE_START_COMBO_BOX(T, kind) \ - void startComboBox(const char* label, T* pSrc, u32 style, \ - JOREventListener* pListener, u16 posX, u16 posY, u16 width, u16 height) { \ - startSelectorSub('CMBX', kind, label, (uintptr_t)pSrc, style, *pSrc, pListener, posX, \ - posY, width, height); \ +#define DEFINE_START_COMBO_BOX(T, kind) \ + void startComboBox(const char* label, T* pSrc, u32 style, JOREventListener* pListener, \ + u16 posX, u16 posY, u16 width, u16 height) { \ + startSelectorSub('CMBX', kind, label, (uintptr_t)pSrc, style, *pSrc, pListener, posX, \ + posY, width, height); \ } -#define DEFINE_START_COMBO_BOX_ID(T, kind) \ - void startComboBoxID(const char* label, u32 id, T data, u32 style, \ - JOREventListener* pListener, u16 posX, u16 posY, u16 width, u16 height) { \ - startSelectorSub('CMBX', kind, label, id, style, data, pListener, posX, \ - posY, width, height); \ +#define DEFINE_START_COMBO_BOX_ID(T, kind) \ + void startComboBoxID(const char* label, u32 id, T data, u32 style, \ + JOREventListener* pListener, u16 posX, u16 posY, u16 width, u16 height) { \ + startSelectorSub('CMBX', kind, label, id, style, data, pListener, posX, posY, width, \ + height); \ } -#define DEFINE_UPDATE_SLIDER(T) \ - void updateSlider(u32 mode, T* pSrc, T rangeMin, T rangeMax, u32 param_5) { \ - updateSliderSub(mode, (uintptr_t)pSrc, *pSrc, rangeMin, rangeMax, param_5); \ +#define DEFINE_UPDATE_SLIDER(T) \ + void updateSlider(u32 mode, T* pSrc, T rangeMin, T rangeMax, u32 param_5) { \ + updateSliderSub(mode, (uintptr_t)pSrc, *pSrc, rangeMin, rangeMax, param_5); \ } -#define DEFINE_UPDATE_SLIDER_ID(T) \ - void updateSliderID(u32 mode, u32 id, T value, T rangeMin, T rangeMax, u32 param_5) { \ - updateSliderSub(mode, id, value, rangeMin, rangeMax, param_5); \ +#define DEFINE_UPDATE_SLIDER_ID(T) \ + void updateSliderID(u32 mode, u32 id, T value, T rangeMin, T rangeMax, u32 param_5) { \ + updateSliderSub(mode, id, value, rangeMin, rangeMax, param_5); \ + } + +#define DEFINE_START_RADIO_BUTTON(T, kind) \ + void startRadioButton(const char* label, T* pSrc, u32 style, JOREventListener* pListener, \ + u16 posX, u16 posY, u16 width, u16 height) { \ + startSelectorSub('RBTN', kind, label, (uintptr_t)pSrc, style, *pSrc, pListener, posX, \ + posY, width, height); \ } namespace jhostio { - enum EKind { - EKind_8B = 0x08, - EKind_16B = 0x10, - EKind_32B = 0x20, - }; +enum EKind { + EKind_8B = 0x08, + EKind_16B = 0x10, + EKind_32B = 0x20, +}; - inline u32 GetEKindSize(u32 param_0) { return param_0 & 0xFF; } +inline u32 GetEKindSize(u32 param_0) { + return param_0 & 0xFF; } +} // namespace jhostio class JORReflexible; class JORFile; @@ -156,9 +165,7 @@ public: // empty function } - void startUpdateNode(JORReflexible* obj) { - putNode(obj); - } + void startUpdateNode(JORReflexible* obj) { putNode(obj); } void genNodeSub(const char* label, JORReflexible* i_node, u32, u32); void putNode(JORReflexible* obj); @@ -230,14 +237,21 @@ public: DEFINE_START_COMBO_BOX_ID(int, JORPropertyEvent::EKind_ValueID) - void endComboBox() { - endSelectorSub(); - } + void endComboBox() { endSelectorSub(); } void genComboBoxItem(const char* label, s32 itemNo) { genSelectorItemSub(label, itemNo, 0, 0, 0, 0, 0); } + /** + * === RADIO BUTTON === + */ + DEFINE_START_RADIO_BUTTON(u8, 0x100 | jhostio::EKind_8B) + DEFINE_START_RADIO_BUTTON(s16, jhostio::EKind_16B) + DEFINE_START_RADIO_BUTTON(s32, jhostio::EKind_32B) + + void endRadioButton() { endSelectorSub(); } + void genRadioButtonItem(const char* label, s32 itemNo, u32 param_2, u16 posX, u16 posY, u16 width, u16 height) { genSelectorItemSub(label, itemNo, param_2, posX, posY, width, height); @@ -246,8 +260,7 @@ public: void updateControl(u32 mode, u32 id, u32 param_2); void updateControl(u32 mode, u32 id, const char* param_2); void updateLabel(u32 mode, u32 id, const char* param_2) { updateControl(mode, id, param_2); } - void updateSliderSub(u32 mode, u32 id, s32 value, s32 rangeMin, s32 rangeMax, - u32 param_5); + void updateSliderSub(u32 mode, u32 id, s32 value, s32 rangeMin, s32 rangeMax, u32 param_5); void updateCheckBoxSub(u32 mode, u32 id, u16 value, u16 mask, u32 param_4); void updateSelectorSub(u32 mode, u32 id, s32 value, u32 param_3); void updateEditBoxID(u32 mode, u32 id, const char* string, u32 param_3, u16 length); diff --git a/include/JSystem/JKernel/JKRExpHeap.h b/include/JSystem/JKernel/JKRExpHeap.h index 59b914dc2d9..4215fd4a2c2 100644 --- a/include/JSystem/JKernel/JKRExpHeap.h +++ b/include/JSystem/JKernel/JKRExpHeap.h @@ -66,7 +66,7 @@ public: s32 getUsedSize(u8 groupId) const; s32 getTotalUsedSize(void) const; - CMemBlock* getHeadUsedList() const { return mHeadUsedList; } + CMemBlock* getUsedFirst() { return mHeadUsedList; } void setAllocationMode(EAllocMode mode) { mAllocMode = mode; } diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index af34015ee42..b82c9a1d11a 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -110,6 +110,12 @@ public: float Sin(void) const; float Cos(void) const; float Tan(void) const; + + operator f32() const { return mDegree; } + + cDegree operator*(float v) const { + return cDegree(mDegree * v); + } }; class cSPolar { diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index da25eff0cc7..7694407de4f 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -224,6 +224,7 @@ public: STATIC_ASSERT(0x10 == sizeof(cCcD_ObjCommonBase)); +#pragma push #pragma pack(1) class cCcD_ObjAt : public cCcD_ObjCommonBase { public: @@ -247,7 +248,7 @@ protected: /* 0x14 */ u8 mAtp; /* 0x15 */ u8 field_0x15[3]; }; -#pragma pack() +#pragma pop STATIC_ASSERT(0x18 == sizeof(cCcD_ObjAt)); diff --git a/include/d/actor/d_a_alink.h b/include/d/actor/d_a_alink.h index 91815f9d58a..3c6ce1aef56 100644 --- a/include/d/actor/d_a_alink.h +++ b/include/d/actor/d_a_alink.h @@ -3470,7 +3470,7 @@ public: } s32 checkPlayerDemoMode() const { return mDemo.getDemoType(); } - BOOL checkSpecialDemoMode() const { return mDemo.getDemoType() == 5; } + BOOL checkSpecialDemoMode() const { return mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SPECIAL_e; } static bool checkMidnaChargeAttack() { return dComIfGs_isEventBit(0x501); } u16 getMidnaMsgNum() const { return mMidnaMsgNum; } u32 getStartEvent() { return fopAcM_GetParam(this) >> 0x18; } @@ -4286,7 +4286,7 @@ public: /* 0x03178 */ int field_0x3178; /* 0x0317C */ int field_0x317c; /* 0x03180 */ int field_0x3180; - /* 0x03184 */ int field_0x3184; + /* 0x03184 */ int mAlinkStaffId; /* 0x03188 */ int field_0x3188; /* 0x0318C */ int field_0x318c; /* 0x03190 */ int field_0x3190; diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 442224a7c35..275572e46c0 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -243,15 +243,23 @@ public: DEMO_NEW_ANM0_e = 0x200, }; + enum { + DEMO_TYPE_TOOL_e = 1, + DEMO_TYPE_SYSTEM_e, + DEMO_TYPE_ORIGINAL_e, + DEMO_TYPE_START_e, + DEMO_TYPE_SPECIAL_e, + }; + void setDemoType(u16 pType) { mDemoType = pType; } int getDemoType() const { return mDemoType; } void setDemoMode(u32 mode) { mDemoMode = mode; } u32 getDemoMode() const { return mDemoMode; } int getParam1() const { return mParam1; } s16 getParam2() const { return mParam2; } - void setOriginalDemoType() { setDemoType(3); } - void setSpecialDemoType() { setDemoType(5); } - void setSystemDemoType() { setDemoType(2); } + void setOriginalDemoType() { setDemoType(DEMO_TYPE_ORIGINAL_e); } + void setSpecialDemoType() { setDemoType(DEMO_TYPE_SPECIAL_e); } + void setSystemDemoType() { setDemoType(DEMO_TYPE_SYSTEM_e); } void setStick(f32 stick) { mStick = stick; } void setMoveAngle(s16 angle) { mDemoMoveAngle = angle; } s16 getMoveAngle() const { return mDemoMoveAngle; } @@ -261,13 +269,13 @@ public: void setParam1(int value) { mParam1 = value; } void setParam2(int value) { mParam2 = value; } void setPos0(const cXyz* pos) { mDemoPos0 = *pos; } - void setToolDemoType() { setDemoType(1); } + void setToolDemoType() { setDemoType(DEMO_TYPE_TOOL_e); } s16 getTimer() const { return mTimer; } void decTimer() { mTimer--; } void setTimer(s16 i_timer) { mTimer = i_timer; } cXyz* getPos0() { return &mDemoPos0; } void resetDemoType() { setDemoType(0); } - void setStartDemoType() { setDemoType(4); } + void setStartDemoType() { setDemoType(DEMO_TYPE_START_e); } private: /* 0x00 */ u16 mDemoType; diff --git a/include/d/d_camera.h b/include/d/d_camera.h index b6159aafb56..42e0fbc69c3 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -1085,6 +1085,20 @@ public: mWindowAspect = param_0 / param_1; } + f32 R() { + if (chkFlag(0x10)) { + return mUpOverride.field_0x24.R(); + } else { + return mDirection.R(); + } + } + + cXyz iCenter() { return mViewCache.mCenter; } + cXyz iEye() { return mViewCache.mEye; } + s16 iU() { return mViewCache.mDirection.U().Inv(); } + s16 iV() { return mViewCache.mDirection.V(); } + f32 iR() { return mViewCache.mDirection.R(); } + s16 U2() { if (chkFlag(0x10)) { return mViewCache.mDirection.U(); diff --git a/include/d/d_debug_camera.h b/include/d/d_debug_camera.h new file mode 100644 index 00000000000..d81d6f87239 --- /dev/null +++ b/include/d/d_debug_camera.h @@ -0,0 +1,186 @@ +#ifndef D_DEBUG_CAMERA_H +#define D_DEBUG_CAMERA_H + +#include "d/d_camera.h" +#include "JSystem/JHostIO/JORMContext.h" +#include "JSystem/JHostIO/JORFile.h" + +enum dDbgCam_KeyAction { + /* | */ dDbgCam_KeyAction_FIXEDFRM, + /* ] */ dDbgCam_KeyAction_UNITRANS, + /* > */ dDbgCam_KeyAction_BSPLINE, + /* - */ dDbgCam_KeyAction_NOACTION, +}; + +class dDbgCamera_c; + +class dDbgCamKey_c { +public: + dDbgCamKey_c() {} + ~dDbgCamKey_c(); + + /* 0x00 */ cXyz mCenter; + /* 0x0C */ cXyz mEye; + /* 0x18 */ f32 mFovy; + /* 0x1C */ f32 mBank; + struct { + /* 0x20 */ fpc_ProcID id; + /* 0x24 */ char name[8]; + } mActorInfo; + /* 0x2C */ int mAction; + /* 0x30 */ int mTimer; +}; + +class dDbgCamSetup_c : public JORReflexible { +public: + dDbgCamSetup_c(); + ~dDbgCamSetup_c() {} + + void Init(dDbgCamera_c*); + void Finish(); + f32 Translate(f32); + s16 Rotate(f32); + f32 FlatMove(f32); + f32 Turbo(f32); + + void genMessage(JORMContext*); + void listenPropertyEvent(const JORPropertyEvent*); + + f32 FovyTick() { return mFovyTick; } + f32 RotAccel() { return mRotAccel; } + f32 TransAccel() { return mTransAccel; } + int CenterMarker() { return mCenterMarker; } + f32 CenterBall() { return mCenterBall; } + f32 CenterCloss() { return mCenterCross; } + + bool CheckFlag(u16 i_flag) { return (i_flag & mFlag) ? true : false; } + + /* 0x04 */ s32 mActorSrchType; + /* 0x08 */ f32 mActorSrchRange; + /* 0x0C */ fpc_ProcID mActorID; + /* 0x10 */ dDbgCamera_c* mpDbgCam; + /* 0x14 */ f32 mMoveSpeed; + /* 0x18 */ f32 mMoveTurbo; + /* 0x1C */ f32 mMoveParallelShift; + /* 0x20 */ f32 mRotateSpeed; + /* 0x24 */ f32 mFovyTick; + /* 0x28 */ f32 mTransAccel; + /* 0x2C */ f32 mRotAccel; + /* 0x30 */ f32 mMoveMax; + /* 0x34 */ f32 mRotateMax; + /* 0x38 */ f32 mUnkMax; + /* 0x3C */ f32 mCenterCross; + /* 0x40 */ f32 mCenterBall; + /* 0x44 */ s32 mCenterMarker; + /* 0x48 */ u16 mFlag; + /* 0x4C */ cXyz mGazePoint; + /* 0x58 */ cXyz mPerspective; + /* 0x64 */ f32 mAngle; + /* 0x68 */ cXyz field_0x68; + /* 0x74 */ cXyz field_0x74; + /* 0x80 */ s8 m_childNo; + /* 0x84 */ s32 mPosX; + /* 0x88 */ s32 mPosY; +}; + +class dDbgCamera_c { +public: + dDbgCamera_c() {} + ~dDbgCamera_c() {} + + void InitlChk(); + int SetlChk(dBgS_LinChk); + + int moveTool(); + int cmdTool(); + int makeZevData(); + void printZevData(); + void WriteZevData(); + void monitor(); + bool showCenterMarker(); + bool showCameraPos(); + bool showIdlCameraPos(); + void Init(dCamera_c*); + void Finish(); + void Reset(dCamera_c*); + int Run(); + int DrawShape(); + int Report(int, int, JUtility::TColor, const char*, ...); + void OpenFile(); + void PrintFile(char*, ...); + void CloseFile(); + + char* ActionName(s32 i_action) { + static char* name[] = { + "FIXEDFRM", + "UNITRANS", + "BSPLINE", + "NOACTION", + }; + + return name[i_action]; + } + + cXyz Center() { return mRunKey.mCenter; } + void Fovy(f32 fovy) { mRunKey.mFovy = fovy; }; + void Eye(const cXyz& eye) { mRunKey.mEye = eye; }; + void Center(const cXyz& center) { mRunKey.mCenter = center; }; + f32 Fovy() { return mRunKey.mFovy; } + s16 Bank() { return cSAngle(mRunKey.mBank).Val(); } + cXyz Up() { return mUp; } + cXyz Eye() { return mRunKey.mEye; } + bool Playing() { return mIsPlaying; } + + dDbgCamKey_c PlaneKey() { + dDbgCamKey_c rt; + rt.mCenter = mpCamera->Center(); + rt.mEye = mpCamera->Eye(); + rt.mFovy = mpCamera->Fovy(); + rt.mBank = mpCamera->Bank().Degree(); + rt.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e; + strcpy(rt.mActorInfo.name, "WORLD"); + rt.mAction = dDbgCam_KeyAction_NOACTION; + rt.mTimer = 20; + return rt; + } + + char ActionSymbol(s32 i_action) { return "|]>-..."[i_action]; } + + /* 0x000 */ dCamera_c* mpCamera; + /* 0x004 */ dDbgCamKey_c mRunKey; + /* 0x038 */ cXyz mUp; + /* 0x044 */ cSGlobe field_0x44; + /* 0x04C */ int mPadNo; + /* 0x050 */ int field_0x50; + /* 0x054 */ u32 field_0x54; + /* 0x058 */ int field_0x58; + /* 0x05C */ int mCmdMode; + /* 0x060 */ char mActionKey[32]; + /* 0x080 */ u8 field_0x80; + /* 0x084 */ dDbgCamKey_c mKeys[32]; + class { + public: + /* 0x000 */ int field_0x0; + /* 0x004 */ int field_0x4; + /* 0x008 */ u8 field_0x8[0x010 - 0x008]; + /* 0x010 */ cXyz field_0x10[32]; + /* 0x190 */ cXyz field_0x190[32]; + } /* 0x704 */ field_0x704; + /* 0xA14 */ u8 field_0xA14[0xB14 - 0xA14]; + /* 0xB14 */ int field_0xb14; + /* 0xB18 */ bool mIsPlaying; + /* 0xB1C */ dBgS_LinChk mLchk[2]; + /* 0xBFC */ int mLchkNum; + /* 0xC00 */ int field_0xc00; + /* 0xC04 */ int field_0xc04; + /* 0xC08 */ int field_0xc08; + /* 0xC0C */ int field_0xc0c; + /* 0xC10 */ f32 field_0xc10; + /* 0xC14 */ f32 field_0xc14; + /* 0xC18 */ int field_0xc18; + /* 0xC1C */ int field_0xc1c; + /* 0xC20 */ dDbgCamSetup_c mCamSetup; + /* 0xCAC */ JORFile mFile; +}; + +#endif diff --git a/include/d/d_event_data.h b/include/d/d_event_data.h index f67d92eda16..f07a900705d 100644 --- a/include/d/d_event_data.h +++ b/include/d/d_event_data.h @@ -53,6 +53,20 @@ public: /* 0x34 */ u8 field_0x34[12]; }; // Size: 0x40 +#if DEBUG +class dEvDtData_DBG_c : public dEvDtData_c { +public: + void Init() { + mName[0] = '\0'; + mIndex = 0; + mType = 5; + mDataIndex = 0; + mNumber = 0; + mNext = -1; + } +}; +#endif + class dEvDtCut_c { public: int startCheck(); @@ -64,7 +78,6 @@ public: int getStartFlag(int idx) { return mFlags[idx]; } u32 getTagId() { return mTagID; } -private: /* 0x00 */ char mName[32]; /* 0x20 */ u32 mTagID; /* 0x24 */ u32 mIndex; @@ -75,6 +88,27 @@ private: /* 0x40 */ u8 field_0x40[0x10]; }; // Size: 0x50 +#if DEBUG +class dEvDtCut_DBG_c : public dEvDtCut_c { +public: + void Init() { + int i; + + mName[0] = '\0'; + mTagID = 0; + mIndex = 0; + + for (i = 0; i < 3; i++) { + mFlags[i] = -1; + } + + mFlagId = 0; + mDataTop = -1; + mNext = -1; + } +}; +#endif + class dEvDtStaff_c { public: enum StaffType { @@ -152,7 +186,7 @@ public: /* 0x28 */ u32 mFlagID; /* 0x2C */ int mType; /* 0x30 */ int mStartCut; - /* 0x34 */ u8 field_0x34[2]; + /* 0x34 */ s16 field_0x34; /* 0x36 */ s16 mWaitTimer; /* 0x38 */ int mCurrentCut; /* 0x3C */ s32 field_0x3c; @@ -163,6 +197,21 @@ public: STATIC_ASSERT(sizeof(dEvDtStaff_c) == 0x50); +#if DEBUG +class dEvDtStaff_DBG_c : public dEvDtStaff_c { +public: + void Init() { + mName[0] = '\0'; + mTagID = 0; + mIndex = 0; + mFlagID = 0; + mType = 13; + mStartCut = 0; + field_0x34 = 0; + } +}; +#endif + class dEvDtEvent_c { public: int finishCheck(); @@ -179,15 +228,48 @@ public: /* 0x28 */ int mPriority; /* 0x2C */ int mStaff[20]; /* 0x7C */ int mNStaff; - /* 0x80 */ u8 field_0x80[4]; + /* 0x80 */ int field_0x80; /* 0x84 */ int field_0x84; /* 0x88 */ int mFlags[3]; /* 0x94 */ bool mPlaySound; - /* 0x95 */ u8 field_0x95[0xF]; + /* 0x96 */ s16 field_0x96; + /* 0x98 */ f32 field_0x98; + /* 0x9C */ f32 field_0x9c; + /* 0xA0 */ f32 field_0xa0; /* 0xA4 */ int mEventState; - /* 0xA8 */ u8 field_0xa8[8]; + /* 0xA8 */ int field_0xa8; + /* 0xAC */ u8 field_0xac[4]; }; // Size: 0xB0 +#if DEBUG +class dEvDtEvent_DBG_c : public dEvDtEvent_c { +public: + void Init() { + int i; + + mName[0] = '\0'; + mIndex = 0; + mStaff[0] = 0; + mNStaff = 0; + + for (i = 0; i < 3; i++) { + mFlags[i] = -1; + } + + field_0x80 = field_0x84 = 0; + mPlaySound = false; + field_0x24 = 1; + mPriority = 0; + mEventState = 0; + field_0xa8 = 0; + field_0x96 = 0; + field_0x98 = 0.0f; + field_0x9c = 0.0f; + field_0xa0 = 0.0f; + } +}; // Size: 0xB0 +#endif + class dEvDtFlag_c { public: dEvDtFlag_c() {} diff --git a/include/d/d_s_logo.h b/include/d/d_s_logo.h index 200a6e83700..20f1d8b1baf 100644 --- a/include/d/d_s_logo.h +++ b/include/d/d_s_logo.h @@ -73,6 +73,14 @@ public: u8 getPalLanguage(); #endif + #if DEBUG + static void onOpeningCut() { + mOpeningCut = true; + } + + static u8 mOpeningCut; + #endif + public: /* 0x1C4 */ request_of_phase_process_class field_0x1c4; /* 0x1CC */ mDoDvdThd_toMainRam_c* sceneCommand; diff --git a/include/d/d_s_play.h b/include/d/d_s_play.h index 0f961ccf84d..190402d1e62 100644 --- a/include/d/d_s_play.h +++ b/include/d/d_s_play.h @@ -55,7 +55,7 @@ public: /* 0x0006 */ u8 mPresetData[10000]; /* 0x2716 */ u8 field_0x2716; /* 0x2717 */ u8 field_0x2717; - /* 0x2718 */ char mFilename[100]; + /* 0x2718 */ u8 filename_buf[100]; }; class dScnPly_c : public scene_class { diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 45b7b7f88d0..18949a251a1 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1170,6 +1170,14 @@ public: static u8 mNoChangeRoom; static s8 mRoomReadId; + #if DEBUG + static void onNoArcBank() { + mNoArcBank = true; + } + + static u8 mNoArcBank; + #endif + private: /* 0x0 */ u8 field_0x0[4]; }; diff --git a/include/f_ap/f_ap_game.h b/include/f_ap/f_ap_game.h index 9abf3339664..f7cf3d6ca79 100644 --- a/include/f_ap/f_ap_game.h +++ b/include/f_ap/f_ap_game.h @@ -18,7 +18,7 @@ public: /* 0x0C */ f32 mLROnValue; /* 0x10 */ f32 mLROffValue; /* 0x14 */ bool mUsingHostIO; - /* 0x15 */ bool mDisplayMeter; + /* 0x15 */ u8 mDisplayMeter; /* 0x16 */ u8 mDisplayPrint; /* 0x17 */ bool mDisplay2D; /* 0x18 */ bool mDisplayParticle; @@ -58,7 +58,7 @@ inline bool fapGmHIO_isPrint() { return g_HIO.mDisplayPrint & 1; } -inline bool fapGmHIO_getMeter() { +inline u8 fapGmHIO_getMeter() { return g_HIO.mDisplayMeter; } diff --git a/include/m_Do/m_Do_main.h b/include/m_Do/m_Do_main.h index 5e4aa326631..6ece441c63d 100644 --- a/include/m_Do/m_Do_main.h +++ b/include/m_Do/m_Do_main.h @@ -9,6 +9,8 @@ class JKRExpHeap; void version_check(); s32 LOAD_COPYDATE(void*); +const int HeapCheckTableNum = 8; + class HeapCheck { public: HeapCheck(JKRExpHeap* heap, const char* name, const char* jName) { @@ -26,7 +28,7 @@ public: JKRExpHeap* getHeap() { return mHeap; } void setHeap(JKRExpHeap* i_heap) { mHeap = i_heap; } void setHeapSize(u32 i_size) { mTargetHeapSize = i_size; } - s32 getMaxTotalUsedSize() { return mMaxTotalUsedSize; } + s32 getMaxTotalUsedSize() const { return mMaxTotalUsedSize; } s32 getMaxTotalFreeSize() { return mMaxTotalFreeSize; } const char* getName() const { return mName; } void saveRelBase() { @@ -34,6 +36,8 @@ public: mTotalUsedSize = mHeap->getTotalUsedSize(); } + u32 getTargetHeapSize() const { return mTargetHeapSize; } + u32 getRelUsedCount() const { return getUsedCount() - mUsedCount; } u32 getRelTotalUsedSize() const { return mHeap->getTotalUsedSize() - mTotalUsedSize; } @@ -51,13 +55,15 @@ private: }; struct mDoMain { - static char COPYDATE_STRING[18]; - static u32 memMargin; - #ifdef DEBUG +#ifdef DEBUG + static int argument; + static int e3menu_no; static u32 archiveHeapSize; static u32 gameHeapSize; - #endif - static u8 mHeapBriefType; +#endif + + static char COPYDATE_STRING[18]; + static u32 memMargin; static OSTime sPowerOnTime; static OSTime sHungUpTime; static s8 developmentMode; diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/scanf.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/scanf.h index ac28dd8de99..53543a129a8 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/scanf.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/scanf.h @@ -34,9 +34,10 @@ typedef struct { } __wInStrCtrl; int __StringRead(void* str, int ch, int behavior); +int sscanf(const char* buffer, const char* format, ...); #ifdef __cplusplus } #endif -#endif /* _MSL_COMMON_SCANF_H */ \ No newline at end of file +#endif /* _MSL_COMMON_SCANF_H */ diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stdio.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stdio.h index 367bd24e78a..d6d4016944e 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stdio.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/stdio.h @@ -5,9 +5,10 @@ #include "file_io.h" #include "printf.h" #include "extras.h" +#include "scanf.h" #define stdin (&__files._stdin) #define stdout (&__files._stdout) #define stderr (&__files._stderr) -#endif \ No newline at end of file +#endif diff --git a/src/d/actor/d_a_alink.cpp b/src/d/actor/d_a_alink.cpp index 2c7364fb3c9..f9ea4a3a79f 100644 --- a/src/d/actor/d_a_alink.cpp +++ b/src/d/actor/d_a_alink.cpp @@ -4375,7 +4375,7 @@ void daAlink_c::playerInit() { mEquipItem = fpcNm_ITEM_NONE; offSwordModel(); - field_0x3184 = -1; + mAlinkStaffId = -1; mExitID = 0x3F; onNoResetFlg0(FLG0_SWIM_UP); offOxygenTimer(); @@ -5941,7 +5941,7 @@ void daAlink_c::setSwordAtCollision(int param_0) { /* 800AA5E8-800AA6B4 0A4F28 00CC+00 4/4 0/0 0/0 .text checkNoCollisionCorret__9daAlink_cFv */ BOOL daAlink_c::checkNoCollisionCorret() { - if (checkModeFlg(0x12800) || mDemo.getDemoType() == 1 || mProcID == PROC_DOOR_OPEN || + if (checkModeFlg(0x12800) || mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_TOOL_e || mProcID == PROC_DOOR_OPEN || (checkEventRun() && (!strcmp(dComIfGp_getEventManager().getRunEventName(), "SCENE_EXIT") || (fopAcM_getTalkEventPartner(this) && @@ -10356,7 +10356,7 @@ void daAlink_c::decideDoStatus() { BOOL daAlink_c::checkWaitAction() { if (checkWolf()) { if (checkModeFlg(0x01000000)) { - if (mDemo.getDemoType() == 4) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e) { return 0; } return procWolfWaitInit(); @@ -10412,7 +10412,7 @@ BOOL daAlink_c::checkWaitAction() { return procGrabWaitInit(); } - if (checkModeFlg(0x01000000) && mDemo.getDemoType() == 4) { + if (checkModeFlg(0x01000000) && mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e) { return 0; } @@ -10555,7 +10555,7 @@ BOOL daAlink_c::checkAutoJumpAction() { return 0; } - if (!checkModeFlg(0x70C12) && mProcID != PROC_DOOR_OPEN && mProcID != PROC_WARP && !getSumouMode() && mDemo.getDemoType() != 5 && !checkMagneBootsOn() && !mLinkAcch.ChkGroundHit()) { + if (!checkModeFlg(0x70C12) && mProcID != PROC_DOOR_OPEN && mProcID != PROC_WARP && !getSumouMode() && mDemo.getDemoType() != daPy_demo_c::DEMO_TYPE_SPECIAL_e && !checkMagneBootsOn() && !mLinkAcch.ChkGroundHit()) { if (checkNoResetFlg0(FLG0_UNDERWATER)) { speed.y = 0.0f; return procSwimWaitInit(0); @@ -12820,7 +12820,7 @@ void daAlink_c::posMove() { if (checkNoResetFlg0(FLG0_SWIM_UP) && mProcID != PROC_SWIM_DIVE) { current.pos.y = mWaterY; - } else if (mDemo.getDemoType() == 4 || mProcID == PROC_ELEC_DAMAGE || + } else if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e || mProcID == PROC_ELEC_DAMAGE || dComIfGp_checkPlayerStatus0(0, 0x10)) { speed.y = 0.0f; @@ -15548,7 +15548,7 @@ int daAlink_c::procWaitTurn() { } else if (angle == 0) { if (checkEventRun()) { if (mDemo.getDemoMode() == 5) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (!checkNextAction(0)) { checkWaitAction(); } @@ -15742,7 +15742,7 @@ int daAlink_c::procSideStepLand() { if (frameCtrl_p->checkAnmEnd()) { if (mDemo.getDemoMode() == 16) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -15985,7 +15985,7 @@ int daAlink_c::procFrontRoll() { if (frameCtrl_p->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x28) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { if (!checkInputOnR()) { mNormalSpeed -= daAlinkHIO_frontRoll_c0::m.mMinSpeed; @@ -16235,7 +16235,7 @@ int daAlink_c::procSideRoll() { if (frameCtrl_p->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x49) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { if (!checkAttentionLock()) { offNoResetFlg2(FLG2_UNK_8000000); @@ -16391,7 +16391,7 @@ int daAlink_c::procBackJumpLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x10) { - dComIfGp_getPEvtManager()->cutEnd(field_0x3184); + dComIfGp_getPEvtManager()->cutEnd(mAlinkStaffId); } else { if (!checkAttentionLock()) { offNoResetFlg2(FLG2_UNK_8000000); @@ -17284,7 +17284,7 @@ int daAlink_c::procCoMetamorphose() { if (!checkEventRun()) { checkWaitAction(); } else { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; } @@ -17304,7 +17304,7 @@ int daAlink_c::procCoMetamorphose() { mProcVar5.field_0x3012 = 1; if (mDemo.getParam0() == 1 && (mDemo.getDemoMode() == 0x39 || mDemo.getDemoMode() == 0x3A)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (checkWolf()) { setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, -1.0f); @@ -17336,7 +17336,7 @@ int daAlink_c::procCoMetamorphose() { mDoMtx_stack_c::multVec(&sp8, ¤t.pos); field_0x2f99 = 0xC; - if (mDemo.getDemoType() == 3) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_ORIGINAL_e) { mFallVoiceInit = 1; } @@ -17350,7 +17350,7 @@ int daAlink_c::procCoMetamorphose() { return checkWaitAction(); } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (checkWolf()) { setSingleAnimeWolfBaseSpeed(WANM_WAIT, daAlinkHIO_wlMoveNoP_c0::m.field_0x14, -1.0f); @@ -17477,7 +17477,7 @@ int daAlink_c::procCoMetamorphoseOnly() { } } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -17588,7 +17588,7 @@ int daAlink_c::execute() { setSelectEquipItem(0); if (dComIfGp_event_runCheck()) { - field_0x3184 = dComIfGp_evmng_getMyStaffId("Alink", this, 0); + mAlinkStaffId = dComIfGp_evmng_getMyStaffId("Alink", this, 0); if (eventInfo.checkCommandDoor() && !dComIfGp_event_chkEventFlag(4) && mEquipItem == 0x102) diff --git a/src/d/actor/d_a_alink_bottle.inc b/src/d/actor/d_a_alink_bottle.inc index 9f0acf5de5b..227794fee81 100644 --- a/src/d/actor/d_a_alink_bottle.inc +++ b/src/d/actor/d_a_alink_bottle.inc @@ -218,7 +218,7 @@ int daAlink_c::commonBottleDrink(int param_0) { } field_0x072c->setFrame(1.0f); - if (mDemo.getDemoType() == 5) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SPECIAL_e) { dComIfGs_setEquipBottleItemIn(mSelectItemId, fpcNm_ITEM_HALF_MILK_BOTTLE); } } else if (mProcVar2.field_0x300c == 0) { @@ -276,7 +276,7 @@ int daAlink_c::commonBottleDrink(int param_0) { } field_0x072c->setFrame(2.0f); - if (mDemo.getDemoType() == 5) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SPECIAL_e) { dComIfGs_setEquipBottleItemEmpty(mSelectItemId); } @@ -404,7 +404,7 @@ int daAlink_c::procBottleDrinkInit(u16 i_itemNo) { /* 8010F698-8010F6F4 109FD8 005C+00 1/0 0/0 0/0 .text procBottleDrink__9daAlink_cFv */ int daAlink_c::procBottleDrink() { if (mProcVar3.field_0x300e != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { mProcVar3.field_0x300e = commonBottleDrink(0); } diff --git a/src/d/actor/d_a_alink_copyrod.inc b/src/d/actor/d_a_alink_copyrod.inc index 920685ea6c9..2340ab0d4e3 100644 --- a/src/d/actor/d_a_alink_copyrod.inc +++ b/src/d/actor/d_a_alink_copyrod.inc @@ -467,7 +467,7 @@ int daAlink_c::procCopyRodRevive() { simpleAnmPlay(field_0x0724); if (mUnderFrameCtrl[0].checkAnmEnd()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; diff --git a/src/d/actor/d_a_alink_cut.inc b/src/d/actor/d_a_alink_cut.inc index cbdad7779a6..446bbd825c1 100644 --- a/src/d/actor/d_a_alink_cut.inc +++ b/src/d/actor/d_a_alink_cut.inc @@ -981,7 +981,7 @@ int daAlink_c::procCutNormal() { resetCombo(1); if (mDemo.getDemoMode() == 0x24 || mDemo.getDemoMode() == 0x54) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -1241,7 +1241,7 @@ int daAlink_c::procCutFinish() { mProcVar0.field_0x3008--; } } else if (mDemo.getDemoMode() == 0x24 || mDemo.getDemoMode() == 0x54) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { mNormalSpeed = 0.0f; field_0x2f98 = 2; @@ -1408,7 +1408,7 @@ int daAlink_c::procCutFinishJumpUpLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x52) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (mProcVar0.field_0x3008 > 0) { if (!(frameCtrl->getFrame() > field_0x3484) || !checkCutCancelNextMode(3)) { mProcVar0.field_0x3008--; @@ -1766,7 +1766,7 @@ int daAlink_c::procCutTurn() { mProcVar0.field_0x3008--; } } else if (mDemo.getDemoMode() == 0x24) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { field_0x2f98 = 3; checkNextAction(0); @@ -1903,7 +1903,7 @@ int daAlink_c::procCutTurnMove() { if (mDemo.getDemoMode() == 0x5B || mDemo.getDemoMode() == 0x5C) { if (var_r4) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } else if ((mProcVar2.field_0x300c == 0 && swordButton()) || (mProcVar2.field_0x300c != 0 && doButton())) { f32 var_f30 = 0.0f; @@ -2156,7 +2156,7 @@ int daAlink_c::procCutDownLand() { mProcVar0.field_0x3008--; } else if (mProcVar3.field_0x300e != 0) { if (mDemo.getDemoMode() == 0x51) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { procBackJumpInit(1); } @@ -2296,7 +2296,7 @@ int daAlink_c::procCutHeadLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x53) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -2472,7 +2472,7 @@ int daAlink_c::procCutLargeJumpLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x56) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -2547,7 +2547,7 @@ int daAlink_c::procSwordUnequipSp() { if (frameCtrl->checkAnmEnd()) { if (field_0x3198 != 0) { if (mDemo.getDemoMode() == 0x1E) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -2571,7 +2571,7 @@ int daAlink_c::procSwordUnequipSp() { if (mDemo.getParam0() == 1) { frameCtrl->setFrame(13.0f); frameCtrl->setRate(0.0f); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frameCtrl->getRate() < 0.0099999998f) { setWaterInAnmRate(frameCtrl, daAlinkHIO_cut_c0::m.mFlourishEndAnmSpeed); } diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index cb6a98e6236..ebf98977420 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -1308,7 +1308,7 @@ int daAlink_c::procLargeDamageUpInit(int param_0, int param_1, s16 param_2, s16 if (param_0 == -5 && mDemo.getParam1() > 0) { mProcVar0.field_0x3008 = mDemo.getParam1(); var_f31 = 0.0f; - } else if (param_0 == -2 && mDemo.getDemoType() == 1) { + } else if (param_0 == -2 && mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_TOOL_e) { mProcVar0.field_0x3008 = 0x1E; var_f31 = 0.0f; } else { @@ -1406,7 +1406,7 @@ int daAlink_c::procLargeDamageUp() { offModeFlg(0x04000000); if ((checkEventRun() && mProcVar0.field_0x3008 < 0) || mDemo.getDemoMode() == 0x1B || mDemo.getDemoMode() == 9) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index 64dd563e345..77abd0c7cd4 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -261,7 +261,7 @@ int daAlink_c::checkDemoAction() { } if (checkModeFlg(0x40000)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 0; } @@ -315,7 +315,7 @@ int daAlink_c::checkDemoAction() { } else if (demoMode == daPy_demo_c::DEMO_UNK_27_e) { onNoResetFlg0(FLG0_UNK_100000); - if (mDemo.getDemoType() == 1) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_TOOL_e) { return commonLargeDamageUpInit(-2, 1, 0, 0); } else if (mDemo.getParam0() == 1) { return commonLargeDamageUpInit(-5, 1, 0, 0); @@ -412,7 +412,7 @@ int daAlink_c::checkDemoAction() { return procCoLookWaitInit(); } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } else if (demoMode == daPy_demo_c::DEMO_UNK_7_e) { offNoResetFlg0(FLG0_UNK_100000); @@ -517,7 +517,7 @@ void daAlink_c::setDemoMoveData(u32* o_mode, cXyz const* i_goal) { } else if ((*o_mode == daPy_demo_c::DEMO_UNK_2_e && dist_to_pos < temp_f29) || dist_to_pos < temp_f28) { *o_mode = daPy_demo_c::DEMO_UNK_2_e; mDemo.setStick(0.35000002f); - } else if (mDemo.getDemoType() == 3) { + } else if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_ORIGINAL_e) { mDemo.setStick(1.0f); } @@ -611,15 +611,15 @@ void daAlink_c::setDemoData() { } } - if (mDemo.getDemoType() == 4 && !dComIfGp_evmng_checkStartDemo()) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e && !dComIfGp_evmng_checkStartDemo()) { mDemo.setSystemDemoType(); } if (demo_actor_p != NULL) { demo_actor_p->setModel(mpLinkModel); - field_0x3184 = -1; + mAlinkStaffId = -1; - if (mDemo.getDemoType() != 1) { + if (mDemo.getDemoType() != daPy_demo_c::DEMO_TYPE_TOOL_e) { mDemo.setToolDemoType(); mDemo.setDemoMode(daPy_demo_c::DEMO_UNK_1_e); freeGrabItem(); @@ -681,18 +681,18 @@ void daAlink_c::setDemoData() { } } - if (field_0x3184 != -1) { + if (mAlinkStaffId != -1) { if (mProcID == PROC_DUNGEON_WARP_READY) { mDemo.setSystemDemoType(); } - char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName(field_0x3184); + char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName(mAlinkStaffId); if (cut_name != NULL) { // Take the first 3 chars in cut_name, convert them to integers, and calculate // demo_mode demo_mode = ((cut_name[0] - '0') * 100) + ((cut_name[1] - '0') * 10) + (cut_name[2] - '0'); - if (mDemo.getDemoType() != 4 && (demo_mode == daPy_demo_c::DEMO_UNK_1_e || demo_mode == daPy_demo_c::DEMO_UNK_23_e) && + if (mDemo.getDemoType() != daPy_demo_c::DEMO_TYPE_START_e && (demo_mode == daPy_demo_c::DEMO_UNK_1_e || demo_mode == daPy_demo_c::DEMO_UNK_23_e) && mLinkAcch.ChkGroundHit() && !checkModeFlg(0x70C52)) { mNormalSpeed = 0.0f; @@ -703,12 +703,12 @@ void daAlink_c::setDemoData() { demo_mode = daPy_demo_c::DEMO_UNK_1_e; } - pos_p = dComIfGp_evmng_getMyXyzP(field_0x3184, "pos"); + pos_p = dComIfGp_evmng_getMyXyzP(mAlinkStaffId, "pos"); if (pos_p == NULL) { pos_p = dComIfGp_evmng_getGoal(); } - int* angle_p = dComIfGp_evmng_getMyIntegerP(field_0x3184, "angle"); + int* angle_p = dComIfGp_evmng_getMyIntegerP(mAlinkStaffId, "angle"); if (angle_p != NULL) { angle = *angle_p; } else if (demo_mode == daPy_demo_c::DEMO_WAIT_TURN_e) { @@ -717,11 +717,11 @@ void daAlink_c::setDemoData() { angle = shape_angle.y; } - prm0_p = dComIfGp_evmng_getMyIntegerP(field_0x3184, "prm0"); - prm1_p = dComIfGp_evmng_getMyIntegerP(field_0x3184, "prm1"); + prm0_p = dComIfGp_evmng_getMyIntegerP(mAlinkStaffId, "prm0"); + prm1_p = dComIfGp_evmng_getMyIntegerP(mAlinkStaffId, "prm1"); - if (mDemo.getDemoType() == 2) { - f32* stick_p = dComIfGp_evmng_getMyFloatP(field_0x3184, "stick"); + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SYSTEM_e) { + f32* stick_p = dComIfGp_evmng_getMyFloatP(mAlinkStaffId, "stick"); if (stick_p != NULL) { mDemo.setStick(*stick_p); @@ -736,13 +736,13 @@ void daAlink_c::setDemoData() { mDoMtx_stack_c::YrotM(shape_angle.y); mDoMtx_stack_c::multVec(pos_p, &goal_pos); dComIfGp_evmng_setGoal(&goal_pos); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } } if ((mEquipItem == fpcNm_ITEM_IRONBALL || checkFishingRodItem(mEquipItem)) && demo_mode != daPy_demo_c::DEMO_UNK_1_e && - demo_mode != daPy_demo_c::DEMO_UNK_31_e && (field_0x3184 != -1 || mDemo.getDemoType() == 3) && + demo_mode != daPy_demo_c::DEMO_UNK_31_e && (mAlinkStaffId != -1 || mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_ORIGINAL_e) && (demo_mode != daPy_demo_c::DEMO_UNK_6_e || (var_r28 == 0 && !checkEquipAnime()))) { deleteEquipItem(FALSE, TRUE); @@ -752,7 +752,7 @@ void daAlink_c::setDemoData() { } } - if (mDemo.getDemoType() == 4) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e) { if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_14_e) { if (mDemo.getTimer() != 0) { mDemo.decTimer(); @@ -760,14 +760,14 @@ void daAlink_c::setDemoData() { cXyz tmp_sp = current.pos - home.pos; if (tmp_sp.abs2XZ() > 90000.0f) { mDemo.setTimer(0); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } else { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } } else { - if (mDemo.getDemoType() == daPy_demo_c::DEMO_UNK_1_e || (mDemo.getDemoType() == daPy_demo_c::DEMO_UNK_2_e && field_0x3184 != -1)) { + if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_TOOL_e || (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SYSTEM_e && mAlinkStaffId != -1)) { if (prm0_p != NULL) { mDemo.setParam0(*prm0_p); } else { @@ -793,7 +793,7 @@ void daAlink_c::setDemoData() { } mDemo.setDemoMode(demo_mode); - } else if (mDemo.getDemoType() == 3) { + } else if (mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_ORIGINAL_e) { demo_mode = mDemo.getDemoMode(); if (checkDemoMoveMode(demo_mode)) { @@ -813,13 +813,13 @@ void daAlink_c::setDemoData() { dComIfGp_clearPlayerStatus0(0, 0x10); } - if (field_0x3184 != -1 && + if (mAlinkStaffId != -1 && (demo_mode == daPy_demo_c::DEMO_UNK_1_e || demo_mode == daPy_demo_c::DEMO_UNK_4_e || demo_mode == daPy_demo_c::DEMO_UNK_23_e || demo_mode == daPy_demo_c::DEMO_UNK_14_e || demo_mode == daPy_demo_c::DEMO_UNK_17_e || demo_mode == daPy_demo_c::DEMO_UNK_24_e || demo_mode == daPy_demo_c::DEMO_UNK_7_e || demo_mode == daPy_demo_c::DEMO_UNK_15_e || demo_mode == daPy_demo_c::DEMO_UNK_21_e || demo_mode == daPy_demo_c::DEMO_UNK_22_e || demo_mode == daPy_demo_c::DEMO_UNK_6_e || demo_mode == daPy_demo_c::DEMO_UNK_8_e || demo_mode == daPy_demo_c::DEMO_CROUCH_e || demo_mode == daPy_demo_c::DEMO_UNK_18_e)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } s16 prm2 = mDemo.getParam2(); @@ -911,7 +911,7 @@ void daAlink_c::endDemoMode() { offNoResetFlg0(FLG0_UNK_100000); dComIfGp_clearPlayerStatus0(0, 0x10); - BOOL temp_r29 = mDemo.getDemoType() == 4; + BOOL temp_r29 = mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_START_e; BOOL var_r0 = mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_14_e || mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK_26_e; mDemo.resetDemoType(); @@ -926,7 +926,7 @@ void daAlink_c::endDemoMode() { mDemo.setParam2(0); mDemo.setStick(1.0f); - field_0x3184 = -1; + mAlinkStaffId = -1; if (checkReinRide()) { field_0x2fab &= ~0x8; @@ -1470,7 +1470,7 @@ static int daAlink_c_getDemoIDData(dDemo_actor_c* param_0, int* param_1, int* pa /* 801195C0-801195F8 113F00 0038+00 7/0 0/0 0/0 .text procDemoCommon__9daAlink_cFv */ int daAlink_c::procDemoCommon() { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } @@ -1906,7 +1906,7 @@ int daAlink_c::procCoOpenTreasure() { } if (checkAnmEnd(mUnderFrameCtrl)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); mLinkAcch.ClrWallNone(); mLinkAcch.OnLineCheck(); } @@ -1967,7 +1967,7 @@ int daAlink_c::procCoUnequip() { } if (checkNoUpperAnime()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } @@ -2179,7 +2179,7 @@ int daAlink_c::procCoGetItem() { setSyncRidePos(); } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } @@ -2266,11 +2266,11 @@ int daAlink_c::procCoGetItem() { field_0x2f99 = 12; if (mDemo.getParam1() == 1) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } else if (mProcVar1.field_0x300a != 0) { if (mDemo.getParam1() == 1 && checkModeFlg(0x400)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } if (mProcVar1.field_0x300a < 0) { @@ -2281,7 +2281,7 @@ int daAlink_c::procCoGetItem() { shape_angle.y = current.angle.y - mProcVar3.field_0x300e; if (mDemo.getParam1() == 1) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } else { shape_angle.y = @@ -2335,7 +2335,7 @@ int daAlink_c::procCoGetItem() { } } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); item_partner_p->dead(); field_0x3198 = 1; field_0x2f99 = 12; @@ -2401,9 +2401,9 @@ int daAlink_c::procCoTurnBack() { mProcVar2.field_0x300c = 1; } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (!checkWolf() && frameCtrl_p->getFrame() >= 29.0f) { field_0x2f92 = 1; field_0x2f93 = 6; @@ -2512,7 +2512,7 @@ int daAlink_c::procDoorOpen() { } else { mLinkAcch.ClrWallNone(); mLinkAcch.OffLineCheckNone(); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); onModeFlg(1); offModeFlg(0x4000); @@ -2530,7 +2530,7 @@ int daAlink_c::procDoorOpen() { } } } else { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -2586,7 +2586,7 @@ int daAlink_c::procCoLookWait() { cLib_addCalcAngleS(&shape_angle.y, target_angle, 2, 0x800, 0x100); } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } @@ -2675,7 +2675,7 @@ int daAlink_c::procMonkeyMoveInit() { /* 8011BD18-8011BD6C 116658 0054+00 1/0 0/0 0/0 .text procMonkeyMove__9daAlink_cFv */ int daAlink_c::procMonkeyMove() { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (!checkWolf()) { setMonkeyMoveAnime(); @@ -2699,7 +2699,7 @@ int daAlink_c::procDemoBoomerangCatchInit() { /* 8011BDF0-8011BE54 116730 0064+00 1/0 0/0 0/0 .text procDemoBoomerangCatch__9daAlink_cFv */ int daAlink_c::procDemoBoomerangCatch() { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (checkAnmEnd(mUnderFrameCtrl)) { setBlendMoveAnime(daAlinkHIO_basic_c0::m.mAnmBlendFactor); @@ -2945,7 +2945,7 @@ int daAlink_c::procCoLookAround() { } if (checkAnmEnd(frame_ctrl)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (mProcVar3.field_0x300e != 0 && frame_ctrl->checkPass(5.0f)) { voiceStart(Z2SE_AL_V_ENTRANCE); } @@ -3026,7 +3026,7 @@ int daAlink_c::procLookUp() { field_0x2f99 = 4; } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } @@ -3057,7 +3057,7 @@ int daAlink_c::procLookUpToGetItem() { setFaceBasicBck(0x133); field_0x2f99 = 12; } else if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -3090,7 +3090,7 @@ int daAlink_c::procHandPat() { if (mProcVar2.field_0x300c != 0) { if (checkAnmEnd(frameCtrl_p)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (mProcVar3.field_0x300e == 0) { setSingleAnimeBaseSpeed(ANM_WAIT, daAlinkHIO_move_c0::m.mWaitAnmSpeed, 3.0f); @@ -3238,7 +3238,7 @@ int daAlink_c::procCoNod() { } if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -3299,7 +3299,7 @@ int daAlink_c::procCoGlare() { } if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } if (!checkWolf() && frame_ctrl->getFrame() >= 24.0f) { @@ -3331,7 +3331,7 @@ int daAlink_c::procGoatStopReady() { } if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -3376,7 +3376,7 @@ int daAlink_c::procCoGetReadySit() { } if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -3409,7 +3409,7 @@ int daAlink_c::procCoTwGateInit() { /* 8011D7D4-8011D82C 118114 0058+00 1/0 0/0 0/0 .text procCoTwGate__9daAlink_cFv */ int daAlink_c::procCoTwGate() { if (mUnderFrameCtrl[0].checkAnmEnd()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } field_0x2f99 = 7; @@ -3439,7 +3439,7 @@ int daAlink_c::procWolfSnowEscape() { daPy_frameCtrl_c* frameCtrl_p = mUnderFrameCtrl; if (mProcVar3.field_0x300e != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } @@ -3501,7 +3501,7 @@ int daAlink_c::procZoraMoveInit() { /* 8011DB9C-8011DDD4 1184DC 0238+00 1/0 0/0 0/0 .text procZoraMove__9daAlink_cFv */ int daAlink_c::procZoraMove() { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); fopAc_ac_c* temp_r29 = dComIfGp_event_getPt1(); field_0x2f99 = 0x60; @@ -3556,7 +3556,7 @@ int daAlink_c::procLookAroundTurn() { daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; if (checkAnmEnd(frame_ctrl)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frame_ctrl->checkPass(95.0f)) { voiceStart(Z2SE_AL_V_D_MHOP); } @@ -3640,7 +3640,7 @@ int daAlink_c::procTradeItemOut() { if (mProcVar3.field_0x300e != 0) { if (mDemo.getParam0() == 1) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { daItemBase_c* item_partner_p = (daItemBase_c*)fopAcM_getItemEventPartner(this); if (item_partner_p != NULL) { @@ -3661,7 +3661,7 @@ int daAlink_c::procTradeItemOut() { } } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } } @@ -3789,9 +3789,9 @@ int daAlink_c::procSwordReady() { } mProcVar2.field_0x300c = 1; - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frame_ctrl->checkPass(10.0f)) { voiceStart(Z2SE_AL_V_OUGI_KAMAE); } @@ -3895,7 +3895,7 @@ int daAlink_c::procCutFastReadyInit() { /* 8011EB8C-8011EBDC 1194CC 0050+00 1/0 0/0 0/0 .text procCutFastReady__9daAlink_cFv */ int daAlink_c::procCutFastReady() { if (checkAnmEnd(&mUpperFrameCtrl[2])) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; @@ -3922,11 +3922,11 @@ int daAlink_c::procMasterSwordStick() { daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; if (mProcVar2.field_0x300c != 0) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (checkAnmEnd(frame_ctrl)) { mProcVar2.field_0x300c = 1; setSingleAnimeBaseMorf(ANM_DEMO_MASTER_SWORD_WAIT, -1.0f); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frame_ctrl->getFrame() >= 32.0f) { field_0x2f93 = 5; } @@ -3953,7 +3953,7 @@ int daAlink_c::procMasterSwordPull() { daPy_frameCtrl_c* frame_ctrl = mUnderFrameCtrl; if (checkAnmEnd(frame_ctrl)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frame_ctrl->getFrame() >= 36.0f) { field_0x2f93 = 10; } else if (frame_ctrl->getFrame() >= 9.0f) { @@ -4514,14 +4514,14 @@ int daAlink_c::procCoWarp() { return commonFallInit(1); } - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { return checkWaitAction(); } } else if (mProcVar3.field_0x300e != 0) { skipPortalObjWarp(); } else { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } } else if (mProcVar2.field_0x300c == 0 && !checkNoResetFlg0(FLG0_PLAYER_NO_DRAW)) { cXyz sp10(current.pos.x, current.pos.y + (field_0x347c - -0.5f) * 30.0f, current.pos.z); @@ -4548,7 +4548,7 @@ int daAlink_c::commonGrabPutInit() { if (mProcID != PROC_GRAB_STAND && (mProcID != PROC_WOLF_GRAB_PUT || !(mUnderFrameCtrl[0].getFrame() < field_0x3478))) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } } diff --git a/src/d/actor/d_a_alink_grab.inc b/src/d/actor/d_a_alink_grab.inc index 853aa79762b..040129eb74d 100644 --- a/src/d/actor/d_a_alink_grab.inc +++ b/src/d/actor/d_a_alink_grab.inc @@ -406,7 +406,7 @@ void daAlink_c::freeGrabItem() { fopAc_ac_c* temp_r3 = mGrabItemAcKeep.getActor(); if (temp_r3 != NULL) { - if (dComIfGp_event_runCheck() || mDemo.getDemoType() == 5) { + if (dComIfGp_event_runCheck() || mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_SPECIAL_e) { fopAcM_OnStatus(temp_r3, 0x800); } @@ -1176,7 +1176,7 @@ int daAlink_c::procGrabStand() { if (checkAnmEnd(temp_r30)) { if (mDemo.getDemoMode() == 0xD) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } @@ -1558,7 +1558,7 @@ int daAlink_c::procFmChainStrongPull() { if (checkAnmEnd(&mUnderFrameCtrl[0])) { if (mDemo.getDemoMode() == 0x43) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { mNowAnmPackUpper[2].setRatio(1.0f); checkNextAction(0); diff --git a/src/d/actor/d_a_alink_guard.inc b/src/d/actor/d_a_alink_guard.inc index 6270523409a..908b6f038ce 100644 --- a/src/d/actor/d_a_alink_guard.inc +++ b/src/d/actor/d_a_alink_guard.inc @@ -478,7 +478,7 @@ int daAlink_c::procGuardAttack() { if (checkAnmEnd(temp_r30)) { if (mDemo.getDemoMode() == 0x4B) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } diff --git a/src/d/actor/d_a_alink_horse.inc b/src/d/actor/d_a_alink_horse.inc index 6e61d67764a..6b42f8d0684 100644 --- a/src/d/actor/d_a_alink_horse.inc +++ b/src/d/actor/d_a_alink_horse.inc @@ -2977,7 +2977,7 @@ int daAlink_c::procHorseGetKey() { setSyncRidePos(); if (checkAnmEnd(frameCtrl_p)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (frameCtrl_p->getFrame() >= 34.0f) { field_0x2f92 = 254; field_0x2f93 = 254; @@ -3013,7 +3013,7 @@ int daAlink_c::procHorseLookDown() { setSyncRidePos(); if (checkAnmEnd(mUnderFrameCtrl)) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; } diff --git a/src/d/actor/d_a_alink_kandelaar.inc b/src/d/actor/d_a_alink_kandelaar.inc index 93ec1be4074..afea666b311 100644 --- a/src/d/actor/d_a_alink_kandelaar.inc +++ b/src/d/actor/d_a_alink_kandelaar.inc @@ -419,7 +419,7 @@ int daAlink_c::procKandelaarSwing() { if (frameCtrl_p->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x27) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextAction(0); } diff --git a/src/d/actor/d_a_alink_sumou.inc b/src/d/actor/d_a_alink_sumou.inc index e7d52592040..49f3f884fd8 100644 --- a/src/d/actor/d_a_alink_sumou.inc +++ b/src/d/actor/d_a_alink_sumou.inc @@ -926,7 +926,7 @@ int daAlink_c::procSumouShiko() { field_0x2f93 = 0xFE; } } else { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } return 1; diff --git a/src/d/actor/d_a_alink_whistle.inc b/src/d/actor/d_a_alink_whistle.inc index 92685a89a88..c7351f1bda9 100644 --- a/src/d/actor/d_a_alink_whistle.inc +++ b/src/d/actor/d_a_alink_whistle.inc @@ -344,7 +344,7 @@ int daAlink_c::procHawkCatchInit() { /* 80112220-80112278 10CB60 0058+00 1/0 0/0 0/0 .text procHawkCatch__9daAlink_cFv */ int daAlink_c::procHawkCatch() { if (mUnderFrameCtrl[0].checkAnmEnd()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); procHawkSubjectInit(); } @@ -381,7 +381,7 @@ int daAlink_c::procHawkSubject() { } } } else if (checkEventRun()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { fopAc_ac_c* temp_r29 = field_0x280c.getActor(); setGrassCancelStatus(0x12); diff --git a/src/d/actor/d_a_alink_wolf.inc b/src/d/actor/d_a_alink_wolf.inc index e0cb749e107..9047ae36627 100644 --- a/src/d/actor/d_a_alink_wolf.inc +++ b/src/d/actor/d_a_alink_wolf.inc @@ -2471,7 +2471,7 @@ int daAlink_c::procWolfTiredWait() { /* 8012D050-8012D104 127990 00B4+00 3/2 0/0 0/0 .text procWolfMidnaRideShockInit__9daAlink_cFv */ int daAlink_c::procWolfMidnaRideShockInit() { if (!checkWolf()) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return procWaitInit(); } @@ -2495,7 +2495,7 @@ int daAlink_c::procWolfMidnaRideShock() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x32) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -2858,7 +2858,7 @@ int daAlink_c::procWolfWaitTurn() { if (var_r31 == 0) { if (checkEventRun()) { if (mDemo.getDemoMode() == 5) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -2996,7 +2996,7 @@ int daAlink_c::procWolfSideStepLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x10) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -3107,7 +3107,7 @@ int daAlink_c::procWolfBackJumpLand() { if (frameCtrl->checkAnmEnd()) { if (mDemo.getDemoMode() == 0x10) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -5871,7 +5871,7 @@ int daAlink_c::procWolfLargeDamageUpInit(int param_0, int param_1, s16 param_2, if (getMidnaActor() != NULL) { getMidnaActor()->onForceMorfCancel(); } - if (mDemo.getDemoType() != 1) { + if (mDemo.getDemoType() != daPy_demo_c::DEMO_TYPE_TOOL_e) { mProcVar5.field_0x3012 = 1; } } else { @@ -5891,7 +5891,7 @@ int daAlink_c::procWolfLargeDamageUpInit(int param_0, int param_1, s16 param_2, } else if (param_0 == -5 && mDemo.getParam1() > 0) { mProcVar0.field_0x3008 = mDemo.getParam1(); var_f31 = 0.0f; - } else if (param_0 == -2 && mDemo.getDemoType() == 1) { + } else if (param_0 == -2 && mDemo.getDemoType() == daPy_demo_c::DEMO_TYPE_TOOL_e) { mProcVar0.field_0x3008 = 0x1E; var_f31 = 0.0f; } else { @@ -6008,7 +6008,7 @@ int daAlink_c::procWolfLargeDamageUp() { } if (mDemo.getDemoMode() == 0x1B || mDemo.getDemoMode() == 9) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -6376,7 +6376,7 @@ int daAlink_c::procWolfLieMove() { } if (mDemo.getDemoMode() == 0x2C) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } cM3dGPla sp70; @@ -7872,7 +7872,7 @@ int daAlink_c::procWolfWaitAttack() { resetCombo(1); if (mDemo.getDemoMode() == 0x2B) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else if (mProcVar0.field_0x3008 > 0) { if (!(frameCtrl_p->getFrame() > field_0x3478) || !checkNextActionWolf(1)) { mProcVar0.field_0x3008--; @@ -8684,7 +8684,7 @@ int daAlink_c::procWolfGrabPut() { if (checkAnmEnd(frameCtrl_p)) { if (mDemo.getDemoMode() == 13) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); } else { checkNextActionWolf(0); } @@ -8694,7 +8694,7 @@ int daAlink_c::procWolfGrabPut() { } else { if (actor_p == NULL) { if (mDemo.getDemoMode() == 13) { - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); return 1; } else { return checkNextActionWolf(0); @@ -9595,7 +9595,7 @@ int daAlink_c::procWolfGetSmell() { mDemo.setSystemDemoType(); } else if (mDemo.getParam0() == 0) { dComIfGs_onEventBit(field_0x319c); - dComIfGp_evmng_cutEnd(field_0x3184); + dComIfGp_evmng_cutEnd(mAlinkStaffId); if (kytag3_p != NULL) { kytag3_p->field_0x588 = 0; diff --git a/src/d/actor/d_a_e_pm.cpp b/src/d/actor/d_a_e_pm.cpp index dc4910a931e..c97c161adb6 100644 --- a/src/d/actor/d_a_e_pm.cpp +++ b/src/d/actor/d_a_e_pm.cpp @@ -1341,7 +1341,7 @@ void daE_PM_c::DemoBossStart2() { actor_status &= ~0x100; } if (mSecondEncounter) { - player->mDemo.setDemoType(3); + player->mDemo.setDemoType(daPy_demo_c::DEMO_TYPE_ORIGINAL_e); player->mDemo.setParam0(0); player->mDemo.setDemoMode(4); player->mDemo.setParam0(0); diff --git a/src/d/d_debug_camera.cpp b/src/d/d_debug_camera.cpp new file mode 100644 index 00000000000..bb09f93724e --- /dev/null +++ b/src/d/d_debug_camera.cpp @@ -0,0 +1,1777 @@ +#if DEBUG + +#include "d/d_debug_camera.h" +#include "d/d_event_data.h" +#include "d/d_debug_viewer.h" +#include "d/d_com_inf_game.h" +#include "f_ap/f_ap_game.h" +#include "JSystem/JUtility/JUTDbPrint.h" +#include "JSystem/JUtility/JUTReport.h" + +namespace zevwork { + const int CutMaxNum = 32; + const int DataMaxNum = 0x100; + const int FDataMaxNum = 0x200; + const int IDataMaxNum = 0x100; + const int SDataMaxNum = 0x100; + + const int WorkSize = (sizeof(event_binary_data_header) - 8) + + sizeof(dEvDtEvent_DBG_c) + + sizeof(dEvDtStaff_DBG_c) + + sizeof(dEvDtStaff_DBG_c) + + (sizeof(dEvDtCut_c) * CutMaxNum) + + (sizeof(dEvDtData_DBG_c) * DataMaxNum) + + (sizeof(f32) * FDataMaxNum) + + (sizeof(int) * IDataMaxNum) + + (sizeof(char) * SDataMaxNum); + u8* WorkBuffer; +}; + +dDbgCamera_c dDbgCamera; + +dDbgCamKey_c::~dDbgCamKey_c() {} + +namespace { +cXyz rel2wld(cXyz* param_0, fopAc_ac_c* actor) { + if (actor == NULL) { + OS_REPORT("debug camera: error: actor NULL in rel2wld() \n"); + return cXyz::Zero; + } + + cSGlobe sp18(*param_0); + sp18.U(cSAngle(actor->shape_angle.y) + sp18.U()); + + return actor->attention_info.position + sp18.Xyz(); +} + +cXyz wld2rel(cXyz* param_0, fopAc_ac_c* actor) { + if (actor == NULL) { + OS_REPORT("debug camera: error: actor NULL in wld2rel() \n"); + return cXyz::Zero; + } + + cSGlobe sp18(*param_0 - actor->attention_info.position); + sp18.U(sp18.U() - cSAngle(actor->shape_angle.y)); + + return sp18.Xyz(); +} + +inline fpc_ProcID ActorID(fopAc_ac_c* actor) { + return fopAcM_GetID(actor); +} + +inline fopAc_ac_c* Actor(fpc_ProcID id) { + return fopAcM_SearchByID(id); +} +} + +dDbgCamSetup_c::dDbgCamSetup_c() { + mpDbgCam = NULL; + + mMoveSpeed = 20.0f; + mMoveTurbo = 400.0f; + mFovyTick = 2.5; + mMoveParallelShift = 10.0f; + mRotateSpeed = 20.0f; + mTransAccel = 0.1f; + mRotAccel = 0.01; + mMoveMax = 100.0f; + mUnkMax = 2000.0f; + mRotateMax = 30.0f; + + mCenterCross = 400.0f; + mCenterBall = 20.0f; + mCenterMarker = 1; + + mActorSrchType = 0; + mActorID = fpcM_ERROR_PROCESS_ID_e; + + mFlag = 0; + mFlag |= (u16)0x8000; + + mPosX = 40; + mPosY = 320; + + mGazePoint.x = 0.0f; + mGazePoint.y = 0.0f; + mGazePoint.z = 0.0f; + + mPerspective.x = 0.0f; + mPerspective.y = 0.0f; + mPerspective.z = 0.0f; + + mAngle = 0.0f; + + field_0x68.set(0.0f, 1.0f, 0.0f); +} + +void dDbgCamSetup_c::Init(dDbgCamera_c* i_dbgCamera) { + // "Debug Camera" + m_childNo = mDoHIO_CREATE_CHILD("デバッグカメラ", this); + mpDbgCam = i_dbgCamera; +} + +void dDbgCamSetup_c::Finish() { + mDoHIO_DELETE_CHILD(m_childNo); +} + +f32 dDbgCamSetup_c::Translate(f32 param_0) { + f32 var_f31 = mMoveSpeed * param_0; + + f32 var_f30; + if (var_f31 > mMoveMax) { + var_f30 = mMoveMax; + } else { + var_f30 = var_f31; + } + + return var_f30; +} + +s16 dDbgCamSetup_c::Rotate(f32 param_0) { + f32 var_f31 = mRotateSpeed * param_0; + + f32 var_f30; + if (var_f31 > mRotateMax) { + var_f30 = mRotateMax; + } else { + var_f30 = var_f31; + } + + return cAngle::d2s(var_f30); +} + +f32 dDbgCamSetup_c::FlatMove(f32 param_0) { + f32 var_f31 = mMoveParallelShift * param_0; + + f32 var_f30; + if (var_f31 > mMoveMax) { + var_f30 = mMoveMax; + } else { + var_f30 = var_f31; + } + + return var_f30; +} + +f32 dDbgCamSetup_c::Turbo(f32 param_0) { + f32 var_f31 = mMoveTurbo * param_0; + + f32 var_f30; + if (var_f31 > mUnkMax) { + var_f30 = mUnkMax; + } else { + var_f30 = var_f31; + } + + return var_f30; +} + +static int search_actor(fopAc_ac_c* actor, void* data) { + dDbgCamSetup_c* camsetup = (dDbgCamSetup_c*)data; + + cXyz sp18 = dDbgCamera.Center() - actor->attention_info.position; + if (sp18.abs() < camsetup->mActorSrchRange) { + camsetup->mActorSrchRange = sp18.abs(); + camsetup->mActorID = ActorID(actor); + } + + return 0; +} + +void dDbgCamSetup_c::genMessage(JORMContext* mctx) { + mctx->genLabel("- カメラ位置表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox(" 現在位置", &mFlag, 4, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox(" (補正前)", &mFlag, 8, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("- ヒットポリゴン表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox(" 壁あたり", &mFlag, 0x10, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- 移動", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" スピード", &mMoveSpeed, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 最大", &mMoveMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" ターボ", &mMoveTurbo, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 最大", &mUnkMax, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 平行移動", &mMoveParallelShift, 0.0f, 5000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 加速度", &mTransAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- 回転", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" スピード", &mRotateSpeed, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 最大", &mRotateMax, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 加速度", &mRotAccel, 0.0f, 1.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- 画角", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" スピード", &mFovyTick, 0.0f, 90.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- センターマーカ", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 線の長さ", &mCenterCross, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 球の大きさ", &mCenterBall, 0.0f, 4000.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startRadioButton("表示", &mCenterMarker, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF); + mctx->genRadioButtonItem("常に表示", 3, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->genRadioButtonItem("動くと表示", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->genRadioButtonItem("常に非表示", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->endRadioButton(); + + mctx->genLabel("- 情報表示", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genCheckBox(" 有効", &mFlag, 0x8000, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 表示位置 X", &mPosX, 0, 640, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" Y", &mPosY, 0, 480, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- 座標系", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->startRadioButton("基準", &mActorSrchType, 0, NULL, 0xFFFF, 0xFFFF, 0x100, 0xFFFF); + mctx->genRadioButtonItem("絶対座標", 0, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->genRadioButtonItem("プレイヤー相対座標", 1, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->genRadioButtonItem("指定アクター相対座標", 2, 0, 0xFFFF, 0xFFFF, 0x80, 0x10); + mctx->endRadioButton(); + mctx->genButton(" 更新 ", 0x66, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("- イベント", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton(" 保存 ", 0x68, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("- 座標指定", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 注視点 X", &mGazePoint.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, 0xFFFF, + 0x200, 0x18); + mctx->genSlider("     Y", &mGazePoint.y, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genSlider("     Z", &mGazePoint.z, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genButton(" 更新 ", 0x69, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 視点   X", &mPerspective.x, -100000.0f, 100000.0f, 0, NULL, 0xFFFF, + 0xFFFF, 0x200, 0x18); + mctx->genSlider("     Y", &mPerspective.y, -100000.0f, 100000.0f, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider("     Z", &mPerspective.z, -100000.0f, 100000.0f, 0, NULL, + 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton(" 更新 ", 0x6A, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genSlider(" 画角   ", &mAngle, 0.0f, 180.0f, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genButton(" 更新 ", 0x6B, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); + mctx->genLabel("-", 0, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + +void dDbgCamera_c::InitlChk() { + mLchkNum = 0; +} + +int dDbgCamera_c::SetlChk(dBgS_LinChk lchk) { + if (mLchkNum <= 1) { + mLchk[mLchkNum] = lchk; + return ++mLchkNum; + } + + return -1; +} + +void dDbgCamSetup_c::listenPropertyEvent(const JORPropertyEvent* property) { + int var_r27 = 0; + JORReflexible::listenPropertyEvent(property); + JORMContext* mctx = attachJORMContext(8); + + switch ((u32)property->id) { + case 0x66: + mActorSrchRange = 10000000.0f; + mActorID = fpcM_ERROR_PROCESS_ID_e; + + switch (mActorSrchType) { + case 1: { + fopAc_ac_c* player = dComIfGp_getPlayer(dComIfGp_getCameraPlayer1ID(0)); + mActorID = ActorID(player); + break; + } + case 2: + fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, this); + break; + } + break; + case 0x68: + mpDbgCam->WriteZevData(); + break; + case 0x69: + if (mActorID == fpcM_ERROR_PROCESS_ID_e) { + mpDbgCam->Center(mGazePoint); + } else { + mpDbgCam->Center(wld2rel(&mGazePoint, Actor(mActorID))); + } + break; + case 0x6A: + if (mActorID == fpcM_ERROR_PROCESS_ID_e) { + mpDbgCam->Eye(mPerspective); + } else { + mpDbgCam->Eye(wld2rel(&mPerspective, Actor(mActorID))); + } + break; + case 0x6B: + mpDbgCam->Fovy(mAngle); + break; + } +} + +int dDbgCamera_c::moveTool() { + f32 substick_x = mDoCPd_c::getSubStickX3D(mPadNo); + f32 substick_y = mDoCPd_c::getSubStickY(mPadNo); + int sp4C = field_0xc00; + + if (mDoCPd_c::getHoldA(mPadNo)) { + if (field_0xc0c != 0) { + field_0xc00 = 6; + } else { + field_0xc00 = 0; + } + } else if (mDoCPd_c::getHoldB(mPadNo)) { + if (field_0xc0c != 0) { + field_0xc00 = 7; + } else { + field_0xc00 = 1; + } + } else if (mDoCPd_c::getSubStickValue(mPadNo) > 0.001f) { + field_0xc00 = 3; + } else { + field_0xc00 = 18; + } + + if (field_0xc00 != 18) { + if (field_0xc00 != sp4C) { + field_0xc10 = 0.1f; + } else { + field_0xc10 += field_0xc10 * mCamSetup.TransAccel(); + } + } else { + field_0xc10 = 0.0f; + } + + int sp48 = field_0xc04; + f32 stick_x = mDoCPd_c::getStickX3D(mPadNo); + f32 stick_y = mDoCPd_c::getStickY(mPadNo); + + if (mDoCPd_c::getTrigY(mPadNo)) { + field_0xc04 = 16; + } else if (mDoCPd_c::getTrigX(mPadNo)) { + field_0xc04 = 17; + } else if (mDoCPd_c::getTrigLeft(mPadNo)) { + if (field_0x54 == 0) { + field_0xc04 = 4; + } else if (field_0x54 == 1) { + field_0xc04 = 10; + } else if (field_0x54 == 2) { + field_0xc04 = 14; + } + field_0xc1c = 0; + } else if (mDoCPd_c::getHoldLeft(mPadNo)) { + if (field_0xc1c++ > 20) { + if (field_0x54 == 0) { + field_0xc04 = 4; + } else if (field_0x54 == 1) { + field_0xc04 = 10; + } else if (field_0x54 == 2) { + field_0xc04 = 14; + } + } else { + field_0xc04 = 18; + } + } else if (mDoCPd_c::getTrigRight(mPadNo)) { + if (field_0x54 == 0) { + field_0xc04 = 5; + } else if (field_0x54 == 1) { + field_0xc04 = 11; + } else if (field_0x54 == 2) { + field_0xc04 = 15; + } + field_0xc1c = 0; + } else if (mDoCPd_c::getHoldRight(mPadNo)) { + if (field_0xc1c++ > 20) { + if (field_0x54 == 0) { + field_0xc04 = 5; + } else if (field_0x54 == 1) { + field_0xc04 = 11; + } else if (field_0x54 == 2) { + field_0xc04 = 15; + } + } else { + field_0xc04 = 18; + } + } else if (mDoCPd_c::getStickValue(mPadNo) > 0.001f) { + field_0xc04 = 8; + } else { + field_0xc04 = 18; + } + + if (field_0xc04 != 18) { + if (field_0xc04 != sp48) { + field_0xc14 = 0.1f; + } else { + field_0xc14 += field_0xc14 * mCamSetup.RotAccel(); + } + } else { + field_0xc14 = 0.0f; + } + + switch (field_0xc04) { + case 12: + if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) { + mRunKey.mAction = dDbgCam_KeyAction_NOACTION; + } else { + mRunKey.mAction--; + } + break; + case 13: + if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { + mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; + } else { + mRunKey.mAction++; + } + break; + case 14: + if (field_0x58 > 0) { + field_0x58--; + if (mActionKey[field_0x58] != '-') { + mRunKey = mKeys[field_0x58]; + if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + fopAc_ac_c* sp3C = Actor(mRunKey.mActorInfo.id); + if (sp3C != NULL) { + mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp3C); + mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp3C); + } + } + } + } + break; + case 15: + if (field_0x58 < 31) { + field_0x58++; + if (mActionKey[field_0x58] != '-') { + mRunKey = mKeys[field_0x58]; + if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + fopAc_ac_c* sp38 = Actor(mRunKey.mActorInfo.id); + if (sp38 != NULL) { + mRunKey.mCenter = rel2wld(&mKeys[field_0x58].mCenter, sp38); + mRunKey.mEye = rel2wld(&mKeys[field_0x58].mEye, sp38); + } + } + } + } + break; + case 16: + if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mRunKey.mCenter.x, mRunKey.mCenter.y, mRunKey.mCenter.z); + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mRunKey.mEye.x, mRunKey.mEye.y, mRunKey.mEye.z); + OSReport(" "); + OSReport("%.3f\n", mRunKey.mFovy); + OSReport(" "); + OSReport("%.3f\n", mRunKey.mBank); + } + + if (mActionKey[field_0x58] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { + int var_r27 = field_0x58; + for (; var_r27 < 31; var_r27++) { + if (mActionKey[var_r27] == '-') { + break; + } + } + + while (var_r27 > field_0x58) { + mActionKey[var_r27] = mActionKey[var_r27 - 1]; + mKeys[var_r27] = mKeys[var_r27 - 1]; + var_r27--; + } + } + + mActionKey[field_0x58] = ActionSymbol(mRunKey.mAction); + mKeys[field_0x58] = mRunKey; + + if (mKeys[field_0x58].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + fopAc_ac_c* actor = Actor(mRunKey.mActorInfo.id); + if (actor != NULL) { + mKeys[field_0x58].mCenter = wld2rel(&mRunKey.mCenter, actor); + mKeys[field_0x58].mEye = wld2rel(&mRunKey.mEye, actor); + } + } + + if (mActionKey[field_0x58 + 1] == '-') { + field_0x58++; + } + break; + case 17: + if (mActionKey[field_0x58] != '-' && (mActionKey[field_0x58 + 1] != '-' || mRunKey.mAction == dDbgCam_KeyAction_NOACTION)) { + int var_r29 = field_0x58 + 1; + for (; var_r29 < 33; var_r29++) { + if (var_r29 == 0x20) { + mActionKey[var_r29 - 1] = '-'; + mKeys[var_r29 - 1] = PlaneKey(); + } else { + mActionKey[var_r29 - 1] = mActionKey[var_r29]; + mKeys[var_r29 - 1] = mKeys[var_r29]; + } + + if (mActionKey[var_r29] == '-') { + break; + } + } + } else { + mActionKey[field_0x58] = '-'; + mKeys[field_0x58] = PlaneKey(); + } + + mRunKey.mCenter = mKeys[field_0x58].mCenter; + break; + } + + if (mCmdMode == 3) { + fopAc_ac_c* sp2C = dComIfGp_getPlayer(0); + /* if (this->unk730 != 0x3E7) { + &field_0x704 = &sp2C->unk558 + this->unk730 = 0x3E7; + } else { + (sp15C, (Vec* ) &sp2C->unk558); + &mRunKey.mCenter += sp15C + &field_0x704 = &sp2C->unk558 + } */ + } else { + // this->unk730 = 3; + } + + cXyz* var_r28; + cXyz* sp30; + f32 temp_f31; + f32 var_f30; + f32 var_f29; + if (field_0xc08 != 0) { + var_r28 = &mRunKey.mCenter; + sp30 = &mRunKey.mEye; + var_f30 = -1.0f; + var_f29 = 1.0f; + } else { + var_r28 = &mRunKey.mEye; + sp30 = &mRunKey.mCenter; + var_f30 = 1.0f; + var_f29 = -1.0f; + } + + field_0x44.Val(*sp30 - *var_r28); + + switch (field_0xc00) { + case 2: + *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30)); + + if (field_0xc0c != 0) { + *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Turbo(field_0xc10 * var_f30)); + } + break; + case 0: + *var_r28 = *var_r28 + (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30)); + break; + case 1: + *var_r28 = *var_r28 - (field_0x44.Norm() * mCamSetup.Translate(field_0xc10 * var_f30)); + break; + case 3: { + f32 temp_f26 = fabsf(substick_x); + f32 temp_f1_2 = fabsf(substick_y); + + if (field_0xc0c == 0 || temp_f26 < temp_f1_2) { + cXyz sp1B0(0.0f, 1.0f, 0.0f); + *var_r28 = *var_r28 + (sp1B0 * mCamSetup.FlatMove(field_0xc10 * substick_y)); + } + + if (field_0xc0c == 0 || temp_f26 > temp_f1_2) { + cSGlobe sp58(1.0f, cSAngle::_0, field_0x44.U() + cSAngle::_90); + temp_f31 = var_f30 * (field_0xc10 * substick_x); + *var_r28 = *var_r28 - (sp58.Xyz() * mCamSetup.FlatMove(temp_f31)); + } + break; + } + case 6: { + temp_f31 = field_0x44.R(); + field_0x44.R(temp_f31 - (0.1f * (temp_f31 * field_0xc10))); + + if (field_0x44.R() < 10.0f) { + field_0x44.R(10.0f); + } + break; + } + case 7: + temp_f31 = field_0x44.R(); + field_0x44.R(temp_f31 + (0.1f * (temp_f31 * field_0xc10))); + break; + } + + if (mRunKey.mActorInfo.id != mCamSetup.mActorID) { + fopAc_ac_c* actor = Actor(mCamSetup.mActorID); + if (actor != NULL) { + mRunKey.mActorInfo.id = mCamSetup.mActorID; + fopAcM_getNameString(actor, mRunKey.mActorInfo.name); + } else { + mRunKey.mActorInfo.id = mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; + } + } + + u8 sp8 = 1; + switch (field_0xc04) { + case 4: + mRunKey.mFovy -= 0.1f * mCamSetup.FovyTick(); + if (mRunKey.mFovy < 1.0f) { + mRunKey.mFovy = 1.0f; + } + break; + case 5: + mRunKey.mFovy += 0.1f * mCamSetup.FovyTick(); + if (mRunKey.mFovy > 179.0f) { + mRunKey.mFovy = 179.0f; + } + break; + case 10: + mRunKey.mBank += cDegree(mCamSetup.FovyTick()) * 0.1f; + break; + case 11: + mRunKey.mBank -= cDegree(mCamSetup.FovyTick()) * 0.1f; + break; + case 8: + s16 temp_r26 = mCamSetup.Rotate(var_f29 * (stick_x * field_0xc14)); + field_0x44.U(field_0x44.U() + temp_r26); + + temp_r26 = mCamSetup.Rotate(var_f29 * (stick_y * field_0xc14)); + field_0x44.V(field_0x44.V() + temp_r26); + } + + if (sp8 != 0) { + *sp30 = *var_r28 + field_0x44.Xyz(); + } + + cSGlobe sp50(mRunKey.mEye - mRunKey.mCenter); + mUp.set(0.0f, 1.0f, 0.0f); + return 1; +} + +int dDbgCamera_c::cmdTool() { + if (mDoCPd_c::getTrigRight(mPadNo)) { + if (mCmdMode >= 3) { + mCmdMode = 0; + } else { + mCmdMode++; + } + } else if (mDoCPd_c::getTrigLeft(mPadNo)) { + if (mCmdMode <= 0) { + mCmdMode = 3; + } else { + mCmdMode--; + } + } + + if (!mIsPlaying) { + switch (mCmdMode) { + case 1: + if (mDoCPd_c::getTrigA(mPadNo)) { + mIsPlaying = true; + field_0x704.field_0x0 = 0; + field_0x704.field_0x4 = 0; + makeZevData(); + } + break; + case 2: + if (mDoCPd_c::getTrigA(mPadNo)) { + printZevData(); + } + break; + case 0: + if (mDoCPd_c::getTrigA(mPadNo)) { + mCamSetup.mActorSrchRange = 10000000.0f; + mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; + fopAcIt_Executor((fopAcIt_ExecutorFunc)search_actor, &mCamSetup); + + fopAc_ac_c* actor = Actor(mCamSetup.mActorID); + if (actor != NULL) { + mRunKey.mActorInfo.id = mCamSetup.mActorID; + fopAcM_getNameString(actor, mRunKey.mActorInfo.name); + } else { + mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e; + mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; + } + } else if (mDoCPd_c::getTrigB(mPadNo)) { + mRunKey.mActorInfo.id = fpcM_ERROR_PROCESS_ID_e; + mCamSetup.mActorID = fpcM_ERROR_PROCESS_ID_e; + } + break; + case 3: + if (mDoCPd_c::getTrigY(mPadNo)) { + mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position; + // field_0x704 = mRunKey.mCenter = dComIfGp_getPlayer(0)->attention_info.position; + // this->unk730 = 3; + } + /* fallthrough */ + default: + return 1; + } + } else if (dComIfGp_event_runCheck() == 0) { + mIsPlaying = false; + } + + if (mIsPlaying) { + field_0x704.field_0x4++; + } + + return 1; +} + +int dDbgCamera_c::makeZevData() { + int keyNo; + int spline_keyNo; + int sp48; + int spline_keyNum; + + int size = 0; + int spline_timer; + int sp38 = 0; + + field_0xb14 = 0; + + if (zevwork::WorkBuffer == NULL) { + zevwork::WorkBuffer = new u8[zevwork::WorkSize]; + if (zevwork::WorkBuffer == NULL) { + OSReport("debug camera: memory allocate error!! %d byte\n", zevwork::WorkSize); + return 0; + } + } + + OSReport("debug camera: making demo data...\n"); + + event_binary_data_header* header = (event_binary_data_header*)(zevwork::WorkBuffer + size); + size += sizeof(event_binary_data_header) - 8; + + header->cutNum = 0; + dEvDtEvent_DBG_c* event = (dEvDtEvent_DBG_c*)(zevwork::WorkBuffer + size); + header->eventTop = size; + header->eventNum = 1; + size += sizeof(dEvDtEvent_DBG_c); + event->Init(); + strcpy(event->mName, "_DebugCamera"); + event->mStaff[0] = 0; + event->mStaff[1] = 1; + event->mNStaff = 2; + + dEvDtStaff_DBG_c* camera_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size); + header->staffTop = size; + header->staffNum = 2; + size += sizeof(dEvDtStaff_DBG_c); + camera_staff->Init(); + strcpy(camera_staff->mName, "CAMERA"); + camera_staff->mType = dEvDtStaff_c::TYPE_CAMERA; + camera_staff->mIndex = 0; + camera_staff->mStartCut = 1; + camera_staff->mFlagID = sp38++; + + dEvDtStaff_DBG_c* all_staff = (dEvDtStaff_DBG_c*)(zevwork::WorkBuffer + size); + size += sizeof(dEvDtStaff_DBG_c); + all_staff->Init(); + strcpy(all_staff->mName, "ALL"); + all_staff->mType = dEvDtStaff_c::TYPE_ALL; + all_staff->mIndex = 1; + all_staff->mStartCut = 0; + all_staff->mFlagID = sp38++; + + dEvDtCut_DBG_c* cut = (dEvDtCut_DBG_c*)(zevwork::WorkBuffer + size); + header->cutTop = size; + header->cutNum = 0; + size += sizeof(dEvDtCut_c) * zevwork::CutMaxNum; + dEvDtCut_DBG_c* prev_cut = NULL; + cut->Init(); + strcpy(cut->mName, "DUMMY"); + cut->mIndex = header->cutNum++; + cut->mFlagId = sp38++; + event->mFlags[0] = cut->mFlagId; + cut++; + + dEvDtData_DBG_c* pdata = (dEvDtData_DBG_c*)(zevwork::WorkBuffer + size); + header->dataTop = size; + header->dataNum = 0; + size += sizeof(dEvDtData_DBG_c) * zevwork::DataMaxNum; + + f32* fdata = (f32*)(zevwork::WorkBuffer + size); + header->fDataTop = size; + header->fDataNum = 0; + size += sizeof(f32) * zevwork::FDataMaxNum; + + int* idata = (int*)(zevwork::WorkBuffer + size); + header->iDataTop = size; + header->iDataNum = 0; + size += sizeof(int) * zevwork::IDataMaxNum; + + char* sdata = (char*)(zevwork::WorkBuffer + size); + header->sDataTop = size; + header->sDataNum = 0; + size += sizeof(char) * zevwork::SDataMaxNum; + + if (size > zevwork::WorkSize) { + OSReport("debug camera: too big data!! %d > %d byte\n", size, zevwork::WorkSize); + return 0; + } + + int sp14 = 0; + int sp10; + + for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { + cut->Init(); + strcpy(cut->mName, ActionName(mKeys[keyNo].mAction)); + cut->mDataTop = header->dataNum; + + switch (mKeys[keyNo].mAction) { + case dDbgCam_KeyAction_FIXEDFRM: + case dDbgCam_KeyAction_UNITRANS: + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + pdata->Init(); + strcpy(pdata->mName, "RelActor"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_STRING; + pdata->mDataIndex = sp14; + pdata->mNumber = 1; + pdata->mNext = header->dataNum; + pdata++; + strcpy(sdata, mKeys[keyNo].mActorInfo.name); + sp48 = strlen(mKeys[keyNo].mActorInfo.name) + 1; + header->sDataNum++; + sdata += sp48; + sp14 += sp48; + } + + pdata->Init(); + strcpy(pdata->mName, "Center"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_VEC; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = 3; + pdata->mNext = header->dataNum; + pdata++; + + *fdata++ = mKeys[keyNo].mCenter.x; + *fdata++ = mKeys[keyNo].mCenter.y; + *fdata++ = mKeys[keyNo].mCenter.z; + header->fDataNum += 3; + + pdata->Init(); + strcpy(pdata->mName, "Eye"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_VEC; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = 3; + pdata->mNext = header->dataNum; + pdata++; + + *fdata++ = mKeys[keyNo].mEye.x; + *fdata++ = mKeys[keyNo].mEye.y; + *fdata++ = mKeys[keyNo].mEye.z; + header->fDataNum += 3; + + pdata->Init(); + strcpy(pdata->mName, "Fovy"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_FLOAT; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = 1; + pdata->mNext = header->dataNum; + pdata++; + + *fdata++ = mKeys[keyNo].mFovy; + header->fDataNum += 1; + + pdata->Init(); + strcpy(pdata->mName, "Bank"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_FLOAT; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = 1; + pdata->mNext = header->dataNum; + pdata++; + + *fdata++ = mKeys[keyNo].mBank; + header->fDataNum += 1; + + pdata->Init(); + strcpy(pdata->mName, "Timer"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_INT; + pdata->mDataIndex = header->iDataNum; + pdata->mNumber = 1; + pdata++; + + *idata++ = mKeys[keyNo].mTimer; + header->iDataNum += 1; + + field_0xb14 += mKeys[keyNo].mTimer; + break; + case dDbgCam_KeyAction_BSPLINE: + spline_timer = 0; + sp48 = 0; + + int sp8; + sp8 = spline_keyNum = keyNo; + for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { + if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { + break; + } + + sp48++; + spline_timer += mKeys[spline_keyNum].mTimer; + } + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + pdata->Init(); + strcpy(pdata->mName, "RelActor"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_STRING; + pdata->mDataIndex = sp14; + pdata->mNumber = 1; + pdata->mNext = header->dataNum; + pdata++; + + strcpy(sdata, mKeys[keyNo].mActorInfo.name); + sp10 = strlen(mKeys[keyNo].mActorInfo.name) + 1; + header->sDataNum += 1; + + sdata += sp10; + sp14 += sp10; + } + + pdata->Init(); + strcpy(pdata->mName, "Centers"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_VEC; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = sp48 * 3; + pdata->mNext = header->dataNum; + pdata++; + + + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + *fdata++ = mKeys[spline_keyNo].mCenter.x; + *fdata++ = mKeys[spline_keyNo].mCenter.y; + *fdata++ = mKeys[spline_keyNo].mCenter.z; + } + + header->fDataNum += sp48 * 3; + + pdata->Init(); + strcpy(pdata->mName, "Eyes"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_VEC; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = sp48 * 3; + pdata->mNext = header->dataNum; + pdata++; + + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + *fdata++ = mKeys[spline_keyNo].mEye.x; + *fdata++ = mKeys[spline_keyNo].mEye.y; + *fdata++ = mKeys[spline_keyNo].mEye.z; + } + + header->fDataNum += sp48 * 3; + + pdata->Init(); + strcpy(pdata->mName, "Fovys"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_FLOAT; + pdata->mDataIndex = header->fDataNum; + pdata->mNumber = sp48; + pdata->mNext = header->dataNum; + pdata++; + + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + *fdata++ = mKeys[spline_keyNo].mFovy; + } + + header->fDataNum += sp48; + + pdata->Init(); + strcpy(pdata->mName, "Timer"); + pdata->mIndex = header->dataNum++; + pdata->mType = dEvDtData_c::TYPE_INT; + pdata->mDataIndex = header->iDataNum; + pdata->mNumber = 1; + pdata++; + + *idata++ = spline_timer; + header->iDataNum += 1; + + field_0xb14 += spline_timer; + + keyNo += sp48; + } + + cut->mIndex = header->cutNum++; + cut->mFlagId = sp38++; + + if (prev_cut != NULL) { + cut->mFlags[0] = prev_cut->mFlagId; + prev_cut->mNext = cut->mIndex; + } + + prev_cut = cut; + event->mFlags[0] = cut->mFlagId; + cut++; + } + + if (header->cutNum > zevwork::CutMaxNum) { + OSReport("debug camera: too many cuts: %d > %d: broken event data\n", header->cutNum, zevwork::CutMaxNum); + return 0; + } + + if (header->dataNum > zevwork::DataMaxNum) { + OSReport("debug camera: too many data: %d > %d: broken event data\n", header->dataNum, zevwork::DataMaxNum); + return 0; + } + + if (header->fDataNum > zevwork::FDataMaxNum) { + OSReport("debug camera: too many fdata: %d > %d: broken event data\n", header->fDataNum, zevwork::FDataMaxNum); + return 0; + } + + if (header->fDataNum > zevwork::IDataMaxNum) { + OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->iDataNum, zevwork::IDataMaxNum); + return 0; + } + + if (header->sDataNum > zevwork::SDataMaxNum) { + OSReport("debug camera: too many idata: %d > %d: broken event data\n", header->sDataNum, zevwork::SDataMaxNum); + return 0; + } + + if (header->cutNum != 0) { + OSReport(" cut %d \n", header->cutNum); + OSReport(" data %d \n", header->dataNum); + OSReport(" float %d \n", header->fDataNum); + OSReport(" integer %d \n", header->iDataNum); + OSReport(" string %d \n", header->sDataNum); + + dEvM_HIO_c& hio = dComIfGp_getPEvtManager()->getEventHIO(); + hio.setDebugCameraData(zevwork::WorkBuffer); + } + + return 1; +} + +void dDbgCamera_c::printZevData() { + OSReport("\n"); + OSReport("\n\n"); + OSReport("\n"); + OSReport("\n"); + OSReport(" \n"); + OSReport(" \n"); + + int keyNo; + int spline_keyNo, spline_keyNum, spline_timer; + for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { + switch (mKeys[keyNo].mAction) { + case dDbgCam_KeyAction_FIXEDFRM: + OSReport(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + OSReport(" "); + OSReport("%s\n", mKeys[keyNo].mActorInfo.name); + } + + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); + + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); + + OSReport(" "); + OSReport("%.3f\n", mKeys[keyNo].mFovy); + + OSReport(" "); + OSReport("%.3f\n", mKeys[keyNo].mBank); + + OSReport(" "); + OSReport("%d\n", mKeys[keyNo].mTimer); + + OSReport(" \n"); + break; + case dDbgCam_KeyAction_UNITRANS: + OSReport(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + OSReport(" "); + OSReport("%s\n", mKeys[keyNo].mActorInfo.name); + } + + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); + + OSReport(" "); + OSReport("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); + + OSReport(" "); + OSReport("%.3f\n", mKeys[keyNo].mFovy); + + OSReport(" "); + OSReport("%.3f\n", mKeys[keyNo].mBank); + + OSReport(" "); + OSReport("%d\n", mKeys[keyNo].mTimer); + + OSReport(" \n"); + break; + case dDbgCam_KeyAction_BSPLINE: + spline_keyNum = keyNo; + for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { + if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { + break; + } + } + + OSReport(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + OSReport(" "); + OSReport("%s\n", mKeys[keyNo].mActorInfo.name); + } + + OSReport(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z); + } + OSReport(" \n"); + + OSReport(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + OSReport(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z); + } + OSReport(" \n"); + + OSReport(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + OSReport(" %.3f\n", mKeys[spline_keyNo].mFovy); + } + OSReport(" \n"); + + spline_timer = 0; + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + spline_timer += mKeys[spline_keyNo].mTimer; + } + OSReport(" %d\n", spline_timer); + + OSReport(" \n"); + keyNo = spline_keyNum - 1; + break; + } + } + + OSReport(" \n"); + OSReport(" \n"); + OSReport(" \n"); + OSReport(" \n"); + OSReport(" \n"); + OSReport("\n"); + OSReport("\n"); +} + +void dDbgCamera_c::WriteZevData() { + OpenFile(); + + PrintFile("\n"); + PrintFile("\n\n"); + PrintFile("\n"); + PrintFile("\n"); + PrintFile(" \n"); + PrintFile(" \n"); + + int keyNo; + int spline_keyNo, spline_keyNum, spline_timer; + for (keyNo = 0; keyNo < ARRAY_SIZE(mKeys); keyNo++) { + switch (mKeys[keyNo].mAction) { + case dDbgCam_KeyAction_FIXEDFRM: + PrintFile(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + PrintFile(" "); + PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); + } + + PrintFile(" "); + PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); + + PrintFile(" "); + PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); + + PrintFile(" "); + PrintFile("%.3f\n", mKeys[keyNo].mFovy); + + PrintFile(" "); + PrintFile("%.3f\n", mKeys[keyNo].mBank); + + PrintFile(" "); + PrintFile("%d\n", mKeys[keyNo].mTimer); + + PrintFile(" \n"); + break; + case dDbgCam_KeyAction_UNITRANS: + PrintFile(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + PrintFile(" "); + PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); + } + + PrintFile(" "); + PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mCenter.x, mKeys[keyNo].mCenter.y, mKeys[keyNo].mCenter.z); + + PrintFile(" "); + PrintFile("%.3f %.3f %.3f\n", mKeys[keyNo].mEye.x, mKeys[keyNo].mEye.y, mKeys[keyNo].mEye.z); + + PrintFile(" "); + PrintFile("%.3f\n", mKeys[keyNo].mFovy); + + PrintFile(" "); + PrintFile("%.3f\n", mKeys[keyNo].mBank); + + PrintFile(" "); + PrintFile("%d\n", mKeys[keyNo].mTimer); + + PrintFile(" \n"); + break; + case dDbgCam_KeyAction_BSPLINE: + spline_keyNum = keyNo; + for (; spline_keyNum < ARRAY_SIZE(mActionKey); spline_keyNum++) { + if (mActionKey[spline_keyNum] != ActionSymbol(dDbgCam_KeyAction_BSPLINE)) { + break; + } + } + + PrintFile(" \n", keyNo); + + if (mKeys[keyNo].mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + PrintFile(" "); + PrintFile("%s\n", mKeys[keyNo].mActorInfo.name); + } + + PrintFile(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mCenter.x, mKeys[spline_keyNo].mCenter.y, mKeys[spline_keyNo].mCenter.z); + } + PrintFile(" \n"); + + PrintFile(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + PrintFile(" %.3f %.3f %.3f\n", mKeys[spline_keyNo].mEye.x, mKeys[spline_keyNo].mEye.y, mKeys[spline_keyNo].mEye.z); + } + PrintFile(" \n"); + + PrintFile(" \n"); + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + PrintFile(" %.3f\n", mKeys[spline_keyNo].mFovy); + } + PrintFile(" \n"); + + spline_timer = 0; + for (spline_keyNo = keyNo; spline_keyNo < spline_keyNum; spline_keyNo++) { + spline_timer += mKeys[spline_keyNo].mTimer; + } + PrintFile(" %d\n", spline_timer); + + PrintFile(" \n"); + keyNo = spline_keyNum - 1; + break; + } + } + + PrintFile(" \n"); + PrintFile(" \n"); + PrintFile(" \n"); + PrintFile(" \n"); + PrintFile(" \n"); + PrintFile("\n"); + PrintFile("\n"); + + CloseFile(); +} + +void dDbgCamera_c::monitor() { + s32 pos_x = mCamSetup.mPosX; + s32 pos_y = mCamSetup.mPosY; + s32 y_offset = 15; + + if (!mIsPlaying) { + cXyz center(mRunKey.mCenter); + cXyz eye(mRunKey.mEye); + fopAc_ac_c* actor = NULL; + f32 u = field_0x44.U().Degree(); + + if (mRunKey.mActorInfo.id != fpcM_ERROR_PROCESS_ID_e) { + actor = Actor(mRunKey.mActorInfo.id); + if (actor != NULL) { + cSGlobe sp70(mRunKey.mCenter - actor->attention_info.position); + sp70.U(sp70.U() - cSAngle(actor->shape_angle.y)); + center = sp70.Xyz(); + + cSGlobe sp68(mRunKey.mEye - actor->attention_info.position); + sp68.U(sp68.U() - cSAngle(actor->shape_angle.y)); + eye = sp68.Xyz(); + + u = cSAngle(field_0x44.U() - actor->shape_angle.y).Degree(); + } + } + + Report(pos_x, pos_y, 1, "CTR%11.3f%11.3f%11.3f", center.x, center.y, center.z); + Report(pos_x, pos_y += y_offset, 1, "EYE%11.3f%11.3f%11.3f", eye.x, eye.y, eye.z); + Report(pos_x, pos_y += y_offset, 1, "RVU %10.3f %10.3f %10.3f", field_0x44.R(), field_0x44.V().Degree(), u); + Report(pos_x, pos_y += y_offset, 1, "FVY %10.3f %s %s %s", mRunKey.mFovy, field_0xc08 ? "[L]" : "[ ]", field_0xc0c ? "[R]" : "[ ]", field_0xc08 ? "CTR->EYE" : "EYE->CTR"); + Report(pos_x - 13, pos_y + (y_offset * field_0x54), 7, "*"); + + if (actor != NULL) { + Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @%7.7s", mRunKey.mBank, &mRunKey.mActorInfo.name); + } else { + Report(pos_x, pos_y += y_offset, 1, "BNK %10.3f @ WORLD", mRunKey.mBank); + } + + Report(pos_x, pos_y += y_offset, 1, "KEY %s", mActionKey); + + char spC0[32]; + + int var_r27; + for (var_r27 = 0; var_r27 < ARRAY_SIZE(spC0); var_r27++) { + if (var_r27 == field_0x58) { + spC0[var_r27] = '_'; + var_r27++; + break; + } + + spC0[var_r27] = ' '; + } + + spC0[var_r27] = 0; + Report(pos_x, pos_y, 7, " %s", spC0); + Report(pos_x, pos_y += y_offset, 1, "CMD BASE PLAY TERM FIXP"); + + *spC0 = 0; + + for (var_r27 = 0; var_r27 < 4; var_r27++) { + if (var_r27 == mCmdMode) { + strcat(spC0, "____ "); + break; + } + + strcat(spC0, " "); + } + + Report(pos_x, pos_y, 7, " %s", spC0); + Report(pos_x, pos_y += y_offset, 1, "ACT %c %8.8s", ActionSymbol(mRunKey.mAction), ActionName(mRunKey.mAction)); + Report(pos_x, pos_y += y_offset, 1, "TIM %3d", mRunKey.mTimer); + } else { + Report(pos_x, pos_y, 1, "CNT %4d/%4d", field_0x704.field_0x4 - 1, field_0xb14); + } +} + +bool dDbgCamera_c::showCenterMarker() { + switch (mCamSetup.CenterMarker()) { + case 1: + if (field_0xc00 != 18 || field_0xc04 != 18 || field_0xc08 != 0 || field_0xc0c != 0) { + field_0xc18 = 60; + } + + if (field_0xc18 != 0) { + field_0xc18--; + } + + return field_0xc18 != 0; + case 3: + return true; + case 2: + case 0: + default: + return false; + } +} + +bool dDbgCamera_c::showCameraPos() { + return mCamSetup.CheckFlag(4); +} + +bool dDbgCamera_c::showIdlCameraPos() { + return mCamSetup.CheckFlag(8); +} + +void dDbgCamera_c::Init(dCamera_c* i_dbgCamera) { + mpCamera = i_dbgCamera; + mRunKey = PlaneKey(); + mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; + field_0x58 = 0; + + int i; + for (i = 0; i < ARRAY_SIZE(mKeys); i++) { + mKeys[i] = PlaneKey(); + } + + memset(mActionKey, '-', sizeof(mActionKey)); + field_0x80 = 0; + field_0x54 = 0; + mCmdMode = 0; + mCamSetup.Init(this); +} + +void dDbgCamera_c::Finish() { + mCamSetup.Finish(); +} + +void dDbgCamera_c::Reset(dCamera_c* i_dbgCamera) { + mpCamera = i_dbgCamera; + mPadNo = PAD_3; + field_0x50 = 0; + mUp = i_dbgCamera->Up(); + + if (mActionKey[field_0x58] == '-') { + mRunKey = PlaneKey(); + } + + field_0xc04 = field_0xc00 = 18; + field_0xc10 = field_0xc14 = 0.0f; + field_0xc08 = field_0xc0c = 0; + field_0xc18 = 0; + mCmdMode = 0; + mIsPlaying = false; +} + +int dDbgCamera_c::Run() { + int rt; + + if (mDoCPd_c::getHoldLockL(mPadNo)) { + field_0xc08 = 1; + } else { + field_0xc08 = 0; + } + + if (mDoCPd_c::getHoldLockR(mPadNo)) { + field_0xc0c = 1; + } else { + field_0xc0c = 0; + } + + if (mDoCPd_c::getTrigUp(mPadNo)) { + if (field_0x54 == 0) { + field_0x54 = 5; + } else { + field_0x54--; + } + } else if (mDoCPd_c::getTrigDown(mPadNo)) { + if (field_0x54 >= 5) { + field_0x54 = 0; + } else { + field_0x54++; + } + } + + if (field_0x54 == 4) { + if (mDoCPd_c::getTrigLeft(mPadNo)) { + if (mRunKey.mAction == dDbgCam_KeyAction_FIXEDFRM) { + mRunKey.mAction = dDbgCam_KeyAction_NOACTION; + } else { + mRunKey.mAction--; + } + } else if (mDoCPd_c::getTrigRight(mPadNo)) { + if (mRunKey.mAction == dDbgCam_KeyAction_NOACTION) { + mRunKey.mAction = dDbgCam_KeyAction_FIXEDFRM; + } else { + mRunKey.mAction++; + } + } + } else if (field_0x54 == 5) { + if (mDoCPd_c::getTrigRight(mPadNo)) { + mRunKey.mTimer++; + field_0xc1c = 0; + } else if (mDoCPd_c::getHoldRight(mPadNo)) { + if (field_0xc1c++ > 20) { + mRunKey.mTimer++; + } + } else if (mDoCPd_c::getTrigLeft(mPadNo)) { + mRunKey.mTimer--; + field_0xc1c = 0; + } else if (mDoCPd_c::getHoldLeft(mPadNo)) { + if (field_0xc1c++ > 20) { + mRunKey.mTimer--; + } + } + } else if (field_0x54 == 3) { + rt = cmdTool(); + } else { + rt = moveTool(); + } + + if (mCamSetup.CheckFlag(0x8000)) { + monitor(); + } + + return rt; +} + +int dDbgCamera_c::DrawShape() { + int rt = 0; + + if (showCameraPos()) { + cXyz sp2F0[] = { + cXyz(5.0f, 6.5f, 10.0f), + cXyz(-5.0f, 6.5f, 10.0f), + cXyz(5.0f, -7.5f, 10.0f), + cXyz(-5.0f, -7.5f, 10.0f), + cXyz(5.0f, 6.5f, -10.0f), + cXyz(-5.0f, 6.5f, -10.0f), + cXyz(5.0f, -5.0f, -10.0f), + cXyz(-5.0f, -5.0f, -10.0f), + }; + + cXyz sp290[] = { + cXyz(3.0f, 3.0f, 10.0f), + cXyz(-3.0f, 3.0f, 10.0f), + cXyz(3.0f, -3.0f, 10.0f), + cXyz(-3.0f, -3.0f, 10.0f), + cXyz(3.0f, 3.0f, 16.0f), + cXyz(-3.0f, 3.0f, 16.0f), + cXyz(3.0f, -3.0f, 16.0f), + cXyz(-3.0f, -3.0f, 16.0f), + }; + + cXyz sp1A0[] = { + cXyz(80.0f, 0.0f, 0.0f), + cXyz(-80.0f, 0.0f, 0.0f), + cXyz(0.0f, 80.0f, 0.0f), + cXyz(0.0f, -80.0f, 0.0f), + }; + + dCamera_c* camera = dCam_getBody(); + + GXColor sp6C = {0xFF, 0xDC, 0x80, 0x96}; + GXColor sp68 = {0xDC, 0xFF, 0x80, 0x96}; + GXColor sp64 = {0xFF, 0xFF, 0xFF, 0x32}; + + cXyz cam_center = camera->Center(); + cXyz cam_eye = camera->Eye(); + cSAngle cam_u(camera->U()); + cSAngle cam_v(camera->V()); + + int i; + for (i = 0; i < 8; i++) { + sp2F0[i] = dCamMath::xyzRotateX(sp2F0[i], cam_v); + sp2F0[i] = dCamMath::xyzRotateY(sp2F0[i], cam_u); + sp2F0[i] += cam_eye; + + sp290[i] = dCamMath::xyzRotateX(sp290[i], cam_v); + sp290[i] = dCamMath::xyzRotateY(sp290[i], cam_u); + sp290[i] += cam_eye; + } + + dDbVw_drawCube8pOpa(sp2F0, sp6C); + dDbVw_drawCube8pOpa(sp290, sp6C); + dDbVw_drawSphereXlu(cam_eye, 3.0f, sp68, 1); + dDbVw_drawSphereXlu(cam_center, 5.0f, sp68, 1); + + for (i = 0; i < 4; i++) { + sp1A0[i] = dCamMath::xyzRotateX(sp1A0[i], cam_v); + sp1A0[i] = dCamMath::xyzRotateY(sp1A0[i], cam_u); + sp1A0[i] += cam_center; + } + + cSGlobe sp78(80.0f + camera->R(), -cam_v, cam_u); + dDbVw_drawLineXlu(cam_eye, cam_center, sp64, 1, 0xC); + dDbVw_drawLineXlu(sp1A0[0], sp1A0[1], sp64, 1, 0xC); + dDbVw_drawLineXlu(sp1A0[2], sp1A0[3], sp64, 1, 0xC); + rt = 1; + } + + if (showIdlCameraPos()) { + cXyz sp230[] = { + cXyz(5.0f, 6.5f, 10.0f), + cXyz(-5.0f, 6.5f, 10.0f), + cXyz(5.0f, -7.5f, 10.0f), + cXyz(-5.0f, -7.5f, 10.0f), + cXyz(5.0f, 6.5f, -10.0f), + cXyz(-5.0f, 6.5f, -10.0f), + cXyz(5.0f, -5.0f, -10.0f), + cXyz(-5.0f, -5.0f, -10.0f), + }; + + cXyz sp1D0[] = { + cXyz(3.0f, 3.0f, 10.0f), + cXyz(-3.0f, 3.0f, 10.0f), + cXyz(3.0f, -3.0f, 10.0f), + cXyz(-3.0f, -3.0f, 10.0f), + cXyz(3.0f, 3.0f, 16.0f), + cXyz(-3.0f, 3.0f, 16.0f), + cXyz(3.0f, -3.0f, 16.0f), + cXyz(-3.0f, -3.0f, 16.0f), + }; + + cXyz sp170[] = { + cXyz(80.0f, 0.0f, 0.0f), + cXyz(-80.0f, 0.0f, 0.0f), + cXyz(0.0f, 80.0f, 0.0f), + cXyz(0.0f, -80.0f, 0.0f), + }; + + dCamera_c* camera = dCam_getBody(); + + GXColor sp60 = {0x80, 0xFF, 0xDC, 0x5A}; + GXColor sp5C = {0x80, 0xDC, 0xFF, 0x5A}; + GXColor sp58 = {0xFF, 0xFF, 0xFF, 0x1E}; + + cXyz cam_icenter = camera->iCenter(); + cXyz cam_ieye = camera->iEye(); + cSAngle cam_iu(camera->iU()); + cSAngle cam_iv(camera->iV()); + + int i; + for (i = 0; i < 8; i++) { + sp230[i] = dCamMath::xyzRotateX(sp230[i], cam_iv); + sp230[i] = dCamMath::xyzRotateY(sp230[i], cam_iu); + sp230[i] += cam_ieye; + + sp1D0[i] = dCamMath::xyzRotateX(sp1D0[i], cam_iv); + sp1D0[i] = dCamMath::xyzRotateY(sp1D0[i], cam_iu); + sp1D0[i] += cam_ieye; + } + + dDbVw_drawCube8pOpa(sp230, sp60); + dDbVw_drawCube8pOpa(sp1D0, sp60); + dDbVw_drawSphereXlu(cam_ieye, 3.0f, sp5C, 1); + dDbVw_drawSphereXlu(cam_icenter, 5.0f, sp5C, 1); + + for (i = 0; i < 4; i++) { + sp170[i] = dCamMath::xyzRotateX(sp170[i], cam_iv); + sp170[i] = dCamMath::xyzRotateY(sp170[i], cam_iu); + sp170[i] += cam_icenter; + } + + cSGlobe sp70(80.0f + camera->iR(), -cam_iv, cam_iu); + cam_icenter = cam_ieye + sp70.Xyz(); + + dDbVw_drawLineXlu(cam_ieye, cam_icenter, sp58, 1, 0xC); + dDbVw_drawLineXlu(sp170[0], sp170[01], sp58, 1, 0xC); + dDbVw_drawLineXlu(sp170[2], sp170[3], sp58, 1, 0xC); + rt = 1; + } + + if (showCenterMarker()) { + f32 cam_cross = mCamSetup.CenterCloss(); + GXColor color = {0x80, 0x80, 0xFF, 0x80}; + cXyz sp134; + cXyz sp128; + + sp134 = mRunKey.mCenter; + sp128 = mRunKey.mCenter; + sp134.x += cam_cross; + sp128.x -= cam_cross; + dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); + + sp134.x -= cam_cross; + sp128.x += cam_cross; + sp134.y += cam_cross; + sp128.y -= cam_cross; + dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); + + sp134.y -= cam_cross; + sp128.y += cam_cross; + sp134.z += cam_cross; + sp128.z -= cam_cross; + dDbVw_drawLineXlu(sp134, sp128, color, 1, 0xC); + + cam_cross = mCamSetup.CenterBall(); + + GXColor sp50 = {0xFF, 0x80, 0x80, 0x80}; + if (field_0xc08 != 0) { + sp50.g = 0xFF; + } + + if (field_0xc0c != 0) { + sp50.b = 0xFF; + } + + dDbVw_drawSphereXlu(mRunKey.mCenter, cam_cross, sp50, 1); + rt = 1; + } + + if (mCamSetup.CheckFlag(0x10)) { + switch (mLchkNum) { + case 2: + // dComIfG_Bgsp().DrawPoly(mLchk[1], l_color2); + /* fallthrough */ + case 1: + // dComIfG_Bgsp().DrawPoly(mLchk[0], l_color1); + break; + } + } + + return rt; +} + +JUtility::TColor get_color(JUtility::TColor color) { + static JUtility::TColor colors[] = { + JUtility::TColor(0xFF, 0xFF, 0xFF, 0xFF), + JUtility::TColor(0xFF, 0xFF, 0xC0, 0xFF), + JUtility::TColor(0xFF, 0xC0, 0xC0, 0xFF), + JUtility::TColor(0xC0, 0xFF, 0xC0, 0xFF), + JUtility::TColor(0xC0, 0xC0, 0xFF, 0xFF), + JUtility::TColor(0xFF, 0xFF, 0x80, 0xFF), + JUtility::TColor(0xFF, 0x80, 0x80, 0xFF), + JUtility::TColor(0xC0, 0xFF, 0x80, 0xFF), + JUtility::TColor(0x80, 0x80, 0xFF, 0xFF), + }; + + (void)(u32)color; + int var_r30 = 1; + + if (var_r30 && (u32)color < 9) { + return colors[(u32)color & ~0x80000000]; + } + + return color; +} + +int dDbgCamera_c::Report(int x, int y, JUtility::TColor color, const char* mesg, ...) { + char buffer[0x100]; + + static JUtility::TColor ShadowDarkColor(0, 0, 0, 0x80); + + va_list list; + va_start(list, mesg); + vsnprintf(buffer, sizeof(buffer), mesg, list); + va_end(list); + + JUTDbPrint::getManager()->flush(); + + JUTDbPrint::getManager()->setCharColor(ShadowDarkColor); + JUTReport(x + 2, y + 2, buffer); + + JUTDbPrint::getManager()->flush(); + + JUTDbPrint::getManager()->setCharColor(get_color(color)); + JUTReport(x, y, buffer); + + JUTDbPrint::getManager()->flush(); + JUTDbPrint::getManager()->setCharColor(g_HIO.mColor); + return 1; +} + +void dDbgCamera_c::OpenFile() { + const char ext[] = "イベントファイル(*.zev)\0*.zev\0その他のファイル(*.*)\0*.*\0"; + mFile.open("dbgcam.zev", 2, ext, NULL, NULL, NULL); +} + +void dDbgCamera_c::PrintFile(char* string, ...) { + char buffer[0x100]; + + va_list args; + va_start(args, string); + vsnprintf(buffer, sizeof(buffer), string, args); + va_end(args); + + mFile.writeData(buffer, strlen(buffer)); +} + +void dDbgCamera_c::CloseFile() { + mFile.close(); +} + +#endif diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 7bcfbd87d9e..bba5adc0bf7 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -15,6 +15,9 @@ #include "Z2AudioLib/Z2WolfHowlMgr.h" #include "c/c_dylink.h" #include "d/d_com_inf_game.h" +#include "d/d_s_logo.h" +#include "d/d_s_menu.h" +#include "d/d_s_play.h" #include "f_ap/f_ap_game.h" #include "m_Do/m_Do_MemCard.h" #include "m_Do/m_Do_Reset.h" @@ -22,9 +25,12 @@ #include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_graphic.h" #include "m_Do/m_Do_machine.h" +#include "SSystem/SComponent/c_counter.h" +#include /* 800056C0-80005728 000000 0068+00 1/1 0/0 0/0 .text version_check__Fv */ void version_check() { +#if !PLATFORM_SHIELD if (!strcmp("20Apr2004", "20Apr2004") && !strcmp("Patch2", "Patch2")) { return; } @@ -33,24 +39,12 @@ void version_check() { OSReport_Error("SDKのバージョンが一致しません。停止します\n"); do { } while (true); -} - -/* 80005728-8000578C 000068 0064+00 1/1 0/0 0/0 .text CheckHeap1__9HeapCheckFv */ -void HeapCheck::CheckHeap1() { - s32 totalUsedSize = mHeap->getTotalUsedSize(); - s32 freeSize = mHeap->getFreeSize(); - - if (mMaxTotalUsedSize < totalUsedSize) - mMaxTotalUsedSize = totalUsedSize; - - if (mMaxTotalFreeSize > freeSize) - mMaxTotalFreeSize = freeSize; +#endif } /* 803A2EE0-803A2EF4 000000 0012+02 2/2 1/1 0/0 .data COPYDATE_STRING__7mDoMain */ char mDoMain::COPYDATE_STRING[18] = "??/??/?? ??:??:??"; -/* ############################################################################################## */ /* 803D32E0-803D3308 000000 0028+00 3/2 0/0 0/0 .bss RootHeapCheck */ // static HeapCheck RootHeapCheck; static HeapCheck RootHeapCheck = HeapCheck(0,"Root","ルート"); @@ -89,21 +83,37 @@ static HeapCheck* HeapCheckTable[8] = { &ArchiveHeapCheck, &J2dHeapCheck, &HostioHeapCheck, &CommandHeapCheck, }; +void printFrameLine() { + OSCalendarTime calendar; + OSTime time = OSGetTime(); + u32 retrace = VIGetRetraceCount(); + OSTicksToCalendarTime(time, &calendar); + + OS_REPORT("\x1b[44m-- %5d - %5d - %3d %d %04d/%02d/%02d %02d:%02d:%02d\'%03d\'\'%03d\n\x1b[m", + g_Counter.mCounter0, retrace, + calendar.yday, calendar.wday, calendar.year, calendar.mon, calendar.mday, + calendar.hour, calendar.min, calendar.sec, calendar.msec, calendar.usec); +} + +/* 80005728-8000578C 000068 0064+00 1/1 0/0 0/0 .text CheckHeap1__9HeapCheckFv */ +void HeapCheck::CheckHeap1() { + s32 totalUsedSize = mHeap->getTotalUsedSize(); + s32 freeSize = mHeap->getFreeSize(); + + if (mMaxTotalUsedSize < totalUsedSize) + mMaxTotalUsedSize = totalUsedSize; + + if (mMaxTotalFreeSize > freeSize) + mMaxTotalFreeSize = freeSize; +} + /* 8000578C-80005848 0000CC 00BC+00 1/1 0/0 0/0 .text CheckHeap__FUl */ void CheckHeap(u32 i_padNo) { mDoMch_HeapCheckAll(); OSCheckActiveThreads(); - bool comboCheck = false; + int saveRel = (mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z) == (PAD_TRIGGER_L + PAD_TRIGGER_R) && mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z; - // if L + R + Z is pressed - if ((mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z) == (PAD_TRIGGER_L + PAD_TRIGGER_R) && - mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z) - { - comboCheck = true; - } - - int saveRel = comboCheck; for (int i = 0; i < 8; i++) { HeapCheckTable[i]->CheckHeap1(); if (saveRel) { @@ -115,13 +125,13 @@ void CheckHeap(u32 i_padNo) { /* 80005848-800058A0 000188 0058+00 2/2 0/0 0/0 .text countUsed__FP10JKRExpHeap */ static int countUsed(JKRExpHeap* heap) { OSDisableScheduler(); - int counter = 0; - JKRExpHeap::CMemBlock* used_blocks_head = heap->getHeadUsedList(); + int counter = 0; + JKRExpHeap::CMemBlock* used_blocks_head = heap->getUsedFirst(); while (used_blocks_head) { - used_blocks_head = used_blocks_head->getNextBlock(); counter++; - }; + used_blocks_head = used_blocks_head->getNextBlock(); + } OSEnableScheduler(); return counter; @@ -134,8 +144,8 @@ s32 HeapCheck::getUsedCount() const { /* 800058C4-80005AD8 000204 0214+00 1/1 0/0 0/0 .text heapDisplay__9HeapCheckCFv */ void HeapCheck::heapDisplay() const { - s32 heap_size = mHeap->getSize(); - s32 used_count = heap_size - mTargetHeapSize; + s32 heap_size = mHeap->getHeapSize(); + s32 used_count = heap_size - getTargetHeapSize(); s32 total_used_size = mHeap->getTotalUsedSize(); s32 total_free_size = mHeap->getTotalFreeSize(); @@ -143,39 +153,39 @@ void HeapCheck::heapDisplay() const { JUTReport(100, 212, "[%sName]", mName); JUTReport(100, 227, "HeapSize %8ld", heap_size); - JUTReport(100, 240, "TargetHeapSize %8ld", mTargetHeapSize); + JUTReport(100, 240, "TargetHeapSize %8ld", getTargetHeapSize()); JUTReport(100, 253, "TotalFree %8ld", total_free_size - used_count); JUTReport(100, 266, "FreeSize %8ld", heap_free_size - used_count); JUTReport(100, 279, "TotalUsedSize %8ld", total_used_size); - JUTReport(100, 292, "TotalUsedRate %3ld%%", - (int)(total_used_size * 0x64) / (int)mTargetHeapSize); + JUTReport(100, 292, "TotalUsedRate %3ld%%", (int)(total_used_size * 100) / (int)getTargetHeapSize()); JUTReport(100, 305, "MaxTotalUsedSize %8ld", mMaxTotalUsedSize); - JUTReport(100, 318, "MaxTotalUsedRate %3ld%%", - (mMaxTotalUsedSize * 0x64) / (int)mTargetHeapSize); + JUTReport(100, 318, "MaxTotalUsedRate %3ld%%", (mMaxTotalUsedSize * 100) / (int)getTargetHeapSize()); JUTReport(100, 331, "MinFreeSize %8ld", mMaxTotalFreeSize - used_count); - JUTReport(100, 344, "MinFreeRate %3ld%%", - ((mMaxTotalFreeSize - used_count) * 0x64) / (int)mTargetHeapSize); - used_count = countUsed(mHeap); - JUTReport(100, 357, "UsedCount %3ld%", used_count); + JUTReport(100, 344, "MinFreeRate %3ld%%", ((mMaxTotalFreeSize - used_count) * 100) / (int)getTargetHeapSize()); + JUTReport(100, 357, "UsedCount %3ld%", countUsed(mHeap)); } +#if DEBUG +int mDoMain::argument = -1; +#endif + /* 80450580-80450584 000000 0004+00 3/3 6/6 0/0 .sdata None */ -#ifdef DEBUG -s8 mDoMain::developmentMode = 1; -#else s8 mDoMain::developmentMode = -1; + +#ifdef DEBUG +u32 mDoMain::gameHeapSize = 0xFFFFFFFF; +u32 mDoMain::archiveHeapSize = 0xFFFFFFFF; #endif /* 80450584-80450588 000004 0004+00 0/0 1/1 0/0 .sdata memMargin__7mDoMain */ u32 mDoMain::memMargin = 0xFFFFFFFF; #ifdef DEBUG -u32 mDoMain::archiveHeapSize; -u32 mDoMain::gameHeapSize; +int mDoMain::e3menu_no = -1; #endif /* 80450588-80450590 000008 0008+00 2/2 0/0 0/0 .sdata None */ -u8 mDoMain::mHeapBriefType = 4; +u8 mHeapBriefType = 4; /* 80450B00-80450B08 000000 0008+00 1/1 0/0 0/0 .sbss None */ static u8 fillcheck_check_frame; @@ -188,7 +198,7 @@ OSTime mDoMain::sHungUpTime; /* 80450B18-80450B1C -00001 0004+00 3/3 0/0 0/0 .sbss None */ /* 80450B18 0001+00 data_80450B18 None */ -static bool mDisplayHeapSize; +static u8 mDisplayHeapSize; /* 80450B19 0001+00 data_80450B19 None */ static u8 mSelectHeapBar; @@ -210,18 +220,21 @@ void debugDisplay() { HeapCheckTable[mSelectHeapBar - 1]->heapDisplay(); } - if (mDoMain::mHeapBriefType == 5) { + if (mHeapBriefType == 5) { JKRAramHeap* heap = JKRAram::getAramHeap(); - if (heap) { + if (heap != NULL) { JUTReport(475, 100, "ARAM Free"); JUTReport(475, 114, "%d", heap->getFreeSize()); JUTReport(475, 128, "TotalFree"); JUTReport(475, 142, "%d", heap->getTotalFreeSize()); - return; } - } else if (mDoMain::mHeapBriefType != 0) { - JUTReport(475, 100, "%s", desc1[mDoMain::mHeapBriefType]); - JUTReport(475, 114, "%s", desc2[mDoMain::mHeapBriefType]); + return; + } + + if (mHeapBriefType != 0) { + JUT_ASSERT(596, mHeapBriefType < HeapCheckTableNum); + JUTReport(475, 100, "%s", desc1[mHeapBriefType]); + JUTReport(475, 114, "%s", desc2[mHeapBriefType]); for (int i = 0; i < 8; i++) { HeapCheck* heap_check = HeapCheckTable[i]; @@ -229,7 +242,7 @@ void debugDisplay() { s32 check1; s32 check2; - switch (mDoMain::mHeapBriefType) { + switch (mHeapBriefType) { case 1: check1 = expHeap->getTotalFreeSize(); check2 = expHeap->getFreeSize(); @@ -255,47 +268,31 @@ void debugDisplay() { } } +void my_genCheckBox(JORMContext* mctx, const char* label, u8* pSrc, u8 mask) { + mctx->genCheckBox(label, pSrc, mask, 0, NULL, 0xFFFF, 0xFFFF, 0x200, 0x18); +} + /* 80005D4C-8000614C 00068C 0400+00 1/1 0/0 0/0 .text Debug_console__FUl */ bool Debug_console(u32 i_padNo) { - static f32 console_position_x; - static s8 console_x_init; - - static f32 console_position_y; - static s8 console_y_init; - - static f32 console_scroll; - static s8 console_scroll_init; - JUTConsole* console = JFWSystem::getSystemConsole(); - if (console) { - if (!console_x_init) { - console_position_x = 20.0f; - console_x_init = 1; - } - if (!console_y_init) { - console_position_y = 30.0f; - console_y_init = 1; - } - if (!console_scroll_init) { - console_scroll = 0.0f; - console_scroll_init = 1; - } + if (console != NULL) { + static f32 console_position_x = 20.0f; + static f32 console_position_y = 30.0f; + static f32 console_scroll = 0.0f; - if (mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z && !(mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z)) - { + if (mDoCPd_c::getTrig(i_padNo) & PAD_TRIGGER_Z && !(mDoCPd_c::getHold(i_padNo) & ~PAD_TRIGGER_Z)) { console->setVisible(console->isVisible() == false); JUTAssertion::setMessageCount(0); } if (console->isVisible()) { - u32 holdButtons = mDoCPd_c::getHold(i_padNo); - if ((holdButtons & PAD_TRIGGER_L && holdButtons & PAD_TRIGGER_R) || + if ((mDoCPd_c::getHold(i_padNo) & PAD_TRIGGER_L && mDoCPd_c::getHold(i_padNo) & PAD_TRIGGER_R) || ((mDoCPd_c::getAnalogL(i_padNo) > 0.0f && mDoCPd_c::getAnalogR(i_padNo) > 0.0f))) { f32 stick_x = mDoCPd_c::getStickX(i_padNo); f32 stick_y = mDoCPd_c::getStickY(i_padNo); - if (holdButtons & (PAD_BUTTON_Y | PAD_BUTTON_X) && + if (mDoCPd_c::getHold(i_padNo) & (PAD_BUTTON_Y | PAD_BUTTON_X) && mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_START) { console->clear(); @@ -338,24 +335,22 @@ bool Debug_console(u32 i_padNo) { JUTReport(30, 420, 1, "SCROLL:%3d %3d %3d Output=%1x", console->getLineOffset(), console->getPositionX(), console->getPositionY(), console->getOutput()); } else { - u32 pressButtons = mDoCPd_c::getTrig(i_padNo); - - if (pressButtons & PAD_BUTTON_DOWN) { - g_HIO.mDisplayMeter ^= 1; + if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_DOWN) { + g_HIO.mDisplayMeter ^= (u8)1; } - if (pressButtons & PAD_BUTTON_LEFT) { - if (JKRAram::getAramHeap()) { - JKRAram::getAramHeap()->dump(); + if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_LEFT) { + JKRAramHeap* aram = JKRAram::getAramHeap(); + if (aram != NULL) { + aram->dump(); } - // dump__24DynamicModuleControlBaseFv(); DynamicModuleControlBase::dump(); g_dComIfG_gameInfo.mResControl.dump(); } if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_RIGHT) { - JKRHeap::getSystemHeap()->dump_sort(); + JKRGetSystemHeap()->dump_sort(); } if (mDoCPd_c::getTrig(i_padNo) & PAD_BUTTON_UP) { @@ -363,29 +358,38 @@ bool Debug_console(u32 i_padNo) { gameHeap->dump_sort(); archiveHeap->dump_sort(); } + JUTReport(30, 440, 1, "Press L+R trigger to control console."); JUTReport(30, 450, 1, "Press [Z] trigger to close this window."); } + console->setPosition(console_position_x, console_position_y); return 1; } } + return 0; } +#if PLATFORM_GCN +#define COPYDATE_PATH "/str/Final/Release/COPYDATE" +#else +#define COPYDATE_PATH "/str/RVL/Debug/COPYDATE" +#endif + /* 8000614C-800061C8 000A8C 007C+00 1/1 0/0 0/0 .text LOAD_COPYDATE__FPv */ s32 LOAD_COPYDATE(void*) { - s32 status; - - DVDFileInfo __attribute__((aligned(0x20))) fileInfo; - u8 buffer[0x20]; - status = DVDOpen("/str/Final/Release/COPYDATE", &fileInfo); + DVDFileInfo ALIGN_DECL(32) fileInfo; + u8 buffer[32]; + BOOL status = DVDOpen(COPYDATE_PATH, &fileInfo); if (status) { - DVDReadPrio(&fileInfo, &buffer, 32, 0, 2); - memcpy(mDoMain::COPYDATE_STRING, buffer, 17); + s32 rt = DVDReadPrio(&fileInfo, &buffer, sizeof(buffer), 0, 2); + memcpy(mDoMain::COPYDATE_STRING, buffer, sizeof(mDoMain::COPYDATE_STRING) - 1); status = DVDClose(&fileInfo); } + + OS_REPORT("\x1b[36mCOPYDATE=[%s]\n\x1b[m", mDoMain::COPYDATE_STRING); return status; } @@ -399,15 +403,14 @@ static void debug() { if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~PAD_TRIGGER_Z) == PAD_TRIGGER_R && mDoCPd_c::getGamePad(PAD_3)->testTrigger(PAD_TRIGGER_Z)) { - mDisplayHeapSize ^= 1; + mDisplayHeapSize ^= (u8)1; } if (mDisplayHeapSize) { if ((mDoCPd_c::getGamePad(PAD_3)->getButton() & ~PAD_TRIGGER_Z) == PAD_TRIGGER_L && mDoCPd_c::getGamePad(PAD_3)->testTrigger(PAD_TRIGGER_Z)) { - mDoMain::mHeapBriefType < 5 ? mDoMain::mHeapBriefType++ : - mDoMain::mHeapBriefType = 1; + mHeapBriefType < 5 ? mHeapBriefType++ : mHeapBriefType = 1; } debugDisplay(); @@ -500,7 +503,91 @@ void main01(void) { } while (true); } -/* ############################################################################################## */ +#if DEBUG +// NONMATCHING +void parse_args(int argc, const char* argv[]) { + int i; + + OS_REPORT("argc = %d\n", argc); + for (i = 0; i < argc; i++) { + OS_REPORT("argv[%d] = %s\n", i, argv[i]); + } + + for (i = 1; i < argc; i++) { + if (strcmp(argv[i], "--noopening") == 0) { + dScnLogo_c::onOpeningCut(); + } else if (strcmp(argv[i], "--nobank") == 0) { + dStage_roomControl_c::onNoArcBank(); + OS_REPORT("\x1b[33mアーカイブバンクを無効にしました\n\x1b[m"); + } else if (strcmp(argv[i], "--particle254") == 0) { + // data_8074c494 = 1; + OSReport_Warning("パーティクル254固定にしました\n"); + } else if (strncmp(argv[i], "--menu=", sizeof("--menu=") - 1) == 0) { + char* var_r27 = strchr(argv[i] + 7, ','); + if (var_r27 != NULL) { + *var_r27 = 0; + var_r27++; + + char* var_r26 = std::strchr(var_r27, ','); + if (var_r26 != NULL) { + *var_r26 = 0; + var_r26++; + + char* spC = std::strchr(var_r26, ','); + if (spC != NULL) { + *spC = 0; + spC++; + sscanf(spC, "%d", dScnMenu_c::cursolPoint); + dScnMenu_c::m_error_flags |= (u8)8; + } + + sscanf(var_r26, "%d", dScnMenu_c::cursolLayer); + dScnMenu_c::m_error_flags |= (u8)4; + } + + sscanf(var_r27, "%d", dScnMenu_c::cursolRoomNo); + dScnMenu_c::m_error_flags |= (u8)2; + } + + strcpy(dScnMenu_c::cursolStageName, argv[i] + 7); + dScnMenu_c::m_error_flags |= (u8)1; + + OS_REPORT("\n\n\ndScnMenu_c::cursolLayer=[%x]", dScnMenu_c::cursolLayer); + OS_REPORT("\ndScnMenu_c::cursolRoomNo=[%x]", dScnMenu_c::cursolRoomNo); + OS_REPORT("\ndScnMenu_c::cursolStageName=[%s]\n\n", dScnMenu_c::cursolStageName); + } else if (strncmp(argv[i], "--situation=", sizeof("--situation=") - 1) == 0) { + for (int j = 0; j < 100; j++) { + if (argv[i][12 + j] <= ' ') { + break; + } + + g_presetHIO.filename_buf[j] = argv[i][12 + j]; + } + + OS_REPORT("\n11 g_presetHIO.filename_buf[0]=[%-100.100s]", g_presetHIO.filename_buf); + } else if (strcmp(argv[i], "--noprint") == 0) { + OSReportDisable(); + } else if (strcmp(argv[i], "--develop") == 0) { + mDoMain::developmentMode = 1; + } else if (strcmp(argv[i], "--nodevelop") == 0) { + mDoMain::developmentMode = 0; + } else if (strncmp(argv[i], "--e3argument=", sizeof("--e3argument=") - 1) == 0) { + sscanf(argv[i] + sizeof("--e3argument=") - 1, "%d", &mDoMain::argument); + } else if (strncmp(argv[i], "--gameheapsize=0x", sizeof("--gameheapsize=0x") - 1) == 0) { + sscanf(argv[i] + sizeof("--gameheapsize=0x") - 1, "%x", &mDoMain::gameHeapSize); + } else if (strncmp(argv[i], "--archiveheapsize=0x", sizeof("--archiveheapsize=0x") - 1) == 0) { + sscanf(argv[i] + sizeof("--archiveheapsize=0x") - 1, "%x", &mDoMain::archiveHeapSize); + } else if (strncmp(argv[i], "--memmargin=0x", sizeof("--memmargin=0x") - 1) == 0) { + sscanf(argv[i] + sizeof("--memmargin=0x") - 1, "%x", &mDoMain::memMargin); + } else if (strncmp(argv[i], "--e3menu=0x", sizeof("--e3menu=0x") - 1) == 0) { + sscanf(argv[i] + sizeof("--e3menu=0x") - 1, "%x", &mDoMain::e3menu_no); + } else { + OSReport_Error("unknown argument %d, %s\n", i, argv[i]); + } + } +} +#endif + /* 803D3420-803DB420 000140 8000+00 1/1 0/0 0/0 .bss mainThreadStack */ static u8 mainThreadStack[32768];