diff --git a/configure.py b/configure.py index 013841a37..eacb905f0 100644 --- a/configure.py +++ b/configure.py @@ -600,13 +600,13 @@ config.libs = [ "JStudio", [ Object(Matching, "JSystem/JStudio/JStudio/jstudio-control.cpp"), - Object(NonMatching, "JSystem/JStudio/JStudio/jstudio-data.cpp"), + Object(Matching, "JSystem/JStudio/JStudio/jstudio-data.cpp"), Object(Matching, "JSystem/JStudio/JStudio/jstudio-math.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio/jstudio-object.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio/functionvalue.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio/fvb.cpp"), - Object(NonMatching, "JSystem/JStudio/JStudio/fvb-data.cpp"), - Object(NonMatching, "JSystem/JStudio/JStudio/fvb-data-parse.cpp"), + Object(Matching, "JSystem/JStudio/JStudio/fvb-data.cpp"), + Object(Matching, "JSystem/JStudio/JStudio/fvb-data-parse.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio/object-id.cpp"), Object(NonMatching, "JSystem/JStudio/JStudio/stb.cpp"), Object(Matching, "JSystem/JStudio/JStudio/stb-data.cpp"), diff --git a/include/JSystem/JGadget/binary.h b/include/JSystem/JGadget/binary.h index 26d29d1fb..61a949fa8 100644 --- a/include/JSystem/JGadget/binary.h +++ b/include/JSystem/JGadget/binary.h @@ -40,7 +40,7 @@ struct TParseData_aligned : public TParseData { // Base for header and/or block parsing struct TParse_header_block { - virtual ~TParse_header_block(); + virtual ~TParse_header_block() = 0; virtual bool parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 arg2) = 0; virtual bool parseBlock_next(const void** ppData_inout, u32* puData_out, u32 arg2) = 0; diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index e98588adb..189a95a51 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -185,10 +185,21 @@ struct TLinkList_factory : public TLinkList { virtual void Do_destroy(T*) = 0; }; -template +template struct TEnumerator { - TLinkList field_0x0; - TLinkList field_0x4; + inline TEnumerator(T _current, T _end) + : current(_current), end(_end) {} + + bool isEnd() const { return current != end; } + operator bool() const { return isEnd(); } + T operator*() { + T rv = current; + ++current; + return rv; + } + + T current; + T end; }; // TEnumerator2 should be the same but there are two issues: @@ -221,7 +232,10 @@ struct TContainerEnumerator : public TEnumerator2::iterator, T> }; template -struct TContainerEnumerator_const : public TEnumerator {}; +struct TContainerEnumerator_const : public TEnumerator2::const_iterator, const T> { + inline TContainerEnumerator_const(const TLinkList* param_0) + : TEnumerator2::const_iterator, const T>(param_0->begin(), param_0->end()) {} +}; }; // namespace JGadget diff --git a/include/JSystem/JStudio/JStudio/functionvalue.h b/include/JSystem/JStudio/JStudio/functionvalue.h index d743692d8..c45af801f 100644 --- a/include/JSystem/JStudio/JStudio/functionvalue.h +++ b/include/JSystem/JStudio/JStudio/functionvalue.h @@ -225,9 +225,9 @@ public: TData data; }; -class TFunctionValue_transition : TFunctionValue, - TFunctionValueAttribute_range, - TFunctionValueAttribute_interpolate { +class TFunctionValue_transition : public TFunctionValue, + public TFunctionValueAttribute_range, + public TFunctionValueAttribute_interpolate { public: TFunctionValue_transition(); virtual ~TFunctionValue_transition() {} @@ -250,9 +250,9 @@ private: /* 0x50 */ f64 _50; }; -class TFunctionValue_list : TFunctionValue, - TFunctionValueAttribute_range, - TFunctionValueAttribute_interpolate { +class TFunctionValue_list : public TFunctionValue, + public TFunctionValueAttribute_range, + public TFunctionValueAttribute_interpolate { public: struct TIndexData_ { f64 _0; @@ -301,9 +301,9 @@ private: /* 0x58 */ update_INTERPOLATE pfnUpdate_; }; -class TFunctionValue_list_parameter : TFunctionValue, - TFunctionValueAttribute_range, - TFunctionValueAttribute_interpolate { +class TFunctionValue_list_parameter : public TFunctionValue, + public TFunctionValueAttribute_range, + public TFunctionValueAttribute_interpolate { public: struct TIterator_data_ { TIterator_data_(const f32* value) : value_(value) {} @@ -356,7 +356,7 @@ private: /* 0x58 */ update_INTERPOLATE pfnUpdate_; }; -class TFunctionValue_hermite : TFunctionValue, TFunctionValueAttribute_range { +class TFunctionValue_hermite : public TFunctionValue, public TFunctionValueAttribute_range { public: struct TIterator_data_ { TIterator_data_(const TFunctionValue_hermite& rParent, const f32* value) { diff --git a/include/JSystem/JStudio/JStudio/jstudio-object.h b/include/JSystem/JStudio/JStudio/jstudio-object.h index 16cc2a202..d088c58bd 100644 --- a/include/JSystem/JStudio/JStudio/jstudio-object.h +++ b/include/JSystem/JStudio/JStudio/jstudio-object.h @@ -137,17 +137,17 @@ struct TAdaptor { u32 field_0x0; f32 field_0x4; }; - typedef void (*setVarFunc)(JStudio::TAdaptor*, JStudio::TControl*, u32, void const*, u32); + typedef void (*setVarFunc)(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); virtual ~TAdaptor() = 0; - virtual void adaptor_do_prepare(); - virtual void adaptor_do_begin(); - virtual void adaptor_do_end(); - virtual void adaptor_do_update(u32); - virtual void adaptor_do_data(void const*, u32, void const*, u32); + virtual void adaptor_do_prepare(const JStudio::TObject*); + virtual void adaptor_do_begin(const JStudio::TObject*); + virtual void adaptor_do_end(const JStudio::TObject*); + virtual void adaptor_do_update(const JStudio::TObject*, u32); + virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32); - void adaptor_setVariableValue(JStudio::TControl*, u32, + void adaptor_setVariableValue(JStudio::TObject*, u32, JStudio::data::TEOperationData, void const*, u32); - void adaptor_setVariableValue_n(JStudio::TControl*, u32 const*, u32, + void adaptor_setVariableValue_n(JStudio::TObject*, u32 const*, u32, JStudio::data::TEOperationData, void const*, u32); void @@ -156,21 +156,18 @@ struct TAdaptor { void adaptor_getVariableValue_Vec(Vec*, u32 const*) const; void adaptor_setVariableValue_GXColor(u32 const*, GXColor const&); void adaptor_getVariableValue_GXColor(GXColor*, u32 const*) const; - void adaptor_updateVariableValue(JStudio::TControl*, u32); - static void adaptor_setVariableValue_VOID_(JStudio::TAdaptor*, JStudio::TControl*, u32, + void adaptor_updateVariableValue(JStudio::TObject*, u32); + static void adaptor_setVariableValue_VOID_(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); - static void adaptor_setVariableValue_IMMEDIATE_(JStudio::TAdaptor*, JStudio::TControl*, + static void adaptor_setVariableValue_IMMEDIATE_(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); - static void adaptor_setVariableValue_TIME_(JStudio::TAdaptor*, JStudio::TControl*, u32, + static void adaptor_setVariableValue_TIME_(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); - static void adaptor_setVariableValue_FVR_NAME_(JStudio::TAdaptor*, JStudio::TControl*, + static void adaptor_setVariableValue_FVR_NAME_(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); - static void adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor*, JStudio::TControl*, + static void adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor*, JStudio::TObject*, u32, void const*, u32); - void adaptor_setObject_(const TObject* pObject) { - pObject_ = pObject; - } TVariableValue* adaptor_referVariableValue(u32 param_0) { return &pValue_[param_0]; @@ -184,9 +181,8 @@ struct TAdaptor { return &pValue_[param_0]; } - /* 0x4 */ const TObject* pObject_; - /* 0x8 */ TVariableValue* pValue_; - /* 0xC */ u32 u; + /* 0x4 */ TVariableValue* pValue_; + /* 0x8 */ u32 u; }; struct TAdaptor_actor : public TAdaptor { diff --git a/src/JSystem/JStudio/JStudio/functionvalue.cpp b/src/JSystem/JStudio/JStudio/functionvalue.cpp index 8a4107c13..aaa7a2742 100644 --- a/src/JSystem/JStudio/JStudio/functionvalue.cpp +++ b/src/JSystem/JStudio/JStudio/functionvalue.cpp @@ -3,411 +3,935 @@ // Translation Unit: functionvalue.cpp // -#include "functionvalue.h" +#include "JSystem/JStudio/JStudio/functionvalue.h" +#include "JSystem/JUtility/JUTException.h" +#include "JSystem/JGadget/linklist.h" #include "dolphin/types.h" +#include "math.h" +#include "arith.h" + +namespace JGadget { +template +// TODO +Iterator findUpperBound_binary_current(Iterator, Iterator, Iterator, const B1&); +}; // namespace JGadget + +namespace JStudio { + +namespace functionvalue { +f64 extrapolateParameter_raw(f64, f64); +inline f64 extrapolateParameter_repeat(f64, f64); +f64 extrapolateParameter_turn(f64, f64); +f64 extrapolateParameter_clamp(f64, f64); +static inline f64 i_extrapolateParameter_repeat(f64 a1, f64 a2) { + f64 t = fmod(a1, a2); + + if (t < 0.0) + t += a2; + + return t; +} +}; // namespace functionvalue + +namespace { +ExtrapolateParameter gapfnExtrapolateParameter_[4] = { + functionvalue::extrapolateParameter_raw, + functionvalue::extrapolateParameter_repeat, + functionvalue::extrapolateParameter_turn, + functionvalue::extrapolateParameter_clamp, +}; +} // namespace /* 80271020-80271068 .text toFunction_outside__Q27JStudio14TFunctionValueFi */ -void JStudio::TFunctionValue::toFunction_outside(int) { +ExtrapolateParameter TFunctionValue::toFunction_outside(int idx) { /* Nonmatching */ + ExtrapolateParameter fallback = NULL; + ExtrapolateParameter result; + + result = JGadget::toValueFromIndex(idx, gapfnExtrapolateParameter_, 4, + fallback); + + if (result == NULL) { + JUTWarn w; + w << "unknown outside : " << idx; + + return gapfnExtrapolateParameter_[0]; + } + + return result; } /* 80271068-80271078 .text __ct__Q27JStudio14TFunctionValueFv */ -JStudio::TFunctionValue::TFunctionValue() { - /* Nonmatching */ -} +TFunctionValue::TFunctionValue() {} /* 80271078-802710C0 .text __dt__Q27JStudio14TFunctionValueFv */ -JStudio::TFunctionValue::~TFunctionValue() { - /* Nonmatching */ -} +TFunctionValue::~TFunctionValue() {} /* 802710C0-802710E8 .text refer_initialize__Q27JStudio29TFunctionValueAttribute_referFv */ -void JStudio::TFunctionValueAttribute_refer::refer_initialize() { - /* Nonmatching */ +void TFunctionValueAttribute_refer::refer_initialize() { + clear(); } +namespace functionvalue { + /* 802710E8-8027114C .text interpolateValue_hermite__Q27JStudio13functionvalueFddddddd */ -void JStudio::functionvalue::interpolateValue_hermite(double, double, double, double, double, double, double) { +f64 interpolateValue_hermite(f64 c0, f64 c1, f64 x, f64 c2, f64 x2, f64 c3, f64 x3) { /* Nonmatching */ + f64 a; + f64 b; + f64 c; + f64 d; + + a = c0 - c1; + b = a * (1.0 / (x2 - c1)); // (a - b) * 1.0 / (c - d) + c = b - 1.0; // 1.0 + d = (3.0 + -2.0 * b) * (b * b); // 3.0 - 2.0 * b + f64 cab = (c * a * b); + f64 coeffx3 = cab * x3; + f64 cca = (c * c * a); + f64 coeffc2 = cca * c2; + return ((1.0 - d) * x + (d * c3)) + coeffc2 + coeffx3; } /* 8027114C-802711B0 .text interpolateValue_BSpline_uniform__Q27JStudio13functionvalueFddddd */ -void JStudio::functionvalue::interpolateValue_BSpline_uniform(double, double, double, double, double) { +f64 interpolateValue_BSpline_uniform(f64 f1, f64 f2, f64 f3, f64 f4, f64 f5) { /* Nonmatching */ + // pow3(1.0 - f1) + f64 f6 = (1.0 - f1); + f64 temp = f6; + temp = (f6 * f6) * temp; + + f64 f0 = f1 * f1; + f64 f8 = f0 * f1; + + f64 temp2 = (0.5 + (1.0 / 6.0) * ((f1 + f0) - f8)); + f64 temp3 = temp2 * f4; + + f64 temp4 = (((1.0 / 6.0) * f8 - f0) + (2.0 / 3.0)); + f64 temp5 = temp4 * f3; + + return temp5 + (temp * f2 + f8 * f5) * 0.5 + + temp3; } /* 802711B0-80271290 .text interpolateValue_BSpline_nonuniform__Q27JStudio13functionvalueFdPCdPCd */ -void JStudio::functionvalue::interpolateValue_BSpline_nonuniform(double, const double*, const double*) { +f64 interpolateValue_BSpline_nonuniform(f64, const f64*, const f64*) { /* Nonmatching */ } +inline f64 interpolateValue_linear(double a1, double a2, double a3, double a4, double a5) { + return a3 + ((a5 - a3) * (a1 - a2)) / (a4 - a2); +} + +inline f64 interpolateValue_linear_1(f64 a1, f64 a2, f64 a3, f64 a4) { + return a3 + (a4 - a3) * (a1 - a2); +} + +inline f64 interpolateValue_plateau(f64 a1, f64 a2, f64 a3, f64 a4, f64 a5) { + return interpolateValue_hermite(a1, a2, a3, 0.0, a4, a5, 0.0); +} + /* 80271290-802712F0 .text extrapolateParameter_turn__Q27JStudio13functionvalueFdd */ -void JStudio::functionvalue::extrapolateParameter_turn(double, double) { - /* Nonmatching */ +f64 extrapolateParameter_turn(f64 param_0, f64 param_1) { + f64 dVar2 = 2.0 * param_1; + f64 dVar1 = i_extrapolateParameter_repeat(param_0, dVar2); + if (dVar1 >= param_1) { + dVar1 = dVar2 - dVar1; + } + return dVar1; } +} // namespace functionvalue + /* 802712F0-80271324 .text range_initialize__Q27JStudio29TFunctionValueAttribute_rangeFv */ -void JStudio::TFunctionValueAttribute_range::range_initialize() { - /* Nonmatching */ +void TFunctionValueAttribute_range::range_initialize() { + fBegin_ = NAN; + fEnd_ = fBegin_; + fDifference_ = fBegin_; + + range_setProgress(TFunctionValue::PROG_INIT); + range_setAdjust(TFunctionValue::ADJ_INIT); + range_setOutside(TFunctionValue::OUT_INIT); } /* 80271324-802713CC .text range_prepare__Q27JStudio29TFunctionValueAttribute_rangeFv */ -void JStudio::TFunctionValueAttribute_range::range_prepare() { - /* Nonmatching */ +void TFunctionValueAttribute_range::range_prepare() { + TFunctionValue::TEProgress progress = range_getProgress(); + + switch (progress) { + default: + JUTWarn w; + w << "unknown progress : " << progress; + case 0: + _20 = 0.0; + _28 = 1.0; + break; + case 1: + _20 = 0.0; + _28 = -1.0; + break; + case 2: + _20 = fBegin_; + _28 = -1.0; + break; + case 3: + _20 = fEnd_; + _28 = -1.0; + break; + case 4: + _20 = 0.5 * (fBegin_ + fEnd_); + _28 = -1.0; + break; + } } /* 802713CC-802713E0 .text range_set__Q27JStudio29TFunctionValueAttribute_rangeFdd */ -void JStudio::TFunctionValueAttribute_range::range_set(double, double) { - /* Nonmatching */ +void TFunctionValueAttribute_range::range_set(f64 begin, f64 end) { + fBegin_ = begin; + fEnd_ = end; + fDifference_ = end - begin; + + ASSERT(fDifference_ >= TValue(0)); } /* 802713E0-802716F0 .text range_getParameter__Q27JStudio29TFunctionValueAttribute_rangeCFddd */ -void JStudio::TFunctionValueAttribute_range::range_getParameter(double, double, double) const { - /* Nonmatching */ +f64 TFunctionValueAttribute_range::range_getParameter(f64 arg1, f64 arg2, f64 arg3) const { + f64 progress = range_getParameter_progress(arg1); + TFunctionValue::TEAdjust adjust = range_getAdjust(); + + f64 result; + + switch (adjust) { + default: + JUTWarn w; + w << "unknown adjust : " << adjust; + case 0: + result = range_getParameter_outside(progress); + break; + case 1: + result = range_getParameter_outside(progress + fBegin_); + break; + case 2: + result = range_getParameter_outside(progress + fEnd_); + break; + case 3: + result = range_getParameter_outside(progress + 0.5 * (fBegin_ + fEnd_)); + break; + case 4: + f64 temp = range_getParameter_outside(progress); + result = arg2 + ((temp - fBegin_) * (arg3 - arg2)) / fDifference_; + break; + } + return result; } /* 802716F0-80271734 .text __ct__Q27JStudio29TFunctionValueAttribute_rangeFv */ -JStudio::TFunctionValueAttribute_range::TFunctionValueAttribute_range() { - /* Nonmatching */ -} +TFunctionValueAttribute_range::TFunctionValueAttribute_range() + : fBegin_(NAN), fEnd_(fBegin_), fDifference_(fBegin_), + mProgress(TFunctionValue::PROG_INIT), mAdjust(TFunctionValue::ADJ_INIT), _20(fBegin_), + _28(fBegin_), mBegin(TFunctionValue::OUT_INIT), mEnd(TFunctionValue::OUT_INIT) {} /* 80271734-80271790 .text __ct__Q27JStudio24TFunctionValue_compositeFv */ -JStudio::TFunctionValue_composite::TFunctionValue_composite() { +TFunctionValue_composite::TFunctionValue_composite() : pfn_(NULL), data((void*)NULL) { /* Nonmatching */ } /* 80271790-80271798 .text getType__Q27JStudio24TFunctionValue_compositeCFv */ -void JStudio::TFunctionValue_composite::getType() const { - /* Nonmatching */ +u32 TFunctionValue_composite::getType() const { + return 1; } /* 80271798-802717B8 .text getAttributeSet__Q27JStudio24TFunctionValue_compositeFv */ -void JStudio::TFunctionValue_composite::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_composite::getAttributeSet() { + return TFunctionValueAttributeSet(this, NULL, NULL); } /* 802717B8-802717FC .text initialize__Q27JStudio24TFunctionValue_compositeFv */ -void JStudio::TFunctionValue_composite::initialize() { - /* Nonmatching */ +void TFunctionValue_composite::initialize() { + refer_initialize(); + pfn_ = NULL; + data = TData((void*)NULL); } /* 802717FC-80271800 .text prepare__Q27JStudio24TFunctionValue_compositeFv */ -void JStudio::TFunctionValue_composite::prepare() { - /* Nonmatching */ -} +void TFunctionValue_composite::prepare() {} /* 80271800-80271834 .text getValue__Q27JStudio24TFunctionValue_compositeFd */ -void JStudio::TFunctionValue_composite::getValue(double) { - /* Nonmatching */ +f64 TFunctionValue_composite::getValue(f64 arg1) { + const TFunctionValueAttribute_refer* container = refer_getContainer(); + ASSERT(!refer_isReferring(this)); + ASSERT(pfn_ != NULL); + + return pfn_(arg1, container, data_getData()); } /* 80271834-802718A0 .text composite_raw__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_raw(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_raw(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + u32 index = param_2.get_unsignedInteger(); + u32 size = param_1.size(); + if (index >= size) { + return 0.0; + } + TFunctionValue** local_18 = (TFunctionValue**)param_1.begin(); + // std::advance_pointer(local_18, index); + local_18 += index; + TFunctionValue* piVar4 = *local_18; + return piVar4->getValue(param_3); } /* 802718A0-80271A04 .text composite_index__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_index(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { +f64 TFunctionValue_composite::composite_index(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { /* Nonmatching */ + s32 size = param_1.size(); + if (size <= 1) { + return 0.0; + } + TFunctionValue** local_148 = (TFunctionValue**)param_1.begin(); + TFunctionValue* pFront = *local_148; + // JUT_ASSERT(599, pFront!=0); + f64 dVar4 = pFront->getValue(param_3); + s32 index = floor(dVar4); + u32 uVar2 = param_2.get_unsignedInteger(); + switch (uVar2) { + case 0: + case 3: + default: + if (index < 0) { + index = 0; + } else if (index >= size - 1) { + index = size - 2; + } + break; + case 1: + div_t dt = div(index, size - 1); + index = dt.rem; + if (index < 0) { + index = size + index; + index--; + } + break; + case 2: + if (size - 1 == 1) { + index = 0; + } else { + u32 uVar3 = (u32)(size - 2) * 2; + div_t dt2 = div(index, uVar3); + index = dt2.rem; + if (index < 0) { + index += uVar3; + } + if (index >= size - 1) { + index = uVar3 - index; + } + } + break; + } + + // std::advance_pointer(local_148, index + 1); + local_148 += index + 1; + pFront = *local_148; + return pFront->getValue(param_3); } +// TODO: remove when TContainerEnumerator_const is generic enough +template +struct TContainerEnumerator_const_TVector : public JGadget::TEnumerator { + inline TContainerEnumerator_const_TVector(JGadget::TVector_pointer const& param_1) + : JGadget::TEnumerator(param_1.begin(), param_1.end()) {} +}; + /* 80271A04-80271A70 .text composite_parameter__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_parameter(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_parameter(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + f64 dVar4 = param_3 - param_2.get_value(); + TContainerEnumerator_const_TVector aTStack_18(param_1); + while (aTStack_18) { + TFunctionValue* const* ppiVar3 = *aTStack_18; + TFunctionValue* piVar3 = *ppiVar3; + dVar4 = piVar3->getValue(dVar4); + } + return dVar4; } /* 80271A70-80271AF8 .text composite_add__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_add(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_add(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + f64 dVar4 = param_2.get_value(); + TContainerEnumerator_const_TVector aTStack_18(param_1); + while (aTStack_18) { + TFunctionValue* const* ppiVar3 = *aTStack_18; + TFunctionValue* piVar3 = *ppiVar3; + dVar4 += piVar3->getValue(param_3); + } + return dVar4; } /* 80271AF8-80271BE8 .text composite_subtract__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_subtract(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_subtract(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + u32 size = param_1.size(); + if (size == 0) { + return 0.0; + } + TContainerEnumerator_const_TVector aTStack_18(param_1); + TFunctionValue* const* local_148 = *aTStack_18; + TFunctionValue* pFront = *local_148; + // JUT_ASSERT(688, pFront!=0); + f64 dVar4 = pFront->getValue(param_3); + while (aTStack_18) { + TFunctionValue* const* ppiVar3 = *aTStack_18; + TFunctionValue* piVar3 = *ppiVar3; + dVar4 -= piVar3->getValue(param_3); + } + dVar4 -= param_2.f32data; + return dVar4; } /* 80271BE8-80271C70 .text composite_multiply__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_multiply(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_multiply(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + f64 dVar4 = param_2.get_value(); + TContainerEnumerator_const_TVector aTStack_18(param_1); + while (aTStack_18) { + TFunctionValue* const* ppiVar3 = *aTStack_18; + TFunctionValue* piVar3 = *ppiVar3; + dVar4 *= piVar3->getValue(param_3); + } + return dVar4; } /* 80271C70-80271D60 .text composite_divide__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad */ -void JStudio::TFunctionValue_composite::composite_divide(const JGadget::TVector_pointer&, const JStudio::TFunctionValue_composite::TData&, double) { - /* Nonmatching */ +f64 TFunctionValue_composite::composite_divide(const JGadget::TVector_pointer& param_1, const TFunctionValue_composite::TData& param_2, f64 param_3) { + u32 size = param_1.size(); + if (size == 0) { + return 0.0; + } + TContainerEnumerator_const_TVector aTStack_18(param_1); + TFunctionValue* const* local_148 = *aTStack_18; + TFunctionValue* pFront = *local_148; + // JUT_ASSERT(724, pFront!=0); + f64 dVar4 = pFront->getValue(param_3); + while (aTStack_18) { + TFunctionValue* const* ppiVar3 = *aTStack_18; + TFunctionValue* piVar3 = *ppiVar3; + dVar4 /= piVar3->getValue(param_3); + } + dVar4 /= param_2.f32data; + return dVar4; } /* 80271D60-80271DA8 .text __ct__Q27JStudio23TFunctionValue_constantFv */ -JStudio::TFunctionValue_constant::TFunctionValue_constant() { - /* Nonmatching */ -} +TFunctionValue_constant::TFunctionValue_constant() : fValue_(NAN) {} /* 80271DA8-80271DB0 .text getType__Q27JStudio23TFunctionValue_constantCFv */ -void JStudio::TFunctionValue_constant::getType() const { - /* Nonmatching */ +u32 TFunctionValue_constant::getType() const { + return 2; } /* 80271DB0-80271DC4 .text getAttributeSet__Q27JStudio23TFunctionValue_constantFv */ -void JStudio::TFunctionValue_constant::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_constant::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, NULL, NULL); } /* 80271DC4-80271DD4 .text initialize__Q27JStudio23TFunctionValue_constantFv */ -void JStudio::TFunctionValue_constant::initialize() { - /* Nonmatching */ +void TFunctionValue_constant::initialize() { + fValue_ = NAN; } /* 80271DD4-80271DD8 .text prepare__Q27JStudio23TFunctionValue_constantFv */ -void JStudio::TFunctionValue_constant::prepare() { - /* Nonmatching */ +void TFunctionValue_constant::prepare() { } /* 80271DD8-80271DE0 .text getValue__Q27JStudio23TFunctionValue_constantFd */ -void JStudio::TFunctionValue_constant::getValue(double) { - /* Nonmatching */ +f64 TFunctionValue_constant::getValue(f64) { + return fValue_; } /* 80271DE0-80271E40 .text __ct__Q27JStudio25TFunctionValue_transitionFv */ -JStudio::TFunctionValue_transition::TFunctionValue_transition() { - /* Nonmatching */ -} +TFunctionValue_transition::TFunctionValue_transition() : _48(NAN), _50(_48) {} /* 80271E40-80271E48 .text getType__Q27JStudio25TFunctionValue_transitionCFv */ -void JStudio::TFunctionValue_transition::getType() const { - /* Nonmatching */ +u32 TFunctionValue_transition::getType() const { + return 3; } /* 80271E48-80271E78 .text getAttributeSet__Q27JStudio25TFunctionValue_transitionFv */ -void JStudio::TFunctionValue_transition::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_transition::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } /* 80271E78-80271EC4 .text initialize__Q27JStudio25TFunctionValue_transitionFv */ -void JStudio::TFunctionValue_transition::initialize() { - /* Nonmatching */ +void TFunctionValue_transition::initialize() { + range_initialize(); + interpolate_initialize(); + + _48 = NAN; + _50 = _48; } /* 80271EC4-80271EE8 .text prepare__Q27JStudio25TFunctionValue_transitionFv */ -void JStudio::TFunctionValue_transition::prepare() { - /* Nonmatching */ +void TFunctionValue_transition::prepare() { + range_prepare(); + interpolate_prepare(); } /* 80271EE8-802720B0 .text getValue__Q27JStudio25TFunctionValue_transitionFd */ -void JStudio::TFunctionValue_transition::getValue(double) { +f64 TFunctionValue_transition::getValue(f64 param_1) { /* Nonmatching */ + f64 progress = range_getParameter_progress(param_1); + f64 dVar3 = range_getParameter_outside(progress); + switch (range_getAdjust()) { + default: + if (dVar3 < range_getBegin()) { + return _48; + } + return _50; + case TFunctionValue::ADJ_UNK2: + if (dVar3 < range_getEnd()) { + return _48; + } + return _50; + case TFunctionValue::ADJ_UNK3: + ADJ_UNK3_label: + if (dVar3 < 0.5 * (range_getBegin() + range_getEnd())) { + return _48; + } + return _50; + case TFunctionValue::ADJ_UNK4: + if (dVar3 < range_getBegin()) { + return _48; + } + if (dVar3 >= range_getEnd()) { + return _50; + } + switch (interpolate_get()) { + case 0: + goto ADJ_UNK3_label; + case 1: + case 3: + return _48 + ((dVar3 - range_getBegin()) * data_getDifference()) / range_getDifference(); + case 2: + return functionvalue::interpolateValue_plateau(dVar3, range_getBegin(), _48, range_getEnd(), _50); + } + } } /* 802720B0-80272114 .text __ct__Q27JStudio19TFunctionValue_listFv */ -JStudio::TFunctionValue_list::TFunctionValue_list() { - /* Nonmatching */ -} +TFunctionValue_list::TFunctionValue_list() : _44(NULL), uData_(0), _50(NAN), pfnUpdate_(NULL) {} /* 80272114-8027211C .text getType__Q27JStudio19TFunctionValue_listCFv */ -void JStudio::TFunctionValue_list::getType() const { - /* Nonmatching */ +u32 TFunctionValue_list::getType() const { + return 4; } /* 8027211C-8027214C .text getAttributeSet__Q27JStudio19TFunctionValue_listFv */ -void JStudio::TFunctionValue_list::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_list::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } /* 8027214C-8027219C .text initialize__Q27JStudio19TFunctionValue_listFv */ -void JStudio::TFunctionValue_list::initialize() { - /* Nonmatching */ +void TFunctionValue_list::initialize() { + range_initialize(); + interpolate_initialize(); + + _44 = NULL; + uData_ = 0; + _50 = NAN; + pfnUpdate_ = NULL; } /* 8027219C-8027224C .text prepare__Q27JStudio19TFunctionValue_listFv */ -void JStudio::TFunctionValue_list::prepare() { - /* Nonmatching */ +void TFunctionValue_list::prepare() { + range_prepare(); + interpolate_prepare(); + + u32 interp = interpolate_get(); + + switch (interp) { + default: + JUTWarn w; + w << "unknown interpolation : " << interp; + case 0: + pfnUpdate_ = update_INTERPOLATE_NONE_; + break; + case 1: + pfnUpdate_ = update_INTERPOLATE_LINEAR_; + break; + case 2: + pfnUpdate_ = update_INTERPOLATE_PLATEAU_; + break; + case 3: + pfnUpdate_ = update_INTERPOLATE_BSPLINE_dataMore3_; + if (uData_ == 2) + pfnUpdate_ = update_INTERPOLATE_LINEAR_; + break; + } } /* 8027224C-80272604 .text getValue__Q27JStudio19TFunctionValue_listFd */ -void JStudio::TFunctionValue_list::getValue(double) { - /* Nonmatching */ +f64 TFunctionValue_list::getValue(f64 param_1) { + f64 dVar9 = range_getParameter_progress(param_1); + u32 iVar7 = uData_ - 1; + TFunctionValue::TEAdjust iVar5 = range_getAdjust(); + f64 dVar12 = iVar7; + TIndexData_ local_178; + f64 parOutside; + switch (iVar5) { + case 0: + default: + parOutside = range_getParameter_outside(dVar9); + local_178._0 = parOutside / _50; + break; + case 1: + parOutside = range_getParameter_outside(dVar9 + range_getBegin()); + local_178._0 = parOutside / _50; + break; + case 2: + parOutside = range_getParameter_outside(dVar9 + range_getEnd()); + local_178._0 = parOutside / _50; + break; + case 3: + parOutside = range_getParameter_outside(dVar9 + 0.5 * (range_getBegin() + range_getEnd())); + local_178._0 = parOutside / _50; + break; + case 4: + parOutside = range_getParameter_outside(dVar9); + local_178._0 = (dVar12 * (parOutside - range_getBegin())) / range_getDifference(); + break; + } + + if (local_178._0 < 0.0) { + return _44[0]; + } + if (local_178._0 >= dVar12) { + return _44[iVar7]; + } + local_178._8 = floor(local_178._0); + local_178._10 = local_178._8; + // JUT_ASSERT(1063, pfnUpdate_!=0); + return pfnUpdate_(*this, local_178); } /* 80272604-80272618 .text update_INTERPOLATE_NONE___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ */ -void update_INTERPOLATE_NONE___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ { - /* Nonmatching */ +f64 TFunctionValue_list::update_INTERPOLATE_NONE_(const TFunctionValue_list& rThis, const TFunctionValue_list::TIndexData_& data) { + return rThis._44[data._10]; } /* 80272618-8027264C .text update_INTERPOLATE_LINEAR___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ */ -void update_INTERPOLATE_LINEAR___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ { - /* Nonmatching */ +f64 TFunctionValue_list::update_INTERPOLATE_LINEAR_(const TFunctionValue_list& rThis, const TFunctionValue_list::TIndexData_& data) { + return functionvalue::interpolateValue_linear_1(data._0, data._8, rThis._44[data._10], rThis._44[data._10 + 1]); } /* 8027264C-8027269C .text update_INTERPOLATE_PLATEAU___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ */ -void update_INTERPOLATE_PLATEAU___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ { - /* Nonmatching */ +f64 TFunctionValue_list::update_INTERPOLATE_PLATEAU_(const TFunctionValue_list& rThis, const TFunctionValue_list::TIndexData_& data) { + const f32* arr = rThis._44; + return functionvalue::interpolateValue_plateau(data._0, data._8, arr[data._10], 1.0 + data._8, arr[data._10 + 1]); } /* 8027269C-80272728 .text update_INTERPOLATE_BSPLINE_dataMore3___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ */ -void update_INTERPOLATE_BSPLINE_dataMore3___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ { - /* Nonmatching */ +f64 TFunctionValue_list::update_INTERPOLATE_BSPLINE_dataMore3_(const TFunctionValue_list& rThis, const TFunctionValue_list::TIndexData_& data) { + f64 dVar11 = rThis._44[data._10]; + f64 dVar10 = rThis._44[data._10 + 1]; + f64 dVar9; + f64 dVar8; + if (data._10 == 0) { + // JUT_ASSERT(1119, rThis.uData_>=3); + dVar9 = 2.0 * dVar11 - dVar10; + dVar8 = rThis._44[data._10 + 2]; + } else { + if (data._10 == rThis.uData_ - 2) { + // JUT_ASSERT(1125, rThis.uData_>=3); + dVar9 = rThis._44[data._10 - 1]; + dVar8 = 2.0 * dVar10 - dVar11; + } else { + // JUT_ASSERT(1131, rThis.uData_>=3); + dVar9 = rThis._44[data._10 - 1]; + dVar8 = rThis._44[data._10 + 2]; + } + } + functionvalue::interpolateValue_BSpline_uniform(data._0 - data._8, dVar9, dVar11, dVar10, dVar8); } /* 80272728-80272794 .text __ct__Q27JStudio29TFunctionValue_list_parameterFv */ -JStudio::TFunctionValue_list_parameter::TFunctionValue_list_parameter() { - /* Nonmatching */ -} +TFunctionValue_list_parameter::TFunctionValue_list_parameter() : pfData_(NULL), uData_(0), dat1(NULL), dat2(dat1), dat3(dat1), pfnUpdate_(NULL) {} /* 80272794-8027279C .text getType__Q27JStudio29TFunctionValue_list_parameterCFv */ -void JStudio::TFunctionValue_list_parameter::getType() const { - /* Nonmatching */ +u32 TFunctionValue_list_parameter::getType() const { + return 5; } /* 8027279C-802727CC .text getAttributeSet__Q27JStudio29TFunctionValue_list_parameterFv */ -void JStudio::TFunctionValue_list_parameter::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_list_parameter::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } /* 802727CC-802727FC .text data_set__Q27JStudio29TFunctionValue_list_parameterFPCfUl */ -void JStudio::TFunctionValue_list_parameter::data_set(const float*, unsigned long) { - /* Nonmatching */ +void TFunctionValue_list_parameter::data_set(const f32* pf, u32 u) { + ASSERT((pf != NULL) || (u == 0)); + + pfData_ = pf; + uData_ = u; + + dat1.set(pfData_); + dat2.set(&pfData_[uData_ * 2]); + dat3 = dat1; } /* 802727FC-80272854 .text initialize__Q27JStudio29TFunctionValue_list_parameterFv */ -void JStudio::TFunctionValue_list_parameter::initialize() { - /* Nonmatching */ +void TFunctionValue_list_parameter::initialize() { + range_initialize(); + interpolate_initialize(); + + pfData_ = NULL; + uData_ = 0; + + TIterator_data_ iter(NULL); + + dat1 = iter; + dat2 = dat1; + dat3 = dat1; + pfnUpdate_ = NULL; } /* 80272854-80272904 .text prepare__Q27JStudio29TFunctionValue_list_parameterFv */ -void JStudio::TFunctionValue_list_parameter::prepare() { - /* Nonmatching */ +void TFunctionValue_list_parameter::prepare() { + range_prepare(); + interpolate_prepare(); + + u32 interp = interpolate_get(); + switch (interp) { + default: + JUTWarn w; + w << "unknown interpolation : " << interp; + case 0: + pfnUpdate_ = update_INTERPOLATE_NONE_; + break; + case 1: + pfnUpdate_ = update_INTERPOLATE_LINEAR_; + break; + case 2: + pfnUpdate_ = update_INTERPOLATE_PLATEAU_; + break; + case 3: + pfnUpdate_ = update_INTERPOLATE_BSPLINE_dataMore3_; + if (uData_ != 2) + return; + pfnUpdate_ = update_INTERPOLATE_LINEAR_; + break; + } } /* 80272904-802729DC .text getValue__Q27JStudio29TFunctionValue_list_parameterFd */ -void JStudio::TFunctionValue_list_parameter::getValue(double) { +f64 TFunctionValue_list_parameter::getValue(f64 pfData_) { /* Nonmatching */ + pfData_ = range_getParameter(pfData_, data_getValue_front(), data_getValue_back()); + // JUT_ASSERT(1395, pfData_!=0) + + dat3 = JGadget::findUpperBound_binary_current(dat1, dat2, dat3, pfData_); + if (dat3 == dat1) { + return dat3.get()[1]; + } + if (dat3 == dat2) { + --dat3; + return dat3.get()[1]; + } + + const f32* pf = dat3.get(); + const int suData_size = 1; + // JUT_ASSERT(1411, (pfData_<=pf-suData_size)&&(pf=3) + const f32* pfVar2 = rThis.dat3.get(); + f64 local_68[4]; + f64 local_48[6]; + local_68[1] = pfVar2[-1]; + local_68[2] = pfVar2[1]; + local_48[2] = pfVar2[-2]; + local_48[3] = pfVar2[0]; + s32 iVar3 = ((int)rThis.dat2.get() - (int)pfVar2) / 4; + s32 iVar5 = ((int)pfVar2 - (int)rThis.dat1.get()) / 4; + switch(iVar5) { + case 2: + local_68[0] = 2.0 * local_68[1] - local_68[2]; + local_68[3] = pfVar2[3]; + local_48[4] = pfVar2[2]; + local_48[1] = 2.0 * local_48[2] - local_48[3]; + local_48[0] = 2.0 * local_48[2] - local_48[4]; + switch (iVar3) { + case 2: + case 4: + local_48[5] = 2.0 * local_48[4] - local_48[3]; + break; + default: + local_48[5] = pfVar2[4]; + break; + } + break; + case 4: + local_68[0] = pfVar2[-3]; + local_48[1] = pfVar2[-4]; + local_48[0] = 2.0 * local_48[1] - local_48[2]; + switch (iVar3) + { + case 2: + local_68[3] = 2.0 * local_68[2] - local_68[1]; + local_48[4] = 2.0 * local_48[3] - local_48[2]; + local_48[5] = 2.0 * local_48[3] - local_48[1]; + break; + case 4: + local_68[3] = pfVar2[3]; + local_48[4] = pfVar2[2]; + local_48[5] = 2.0 * local_48[4] - local_48[3]; + break; + default: + local_68[3] = pfVar2[3]; + local_48[4] = pfVar2[2]; + local_48[5] = pfVar2[4]; + } + break; + default: + local_68[0] = pfVar2[-3]; + local_48[1] = pfVar2[-4]; + local_48[0] = pfVar2[-6]; + switch (iVar3) { + case 2: + local_68[3] = 2.0 * local_68[2] - local_68[1]; + local_48[4] = 2.0 * local_48[3] - local_48[2]; + local_48[5] = 2.0 * local_48[3] - local_48[1]; + break; + case 4: + local_68[3] = pfVar2[3]; + local_48[4] = pfVar2[2]; + local_48[5] = 2.0 * local_48[4] - local_48[3]; + break; + default: + local_68[3] = pfVar2[3]; + local_48[4] = pfVar2[2]; + local_48[5] = pfVar2[4]; + break; + } + break; + } + functionvalue::interpolateValue_BSpline_nonuniform(d, (f64*)&local_68, (f64*)&local_48); } /* 80272CB8-80272D38 .text __ct__Q27JStudio22TFunctionValue_hermiteFv */ -JStudio::TFunctionValue_hermite::TFunctionValue_hermite() { - /* Nonmatching */ -} +TFunctionValue_hermite::TFunctionValue_hermite() : pf_(NULL), u_(0), uSize_(0), dat1(*this, NULL), dat2(dat1), dat3(dat1) {} /* 80272D38-80272D40 .text getType__Q27JStudio22TFunctionValue_hermiteCFv */ -void JStudio::TFunctionValue_hermite::getType() const { - /* Nonmatching */ +u32 TFunctionValue_hermite::getType() const { + return 6; } /* 80272D40-80272D60 .text getAttributeSet__Q27JStudio22TFunctionValue_hermiteFv */ -void JStudio::TFunctionValue_hermite::getAttributeSet() { - /* Nonmatching */ +TFunctionValueAttributeSet TFunctionValue_hermite::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, NULL); } /* 80272D60-80272DB0 .text data_set__Q27JStudio22TFunctionValue_hermiteFPCfUlUl */ -void JStudio::TFunctionValue_hermite::data_set(const float*, unsigned long, unsigned long) { - /* Nonmatching */ +void TFunctionValue_hermite::data_set(const f32* pf, u32 u, u32 uSize) { + ASSERT((pf != NULL) || (u == 0)); + ASSERT((uSize == 3) || (uSize == 4)); + + pf_ = pf; + u_ = u; + uSize_ = uSize; + + dat1.set(pf_, uSize_); + dat2.set(&pf_[u_ * uSize_], uSize_); + dat3 = dat1; } /* 80272DB0-80272E1C .text initialize__Q27JStudio22TFunctionValue_hermiteFv */ -void JStudio::TFunctionValue_hermite::initialize() { - /* Nonmatching */ +void TFunctionValue_hermite::initialize() { + range_initialize(); + + pf_ = NULL; + u_ = 0; + uSize_ = 0; + + TIterator_data_ data(*this, NULL); + dat1 = data; + dat2 = dat1; + dat3 = dat1; } /* 80272E1C-80272E40 .text prepare__Q27JStudio22TFunctionValue_hermiteFv */ -void JStudio::TFunctionValue_hermite::prepare() { - /* Nonmatching */ +void TFunctionValue_hermite::prepare() { + range_prepare(); } /* 80272E40-80272F64 .text getValue__Q27JStudio22TFunctionValue_hermiteFd */ -void JStudio::TFunctionValue_hermite::getValue(double) { +f64 TFunctionValue_hermite::getValue(f64 pfData_) { /* Nonmatching */ + pfData_ = range_getParameter(pfData_, data_getValue_front(), data_getValue_back()); + // JUT_ASSERT(1395, pfData_!=0) + dat3 = JGadget::findUpperBound_binary_current(dat1, dat2, dat3, pfData_); + + if (dat3 == dat1) { + return dat3.get()[1]; + } + if (dat3 == dat2) { + --dat3; + return dat3.get()[1]; + } + + const f32* pfVar5 = dat3.get(); + const f32* pfVar7 = pfVar5 - uSize_; + return functionvalue::interpolateValue_hermite( + pfData_, pfVar7[0], pfVar7[1], + pfVar7[uSize_ - 1], pfVar5[0], + pfVar5[1], pfVar5[2]); } +namespace functionvalue { + /* 80272F64-80272F68 .text extrapolateParameter_raw__Q27JStudio13functionvalueFdd */ -void JStudio::functionvalue::extrapolateParameter_raw(double, double) { - /* Nonmatching */ +f64 extrapolateParameter_raw(f64 a1, f64 a2) { + return a1; } /* 80272F68-80272FA4 .text extrapolateParameter_repeat__Q27JStudio13functionvalueFdd */ -void JStudio::functionvalue::extrapolateParameter_repeat(double, double) { +f64 extrapolateParameter_repeat(f64 a1, f64 a2) { /* Nonmatching */ + f64 t = fmod(a1, a2); + + if (t < 0.0) + t += a2; + + return t; } /* 80272FA4-80272FD0 .text extrapolateParameter_clamp__Q27JStudio13functionvalueFdd */ -void JStudio::functionvalue::extrapolateParameter_clamp(double, double) { +f64 extrapolateParameter_clamp(f64 value, f64 max) { /* Nonmatching */ + if (value <= 0.0) + return 0.0; + + if (max <= value) + value = max; + + return value; } -/* 80272FD0-80273028 .text findUpperBound_binary_current__7JGadgetFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCd */ -void JGadget::findUpperBound_binary_current(JStudio::TFunctionValue_list_parameter::TIterator_data_, JStudio::TFunctionValue_list_parameter::TIterator_data_, JStudio::TFunctionValue_list_parameter::TIterator_data_, const double&) { - /* Nonmatching */ -} - -/* 80273028-8027324C .text findUpperBound_binary_current>__7JGadgetFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCdQ23std7less */ -void JGadget::findUpperBound_binary_current>(JStudio::TFunctionValue_list_parameter::TIterator_data_, JStudio::TFunctionValue_list_parameter::TIterator_data_, JStudio::TFunctionValue_list_parameter::TIterator_data_, const double&, std::less) { - /* Nonmatching */ -} - -/* 8027324C-802732BC .text findUpperBound_binary_current__7JGadgetFQ37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_RCd */ -void JGadget::findUpperBound_binary_current(JStudio::TFunctionValue_hermite::TIterator_data_, JStudio::TFunctionValue_hermite::TIterator_data_, JStudio::TFunctionValue_hermite::TIterator_data_, const double&) { - /* Nonmatching */ -} - -/* 802732BC-802735A8 .text findUpperBound_binary_current>__7JGadgetFQ37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_RCdQ23std7less */ -void JGadget::findUpperBound_binary_current>(JStudio::TFunctionValue_hermite::TIterator_data_, JStudio::TFunctionValue_hermite::TIterator_data_, JStudio::TFunctionValue_hermite::TIterator_data_, const double&, std::less) { - /* Nonmatching */ -} - -/* 802735A8-80273608 .text __dt__Q27JStudio22TFunctionValue_hermiteFv */ -JStudio::TFunctionValue_hermite::~TFunctionValue_hermite() { - /* Nonmatching */ -} - -/* 80273608-80273668 .text __dt__Q27JStudio29TFunctionValue_list_parameterFv */ -JStudio::TFunctionValue_list_parameter::~TFunctionValue_list_parameter() { - /* Nonmatching */ -} - -/* 80273668-802736C8 .text __dt__Q27JStudio19TFunctionValue_listFv */ -JStudio::TFunctionValue_list::~TFunctionValue_list() { - /* Nonmatching */ -} - -/* 802736C8-80273728 .text __dt__Q27JStudio25TFunctionValue_transitionFv */ -JStudio::TFunctionValue_transition::~TFunctionValue_transition() { - /* Nonmatching */ -} - -/* 80273728-80273788 .text __dt__Q27JStudio23TFunctionValue_constantFv */ -JStudio::TFunctionValue_constant::~TFunctionValue_constant() { - /* Nonmatching */ -} - -/* 80273788-80273808 .text __dt__Q27JStudio24TFunctionValue_compositeFv */ -JStudio::TFunctionValue_composite::~TFunctionValue_composite() { - /* Nonmatching */ -} - -/* 80273808-8027389C .text upper_bound>__3stdFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCdQ23std7less */ -void std::upper_bound>(JStudio::TFunctionValue_list_parameter::TIterator_data_, JStudio::TFunctionValue_list_parameter::TIterator_data_, const double&, std::less) { - /* Nonmatching */ -} - -/* 8027389C-80273964 .text upper_bound>__3stdFQ37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_RCdQ23std7less */ -void std::upper_bound>(JStudio::TFunctionValue_hermite::TIterator_data_, JStudio::TFunctionValue_hermite::TIterator_data_, const double&, std::less) { - /* Nonmatching */ -} +} // namespace functionvalue +} // namespace JStudio diff --git a/src/JSystem/JStudio/JStudio/fvb-data-parse.cpp b/src/JSystem/JStudio/JStudio/fvb-data-parse.cpp index 97f4f2b84..8aeacab38 100644 --- a/src/JSystem/JStudio/JStudio/fvb-data-parse.cpp +++ b/src/JSystem/JStudio/JStudio/fvb-data-parse.cpp @@ -3,11 +3,19 @@ // Translation Unit: fvb-data-parse.cpp // -#include "fvb-data-parse.h" +#include "JSystem/JStudio/JStudio/fvb-data-parse.h" #include "dolphin/types.h" /* 80274A90-80274AF8 .text getData__Q47JStudio3fvb4data17TParse_TParagraphCFPQ57JStudio3fvb4data17TParse_TParagraph5TData */ -void JStudio::fvb::data::TParse_TParagraph::getData(JStudio::fvb::data::TParse_TParagraph::TData*) const { - /* Nonmatching */ +void JStudio::fvb::data::TParse_TParagraph::getData(JStudio::fvb::data::TParse_TParagraph::TData* data) const { + u16* parse = (u16*)JGadget::binary::parseVariableUInt_16_32_following(getRaw(), (u32*)data, (u32*)&data->u32Type, NULL); + u32 t = (u32)data->u32Size; + if (!t) { + data->pContent = NULL; + data->next = parse; + } else { + data->pContent = parse; + data->next = parse + ((t + 3) >> 1 & ~1); + } } diff --git a/src/JSystem/JStudio/JStudio/fvb-data.cpp b/src/JSystem/JStudio/JStudio/fvb-data.cpp index 92e23aced..105371212 100644 --- a/src/JSystem/JStudio/JStudio/fvb-data.cpp +++ b/src/JSystem/JStudio/JStudio/fvb-data.cpp @@ -3,6 +3,7 @@ // Translation Unit: fvb-data.cpp // -#include "fvb-data.h" +#include "JSystem/JStudio/JStudio/fvb-data.h" #include "dolphin/types.h" +const char JStudio::fvb::data::ga4cSignature[4] = "FVB"; diff --git a/src/JSystem/JStudio/JStudio/fvb.cpp b/src/JSystem/JStudio/JStudio/fvb.cpp index a6922624f..9aed0f67c 100644 --- a/src/JSystem/JStudio/JStudio/fvb.cpp +++ b/src/JSystem/JStudio/JStudio/fvb.cpp @@ -3,194 +3,481 @@ // Translation Unit: fvb.cpp // -#include "fvb.h" +#include "JSystem/JStudio/JStudio/fvb.h" +#include "JSystem/JStudio/JStudio/fvb-data.h" +#include "JSystem/JUtility/JUTException.h" #include "dolphin/types.h" +#include "string.h" + +namespace JStudio { +namespace fvb { /* 80273964-802739AC .text __dt__Q37JStudio3fvb7TObjectFv */ -JStudio::fvb::TObject::~TObject() { - /* Nonmatching */ -} +TObject::~TObject() {} /* 802739AC-80273BD0 .text prepare__Q37JStudio3fvb7TObjectFRCQ47JStudio3fvb4data13TParse_TBlockPQ37JStudio3fvb8TControl */ -void JStudio::fvb::TObject::prepare(const JStudio::fvb::data::TParse_TBlock&, JStudio::fvb::TControl*) { +void TObject::prepare(const data::TParse_TBlock& rBlock, TControl* pControl) { /* Nonmatching */ + ASSERT(pfv_ != 0); + + ASSERT(pControl != 0); + TFunctionValueAttributeSet set = pfv_->getAttributeSet(); + const void* pNext = rBlock.getNext(); + const void* pData = rBlock.getContent(); + while (pData < pNext) { + data::TParse_TParagraph para(pData); + data::TParse_TParagraph::TData dat; + para.getData(&dat); + u32 u32Type = dat.u32Type; + u32 u32Size = dat.u32Size; + const void* pContent = dat.pContent; + switch (u32Type) { + case 0: + pfv_->prepare(); + return; + case 1: + prepare_data_(dat, pControl); + break; + case 0x10: { + JUT_EXPECT(u32Size >= 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_refer* pfvaRefer = set.refer_get(); + JUT_EXPECT(pfvaRefer != NULL); + if (pfvaRefer == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + JGadget::TVector_pointer& rCnt = pfvaRefer->refer_referContainer(); + data::TParse_TParagraph::TData** pBegin = + (data::TParse_TParagraph::TData**)rCnt.pBegin_; + // todo: these definitely use a different struct + for (data::TParse_TParagraph::TData* i = *pBegin; i != NULL; i = *pBegin) { + TObject* pObject = pControl->getObject(pContent, i->u32Size); + if (pObject == NULL) { + JUTWarn w; + w << "object not found by ID"; + } else { + TFunctionValue* const& rfv = pObject->referFunctionValue(); + rCnt.push_back(rfv); + } + *pBegin += align_roundUp(i->u32Size, 4); + } + } + } break; + case 0x11: { + JUT_EXPECT(u32Size >= 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_refer* pfvaRefer = set.refer_get(); + JUT_EXPECT(pfvaRefer != NULL); + if (pfvaRefer == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + JGadget::TVector_pointer& rCnt = pfvaRefer->refer_referContainer(); + data::TParse_TParagraph::TData** pBegin = + (data::TParse_TParagraph::TData**)rCnt.pBegin_; + for (data::TParse_TParagraph::TData* i = *pBegin; i != NULL; i = *pBegin) { + TObject* pObject = pControl->getObject_index(u32Size); + if (pObject == NULL) { + JUTWarn w; + w << "object not found by index : " << u32Size; + } else { + TFunctionValue* const& rfv = pObject->referFunctionValue(); + rCnt.push_back(rfv); + } + *pBegin += align_roundUp(i->u32Size, 4); + } + } + } break; + case 0x12: { + JUT_EXPECT(u32Size == 8); + ASSERT(pContent != 0); + TFunctionValueAttribute_range* pfvaRange = set.range_get(); + JUT_EXPECT(pfvaRange != NULL); + if (pfvaRange == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + f64* arr = (f64*)pContent; + pfvaRange->range_set(arr[0], arr[1]); + } + } break; + case 0x13: { + JUT_EXPECT(u32Size == 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_range* pfvaRange = set.range_get(); + JUT_EXPECT(pfvaRange != NULL); + if (pfvaRange == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + TFunctionValue::TEProgress prog = *(TFunctionValue::TEProgress*)pContent; + pfvaRange->range_setProgress(prog); + } + } break; + case 0x14: { + JUT_EXPECT(u32Size == 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_range* pfvaRange = set.range_get(); + JUT_EXPECT(pfvaRange != NULL); + if (pfvaRange == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + TFunctionValue::TEAdjust adjust = *(TFunctionValue::TEAdjust*)pContent; + pfvaRange->range_setAdjust(adjust); + } + } break; + case 0x15: { + JUT_EXPECT(u32Size == 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_range* pfvaRange = set.range_get(); + JUT_EXPECT(pfvaRange != NULL); + if (pfvaRange == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + TFunctionValue::TEOutside* out = (TFunctionValue::TEOutside*)pContent; + pfvaRange->range_setOutside(out[0], out[1]); + } + } break; + case 0x16: { + JUT_EXPECT(u32Size == 4); + ASSERT(pContent != 0); + TFunctionValueAttribute_interpolate* pfvaInterpolate = set.interpolate_get(); + JUT_EXPECT(pfvaInterpolate != NULL); + if (pfvaInterpolate == NULL) { + JUTWarn w; + w << "invalid paragraph"; + } else { + TFunctionValue::TEInterpolate interp = *(TFunctionValue::TEInterpolate*)pContent; + pfvaInterpolate->interpolate_set(interp); + } + } break; + default: + JUTWarn w; + w << "unknown paragraph : " << u32Type; + } + ASSERT(pData != 0); + } + JUT_EXPECT(pData == pNext); + pfv_->prepare(); } +namespace { +/* 80273BD0-80273BDC .text getCompositeData_raw___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_raw_(const void* arg1) { + return TFunctionValue_composite::TData(*(const void**)arg1); +} +/* 80273BDC-80273BE8 .text getCompositeData_index___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_index_(const void* arg1) { + return TFunctionValue_composite::TData(*(u32*)arg1); +} +/* 80273BE8-80273BF4 .text getCompositeData_parameter___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_parameter_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); +} +/* 80273BF4-80273C00 .text getCompositeData_add___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_add_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); +} +/* 80273C00-80273C0C .text getCompositeData_subtract___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_subtract_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); +} +/* 80273C0C-80273C18 .text getCompositeData_multiply___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_multiply_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); +} +/* 80273C18-80273C24 .text getCompositeData_divide___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ +TFunctionValue_composite::TData getCompositeData_divide_(const void* arg1) { + /* Nonmatching */ + return TFunctionValue_composite::TData(*(f32*)arg1); +} + +// TODO +static data::CompositeOperation saCompositeOperation_[8]; + +/* 80273C24-80273C38 .text getCompositeOperation___Q37JStudio3fvb17@unnamed@fvb_cpp@FQ47JStudio3fvb4data11TEComposite */ +data::CompositeOperation* getCompositeOperation_(data::TEComposite r3) { + return &saCompositeOperation_[r3*2]; +} + +} // namespace /* 80273C38-80273CB8 .text __ct__Q37JStudio3fvb17TObject_compositeFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_composite::TObject_composite(const JStudio::fvb::data::TParse_TBlock&) { +TObject_composite::TObject_composite(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80273CB8-80273D1C .text prepare_data___Q37JStudio3fvb17TObject_compositeFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb17TObject_compositeFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { +void TObject_composite::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { /* Nonmatching */ + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32Size == 8); + + const TFunctionValue_composite* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + data::CompositeOperation* ops = getCompositeOperation_(*(data::TEComposite*)pContent); + data::CompositeOperation pfn = ops[1]; + + ASSERT(pfn != NULL); + + pfn(pContent->data); + fnValue.data_set((TFunctionValue_composite::CompositeFunc)*ops, pContent->data); } /* 80273D1C-80273D9C .text __ct__Q37JStudio3fvb16TObject_constantFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_constant::TObject_constant(const JStudio::fvb::data::TParse_TBlock&) { +TObject_constant::TObject_constant(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80273D9C-80273DAC .text prepare_data___Q37JStudio3fvb16TObject_constantFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb16TObject_constantFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { - /* Nonmatching */ +void TObject_constant::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32Size == 4); + + const f32* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_set(pContent[0]); } /* 80273DAC-80273E2C .text __ct__Q37JStudio3fvb18TObject_transitionFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_transition::TObject_transition(const JStudio::fvb::data::TParse_TBlock&) { +TObject_transition::TObject_transition(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80273E2C-80273E44 .text prepare_data___Q37JStudio3fvb18TObject_transitionFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb18TObject_transitionFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { - /* Nonmatching */ +void TObject_transition::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32size == 8); + + const f32* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_set(pContent[0], pContent[1]); } /* 80273E44-80273EC4 .text __ct__Q37JStudio3fvb12TObject_listFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_list::TObject_list(const JStudio::fvb::data::TParse_TBlock&) { +TObject_list::TObject_list(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80273EC4-80273EE4 .text prepare_data___Q37JStudio3fvb12TObject_listFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb12TObject_listFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { - /* Nonmatching */ +void TObject_list::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32size >= 8); + + const ListData* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_setInterval(pContent->_0); + fnValue.data_set(pContent->_8, pContent->_4); } /* 80273EE4-80273F64 .text __ct__Q37JStudio3fvb22TObject_list_parameterFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_list_parameter::TObject_list_parameter(const JStudio::fvb::data::TParse_TBlock&) { +TObject_list_parameter::TObject_list_parameter(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80273F64-80273F94 .text prepare_data___Q37JStudio3fvb22TObject_list_parameterFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb22TObject_list_parameterFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { - /* Nonmatching */ +void TObject_list_parameter::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32size >= 8); + + const ListData* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_set(pContent->_4, pContent->_0); } /* 80273F94-80274014 .text __ct__Q37JStudio3fvb15TObject_hermiteFRCQ47JStudio3fvb4data13TParse_TBlock */ -JStudio::fvb::TObject_hermite::TObject_hermite(const JStudio::fvb::data::TParse_TBlock&) { +TObject_hermite::TObject_hermite(const data::TParse_TBlock& block) : TObject(block, &fnValue) { /* Nonmatching */ } /* 80274014-8027404C .text prepare_data___Q37JStudio3fvb15TObject_hermiteFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ -void prepare_data___Q37JStudio3fvb15TObject_hermiteFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl { - /* Nonmatching */ +void TObject_hermite::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); + + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32size >= 8); + + const ListData* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_set(pContent->_4, pContent->_0 & 0xFFFFFFF, pContent->_0 >> 0x1C); } /* 8027404C-8027407C .text __ct__Q37JStudio3fvb8TControlFv */ -JStudio::fvb::TControl::TControl() { - /* Nonmatching */ -} +TControl::TControl() : pFactory(NULL) {} /* 8027407C-802740E8 .text __dt__Q37JStudio3fvb8TControlFv */ -JStudio::fvb::TControl::~TControl() { - /* Nonmatching */ -} +TControl::~TControl() {} /* 802740E8-80274134 .text appendObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject */ -void JStudio::fvb::TControl::appendObject(JStudio::fvb::TObject*) { +void TControl::appendObject(TObject*) { /* Nonmatching */ } /* 80274134-80274164 .text removeObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject */ -void JStudio::fvb::TControl::removeObject(JStudio::fvb::TObject*) { +void TControl::removeObject(TObject*) { /* Nonmatching */ } /* 80274164-802741B4 .text destroyObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject */ -void JStudio::fvb::TControl::destroyObject(JStudio::fvb::TObject*) { +void TControl::destroyObject(TObject*) { /* Nonmatching */ } /* 802741B4-80274218 .text destroyObject_all__Q37JStudio3fvb8TControlFv */ -void JStudio::fvb::TControl::destroyObject_all() { +void TControl::destroyObject_all() { /* Nonmatching */ } /* 80274218-802742B8 .text getObject__Q37JStudio3fvb8TControlFPCvUl */ -void JStudio::fvb::TControl::getObject(const void*, unsigned long) { +TObject* TControl::getObject(const void*, u32) { /* Nonmatching */ } /* 802742B8-802742FC .text getObject_index__Q37JStudio3fvb8TControlFUl */ -void JStudio::fvb::TControl::getObject_index(unsigned long) { +TObject* TControl::getObject_index(u32) { /* Nonmatching */ } /* 802742FC-80274344 .text __dt__Q37JStudio3fvb8TFactoryFv */ -JStudio::fvb::TFactory::~TFactory() { - /* Nonmatching */ -} +TFactory::~TFactory() {} /* 80274344-80274484 .text create__Q37JStudio3fvb8TFactoryFRCQ47JStudio3fvb4data13TParse_TBlock */ -void JStudio::fvb::TFactory::create(const JStudio::fvb::data::TParse_TBlock&) { - /* Nonmatching */ +TObject* TFactory::create(const data::TParse_TBlock& rBlock) { + switch (rBlock.get_type()) { + case 1: + return new TObject_composite(rBlock); + case 2: + return new TObject_constant(rBlock); + case 3: + return new TObject_transition(rBlock); + case 4: + return new TObject_list(rBlock); + case 5: + return new TObject_list_parameter(rBlock); + case 6: + return new TObject_hermite(rBlock); + default: + JUTWarn w; + w << "unknown type : "; + return NULL; + } } /* 80274484-802744C0 .text destroy__Q37JStudio3fvb8TFactoryFPQ37JStudio3fvb7TObject */ -void JStudio::fvb::TFactory::destroy(JStudio::fvb::TObject*) { - /* Nonmatching */ +void TFactory::destroy(TObject* pObject) { + delete pObject; } /* 802744C0-802744E0 .text __ct__Q37JStudio3fvb6TParseFPQ37JStudio3fvb8TControl */ -JStudio::fvb::TParse::TParse(JStudio::fvb::TControl*) { - /* Nonmatching */ -} +TParse::TParse(TControl* pControl) : pControl_(pControl) {} /* 802744E0-80274540 .text __dt__Q37JStudio3fvb6TParseFv */ -JStudio::fvb::TParse::~TParse() { - /* Nonmatching */ -} +TParse::~TParse() {} /* 80274540-802745D4 .text parseHeader_next__Q37JStudio3fvb6TParseFPPCvPUlUl */ -void JStudio::fvb::TParse::parseHeader_next(const void**, unsigned long*, unsigned long) { - /* Nonmatching */ +bool TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 flags) { + ASSERT(ppData_inout != 0); + ASSERT(puBlock_out != 0); + + const void* pData = *ppData_inout; + ASSERT(pData != 0); + + const data::TParse_THeader header(pData); + *ppData_inout = header.getContent(); + *puBlock_out = header.get_blockNumber(); + + if (memcmp(header.get_signature(), &data::ga4cSignature, 4) != 0) { + JUTWarn w; + w << "unknown signature"; + return false; + } + + if (header.get_byteOrder() != 0xFEFF) { + JUTWarn w; + w << "illegal byte-order"; + return false; + } + u16 version = header.get_version(); + if (version < 2) { + JUTWarn w; + w << "obselete version : " << (long)0; + return false; + } else if (version > 0x100) { + JUTWarn w; + w << "unknown version : " << version; + return false; + } + return true; } /* 802745D4-802746C8 .text parseBlock_next__Q37JStudio3fvb6TParseFPPCvPUlUl */ -void JStudio::fvb::TParse::parseBlock_next(const void**, unsigned long*, unsigned long) { - /* Nonmatching */ -} - -/* 802746C8-8027474C .text __dt__Q37JStudio3fvb15TObject_hermiteFv */ -JStudio::fvb::TObject_hermite::~TObject_hermite() { - /* Nonmatching */ -} - -/* 8027474C-802747D0 .text __dt__Q37JStudio3fvb22TObject_list_parameterFv */ -JStudio::fvb::TObject_list_parameter::~TObject_list_parameter() { - /* Nonmatching */ -} - -/* 802747D0-80274854 .text __dt__Q37JStudio3fvb12TObject_listFv */ -JStudio::fvb::TObject_list::~TObject_list() { - /* Nonmatching */ -} - -/* 80274854-802748D8 .text __dt__Q37JStudio3fvb18TObject_transitionFv */ -JStudio::fvb::TObject_transition::~TObject_transition() { - /* Nonmatching */ -} - -/* 802748D8-8027495C .text __dt__Q37JStudio3fvb16TObject_constantFv */ -JStudio::fvb::TObject_constant::~TObject_constant() { - /* Nonmatching */ -} - -/* 8027495C-802749FC .text __dt__Q37JStudio3fvb17TObject_compositeFv */ -JStudio::fvb::TObject_composite::~TObject_composite() { - /* Nonmatching */ -} - -/* 802749FC-80274A90 .text find_if8iterator,Q37JStudio6object18TPRObject_ID_equal>__3stdFQ37JGadget37TLinkList8iteratorQ37JGadget37TLinkList8iteratorQ37JStudio6object18TPRObject_ID_equal */ -void find_if8iterator,Q37JStudio6object18TPRObject_ID_equal>__3stdFQ37JGadget37TLinkList8iteratorQ37JGadget37TLinkList8iteratorQ37JStudio6object18TPRObject_ID_equal { - /* Nonmatching */ +bool TParse::parseBlock_next(const void** ppData_inout, u32* puData_out, u32 flags) { + ASSERT(ppData_inout != 0); + ASSERT(puData_out != 0); + + const void* pData = *ppData_inout; + ASSERT(pData != 0); + data::TParse_TBlock blk(pData); + *ppData_inout = blk.getNext(); + *puData_out = blk.get_size(); + + TControl* pControl = getControl(); + ASSERT(pControl != 0); + + if (flags & 0x10) { + if (pControl->getObject(blk.get_ID(), blk.get_IDSize()) != NULL) + return true; + } + if (flags & 0x20) { + return true; + } + + TFactory* pFactory = pControl->getFactory(); + if (pFactory == NULL) { + JUTWarn w; + w << "factory not specified"; + return false; + } + + TObject* pObject = pFactory->create(blk); + if (pObject == NULL) { + JUTWarn w; + w << "can't create function-value"; + if (flags & 0x40) { + return true; + } + return false; + } + pObject->prepare(blk, pControl); + pControl->appendObject(pObject); + return true; } +} // namespace fvb +} // namespace JStudio diff --git a/src/JSystem/JStudio/JStudio/jstudio-data.cpp b/src/JSystem/JStudio/JStudio/jstudio-data.cpp index a1044d4df..c9676df18 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-data.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-data.cpp @@ -3,6 +3,7 @@ // Translation Unit: jstudio-data.cpp // -#include "jstudio-data.h" +#include "JSystem/JStudio/JStudio/jstudio-data.h" #include "dolphin/types.h" +const char JStudio::data::ga8cSignature[8] = "jstudio"; diff --git a/src/JSystem/JStudio/JStudio/jstudio-object.cpp b/src/JSystem/JStudio/JStudio/jstudio-object.cpp index 181e3bc2c..01cf7e542 100644 --- a/src/JSystem/JStudio/JStudio/jstudio-object.cpp +++ b/src/JSystem/JStudio/JStudio/jstudio-object.cpp @@ -3,32 +3,34 @@ // Translation Unit: jstudio-object.cpp // -#include "jstudio-object.h" +#include "JSystem/JStudio/JStudio/jstudio-object.h" #include "dolphin/types.h" /* 8026E8F8-8026E940 .text __dt__Q37JStudio14TVariableValue7TOutputFv */ -JStudio::TVariableValue::TOutput::~TOutput() { - /* Nonmatching */ -} +JStudio::TVariableValue::TOutput::~TOutput() {} /* 8026E940-8026E9A4 .text update__Q27JStudio14TVariableValueFdPQ27JStudio8TAdaptor */ -void JStudio::TVariableValue::update(double, JStudio::TAdaptor*) { - /* Nonmatching */ +void JStudio::TVariableValue::update(f64 param_0, JStudio::TAdaptor* param_1) { + if (field_0x8) { + field_0x8(this, param_0); + (*pOutput_)(mValue, param_1); + } } /* 8026E9A4-8026E9B8 .text update_immediate___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued */ -void update_immediate___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued { - /* Nonmatching */ +void JStudio::TVariableValue::update_immediate_(JStudio::TVariableValue* param_0, f64 param_1) { + param_0->mValue = param_0->field_0xc.val; + param_0->field_0x8 = NULL; } /* 8026E9B8-8026E9F4 .text update_time___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued */ -void update_time___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued { - /* Nonmatching */ +void JStudio::TVariableValue::update_time_(JStudio::TVariableValue* param_0, f64 param_1) { + param_0->mValue = param_0->field_0xc.val * (param_0->field_0x4 * param_1); } /* 8026E9F4-8026EA58 .text update_functionValue___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued */ -void update_functionValue___Q27JStudio14TVariableValueFPQ27JStudio14TVariableValued { - /* Nonmatching */ +void JStudio::TVariableValue::update_functionValue_(JStudio::TVariableValue* param_0, f64 param_1) { + param_0->mValue = param_0->field_0xc.fv->getValue(param_0->field_0x4 * param_1); } /* 8026EA58-8026EAB8 .text __dt__Q37JStudio14TVariableValue13TOutput_none_Fv */ @@ -37,327 +39,333 @@ JStudio::TVariableValue::TOutput_none_::~TOutput_none_() { } /* 8026EAB8-8026EABC .text __cl__Q37JStudio14TVariableValue13TOutput_none_CFfPQ27JStudio8TAdaptor */ -void JStudio::TVariableValue::TOutput_none_::operator()(float, JStudio::TAdaptor*) const { - /* Nonmatching */ -} +void JStudio::TVariableValue::TOutput_none_::operator()(f32 param_0, JStudio::TAdaptor* param_1) const {} /* 8026EABC-8026EB04 .text __dt__Q27JStudio8TAdaptorFv */ -JStudio::TAdaptor::~TAdaptor() { - /* Nonmatching */ -} +JStudio::TAdaptor::~TAdaptor() {} /* 8026EB04-8026EB08 .text adaptor_do_prepare__Q27JStudio8TAdaptorFPCQ27JStudio7TObject */ -void JStudio::TAdaptor::adaptor_do_prepare(const JStudio::TObject*) { - /* Nonmatching */ -} +void JStudio::TAdaptor::adaptor_do_prepare(const JStudio::TObject* param_0) {} /* 8026EB08-8026EB0C .text adaptor_do_begin__Q27JStudio8TAdaptorFPCQ27JStudio7TObject */ -void JStudio::TAdaptor::adaptor_do_begin(const JStudio::TObject*) { - /* Nonmatching */ -} +void JStudio::TAdaptor::adaptor_do_begin(const JStudio::TObject* param_0) {} /* 8026EB0C-8026EB10 .text adaptor_do_end__Q27JStudio8TAdaptorFPCQ27JStudio7TObject */ -void JStudio::TAdaptor::adaptor_do_end(const JStudio::TObject*) { - /* Nonmatching */ -} +void JStudio::TAdaptor::adaptor_do_end(const JStudio::TObject* param_0) {} /* 8026EB10-8026EB14 .text adaptor_do_update__Q27JStudio8TAdaptorFPCQ27JStudio7TObjectUl */ -void JStudio::TAdaptor::adaptor_do_update(const JStudio::TObject*, unsigned long) { - /* Nonmatching */ -} +void JStudio::TAdaptor::adaptor_do_update(const JStudio::TObject* param_0, u32 param_1) {} /* 8026EB14-8026EB18 .text adaptor_do_data__Q27JStudio8TAdaptorFPCQ27JStudio7TObjectPCvUlPCvUl */ -void JStudio::TAdaptor::adaptor_do_data(const JStudio::TObject*, const void*, unsigned long, const void*, unsigned long) { - /* Nonmatching */ -} +void JStudio::TAdaptor::adaptor_do_data(const JStudio::TObject* param_0, const void* param_1, u32 param_2, const void* param_3, u32 param_4) {} /* 8026EB18-8026EBB8 .text adaptor_setVariableValue__Q27JStudio8TAdaptorFPQ27JStudio7TObjectUlQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio::TAdaptor::adaptor_setVariableValue(JStudio::TObject*, unsigned long, JStudio::data::TEOperationData, const void*, unsigned long) { +void JStudio::TAdaptor::adaptor_setVariableValue(JStudio::TObject* pObject, u32 param_2, JStudio::data::TEOperationData param_3, const void* param_4, u32 param_5) { /* Nonmatching */ + setVarFunc func; + switch (param_3) { + case JStudio::data::UNK_0x1: + func = &adaptor_setVariableValue_VOID_; + break; + case JStudio::data::UNK_0x2: + func = &adaptor_setVariableValue_IMMEDIATE_; + break; + case JStudio::data::UNK_0x3: + func = &adaptor_setVariableValue_TIME_; + break; + case JStudio::data::UNK_0x10: + func = &adaptor_setVariableValue_FVR_NAME_; + break; + case JStudio::data::UNK_0x12: + func = &adaptor_setVariableValue_FVR_INDEX_; + break; + default: + return; + } + + (*func)(this, pObject, param_2, param_4, param_5); } /* 8026EBB8-8026ECAC .text adaptor_setVariableValue_n__Q27JStudio8TAdaptorFPQ27JStudio7TObjectPCUlUlQ37JStudio4data15TEOperationDataPCvUl */ -void JStudio::TAdaptor::adaptor_setVariableValue_n(JStudio::TObject*, const unsigned long*, unsigned long, JStudio::data::TEOperationData, const void*, unsigned long) { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_n(JStudio::TObject* pObject, const u32* param_2, u32 param_3, JStudio::data::TEOperationData param_4, const void* param_5, u32 param_6) { + setVarFunc pcVar6; + u32 iVar7; + switch(param_4) { + case JStudio::data::UNK_0x1: + iVar7 = 0; + pcVar6 = adaptor_setVariableValue_VOID_; + break; + case JStudio::data::UNK_0x2: + iVar7 = 4; + pcVar6 = adaptor_setVariableValue_IMMEDIATE_; + break; + case JStudio::data::UNK_0x3: + iVar7 = 4; + pcVar6 = adaptor_setVariableValue_TIME_; + break; + case JStudio::data::UNK_0x12: + iVar7 = 4; + pcVar6 = adaptor_setVariableValue_FVR_INDEX_; + break; + default: + return; + } + + JGadget::TEnumerator enumerator(param_2, param_2 + param_3); + while (enumerator) { + (*pcVar6)(this, pObject, **enumerator, param_5, iVar7); + param_5 = (const void*)((int)param_5 + iVar7); + } } /* 8026ECAC-8026ECF0 .text adaptor_setVariableValue_immediate__Q27JStudio8TAdaptorFPCQ37JStudio8TAdaptor27TSetVariableValue_immediate */ -void JStudio::TAdaptor::adaptor_setVariableValue_immediate(const JStudio::TAdaptor::TSetVariableValue_immediate*) { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_immediate(const JStudio::TAdaptor::TSetVariableValue_immediate* param_0) { + u32 uVar1; + while ((uVar1 = param_0->field_0x0) != 0xffffffff) { + adaptor_setVariableValue_immediate(uVar1, param_0->field_0x4); + param_0++; + } } /* 8026ECF0-8026ED60 .text adaptor_setVariableValue_Vec__Q27JStudio8TAdaptorFPCUlRC3Vec */ -void JStudio::TAdaptor::adaptor_setVariableValue_Vec(const unsigned long*, const Vec&) { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_Vec(const u32* puIndex, const Vec& param_2) { + adaptor_referVariableValue(puIndex[0])->setValue_immediate(param_2.x); + adaptor_referVariableValue(puIndex[1])->setValue_immediate(param_2.y); + adaptor_referVariableValue(puIndex[2])->setValue_immediate(param_2.z); } /* 8026ED60-8026EDA0 .text adaptor_getVariableValue_Vec__Q27JStudio8TAdaptorCFP3VecPCUl */ -void JStudio::TAdaptor::adaptor_getVariableValue_Vec(Vec*, const unsigned long*) const { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_getVariableValue_Vec(Vec* param_1, const u32* param_2) const { + param_1->x = adaptor_getVariableValue(param_2[0])->getValue(); + param_1->y = adaptor_getVariableValue(param_2[1])->getValue(); + param_1->z = adaptor_getVariableValue(param_2[2])->getValue(); } /* 8026EDA0-8026EE80 .text adaptor_setVariableValue_GXColor__Q27JStudio8TAdaptorFPCUlRC8_GXColor */ -void JStudio::TAdaptor::adaptor_setVariableValue_GXColor(const unsigned long*, const _GXColor&) { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_GXColor(const u32* puIndex, const GXColor& param_2) { + adaptor_referVariableValue(puIndex[0])->setValue_immediate(param_2.r); + adaptor_referVariableValue(puIndex[1])->setValue_immediate(param_2.g); + adaptor_referVariableValue(puIndex[2])->setValue_immediate(param_2.b); + adaptor_referVariableValue(puIndex[3])->setValue_immediate(param_2.a); } /* 8026EE80-8026EFCC .text adaptor_getVariableValue_GXColor__Q27JStudio8TAdaptorCFP8_GXColorPCUl */ -void JStudio::TAdaptor::adaptor_getVariableValue_GXColor(_GXColor*, const unsigned long*) const { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_getVariableValue_GXColor(GXColor* param_1, const u32* param_2) const { + param_1->r = adaptor_getVariableValue(param_2[0])->getValue_uint8(); + param_1->g = adaptor_getVariableValue(param_2[1])->getValue_uint8(); + param_1->b = adaptor_getVariableValue(param_2[2])->getValue_uint8(); + param_1->a = adaptor_getVariableValue(param_2[3])->getValue_uint8(); } /* 8026EFCC-8026F064 .text adaptor_updateVariableValue__Q27JStudio8TAdaptorFPQ27JStudio7TObjectUl */ -void JStudio::TAdaptor::adaptor_updateVariableValue(JStudio::TObject*, unsigned long) { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_updateVariableValue(JStudio::TObject* pObject, u32 param_2) { + TControl* pControl = pObject->getControl(); + f64 dVar3 = pControl->getSecondPerFrame(); + JGadget::TEnumerator enumerator(pValue_, pValue_ + u); + while (enumerator) { + JStudio::TVariableValue* value = *enumerator; + value->forward(param_2); + value->update(dVar3, this); + } } /* 8026F064-8026F07C .text adaptor_setVariableValue_VOID___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl */ -void adaptor_setVariableValue_VOID___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_VOID_(JStudio::TAdaptor* param_1, JStudio::TObject* param_2, u32 param_3, const void* param_4, u32 uSize) { + param_1->pValue_[param_3].setValue_none(); } /* 8026F07C-8026F0A8 .text adaptor_setVariableValue_IMMEDIATE___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl */ -void adaptor_setVariableValue_IMMEDIATE___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_IMMEDIATE_(JStudio::TAdaptor* param_1, JStudio::TObject* param_2, u32 param_3, const void* param_4, u32 param_5) { + TVariableValue* value = ¶m_1->pValue_[param_3]; + value->setValue_immediate(*(f32*)param_4); } /* 8026F0A8-8026F0D4 .text adaptor_setVariableValue_TIME___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl */ -void adaptor_setVariableValue_TIME___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_TIME_(JStudio::TAdaptor* param_1, JStudio::TObject* param_2, u32 param_3, const void* param_4, u32 param_5) { + TVariableValue* value = ¶m_1->pValue_[param_3]; + value->setValue_time(*(f32*)param_4); } /* 8026F0D4-8026F144 .text adaptor_setVariableValue_FVR_NAME___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl */ -void adaptor_setVariableValue_FVR_NAME___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_FVR_NAME_(JStudio::TAdaptor* param_1, JStudio::TObject* param_2, u32 param_3, const void* param_4, u32 param_5) { + TVariableValue* value = ¶m_1->pValue_[param_3]; + value->setValue_functionValue(param_2->getControl()->getFunctionValue(param_4,param_5)); } /* 8026F144-8026F1B0 .text adaptor_setVariableValue_FVR_INDEX___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl */ -void adaptor_setVariableValue_FVR_INDEX___Q27JStudio8TAdaptorFPQ27JStudio8TAdaptorPQ27JStudio7TObjectUlPCvUl { - /* Nonmatching */ +void JStudio::TAdaptor::adaptor_setVariableValue_FVR_INDEX_(JStudio::TAdaptor* param_1, JStudio::TObject* param_2, u32 param_3, const void* param_4, u32 param_5) { + TVariableValue* value = ¶m_1->pValue_[param_3]; + value->setValue_functionValue(param_2->getControl()->getFunctionValue_index(*(u32*)param_4)); } /* 8026F1B0-8026F234 .text __dt__Q27JStudio7TObjectFv */ JStudio::TObject::~TObject() { - /* Nonmatching */ + delete mpAdaptor; } /* 8026F234-8026F2A0 .text forward_value__Q27JStudio7TObjectFUl */ -void JStudio::TObject::forward_value(unsigned long) { - /* Nonmatching */ +void JStudio::TObject::forward_value(u32 param_0) { + TAdaptor* adaptor = getAdaptor(); + if (adaptor != NULL) { + adaptor->adaptor_updateVariableValue(this, param_0); + adaptor->adaptor_do_update(this, param_0); + } } /* 8026F2A0-8026F2DC .text do_begin__Q27JStudio7TObjectFv */ void JStudio::TObject::do_begin() { - /* Nonmatching */ + TAdaptor* adaptor = getAdaptor(); + if (adaptor != NULL) { + adaptor->adaptor_do_begin(this); + } } /* 8026F2DC-8026F318 .text do_end__Q27JStudio7TObjectFv */ void JStudio::TObject::do_end() { - /* Nonmatching */ + TAdaptor* adaptor = getAdaptor(); + if (adaptor != NULL) { + adaptor->adaptor_do_end(this); + } } /* 8026F318-8026F338 .text do_wait__Q27JStudio7TObjectFUl */ -void JStudio::TObject::do_wait(unsigned long) { - /* Nonmatching */ +void JStudio::TObject::do_wait(u32 param_0) { + forward_value(param_0); } /* 8026F338-8026F394 .text do_data__Q27JStudio7TObjectFPCvUlPCvUl */ -void JStudio::TObject::do_data(const void*, unsigned long, const void*, unsigned long) { - /* Nonmatching */ +void JStudio::TObject::do_data(const void* param_0, u32 param_1, const void* param_2, u32 param_3) { + TAdaptor* adaptor = getAdaptor(); + if (adaptor != NULL) { + adaptor->adaptor_do_data(this, param_0, param_1, param_2, param_3); + } } /* 8026F394-8026F3E0 .text __ct__Q27JStudio7TObjectFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio8TAdaptor */ -JStudio::TObject::TObject(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor*) { - /* Nonmatching */ -} +JStudio::TObject::TObject(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor* param_1) : stb::TObject(param_0), mpAdaptor(param_1) {} /* 8026F3E0-8026F440 .text __dt__Q27JStudio14TAdaptor_actorFv */ -JStudio::TAdaptor_actor::~TAdaptor_actor() { - /* Nonmatching */ -} +JStudio::TAdaptor_actor::~TAdaptor_actor() {} /* 8026F440-8026F47C .text __ct__Q27JStudio13TObject_actorFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_actor */ -JStudio::TObject_actor::TObject_actor(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_actor*) { - /* Nonmatching */ -} +JStudio::TObject_actor::TObject_actor(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_actor* param_1) : TObject(param_0, param_1) {} /* 8026F47C-8026F7B0 .text do_paragraph__Q27JStudio13TObject_actorFUlPCvUl */ -void JStudio::TObject_actor::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_actor::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 8026F7B0-8026F810 .text __dt__Q27JStudio21TAdaptor_ambientLightFv */ -JStudio::TAdaptor_ambientLight::~TAdaptor_ambientLight() { - /* Nonmatching */ -} +JStudio::TAdaptor_ambientLight::~TAdaptor_ambientLight() {} /* 8026F810-8026F84C .text __ct__Q27JStudio20TObject_ambientLightFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio21TAdaptor_ambientLight */ -JStudio::TObject_ambientLight::TObject_ambientLight(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_ambientLight*) { - /* Nonmatching */ -} +JStudio::TObject_ambientLight::TObject_ambientLight(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_ambientLight* param_1) : TObject(param_0, param_1) {} /* 8026F84C-8026F928 .text do_paragraph__Q27JStudio20TObject_ambientLightFUlPCvUl */ -void JStudio::TObject_ambientLight::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_ambientLight::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 8026F928-8026F988 .text __dt__Q27JStudio15TAdaptor_cameraFv */ -JStudio::TAdaptor_camera::~TAdaptor_camera() { - /* Nonmatching */ -} +JStudio::TAdaptor_camera::~TAdaptor_camera() {} /* 8026F988-8026F9C4 .text __ct__Q27JStudio14TObject_cameraFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio15TAdaptor_camera */ -JStudio::TObject_camera::TObject_camera(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_camera*) { - /* Nonmatching */ -} +JStudio::TObject_camera::TObject_camera(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_camera* param_1) : TObject(param_0, param_1) {} /* 8026F9C4-8026FBFC .text do_paragraph__Q27JStudio14TObject_cameraFUlPCvUl */ -void JStudio::TObject_camera::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_camera::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 8026FBFC-8026FC5C .text __dt__Q27JStudio12TAdaptor_fogFv */ -JStudio::TAdaptor_fog::~TAdaptor_fog() { - /* Nonmatching */ -} +JStudio::TAdaptor_fog::~TAdaptor_fog() {} /* 8026FC5C-8026FC98 .text __ct__Q27JStudio11TObject_fogFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio12TAdaptor_fog */ -JStudio::TObject_fog::TObject_fog(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_fog*) { - /* Nonmatching */ -} +JStudio::TObject_fog::TObject_fog(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_fog* param_1) : TObject(param_0, param_1) {} /* 8026FC98-8026FD80 .text do_paragraph__Q27JStudio11TObject_fogFUlPCvUl */ -void JStudio::TObject_fog::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_fog::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 8026FD80-8026FDE0 .text __dt__Q27JStudio14TAdaptor_lightFv */ -JStudio::TAdaptor_light::~TAdaptor_light() { - /* Nonmatching */ -} +JStudio::TAdaptor_light::~TAdaptor_light() {} /* 8026FDE0-8026FE1C .text __ct__Q27JStudio13TObject_lightFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_light */ -JStudio::TObject_light::TObject_light(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_light*) { - /* Nonmatching */ -} +JStudio::TObject_light::TObject_light(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_light* param_1) : TObject(param_0, param_1) {} /* 8026FE1C-80270058 .text do_paragraph__Q27JStudio13TObject_lightFUlPCvUl */ -void JStudio::TObject_light::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_light::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 80270058-802700B8 .text __dt__Q27JStudio16TAdaptor_messageFv */ -JStudio::TAdaptor_message::~TAdaptor_message() { - /* Nonmatching */ -} +JStudio::TAdaptor_message::~TAdaptor_message() {} /* 802700B8-802700F4 .text __ct__Q27JStudio15TObject_messageFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio16TAdaptor_message */ -JStudio::TObject_message::TObject_message(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_message*) { - /* Nonmatching */ -} +JStudio::TObject_message::TObject_message(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_message* param_1) : TObject(param_0, param_1) {} /* 802700F4-80270184 .text do_paragraph__Q27JStudio15TObject_messageFUlPCvUl */ -void JStudio::TObject_message::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_message::do_paragraph(u32 param_1, const void* param_2, u32 param_3) { /* Nonmatching */ + TAdaptor* adaptor = getAdaptor(); + if (adaptor != NULL) { + u32 uVar1 = (param_1 >> 5); + param_1 &= 0x1f; + paragraphFunc pmfn_ = NULL; + switch (uVar1) { + case 0x42: + pmfn_ = &TObject::do_paragraph; + break; + default: + return; + } + (((TObject*)adaptor)->*pmfn_)(param_1, param_2, param_3); + } } /* 80270184-802701E4 .text __dt__Q27JStudio17TAdaptor_particleFv */ -JStudio::TAdaptor_particle::~TAdaptor_particle() { - /* Nonmatching */ -} +JStudio::TAdaptor_particle::~TAdaptor_particle() {} /* 802701E4-80270220 .text __ct__Q27JStudio16TObject_particleFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio17TAdaptor_particle */ -JStudio::TObject_particle::TObject_particle(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_particle*) { - /* Nonmatching */ -} +JStudio::TObject_particle::TObject_particle(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_particle* param_1) : TObject(param_0, param_1) {} /* 80270220-802704E4 .text do_paragraph__Q27JStudio16TObject_particleFUlPCvUl */ -void JStudio::TObject_particle::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_particle::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 802704E4-80270544 .text __dt__Q27JStudio14TAdaptor_soundFv */ -JStudio::TAdaptor_sound::~TAdaptor_sound() { - /* Nonmatching */ -} +JStudio::TAdaptor_sound::~TAdaptor_sound() {} /* 80270544-80270580 .text __ct__Q27JStudio13TObject_soundFRCQ47JStudio3stb4data20TParse_TBlock_objectPQ27JStudio14TAdaptor_sound */ -JStudio::TObject_sound::TObject_sound(const JStudio::stb::data::TParse_TBlock_object&, JStudio::TAdaptor_sound*) { - /* Nonmatching */ -} +JStudio::TObject_sound::TObject_sound(const JStudio::stb::data::TParse_TBlock_object& param_0, JStudio::TAdaptor_sound* param_1) : TObject(param_0, param_1) {} /* 80270580-80270778 .text do_paragraph__Q27JStudio13TObject_soundFUlPCvUl */ -void JStudio::TObject_sound::do_paragraph(unsigned long, const void*, unsigned long) { +void JStudio::TObject_sound::do_paragraph(u32, const void*, u32) { /* Nonmatching */ } /* 80270778-802707D8 .text __dt__Q27JStudio13TObject_soundFv */ -JStudio::TObject_sound::~TObject_sound() { - /* Nonmatching */ -} +JStudio::TObject_sound::~TObject_sound() {} /* 802707D8-80270838 .text __dt__Q27JStudio16TObject_particleFv */ -JStudio::TObject_particle::~TObject_particle() { - /* Nonmatching */ -} +JStudio::TObject_particle::~TObject_particle() {} /* 80270838-80270898 .text __dt__Q27JStudio15TObject_messageFv */ -JStudio::TObject_message::~TObject_message() { - /* Nonmatching */ -} +JStudio::TObject_message::~TObject_message() {} /* 80270898-802708F8 .text __dt__Q27JStudio13TObject_lightFv */ -JStudio::TObject_light::~TObject_light() { - /* Nonmatching */ -} +JStudio::TObject_light::~TObject_light() {} /* 802708F8-80270958 .text __dt__Q27JStudio11TObject_fogFv */ -JStudio::TObject_fog::~TObject_fog() { - /* Nonmatching */ -} +JStudio::TObject_fog::~TObject_fog() {} /* 80270958-802709B8 .text __dt__Q27JStudio14TObject_cameraFv */ -JStudio::TObject_camera::~TObject_camera() { - /* Nonmatching */ -} +JStudio::TObject_camera::~TObject_camera() {} /* 802709B8-80270A18 .text __dt__Q27JStudio20TObject_ambientLightFv */ -JStudio::TObject_ambientLight::~TObject_ambientLight() { - /* Nonmatching */ -} +JStudio::TObject_ambientLight::~TObject_ambientLight() {} /* 80270A18-80270A78 .text __dt__Q27JStudio13TObject_actorFv */ -JStudio::TObject_actor::~TObject_actor() { - /* Nonmatching */ -} - -/* 80270C74-80270CD4 .text __dt__Q37JStudio28@unnamed@jstudio_object_cpp@54TOutputVariableValue_BOOL_Fv */ -JStudio::@unnamed@jstudio_object_cpp@::TOutputVariableValue_BOOL_::~TOutputVariableValue_BOOL_() { - /* Nonmatching */ -} - -/* 80270CD4-80270D34 .text __dt__Q37JStudio28@unnamed@jstudio_object_cpp@57TOutputVariableValue_BOOL_Fv */ -JStudio::@unnamed@jstudio_object_cpp@::TOutputVariableValue_BOOL_::~TOutputVariableValue_BOOL_() { - /* Nonmatching */ -} - -/* 80270D34-80270D94 .text __dt__Q37JStudio28@unnamed@jstudio_object_cpp@54TOutputVariableValue_BOOL_Fv */ -JStudio::@unnamed@jstudio_object_cpp@::TOutputVariableValue_BOOL_::~TOutputVariableValue_BOOL_() { - /* Nonmatching */ -} - -/* 80270D94-80270DF4 .text __dt__Q37JStudio28@unnamed@jstudio_object_cpp@55TOutputVariableValue_BOOL_Fv */ -JStudio::@unnamed@jstudio_object_cpp@::TOutputVariableValue_BOOL_::~TOutputVariableValue_BOOL_() { - /* Nonmatching */ -} - -/* 80270DF4-80270E54 .text __dt__Q37JStudio28@unnamed@jstudio_object_cpp@54TOutputVariableValue_BOOL_Fv */ -JStudio::@unnamed@jstudio_object_cpp@::TOutputVariableValue_BOOL_::~TOutputVariableValue_BOOL_() { - /* Nonmatching */ -} - - - - - - +JStudio::TObject_actor::~TObject_actor() {} diff --git a/src/JSystem/JStudio/JStudio/object-id.cpp b/src/JSystem/JStudio/JStudio/object-id.cpp index 0a5a78e5b..6db0d9727 100644 --- a/src/JSystem/JStudio/JStudio/object-id.cpp +++ b/src/JSystem/JStudio/JStudio/object-id.cpp @@ -3,11 +3,52 @@ // Translation Unit: object-id.cpp // -#include "object-id.h" +#include "JSystem/JStudio/JStudio/object-id.h" #include "dolphin/types.h" /* 80274AF8-80274BE8 .text isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData */ -void JStudio::object::TIDData::isEqual(const JStudio::object::TIDData&, const JStudio::object::TIDData&) { - /* Nonmatching */ -} +bool JStudio::object::TIDData::isEqual(const JStudio::object::TIDData& a, const JStudio::object::TIDData& b) { + /* Nonmatching - regalloc */ + if (a.getIDSize() != b.getIDSize()) { + return false; + } + u32 bytesRemaining = a.mID_size; + const void* aStr = a.getID(); + u32* aStr32 = (u32*)aStr; + const void* bStr = b.getID(); + u32* bStr32 = (u32*)bStr; + if (aStr == bStr) { // mismatch here + // they point to the same id + return true; + } + + for (bytesRemaining; bytesRemaining >= 4; bytesRemaining -= 4, aStr32++, bStr32++) { + if (*aStr32 != *bStr32) { + return false; + } + } + + u8* aStrBytes = (u8*)aStr32; + u8* bStrBytes = (u8*)bStr32; + switch (bytesRemaining) { + case 3: + if (*aStrBytes != *bStrBytes) { + return false; + } + aStrBytes++; + bStrBytes++; + case 2: + if (*aStrBytes != *bStrBytes) { + return false; + } + aStrBytes++; + bStrBytes++; + case 1: + if (*aStrBytes != *bStrBytes) { + return false; + } + } + + return true; +}