Skip to content

Commit

Permalink
object-actor OK
Browse files Browse the repository at this point in the history
mostly copied from pikmin2 decomp
  • Loading branch information
LagoLunatic committed Sep 9, 2024
1 parent 643a447 commit 0bea395
Show file tree
Hide file tree
Showing 10 changed files with 320 additions and 88 deletions.
2 changes: 1 addition & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ def JSystemLib(lib_name, objects, progress_category="core"):
[
Object(Matching, "JSystem/JStudio/JStudio_JStage/control.cpp"),
Object(Matching, "JSystem/JStudio/JStudio_JStage/object.cpp"),
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/object-actor.cpp"),
Object(Matching, "JSystem/JStudio/JStudio_JStage/object-actor.cpp"),
Object(Matching, "JSystem/JStudio/JStudio_JStage/object-ambientlight.cpp"),
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/object-camera.cpp"),
Object(Matching, "JSystem/JStudio/JStudio_JStage/object-fog.cpp"),
Expand Down
3 changes: 0 additions & 3 deletions include/JSystem/JStage/JSGFog.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@

namespace JStage {
struct TFog : public TObject {
void JSGFDisableFlag(u32 flag) { JSGSetFlag(JSGGetFlag() & ~flag); }
void JSGFEnableFlag(u32 flag) { JSGSetFlag(JSGGetFlag() | flag); }

virtual ~TFog() = 0;
virtual s32 JSGFGetType() const;
virtual bool JSGGetFogFunction() const;
Expand Down
89 changes: 76 additions & 13 deletions include/JSystem/JStudio/JStudio/jstudio-object.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,32 @@ typedef struct _GXColor GXColor;
namespace JStudio {
namespace data {
enum TEOperationData {
UNK_0x1 = 0x1,
UNK_0x2 = 0x2,
UNK_0x3 = 0x3,
UNK_0x10 = 0x10,
UNK_0x12 = 0x12,
UNK_0x18 = 0x18,
UNK_0x19 = 0x19,
TEOD_Unknown_00 = 0x00,
TEOD_Unknown_01 = 0x01,
TEOD_Unknown_02 = 0x02,
TEOD_Unknown_03 = 0x03,
TEOD_Unknown_04 = 0x04,
TEOD_Unknown_05 = 0x05,
TEOD_Unknown_06 = 0x06,
TEOD_Unknown_07 = 0x07,
TEOD_Unknown_08 = 0x08,
TEOD_Unknown_09 = 0x09,
TEOD_Unknown_0A = 0x0A,
TEOD_Unknown_0B = 0x0B,
TEOD_Unknown_0C = 0x0C,
TEOD_Unknown_0D = 0x0D,
TEOD_Unknown_0E = 0x0E,
TEOD_Unknown_0F = 0x0F,
TEOD_Unknown_10 = 0x10,
TEOD_Unknown_11 = 0x11,
TEOD_Unknown_12 = 0x12,
TEOD_Unknown_13 = 0x13,
TEOD_Unknown_14 = 0x14,
TEOD_Unknown_15 = 0x15,
TEOD_Unknown_16 = 0x16,
TEOD_Unknown_17 = 0x17,
TEOD_Unknown_18 = 0x18,
TEOD_Unknown_19 = 0x19,
};
};

Expand All @@ -26,7 +45,7 @@ struct TVariableValue {
virtual ~TOutput() = 0;
}; // Size: 0x04

struct TOutput_none_ {
struct TOutput_none_ : public TOutput {
~TOutput_none_();
void operator()(f32, JStudio::TAdaptor*) const;
};
Expand All @@ -35,7 +54,12 @@ struct TVariableValue {
static void update_immediate_(JStudio::TVariableValue*, f64);
static void update_time_(JStudio::TVariableValue*, f64);
static void update_functionValue_(JStudio::TVariableValue*, f64);
TVariableValue();
TVariableValue()
: field_0x4(0)
, field_0x8(NULL)
, pOutput_(&soOutput_none_)
{
}

void setValue_immediate(f32 value) {
field_0x8 = &update_immediate_;
Expand Down Expand Up @@ -85,7 +109,7 @@ struct TVariableValue {
pOutput_ = (output != NULL ? (TOutput*)output : (TOutput*)&soOutput_none_);
}

static u8 soOutput_none_[4 + 4 /* padding */];
static TOutput_none_ soOutput_none_;

/* 0x00 */ f32 mValue;
/* 0x04 */ u32 field_0x4;
Expand Down Expand Up @@ -206,12 +230,28 @@ struct TAdaptor_actor : public TAdaptor {
{
}
virtual ~TAdaptor_actor() = 0;
virtual void adaptor_do_prepare(const JStudio::TObject*) = 0;
virtual void adaptor_do_begin(const JStudio::TObject*) = 0;
virtual void adaptor_do_end(const JStudio::TObject*) = 0;
virtual void adaptor_do_update(const JStudio::TObject*, u32) = 0;
virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32) = 0;
virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_RELATION(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_RELATION_NODE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_RELATION_ENABLE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_SHAPE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_ANIMATION(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_ANIMATION_MODE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_TEXTURE_ANIMATION(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_TEXTURE_ANIMATION_MODE(JStudio::data::TEOperationData, void const*, u32) = 0;

/* 0x10 */ TVariableValue mValue[14];

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 u32 const sauVariableValue_3_TRANSLATION_XYZ[3];
static u32 const sauVariableValue_3_ROTATION_XYZ[3];
static u32 const sauVariableValue_3_SCALING_XYZ[3];
}; // Size: 0x128

struct TObject_actor : public TObject {
Expand Down Expand Up @@ -251,6 +291,14 @@ struct TAdaptor_camera : public TAdaptor {
{
}
virtual ~TAdaptor_camera() = 0;
virtual void adaptor_do_prepare(const JStudio::TObject*) = 0;
virtual void adaptor_do_begin(const JStudio::TObject*) = 0;
virtual void adaptor_do_end(const JStudio::TObject*) = 0;
virtual void adaptor_do_update(const JStudio::TObject*, u32) = 0;
virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32) = 0;
virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, u32) = 0;

/* 0x10 */ TVariableValue mValue[11];

Expand Down Expand Up @@ -297,6 +345,13 @@ struct TAdaptor_light : public TAdaptor {
{
}
virtual ~TAdaptor_light() = 0;
virtual void adaptor_do_prepare(const JStudio::TObject*) = 0;
virtual void adaptor_do_begin(const JStudio::TObject*) = 0;
virtual void adaptor_do_end(const JStudio::TObject*) = 0;
virtual void adaptor_do_update(const JStudio::TObject*, u32) = 0;
virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32) = 0;
virtual void adaptor_do_ENABLE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_FACULTY(JStudio::data::TEOperationData, void const*, u32) = 0;

/* 0x10 */ TVariableValue mValue[13];

Expand All @@ -322,6 +377,7 @@ struct TAdaptor_message : public TAdaptor {
}

virtual ~TAdaptor_message() = 0;
virtual void adaptor_do_MESSAGE(JStudio::data::TEOperationData, const void*, u32) = 0;
};

struct TObject_message : public TObject {
Expand All @@ -339,6 +395,13 @@ struct TAdaptor_particle : public TAdaptor {
{
}
virtual ~TAdaptor_particle() = 0;
virtual void adaptor_do_prepare(const JStudio::TObject*) = 0;
virtual void adaptor_do_end(const JStudio::TObject*) = 0;
virtual void adaptor_do_update(const JStudio::TObject*, u32) = 0;
virtual void adaptor_do_PARTICLE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, void const*, u32) = 0;
virtual void adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, void const*, u32) = 0;

/* 0x10 */ TVariableValue mValue[20];

Expand Down
50 changes: 39 additions & 11 deletions include/JSystem/JStudio/JStudio_JStage/control.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,34 @@ struct TAdaptor_object_ {
/* 0x8 */ JStage::TObject* mObject;
};

struct TAdaptor_actor : public JStudio::TAdaptor_actor, public JStudio_JStage::TAdaptor_object_ {
struct TVVOutput_ANIMATION_FRAME_ {
void operator()(f32, JStudio::TAdaptor*) const;
~TVVOutput_ANIMATION_FRAME_();
struct TAdaptor_actor : public JStudio::TAdaptor_actor {
typedef void (JStage::TActor::*IDFunction)(u32);
typedef TVariableValueOutput_object_<TAdaptor_actor, JStage::TActor> TVVOutputObject;

struct TVVOutput_ANIMATION_FRAME_ : public JStudio::TVariableValue::TOutput {
typedef void (JStage::TActor::*Setter)(f32);
typedef f32 (JStage::TActor::*Getter)() const;
typedef f32 (JStage::TActor::*MaxGetter)() const;

TVVOutput_ANIMATION_FRAME_(int valueIndex, u32 val, Setter setter, Getter getter, MaxGetter maxGetter)
: TOutput()
, mValueIndex(valueIndex)
, _08(val)
, mSetter(setter)
, mGetter(getter)
, mMaxGetter(maxGetter)
{
}

virtual void operator()(f32, JStudio::TAdaptor*) const;
inline virtual ~TVVOutput_ANIMATION_FRAME_();

// _00 = VTBL
int mValueIndex; // _04
u32 _08; // _08
Setter mSetter; // _0C
Getter mGetter; // _18
MaxGetter mMaxGetter; // _24
};

TAdaptor_actor(JStage::TSystem const*, JStage::TActor*);
Expand All @@ -72,7 +96,6 @@ struct TAdaptor_actor : public JStudio::TAdaptor_actor, public JStudio_JStage::T
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_RELATION(JStudio::data::TEOperationData, void const*, u32);
virtual void adaptor_do_RELATION_NODE(JStudio::data::TEOperationData, void const*, u32);
virtual void adaptor_do_RELATION_ENABLE(JStudio::data::TEOperationData, void const*, u32);
Expand All @@ -84,13 +107,18 @@ struct TAdaptor_actor : public JStudio::TAdaptor_actor, public JStudio_JStage::T

void setJSG_ID_(void (JStage::TActor::*)(u32),
JStudio::data::TEOperationData, void const*, u32);
void setJSG_SRT_(JStudio::TControl const*);
void getJSG_SRT_(JStudio::TControl const*);

static u8 saoVVOutput_[64];
static u8 saoVVOutput_ANIMATION_FRAME_[144 + 4 /* padding */];

/* 0x130 */ u8 field_0x130[0x144 - 0x130];
static const TVVOutputObject saoVVOutput_[];
static const TVVOutput_ANIMATION_FRAME_ saoVVOutput_ANIMATION_FRAME_[];

/* 0x124 */ const JStage::TSystem* mSystem;
/* 0x128 */ JStage::TActor* mObject;
/* 0x12C */ JStage::TObject* m12C;
/* 0x130 */ u32 m130;
/* 0x134 */ JStage::TObject* m134;
/* 0x138 */ u32 m138;
/* 0x13C */ u32 m13C;
/* 0x140 */ u32 m140;
}; // Size: 0x144

struct TAdaptor_ambientLight : public JStudio::TAdaptor_ambientLight {
Expand Down
18 changes: 9 additions & 9 deletions src/JSystem/JStudio/JStudio/jstudio-object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,19 @@ void JStudio::TAdaptor::adaptor_setVariableValue(JStudio::TObject* pObject, u32
/* Nonmatching */
setVarFunc func;
switch (param_3) {
case JStudio::data::UNK_0x1:
case JStudio::data::TEOD_Unknown_01:
func = &adaptor_setVariableValue_VOID_;
break;
case JStudio::data::UNK_0x2:
case JStudio::data::TEOD_Unknown_02:
func = &adaptor_setVariableValue_IMMEDIATE_;
break;
case JStudio::data::UNK_0x3:
case JStudio::data::TEOD_Unknown_03:
func = &adaptor_setVariableValue_TIME_;
break;
case JStudio::data::UNK_0x10:
case JStudio::data::TEOD_Unknown_10:
func = &adaptor_setVariableValue_FVR_NAME_;
break;
case JStudio::data::UNK_0x12:
case JStudio::data::TEOD_Unknown_12:
func = &adaptor_setVariableValue_FVR_INDEX_;
break;
default:
Expand All @@ -91,19 +91,19 @@ void JStudio::TAdaptor::adaptor_setVariableValue_n(JStudio::TObject* pObject, co
setVarFunc pcVar6;
u32 iVar7;
switch(param_4) {
case JStudio::data::UNK_0x1:
case JStudio::data::TEOD_Unknown_01:
iVar7 = 0;
pcVar6 = adaptor_setVariableValue_VOID_;
break;
case JStudio::data::UNK_0x2:
case JStudio::data::TEOD_Unknown_02:
iVar7 = 4;
pcVar6 = adaptor_setVariableValue_IMMEDIATE_;
break;
case JStudio::data::UNK_0x3:
case JStudio::data::TEOD_Unknown_03:
iVar7 = 4;
pcVar6 = adaptor_setVariableValue_TIME_;
break;
case JStudio::data::UNK_0x12:
case JStudio::data::TEOD_Unknown_12:
iVar7 = 4;
pcVar6 = adaptor_setVariableValue_FVR_INDEX_;
break;
Expand Down
4 changes: 2 additions & 2 deletions src/JSystem/JStudio/JStudio_JAudio/object-sound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ void TAdaptor_sound::adaptor_do_update(const JStudio::TObject* object, u32) {
/* 80278FB8-80279064 .text adaptor_do_SOUND__Q214JStudio_JAudio14TAdaptor_soundFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_sound::adaptor_do_SOUND(JStudio::data::TEOperationData op, const void* data, u32) {
switch (op) {
case JStudio::data::UNK_0x19:
case JStudio::data::TEOD_Unknown_19:
u32 flags = *(s32*)data;
if (flags & 0xc0000000) {
if (mpSound) {
Expand All @@ -89,7 +89,7 @@ void TAdaptor_sound::adaptor_do_SOUND(JStudio::data::TEOperationData op, const v
/* 80279064-8027908C .text adaptor_do_LOCATED__Q214JStudio_JAudio14TAdaptor_soundFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_sound::adaptor_do_LOCATED(JStudio::data::TEOperationData op, const void* data, u32 flag) {
switch (op) {
case JStudio::data::UNK_0x2:
case JStudio::data::TEOD_Unknown_02:
Vec* pos = *(Vec**)data;
mPosition = NULL;
if (!pos)
Expand Down
2 changes: 1 addition & 1 deletion src/JSystem/JStudio/JStudio_JMessage/object-message.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ 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 operation, const void* param_2, u32 param_3) {
switch (operation) {
case JStudio::data::UNK_0x19:
case JStudio::data::TEOD_Unknown_19:
mControl->setMessageCode(*(u32*)param_2);
break;
}
Expand Down
10 changes: 5 additions & 5 deletions src/JSystem/JStudio/JStudio_JParticle/object-particle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void TAdaptor_particle::adaptor_do_update(const JStudio::TObject* param_1, u32 p
/* 80279C2C-80279C40 .text adaptor_do_PARTICLE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_particle::adaptor_do_PARTICLE(JStudio::data::TEOperationData operation, const void* r5, u32) {
switch (operation) {
case JStudio::data::UNK_0x19:
case JStudio::data::TEOD_Unknown_19:
_188 = *(int*)r5;
break;
}
Expand All @@ -90,7 +90,7 @@ void TAdaptor_particle::adaptor_do_PARTICLE(JStudio::data::TEOperationData opera
/* 80279C40-80279CA4 .text adaptor_do_PARENT__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_particle::adaptor_do_PARENT(JStudio::data::TEOperationData operation, const void* param_2, u32) {
switch (operation) {
case JStudio::data::UNK_0x18:
case JStudio::data::TEOD_Unknown_18:
if (mSystem != NULL) {
_19C = (JStage::TObject*)mSystem->JSGFindObject((const char*)param_2, JStage::TOBJ_ACTOR_UNK);
if (_19C == 0) {
Expand All @@ -105,15 +105,15 @@ void TAdaptor_particle::adaptor_do_PARENT(JStudio::data::TEOperationData operati
/* 80279CA4-80279D24 .text adaptor_do_PARENT_NODE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_particle::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData operation, const void* param_2, u32) {
switch (operation) {
case JStudio::data::UNK_0x18:
case JStudio::data::TEOD_Unknown_18:
if (_19C != NULL) {
_1A0 = _19C->JSGFindNodeID((const char*)param_2);
if (_1A0 == 0xFFFFFFFF) {
return;
}
}
break;
case JStudio::data::UNK_0x19:
case JStudio::data::TEOD_Unknown_19:
_1A0 = *(u32*)param_2;
break;
}
Expand All @@ -122,7 +122,7 @@ void TAdaptor_particle::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData op
/* 80279D24-80279D40 .text adaptor_do_PARENT_ENABLE__Q217JStudio_JParticle17TAdaptor_particleFQ37JStudio4data15TEOperationDataPCvUl */
void TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData operation, const void* param_2, u32 param_3) {
switch (operation) {
case JStudio::data::UNK_0x2:
case JStudio::data::TEOD_Unknown_02:
_1A4 = *(u32*)param_2;
break;
}
Expand Down
Loading

0 comments on commit 0bea395

Please sign in to comment.