diff --git a/include/JSystem/JMessage/control.h b/include/JSystem/JMessage/control.h index da4b96d04..9423b0d71 100644 --- a/include/JSystem/JMessage/control.h +++ b/include/JSystem/JMessage/control.h @@ -32,7 +32,7 @@ struct TControl { return mResource != NULL && mResource->getGroupID() == groupID; } - const char* getMessageData_cached_messageEntry_(u16 messageIndex, const void* messageEntry) const {} + const char* getMessageData_cached_messageEntry_(u16 messageIndex, const void* messageEntry) const { /* TODO */ return NULL; } bool isReady_update_() const { return mMessageEntry != NULL && mMessageDataStart != 0 && mBaseProcSeq != NULL; } bool isReady_render_() const { return mMessageEntry != NULL && mMessageDataCurrent != NULL && mBaseProcRender != NULL; } diff --git a/include/JSystem/JStudio/JStudio/jstudio-control.h b/include/JSystem/JStudio/JStudio/jstudio-control.h index b1507ebcf..75d168e5c 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-control.h +++ b/include/JSystem/JStudio/JStudio/jstudio-control.h @@ -37,10 +37,16 @@ public: TControl(); virtual ~TControl(); - void setFactory(JStudio::TFactory*); void transformOnSet_setOrigin(const Vec&, f32); void transformOnGet_setOrigin(const Vec&, f32); + void setFactory(JStudio::TFactory* factory) { + stb::TFactory* stb_factory = factory; + fvb::TFactory* fvb_factory = factory == NULL ? NULL : &factory->fvb_Factory; + stb::TControl::setFactory(stb_factory); + fvb_Control.setFactory(fvb_factory); + } + void stb_destroyObject_all() { stb::TControl::destroyObject_all(); } void fvb_destroyObject_all() { fvb_Control.destroyObject_all(); } @@ -55,13 +61,13 @@ public: void transformOnGet_enable(bool param_0) { mTransformOnGet = param_0; } void transform_enable(bool param_0) { - transformOnSet_enable(param_0); transformOnGet_enable(param_0); + transformOnSet_enable(param_0); } void transform_setOrigin(const Vec& xyz, f32 rotY) { - transformOnSet_setOrigin(xyz, rotY); transformOnGet_setOrigin(xyz, rotY); + transformOnSet_setOrigin(xyz, rotY); } f32 transformOnSet_getRotationY() const { return mTransformOnSet_RotationY; } diff --git a/include/JSystem/JStudio/JStudio_JAudio/control.h b/include/JSystem/JStudio/JStudio_JAudio/control.h index b23360c7b..17c3500b0 100644 --- a/include/JSystem/JStudio/JStudio_JAudio/control.h +++ b/include/JSystem/JStudio/JStudio_JAudio/control.h @@ -69,17 +69,15 @@ struct TAdaptor_sound : public JStudio::TAdaptor_sound { }; // Size: 0x104 struct TCreateObject : public JStudio::TCreateObject { - TCreateObject(JAIBasic* jai, const JStage::TSystem* system) + TCreateObject(JAIBasic* jai) { mSound = jai; - mSystem = system; } virtual ~TCreateObject(); // _08 virtual bool create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data); // _0C /* 0x00 */ /* JStudio::TCreateObject */ /* 0x0C */ JAIBasic* mSound; - /* 0x10 */ const JStage::TSystem* mSystem; }; } // namespace JStudio_JAudio diff --git a/include/JSystem/JStudio/JStudio_JParticle/control.h b/include/JSystem/JStudio/JStudio_JParticle/control.h index a59b2638c..7387db164 100644 --- a/include/JSystem/JStudio/JStudio_JParticle/control.h +++ b/include/JSystem/JStudio/JStudio_JParticle/control.h @@ -8,17 +8,15 @@ namespace JStudio_JParticle { struct TCreateObject : public JStudio::TCreateObject { TCreateObject(JPAEmitterManager* p_emitMgr, const JStage::TSystem* p_system) { - pJPAEmitterManager_ = p_emitMgr; - pJSGSystem_ = p_system; - mPermit_onExit_notEnd = false; + mEmitterMgr = p_emitMgr; + mSystem = p_system; } virtual ~TCreateObject(); virtual bool create(JStudio::TObject**, JStudio::stb::data::TParse_TBlock_object const&); - /* 0x0C */ JPAEmitterManager* pJPAEmitterManager_; - /* 0x10 */ const JStage::TSystem* pJSGSystem_; - /* 0x14 */ bool mPermit_onExit_notEnd; + /* 0x0C */ JPAEmitterManager* mEmitterMgr; + /* 0x10 */ const JStage::TSystem* mSystem; }; struct TAdaptor_particle : public JStudio::TAdaptor_particle { diff --git a/include/d/d_demo.h b/include/d/d_demo.h index 7c6c7aa96..c72a5ee38 100644 --- a/include/d/d_demo.h +++ b/include/d/d_demo.h @@ -15,22 +15,21 @@ #include "JSystem/J3DGraphAnimator/J3DModelData.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTNameTab.h" +#include "JSystem/JStudio/JStudio/jstudio-control.h" +#include "JSystem/JStudio/JStudio_JAudio/control.h" +#include "JSystem/JStudio/JStudio_JMessage/control.h" +#include "JSystem/JStudio/JStudio_JParticle/control.h" +#include "JSystem/JStudio/JStudio_JStage/control.h" #include "m_Do/m_Do_mtx.h" -class dDemo_system_c; -namespace JStudio { - class TControl { - public: - TControl(); - /* 0x00 */ u32 field_0x00[10]; - }; -} -class dMesg_tControl { +class fopAc_ac_c; + +class dMesg_tControl : public JMessage::TControl { public: dMesg_tControl(); - /* 0x00 */ u32 field_0x00[29]; -}; -class fopAc_ac_c; + + /* 0x3C */ u8 field_0x3C[0x74 - 0x3C]; +}; // Size: 0x74 class dDemo_actor_c : public JStage::TActor { public: @@ -243,9 +242,9 @@ public: dDemo_manager_c(); ~dDemo_manager_c(); - void create(u8 const*, cXyz*, f32); + bool create(const u8*, cXyz*, f32); void remove(); - void update(); + bool update(); int getFrame() { return mFrame; } u32 getFrameNoMsg() { return mFrameNoMsg; } @@ -253,12 +252,12 @@ public: /* 0x00 */ dDemo_system_c* mSystem; /* 0x04 */ JStudio::TControl* mControl; - /* 0x08 */ void* mStage; - /* 0x0C */ void* mAudio; - /* 0x10 */ void* mParticle; - /* 0x14 */ void* mFactory; + /* 0x08 */ JStudio_JStage::TCreateObject* mStage; + /* 0x0C */ JStudio_JAudio::TCreateObject* mAudio; + /* 0x10 */ JStudio_JParticle::TCreateObject* mParticle; + /* 0x14 */ JStudio::TFactory* mFactory; /* 0x18 */ dMesg_tControl* mMesgControl; - /* 0x1C */ void* mMessage; + /* 0x1C */ JStudio_JMessage::TCreateObject* mMessage; /* 0x20 */ dDemo_object_c mDemoObj; /* 0xD0 */ char* mCurFile; /* 0xD4 */ int mFrame; diff --git a/include/d/d_particle.h b/include/d/d_particle.h index f4d373acf..f8a17e2ca 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -475,7 +475,9 @@ public: static void offStatus(u8 status) { mStatus &= ~status; } static u8 mStatus; + static JPAEmitterManager* getEmitterManager() { return mEmitterMng; } static JPAEmitterManager* mEmitterMng; + static dPa_stripesEcallBack mStripes; static dPa_kageroEcallBack mKagero; static dPa_smokeEcallBack mSmokeEcallback; diff --git a/src/JSystem/JStudio/JStudio/jstudio-control.cpp b/src/JSystem/JStudio/JStudio/jstudio-control.cpp index 4c108d1a6..f641569ed 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-control.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-control.cpp @@ -13,8 +13,9 @@ JStudio::TControl::TControl() { mTransformOnSet = false; mTransformOnGet = false; - Vec aVStack_20 = {0.0f,0.0f,0.0f}; - transform_setOrigin(aVStack_20, 0.0f); + Vec aVStack_20 = {0.0f, 0.0f, 0.0f}; + transformOnSet_setOrigin(aVStack_20, 0.0f); + transformOnGet_setOrigin(aVStack_20, 0.0f); } /* 8026E110-8026E180 .text __dt__Q27JStudio8TControlFv */ diff --git a/src/JSystem/JStudio/JStudio_JParticle/control.cpp b/src/JSystem/JStudio/JStudio_JParticle/control.cpp index d59245153..6795c3f37 100644 --- a/src/JSystem/JStudio/JStudio_JParticle/control.cpp +++ b/src/JSystem/JStudio/JStudio_JParticle/control.cpp @@ -52,7 +52,7 @@ bool TCreateObject::create(JStudio::TObject** newObject, const JStudio::stb::dat default: return false; } - *newObject = func(data, pJPAEmitterManager_, pJSGSystem_); + *newObject = func(data, mEmitterMgr, mSystem); return true; } diff --git a/src/d/d_attention.cpp b/src/d/d_attention.cpp index 89adac1b6..442a6ba8d 100644 --- a/src/d/d_attention.cpp +++ b/src/d/d_attention.cpp @@ -442,7 +442,7 @@ BOOL sound_attention(fopAc_ac_c* actor, void* userWork) { /* 8009EAA4-8009EB38 .text runSoundProc__12dAttention_cFv */ void dAttention_c::runSoundProc() { - mEnemyBsPcId = -1; + mEnemyBsPcId = fpcM_ERROR_PROCESS_ID_e; mEnemyDistance = 10000.0f; if (!(mFlags & 0x80000000)) { fopAcIt_Executor((fopAcIt_ExecutorFunc)sound_attention, this); @@ -639,15 +639,15 @@ fopAc_ac_c* dAttLook_c::convPId(unsigned int i_procID) { /* 8009FE40-8009FE58 .text init__10dAttLook_cFv */ void dAttLook_c::init() { - field_0x0 = -1; - mLookTargetID = -1; + field_0x0 = fpcM_ERROR_PROCESS_ID_e; + mLookTargetID = fpcM_ERROR_PROCESS_ID_e; field_0x4 = 3; } /* 8009FE58-8009FE74 .text proc__10dAttLook_cFv */ void dAttLook_c::proc() { mLookTargetID = field_0x0; - field_0x0 = -1; + field_0x0 = fpcM_ERROR_PROCESS_ID_e; field_0x4 = 3; } diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index 7651cd252..7df64c53d 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -6,6 +6,7 @@ #include "d/d_demo.h" #include "f_op/f_op_camera_mng.h" #include "d/d_com_inf_game.h" +#include "m_Do/m_Do_printf.h" /* 800692C4-80069330 .text __ct__13dDemo_actor_cFv */ dDemo_actor_c::dDemo_actor_c() { @@ -20,7 +21,15 @@ dDemo_actor_c::dDemo_actor_c() { /* 80069330-800693C0 .text __dt__13dDemo_actor_cFv */ dDemo_actor_c::~dDemo_actor_c() { - /* Nonmatching */ + fopAc_ac_c* actor = getActor(); + if (actor) { + actor->demoActorID = 0; + } + mActorPcId = fpcM_ERROR_PROCESS_ID_e; + mBckId = -1; + mBtpId = -1; + mBtkId = -1; + mBrkId = -1; } /* 800693C0-800693F4 .text getActor__13dDemo_actor_cFv */ @@ -31,7 +40,7 @@ fopAc_ac_c* dDemo_actor_c::getActor() { /* 800693F4-80069434 .text setActor__13dDemo_actor_cFP10fopAc_ac_c */ void dDemo_actor_c::setActor(fopAc_ac_c* ac) { if (ac == NULL) - mActorPcId = -1; + mActorPcId = fpcM_ERROR_PROCESS_ID_e; else mActorPcId = fopAcM_GetID(ac); mBckId = -1; @@ -70,6 +79,10 @@ void dDemo_getJaiPointer(const char*, u32, int, u16*) { /* 800698C0-80069BC0 .text dDemo_setDemoData__FP10fopAc_ac_cUcP14mDoExt_McaMorfPCciPUsUlSc */ BOOL dDemo_setDemoData(fopAc_ac_c*, u8, mDoExt_McaMorf*, const char*, int, u16*, u32, s8) { /* Nonmatching */ + char* a_name; + JUT_ASSERT(0, a_name != 0); + void* i_key; + JUT_ASSERT(0, i_key != 0); } /* 80069BC0-80069BDC .text JSGSetData__13dDemo_actor_cFUlPCvUl */ @@ -479,47 +492,101 @@ void* dDemo_system_c::JSGFindObject(const char* name, JStage::TEObject type) con /* 8006A92C-8006ADA0 .text __ct__15dDemo_manager_cFv */ dDemo_manager_c::dDemo_manager_c() { - /* Nonmatching */ mCurFile = NULL; mFrame = 0; + mMesgControl = new dMesg_tControl(); - JUT_ASSERT(0x5b6, mMesgControl != 0); + JUT_ASSERT(0x5b7, mMesgControl != 0); mSystem = new dDemo_system_c(); JUT_ASSERT(0x5ba, mSystem != 0); mControl = new JStudio::TControl(); - // TODO: finish this once we make progress on JStudio headers - // mFactory->appendCreateObj(mStage); - // mFactory->appendCreateObj(mAudio); - // mFactory->appendCreateObj(mParticle); + JUT_ASSERT(0x5bc, mControl != 0); + mStage = new JStudio_JStage::TCreateObject(mSystem); + JUT_ASSERT(0x5be, mStage != 0); + mAudio = new JStudio_JAudio::TCreateObject(mDoAud_zelAudio_c::getInterface()); + JUT_ASSERT(0x5c0, mAudio != 0); + mParticle = new JStudio_JParticle::TCreateObject(dPa_control_c::getEmitterManager(), mSystem); + JUT_ASSERT(0x5c3, mParticle != 0); + mMessage = new JStudio_JMessage::TCreateObject(mMesgControl); + JUT_ASSERT(0x5c6, mMessage != 0); + mFactory = new JStudio::TFactory(); + JUT_ASSERT(0x5c9, mFactory != 0); + + // This gets compiled to a double literal, but the lack of precision indicates it was written as a float literal. + mControl->mSecondPerFrame = 1/30.0f; + mControl->setFactory(mFactory); + mFactory->appendCreateObject(mStage); + mFactory->appendCreateObject(mAudio); + mFactory->appendCreateObject(mParticle); mSystem->setObject(&mDemoObj); - // mFactory->appendCreateObj(mMessage); + mFactory->appendCreateObject(mMessage); mMode = 0; } /* 8006ADA0-8006AEFC .text __dt__15dDemo_manager_cFv */ dDemo_manager_c::~dDemo_manager_c() { - /* Nonmatching */ + remove(); + delete mFactory; + delete mMessage; + delete mParticle; + delete mAudio; + delete mStage; + delete mControl; + delete mSystem; + delete mMesgControl; } -/* 8006AEFC-8006AF5C .text __dt__14dMesg_tControlFv */ -// dMesg_tControl::~dMesg_tControl() { -// /* Nonmatching */ -// } - /* 8006AF5C-8006AFBC .text __dt__14dDemo_system_cFv */ dDemo_system_c::~dDemo_system_c() {} /* 8006AFBC-8006B0D4 .text create__15dDemo_manager_cFPCUcP4cXyzf */ -void dDemo_manager_c::create(const u8*, cXyz*, f32) { - /* Nonmatching */ +bool dDemo_manager_c::create(const u8* r29, cXyz* r30, f32 f31) { + JStudio::TParse sp0C(mControl); + const void* sp08 = r29; + if (!sp0C.parse_next(&sp08, 0)) { + // "Demo data loading error!!\n" + OSReport_Error("デモデータ読み込みエラー!!\n"); + return false; + } + mControl->forward(0); + if (r30 == NULL) { + mControl->transform_enable(false); + } else { + mControl->transform_enable(true); + mControl->transform_setOrigin(*r30, f31); + } + mFrame = 0; + mFrameNoMsg = 0; + mCurFile = (char*)r29; + mMode = 1; + return true; +} + +static void dummy() { + // "Demo data reloading error!!\n" + OSReport_Error("デモデータ再読み込みエラー!!\n"); } /* 8006B0D4-8006B12C .text remove__15dDemo_manager_cFv */ void dDemo_manager_c::remove() { - /* Nonmatching */ + mControl->destroyObject_all(); + mDemoObj.remove(); + mCurFile = NULL; + mMode = 0; } /* 8006B12C-8006B1B4 .text update__15dDemo_manager_cFv */ -void dDemo_manager_c::update() { - /* Nonmatching */ +bool dDemo_manager_c::update() { + if (mCurFile == NULL) { + return false; + } + if (mControl->forward(1)) { + mFrame++; + if (!mControl->isSuspended()) { + mFrameNoMsg++; + } + } else { + mMode = 2; + } + return true; }