From cddc3efdcd2d199732caa275584e0ef714fe41f7 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Mon, 4 Mar 2024 18:28:09 -0500 Subject: [PATCH] Started copying JStudio progress from pikmin2 --- configure.py | 4 +- include/JSystem/JMessage/control.h | 44 ++++ include/JSystem/JMessage/processor.h | 195 ++++++++++++++++ include/JSystem/JParticle/JPAEmitter.h | 4 +- .../JSystem/JStudio/JStudio/jstudio-control.h | 37 +++- .../JSystem/JStudio/JStudio/jstudio-object.h | 46 +++- .../JStudio/JStudio_JMessage/control.h | 34 +++ .../JStudio/JStudio_JMessage/object-message.h | 6 + .../JStudio/JStudio_JParticle/control.h | 67 ++++++ .../JStudio_JParticle/object-particle.h | 6 + src/JSystem/JMessage/processor.cpp | 2 +- .../JStudio/JStudio_JMessage/control.cpp | 67 +++++- .../JStudio_JMessage/object-message.cpp | 20 +- .../JStudio/JStudio_JParticle/control.cpp | 52 ++++- .../JStudio_JParticle/object-particle.cpp | 208 ++++++++++++++---- src/d/actor/d_a_obj_pbka.cpp | 12 +- 16 files changed, 715 insertions(+), 89 deletions(-) create mode 100644 include/JSystem/JMessage/control.h create mode 100644 include/JSystem/JMessage/processor.h create mode 100644 include/JSystem/JStudio/JStudio_JMessage/control.h create mode 100644 include/JSystem/JStudio/JStudio_JMessage/object-message.h create mode 100644 include/JSystem/JStudio/JStudio_JParticle/control.h create mode 100644 include/JSystem/JStudio/JStudio_JParticle/object-particle.h diff --git a/configure.py b/configure.py index eacb905f0..2fe49cfab 100644 --- a/configure.py +++ b/configure.py @@ -635,14 +635,14 @@ config.libs = [ JSystemLib( "JStudio_JParticle", [ - Object(NonMatching, "JSystem/JStudio/JStudio_JParticle/control.cpp"), + Object(Matching, "JSystem/JStudio/JStudio_JParticle/control.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio_JParticle/object-particle.cpp"), ], ), JSystemLib( "JStudio_JMessage", [ - Object(NonMatching, "JSystem/JStudio/JStudio_JMessage/control.cpp"), + Object(Matching, "JSystem/JStudio/JStudio_JMessage/control.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio_JMessage/object-message.cpp"), ], ), diff --git a/include/JSystem/JMessage/control.h b/include/JSystem/JMessage/control.h new file mode 100644 index 000000000..e88f37f45 --- /dev/null +++ b/include/JSystem/JMessage/control.h @@ -0,0 +1,44 @@ +#ifndef JMESSAGE_CONTROL_H +#define JMESSAGE_CONTROL_H + +#include "JSystem/JMessage/processor.h" +#include "dolphin/types.h" + +namespace JMessage { +struct TControl { + TControl(); + virtual ~TControl(); + + void reset(); + int update(); + void render(); + int setMessageCode(u16, u16); + int setMessageID(u32, u32, bool*); + + bool isReady_update_() const { return pMessageText_begin_ != 0 && pSequenceProcessor_ != NULL; } + bool isReady_render_() const { return field_0x20 != 0 && pRenderingProcessor_ != NULL; } + + TProcessor* getProcessor() const { + return pSequenceProcessor_ != NULL ? (TProcessor*)pSequenceProcessor_ : + (TProcessor*)pRenderingProcessor_; + } + + const char* getMessageText_begin() const { return pMessageText_begin_; } + void* getMessageEntry() const { return pEntry_; } + void setSequenceProcessor(TSequenceProcessor* processor) { pSequenceProcessor_ = processor; } + void setRenderingProcessor(TRenderingProcessor* processor) { pRenderingProcessor_ = processor; } + + /* 0x04 */ TSequenceProcessor* pSequenceProcessor_; + /* 0x08 */ TRenderingProcessor* pRenderingProcessor_; + /* 0x0C */ u16 messageCode_; + /* 0x0E */ u16 field_0xe; + /* 0x10 */ const TResource* pResourceCache_; + /* 0x14 */ void* pEntry_; + /* 0x18 */ const char* pMessageText_begin_; + /* 0x1C */ const char* pszText_update_current_; + /* 0x20 */ const char* field_0x20; + /* 0x24 */ TProcessor::TStack_ oStack_renderingProcessor_; +}; +}; // namespace JMessage + +#endif /* JMESSAGE_CONTROL_H */ diff --git a/include/JSystem/JMessage/processor.h b/include/JSystem/JMessage/processor.h new file mode 100644 index 000000000..0c4e78c9d --- /dev/null +++ b/include/JSystem/JMessage/processor.h @@ -0,0 +1,195 @@ +#ifndef JMESSAGE_PROCESSOR_H +#define JMESSAGE_PROCESSOR_H + +#include "JSystem/JMessage/resource.h" +#include "dolphin/types.h" + +namespace JMessage { + +struct TReference; +struct TControl; +struct TResource; + +struct TProcessor { + typedef bool (*OnCharacterEndCallBack)(TProcessor*); + typedef void (*OnSelectBeginCallBack)(TProcessor*); + typedef const char* (*ProcessOnSelectCallBack)(TProcessor*); + + struct TStack_ { + TStack_() { clear(); } + + TStack_(const TStack_& other) + { + mSize = other.mSize; + for (int i = 0; i < mSize; i++) { + mStack[i] = mStack[i]; + } + } + + inline bool empty() const { return mSize == 0; } + inline bool isPushable() const { return mSize < 4; } + inline void clear() { mSize = 0; } + + inline u32 getMaxSize() const { return 4; } + inline u32 getSize() const { return mSize; } + inline const char* getTop() const { return mStack[mSize - 1]; } + + inline void push(const char* str) + { + mStack[mSize] = str; + mSize++; + } + + inline void pop() { mSize--; } + + u32 mSize; // _00 + const char* mStack[4]; // _04 + }; + + struct TProcess { + struct TProcessData { + ProcessOnSelectCallBack mSelectCallback; // _00 + const char* mBase; // _04 + const void* mOffset; // _08 + u32 mRest; // _0C + }; + + TProcess() { reset_normal(); } + + void reset_normal() { mEndCallback = process_onCharacterEnd_normal_; } + void reset_select() { mEndCallback = process_onCharacterEnd_select_; } + + OnCharacterEndCallBack mEndCallback; // _00 + TProcessData mData; // _04 + }; + + virtual ~TProcessor(); // _08 + virtual void do_reset(); // _0C + virtual void do_character(int); // _10 + virtual bool do_tag(u32, const void*, u32); // _14 + virtual bool do_systemTagCode(u16, const void*, u32); // _18 + virtual void do_select_begin(u32); // _1C + virtual void do_select_end(); // _20 + virtual void do_select_separate(); // _24 + virtual void do_reset_(const char*) = 0; // _28 + virtual bool do_setBegin_isReady_() const; // _2C + virtual void do_begin_(const void*, const char*) = 0; // _30 + virtual void do_end_() = 0; // _34 + virtual bool do_tag_(u32, const void*, u32) = 0; // _38 + virtual void do_systemTagCode_(u16, const void*, u32) = 0; // _3C + + void setBegin_messageCode(u16, u16); + void setBegin_messageID(u32, u32, bool*); + void setBegin_messageCode(u32); // weak + TResource* getResource_groupID(u16) const; + u32 toMessageCode_messageID(u32, u32, bool*) const; + char* on_message_limited(u16) const; // weak + char* on_message(u32) const; // weak + char* getMessageText_messageCode(u32) const; // weak + static bool process_onCharacterEnd_normal_(TProcessor*); + static bool process_onCharacterEnd_select_(TProcessor*); + static const char* process_onSelect_limited_(TProcessor*); + static const char* process_onSelect_(TProcessor*); + void reset_(const char*); + + int setBegin_messageEntryText(const TResource* resource, const void* entry, const char* param_2) + { + mResourceCache = resource; + reset_(param_2); + do_begin_(entry, param_2); + return TRUE; + } + + const TResource* getResourceCache() const { return mResourceCache; } + const char* getCurrent() const { return mCurrent; } + const TReference* getReference() const { return mReference; } + + // Unused/inlined: + void pushCurrent(const char*); + const char* popCurrent(); + void on_select_begin(OnSelectBeginCallBack* p1, const char* p2, const void* p3, const char* p4, u32 p5); + void on_select_end(); + void on_select_separate(); + void on_tag_(); + void process_character_(); + + // _00 = VTBL + const TReference* mReference; // _04 + const TResource* mResourceCache; // _08 + const char* mCurrent; // _0C + TStack_ mStack; // _10 + TProcess mProcess; // _24 +}; + +struct TSequenceProcessor : public TProcessor { + typedef void OnJumpRegisterCallBack(TSequenceProcessor*); + typedef void OnBranchRegisterCallBack(TSequenceProcessor*, u32); + typedef void* ProcessOnJumpCallBack(const TSequenceProcessor*); + + TSequenceProcessor(const TReference*, TControl*); + + virtual ~TSequenceProcessor(); // _08 + virtual void do_reset_(const char*); // _28 + virtual bool do_setBegin_isReady_() const; // _2C + virtual void do_begin_(const void*, const char*); // _30 + virtual void do_end_(); // _34 + virtual bool do_tag_(u32, const void*, u32); // _38 + virtual void do_systemTagCode_(u16, const void*, u32); // _3C + virtual void do_begin(const void*, const char*); // _40 + virtual void do_end(); // _44 + virtual bool do_isReady(); // _48 + virtual bool do_jump_isReady(); // _4C + virtual void do_jump(const void*, const char*); // _50 + virtual void do_branch_query(u16); // _54 + virtual int do_branch_queryResult(); // _58 + virtual void do_branch(const void*, const char*); // _5C + + char* process(const char*); + bool on_isReady(); + void on_jump_isReady(); + void on_jump(const void*, const char*); + void on_branch_queryResult(); + void on_branch(const void*, const char*); + void process_onJump_limited_(const TSequenceProcessor*); + static void* process_onJump_(const TSequenceProcessor*); + void process_onBranch_limited_(const TSequenceProcessor*, u32); + void process_onBranch_(const TSequenceProcessor*, u32); + + // Unused/inlined: + const char* toString_status(int); + int toValue_status(const char*); + void on_jump_register(OnJumpRegisterCallBack*, const void*, u32); + void on_branch_register(OnBranchRegisterCallBack*, const void*, const void*, u32); + void on_branch_query(u16); + void process_setMessageIndex_reserved_(u16); + void process_setMessageCode_(const TSequenceProcessor*, u16, u16); + + // _00 = VTBL + // _00-_38 = TProcessor + TControl* _38; // _38 + int _3C; // _3C + ProcessOnJumpCallBack* _40; // _40 - processorCallBack(void*, ulong) pointer? + u32 _44; // _44 + u32 _48; // _48 +}; + +struct TRenderingProcessor : public TProcessor { + TRenderingProcessor(const TReference*); + + virtual ~TRenderingProcessor(); // _08 + virtual void do_reset_(const char*); // _28 + virtual void do_begin_(const void*, const char*); // _30 + virtual void do_end_(); // _34 + virtual bool do_tag_(u32, const void*, u32); // _38 + virtual void do_systemTagCode_(u16, const void*, u32); // _3C + virtual void do_begin(const void*, const char*); // _40 + virtual void do_end(); // _44 + + void process(const char*); + + // _00 = VTBL + // _00-_38 = TProcessor +}; +} // namespace JMessage + +#endif /* JMESSAGE_PROCESSOR_H */ diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 453d5609a..42196ab4d 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -183,6 +183,9 @@ public: void setGlobalRTMatrix(MtxP mtx) { JPASetRMtxTVecfromMtx(mtx, mGlobalRotation, mGlobalTranslation); } + void setGlobalSRTMatrix(MtxP mtx) { + JPASetRMtxSTVecfromMtx(mtx, mGlobalRotation, mGlobalDynamicsScale, mGlobalTranslation); + } void setGlobalRotation(const JGeometry::TVec3& rot) { JPAGetXYZRotateMtx(rot.x, rot.y, rot.z, mGlobalRotation); } @@ -290,7 +293,6 @@ public: void setGlobalParticleHeightScale(f32) {} void setGlobalParticleScale(f32, f32) {} void setGlobalParticleWidthScale(f32) {} - void setGlobalSRTMatrix(MtxP) {} static JPAEmitterInfo emtrInfo; diff --git a/include/JSystem/JStudio/JStudio/jstudio-control.h b/include/JSystem/JStudio/JStudio/jstudio-control.h index f12092988..b1507ebcf 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-control.h +++ b/include/JSystem/JStudio/JStudio/jstudio-control.h @@ -30,8 +30,10 @@ struct TFactory : public stb::TFactory { class TControl : public stb::TControl { public: - struct TTransform_translation_rotation_scaling {}; struct TTransform_position {}; + struct TTransform_position_direction {}; + struct TTransform_translation_rotation {}; + struct TTransform_translation_rotation_scaling {}; TControl(); virtual ~TControl(); @@ -47,7 +49,9 @@ public: fvb_destroyObject_all(); } + bool transformOnSet_isEnabled() const { return mTransformOnSet; } void transformOnSet_enable(bool param_0) { mTransformOnSet = param_0; } + bool transformOnGet_isEnabled() const { return mTransformOnGet; } void transformOnGet_enable(bool param_0) { mTransformOnGet = param_0; } void transform_enable(bool param_0) { @@ -60,6 +64,10 @@ public: transformOnGet_setOrigin(xyz, rotY); } + f32 transformOnSet_getRotationY() const { return mTransformOnSet_RotationY; } + CMtxP transformOnSet_getMatrix() const { return mTransformOnSet_Matrix; } + CMtxP transformOnGet_getMatrix() const { return mTransformOnGet_Matrix; } + void setSecondPerFrame(f64 param_0) { mSecondPerFrame = param_0; } f64 getSecondPerFrame() const { return mSecondPerFrame; } @@ -87,6 +95,33 @@ public: } return obj->referFunctionValue(); } + + void fvb_getObjectContainer() const {} + void fvb_referControl() {} + void fvb_removeObject_all() {} + void stb_getObjectContainer() const {} + void stb_referObjectContainer() {} + void stb_removeObject(JStudio::TObject*) {} + void transformOnGet_transform(const JStudio::TControl::TTransform_position&, JStudio::TControl::TTransform_position*) const {} + void transformOnGet_transform(const JStudio::TControl::TTransform_position_direction&, JStudio::TControl::TTransform_position_direction*) const {} + void transformOnGet_transform(const JStudio::TControl::TTransform_translation_rotation&, JStudio::TControl::TTransform_translation_rotation*) const {} + void transformOnGet_transformDirection(const Vec&, Vec*) const {} + void transformOnGet_transformRotation(const Vec&, Vec*) const {} + void transformOnGet_transformTranslation(const Vec&, Vec*) const {} + void transformOnGet_transform_ifEnabled(const JStudio::TControl::TTransform_position_direction&, JStudio::TControl::TTransform_position_direction*) const {} + void transformOnGet_transform_ifEnabled(const JStudio::TControl::TTransform_translation_rotation&, JStudio::TControl::TTransform_translation_rotation*) const {} + void transformOnSet_transform(const JStudio::TControl::TTransform_position&, JStudio::TControl::TTransform_position*) const {} + void transformOnSet_transform(const JStudio::TControl::TTransform_position_direction&, JStudio::TControl::TTransform_position_direction*) const {} + void transformOnSet_transform(const JStudio::TControl::TTransform_translation_rotation&, JStudio::TControl::TTransform_translation_rotation*) const {} + void transformOnSet_transform(CMtxP, MtxP) const {} + void transformOnSet_transformDirection(const Vec&, Vec*) const {} + void transformOnSet_transformDirection_ifEnabled(const Vec&, Vec*) const {} + void transformOnSet_transformRotation(const Vec&, Vec*) const {} + void transformOnSet_transformTranslation(const Vec&, Vec*) const {} + void transformOnSet_transformTranslation_ifEnabled(const Vec&, Vec*) const {} + void transformOnSet_transform_ifEnabled(const JStudio::TControl::TTransform_position_direction&, JStudio::TControl::TTransform_position_direction*) const {} + void transformOnSet_transform_ifEnabled(const JStudio::TControl::TTransform_translation_rotation&, JStudio::TControl::TTransform_translation_rotation*) const {} + void transformOnSet_transform_ifEnabled(CMtxP, MtxP) const {} /* 0x58 */ f64 mSecondPerFrame; /* 0x60 */ fvb::TControl fvb_Control; diff --git a/include/JSystem/JStudio/JStudio/jstudio-object.h b/include/JSystem/JStudio/JStudio/jstudio-object.h index d088c58bd..c9177f248 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-object.h +++ b/include/JSystem/JStudio/JStudio/jstudio-object.h @@ -14,6 +14,7 @@ namespace data { UNK_0x3 = 0x3, UNK_0x10 = 0x10, UNK_0x12 = 0x12, + UNK_0x18 = 0x18, UNK_0x19 = 0x19, }; }; @@ -108,6 +109,7 @@ public: TAdaptor* getAdaptor() { return mpAdaptor; } TControl* getControl() { return (TControl*)stb::TObject::getControl(); } + const TControl* getControl() const { return (const TControl*)stb::TObject::getControl(); } void prepareAdaptor() { if (mpAdaptor != NULL) { @@ -133,10 +135,22 @@ public: }; struct TAdaptor { - struct TSetVariableValue_immediate { - u32 field_0x0; - f32 field_0x4; - }; + inline TAdaptor(TVariableValue* values, int count) + : pValue_(values) + , u(count) + { + } + + struct TSetVariableValue_immediate { + inline TSetVariableValue_immediate(u32 p1, f32 p2) + : _00(p1) + , _04(p2) + { + } + + u32 _00; // _00 + f32 _04; // _04 + }; typedef void (*setVarFunc)(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); virtual ~TAdaptor() = 0; virtual void adaptor_do_prepare(const JStudio::TObject*); @@ -277,6 +291,11 @@ struct TObject_light : public TObject { }; struct TAdaptor_message : public TAdaptor { + inline TAdaptor_message() + : TAdaptor(NULL, 0) + { + } + virtual ~TAdaptor_message() = 0; }; @@ -289,17 +308,22 @@ struct TObject_message : public TObject { }; struct TAdaptor_particle : public TAdaptor { + TAdaptor_particle() + : TAdaptor(mValue, ARRAY_SIZE(mValue)) + , mValue() + { + } virtual ~TAdaptor_particle() = 0; /* 0x10 */ TVariableValue mValue[20]; - static u8 const sauVariableValue_3_TRANSLATION_XYZ[12]; - static u8 const sauVariableValue_3_ROTATION_XYZ[12]; - static u8 const sauVariableValue_3_SCALING_XYZ[12]; - static u8 const sauVariableValue_3_COLOR_RGB[12]; - static u8 const sauVariableValue_4_COLOR_RGBA[16]; - static u8 const sauVariableValue_3_COLOR1_RGB[12]; - static u8 const sauVariableValue_4_COLOR1_RGBA[16]; + static u32 const sauVariableValue_3_TRANSLATION_XYZ[12]; + static u32 const sauVariableValue_3_ROTATION_XYZ[12]; + static u32 const sauVariableValue_3_SCALING_XYZ[12]; + static u32 const sauVariableValue_3_COLOR_RGB[12]; + static u32 const sauVariableValue_4_COLOR_RGBA[16]; + static u32 const sauVariableValue_3_COLOR1_RGB[12]; + static u32 const sauVariableValue_4_COLOR1_RGBA[16]; }; struct TObject_particle : public TObject { diff --git a/include/JSystem/JStudio/JStudio_JMessage/control.h b/include/JSystem/JStudio/JStudio_JMessage/control.h new file mode 100644 index 000000000..36447ffd5 --- /dev/null +++ b/include/JSystem/JStudio/JStudio_JMessage/control.h @@ -0,0 +1,34 @@ +#ifndef JSTUDIO_JMESSAGE_CONTROL_H +#define JSTUDIO_JMESSAGE_CONTROL_H + +#include "JSystem/JStudio/JStudio/jstudio-object.h" +#include "JSystem/JMessage/control.h" + +namespace JStudio_JMessage { +struct TCreateObject_base : JStudio::TCreateObject { + virtual ~TCreateObject_base() = 0; // _08 + virtual bool create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data); // _0C + virtual JMessage::TControl* find(const JStudio::stb::data::TParse_TBlock_object&) = 0; // _10 +}; +} // namespace JStudio_JMessage + +namespace JStudio_JMessage { +struct TCreateObject : public TCreateObject_base { + TCreateObject(JMessage::TControl* control) { mControl = control; } + + virtual ~TCreateObject(); // _08 + virtual JMessage::TControl* find(const JStudio::stb::data::TParse_TBlock_object&); // _10 + + JMessage::TControl* mControl; // _0C +}; + +struct TAdaptor_message : public JStudio::TAdaptor_message { + virtual ~TAdaptor_message(); // _08 + virtual void adaptor_do_MESSAGE(JStudio::data::TEOperationData, const void*, u32); // _20 + + TAdaptor_message(JMessage::TControl*); + JMessage::TControl* mControl; // _10 +}; +} // namespace JStudio_JMessage + +#endif /* JSTUDIO_JMESSAGE_CONTROL_H */ diff --git a/include/JSystem/JStudio/JStudio_JMessage/object-message.h b/include/JSystem/JStudio/JStudio_JMessage/object-message.h new file mode 100644 index 000000000..03954eded --- /dev/null +++ b/include/JSystem/JStudio/JStudio_JMessage/object-message.h @@ -0,0 +1,6 @@ +#ifndef OBJECT_MESSAGE_H +#define OBJECT_MESSAGE_H + +#include "JSystem/JStudio/JStudio_JMessage/control.h" + +#endif /* OBJECT_MESSAGE_H */ diff --git a/include/JSystem/JStudio/JStudio_JParticle/control.h b/include/JSystem/JStudio/JStudio_JParticle/control.h new file mode 100644 index 000000000..3ec040952 --- /dev/null +++ b/include/JSystem/JStudio/JStudio_JParticle/control.h @@ -0,0 +1,67 @@ +#ifndef JSTUDIO_JPARTICLE_CONTROL_H +#define JSTUDIO_JPARTICLE_CONTROL_H + +#include "JSystem/JParticle/JPAParticle.h" +#include "JSystem/JStage/JSGSystem.h" +#include "JSystem/JStudio/JStudio/jstudio-object.h" + +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; + } + + 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; +}; + +struct TAdaptor_particle : public JStudio::TAdaptor_particle { + struct TJPACallback_ : JPACallBackBase { + inline TJPACallback_(TAdaptor_particle* adaptor) + : mAdaptor(adaptor) + , mObject(NULL) + { + } + + virtual ~TJPACallback_() { } // _08 (weak) + virtual void execute(JPABaseEmitter*); // _0C + + TAdaptor_particle* mAdaptor; // _04 + const JStudio::TObject* mObject; // _08 + }; + + TAdaptor_particle(JPAEmitterManager*, const JStage::TSystem*); + void beginParticle_fadeIn_(); + void endParticle_fadeOut_(u32); + + virtual ~TAdaptor_particle(); + virtual void adaptor_do_prepare(const JStudio::TObject*); + virtual void adaptor_do_end(const JStudio::TObject*); + virtual void adaptor_do_update(const JStudio::TObject*, u32); + virtual void adaptor_do_PARTICLE(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); + + /* 0x19C */ JPAEmitterManager* mEmitterManager; + /* 0x1A0 */ JPABaseEmitter* mEmitter; + /* 0x1A4 */ TJPACallback_ mCallback; + /* 0x1B0 */ int _188; + /* 0x1B4 */ u32 _18C; + /* 0x1B8 */ u32 _190; + /* 0x1BC */ u32 _194; + /* 0x1C0 */ const JStage::TSystem* mSystem; + /* 0x1C4 */ JStage::TObject* _19C; + /* 0x1C8 */ u32 _1A0; + /* 0x1CC */ bool _1A4; +}; // Size: 0x1D0 + +}; // namespace JStudio_JParticle + +#endif /* JSTUDIO_JPARTICLE_CONTROL_H */ diff --git a/include/JSystem/JStudio/JStudio_JParticle/object-particle.h b/include/JSystem/JStudio/JStudio_JParticle/object-particle.h new file mode 100644 index 000000000..c887a183e --- /dev/null +++ b/include/JSystem/JStudio/JStudio_JParticle/object-particle.h @@ -0,0 +1,6 @@ +#ifndef OBJECT_PARTICLE_H +#define OBJECT_PARTICLE_H + +#include "JSystem/JStudio/JStudio_JParticle/control.h" + +#endif /* OBJECT_PARTICLE_H */ diff --git a/src/JSystem/JMessage/processor.cpp b/src/JSystem/JMessage/processor.cpp index 369763134..0a9a1b552 100644 --- a/src/JSystem/JMessage/processor.cpp +++ b/src/JSystem/JMessage/processor.cpp @@ -3,7 +3,7 @@ // Translation Unit: processor.cpp // -#include "processor.h" +#include "JSystem/JMessage/processor.h" #include "dolphin/types.h" diff --git a/src/JSystem/JStudio/JStudio_JMessage/control.cpp b/src/JSystem/JStudio/JStudio_JMessage/control.cpp index 12d7277c4..eab317f33 100644 --- a/src/JSystem/JStudio/JStudio_JMessage/control.cpp +++ b/src/JSystem/JStudio/JStudio_JMessage/control.cpp @@ -3,27 +3,72 @@ // Translation Unit: control.cpp // -#include "control.h" +#include "JSystem/JStudio/JStudio_JMessage/control.h" #include "dolphin/types.h" +namespace JStudio_JMessage { -/* 8027A4A8-8027A508 .text __dt__Q216JStudio_JMessage18TCreateObject_baseFv */ -JStudio_JMessage::TCreateObject_base::~TCreateObject_base() { - /* Nonmatching */ +namespace { + +// Fake inline. +// TODO: supposed to use JStudio::TObject::createFromAdaptor instead of this somehow +inline JStudio::TObject_message* message_creator(const JStudio::stb::data::TParse_TBlock_object& data, + TAdaptor_message* adaptor) +{ + JStudio::TObject_message* object = new JStudio::TObject_message(data, adaptor); + + if (!object) { + return NULL; + } + if (object->mpAdaptor) { + object->mpAdaptor->adaptor_do_prepare(object); + } + return object; } +/* 8027A3F4-8027A4A8 .text createObject_MESSAGE_JMS___Q216JStudio_JMessage21@unnamed@control_cpp@FRCQ47JStudio3stb4data20TParse_TBlock_objectPQ28JMessage8TControl */ +JStudio::TObject_message* createObject_MESSAGE_JMS_(const JStudio::stb::data::TParse_TBlock_object& data, JMessage::TControl* system) +{ + TAdaptor_message* adaptor = new TAdaptor_message(system); + if (!adaptor) { + return NULL; + } + + return message_creator(data, adaptor); +} + +} // namespace + +/* 8027A4A8-8027A508 .text __dt__Q216JStudio_JMessage18TCreateObject_baseFv */ +TCreateObject_base::~TCreateObject_base() {} + /* 8027A508-8027A5AC .text create__Q216JStudio_JMessage18TCreateObject_baseFPPQ27JStudio7TObjectRCQ47JStudio3stb4data20TParse_TBlock_object */ -void JStudio_JMessage::TCreateObject_base::create(JStudio::TObject**, const JStudio::stb::data::TParse_TBlock_object&) { - /* Nonmatching */ +bool TCreateObject_base::create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data) { + JStudio::TObject_message* (*func)(const JStudio::stb::data::TParse_TBlock_object&, JMessage::TControl*); + switch (data.get()->type) { + case 'JMSG': + func = &createObject_MESSAGE_JMS_; + break; + default: + return false; + } + + JMessage::TControl* system = find(data); + + if (!system) { + return false; + } + + *newObject = func(data, system); + return true; } /* 8027A5AC-8027A60C .text __dt__Q216JStudio_JMessage13TCreateObjectFv */ -JStudio_JMessage::TCreateObject::~TCreateObject() { - /* Nonmatching */ -} +TCreateObject::~TCreateObject() {} /* 8027A60C-8027A614 .text find__Q216JStudio_JMessage13TCreateObjectFRCQ47JStudio3stb4data20TParse_TBlock_object */ -void JStudio_JMessage::TCreateObject::find(const JStudio::stb::data::TParse_TBlock_object&) { - /* Nonmatching */ +JMessage::TControl* TCreateObject::find(const JStudio::stb::data::TParse_TBlock_object&) { + return mControl; } +} // namespace JStudio_JMessage diff --git a/src/JSystem/JStudio/JStudio_JMessage/object-message.cpp b/src/JSystem/JStudio/JStudio_JMessage/object-message.cpp index 507a475cd..0bd3c8bc6 100644 --- a/src/JSystem/JStudio/JStudio_JMessage/object-message.cpp +++ b/src/JSystem/JStudio/JStudio_JMessage/object-message.cpp @@ -3,21 +3,25 @@ // Translation Unit: object-message.cpp // -#include "object-message.h" +#include "JSystem/JStudio/JStudio_JMessage/object-message.h" #include "dolphin/types.h" /* 8027A614-8027A64C .text __ct__Q216JStudio_JMessage16TAdaptor_messageFPQ28JMessage8TControl */ -JStudio_JMessage::TAdaptor_message::TAdaptor_message(JMessage::TControl*) { - /* Nonmatching */ +JStudio_JMessage::TAdaptor_message::TAdaptor_message(JMessage::TControl* control) + : JStudio::TAdaptor_message() + , mControl(control) +{ } /* 8027A64C-8027A6AC .text __dt__Q216JStudio_JMessage16TAdaptor_messageFv */ -JStudio_JMessage::TAdaptor_message::~TAdaptor_message() { - /* Nonmatching */ -} +JStudio_JMessage::TAdaptor_message::~TAdaptor_message() {} /* 8027A6AC-8027A6EC .text adaptor_do_MESSAGE__Q216JStudio_JMessage16TAdaptor_messageFQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio_JMessage::TAdaptor_message::adaptor_do_MESSAGE(JStudio::data::TEOperationData, const void*, unsigned long) { +void JStudio_JMessage::TAdaptor_message::adaptor_do_MESSAGE(JStudio::data::TEOperationData operation, const void* param_2, u32 param_3) { /* Nonmatching */ + switch (operation) { + case JStudio::data::UNK_0x19: + mControl->setMessageCode((*(u32*)param_2) >> 0x10, (*(u32*)param_3)); + break; + } } - diff --git a/src/JSystem/JStudio/JStudio_JParticle/control.cpp b/src/JSystem/JStudio/JStudio_JParticle/control.cpp index 9df80cf67..a5cae225b 100644 --- a/src/JSystem/JStudio/JStudio_JParticle/control.cpp +++ b/src/JSystem/JStudio/JStudio_JParticle/control.cpp @@ -3,17 +3,57 @@ // Translation Unit: control.cpp // -#include "control.h" +#include "JSystem/JStudio/JStudio_JParticle/control.h" #include "dolphin/types.h" +namespace JStudio_JParticle { + +namespace { +// Fake inline. +// TODO: supposed to use JStudio::TObject::createFromAdaptor instead of this somehow +static inline JStudio::TObject_particle* create(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_particle* adaptor) +{ + JStudio::TObject_particle* object = new JStudio::TObject_particle(data, adaptor); + if (object == NULL) { + // TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created. + return NULL; + } else { + if (object->mpAdaptor != NULL) { + object->mpAdaptor->adaptor_do_prepare(object); + } + } + return object; +} + +/* 802796E4-802797A0 .text createObject_PARTICLE_JPA___Q217JStudio_JParticle21@unnamed@control_cpp@FRCQ47JStudio3stb4data20TParse_TBlock_objectP17JPAEmitterManagerPCQ26JStage7TSystem */ +JStudio::TObject_particle* createObject_PARTICLE_JPA_(const JStudio::stb::data::TParse_TBlock_object& data, JPAEmitterManager* manager, + const JStage::TSystem* system) +{ + TAdaptor_particle* adaptor = new TAdaptor_particle(manager, system); + if (adaptor == NULL) { + return NULL; + } + JStudio::TObject_particle* object = create(data, adaptor); + return object; +} +} // namespace /* 802797A0-80279800 .text __dt__Q217JStudio_JParticle13TCreateObjectFv */ -JStudio_JParticle::TCreateObject::~TCreateObject() { - /* Nonmatching */ -} +TCreateObject::~TCreateObject() {} /* 80279800-80279878 .text create__Q217JStudio_JParticle13TCreateObjectFPPQ27JStudio7TObjectRCQ47JStudio3stb4data20TParse_TBlock_object */ -void JStudio_JParticle::TCreateObject::create(JStudio::TObject**, const JStudio::stb::data::TParse_TBlock_object&) { - /* Nonmatching */ +bool TCreateObject::create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data) { + JStudio::TObject_particle* (*func)(const JStudio::stb::data::TParse_TBlock_object&, JPAEmitterManager*, const JStage::TSystem*); + switch (data.get()->type) { + case 'JPTC': { + func = &createObject_PARTICLE_JPA_; + break; + } + default: + return false; + } + *newObject = func(data, pJPAEmitterManager_, pJSGSystem_); + return true; } +} // namespace JStudio_JParticle diff --git a/src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp b/src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp index 4c09c4c11..1f66448ed 100644 --- a/src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp +++ b/src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp @@ -3,81 +3,209 @@ // Translation Unit: object-particle.cpp // -#include "object-particle.h" +#include "JSystem/JStudio/JStudio_JParticle/object-particle.h" +#include "JSystem/JParticle/JPAEmitterManager.h" +#include "JSystem/JStudio/JStudio/jstudio-math.h" #include "dolphin/types.h" /* 80279878-80279954 .text __ct__Q217JStudio_JParticle17TAdaptor_particleFP17JPAEmitterManagerPCQ26JStage7TSystem */ -JStudio_JParticle::TAdaptor_particle::TAdaptor_particle(JPAEmitterManager*, const JStage::TSystem*) { - /* Nonmatching */ -} - -/* 80279954-802799B0 .text __dt__Q317JStudio_JParticle17TAdaptor_particle13TJPACallback_Fv */ -JStudio_JParticle::TAdaptor_particle::TJPACallback_::~TJPACallback_() { - /* Nonmatching */ +JStudio_JParticle::TAdaptor_particle::TAdaptor_particle(JPAEmitterManager* emitterManager, const JStage::TSystem* system) + : mEmitterManager(emitterManager) + , mEmitter(NULL) + , mCallback(this) + , _188(-1) + , _18C(0) + , _190(0) + , _194(0) + , mSystem(system) + , _19C(NULL) + , _1A0(0xFFFFFFFF) + , _1A4(0) +{ } /* 802799B0-80279A50 .text __dt__Q217JStudio_JParticle17TAdaptor_particleFv */ JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() { - /* Nonmatching */ + if (mEmitter != NULL) { + mEmitterManager->forceDeleteEmitter(mEmitter); + } } /* 80279A50-80279BD4 .text adaptor_do_prepare__Q217JStudio_JParticle17TAdaptor_particleFPCQ27JStudio7TObject */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_prepare(const JStudio::TObject*) { +void JStudio_JParticle::TAdaptor_particle::adaptor_do_prepare(const JStudio::TObject* param_1) { /* Nonmatching */ + 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(0xFFFFFFFF, NAN) + }; + adaptor_setVariableValue_immediate(aoData); + mCallback.mObject = param_1; } /* 80279BD4-80279BD8 .text adaptor_do_end__Q217JStudio_JParticle17TAdaptor_particleFPCQ27JStudio7TObject */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_end(const JStudio::TObject*) { - /* Nonmatching */ -} +void JStudio_JParticle::TAdaptor_particle::adaptor_do_end(const JStudio::TObject*) {} /* 80279BD8-80279C2C .text adaptor_do_update__Q217JStudio_JParticle17TAdaptor_particleFPCQ27JStudio7TObjectUl */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(const JStudio::TObject*, unsigned long) { - /* Nonmatching */ +void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(const JStudio::TObject* param_1, u32 param_2) { + if (_190 == 0) { + return; + } + if (_194 >= _190) { + return; + } + _194 += param_2; + if (_194 < _190) { + return; + } + switch (_18C) { + case 2: + break; + default: + _18C = 0; + break; + } + _190 = 0; + _194 = 0; } /* 80279C2C-80279C40 .text adaptor_do_PARTICLE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE(JStudio::data::TEOperationData, const void*, unsigned long) { - /* Nonmatching */ +void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE(JStudio::data::TEOperationData operation, const void* r5, u32) { + switch (operation) { + case JStudio::data::UNK_0x19: + _188 = *(int*)r5; + break; + } } /* 80279C40-80279CA4 .text adaptor_do_PARENT__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT(JStudio::data::TEOperationData, const void*, unsigned long) { +void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT(JStudio::data::TEOperationData operation, const void* param_2, u32) { /* Nonmatching */ + switch (operation) { + case JStudio::data::UNK_0x18: + _19C = NULL; + JStage::TObject* object = NULL; + if (mSystem->JSGFindObject((const char*)param_2, JStage::TOBJ_ACTOR_UNK) == 0) { + _19C = object; + } + break; + } } /* 80279CA4-80279D24 .text adaptor_do_PARENT_NODE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, const void*, unsigned long) { - /* Nonmatching */ +void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData operation, const void* param_2, u32) { + switch (operation) { + case JStudio::data::UNK_0x18: + if (_19C != NULL) { + _1A0 = _19C->JSGFindNodeID((const char*)param_2); + if (_1A0 == 0xFFFFFFFF) { + return; + } + } + break; + case JStudio::data::UNK_0x19: + _1A0 = *(u32*)param_2; + break; + } } /* 80279D24-80279D40 .text adaptor_do_PARENT_ENABLE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, const void*, unsigned long) { - /* Nonmatching */ +void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData operation, const void* param_2, u32 param_3) { + switch (operation) { + case JStudio::data::UNK_0x2: + _1A4 = *(u32*)param_2; + break; + } } -/* 80279D40-80279E2C .text __cl__Q317JStudio_JParticle17TAdaptor_particle21TVVOOn_BEGIN_FADE_IN_CFfPQ27JStudio8TAdaptor */ -void JStudio_JParticle::TAdaptor_particle::TVVOOn_BEGIN_FADE_IN_::operator()(float, JStudio::TAdaptor*) const { - /* Nonmatching */ -} +// /* 80279D40-80279E2C .text __cl__Q317JStudio_JParticle17TAdaptor_particle21TVVOOn_BEGIN_FADE_IN_CFfPQ27JStudio8TAdaptor */ +// void JStudio_JParticle::TAdaptor_particle::TVVOOn_BEGIN_FADE_IN_::operator()(float, JStudio::TAdaptor*) const { +// /* Nonmatching */ +// } -/* 80279E2C-80279F08 .text __cl__Q317JStudio_JParticle17TAdaptor_particle20TVVOOn_END_FADE_OUT_CFfPQ27JStudio8TAdaptor */ -void JStudio_JParticle::TAdaptor_particle::TVVOOn_END_FADE_OUT_::operator()(float, JStudio::TAdaptor*) const { - /* Nonmatching */ -} +// /* 80279E2C-80279F08 .text __cl__Q317JStudio_JParticle17TAdaptor_particle20TVVOOn_END_FADE_OUT_CFfPQ27JStudio8TAdaptor */ +// void JStudio_JParticle::TAdaptor_particle::TVVOOn_END_FADE_OUT_::operator()(float, JStudio::TAdaptor*) const { +// /* Nonmatching */ +// } /* 80279F08-8027A2B8 .text execute__Q317JStudio_JParticle17TAdaptor_particle13TJPACallback_FP14JPABaseEmitter */ -void JStudio_JParticle::TAdaptor_particle::TJPACallback_::execute(JPABaseEmitter*) { +void JStudio_JParticle::TAdaptor_particle::TJPACallback_::execute(JPABaseEmitter* emitter) { /* Nonmatching */ -} + bool check = false; + if (emitter->isEnableDeleteEmitter()) { + check = true; + } -/* 8027A2B8-8027A318 .text __dt__Q317JStudio_JParticle17TAdaptor_particle20TVVOOn_END_FADE_OUT_Fv */ -JStudio_JParticle::TAdaptor_particle::TVVOOn_END_FADE_OUT_::~TVVOOn_END_FADE_OUT_() { - /* Nonmatching */ -} + if (check) { + mAdaptor->mEmitterManager->forceDeleteEmitter(emitter); + mAdaptor->mEmitter = NULL; + mAdaptor->_18C = 0; + mAdaptor->_190 = 0; + mAdaptor->_194 = 0; + return; + } -/* 8027A318-8027A378 .text __dt__Q317JStudio_JParticle17TAdaptor_particle21TVVOOn_BEGIN_FADE_IN_Fv */ -JStudio_JParticle::TAdaptor_particle::TVVOOn_BEGIN_FADE_IN_::~TVVOOn_BEGIN_FADE_IN_() { - /* Nonmatching */ -} + f64 val1 = mAdaptor->_190; // u32 stored as f64 + f64 val2 = mAdaptor->_194; // u32 stored as f64 + f64 alpha = 1.0; + switch (mAdaptor->_18C) { + case 1: + alpha = val2 / val1; + break; + case 3: + alpha = (val1 - val2) / val1; + break; + } + + const JStudio::TControl* ctrl = static_cast(mObject->getControl()); // r28 + + Vec srts[3]; // 0x64 + mAdaptor->adaptor_getVariableValue_Vec(&srts[2], sauVariableValue_3_TRANSLATION_XYZ); + mAdaptor->adaptor_getVariableValue_Vec(&srts[1], sauVariableValue_3_ROTATION_XYZ); + mAdaptor->adaptor_getVariableValue_Vec(&srts[0], sauVariableValue_3_SCALING_XYZ); + + Vec* pos; // r29 + + if (!mAdaptor->_1A4) { + if (!ctrl->transformOnGet_isEnabled()) { + pos = srts; + } else { + Vec outVec[3]; + PSMTXMultVec(ctrl->transformOnSet_getMatrix(), &srts[2], &outVec[0]); + outVec[1].x = srts[1].x; + outVec[1].y = ctrl->transformOnSet_getRotationY() + srts[1].y; + outVec[1].z = srts[1].z; + pos = outVec; + } + emitter->setGlobalTranslation(pos[0]); + + emitter->setGlobalRotation(JGeometry::TVec3(65536.0 * (pos[1].x / 360.0), 65536.0 * (pos[1].y / 360.0), 65536.0 * (pos[1].z / 360.0))); + JGeometry::TVec3 scaleVec(((JGeometry::TVec3*)pos)[2]); + emitter->setGlobalScale(scaleVec); + } else { + Mtx mtx1; + JStudio::math::getTransformation_SRxyzT(mtx1, srts[0], srts[1], srts[2]); + Mtx mtx2; + MTXConcat(NULL, mtx1, mtx2); + emitter->setGlobalSRTMatrix(mtx2); + } + + GXColor color; + mAdaptor->adaptor_getVariableValue_GXColor(&color, sauVariableValue_4_COLOR_RGBA); + emitter->setGlobalPrmColor(color.r, color.g, color.b); + + alpha *= (f64)color.a; + u8 emitAlpha = 255; + if (alpha < 255.0) { + emitAlpha = (u8)alpha; + } + + emitter->setGlobalAlpha(emitAlpha); + + mAdaptor->adaptor_getVariableValue_GXColor(&color, sauVariableValue_4_COLOR1_RGBA); + emitter->setGlobalEnvColor(color.r, color.g, color.b); +} diff --git a/src/d/actor/d_a_obj_pbka.cpp b/src/d/actor/d_a_obj_pbka.cpp index 012b88611..e8f36a9f8 100644 --- a/src/d/actor/d_a_obj_pbka.cpp +++ b/src/d/actor/d_a_obj_pbka.cpp @@ -35,14 +35,10 @@ void daObjPbka_c::CreateInit() { /* 000001CC-0000024C .text set_mtx__11daObjPbka_cFv */ void daObjPbka_c::set_mtx() { - J3DModel* model; - model = mpModel; - model->mBaseScale.x = mScale.x; - model->mBaseScale.y = mScale.y; - model->mBaseScale.z = mScale.z; - mDoMtx_trans(mDoMtx_stack_c::get(), current.pos.x, current.pos.y, current.pos.z); - mDoMtx_YrotM(mDoMtx_stack_c::get(), current.angle.y); - mDoMtx_copy(mDoMtx_stack_c::get(), mpModel->mBaseTransformMtx); + mpModel->setBaseScale(mScale); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::YrotM(current.angle.y); + mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } s32 daObjPbka_c::_create() {