diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-03-04 18:28:09 -0500 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-03-04 18:28:09 -0500 |
| commit | cddc3efdcd2d199732caa275584e0ef714fe41f7 (patch) | |
| tree | 06d0bbb005673ee826678f546bad8c7422c461d2 /src/JSystem/JStudio | |
| parent | 47f60f27333873609a15e5e60cf112da4d0a1559 (diff) | |
Started copying JStudio progress from pikmin2
Diffstat (limited to 'src/JSystem/JStudio')
4 files changed, 284 insertions, 67 deletions
diff --git a/src/JSystem/JStudio/JStudio_JMessage/control.cpp b/src/JSystem/JStudio/JStudio_JMessage/control.cpp index 12d7277c..eab317f3 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 507a475c..0bd3c8bc 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 9df80cf6..a5cae225 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 { -/* 802797A0-80279800 .text __dt__Q217JStudio_JParticle13TCreateObjectFv */ -JStudio_JParticle::TCreateObject::~TCreateObject() { - /* Nonmatching */ +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 */ +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 4c09c4c1..1f66448e 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; + } + + if (check) { + mAdaptor->mEmitterManager->forceDeleteEmitter(emitter); + mAdaptor->mEmitter = NULL; + mAdaptor->_18C = 0; + mAdaptor->_190 = 0; + mAdaptor->_194 = 0; + return; + } + + 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<const JStudio::TControl*>(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<s16>(65536.0 * (pos[1].x / 360.0), 65536.0 * (pos[1].y / 360.0), 65536.0 * (pos[1].z / 360.0))); + JGeometry::TVec3<f32> scaleVec(((JGeometry::TVec3<f32>*)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); } - -/* 8027A2B8-8027A318 .text __dt__Q317JStudio_JParticle17TAdaptor_particle20TVVOOn_END_FADE_OUT_Fv */ -JStudio_JParticle::TAdaptor_particle::TVVOOn_END_FADE_OUT_::~TVVOOn_END_FADE_OUT_() { - /* Nonmatching */ -} - -/* 8027A318-8027A378 .text __dt__Q317JStudio_JParticle17TAdaptor_particle21TVVOOn_BEGIN_FADE_IN_Fv */ -JStudio_JParticle::TAdaptor_particle::TVVOOn_BEGIN_FADE_IN_::~TVVOOn_BEGIN_FADE_IN_() { - /* Nonmatching */ -} - |
