From 36d89c7bbf78fc254f4ec8ba187efad7d7e84981 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Thu, 26 Mar 2026 21:56:04 -0400 Subject: [PATCH] object-particle debug almost matching (#3136) --- config/ShieldD/symbols.txt | 2 +- .../JStudio/JStudio_JParticle/control.h | 103 +---- .../JStudio_JParticle/object-particle.h | 96 +++++ .../src/JStudio/JStudio_JParticle/control.cpp | 5 +- .../JStudio_JParticle/object-particle.cpp | 393 ++++++++++++------ 5 files changed, 365 insertions(+), 234 deletions(-) diff --git a/config/ShieldD/symbols.txt b/config/ShieldD/symbols.txt index c894bc2a0f..40ee1e8b06 100644 --- a/config/ShieldD/symbols.txt +++ b/config/ShieldD/symbols.txt @@ -64708,7 +64708,7 @@ sBusTransactionMax__14J3DUMemRequest = .sbss:0x8074CBA8; // type:object size:0x4 soOutput_none___Q27JStudio14TVariableValue = .sbss:0x8074CBB0; // type:object size:0x4 scope:global hash:0x0D4DD37E dhash:0xBE028BCF lbl_8074CBB8 = .sbss:0x8074CBB8; // type:object size:0x1 data:byte hash:0xD1337E25 dhash:0xE17C2A90 sInstance__38JASGlobalInstance<17JAUSoundNameTable> = .sbss:0x8074CBBC; // type:object size:0x4 scope:global data:4byte hash:0xC9602A2E dhash:0x8CFDFF83 -lbl_8074CBC0 = .sbss:0x8074CBC0; // type:object size:0x1 data:byte hash:0xD7A40583 dhash:0x59B8D7B7 +@GUARD@adaptor_do_prepare__Q217JStudio_JParticle17TAdaptor_particleFv@aoData = .sbss:0x8074CBC0; // type:object size:0x1 data:byte hash:0xD7A40583 dhash:0x59B8D7B7 oColor_default_frame___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBC8; // type:object size:0x4 scope:global hash:0x21F3055A dhash:0xF4CA98D4 oColor_default_background___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBCC; // type:object size:0x4 scope:global hash:0x7BF46BA9 dhash:0x05043C07 oColor_default_foreground___Q218JStudioToolLibrary15TScroll_drawBar = .sbss:0x8074CBD0; // type:object size:0x4 scope:global hash:0xE3363F1C dhash:0xF78E1792 diff --git a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h index 4dd6433d08..044b865f1b 100644 --- a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h +++ b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/control.h @@ -27,7 +27,7 @@ struct TCreateObject : public JStudio::TCreateObject { createObject_JPA_PARTICLE_(JStudio::stb::data::TParse_TBlock_object const&, JStudio_JParticle::TCreateObject*); - const JStage::TSystem* get_pJSGSystem_() { return pJSGSystem_; } + const JStage::TSystem* get_pJSGSystem_() const { return pJSGSystem_; } bool isPermit_onExit_notEnd() { return mPermit_onExit_notEnd; } /* 0x0C */ JPAEmitterManager* pJPAEmitterManager_; @@ -35,107 +35,6 @@ struct TCreateObject : public JStudio::TCreateObject { /* 0x14 */ bool mPermit_onExit_notEnd; }; -struct TAdaptor_particle : public JStudio::TAdaptor_particle { - typedef JStudio::TObject_particle ObjectType; - - struct TJPACallback_emitter_ : public JPAEmitterCallBack { - TJPACallback_emitter_(TAdaptor_particle* param_1) { - pThis_ = param_1; - pOld = NULL; - JUT_ASSERT(113, pThis_!=NULL); - } - virtual void execute(JPABaseEmitter*); - virtual void executeAfter(JPABaseEmitter*); - virtual void draw(JPABaseEmitter*); - virtual void drawAfter(JPABaseEmitter*); - - JPAEmitterCallBack* getOld() { return pOld; } - void setOld(JPAEmitterCallBack* cb) { pOld = cb; } - - /* 0x4 */ TAdaptor_particle* pThis_; - /* 0x8 */ JPAEmitterCallBack* pOld; - }; - - struct TJPAEmitter_stopDrawParticle_ { - TJPAEmitter_stopDrawParticle_(JPABaseEmitter* emitter) : pJPAEmitter_(emitter) {} - ~TJPAEmitter_stopDrawParticle_() { - if (pJPAEmitter_ != NULL) { - pJPAEmitter_->stopDrawParticle(); - } - } - void set(JPABaseEmitter* emitter) { pJPAEmitter_ = emitter; } - /* 0x0 */ JPABaseEmitter* pJPAEmitter_; - }; - - TAdaptor_particle(JStudio_JParticle::TCreateObject*); - void beginParticle_fadeIn_(); - void endParticle_fadeOut_(u32); - - virtual ~TAdaptor_particle(); - virtual void adaptor_do_prepare(); - virtual void adaptor_do_end(); - virtual void adaptor_do_update(u32); - virtual void adaptor_do_PARTICLE(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_BEGIN(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_BEGIN_FADE_IN(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_END(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_END_FADE_OUT(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData, void const*, - u32); - virtual void adaptor_do_REPEAT(JStudio::data::TEOperationData, void const*, u32); - virtual void adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData, void const*, - u32); - - static bool state_isFade_(u8 param_1) { - return param_1 == 1 || param_1 == 3; - } - - bool state_isFade_() { - return state_isFade_(field_0x1b8); - } - - void beginParticle_fadeIn_(u32 param_1) { - field_0x1c8 = param_1; - beginParticle_fadeIn_(); - } - - void beginParticle_() { - beginParticle_fadeIn_(0); - } - - void endParticle_() { - if (pJPAEmitter_ != NULL) { - pJPAEmitter_->becomeInvalidEmitter(); - } - } - - void set_bPermit_onExit_notEnd_(bool param_1) { field_0x1b4 = param_1; } - - /* 0x1A0 */ TCreateObject* pCreateObject_; - /* 0x1A4 */ JPABaseEmitter* pJPAEmitter_; - /* 0x1A8 */ TJPACallback_emitter_ field_0x1a8; - /* 0x1B4 */ u8 field_0x1b4; - /* 0x1B5 */ u8 field_0x1b5; - /* 0x1B6 */ u8 field_0x1b6; - /* 0x1B7 */ u8 field_0x1b7; - /* 0x1B8 */ u8 field_0x1b8; - /* 0x1BC */ u32 field_0x1bc; - /* 0x1C0 */ u32 u32FadeTime_end; - /* 0x1C4 */ u32 field_0x1c4; - /* 0x1C8 */ u32 field_0x1c8; - /* 0x1CC */ u32 field_0x1cc; - /* 0x1D0 */ JStage::TObject* field_0x1d0; - /* 0x1D4 */ u32 field_0x1d4; - /* 0x1D8 */ u8 field_0x1d8; -}; - }; // namespace JStudio_JParticle #endif /* JSTUDIO_JPARTICLE_CONTROL_H */ diff --git a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h index c887a183ee..3dba0e0a31 100644 --- a/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h +++ b/libs/JSystem/include/JSystem/JStudio/JStudio_JParticle/object-particle.h @@ -3,4 +3,100 @@ #include "JSystem/JStudio/JStudio_JParticle/control.h" +namespace JStudio_JParticle { + +struct TAdaptor_particle : public JStudio::TAdaptor_particle { + typedef JStudio::TObject_particle ObjectType; + + struct TJPACallback_emitter_ : public JPAEmitterCallBack { + TJPACallback_emitter_(TAdaptor_particle* param_1) { + pThis_ = param_1; + pOld = NULL; + JUT_ASSERT(113, pThis_!=NULL); + } + virtual void execute(JPABaseEmitter*); + virtual void executeAfter(JPABaseEmitter*); + virtual void draw(JPABaseEmitter*); + virtual void drawAfter(JPABaseEmitter*); + + JPAEmitterCallBack* getOld() const { return pOld; } + void setOld(JPAEmitterCallBack* cb) { pOld = cb; } + + /* 0x4 */ TAdaptor_particle* pThis_; + /* 0x8 */ JPAEmitterCallBack* pOld; + }; + + TAdaptor_particle(JStudio_JParticle::TCreateObject*); + void beginParticle_fadeIn_(); + void endParticle_fadeOut_(u32); + + virtual ~TAdaptor_particle(); + virtual void adaptor_do_prepare(); + virtual void adaptor_do_end(); + virtual void adaptor_do_update(u32); + virtual void adaptor_do_PARTICLE(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_BEGIN(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_BEGIN_FADE_IN(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_END(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_END_FADE_OUT(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData, void const*, + u32); + virtual void adaptor_do_REPEAT(JStudio::data::TEOperationData, void const*, u32); + virtual void adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData, void const*, + u32); + + static const char* toString_state_(int param_1); + + static bool state_isFade_(u8 param_1) { + return param_1 == 1 || param_1 == 3; + } + + bool state_isFade_() const { + return state_isFade_(field_0x1b8); + } + + void beginParticle_fadeIn_(u32 param_1) { + field_0x1c8 = param_1; + beginParticle_fadeIn_(); + } + + void beginParticle_() { + beginParticle_fadeIn_(0); + } + + void endParticle_() { + if (pJPAEmitter_ != NULL) { + pJPAEmitter_->becomeInvalidEmitter(); + } + } + + void set_bPermit_onExit_notEnd_(bool param_1) { field_0x1b4 = param_1; } + + /* 0x1A0 */ TCreateObject* pCreateObject_; + /* 0x1A4 */ JPABaseEmitter* pJPAEmitter_; + /* 0x1A8 */ TJPACallback_emitter_ field_0x1a8; + /* 0x1B4 */ u8 field_0x1b4; + /* 0x1B5 */ bool field_0x1b5; + /* 0x1B6 */ bool field_0x1b6; + /* 0x1B7 */ u8 field_0x1b7; + /* 0x1B8 */ u8 field_0x1b8; + /* 0x1BC */ u32 field_0x1bc; + /* 0x1C0 */ u32 u32FadeTime_end_; + /* 0x1C4 */ u32 u32FadeTime_current_; + /* 0x1C8 */ u32 field_0x1c8; + /* 0x1CC */ u32 field_0x1cc; + /* 0x1D0 */ JStage::TObject* field_0x1d0; + /* 0x1D4 */ u32 field_0x1d4; + /* 0x1D8 */ bool field_0x1d8; +}; + +} // namespace JStudio_JParticle + #endif /* OBJECT_PARTICLE_H */ diff --git a/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp b/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp index 1f25f43f66..18f23973c6 100644 --- a/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp +++ b/libs/JSystem/src/JStudio/JStudio_JParticle/control.cpp @@ -4,9 +4,10 @@ #include "JSystem/JSystem.h" // IWYU pragma: keep -#include "JSystem/JStudio/JStudio_JParticle/control.h" -#include "JSystem/JParticle/JPAEmitterManager.h" #include "JSystem/JGadget/pointer.h" +#include "JSystem/JParticle/JPAEmitterManager.h" +#include "JSystem/JStudio/JStudio_JParticle/control.h" +#include "JSystem/JStudio/JStudio_JParticle/object-particle.h" JStudio_JParticle::TCreateObject::~TCreateObject() {} diff --git a/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp b/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp index 0346ccd812..dfac0bf441 100644 --- a/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp +++ b/libs/JSystem/src/JStudio/JStudio_JParticle/object-particle.cpp @@ -7,8 +7,36 @@ #include "JSystem/JStudio/JStudio_JParticle/object-particle.h" #include "JSystem/JStudio/JStudio_JStage/control.h" -JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( - JStudio_JParticle::TCreateObject* param_1) : +namespace JStudio_JParticle { +namespace { + +struct TJPAEmitter_stopDrawParticle_ { + TJPAEmitter_stopDrawParticle_(JPABaseEmitter* emitter) : pJPAEmitter_(emitter) {} + ~TJPAEmitter_stopDrawParticle_() { + if (pJPAEmitter_ != NULL) { + pJPAEmitter_->stopDrawParticle(); + } + } + void set(JPABaseEmitter* emitter) { pJPAEmitter_ = emitter; } + /* 0x0 */ JPABaseEmitter* pJPAEmitter_; +}; + +class TToString_u32ID_ { +public: + TToString_u32ID_() {} + + const char* operator()(u32 param_1) { + snprintf(buf, sizeof(buf), "0x%08x", param_1); + return buf; + } + +private: + char buf[11]; +}; + +} // anonymous namespace + +TAdaptor_particle::TAdaptor_particle(TCreateObject* param_1) : pCreateObject_(param_1), pJPAEmitter_(NULL), field_0x1a8(this) { @@ -18,8 +46,8 @@ JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( field_0x1b7 = 0; field_0x1b8 = 0; field_0x1bc = -1; - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; field_0x1c8 = 0; field_0x1cc = 0; field_0x1d0 = NULL; @@ -28,7 +56,7 @@ JStudio_JParticle::TAdaptor_particle::TAdaptor_particle( JUT_ASSERT(90, pCreateObject_!=NULL); } -JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() { +TAdaptor_particle::~TAdaptor_particle() { if (pJPAEmitter_ != NULL) { if (field_0x1b6 == 0) { pCreateObject_->emitter_destroy(pJPAEmitter_); @@ -36,48 +64,65 @@ JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() { pJPAEmitter_->setEmitterCallBackPtr(field_0x1a8.getOld()); pJPAEmitter_->quitImmortalEmitter(); } else { + JGADGET_WARNMSG(116, "not permitted : not-end on exit\n demo-object : " << adaptor_getID_string()); pCreateObject_->emitter_destroy(pJPAEmitter_); } } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_prepare() { - static JStudio::TAdaptor::TSetVariableValue_immediate aoData[18] = { - JStudio::TAdaptor::TSetVariableValue_immediate(0, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(1, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(2, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(3, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(4, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(5, 0.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(6, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(7, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(8, 1.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(9, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(10, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(11, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(12, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(13, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(14, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(15, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(16, 255.0f), - JStudio::TAdaptor::TSetVariableValue_immediate(), +void TAdaptor_particle::adaptor_do_prepare() { + static TSetVariableValue_immediate aoData[18] = { + TSetVariableValue_immediate(0, 0.0f), + TSetVariableValue_immediate(1, 0.0f), + TSetVariableValue_immediate(2, 0.0f), + TSetVariableValue_immediate(3, 0.0f), + TSetVariableValue_immediate(4, 0.0f), + TSetVariableValue_immediate(5, 0.0f), + TSetVariableValue_immediate(6, 1.0f), + TSetVariableValue_immediate(7, 1.0f), + TSetVariableValue_immediate(8, 1.0f), + TSetVariableValue_immediate(9, 255.0f), + TSetVariableValue_immediate(10, 255.0f), + TSetVariableValue_immediate(11, 255.0f), + TSetVariableValue_immediate(12, 255.0f), + TSetVariableValue_immediate(13, 255.0f), + TSetVariableValue_immediate(14, 255.0f), + TSetVariableValue_immediate(15, 255.0f), + TSetVariableValue_immediate(16, 255.0f), + TSetVariableValue_immediate(), }; adaptor_setVariableValue_immediate(aoData); } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_end() { +void TAdaptor_particle::adaptor_do_end() { +#if DEBUG + if (field_0x1b8 == 0) { + JUT_ASSERT(160, pJPAEmitter_==NULL); + return; + } + + JUT_ASSERT(163, pJPAEmitter_!=NULL); + + if (!state_isFade_()) { + return; + } + + JUT_ASSERT(166, u32FadeTime_current_getControl(); - JUT_ASSERT(181, pControl != NULL); - if (u32FadeTime_end != 0 && field_0x1c4 < u32FadeTime_end) { + JUT_ASSERT(181, pControl!=NULL); + if (u32FadeTime_end_ != 0 && u32FadeTime_current_ < u32FadeTime_end_) { JUT_ASSERT(187, state_isFade_()); - JUT_ASSERT(188, pJPAEmitter_ != NULL); - field_0x1c4 += param_1; - if (field_0x1c4 >= u32FadeTime_end) { + JUT_ASSERT(188, pJPAEmitter_!=NULL); + u32FadeTime_current_ += param_1; + if (u32FadeTime_current_ >= u32FadeTime_end_) { switch (field_0x1b8) { case 1: field_0x1b8 = 2; @@ -87,9 +132,11 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(u32 param_1) { pJPAEmitter_ = NULL; field_0x1b8 = 0; break; + default: + JUT_ASSERT(203, false); } - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; } } else { JUT_ASSERT(210, !state_isFade_()); @@ -99,139 +146,206 @@ void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(u32 param_1) { } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE( +void TAdaptor_particle::adaptor_do_PARTICLE( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x19) { - JUT_ASSERT(232, uSize==4); - JUT_ASSERT(233, pContent!=NULL); - field_0x1bc = *(u32*)pContent; + switch (param_1) { + case JStudio::data::UNK_0x19: { + JUT_ASSERT(232, pContent!=NULL); + JUT_ASSERT(233, uSize==4); + u32 var_r29 = *(u32*)pContent; + field_0x1bc = var_r29; + break; + } + default: + JGADGET_WARNMSG(241, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { case JStudio::data::UNK_0x1: JUT_ASSERT(253, uSize==0); beginParticle_(); break; + default: + JGADGET_WARNMSG(259, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN_FADE_IN( +void TAdaptor_particle::adaptor_do_BEGIN_FADE_IN( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x2: + case JStudio::data::UNK_0x2: { JUT_ASSERT(272, pContent!=NULL); JUT_ASSERT(273, uSize==4); - beginParticle_fadeIn_(*(f32*)pContent); + u32 var_r29 = *(f32*)pContent; + beginParticle_fadeIn_(var_r29); break; } + default: + JGADGET_WARNMSG(282, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_END(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_END(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x1) { + switch (param_1) { + case JStudio::data::UNK_0x1: JUT_ASSERT(294, uSize==0); endParticle_(); - } -} - -void JStudio_JParticle::TAdaptor_particle::adaptor_do_END_FADE_OUT( - JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - switch (param_1) { - case JStudio::data::UNK_0x2: - JUT_ASSERT(336, pContent!=NULL); - JUT_ASSERT(337, uSize==4); - endParticle_fadeOut_(*(f32*)pContent); break; + default: + JGADGET_WARNMSG(300, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT( +void TAdaptor_particle::adaptor_do_END_FADE_OUT( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x18: + case JStudio::data::UNK_0x2: { JUT_ASSERT(313, pContent!=NULL); JUT_ASSERT(314, uSize==4); + u32 var_r29 = *(f32*)pContent; + endParticle_fadeOut_(var_r29); + break; + } + default: + JGADGET_WARNMSG(323, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } +} + +void TAdaptor_particle::adaptor_do_PARENT( + JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { + switch (param_1) { + case JStudio::data::UNK_0x18: { + JUT_ASSERT(336, pContent!=NULL); + JUT_ASSERT(337, uSize>0); + + const char* szID = (const char*)pContent; + JGADGET_ASSERTWARN(339, szID[uSize-1]=='\0'); + field_0x1d0 = NULL; const JStage::TSystem* pJSGSystem = pCreateObject_->get_pJSGSystem_(); JUT_ASSERT(345, pJSGSystem!=NULL); JStage::TObject* pJSGObject; - if (pJSGSystem->JSGFindObject(&pJSGObject, (const char*)pContent, JStage::OBJECT_UNDEFINED) == 0) { - JUT_ASSERT(354, pJSGObject!=NULL); - field_0x1d0 = pJSGObject; + if (pJSGSystem->JSGFindObject(&pJSGObject, szID, JStage::OBJECT_UNDEFINED) != 0) { + JGADGET_WARNMSG(351, "object not found as parent : " << szID << "\n demo-object : " << adaptor_getID_string()); + break; } + + JUT_ASSERT(354, pJSGObject!=NULL); + field_0x1d0 = pJSGObject; break; } + default: + JGADGET_WARNMSG(361, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); + } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE( +void TAdaptor_particle::adaptor_do_PARENT_NODE( JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { switch (param_1) { - case JStudio::data::UNK_0x18: - if (field_0x1d0 != NULL) { - JUT_ASSERT(380, pContent!=NULL); - JUT_ASSERT(381, uSize==4); - field_0x1d4 = field_0x1d0->JSGFindNodeID((const char*)pContent); - if (field_0x1d4 == -1) { - return; - } + case JStudio::data::UNK_0x18: { + if (field_0x1d0 == NULL) { + JGADGET_WARNMSG(377, "object not specified as parent\n demo-object : " << adaptor_getID_string()); + break; } - break; + JUT_ASSERT(380, pContent!=NULL); + JUT_ASSERT(381, uSize>0); + const char* szID = (const char*)pContent; + JGADGET_ASSERTWARN(383, szID[uSize-1]=='\0'); + field_0x1d4 = field_0x1d0->JSGFindNodeID(szID); + if (field_0x1d4 != -1) { + return; + } else { + JGADGET_WARNMSG(388, "node not found about parent : " << szID << "\n demo-object : " << adaptor_getID_string()); + return; + } + } case JStudio::data::UNK_0x19: - JUT_ASSERT(397, uSize==4); - JUT_ASSERT(396, pContent!=NULL); + JUT_ASSERT(396, uSize==4); + JUT_ASSERT(397, pContent!=NULL); field_0x1d4 = *(u32*)pContent; break; + default: + JGADGET_WARNMSG(404, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1, +const char* TAdaptor_particle::toString_state_(int param_1) { + static const char* const asz[] = {"none", "begin", "stable", "end"}; + return JGadget::toStringFromIndex(param_1, asz, ARRAY_SIZE(asz), "(undefined)"); +} + +void TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(417, uSize==4); JUT_ASSERT(418, pContent!=NULL); - field_0x1d8 = *(u32*)pContent ? 1 : 0; + u32 var_r29 = *(u32*)pContent; + field_0x1d8 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(426, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(439, uSize==4); - JUT_ASSERT(439, pContent!=NULL); - field_0x1cc = *(u32*)pContent; + JUT_ASSERT(440, pContent!=NULL); + u32 var_r29 = *(u32*)pContent; + field_0x1cc = var_r29; + break; + } + default: + JGADGET_WARNMSG(447, "unknown data-type : " << param_1); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { + switch (param_1) { + case JStudio::data::UNK_0x2: { JUT_ASSERT(460, uSize==4); JUT_ASSERT(461, pContent!=NULL); - field_0x1b5 = *(u32*)pContent ? 1 : 0; + u32 var_r29 = *(u32*)pContent; + field_0x1b5 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(469, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void JStudio_JParticle::TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData param_1, +void TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) { - if (param_1 == JStudio::data::UNK_0x2) { - JUT_ASSERT(460, uSize==4); - JUT_ASSERT(461, pContent!=NULL); - field_0x1b6 = *(u32*)pContent ? 1 : 0; + switch (param_1) { + case JStudio::data::UNK_0x2: { + JUT_ASSERT(482, uSize==4); + JUT_ASSERT(483, pContent!=NULL); + u32 var_r29 = *(u32*)pContent; + field_0x1b6 = var_r29 != 0; + break; + } + default: + JGADGET_WARNMSG(491, "unknown data-type : " << param_1 << "\n demo-object : " << adaptor_getID_string()); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmitter* pJPAEmitter) { JUT_ASSERT(518, pJPAEmitter==pThis_->pJPAEmitter_); if (pJPAEmitter->isEnableDeleteEmitter()) { pThis_->pCreateObject_->emitter_destroy(pJPAEmitter); pThis_->pJPAEmitter_ = NULL; pThis_->field_0x1b8 = 0; - pThis_->u32FadeTime_end = 0; - pThis_->field_0x1c4 = 0; + pThis_->u32FadeTime_end_ = 0; + pThis_->u32FadeTime_current_ = 0; return; } const JStudio::TObject* pObject = pThis_->adaptor_getObject(); @@ -258,34 +372,45 @@ JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmit break; case 1: break; + default: + JUT_ASSERT(566, false); } pJPAEmitter->setGlobalTranslation(pVVar9->translation); - int rotx = 65536.0 * (pVVar9->rotation.x / 360.0); - int roty = 65536.0 * (pVVar9->rotation.y / 360.0); - int rotz = 65536.0 * (pVVar9->rotation.z / 360.0); - pJPAEmitter->setGlobalRotation(JGeometry::TVec3(rotx, roty, rotz)); + pJPAEmitter->setGlobalRotation(JGeometry::TVec3( + 65536.0 * (pVVar9->rotation.x / 360.0), + 65536.0 * (pVVar9->rotation.y / 360.0), + 65536.0 * (pVVar9->rotation.z / 360.0) + )); pJPAEmitter->setGlobalScale(pVVar9->scaling); } else { Mtx afStack_1f0; if (JStudio_JStage::transform_toGlobalFromLocal(afStack_1f0, VStack_19c, pThis_->field_0x1d0, pThis_->field_0x1d4) == 0) { + JGADGET_WARNMSG(583, "can\'t transform about parent\n demo-object : " << pThis_->adaptor_getID_string()); return; } pJPAEmitter->setGlobalSRTMatrix(afStack_1f0); } + f64 alpha = 1.0; - u32 u32FadeTime_end = pThis_->u32FadeTime_end; - f64 dVar16 = u32FadeTime_end; - f64 dVar15 = pThis_->field_0x1c4; - switch(pThis_->field_0x1b8) { + u32 u32FadeTime_end = pThis_->u32FadeTime_end_; + u32 u32FadeTime_current = pThis_->u32FadeTime_current_; + f64 var_f30 = u32FadeTime_end; + f64 var_f29 = u32FadeTime_current; + switch (pThis_->field_0x1b8) { case 1: JUT_ASSERT(606, u32FadeTime_end>0); - alpha = dVar15 / dVar16; + alpha = var_f29 / var_f30; + break; + case 2: break; case 3: JUT_ASSERT(611, u32FadeTime_end>0); - alpha = (dVar16 - dVar15) / dVar16; + alpha = (var_f30 - var_f29) / var_f30; + break; + default: + JUT_ASSERT(619, false); } u8 globalAlpha = 255; @@ -302,48 +427,53 @@ JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmit } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::executeAfter(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::executeAfter(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->executeAfter(pJPAEmitter); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::draw(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::draw(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->draw(pJPAEmitter); } } -void -JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::drawAfter(JPABaseEmitter* pJPAEmitter) { +void TAdaptor_particle::TJPACallback_emitter_::drawAfter(JPABaseEmitter* pJPAEmitter) { if (pOld != NULL) { pOld->drawAfter(pJPAEmitter); } } -void JStudio_JParticle::TAdaptor_particle::beginParticle_fadeIn_() { +void TAdaptor_particle::beginParticle_fadeIn_() { if (pJPAEmitter_ != NULL) { + JGADGET_WARNMSG(686, + "past emitter already exist\n demo-object : " << adaptor_getID_string() << + "\n begin prepare particle-ID : " << TToString_u32ID_()(field_0x1bc)); pCreateObject_->emitter_destroy(pJPAEmitter_); } JPABaseEmitter* pEmitter = pCreateObject_->emitter_create(field_0x1bc); pJPAEmitter_ = pEmitter; - if (pEmitter != NULL) { - field_0x1a8.setOld(pEmitter->getEmitterCallBackPtr()); - pEmitter->setEmitterCallBackPtr(&field_0x1a8); - pEmitter->becomeImmortalEmitter(); - field_0x1b7 = 1; - field_0x1b8 = 1; - if (field_0x1c8 == 0) { - field_0x1b8 = 2; - } - u32FadeTime_end = field_0x1c8; - field_0x1c4 = 0; + if (pEmitter == NULL) { + JGADGET_WARNMSG(696, + "can\'t create emitter : " << TToString_u32ID_()(field_0x1bc) << + "\n demo-object : " << adaptor_getID_string()); + return; } + + field_0x1a8.setOld(pEmitter->getEmitterCallBackPtr()); + pEmitter->setEmitterCallBackPtr(&field_0x1a8); + pEmitter->becomeImmortalEmitter(); + field_0x1b7 = 1; + field_0x1b8 = 1; + if (field_0x1c8 == 0) { + field_0x1b8 = 2; + } + u32FadeTime_end_ = field_0x1c8; + u32FadeTime_current_ = 0; } -void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { +void TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { if (pJPAEmitter_ == NULL) { return; } @@ -351,14 +481,15 @@ void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { pCreateObject_->emitter_destroy(pJPAEmitter_); pJPAEmitter_ = NULL; field_0x1b8 = 0; - u32FadeTime_end = 0; - field_0x1c4 = 0; + u32FadeTime_end_ = 0; + u32FadeTime_current_ = 0; return; } u8 eState_old = field_0x1b8 & 0xff; field_0x1b8 = 3; - if (field_0x1c4 == 0) { - u32FadeTime_end = param_1; + if (u32FadeTime_current_ == 0) { + JUT_ASSERT(731, !state_isFade_(eState_old)); + u32FadeTime_end_ = param_1; return; } JUT_ASSERT(735, state_isFade_(eState_old)); @@ -366,13 +497,17 @@ void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) { switch(eState_old) { case 1: - u32Denominator = field_0x1c4; + u32Denominator = u32FadeTime_current_; break; case 3: - u32Denominator = u32FadeTime_end - field_0x1c4; + u32Denominator = u32FadeTime_end_ - u32FadeTime_current_; break; + default: + JUT_ASSERT(791, false); } JUT_ASSERT(793, u32Denominator!=0); - u32FadeTime_end = ((f64)param_1 * (f64)u32FadeTime_end) / u32Denominator; - field_0x1c4 = u32FadeTime_end - param_1; + u32FadeTime_end_ = ((f64)param_1 * (f64)u32FadeTime_end_) / u32Denominator; + u32FadeTime_current_ = u32FadeTime_end_ - param_1; } + +} // namespace JStudio_JParticle