From c4ef30bc95d3e69eb84cb5efa76598bb6e900662 Mon Sep 17 00:00:00 2001 From: notyourav <65437533+notyourav@users.noreply.github.com> Date: Fri, 26 Nov 2021 06:50:22 -0800 Subject: [PATCH] Port JStudio work to new branch (#160) * build fix * stb * functionvalue * fvb * jstudio cleanup * d --- include/JSystem/JGadget/binary.h | 48 + include/JSystem/JGadget/linklist.h | 19 +- include/JSystem/JGadget/search.h | 19 + include/JSystem/JGadget/vector.h | 71 + .../JSystem/JStudio/JStudio/functionvalue.h | 386 ++++++ .../JSystem/JStudio/JStudio/fvb-data-parse.h | 48 +- include/JSystem/JStudio/JStudio/fvb-data.h | 59 +- include/JSystem/JStudio/JStudio/fvb.h | 155 ++- include/JSystem/JStudio/JStudio/object-id.h | 23 + .../JSystem/JStudio/JStudio/stb-data-parse.h | 106 +- include/JSystem/JStudio/JStudio/stb-data.h | 63 + include/JSystem/JStudio/JStudio/stb.h | 150 +- libs/JSystem/JGadget/binary.cpp | 27 +- libs/JSystem/JGadget/linklist.cpp | 3 +- libs/JSystem/JMessage/resource.cpp | 20 +- libs/JSystem/JStudio/JStudio/Makefile | 4 + libs/JSystem/JStudio/JStudio/ctb.cpp | 29 +- .../JStudio/JStudio/functionvalue-inline.cpp | 44 + .../JSystem/JStudio/JStudio/functionvalue.cpp | 1202 +++++++---------- .../JStudio/JStudio/fvb-data-parse.cpp | 24 - libs/JSystem/JStudio/JStudio/fvb-data.cpp | 10 - libs/JSystem/JStudio/JStudio/fvb-inline.cpp | 31 + libs/JSystem/JStudio/JStudio/fvb.cpp | 877 ++++++------ .../JStudio/JStudio/jstudio-control.cpp | 70 +- .../JStudio/JStudio/jstudio-object.cpp | 22 +- libs/JSystem/JStudio/JStudio/object-id.cpp | 10 - .../JStudio/JStudio/stb-data-parse.cpp | 154 +-- libs/JSystem/JStudio/JStudio/stb-data.cpp | 46 +- libs/JSystem/JStudio/JStudio/stb.cpp | 847 ++++++------ .../JStudio/JStudio_JParticle/control.cpp | 8 +- rel/d/a/d_a_title/d_a_title.cpp | 1 + src/d/a/d_a_alink.cpp | 15 +- src/d/d_demo.cpp | 38 +- src/d/msg/d_msg_object.cpp | 16 +- src/d/msg/d_msg_string_base.cpp | 16 +- 35 files changed, 2540 insertions(+), 2121 deletions(-) create mode 100644 include/JSystem/JGadget/search.h create mode 100644 include/JSystem/JGadget/vector.h create mode 100644 libs/JSystem/JStudio/JStudio/functionvalue-inline.cpp create mode 100644 libs/JSystem/JStudio/JStudio/fvb-inline.cpp diff --git a/include/JSystem/JGadget/binary.h b/include/JSystem/JGadget/binary.h index b1a7e3ea766..abbe3f79952 100644 --- a/include/JSystem/JGadget/binary.h +++ b/include/JSystem/JGadget/binary.h @@ -3,4 +3,52 @@ #include "dolphin/types.h" +namespace JGadget { +namespace binary { + +struct TEBit { + u32 value; +}; + +const void* parseVariableUInt_16_32_following(const void* pu16, u32* pu32First, u32* pu32Second, + TEBit* tebit); + +inline u32 align_roundUp(u32 arg0, u32 uAlign) { + return (arg0 + uAlign - 1) & ~(uAlign - 1); +} + +struct TParseData { + TParseData(const void* pContent) : raw(pContent) {} + + const void* getRaw() const { return raw; } + void setRaw(const void* p) { raw = p; } + + const void* raw; +}; + +template +struct TParseData_aligned : public TParseData { + TParseData_aligned(const void* pContent) : TParseData(pContent) {} + void setRaw(const void* p) { + if ((u32)p % T != 0) { + JUTWarn w; + w << "misaligned : " << (u32)p; + } + static_cast(this)->setRaw(p); + } +}; + +// Base for header and/or block parsing +struct TParse_header_block { + virtual ~TParse_header_block(); + + 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; + + bool parse_next(const void** ppData_inout, u32 a2); +}; + +} // namespace binary +} // namespace JGadget + #endif /* BINARY_H */ diff --git a/include/JSystem/JGadget/linklist.h b/include/JSystem/JGadget/linklist.h index fb7c08e8e8f..d71734e8f94 100644 --- a/include/JSystem/JGadget/linklist.h +++ b/include/JSystem/JGadget/linklist.h @@ -22,15 +22,15 @@ struct TNodeLinkList { TLinkListNode* node; }; - TNodeLinkList() : mListNode() { Initialize_(); } + TNodeLinkList() : ocObject_() { Initialize_(); } void Initialize_() { ptr = NULL; - mListNode.mNext = &mListNode; - mListNode.mPrev = &mListNode; + ocObject_.mNext = &ocObject_; + ocObject_.mPrev = &ocObject_; } iterator end() { - iterator iter(&mListNode); + iterator iter(&ocObject_); return iter; } @@ -40,11 +40,11 @@ struct TNodeLinkList { /* 802DCB08 */ void splice(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList&, JGadget::TNodeLinkList::iterator); /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - /* 802DCBD4 */ void Erase(JGadget::TLinkListNode*); + /* 802DCBD4 */ iterator Erase(JGadget::TLinkListNode*); /* 802DCBF8 */ void Remove(JGadget::TLinkListNode*); /* 0x00 */ TNodeLinkList* ptr; - /* 0x04 */ TLinkListNode mListNode; + /* 0x04 */ TLinkListNode ocObject_; }; // Size: 0xC template @@ -55,13 +55,18 @@ struct TLinkList : public TNodeLinkList { iterator(TNodeLinkList::iterator iter) : TNodeLinkList::iterator(iter) {} }; - TLinkListNode* Element_toNode(T* element) const { return &element->mListNode; } + TLinkListNode* Element_toNode(T* element) const { return &element->ocObject_; } void Insert(TLinkList::iterator iter, T* element) { TLinkListNode* node = Element_toNode(element); TNodeLinkList::Insert(iter, node); } + iterator Erase(T* element) { + TLinkListNode* node = Element_toNode(element); + return ((TNodeLinkList*)this)->Erase(node); + } + TLinkList::iterator end() { TNodeLinkList::iterator node_iter = TNodeLinkList::end(); TLinkList::iterator iter(node_iter); diff --git a/include/JSystem/JGadget/search.h b/include/JSystem/JGadget/search.h new file mode 100644 index 00000000000..a7b3510800e --- /dev/null +++ b/include/JSystem/JGadget/search.h @@ -0,0 +1,19 @@ +#ifndef SEARCH_H +#define SEARCH_H + +#include "global.h" + +namespace JGadget { + +//! @todo: mangled name isn't correct, fix this +//! Current: toValueFromIndex__7JGadgetFiPCPFdd_dUlRCPFdd_d +//! Target: toValueFromIndex__7JGadgetFiPCPFdd_dUlRCPFdd_d_RCPFdd_d +template +inline const T& toValueFromIndex(int idx, const T* pValue, u32 count, const T& fallback) { + ASSERT(pValue != NULL); + return (idx >= count) ? fallback : pValue[idx]; +} + +} // namespace JGadget + +#endif /* SEARCH_H */ diff --git a/include/JSystem/JGadget/vector.h b/include/JSystem/JGadget/vector.h new file mode 100644 index 00000000000..636ac909ccc --- /dev/null +++ b/include/JSystem/JGadget/vector.h @@ -0,0 +1,71 @@ +#ifndef VECTOR_H +#define VECTOR_H + +#include "global.h" + +extern u8 data_804511E0; +extern u8 lit_569[]; + +namespace JGadget { + +namespace vector { + +u32 extend_default(u32 arg1, u32 arg2, u32 arg3); + +typedef u32 (*ExtendFunc)(u32, u32, u32); + +} // namespace vector + +template +struct TAllocator { + static TAllocator get() {} + inline TAllocator() { _0 = lit_569[0]; } + /* 0x0 */ u8 _0; + /* 0x4 */ u32 _4; + /* 0x8 */ u32 _8; + /* 0xc */ u32 _c; +}; + +template class Allocator> +struct TVector { + TVector(Allocator alloc) { + _0 = NULL; + pBegin_ = _0; + _c = NULL; + extend = vector::extend_default; + } + + void** begin() { return pBegin_; } + void** end() { return pEnd_; } + // void erase(void** arg1, void** arg2) {} + + void** _0; + void** pBegin_; + void** pEnd_; + u32 _c; + vector::ExtendFunc extend; +}; + +struct TVector_pointer_void : TVector { + /* 802DCCD0 */ TVector_pointer_void(JGadget::TAllocator const&); + /* 802DCCFC */ ~TVector_pointer_void(); + /* 802DCDC4 */ void erase(void**, void**); + void insert(void**, void* const&); + + void clear() { erase(begin(), end()); } + void push_back(const void*& ref) { insert(end(), (void* const&)ref); } +}; + +template +struct TVector_pointer : TVector_pointer_void { + // TVector_pointer(const TAllocator& allocator) : TVector_pointer_void(allocator) {} + ~TVector_pointer() {} + + void push_back(const T& ref) { + static_cast(this)->push_back((const void*&)ref); + } +}; + +} // namespace JGadget + +#endif /* VECTOR_H */ \ No newline at end of file diff --git a/include/JSystem/JStudio/JStudio/functionvalue.h b/include/JSystem/JStudio/JStudio/functionvalue.h index 4c5b74e2329..35d849e27cc 100644 --- a/include/JSystem/JStudio/JStudio/functionvalue.h +++ b/include/JSystem/JStudio/JStudio/functionvalue.h @@ -1,6 +1,392 @@ #ifndef FUNCTIONVALUE_H #define FUNCTIONVALUE_H +#include "JSystem/JGadget/search.h" +#include "JSystem/JGadget/vector.h" #include "dolphin/types.h" +extern u8 lit_652[]; + +namespace JStudio { + +typedef f64 (*ExtrapolateParameter)(f64, f64); + +class TFunctionValue; +class TFunctionValueAttributeSet; + +class TFunctionValueAttribute_refer; +class TFunctionValueAttribute_range; +class TFunctionValueAttribute_interpolate; + +class TFunctionValue { +public: + enum TEProgress { PROG_INIT }; + enum TEAdjust { ADJ_INIT }; + enum TEOutside { OUT_INIT }; + enum TEInterpolate {}; + + /* 80281690 */ TFunctionValue(); + /* 802816A0 */ virtual ~TFunctionValue() = 0; + + virtual u32 getType() const = 0; + virtual TFunctionValueAttributeSet getAttributeSet() = 0; + virtual void initialize() = 0; + virtual void prepare() = 0; + virtual f64 getValue(f64 arg1) = 0; + + /* 80281648 */ static ExtrapolateParameter toFunction_outside(int); + + static ExtrapolateParameter toFunction(TFunctionValue::TEOutside outside) { + return toFunction_outside(outside); + } +}; + +class TFunctionValueAttributeSet_const { +public: + TFunctionValueAttributeSet_const(TFunctionValueAttribute_refer* refer, + TFunctionValueAttribute_range* range, + TFunctionValueAttribute_interpolate* interp) + : refer_(refer), range_(range), interp_(interp) {} + + TFunctionValueAttribute_refer* refer_get() const { return refer_; } + TFunctionValueAttribute_range* range_get() const { return range_; } + TFunctionValueAttribute_interpolate* interpolate_get() const { return interp_; } + +private: + /* 0x00 */ TFunctionValueAttribute_refer* refer_; + /* 0x04 */ TFunctionValueAttribute_range* range_; + /* 0x08 */ TFunctionValueAttribute_interpolate* interp_; +}; + +class TFunctionValueAttributeSet : public TFunctionValueAttributeSet_const { +public: + TFunctionValueAttributeSet(TFunctionValueAttribute_refer* refer, + TFunctionValueAttribute_range* range, + TFunctionValueAttribute_interpolate* interp) + : TFunctionValueAttributeSet_const(refer, range, interp) {} + + TFunctionValueAttribute_refer* refer_get() const { + return static_cast(this)->refer_get(); + } + TFunctionValueAttribute_range* range_get() const { + return static_cast(this)->range_get(); + } + TFunctionValueAttribute_interpolate* interpolate_get() const { + return static_cast(this)->interpolate_get(); + } +}; + +class TFunctionValueAttribute_refer : public JGadget::TVector_pointer { +public: + // TFunctionValueAttribute_refer() : + // JGadget::TVector_pointer(JGadget::TAllocator()) {} + ~TFunctionValueAttribute_refer() {} + + /* 802816E8 */ void refer_initialize(); + + const TFunctionValueAttribute_refer* refer_getContainer() const { return this; } + JGadget::TVector_pointer& refer_referContainer() { return *this; } + bool refer_isReferring(const TFunctionValue* p) const { return false; } // todo +}; + +class TFunctionValueAttribute_range { +public: + /* 80281D18 */ TFunctionValueAttribute_range(); + + /* 80281918 */ void range_initialize(); + /* 8028194C */ void range_prepare(); + /* 802819F4 */ void range_set(f64, f64); + /* 80281A08 */ f64 range_getParameter(f64, f64, f64) const; + + TFunctionValue::TEProgress range_getProgress() const { + return (TFunctionValue::TEProgress)mProgress; + } + void range_setProgress(TFunctionValue::TEProgress progress) { mProgress = progress; } + TFunctionValue::TEAdjust range_getAdjust() const { return (TFunctionValue::TEAdjust)mAdjust; } + void range_setAdjust(TFunctionValue::TEAdjust adjust) { mAdjust = adjust; } + void range_setOutside(TFunctionValue::TEOutside outside) { range_setOutside(outside, outside); } + void range_setOutside(TFunctionValue::TEOutside begin, TFunctionValue::TEOutside end) { + range_setOutside_begin(begin); + range_setOutside_end(end); + } + void range_setOutside_begin(TFunctionValue::TEOutside begin) { mBegin = begin; } + void range_setOutside_end(TFunctionValue::TEOutside end) { mEnd = end; } + f64 range_getParameter_outside(f64 arg1) const { + f64 temp = arg1 - fBegin_; + f64 result = temp; + if (temp < *(f64*)&lit_652) { + result = TFunctionValue::toFunction(mBegin)(temp, fDifference_); + } else if (temp >= fDifference_) { + result = TFunctionValue::toFunction(mEnd)(temp, fDifference_); + } + return result + fBegin_; + } + f64 range_getParameter_progress(f64 arg1) const { return _20 + _28 * (arg1 - _20); } + +private: + /* 0x00 */ f64 fBegin_; + /* 0x08 */ f64 fEnd_; + /* 0x10 */ f64 fDifference_; + /* 0x18 */ s8 mProgress; + /* 0x19 */ s8 mAdjust; + /* 0x1A */ s8 _1a[2]; + /* 0x1C */ u32 _1c; + /* 0x20 */ f64 _20; + /* 0x28 */ f64 _28; + /* 0x30 */ TFunctionValue::TEOutside mBegin; + /* 0x34 */ TFunctionValue::TEOutside mEnd; +}; + +class TFunctionValueAttribute_interpolate { +public: + TFunctionValueAttribute_interpolate() : interpolate_(0) {} + + void interpolate_initialize() { interpolate_ = 0; } + void interpolate_prepare() {} + u32 interpolate_get() const { return interpolate_; } + void interpolate_set(TFunctionValue::TEInterpolate interpolate) { interpolate_ = interpolate; } + +private: + /* 0x0 */ u32 interpolate_; +}; + +class TFunctionValue_constant : public TFunctionValue { +public: + /* 8028236C */ TFunctionValue_constant(); + /* 80283D44 */ virtual ~TFunctionValue_constant() {} + + /* 802823B4 */ virtual u32 getType() const; + /* 802823BC */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 802823D0 */ virtual void initialize(); + /* 802823E0 */ virtual void prepare(); + /* 802823E4 */ virtual f64 getValue(f64); + + void data_set(f64 value) { fValue_ = value; } + +private: + f64 fValue_; +}; + +class TFunctionValue_composite : TFunctionValue, TFunctionValueAttribute_refer { +public: + struct TData { + TData(void* data) : u32data((u32)data) {} + TData(const void* data) : rawData(data) {} + TData(u32 data) : u32data(data) {} + TData(f32 data) : f32data(data) {} + + inline void operator=(const TData& rhs) { f32data = rhs.f32data; } + + union { + const void* rawData; + u32 u32data; + f64 f32data; + }; + }; + typedef f64 (*UnkFunc)(f64, const TFunctionValueAttribute_refer*, + const TFunctionValue_composite::TData*); + typedef f64 (*CompositeFunc)(const JGadget::TVector_pointer&, + const TFunctionValue_composite::TData&, f64); + + /* 80281D5C */ TFunctionValue_composite(); + /* 80283DA4 */ virtual ~TFunctionValue_composite() {} + + /* 80281DB8 */ virtual u32 getType() const; + /* 80281DC0 */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 80281DE0 */ virtual void initialize(); + /* 80281E24 */ virtual void prepare(); + /* 80281E28 */ virtual f64 getValue(f64); + /* 80281E5C */ void composite_raw(TVector_pointer const&, TData const&, f64); + /* 80281EC8 */ void composite_index(TVector_pointer const&, TData const&, f64); + /* 8028202C */ void composite_parameter(TVector_pointer const&, TData const&, + f64); + /* 80282094 */ void composite_add(TVector_pointer const&, + TData const&, f64); + /* 80282118 */ void composite_subtract(TVector_pointer const&, TData const&, + f64); + /* 80282200 */ void composite_multiply(TVector_pointer const&, TData const&, + f64); + /* 80282284 */ void composite_divide(TVector_pointer const&, TData const&, + f64); + + void data_set(CompositeFunc fn, const TData& dat) { + pfn_ = (UnkFunc)fn; + data_setData(dat); + } + const TData* data_getData() const { return &data; } + void data_setData(const TData& dat) { data = dat; } + +private: + UnkFunc pfn_; + TData data; +}; + +class TFunctionValue_transition : TFunctionValue, + TFunctionValueAttribute_range, + TFunctionValueAttribute_interpolate { +public: + /* 802823EC */ TFunctionValue_transition(); + /* 80283CE4 */ virtual ~TFunctionValue_transition() {} + + /* 8028244C */ virtual u32 getType() const; + /* 80282454 */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 80282484 */ virtual void initialize(); + /* 802824D0 */ virtual void prepare(); + /* 802824F4 */ virtual f64 getValue(f64); + + void data_set(f64 a1, f64 a2) { + _48 = a1; + _50 = a2; + } + +private: + /* 0x48 */ f64 _48; + /* 0x50 */ f64 _50; +}; + +class TFunctionValue_list : TFunctionValue, + TFunctionValueAttribute_range, + TFunctionValueAttribute_interpolate { +public: + struct TIndexData_ { + f64 _0; + f64 _8; + u32 _10; + }; + typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list&, const TIndexData_&); + + /* 802826BC */ TFunctionValue_list(); + virtual ~TFunctionValue_list() {} + + /* 80282720 */ virtual u32 getType() const; + /* 80282728 */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 80282758 */ virtual void initialize(); + /* 802827A8 */ virtual void prepare(); + /* 80282858 */ virtual f64 getValue(f64); + + void data_set(const f32* pf, u32 u) { + ASSERT((pf != NULL) || (u == 0)); + _44 = pf; + _48 = u; + } + + void data_setInterval(f64 f) { + ASSERT(f > TValue(0)); + _50 = f; + } + + /* 80282C10 */ static f64 + update_INTERPOLATE_NONE_(JStudio::TFunctionValue_list const&, + JStudio::TFunctionValue_list::TIndexData_ const&); + /* 80282C24 */ static f64 + update_INTERPOLATE_LINEAR_(JStudio::TFunctionValue_list const&, + JStudio::TFunctionValue_list::TIndexData_ const&); + /* 80282C58 */ static f64 + update_INTERPOLATE_PLATEAU_(JStudio::TFunctionValue_list const&, + JStudio::TFunctionValue_list::TIndexData_ const&); + /* 80282CA8 */ static f64 + update_INTERPOLATE_BSPLINE_dataMore3_(JStudio::TFunctionValue_list const&, + JStudio::TFunctionValue_list::TIndexData_ const&); + +private: + /* 0x44 */ const f32* _44; + /* 0x48 */ u32 _48; + /* 0x50 */ f64 _50; + /* 0x58 */ update_INTERPOLATE _58; +}; + +class TFunctionValue_list_parameter : TFunctionValue, + TFunctionValueAttribute_range, + TFunctionValueAttribute_interpolate { +public: + struct TIterator_data_ { + TIterator_data_(const f32* value) : value_(value) {} + TIterator_data_(const TIterator_data_& other) : value_(other.value_) {} + + void operator=(const TIterator_data_& rhs) { value_ = rhs.value_; } + + const f32* get() const { return value_; } + void set(const f32* value) { value_ = value; } + + const f32* value_; + }; + typedef f64 (*update_INTERPOLATE)(const TFunctionValue_list_parameter&, f64); + + /* 80282D34 */ TFunctionValue_list_parameter(); + /* 80283C24 */ virtual ~TFunctionValue_list_parameter() {} + + /* 80282DA0 */ virtual u32 getType() const; + /* 80282DA8 */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 80282DD8 */ void data_set(f32 const*, u32); + /* 80282E08 */ virtual void initialize(); + /* 80282E60 */ virtual void prepare(); + /* 80282F10 */ virtual f64 getValue(f64); + + /* 80282FE8 */ static f64 + update_INTERPOLATE_NONE_(JStudio::TFunctionValue_list_parameter const&, f64); + /* 80282FF4 */ static f64 + update_INTERPOLATE_LINEAR_(JStudio::TFunctionValue_list_parameter const&, f64); + /* 80283024 */ static f64 + update_INTERPOLATE_PLATEAU_(JStudio::TFunctionValue_list_parameter const&, f64); + /* 80283060 */ static f64 + update_INTERPOLATE_BSPLINE_dataMore3_(JStudio::TFunctionValue_list_parameter const&, f64); + +private: + /* 0x44 */ const f32* _44; + /* 0x48 */ u32 _48; + /* 0x4c */ TIterator_data_ dat1; + /* 0x50 */ TIterator_data_ dat2; + /* 0x54 */ TIterator_data_ dat3; + /* 0x58 */ update_INTERPOLATE _58; +}; + +class TFunctionValue_hermite : TFunctionValue, TFunctionValueAttribute_range { +public: + struct TIterator_data_ { + TIterator_data_(const TFunctionValue_hermite& rParent, const f32* value) { + value_ = value; + size_ = rParent.data_getSize(); + } + TIterator_data_(const TIterator_data_& other) { + value_ = other.value_; + size_ = other.size_; + } + + void set(const f32* value, u32 size) { + value_ = value; + size_ = size; + } + + void operator=(const TIterator_data_& rhs) { + value_ = rhs.value_; + size_ = rhs.size_; + } + + /* 0x00 */ const f32* value_; + /* 0x04 */ u32 size_; + }; + + /* 802832C4 */ TFunctionValue_hermite(); + /* 80283BC4 */ virtual ~TFunctionValue_hermite() {} + + /* 80283344 */ virtual u32 getType() const; + /* 8028334C */ virtual TFunctionValueAttributeSet getAttributeSet(); + /* 8028336C */ void data_set(f32 const*, u32, u32); + /* 802833BC */ virtual void initialize(); + /* 80283428 */ virtual void prepare(); + /* 8028344C */ virtual f64 getValue(f64); + + u32 data_getSize() const { return uSize_; } + +private: + /* 0x40 */ const f32* pf_; + /* 0x44 */ u32 u_; + /* 0x48 */ u32 uSize_; + /* 0x4c */ TIterator_data_ dat1; + /* 0x50 */ TIterator_data_ dat2; + /* 0x54 */ TIterator_data_ dat3; +}; + +} // namespace JStudio + #endif /* FUNCTIONVALUE_H */ diff --git a/include/JSystem/JStudio/JStudio/fvb-data-parse.h b/include/JSystem/JStudio/JStudio/fvb-data-parse.h index af8faac0812..93e6ba3b11c 100644 --- a/include/JSystem/JStudio/JStudio/fvb-data-parse.h +++ b/include/JSystem/JStudio/JStudio/fvb-data-parse.h @@ -1,6 +1,52 @@ #ifndef FVB_DATA_PARSE_H #define FVB_DATA_PARSE_H -#include "dolphin/types.h" +#include "JSystem/JStudio/JStudio/fvb-data.h" + +namespace JStudio { +namespace fvb { +namespace data { + +class TParse_TBlock : public TParseData_aligned<4> { +public: + TParse_TBlock(const void* content) : TParseData_aligned<4>(content) {} + + const TBlock* get() const { return (TBlock*)getRaw(); } + + u32 get_size() const { return get()->size; } + const void* getNext() const { + u32 size = get_size(); + return (const void*)((u8*)getRaw() + size); + } + u16 get_type() const { return get()->type; } + u16 get_IDSize() const { return get()->id_size; } + const void* getBlockEnd_() const { return (u8*)getRaw() + sizeof(TBlock); } + const void* get_ID() const { + const void* ret = 0; + if (get_IDSize()) + ret = getBlockEnd_(); + return ret; + } + const void* getContent() const { + u32 size = align_roundUp(get_IDSize(), 4); + return (const void*)((int)getBlockEnd_() + size); + } +}; + +class TParse_TParagraph : public TParseData_aligned<4> { +public: + struct TData { + /* 0x04 */ u32 u32Size; + /* 0x08 */ u32 u32Type; + /* 0x0C */ const void* pContent; + }; + TParse_TParagraph(const void* content) : TParseData_aligned<4>(content) {} + + /* 802850AC */ void getData(JStudio::fvb::data::TParse_TParagraph::TData*) const; +}; + +} // namespace data +} // namespace fvb +} // namespace JStudio #endif /* FVB_DATA_PARSE_H */ diff --git a/include/JSystem/JStudio/JStudio/fvb-data.h b/include/JSystem/JStudio/JStudio/fvb-data.h index 7615b985b6a..bbc3a5d3130 100644 --- a/include/JSystem/JStudio/JStudio/fvb-data.h +++ b/include/JSystem/JStudio/JStudio/fvb-data.h @@ -1,6 +1,63 @@ #ifndef FVB_DATA_H #define FVB_DATA_H -#include "dolphin/types.h" +#include "JSystem/JGadget/binary.h" +#include "JSystem/JStudio/JStudio/functionvalue.h" + +using namespace JGadget::binary; + +namespace JStudio { +namespace fvb { +namespace data { + +extern f32 ga4cSignature[1 + 1 /* padding */]; + +const int PARAGRAPH_DATA = 1; + +typedef enum TEComposite { + /* 0x0 */ COMPOSITE_NONE, + /* 0x1 */ COMPOSITE_RAW, + /* 0x2 */ COMPOSITE_IDX, + /* 0x3 */ COMPOSITE_PARAM, + /* 0x4 */ COMPOSITE_ADD, + /* 0x5 */ COMPOSITE_SUB, + /* 0x6 */ COMPOSITE_MUL, + /* 0x7 */ COMPOSITE_DIV, + /* 0x8 */ COMPOSITE_ENUM_SIZE, +}; + +typedef const void* (*CompositeOperation)(TFunctionValue_composite::TData); + +struct TBlock { + /* 0x0 */ u32 size; + /* 0x4 */ u16 type; + /* 0x6 */ u16 id_size; + /* 0x8 */ u8 id[0]; +}; + +struct THeader { + /* 0x00 */ char signature[4]; + /* 0x04 */ u16 byte_order; // must be 0xFEFF + /* 0x06 */ u16 version; // 0-1 = obselete, 2-7 = OK + /* 0x08 */ u32 _8; + /* 0x0C */ u32 block_number; + /* 0x10 */ u8 content[0]; +}; +// Parses a THeader +class TParse_THeader : public TParseData_aligned<4> { +public: + TParse_THeader(const void* p) : TParseData_aligned<4>(p) {} + + const THeader* get() const { return (THeader*)getRaw(); } + const void* getContent() const { return ((THeader*)getRaw())->content; } + const char* get_signature() const { return get()->signature; } + u16 get_byteOrder() const { return get()->byte_order; } + u16 get_version() const { return get()->version; } + u32 get_blockNumber() const { return get()->block_number; } +}; + +} // namespace data +} // namespace fvb +} // namespace JStudio #endif /* FVB_DATA_H */ diff --git a/include/JSystem/JStudio/JStudio/fvb.h b/include/JSystem/JStudio/JStudio/fvb.h index 1cb30da71d8..4303b96c141 100644 --- a/include/JSystem/JStudio/JStudio/fvb.h +++ b/include/JSystem/JStudio/JStudio/fvb.h @@ -1,6 +1,159 @@ #ifndef FVB_H #define FVB_H -#include "dolphin/types.h" +#include "JSystem/JGadget/linklist.h" +#include "JSystem/JStudio/JStudio/fvb-data-parse.h" +#include "JSystem/JStudio/JStudio/object-id.h" +#include "global.h" + +namespace JStudio { +namespace fvb { + +class TControl; + +class TParse : public TParse_header_block { +public: + /* 80284ADC */ TParse(JStudio::fvb::TControl*); + /* 80284AFC */ virtual ~TParse(); + /* 80284B5C */ virtual bool parseHeader_next(void const**, u32*, u32); + /* 80284BF0 */ virtual bool parseBlock_next(void const**, u32*, u32); + + TControl* getControl() const { return pControl_; } + +private: + TControl* pControl_; +}; + +class TObject : public object::TObject_ID { +public: + TObject(const data::TParse_TBlock& block); + TObject(void const* id, u32 id_size, TFunctionValue* value); + + explicit TObject(const data::TParse_TBlock& block, TFunctionValue* value) + : TObject_ID(block.get_ID(), block.get_IDSize()), pfv_(value) { + ASSERT(pfv_ != NULL); + } + + virtual ~TObject() = 0; + + virtual void prepare_data_(const data::TParse_TParagraph::TData& data, TControl* control) = 0; + + void prepare(const data::TParse_TBlock& block, TControl* control); + + TFunctionValue* const& referFunctionValue() { return pfv_; } + +private: + /* 0x0C */ JGadget::TLinkListNode mNode; + /* 0x14 */ TFunctionValue* pfv_; +}; + +class TFactory { +public: + /* 80284918 */ virtual ~TFactory(); + + /* 80284960 */ virtual TObject* create(JStudio::fvb::data::TParse_TBlock const&); + /* 80284AA0 */ virtual void destroy(JStudio::fvb::TObject*); +}; + +class TControl { +public: + /* 80284668 */ TControl(); + /* 80284698 */ virtual ~TControl(); + + /* 80284704 */ void appendObject(JStudio::fvb::TObject*); + /* 80284750 */ void removeObject(JStudio::fvb::TObject*); + /* 80284780 */ void destroyObject(JStudio::fvb::TObject*); + /* 802847D0 */ void destroyObject_all(); + /* 80284834 */ TObject* getObject(void const*, u32); + /* 802848D4 */ TObject* getObject_index(u32); + + TFactory* getFactory() const { return pFactory; } + +private: + TFactory* pFactory; + JGadget::TLinkList ocObject_; +}; + +class TObject_composite : public TObject { +public: + /* 80284254 */ TObject_composite(JStudio::fvb::data::TParse_TBlock const&); + /* 802842D4 */ virtual void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, + JStudio::fvb::TControl*); + /* 80284F78 */ virtual ~TObject_composite() {} + +private: + TFunctionValue_composite fnValue; +}; + +class TObject_constant : public TObject { +public: + /* 80284338 */ TObject_constant(data::TParse_TBlock const&); + /* 80284EF4 */ virtual ~TObject_constant() {} + + /* 802843B8 */ virtual void prepare_data_(data::TParse_TParagraph::TData const&, TControl*); + +private: + TFunctionValue_constant fnValue; +}; + +class TObject_transition : public TObject { +public: + /* 802843C8 */ TObject_transition(data::TParse_TBlock const&); + /* 80284E70 */ virtual ~TObject_transition() {} + + /* 80284448 */ virtual void prepare_data_(data::TParse_TParagraph::TData const&, TControl*); + +private: + TFunctionValue_transition fnValue; +}; + +class TObject_list : public TObject { +public: + struct ListData { + /* 0x0 */ f32 _0; + /* 0x4 */ u32 _4; + /* 0x8 */ f32 _8[0]; + }; + /* 80284460 */ TObject_list(data::TParse_TBlock const&); + /* 80284DEC */ virtual ~TObject_list() {} + + /* 802844E0 */ virtual void prepare_data_(data::TParse_TParagraph::TData const&, TControl*); + +private: + TFunctionValue_list fnValue; +}; + +class TObject_list_parameter : public TObject { +public: + struct ListData { + u32 _0; + f32 _4[0]; + }; + /* 80284500 */ TObject_list_parameter(data::TParse_TBlock const&); + /* 80284D68 */ virtual ~TObject_list_parameter() {} + + /* 80284580 */ virtual void prepare_data_(data::TParse_TParagraph::TData const&, TControl*); + +private: + TFunctionValue_list_parameter fnValue; +}; + +struct TObject_hermite : public TObject { +public: + struct ListData { + u32 _0; // u : 28, uSize : 4 + f32 _4[0]; + }; + /* 802845B0 */ TObject_hermite(data::TParse_TBlock const&); + /* 80284CE4 */ virtual ~TObject_hermite() {} + + /* 80284630 */ virtual void prepare_data_(data::TParse_TParagraph::TData const&, TControl*); + +private: + TFunctionValue_hermite fnValue; +}; + +} // namespace fvb +} // namespace JStudio #endif /* FVB_H */ diff --git a/include/JSystem/JStudio/JStudio/object-id.h b/include/JSystem/JStudio/JStudio/object-id.h index a0cc9f90240..28864fc5dcc 100644 --- a/include/JSystem/JStudio/JStudio/object-id.h +++ b/include/JSystem/JStudio/JStudio/object-id.h @@ -3,4 +3,27 @@ #include "dolphin/types.h" +namespace JStudio { +namespace object { + +struct TPRObject_ID_equal {}; + +struct TIDData { +public: + TIDData(const void* id, u32 id_size) : mID(id), mID_size(id_size) {} + + /* 80288988 */ void isEqual(JStudio::object::TIDData const&, JStudio::object::TIDData const&); + +private: + const void* mID; + u32 mID_size; +}; + +struct TObject_ID : public TIDData { + TObject_ID(const void* id, u32 id_size) : TIDData(id, id_size) {} +}; + +} // namespace object +} // namespace JStudio + #endif /* OBJECT_ID_H */ diff --git a/include/JSystem/JStudio/JStudio/stb-data-parse.h b/include/JSystem/JStudio/JStudio/stb-data-parse.h index 3b11abf40b9..ef96a0d35fa 100644 --- a/include/JSystem/JStudio/JStudio/stb-data-parse.h +++ b/include/JSystem/JStudio/JStudio/stb-data-parse.h @@ -1,6 +1,110 @@ #ifndef STB_DATA_PARSE_H #define STB_DATA_PARSE_H -#include "dolphin/types.h" +#include "JSystem/JGadget/binary.h" +#include "JSystem/JStudio/JStudio/stb-data.h" + +using namespace JGadget::binary; + +namespace JStudio { +namespace stb { +namespace data { + +// Parses a THeader +class TParse_THeader : public TParseData_aligned<4> { +public: + TParse_THeader(const void* p) : TParseData_aligned<4>(p) {} + + const THeader* get() const { return (THeader*)getRaw(); } + const void* getContent() const { return ((THeader*)getRaw())->content; } + const char* get_signature() const { return get()->signature; } + u16 get_byteOrder() const { return get()->byte_order; } + u16 get_version() const { return get()->version; } + u32 get_blockNumber() const { return get()->block_number; } +}; + +class TParse_TBlock : public TParseData_aligned<4> { +public: + TParse_TBlock(const void* content) : TParseData_aligned<4>(content) {} + + const TBlock* get() const { return (TBlock*)getRaw(); } + const TBlock* getNext() const { return (TBlock*)((u8*)getRaw() + get_size()); } + + u32 get_size() const { return get()->size; } + u32 get_type() const { return get()->type; } +}; + +class TParse_TSequence : public TParseData_aligned<4> { +public: + struct TData { + /* 0x00 */ u8 type; + /* 0x04 */ u32 param; + /* 0x08 */ const void* content; + /* 0x0C */ const void* next; + }; + + TParse_TSequence(const void* content) : TParseData_aligned<4>(content) {} + /* 802899BC */ void getData(TData*) const; + + const void* get() const { return getRaw(); } + u32 get_head() const { return *(u32*)get(); } +}; + +class TParse_TParagraph : public TParseData_aligned<4> { +public: + struct TData { + /* 0x00 */ u32 type; + /* 0x04 */ u32 param; + /* 0x08 */ const void* content; + /* 0x0C */ const void* next; + }; + + TParse_TParagraph(const void* content) : TParseData_aligned<4>(content) {} + /* 80289A08 */ void getData(TData*) const; +}; + +struct TParse_TParagraph_data : public TParseData_aligned<4> { + struct TData { + /* 0x00 */ u8 _0; + /* 0x04 */ u32 _4; + /* 0x08 */ u32 _8; + /* 0x0C */ const void* _c; + /* 0x10 */ const void* _10; + }; + + TParse_TParagraph_data(const void* content) : TParseData_aligned<4>(content) {} + /* 80289A80 */ void getData(TData*) const; +}; + +// Parses a TObject ("demo object") +class TParse_TBlock_object : public TParse_TBlock { +public: + TParse_TBlock_object(const void* content) : TParse_TBlock(content) {} + + const TBlock_object* get() const { return (TBlock_object*)getRaw(); } + const void* getContent() const { + return ((TBlock_object*)getRaw())->id + align_roundUp(get_IDSize(), 4); + } + + u16 get_flag() const { return get()->flag; } + u16 get_IDSize() const { return get()->id_size; } + const void* get_ID() const { return get()->id; } +}; + +class TParse_TParagraph_dataID : public TParseData_aligned<4> { +public: + TParse_TParagraph_dataID(const void* pContent) : TParseData_aligned<4>(pContent) {} + + const TParagraph* get() const { return (TParagraph*)getRaw(); } + u16 get_IDSize() const { return get()->id_size; } + const void* get_ID() const { return get()->id; } + const void* getContent() const { + return ((TParagraph*)getRaw())->id + align_roundUp(get_IDSize(), 4); + } +}; + +} // namespace data +} // namespace stb +} // namespace JStudio #endif /* STB_DATA_PARSE_H */ diff --git a/include/JSystem/JStudio/JStudio/stb-data.h b/include/JSystem/JStudio/JStudio/stb-data.h index 49b85823547..fde46c96def 100644 --- a/include/JSystem/JStudio/JStudio/stb-data.h +++ b/include/JSystem/JStudio/JStudio/stb-data.h @@ -3,4 +3,67 @@ #include "dolphin/types.h" +namespace JStudio { +namespace stb { +namespace data { + +const int guBit_TSequence_type = 24; + +const int BLOCK_SOUND = 'JSND'; +const int BLOCK_ACTOR = 'JACT'; +const int BLOCK_AMBIENTLIGHT = 'JABL'; +const int BLOCK_CAMERA = 'JCMR'; +const int BLOCK_FOG = 'JFOG'; +const int BLOCK_LIGHT = 'JLIT'; +const int BLOCK_MESSAGE = 'JMSG'; +const int BLOCK_PARTICLE = 'JPTC'; +const int BLOCK_NONE = -1; + +// Used to expand a signed 24 int to a signed 32 int +const u32 gu32Mask_TSequence_value_signExpansion = 0xFF000000; +extern const u32 ga4cSignature; // 'STB/0' +extern const u8 gauDataSize_TEParagraph_data[32]; + +inline void toString_block(char* a5c, u32 arg1) { + // from debug, todo +} + +struct THeader { + struct Target { + /* 0x00 */ char name[8]; // "jstudio" + /* 0x08 */ u16 _8[3]; + /* 0x0E */ u16 target_version; + }; + + /* 0x00 */ char signature[4]; + /* 0x04 */ u16 byte_order; // must be 0xFEFF + /* 0x06 */ u16 version; // 0-1 = obselete, 2-7 = OK + /* 0x08 */ u32 _8; + /* 0x0C */ u32 block_number; + /* 0x10 */ Target target; + /* 0x20 */ u8 content[0]; +}; + +struct TBlock { + /* 0x0 */ u32 size; + /* 0x4 */ u32 type; // char[4] JMSG, JSND, JACT, ... +}; + +struct TBlock_object : TBlock { + /* 0x8 */ u16 flag; + /* 0xA */ u16 id_size; + /* 0xC */ u8 id[0]; // unique identifier + ///* ??? */ u8 content[0]; +}; + +struct TParagraph { + /* 0x0 */ u16 _0; + /* 0x2 */ u16 id_size; + /* 0x4 */ u8 id[0]; // unique identifier +}; + +} // namespace data +} // namespace stb +} // namespace JStudio + #endif /* STB_DATA_H */ diff --git a/include/JSystem/JStudio/JStudio/stb.h b/include/JSystem/JStudio/JStudio/stb.h index 8d4b35aa932..e4e0188cc62 100644 --- a/include/JSystem/JStudio/JStudio/stb.h +++ b/include/JSystem/JStudio/JStudio/stb.h @@ -1,6 +1,154 @@ #ifndef STB_H #define STB_H -#include "dolphin/types.h" +#include "JSystem/JGadget/linklist.h" +#include "JSystem/JStudio/JStudio/object-id.h" +#include "JSystem/JStudio/JStudio/stb-data-parse.h" +#include "global.h" + +namespace JStudio { +namespace stb { + +class TControl; + +class TParse : public TParse_header_block { +public: + /* 80289640 */ TParse(TControl*); + /* 80289660 */ virtual ~TParse(); + /* 802896C0 */ virtual bool parseHeader_next(void const**, u32*, u32); + /* 8028978C */ virtual bool parseBlock_next(void const**, u32*, u32); + /* 802897E0 */ virtual bool parseHeader(data::TParse_THeader const&, u32); + /* 802897E8 */ virtual bool parseBlock_block(data::TParse_TBlock const&, u32); + /* 80289820 */ virtual bool parseBlock_object(data::TParse_TBlock_object const&, u32); + + TControl* getControl() const { return pControl; } + +private: + TControl* pControl; +}; + +class TObject : public object::TObject_ID { +public: + enum TEStatus { + /* 0x0 */ STATUS_STILL = 0, + /* 0x1 */ STATUS_END = 1 << 0, + /* 0x2 */ STATUS_WAIT = 1 << 1, + /* 0x4 */ STATUS_SUSPEND = 1 << 2, + /* 0x8 */ STATUS_INACTIVE = 1 << 3, + }; + + /* 80288AC0 */ TObject(data::TParse_TBlock_object const&); + /* 80288A78 */ explicit TObject(u32, void const*, u32); + /* 80288B30 */ virtual ~TObject(); + + /* 80288B78 */ void setFlag_operation(u8, int); + /* 80288BD0 */ void reset(void const*); + /* 80288BE8 */ int forward(u32); + /* 80288E18 */ virtual void do_begin(); + /* 80288E1C */ virtual void do_end(); + /* 80288E20 */ virtual void do_paragraph(u32, void const*, u32); + /* 80288E24 */ virtual void do_wait(u32); + /* 80288E28 */ virtual void do_data(void const*, u32, void const*, u32); + /* 80288E2C */ void process_sequence_(); + /* 80288F80 */ void process_paragraph_reserved_(u32, void const*, u32); + + const char* toString_status(int status); + + void on_begin() { do_begin(); } + void on_end() { do_end(); } + void on_paragraph(u32 arg1, const void* arg2, u32 arg3) { do_paragraph(arg1, arg2, arg3); } + void on_wait(u32 arg1) { do_wait(arg1); } + void on_data(const void* arg1, u32 arg2, const void* arg3, u32 arg4) { + do_data(arg1, arg2, arg3, arg4); + } + + TControl* getControl() const { return pControl; } + void setControl_(TControl* control) { pControl = control; } + int getSuspend() const { return _20; } + void setSuspend(s32 val) { _20 = val; } + bool isSuspended() const { return getSuspend() > 0; } + void suspend(s32 val) { _20 += val; } + const void* getSequence() const { return pSequence; } + void setSequence_(const void* arg1) { pSequence = arg1; } + const void* getSequence_offset(s32 i_no) const { + int s32Val = (s32)getSequence(); + return (const void*)(s32Val + i_no); + } + const void* getSequence_next() const { return pSequence_next; } + void setSequence_next(const void* seq) { pSequence_next = seq; } + u32 getWait() const { return u32Wait_; } + void setWait(u32 wait) { u32Wait_ = wait; } + TEStatus getStatus() const { return mStatus; } + void setStatus_(TEStatus status) { mStatus = status; } + u32 toInt32FromUInt24_(u32 val) { + if (val & 0x800000) { + val |= data::gu32Mask_TSequence_value_signExpansion; + } + return val; + } + void setFlag_operation_(u32 u32Data) { + ASSERT((u32Data >> data::guBit_TSequence_type) == 0); + setFlag_operation(u32Data >> 16, u32Data & 0xFFFF); + } + + /* 0x10 */ JGadget::TLinkListNode ocObject_; + +private: + /* 0x14 */ TControl* pControl; + /* 0x18 */ u32 signature; + /* 0x1C */ u16 mFlag; + /* 0x1E */ u8 bSequence_; + /* 0x20 */ u32 _20; // "second per frame"? + /* 0x24 */ const void* pSequence; + /* 0x28 */ const void* pSequence_next; + /* 0x2C */ u32 u32Wait_; + /* 0x30 */ TEStatus mStatus; +}; + +class TFactory { +public: + /* 802895B4 */ virtual ~TFactory(); + /* 802895FC */ virtual TObject* create(data::TParse_TBlock_object const&); + /* 80289604 */ virtual void destroy(TObject*); +}; + +class TObject_control : public TObject { +public: + /* 80289068 */ TObject_control(void const*, u32); + /* 80289134 */ ~TObject_control() {} +}; + +// Manages TObjects +class TControl { +public: + /* 802890B4 */ TControl(); + /* 80289194 */ virtual ~TControl(); + + /* 80289228 */ void appendObject(TObject*); + /* 80289278 */ void removeObject(TObject*); + /* 802892B0 */ void destroyObject(TObject*); + /* 80289300 */ void destroyObject_all(); + /* 80289364 */ TObject* getObject(void const*, u32); + /* 80289404 */ void reset(); + /* 802894B4 */ void forward(u32); + + void setStatus_(u32 status) { mStatus = status; } + void resetStatus_() { setStatus_(0); } + bool isSuspended() const { return _54 > 0; } + TFactory* getFactory() const { return pFactory; } + TObject_control& referObject_control() { return mObject_control; } + +private: + /* 0x04 */ u32 _4; + /* 0x08 */ u32 _8; + /* 0x0C */ TFactory* pFactory; + /* 0x10 */ JGadget::TLinkList mObjectContainer; + /* 0x1C */ u32 mStatus; + /* 0x20 */ TObject_control mObject_control; + /* 0x54 */ s32 _54; // "second per frame"? +}; + +} // namespace stb +} // namespace JStudio #endif /* STB_H */ diff --git a/libs/JSystem/JGadget/binary.cpp b/libs/JSystem/JGadget/binary.cpp index 92eb490ca3d..744effc3f82 100644 --- a/libs/JSystem/JGadget/binary.cpp +++ b/libs/JSystem/JGadget/binary.cpp @@ -7,25 +7,6 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -namespace JGadget { -struct binary { - struct TEBit {}; - - struct TParse_header_block { - /* 802DC8C8 */ ~TParse_header_block(); - /* 802DC910 */ void parse_next(void const**, u32); - }; - - /* 802DC864 */ void parseVariableUInt_16_32_following(void const*, u32*, u32*, - JGadget::binary::TEBit*); -}; - -}; // namespace JGadget - // // Forward References: // @@ -53,9 +34,9 @@ extern "C" extern void* __vt__Q37JGadget6binary19TParse_header_block[5]; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JGadget::binary::parseVariableUInt_16_32_following(void const* param_0, u32* param_1, - u32* param_2, - JGadget::binary::TEBit* param_3) { +asm const void* +JGadget::binary::parseVariableUInt_16_32_following(void const* param_0, u32* param_1, u32* param_2, + JGadget::binary::TEBit* param_3) { nofralloc #include "asm/JSystem/JGadget/binary/parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit.s" } @@ -77,7 +58,7 @@ asm JGadget::binary::TParse_header_block::~TParse_header_block() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JGadget::binary::TParse_header_block::parse_next(void const** param_0, u32 param_1) { +asm bool JGadget::binary::TParse_header_block::parse_next(void const** param_0, u32 param_1) { nofralloc #include "asm/JSystem/JGadget/binary/parse_next__Q37JGadget6binary19TParse_header_blockFPPCvUl.s" } diff --git a/libs/JSystem/JGadget/linklist.cpp b/libs/JSystem/JGadget/linklist.cpp index a00e32776d4..353892eddf8 100644 --- a/libs/JSystem/JGadget/linklist.cpp +++ b/libs/JSystem/JGadget/linklist.cpp @@ -104,7 +104,8 @@ asm void JGadget::TNodeLinkList::Insert(JGadget::TNodeLinkList::iterator param_0 #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JGadget::TNodeLinkList::Erase(JGadget::TLinkListNode* param_0) { +asm JGadget::TNodeLinkList::iterator +JGadget::TNodeLinkList::Erase(JGadget::TLinkListNode* param_0) { nofralloc #include "asm/JSystem/JGadget/linklist/Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode.s" } diff --git a/libs/JSystem/JMessage/resource.cpp b/libs/JSystem/JMessage/resource.cpp index 949c589b83d..375362ff306 100644 --- a/libs/JSystem/JMessage/resource.cpp +++ b/libs/JSystem/JMessage/resource.cpp @@ -4,6 +4,7 @@ // #include "JSystem/JMessage/resource.h" +#include "JSystem/JGadget/binary.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -58,25 +59,6 @@ struct JMessage { }; }; -namespace JGadget { -struct binary { - struct TParse_header_block { - /* 802DC8C8 */ ~TParse_header_block(); - }; -}; - -struct TLinkListNode {}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA1C */ ~TNodeLinkList(); - /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - /* 802DCBD4 */ void Erase(JGadget::TLinkListNode*); -}; - -}; // namespace JGadget - // // Forward References: // diff --git a/libs/JSystem/JStudio/JStudio/Makefile b/libs/JSystem/JStudio/JStudio/Makefile index 5f63aeff5fa..c8f56e5b262 100644 --- a/libs/JSystem/JStudio/JStudio/Makefile +++ b/libs/JSystem/JStudio/JStudio/Makefile @@ -6,7 +6,9 @@ LIBJSTUDIO_A_CPP_FILES := \ libs/JSystem/JStudio/JStudio/ctb.cpp \ libs/JSystem/JStudio/JStudio/ctb-data.cpp \ libs/JSystem/JStudio/JStudio/functionvalue.cpp \ + libs/JSystem/JStudio/JStudio/functionvalue-inline.cpp \ libs/JSystem/JStudio/JStudio/fvb.cpp \ + libs/JSystem/JStudio/JStudio/fvb-inline.cpp \ libs/JSystem/JStudio/JStudio/fvb-data.cpp \ libs/JSystem/JStudio/JStudio/fvb-data-parse.cpp \ libs/JSystem/JStudio/JStudio/jstudio-control.cpp \ @@ -22,7 +24,9 @@ LIBJSTUDIO_A_O_FILES := \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/ctb.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/ctb-data.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/functionvalue.o \ + $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/functionvalue-inline.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/fvb.o \ + $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/fvb-inline.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/fvb-data.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/fvb-data-parse.o \ $(BUILD_DIR)/libs/JSystem/JStudio/JStudio/jstudio-control.o \ diff --git a/libs/JSystem/JStudio/JStudio/ctb.cpp b/libs/JSystem/JStudio/JStudio/ctb.cpp index 58e64703735..71a7a449474 100644 --- a/libs/JSystem/JStudio/JStudio/ctb.cpp +++ b/libs/JSystem/JStudio/JStudio/ctb.cpp @@ -4,6 +4,7 @@ // #include "JSystem/JStudio/JStudio/ctb.h" +#include "JSystem/JGadget/binary.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -55,14 +56,13 @@ struct TParse { }; // namespace ctb -struct object { - struct TPRObject_ID_equal {}; +namespace object { +struct TPRObject_ID_equal {}; - struct TIDData { - /* 80288988 */ void isEqual(JStudio::object::TIDData const&, - JStudio::object::TIDData const&); - }; +struct TIDData { + /* 80288988 */ void isEqual(JStudio::object::TIDData const&, JStudio::object::TIDData const&); }; +}; // namespace object }; // namespace JStudio @@ -73,23 +73,6 @@ struct TLinkList {}; struct TLinkList__template0 { struct iterator {}; }; - -struct binary { - struct TParse_header_block { - /* 802DC8C8 */ ~TParse_header_block(); - }; -}; - -struct TLinkListNode {}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA1C */ ~TNodeLinkList(); - /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - /* 802DCBD4 */ void Erase(JGadget::TLinkListNode*); -}; - }; // namespace JGadget namespace std { diff --git a/libs/JSystem/JStudio/JStudio/functionvalue-inline.cpp b/libs/JSystem/JStudio/JStudio/functionvalue-inline.cpp new file mode 100644 index 00000000000..6d1f9665eb6 --- /dev/null +++ b/libs/JSystem/JStudio/JStudio/functionvalue-inline.cpp @@ -0,0 +1,44 @@ +#include "JSystem/JStudio/JStudio/functionvalue.h" +#include "global.h" + +namespace std { +template +struct less {}; +/* less */ +struct less__template0 {}; + +template +void upper_bound(/* ... */); +}; // namespace std + +/* 80283E24-80283EB8 27E764 0094+00 1/1 0/0 0/0 .text + * upper_bound>__3stdFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCdQ23std7less + */ +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +#pragma force_active on +extern "C" inline asm void +func_80283E24(void* _this, JStudio::TFunctionValue_list_parameter::TIterator_data_ param_0, + JStudio::TFunctionValue_list_parameter::TIterator_data_ param_1, f64 const& param_2, + std::less param_3) { + nofralloc +#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283E24.s" +} +#pragma pop + +/* 80283EB8-80283F80 27E7F8 00C8+00 1/1 0/0 0/0 .text + * upper_bound>__3stdFQ37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_RCdQ23std7less + */ +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +#pragma force_active on +extern "C" inline asm void func_80283EB8(void* _this, + JStudio::TFunctionValue_hermite::TIterator_data_ param_0, + JStudio::TFunctionValue_hermite::TIterator_data_ param_1, + f64 const& param_2, std::less param_3) { + nofralloc +#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283EB8.s" +} +#pragma pop diff --git a/libs/JSystem/JStudio/JStudio/functionvalue.cpp b/libs/JSystem/JStudio/JStudio/functionvalue.cpp index ab2f91144f8..257b7295ce8 100644 --- a/libs/JSystem/JStudio/JStudio/functionvalue.cpp +++ b/libs/JSystem/JStudio/JStudio/functionvalue.cpp @@ -6,169 +6,18 @@ #include "JSystem/JStudio/JStudio/functionvalue.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "msl_c/math.h" // // Types: // namespace JGadget { -template -struct TVector_pointer {}; -/* TVector_pointer */ -struct TVector_pointer__template0 {}; - -template -struct TAllocator {}; -/* TAllocator */ -struct TAllocator__template0 {}; - -struct TVector_pointer_void { - /* 802DCCD0 */ TVector_pointer_void(JGadget::TAllocator const&); - /* 802DCCFC */ ~TVector_pointer_void(); - /* 802DCDC4 */ void erase(void**, void**); -}; template void findUpperBound_binary_current(/* ... */); }; // namespace JGadget -namespace JStudio { -struct TFunctionValue { - /* 80281648 */ void toFunction_outside(int); - /* 80281690 */ TFunctionValue(); - /* 802816A0 */ ~TFunctionValue(); -}; - -struct TFunctionValueAttribute_refer { - /* 802816E8 */ void refer_initialize(); -}; - -struct functionvalue { - /* 80281710 */ void interpolateValue_hermite(f64, f64, f64, f64, f64, f64, f64); - /* 80281774 */ void interpolateValue_BSpline_uniform(f64, f64, f64, f64, f64); - /* 802817D8 */ void interpolateValue_BSpline_nonuniform(f64, f64 const*, f64 const*); - /* 802818B8 */ void extrapolateParameter_turn(f64, f64); - /* 80283570 */ void extrapolateParameter_raw(f64, f64); - /* 80283574 */ void extrapolateParameter_repeat(f64, f64); - /* 802835B0 */ void extrapolateParameter_clamp(f64, f64); -}; - -struct TFunctionValueAttribute_range { - /* 80281918 */ void range_initialize(); - /* 8028194C */ void range_prepare(); - /* 802819F4 */ void range_set(f64, f64); - /* 80281A08 */ void range_getParameter(f64, f64, f64) const; - /* 80281D18 */ TFunctionValueAttribute_range(); -}; - -struct TFunctionValue_composite { - struct TData {}; - - /* 80281D5C */ TFunctionValue_composite(); - /* 80281DB8 */ bool getType() const; - /* 80281DC0 */ void getAttributeSet(); - /* 80281DE0 */ void initialize(); - /* 80281E24 */ void prepare(); - /* 80281E28 */ void getValue(f64); - /* 80281E5C */ void composite_raw(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80281EC8 */ void composite_index(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 8028202C */ void - composite_parameter(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282094 */ void composite_add(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282118 */ void - composite_subtract(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282200 */ void - composite_multiply(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282284 */ void composite_divide(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80283DA4 */ ~TFunctionValue_composite(); -}; - -struct TFunctionValue_constant { - /* 8028236C */ TFunctionValue_constant(); - /* 802823B4 */ s32 getType() const; - /* 802823BC */ void getAttributeSet(); - /* 802823D0 */ void initialize(); - /* 802823E0 */ void prepare(); - /* 802823E4 */ void getValue(f64); - /* 80283D44 */ ~TFunctionValue_constant(); -}; - -struct TFunctionValue_transition { - /* 802823EC */ TFunctionValue_transition(); - /* 8028244C */ s32 getType() const; - /* 80282454 */ void getAttributeSet(); - /* 80282484 */ void initialize(); - /* 802824D0 */ void prepare(); - /* 802824F4 */ void getValue(f64); - /* 80283CE4 */ ~TFunctionValue_transition(); -}; - -struct TFunctionValue_list { - struct TIndexData_ {}; - - /* 802826BC */ TFunctionValue_list(); - /* 80282720 */ s32 getType() const; - /* 80282728 */ void getAttributeSet(); - /* 80282758 */ void initialize(); - /* 802827A8 */ void prepare(); - /* 80282858 */ void getValue(f64); - /* 80282C10 */ void update_INTERPOLATE_NONE_(JStudio::TFunctionValue_list const&, - JStudio::TFunctionValue_list::TIndexData_ const&); - /* 80282C24 */ void - update_INTERPOLATE_LINEAR_(JStudio::TFunctionValue_list const&, - JStudio::TFunctionValue_list::TIndexData_ const&); - /* 80282C58 */ void - update_INTERPOLATE_PLATEAU_(JStudio::TFunctionValue_list const&, - JStudio::TFunctionValue_list::TIndexData_ const&); - /* 80282CA8 */ void - update_INTERPOLATE_BSPLINE_dataMore3_(JStudio::TFunctionValue_list const&, - JStudio::TFunctionValue_list::TIndexData_ const&); - /* 80283C84 */ ~TFunctionValue_list(); -}; - -struct TFunctionValue_list_parameter { - struct TIterator_data_ {}; - - /* 80282D34 */ TFunctionValue_list_parameter(); - /* 80282DA0 */ s32 getType() const; - /* 80282DA8 */ void getAttributeSet(); - /* 80282DD8 */ void data_set(f32 const*, u32); - /* 80282E08 */ void initialize(); - /* 80282E60 */ void prepare(); - /* 80282F10 */ void getValue(f64); - /* 80282FE8 */ void update_INTERPOLATE_NONE_(JStudio::TFunctionValue_list_parameter const&, - f64); - /* 80282FF4 */ void update_INTERPOLATE_LINEAR_(JStudio::TFunctionValue_list_parameter const&, - f64); - /* 80283024 */ void update_INTERPOLATE_PLATEAU_(JStudio::TFunctionValue_list_parameter const&, - f64); - /* 80283060 */ void - update_INTERPOLATE_BSPLINE_dataMore3_(JStudio::TFunctionValue_list_parameter const&, f64); - /* 80283C24 */ ~TFunctionValue_list_parameter(); -}; - -struct TFunctionValue_hermite { - struct TIterator_data_ {}; - - /* 802832C4 */ TFunctionValue_hermite(); - /* 80283344 */ s32 getType() const; - /* 8028334C */ void getAttributeSet(); - /* 8028336C */ void data_set(f32 const*, u32, u32); - /* 802833BC */ void initialize(); - /* 80283428 */ void prepare(); - /* 8028344C */ void getValue(f64); - /* 80283BC4 */ ~TFunctionValue_hermite(); -}; - -}; // namespace JStudio - namespace std { template struct less {}; @@ -330,35 +179,6 @@ extern "C" void _restfpr_29(); extern "C" void _savegpr_29(); extern "C" void _restgpr_29(); extern "C" void div(); -extern "C" void floor(); -extern "C" void fmod(); -extern "C" extern u32 __float_nan; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 8039A9F0-8039AA00 -00001 0010+00 1/1 0/0 0/0 .rodata - * gapfnExtrapolateParameter___Q27JStudio27@unnamed@functionvalue_cpp@ */ -SECTION_RODATA static void* const data_8039A9F0[4] = { - (void*)extrapolateParameter_raw__Q27JStudio13functionvalueFdd, - (void*)extrapolateParameter_repeat__Q27JStudio13functionvalueFdd, - (void*)extrapolateParameter_turn__Q27JStudio13functionvalueFdd, - (void*)extrapolateParameter_clamp__Q27JStudio13functionvalueFdd, -}; -COMPILER_STRIP_GATE(0x8039A9F0, &data_8039A9F0); - -/* 80281648-80281690 27BF88 0048+00 3/3 1/1 0/0 .text - * toFunction_outside__Q27JStudio14TFunctionValueFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue::toFunction_outside(int param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/toFunction_outside__Q27JStudio14TFunctionValueFi.s" -} -#pragma pop /* ############################################################################################## */ /* 803C48E0-803C4900 021A00 0020+00 2/2 1/1 0/0 .data __vt__Q27JStudio22TFunctionValue_hermite */ @@ -448,41 +268,9 @@ SECTION_DATA extern void* __vt__Q27JStudio14TFunctionValue[8] = { (void*)NULL, }; -/* 80281690-802816A0 27BFD0 0010+00 6/6 0/0 0/0 .text __ct__Q27JStudio14TFunctionValueFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue::TFunctionValue() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio14TFunctionValueFv.s" -} -#pragma pop - -/* 802816A0-802816E8 27BFE0 0048+00 6/6 6/6 0/0 .text __dt__Q27JStudio14TFunctionValueFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue::~TFunctionValue() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio14TFunctionValueFv.s" -} -#pragma pop - -/* 802816E8-80281710 27C028 0028+00 1/1 0/0 0/0 .text - * refer_initialize__Q27JStudio29TFunctionValueAttribute_referFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValueAttribute_refer::refer_initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/refer_initialize__Q27JStudio29TFunctionValueAttribute_referFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 80455400-80455408 003A00 0008+00 13/13 0/0 0/0 .sdata2 @652 */ +// /* ############################################################################################## +// */ +// /* 80455400-80455408 003A00 0008+00 13/13 0/0 0/0 .sdata2 @652 */ SECTION_SDATA2 static u8 lit_652[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; @@ -496,19 +284,6 @@ SECTION_SDATA2 static f64 lit_793 = 3.0; /* 80455418-80455420 003A18 0008+00 1/1 0/0 0/0 .sdata2 @794 */ SECTION_SDATA2 static f64 lit_794 = -2.0; -/* 80281710-80281774 27C050 0064+00 4/4 0/0 0/0 .text - * interpolateValue_hermite__Q27JStudio13functionvalueFddddddd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::functionvalue::interpolateValue_hermite(f64 param_0, f64 param_1, f64 param_2, - f64 param_3, f64 param_4, f64 param_5, - f64 param_6) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/interpolateValue_hermite__Q27JStudio13functionvalueFddddddd.s" -} -#pragma pop - /* ############################################################################################## */ /* 80455420-80455428 003A20 0008+00 1/1 0/0 0/0 .sdata2 @799 */ SECTION_SDATA2 static f64 lit_799 = 1.0 / 6.0; @@ -519,166 +294,292 @@ SECTION_SDATA2 static f64 lit_800 = 0.5; /* 80455430-80455438 003A30 0008+00 1/1 0/0 0/0 .sdata2 @801 */ SECTION_SDATA2 static f64 lit_801 = 2.0 / 3.0; +/* ############################################################################################## */ +/* 80455438-80455440 003A38 0008+00 3/3 0/0 0/0 .sdata2 @842 */ +SECTION_SDATA2 static f64 lit_842 = 2.0; + +/* ############################################################################################## */ +/* 80455440-80455448 003A40 0008+00 1/1 0/0 0/0 .sdata2 @867 */ +SECTION_SDATA2 static f64 lit_867 = -1.0; + +/* ############################################################################################## */ +/* 804511E8-804511F0 0006E8 0001+07 1/1 0/0 0/0 .sbss @569 */ +static u8 lit_569[1 + 7 /* padding */]; + +/* ############################################################################################## */ +/* 80455448-80455450 003A48 0008+00 1/1 0/0 0/0 .sdata2 @1517 */ +SECTION_SDATA2 static f64 lit_1517 = 4503599627370496.0 /* cast u32 to float */; + +namespace JStudio { + +namespace functionvalue { +f64 extrapolateParameter_raw(f64, f64); +f64 extrapolateParameter_repeat(f64, f64); +f64 extrapolateParameter_turn(f64, f64); +f64 extrapolateParameter_clamp(f64, f64); +}; // namespace functionvalue + +namespace { + +const ExtrapolateParameter gapfnExtrapolateParameter_[4] = { + functionvalue::extrapolateParameter_raw, + functionvalue::extrapolateParameter_repeat, + functionvalue::extrapolateParameter_turn, + functionvalue::extrapolateParameter_clamp, +}; + +} + +ExtrapolateParameter TFunctionValue::toFunction_outside(int idx) { + 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; +} + +TFunctionValue::TFunctionValue() {} +TFunctionValue::~TFunctionValue() {} + +void TFunctionValueAttribute_refer::refer_initialize() { + clear(); +} + +namespace functionvalue { + +#ifdef NONMATCHING // impossible regalloc +f64 interpolateValue_hermite(f64 c0, f64 c1, f64 x, f64 c2, f64 x2, f64 c3, f64 x3) { + f64 a; + f64 d; + f64 c; + f64 b; + + a = c0 - c1; + b = a * (lbl_80455408 / (x2 - c1)); // (a - b) * 1.0 / (c - d) + c = b - lbl_80455408; // 1.0 + d = (lbl_80455410 + lbl_80455418 * b) * (b * b); // 3.0 - 2.0 * b + return (a * b * c * x3) + ((lbl_80455408 - d) * x + (d * c3)) + (a * (c * c) * c2); +} +#else +/* 80281710-80281774 27C050 0064+00 4/4 0/0 0/0 .text + * interpolateValue_hermite__Q27JStudio13functionvalueFddddddd */ +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +asm f64 interpolateValue_hermite(f64 param_0, f64 param_1, f64 param_2, f64 param_3, f64 param_4, + f64 param_5, f64 param_6) { + nofralloc +#include "asm/JSystem/JStudio/JStudio/functionvalue/interpolateValue_hermite__Q27JStudio13functionvalueFddddddd.s" +} +#pragma pop +#endif + +#ifdef NONMATCHING // really minor regalloc +f64 interpolateValue_BSpline_uniform(f64 f1, f64 f2, f64 f3, f64 f4, f64 f5) { + // pow3(1.0 - f1) + f64 f6 = (lbl_80455408 - f1); + f64 temp = f6; + temp *= f6 * f6; + + f64 f0 = f1 * f1; + f64 f8 = f0 * f1; + + return ((lbl_80455420 * f8 - f0) + lbl_80455430) * f3 + (temp * f2 + f8 * f5) * lbl_80455428 + + f4 * (lbl_80455428 + lbl_80455420 * ((f1 + f0) - f8)); +} +#else /* 80281774-802817D8 27C0B4 0064+00 1/1 0/0 0/0 .text * interpolateValue_BSpline_uniform__Q27JStudio13functionvalueFddddd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::functionvalue::interpolateValue_BSpline_uniform(f64 param_0, f64 param_1, - f64 param_2, f64 param_3, - f64 param_4) { +asm f64 interpolateValue_BSpline_uniform(f64 param_0, f64 param_1, f64 param_2, f64 param_3, + f64 param_4) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/interpolateValue_BSpline_uniform__Q27JStudio13functionvalueFddddd.s" } #pragma pop +#endif /* 802817D8-802818B8 27C118 00E0+00 1/1 0/0 0/0 .text * interpolateValue_BSpline_nonuniform__Q27JStudio13functionvalueFdPCdPCd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::functionvalue::interpolateValue_BSpline_nonuniform(f64 param_0, - f64 const* param_1, - f64 const* param_2) { +asm f64 interpolateValue_BSpline_nonuniform(f64 param_0, f64 const* param_1, f64 const* param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/interpolateValue_BSpline_nonuniform__Q27JStudio13functionvalueFdPCdPCd.s" } #pragma pop -/* ############################################################################################## */ -/* 80455438-80455440 003A38 0008+00 3/3 0/0 0/0 .sdata2 @842 */ -SECTION_SDATA2 static f64 lit_842 = 2.0; +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, DOUBLE_LABEL(/* 0.0 */ lit_652), a4, a5, + DOUBLE_LABEL(/* 0.0 */ lit_652)); +} /* 802818B8-80281918 27C1F8 0060+00 1/0 0/0 0/0 .text * extrapolateParameter_turn__Q27JStudio13functionvalueFdd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::functionvalue::extrapolateParameter_turn(f64 param_0, f64 param_1) { +asm f64 extrapolateParameter_turn(f64 param_0, f64 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/extrapolateParameter_turn__Q27JStudio13functionvalueFdd.s" } #pragma pop -/* 80281918-8028194C 27C258 0034+00 4/4 0/0 0/0 .text - * range_initialize__Q27JStudio29TFunctionValueAttribute_rangeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValueAttribute_range::range_initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/range_initialize__Q27JStudio29TFunctionValueAttribute_rangeFv.s" +} // namespace functionvalue + +void TFunctionValueAttribute_range::range_initialize() { + fBegin_ = __float_nan[0]; // NaN + fEnd_ = fBegin_; + fDifference_ = fBegin_; + + range_setProgress(TFunctionValue::PROG_INIT); + range_setAdjust(TFunctionValue::ADJ_INIT); + range_setOutside(TFunctionValue::OUT_INIT); } -#pragma pop -/* ############################################################################################## */ -/* 80455440-80455448 003A40 0008+00 1/1 0/0 0/0 .sdata2 @867 */ -SECTION_SDATA2 static f64 lit_867 = -1.0; +void TFunctionValueAttribute_range::range_prepare() { + TFunctionValue::TEProgress progress = range_getProgress(); -/* 8028194C-802819F4 27C28C 00A8+00 4/4 0/0 0/0 .text - * range_prepare__Q27JStudio29TFunctionValueAttribute_rangeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValueAttribute_range::range_prepare() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/range_prepare__Q27JStudio29TFunctionValueAttribute_rangeFv.s" + switch (progress) { + default: + JUTWarn w; + w << "unknown progress : " << progress; + case 0: + _20 = DOUBLE_LABEL(/* 0.0 */ lit_652); + _28 = DOUBLE_LABEL(/* 1.0 */ lit_792); + break; + case 1: + _20 = DOUBLE_LABEL(/* 0.0 */ lit_652); + _28 = DOUBLE_LABEL(/*-1.0 */ lit_867); + break; + case 2: + _20 = fBegin_; + _28 = DOUBLE_LABEL(/*-1.0 */ lit_867); + break; + case 3: + _20 = fEnd_; + _28 = DOUBLE_LABEL(/*-1.0 */ lit_867); + break; + case 4: + _20 = DOUBLE_LABEL(/* 0.5 */ lit_800) * (fBegin_ + fEnd_); + _28 = DOUBLE_LABEL(/*-1.0 */ lit_867); + break; + } } -#pragma pop -/* 802819F4-80281A08 27C334 0014+00 0/0 1/1 0/0 .text - * range_set__Q27JStudio29TFunctionValueAttribute_rangeFdd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValueAttribute_range::range_set(f64 param_0, f64 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/range_set__Q27JStudio29TFunctionValueAttribute_rangeFdd.s" +void TFunctionValueAttribute_range::range_set(f64 begin, f64 end) { + fBegin_ = begin; + fEnd_ = end; + fDifference_ = end - begin; + + ASSERT(fDifference_ >= TValue(0)); } -#pragma pop -/* 80281A08-80281D18 27C348 0310+00 2/2 0/0 0/0 .text - * range_getParameter__Q27JStudio29TFunctionValueAttribute_rangeCFddd */ +#ifdef 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 + lit_800 * (fBegin_ + fEnd_)); + break; + case 4: + f64 temp = range_getParameter_outside(progress); + result = arg2 + ((temp - fBegin_) * (arg3 - arg2)) / fDifference_; + break; + } + return result; +} +#else +// /* 80281A08-80281D18 27C348 0310+00 2/2 0/0 0/0 .text +// * range_getParameter__Q27JStudio29TFunctionValueAttribute_rangeCFddd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValueAttribute_range::range_getParameter(f64 param_0, f64 param_1, - f64 param_2) const { +asm f64 TFunctionValueAttribute_range::range_getParameter(f64 param_0, f64 param_1, + f64 param_2) const { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/range_getParameter__Q27JStudio29TFunctionValueAttribute_rangeCFddd.s" } #pragma pop +#endif -/* 80281D18-80281D5C 27C658 0044+00 4/4 0/0 0/0 .text - * __ct__Q27JStudio29TFunctionValueAttribute_rangeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValueAttribute_range::TFunctionValueAttribute_range() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio29TFunctionValueAttribute_rangeFv.s" -} -#pragma pop - -/* ############################################################################################## */ -/* 804511E8-804511F0 0006E8 0001+07 1/1 0/0 0/0 .sbss @569 */ -static u8 lit_569[1 + 7 /* padding */]; +TFunctionValueAttribute_range::TFunctionValueAttribute_range() + : fBegin_(__float_nan[0]), fEnd_(fBegin_), fDifference_(fBegin_), + mProgress(TFunctionValue::PROG_INIT), mAdjust(TFunctionValue::ADJ_INIT), _20(fBegin_), + _28(fBegin_), mBegin(TFunctionValue::OUT_INIT), mEnd(TFunctionValue::OUT_INIT) {} /* 80281D5C-80281DB8 27C69C 005C+00 0/0 1/1 0/0 .text __ct__Q27JStudio24TFunctionValue_compositeFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::TFunctionValue_composite::TFunctionValue_composite() { +asm TFunctionValue_composite::TFunctionValue_composite() { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio24TFunctionValue_compositeFv.s" } #pragma pop -/* 80281DB8-80281DC0 27C6F8 0008+00 1/0 0/0 0/0 .text - * getType__Q27JStudio24TFunctionValue_compositeCFv */ -bool JStudio::TFunctionValue_composite::getType() const { - return true; +u32 TFunctionValue_composite::getType() const { + return 1; } -/* 80281DC0-80281DE0 27C700 0020+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio24TFunctionValue_compositeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio24TFunctionValue_compositeFv.s" +TFunctionValueAttributeSet TFunctionValue_composite::getAttributeSet() { + return TFunctionValueAttributeSet(this, NULL, NULL); } -#pragma pop -/* 80281DE0-80281E24 27C720 0044+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio24TFunctionValue_compositeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio24TFunctionValue_compositeFv.s" +void TFunctionValue_composite::initialize() { + refer_initialize(); + pfn_ = NULL; + data = TData((void*)NULL); } -#pragma pop -/* 80281E24-80281E28 27C764 0004+00 1/0 0/0 0/0 .text - * prepare__Q27JStudio24TFunctionValue_compositeFv */ -void JStudio::TFunctionValue_composite::prepare() { +void TFunctionValue_composite::prepare() { /* empty function */ } -/* 80281E28-80281E5C 27C768 0034+00 1/0 0/0 0/0 .text - * getValue__Q27JStudio24TFunctionValue_compositeFd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::getValue(f64 param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio24TFunctionValue_compositeFd.s" +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()); } -#pragma pop /* 80281E5C-80281EC8 27C79C 006C+00 0/0 1/0 0/0 .text * composite_raw__Q27JStudio24TFunctionValue_compositeFRCQ27JGadget44TVector_pointerRCQ37JStudio24TFunctionValue_composite5TDatad @@ -686,9 +587,8 @@ asm void JStudio::TFunctionValue_composite::getValue(f64 param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_raw( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void TFunctionValue_composite::composite_raw(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80281E5C.s" } @@ -700,9 +600,8 @@ asm void JStudio::TFunctionValue_composite::composite_raw( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_index( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void TFunctionValue_composite::composite_index(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80281EC8.s" } @@ -714,9 +613,9 @@ asm void JStudio::TFunctionValue_composite::composite_index( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_parameter( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void +TFunctionValue_composite::composite_parameter(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_8028202C.s" } @@ -728,9 +627,8 @@ asm void JStudio::TFunctionValue_composite::composite_parameter( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_add( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void TFunctionValue_composite::composite_add(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282094.s" } @@ -742,9 +640,9 @@ asm void JStudio::TFunctionValue_composite::composite_add( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_subtract( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void +TFunctionValue_composite::composite_subtract(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282118.s" } @@ -756,9 +654,9 @@ asm void JStudio::TFunctionValue_composite::composite_subtract( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_multiply( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void +TFunctionValue_composite::composite_multiply(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282200.s" } @@ -770,236 +668,161 @@ asm void JStudio::TFunctionValue_composite::composite_multiply( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_composite::composite_divide( - JGadget::TVector_pointer const& param_0, - JStudio::TFunctionValue_composite::TData const& param_1, f64 param_2) { +asm void TFunctionValue_composite::composite_divide(TVector_pointer const& param_0, + TData const& param_1, f64 param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282284.s" } #pragma pop -/* 8028236C-802823B4 27CCAC 0048+00 0/0 1/1 0/0 .text __ct__Q27JStudio23TFunctionValue_constantFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_constant::TFunctionValue_constant() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio23TFunctionValue_constantFv.s" -} -#pragma pop +TFunctionValue_constant::TFunctionValue_constant() : fValue_(__float_nan[0]) {} -/* 802823B4-802823BC 27CCF4 0008+00 1/0 0/0 0/0 .text - * getType__Q27JStudio23TFunctionValue_constantCFv */ -s32 JStudio::TFunctionValue_constant::getType() const { +u32 TFunctionValue_constant::getType() const { return 2; } -/* 802823BC-802823D0 27CCFC 0014+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio23TFunctionValue_constantFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_constant::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio23TFunctionValue_constantFv.s" +TFunctionValueAttributeSet TFunctionValue_constant::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, NULL, NULL); } -#pragma pop -/* 802823D0-802823E0 27CD10 0010+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio23TFunctionValue_constantFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_constant::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio23TFunctionValue_constantFv.s" +void TFunctionValue_constant::initialize() { + fValue_ = __float_nan[0]; } -#pragma pop -/* 802823E0-802823E4 27CD20 0004+00 1/0 0/0 0/0 .text - * prepare__Q27JStudio23TFunctionValue_constantFv */ -void JStudio::TFunctionValue_constant::prepare() { +void TFunctionValue_constant::prepare() { /* empty function */ } -/* 802823E4-802823EC 27CD24 0008+00 1/0 0/0 0/0 .text - * getValue__Q27JStudio23TFunctionValue_constantFd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_constant::getValue(f64 param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio23TFunctionValue_constantFd.s" +f64 TFunctionValue_constant::getValue(f64 arg1) { + return fValue_; } -#pragma pop -/* 802823EC-8028244C 27CD2C 0060+00 0/0 1/1 0/0 .text - * __ct__Q27JStudio25TFunctionValue_transitionFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_transition::TFunctionValue_transition() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio25TFunctionValue_transitionFv.s" -} -#pragma pop +TFunctionValue_transition::TFunctionValue_transition() : _48(__float_nan[0]), _50(_48) {} -/* 8028244C-80282454 27CD8C 0008+00 1/0 0/0 0/0 .text - * getType__Q27JStudio25TFunctionValue_transitionCFv */ -s32 JStudio::TFunctionValue_transition::getType() const { +u32 TFunctionValue_transition::getType() const { return 3; } -/* 80282454-80282484 27CD94 0030+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio25TFunctionValue_transitionFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_transition::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio25TFunctionValue_transitionFv.s" +TFunctionValueAttributeSet TFunctionValue_transition::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } -#pragma pop -/* 80282484-802824D0 27CDC4 004C+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio25TFunctionValue_transitionFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_transition::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio25TFunctionValue_transitionFv.s" -} -#pragma pop +void TFunctionValue_transition::initialize() { + range_initialize(); + interpolate_initialize(); -/* 802824D0-802824F4 27CE10 0024+00 1/0 0/0 0/0 .text - * prepare__Q27JStudio25TFunctionValue_transitionFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_transition::prepare() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/prepare__Q27JStudio25TFunctionValue_transitionFv.s" + _48 = __float_nan[0]; + _50 = _48; +} + +void TFunctionValue_transition::prepare() { + range_prepare(); + interpolate_prepare(); } -#pragma pop /* 802824F4-802826BC 27CE34 01C8+00 1/0 0/0 0/0 .text * getValue__Q27JStudio25TFunctionValue_transitionFd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_transition::getValue(f64 param_0) { +asm f64 TFunctionValue_transition::getValue(f64 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio25TFunctionValue_transitionFd.s" } #pragma pop -/* 802826BC-80282720 27CFFC 0064+00 0/0 1/1 0/0 .text __ct__Q27JStudio19TFunctionValue_listFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_list::TFunctionValue_list() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio19TFunctionValue_listFv.s" -} -#pragma pop +TFunctionValue_list::TFunctionValue_list() : _44(NULL), _48(0), _50(__float_nan[0]), _58(NULL) {} -/* 80282720-80282728 27D060 0008+00 1/0 0/0 0/0 .text getType__Q27JStudio19TFunctionValue_listCFv - */ -s32 JStudio::TFunctionValue_list::getType() const { +u32 TFunctionValue_list::getType() const { return 4; } -/* 80282728-80282758 27D068 0030+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio19TFunctionValue_listFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio19TFunctionValue_listFv.s" +TFunctionValueAttributeSet TFunctionValue_list::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } -#pragma pop -/* 80282758-802827A8 27D098 0050+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio19TFunctionValue_listFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio19TFunctionValue_listFv.s" +void TFunctionValue_list::initialize() { + range_initialize(); + interpolate_initialize(); + + _44 = NULL; + _48 = 0; + _50 = __float_nan[0]; + _58 = NULL; } -#pragma pop -/* 802827A8-80282858 27D0E8 00B0+00 1/0 0/0 0/0 .text prepare__Q27JStudio19TFunctionValue_listFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::prepare() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/prepare__Q27JStudio19TFunctionValue_listFv.s" +void TFunctionValue_list::prepare() { + range_prepare(); + interpolate_prepare(); + + u32 interp = interpolate_get(); + + switch (interp) { + default: + JUTWarn w; + w << "unknown interpolation : " << interp; + case 0: + _58 = update_INTERPOLATE_NONE_; + break; + case 1: + _58 = update_INTERPOLATE_LINEAR_; + break; + case 2: + _58 = update_INTERPOLATE_PLATEAU_; + break; + case 3: + _58 = update_INTERPOLATE_BSPLINE_dataMore3_; + if (_48 == 2) + _58 = update_INTERPOLATE_LINEAR_; + break; + } } -#pragma pop - -/* ############################################################################################## */ -/* 80455448-80455450 003A48 0008+00 1/1 0/0 0/0 .sdata2 @1517 */ -SECTION_SDATA2 static f64 lit_1517 = 4503599627370496.0 /* cast u32 to float */; /* 80282858-80282C10 27D198 03B8+00 1/0 0/0 0/0 .text getValue__Q27JStudio19TFunctionValue_listFd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::getValue(f64 param_0) { +asm f64 TFunctionValue_list::getValue(f64 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio19TFunctionValue_listFd.s" } #pragma pop -/* 80282C10-80282C24 27D550 0014+00 1/1 0/0 0/0 .text - * update_INTERPOLATE_NONE___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::update_INTERPOLATE_NONE_( - JStudio::TFunctionValue_list const& param_0, - JStudio::TFunctionValue_list::TIndexData_ const& param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282C10.s" +f64 TFunctionValue_list::update_INTERPOLATE_NONE_(const TFunctionValue_list& rThis, + const TIndexData_& data) { + return rThis._44[data._10]; } -#pragma pop -/* 80282C24-80282C58 27D564 0034+00 1/1 0/0 0/0 .text - * update_INTERPOLATE_LINEAR___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::update_INTERPOLATE_LINEAR_( - JStudio::TFunctionValue_list const& param_0, - JStudio::TFunctionValue_list::TIndexData_ const& param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282C24.s" +f64 TFunctionValue_list::update_INTERPOLATE_LINEAR_(const TFunctionValue_list& rThis, + const TIndexData_& data) { + return functionvalue::interpolateValue_linear_1(data._0, data._8, rThis._44[data._10], + rThis._44[data._10 + 1]); } -#pragma pop +#ifdef NONMATCHING // float load +f64 TFunctionValue_list::update_INTERPOLATE_PLATEAU_(const TFunctionValue_list& rThis, + const TIndexData_& data) { + const f32* arr = rThis._44; + + return functionvalue::interpolateValue_plateau(data._0, data._8, arr[data._10], + lit_792 + data._8, arr[data._10 + 1]); +} +#else /* 80282C58-80282CA8 27D598 0050+00 1/1 0/0 0/0 .text * update_INTERPOLATE_PLATEAU___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::update_INTERPOLATE_PLATEAU_( +asm f64 JStudio::TFunctionValue_list::update_INTERPOLATE_PLATEAU_( JStudio::TFunctionValue_list const& param_0, JStudio::TFunctionValue_list::TIndexData_ const& param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282C58.s" } #pragma pop +#endif /* 80282CA8-80282D34 27D5E8 008C+00 1/1 0/0 0/0 .text * update_INTERPOLATE_BSPLINE_dataMore3___Q27JStudio19TFunctionValue_listFRCQ27JStudio19TFunctionValue_listRCQ37JStudio19TFunctionValue_list11TIndexData_ @@ -1007,124 +830,119 @@ asm void JStudio::TFunctionValue_list::update_INTERPOLATE_PLATEAU_( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list::update_INTERPOLATE_BSPLINE_dataMore3_( - JStudio::TFunctionValue_list const& param_0, - JStudio::TFunctionValue_list::TIndexData_ const& param_1) { +asm f64 TFunctionValue_list::update_INTERPOLATE_BSPLINE_dataMore3_( + TFunctionValue_list const& param_0, TFunctionValue_list::TIndexData_ const& param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282CA8.s" } #pragma pop -/* 80282D34-80282DA0 27D674 006C+00 0/0 1/1 0/0 .text - * __ct__Q27JStudio29TFunctionValue_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_list_parameter::TFunctionValue_list_parameter() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio29TFunctionValue_list_parameterFv.s" -} -#pragma pop +TFunctionValue_list_parameter::TFunctionValue_list_parameter() + : _44(NULL), _48(0), dat1(NULL), dat2(dat1), dat3(dat1), _58(NULL) {} -/* 80282DA0-80282DA8 27D6E0 0008+00 1/0 0/0 0/0 .text - * getType__Q27JStudio29TFunctionValue_list_parameterCFv */ -s32 JStudio::TFunctionValue_list_parameter::getType() const { +u32 TFunctionValue_list_parameter::getType() const { return 5; } -/* 80282DA8-80282DD8 27D6E8 0030+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio29TFunctionValue_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio29TFunctionValue_list_parameterFv.s" +TFunctionValueAttributeSet TFunctionValue_list_parameter::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, this); } -#pragma pop -/* 80282DD8-80282E08 27D718 0030+00 0/0 1/1 0/0 .text - * data_set__Q27JStudio29TFunctionValue_list_parameterFPCfUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::data_set(f32 const* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/data_set__Q27JStudio29TFunctionValue_list_parameterFPCfUl.s" -} -#pragma pop +void TFunctionValue_list_parameter::data_set(const f32* pf, u32 u) { + ASSERT((pf != NULL) || (u == 0)); -/* 80282E08-80282E60 27D748 0058+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio29TFunctionValue_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio29TFunctionValue_list_parameterFv.s" -} -#pragma pop + _44 = pf; + _48 = u; -/* 80282E60-80282F10 27D7A0 00B0+00 1/0 0/0 0/0 .text - * prepare__Q27JStudio29TFunctionValue_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::prepare() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/prepare__Q27JStudio29TFunctionValue_list_parameterFv.s" + dat1.set(_44); + dat2.set(&_44[_48 * 2]); + dat3 = dat1; +} + +void TFunctionValue_list_parameter::initialize() { + range_initialize(); + interpolate_initialize(); + + _44 = NULL; + _48 = 0; + + TIterator_data_ iter(NULL); + + dat1 = iter; + dat2 = dat1; + dat3 = dat1; + _58 = NULL; +} + +void TFunctionValue_list_parameter::prepare() { + range_prepare(); + interpolate_prepare(); + + u32 interp = interpolate_get(); + switch (interp) { + default: + JUTWarn w; + w << "unknown interpolation : " << interp; + case 0: + _58 = update_INTERPOLATE_NONE_; + break; + case 1: + _58 = update_INTERPOLATE_LINEAR_; + break; + case 2: + _58 = update_INTERPOLATE_PLATEAU_; + break; + case 3: + _58 = update_INTERPOLATE_BSPLINE_dataMore3_; + if (_48 != 2) + return; + _58 = update_INTERPOLATE_LINEAR_; + break; + } } -#pragma pop /* 80282F10-80282FE8 27D850 00D8+00 1/0 0/0 0/0 .text * getValue__Q27JStudio29TFunctionValue_list_parameterFd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::getValue(f64 param_0) { +asm f64 TFunctionValue_list_parameter::getValue(f64 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio29TFunctionValue_list_parameterFd.s" } #pragma pop -/* 80282FE8-80282FF4 27D928 000C+00 1/1 0/0 0/0 .text - * update_INTERPOLATE_NONE___Q27JStudio29TFunctionValue_list_parameterFRCQ27JStudio29TFunctionValue_list_parameterd - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::update_INTERPOLATE_NONE_( - JStudio::TFunctionValue_list_parameter const& param_0, f64 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282FE8.s" +f64 TFunctionValue_list_parameter::update_INTERPOLATE_NONE_( + const TFunctionValue_list_parameter& rThis, f64 d) { + return rThis.dat3.get()[-1]; } -#pragma pop -/* 80282FF4-80283024 27D934 0030+00 1/1 0/0 0/0 .text - * update_INTERPOLATE_LINEAR___Q27JStudio29TFunctionValue_list_parameterFRCQ27JStudio29TFunctionValue_list_parameterd - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::update_INTERPOLATE_LINEAR_( - JStudio::TFunctionValue_list_parameter const& param_0, f64 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80282FF4.s" +f64 TFunctionValue_list_parameter::update_INTERPOLATE_LINEAR_( + const TFunctionValue_list_parameter& rThis, f64 d) { + const f32* a = rThis.dat3.get(); + return functionvalue::interpolateValue_linear(d, a[-2], a[-1], a[0], a[1]); } -#pragma pop +#ifdef NONMATCHING // float load +f64 TFunctionValue_list_parameter::update_INTERPOLATE_PLATEAU_( + const TFunctionValue_list_parameter& rThis, f64 d) { + const f32* a = rThis.dat3.get(); + return functionvalue::interpolateValue_plateau(d, a[-2], a[-1], a[0], a[1]); +} +#else /* 80283024-80283060 27D964 003C+00 1/1 0/0 0/0 .text * update_INTERPOLATE_PLATEAU___Q27JStudio29TFunctionValue_list_parameterFRCQ27JStudio29TFunctionValue_list_parameterd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::update_INTERPOLATE_PLATEAU_( - JStudio::TFunctionValue_list_parameter const& param_0, f64 param_1) { +asm f64 TFunctionValue_list_parameter::update_INTERPOLATE_PLATEAU_( + TFunctionValue_list_parameter const& param_0, f64 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283024.s" } #pragma pop +#endif /* 80283060-802832C4 27D9A0 0264+00 1/1 0/0 0/0 .text * update_INTERPOLATE_BSPLINE_dataMore3___Q27JStudio29TFunctionValue_list_parameterFRCQ27JStudio29TFunctionValue_list_parameterd @@ -1132,112 +950,95 @@ asm void JStudio::TFunctionValue_list_parameter::update_INTERPOLATE_PLATEAU_( #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_list_parameter::update_INTERPOLATE_BSPLINE_dataMore3_( - JStudio::TFunctionValue_list_parameter const& param_0, f64 param_1) { +asm f64 TFunctionValue_list_parameter::update_INTERPOLATE_BSPLINE_dataMore3_( + TFunctionValue_list_parameter const& param_0, f64 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283060.s" } #pragma pop -/* 802832C4-80283344 27DC04 0080+00 0/0 1/1 0/0 .text __ct__Q27JStudio22TFunctionValue_hermiteFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_hermite::TFunctionValue_hermite() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__ct__Q27JStudio22TFunctionValue_hermiteFv.s" -} -#pragma pop +TFunctionValue_hermite::TFunctionValue_hermite() + : pf_(NULL), u_(0), uSize_(0), dat1(*this, NULL), dat2(dat1), dat3(dat1) {} -/* 80283344-8028334C 27DC84 0008+00 1/0 0/0 0/0 .text - * getType__Q27JStudio22TFunctionValue_hermiteCFv */ -s32 JStudio::TFunctionValue_hermite::getType() const { +u32 JStudio::TFunctionValue_hermite::getType() const { return 6; } -/* 8028334C-8028336C 27DC8C 0020+00 1/0 0/0 0/0 .text - * getAttributeSet__Q27JStudio22TFunctionValue_hermiteFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_hermite::getAttributeSet() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/getAttributeSet__Q27JStudio22TFunctionValue_hermiteFv.s" +TFunctionValueAttributeSet TFunctionValue_hermite::getAttributeSet() { + return TFunctionValueAttributeSet(NULL, this, NULL); } -#pragma pop -/* 8028336C-802833BC 27DCAC 0050+00 0/0 1/1 0/0 .text - * data_set__Q27JStudio22TFunctionValue_hermiteFPCfUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_hermite::data_set(f32 const* param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/data_set__Q27JStudio22TFunctionValue_hermiteFPCfUlUl.s" -} -#pragma pop +void TFunctionValue_hermite::data_set(const f32* pf, u32 u, u32 uSize) { + ASSERT((pf != NULL) || (u == 0)); + ASSERT((uSize == 3) || (uSize == 4)); -/* 802833BC-80283428 27DCFC 006C+00 1/0 0/0 0/0 .text - * initialize__Q27JStudio22TFunctionValue_hermiteFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_hermite::initialize() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/initialize__Q27JStudio22TFunctionValue_hermiteFv.s" -} -#pragma pop + pf_ = pf; + u_ = u; + uSize_ = uSize; -/* 80283428-8028344C 27DD68 0024+00 1/0 0/0 0/0 .text - * prepare__Q27JStudio22TFunctionValue_hermiteFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::TFunctionValue_hermite::prepare() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/prepare__Q27JStudio22TFunctionValue_hermiteFv.s" + dat1.set(pf_, uSize_); + dat2.set(&pf_[u_ * uSize_], uSize_); + dat3 = dat1; +} + +void TFunctionValue_hermite::initialize() { + range_initialize(); + + pf_ = NULL; + u_ = 0; + uSize_ = 0; + + TIterator_data_ data(*this, NULL); + dat1 = data; + dat2 = dat1; + dat3 = dat1; +} + +void TFunctionValue_hermite::prepare() { + range_prepare(); } -#pragma pop /* 8028344C-80283570 27DD8C 0124+00 1/0 0/0 0/0 .text * getValue__Q27JStudio22TFunctionValue_hermiteFd */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::TFunctionValue_hermite::getValue(f64 param_0) { +asm f64 TFunctionValue_hermite::getValue(f64 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/functionvalue/getValue__Q27JStudio22TFunctionValue_hermiteFd.s" } #pragma pop -/* 80283570-80283574 27DEB0 0004+00 1/0 0/0 0/0 .text - * extrapolateParameter_raw__Q27JStudio13functionvalueFdd */ -void JStudio::functionvalue::extrapolateParameter_raw(f64 param_0, f64 param_1) { - /* empty function */ +} // namespace JStudio + +namespace JStudio { +namespace functionvalue { + +f64 extrapolateParameter_raw(f64 a1, f64 a2) { + return a1; } -/* 80283574-802835B0 27DEB4 003C+00 1/0 0/0 0/0 .text - * extrapolateParameter_repeat__Q27JStudio13functionvalueFdd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::functionvalue::extrapolateParameter_repeat(f64 param_0, f64 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/extrapolateParameter_repeat__Q27JStudio13functionvalueFdd.s" -} -#pragma pop +f64 extrapolateParameter_repeat(f64 a1, f64 a2) { + f64 t = fmod(a1, a2); -/* 802835B0-802835DC 27DEF0 002C+00 1/0 0/0 0/0 .text - * extrapolateParameter_clamp__Q27JStudio13functionvalueFdd */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::functionvalue::extrapolateParameter_clamp(f64 param_0, f64 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/extrapolateParameter_clamp__Q27JStudio13functionvalueFdd.s" + if (t < DOUBLE_LABEL(/* 0.0 */ lit_652)) + t += a2; + + return t; } -#pragma pop + +f64 extrapolateParameter_clamp(f64 value, f64 max) { + if (value <= DOUBLE_LABEL(/* 0.0 */ lit_652)) + return DOUBLE_LABEL(/* 0.0 */ lit_652); + + if (max <= value) + value = max; + + return value; +} + +} // namespace functionvalue +} // namespace JStudio /* 802835DC-80283634 27DF1C 0058+00 1/1 0/0 0/0 .text * findUpperBound_binary_current__7JGadgetFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCd @@ -1302,98 +1103,3 @@ extern "C" asm void func_802838C8(void* _this, #include "asm/JSystem/JStudio/JStudio/functionvalue/func_802838C8.s" } #pragma pop - -/* 80283BC4-80283C24 27E504 0060+00 1/0 0/0 0/0 .text __dt__Q27JStudio22TFunctionValue_hermiteFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_hermite::~TFunctionValue_hermite() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio22TFunctionValue_hermiteFv.s" -} -#pragma pop - -/* 80283C24-80283C84 27E564 0060+00 1/0 1/0 0/0 .text - * __dt__Q27JStudio29TFunctionValue_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_list_parameter::~TFunctionValue_list_parameter() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio29TFunctionValue_list_parameterFv.s" -} -#pragma pop - -/* 80283C84-80283CE4 27E5C4 0060+00 1/0 0/0 0/0 .text __dt__Q27JStudio19TFunctionValue_listFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_list::~TFunctionValue_list() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio19TFunctionValue_listFv.s" -} -#pragma pop - -/* 80283CE4-80283D44 27E624 0060+00 1/0 0/0 0/0 .text - * __dt__Q27JStudio25TFunctionValue_transitionFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_transition::~TFunctionValue_transition() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio25TFunctionValue_transitionFv.s" -} -#pragma pop - -/* 80283D44-80283DA4 27E684 0060+00 1/0 0/0 0/0 .text __dt__Q27JStudio23TFunctionValue_constantFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_constant::~TFunctionValue_constant() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio23TFunctionValue_constantFv.s" -} -#pragma pop - -/* 80283DA4-80283E24 27E6E4 0080+00 1/0 0/0 0/0 .text __dt__Q27JStudio24TFunctionValue_compositeFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::TFunctionValue_composite::~TFunctionValue_composite() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/__dt__Q27JStudio24TFunctionValue_compositeFv.s" -} -#pragma pop - -/* 80283E24-80283EB8 27E764 0094+00 1/1 0/0 0/0 .text - * upper_bound>__3stdFQ37JStudio29TFunctionValue_list_parameter15TIterator_data_Q37JStudio29TFunctionValue_list_parameter15TIterator_data_RCdQ23std7less - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -extern "C" asm void func_80283E24(void* _this, - JStudio::TFunctionValue_list_parameter::TIterator_data_ param_0, - JStudio::TFunctionValue_list_parameter::TIterator_data_ param_1, - f64 const& param_2, std::less param_3) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283E24.s" -} -#pragma pop - -/* 80283EB8-80283F80 27E7F8 00C8+00 1/1 0/0 0/0 .text - * upper_bound>__3stdFQ37JStudio22TFunctionValue_hermite15TIterator_data_Q37JStudio22TFunctionValue_hermite15TIterator_data_RCdQ23std7less - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -extern "C" asm void func_80283EB8(void* _this, - JStudio::TFunctionValue_hermite::TIterator_data_ param_0, - JStudio::TFunctionValue_hermite::TIterator_data_ param_1, - f64 const& param_2, std::less param_3) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/functionvalue/func_80283EB8.s" -} -#pragma pop diff --git a/libs/JSystem/JStudio/JStudio/fvb-data-parse.cpp b/libs/JSystem/JStudio/JStudio/fvb-data-parse.cpp index f0077f75737..f3183ac9498 100644 --- a/libs/JSystem/JStudio/JStudio/fvb-data-parse.cpp +++ b/libs/JSystem/JStudio/JStudio/fvb-data-parse.cpp @@ -11,30 +11,6 @@ // Types: // -namespace JStudio { -namespace fvb { -struct data { - struct TParse_TParagraph { - struct TData {}; - - /* 802850AC */ void getData(JStudio::fvb::data::TParse_TParagraph::TData*) const; - }; -}; - -}; // namespace fvb - -}; // namespace JStudio - -namespace JGadget { -struct binary { - struct TEBit {}; - - /* 802DC864 */ void parseVariableUInt_16_32_following(void const*, u32*, u32*, - JGadget::binary::TEBit*); -}; - -}; // namespace JGadget - // // Forward References: // diff --git a/libs/JSystem/JStudio/JStudio/fvb-data.cpp b/libs/JSystem/JStudio/JStudio/fvb-data.cpp index 16bac06f3ce..0b49d483220 100644 --- a/libs/JSystem/JStudio/JStudio/fvb-data.cpp +++ b/libs/JSystem/JStudio/JStudio/fvb-data.cpp @@ -11,16 +11,6 @@ // Types: // -namespace JStudio { -namespace fvb { -struct data { - static f32 ga4cSignature[1 + 1 /* padding */]; -}; - -}; // namespace fvb - -}; // namespace JStudio - // // Forward References: // diff --git a/libs/JSystem/JStudio/JStudio/fvb-inline.cpp b/libs/JSystem/JStudio/JStudio/fvb-inline.cpp new file mode 100644 index 00000000000..0299bb29ae8 --- /dev/null +++ b/libs/JSystem/JStudio/JStudio/fvb-inline.cpp @@ -0,0 +1,31 @@ +#include "JSystem/JStudio/JStudio/object-id.h" + +namespace JGadget { +/* TLinkList */ +struct TLinkList__template1 { + struct iterator {}; +}; + +/* TVector_pointer */ +struct TVector_pointer__template0 {}; + +}; // namespace JGadget + +extern "C" void +isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData(); +extern "C" void _savegpr_28(); +extern "C" void _restgpr_28(); + +/* 80285018-802850AC 27F958 0094+00 1/1 0/0 0/0 .text + * find_if8iterator,Q37JStudio6object18TPRObject_ID_equal>__3stdFQ37JGadget37TLinkList8iteratorQ37JGadget37TLinkList8iteratorQ37JStudio6object18TPRObject_ID_equal + */ +#pragma push +#pragma optimization_level 0 +#pragma optimizewithasm off +extern "C" asm void func_80285018(void* _this, JGadget::TLinkList__template1::iterator param_0, + JGadget::TLinkList__template1::iterator param_1, + JStudio::object::TPRObject_ID_equal param_2) { + nofralloc +#include "asm/JSystem/JStudio/JStudio/fvb/func_80285018.s" +} +#pragma pop diff --git a/libs/JSystem/JStudio/JStudio/fvb.cpp b/libs/JSystem/JStudio/JStudio/fvb.cpp index e32f5ea21a8..3cbafd02f76 100644 --- a/libs/JSystem/JStudio/JStudio/fvb.cpp +++ b/libs/JSystem/JStudio/JStudio/fvb.cpp @@ -12,193 +12,16 @@ // namespace JGadget { -template -struct TLinkList {}; /* TLinkList */ struct TLinkList__template1 { struct iterator {}; }; -template -struct TVector_pointer {}; /* TVector_pointer */ struct TVector_pointer__template0 {}; -struct binary { - struct TParse_header_block { - /* 802DC8C8 */ ~TParse_header_block(); - }; -}; - -struct TLinkListNode {}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA1C */ ~TNodeLinkList(); - /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - /* 802DCBD4 */ void Erase(JGadget::TLinkListNode*); -}; - -struct TVector_pointer_void { - /* 802DCCFC */ ~TVector_pointer_void(); - /* 802DCDA4 */ void insert(void**, void* const&); -}; - }; // namespace JGadget -namespace JStudio { -namespace fvb { -struct data { - struct TParse_TBlock {}; - - struct TParse_TParagraph { - struct TData {}; - - /* 802850AC */ void getData(JStudio::fvb::data::TParse_TParagraph::TData*) const; - }; - - static f32 ga4cSignature[1 + 1 /* padding */]; -}; - -struct TObject; -struct TControl { - /* 80284668 */ TControl(); - /* 80284698 */ ~TControl(); - /* 80284704 */ void appendObject(JStudio::fvb::TObject*); - /* 80284750 */ void removeObject(JStudio::fvb::TObject*); - /* 80284780 */ void destroyObject(JStudio::fvb::TObject*); - /* 802847D0 */ void destroyObject_all(); - /* 80284834 */ void getObject(void const*, u32); - /* 802848D4 */ void getObject_index(u32); -}; - -struct TObject { - /* 80283F80 */ ~TObject(); - /* 80283FC8 */ void prepare(JStudio::fvb::data::TParse_TBlock const&, JStudio::fvb::TControl*); -}; - -struct TObject_composite { - /* 80284254 */ TObject_composite(JStudio::fvb::data::TParse_TBlock const&); - /* 802842D4 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284F78 */ ~TObject_composite(); -}; - -struct TObject_constant { - /* 80284338 */ TObject_constant(JStudio::fvb::data::TParse_TBlock const&); - /* 802843B8 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284EF4 */ ~TObject_constant(); -}; - -struct TObject_transition { - /* 802843C8 */ TObject_transition(JStudio::fvb::data::TParse_TBlock const&); - /* 80284448 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284E70 */ ~TObject_transition(); -}; - -struct TObject_list { - /* 80284460 */ TObject_list(JStudio::fvb::data::TParse_TBlock const&); - /* 802844E0 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284DEC */ ~TObject_list(); -}; - -struct TObject_list_parameter { - /* 80284500 */ TObject_list_parameter(JStudio::fvb::data::TParse_TBlock const&); - /* 80284580 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284D68 */ ~TObject_list_parameter(); -}; - -struct TObject_hermite { - /* 802845B0 */ TObject_hermite(JStudio::fvb::data::TParse_TBlock const&); - /* 80284630 */ void prepare_data_(JStudio::fvb::data::TParse_TParagraph::TData const&, - JStudio::fvb::TControl*); - /* 80284CE4 */ ~TObject_hermite(); -}; - -struct TFactory { - /* 80284918 */ ~TFactory(); - /* 80284960 */ void create(JStudio::fvb::data::TParse_TBlock const&); - /* 80284AA0 */ void destroy(JStudio::fvb::TObject*); -}; - -struct TParse { - /* 80284ADC */ TParse(JStudio::fvb::TControl*); - /* 80284AFC */ ~TParse(); - /* 80284B5C */ void parseHeader_next(void const**, u32*, u32); - /* 80284BF0 */ void parseBlock_next(void const**, u32*, u32); -}; - -}; // namespace fvb - -struct object { - struct TPRObject_ID_equal {}; - - struct TIDData { - /* 80288988 */ void isEqual(JStudio::object::TIDData const&, - JStudio::object::TIDData const&); - }; -}; - -struct TFunctionValue { - /* 802816A0 */ ~TFunctionValue(); -}; - -struct TFunctionValueAttribute_range { - /* 802819F4 */ void range_set(f64, f64); -}; - -struct TFunctionValue_composite { - struct TData {}; - - /* 80281D5C */ TFunctionValue_composite(); - /* 80281E5C */ void composite_raw(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80281EC8 */ void composite_index(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 8028202C */ void - composite_parameter(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282094 */ void composite_add(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282118 */ void - composite_subtract(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282200 */ void - composite_multiply(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); - /* 80282284 */ void composite_divide(JGadget::TVector_pointer const&, - JStudio::TFunctionValue_composite::TData const&, f64); -}; - -struct TFunctionValue_constant { - /* 8028236C */ TFunctionValue_constant(); -}; - -struct TFunctionValue_transition { - /* 802823EC */ TFunctionValue_transition(); -}; - -struct TFunctionValue_list { - /* 802826BC */ TFunctionValue_list(); -}; - -struct TFunctionValue_list_parameter { - /* 80282D34 */ TFunctionValue_list_parameter(); - /* 80282DD8 */ void data_set(f32 const*, u32); -}; - -struct TFunctionValue_hermite { - /* 802832C4 */ TFunctionValue_hermite(); - /* 8028336C */ void data_set(f32 const*, u32, u32); -}; - -}; // namespace JStudio - namespace std { template void find_if(/* ... */); @@ -215,14 +38,7 @@ void func_80285018(void* _this, JGadget::TLinkList__template1::iterator, extern "C" void __dt__Q37JStudio3fvb7TObjectFv(); extern "C" void prepare__Q37JStudio3fvb7TObjectFRCQ47JStudio3fvb4data13TParse_TBlockPQ37JStudio3fvb8TControl(); -extern "C" static void func_802841EC(); -extern "C" static void func_802841F8(); -extern "C" static void func_80284204(); -extern "C" static void func_80284210(); -extern "C" static void func_8028421C(); -extern "C" static void func_80284228(); extern "C" static void func_80284234(); -extern "C" static void func_80284240(); extern "C" void __ct__Q37JStudio3fvb17TObject_compositeFRCQ47JStudio3fvb4data13TParse_TBlock(); extern "C" void prepare_data___Q37JStudio3fvb17TObject_compositeFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl(); @@ -289,8 +105,6 @@ extern "C" void __ct__Q27JStudio22TFunctionValue_hermiteFv(); extern "C" void data_set__Q27JStudio22TFunctionValue_hermiteFPCfUlUl(); extern "C" void getData__Q47JStudio3fvb4data17TParse_TParagraphCFPQ57JStudio3fvb4data17TParse_TParagraph5TData(); -extern "C" void -isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData(); extern "C" void* __nw__FUl(); extern "C" void __dl__FPv(); extern "C" void __dt__Q37JGadget6binary19TParse_header_blockFv(); @@ -306,7 +120,7 @@ extern "C" void _savegpr_29(); extern "C" void _restgpr_23(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void memcmp(); +extern "C" int memcmp(const void*, const void*, u32); extern "C" extern void* __vt__Q37JGadget6binary19TParse_header_block[5]; extern "C" extern void* __vt__Q27JStudio22TFunctionValue_hermite[8]; extern "C" extern void* __vt__Q27JStudio29TFunctionValue_list_parameter[8]; @@ -483,129 +297,241 @@ SECTION_DATA extern void* __vt__Q37JStudio3fvb7TObject[4] = { (void*)NULL, }; -/* 80283F80-80283FC8 27E8C0 0048+00 6/6 0/0 0/0 .text __dt__Q37JStudio3fvb7TObjectFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject::~TObject() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb7TObjectFv.s" -} -#pragma pop +namespace JStudio { +namespace fvb { +TObject::~TObject() {} + +#ifdef NONMATCHING +void TObject::prepare(data::TParse_TBlock const& rBlock, TControl* pControl) { + 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(); +} +#else /* 80283FC8-802841EC 27E908 0224+00 2/1 0/0 0/0 .text * prepare__Q37JStudio3fvb7TObjectFRCQ47JStudio3fvb4data13TParse_TBlockPQ37JStudio3fvb8TControl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TObject::prepare(JStudio::fvb::data::TParse_TBlock const& param_0, - JStudio::fvb::TControl* param_1) { +asm void TObject::prepare(data::TParse_TBlock const& param_0, TControl* param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/func_80283FC8.s" } #pragma pop -/* 802841EC-802841F8 27EB2C 000C+00 1/0 0/0 0/0 .text - * getCompositeData_raw___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_802841EC() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_802841EC.s" -} -#pragma pop +#endif +namespace { -/* 802841F8-80284204 27EB38 000C+00 1/0 0/0 0/0 .text - * getCompositeData_index___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_802841F8() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_802841F8.s" +TFunctionValue_composite::TData getCompositeData_raw_(const void* arg1) { + return TFunctionValue_composite::TData(*(const void**)arg1); } -#pragma pop -/* 80284204-80284210 27EB44 000C+00 1/0 0/0 0/0 .text - * getCompositeData_parameter___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80284204() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284204.s" +TFunctionValue_composite::TData getCompositeData_index_(const void* arg1) { + return TFunctionValue_composite::TData(*(u32*)arg1); } -#pragma pop -/* 80284210-8028421C 27EB50 000C+00 1/0 0/0 0/0 .text - * getCompositeData_add___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80284210() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284210.s" +TFunctionValue_composite::TData getCompositeData_parameter_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); } -#pragma pop -/* 8028421C-80284228 27EB5C 000C+00 1/0 0/0 0/0 .text - * getCompositeData_subtract___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_8028421C() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_8028421C.s" +TFunctionValue_composite::TData getCompositeData_add_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); } -#pragma pop -/* 80284228-80284234 27EB68 000C+00 1/0 0/0 0/0 .text - * getCompositeData_multiply___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80284228() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284228.s" +TFunctionValue_composite::TData getCompositeData_subtract_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); } -#pragma pop -/* 80284234-80284240 27EB74 000C+00 1/0 0/0 0/0 .text - * getCompositeData_divide___Q37JStudio3fvb17@unnamed@fvb_cpp@FPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void func_80284234() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284234.s" +TFunctionValue_composite::TData getCompositeData_multiply_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); } -#pragma pop + +TFunctionValue_composite::TData getCompositeData_divide_(const void* arg1) { + return TFunctionValue_composite::TData(*(f32*)arg1); +} + +} // namespace + +} // namespace fvb +} // namespace JStudio + +using namespace JStudio::fvb; /* ############################################################################################## */ /* 8039AA00-8039AA40 -00001 0040+00 1/1 0/0 0/0 .rodata * saCompositeOperation___Q37JStudio3fvb17@unnamed@fvb_cpp@ */ SECTION_RODATA static void* const data_8039AA00[16] = { - (void*)NULL, (void*)NULL, (void*)func_80281E5C, (void*)func_802841EC, - (void*)func_80281EC8, (void*)func_802841F8, (void*)func_8028202C, (void*)func_80284204, - (void*)func_80282094, (void*)func_80284210, (void*)func_80282118, (void*)func_8028421C, - (void*)func_80282200, (void*)func_80284228, (void*)func_80282284, (void*)func_80284234, + (void*)NULL, (void*)NULL, + (void*)func_80281E5C, (void*)getCompositeData_raw_, + (void*)func_80281EC8, (void*)getCompositeData_index_, + (void*)func_8028202C, (void*)getCompositeData_parameter_, + (void*)func_80282094, (void*)getCompositeData_add_, + (void*)func_80282118, (void*)getCompositeData_subtract_, + (void*)func_80282200, (void*)getCompositeData_multiply_, + (void*)func_80282284, (void*)getCompositeData_divide_, }; -COMPILER_STRIP_GATE(0x8039AA00, &data_8039AA00); /* 80284240-80284254 27EB80 0014+00 1/1 0/0 0/0 .text * getCompositeOperation___Q37JStudio3fvb17@unnamed@fvb_cpp@FQ47JStudio3fvb4data11TEComposite */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void func_80284240() { +static asm data::CompositeOperation* func_80284240(data::TEComposite comp) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/func_80284240.s" } #pragma pop -/* 80284254-802842D4 27EB94 0080+00 1/1 0/0 0/0 .text - * __ct__Q37JStudio3fvb17TObject_compositeFRCQ47JStudio3fvb4data13TParse_TBlock */ +namespace JStudio { +namespace fvb { + +#ifdef NONMATCHING +TObject_composite::TObject_composite(const data::TParse_TBlock& block) : TObject(block, &fnValue) {} +#else +// /* 80284254-802842D4 27EB94 0080+00 1/1 0/0 0/0 .text +// * __ct__Q37JStudio3fvb17TObject_compositeFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -615,170 +541,175 @@ asm JStudio::fvb::TObject_composite::TObject_composite( #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb17TObject_compositeFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop +#endif +#ifdef NONMATCHING // incomplete +void TObject_composite::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 TFunctionValue_composite* pContent = + static_cast(rData.pContent); + ASSERT(pContent != NULL); + + data::CompositeOperation* ops = func_80284240(*(data::TEComposite*)pContent); + data::CompositeOperation pfn = ops[1]; + + ASSERT(pfn != NULL); + + pfn(pContent->data); + fnValue.data_set(*ops, pContent->data); +} +#else /* 802842D4-80284338 27EC14 0064+00 1/0 0/0 0/0 .text * prepare_data___Q37JStudio3fvb17TObject_compositeFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TObject_composite::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { +asm void TObject_composite::prepare_data_(data::TParse_TParagraph::TData const& param_0, + TControl* param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/func_802842D4.s" } #pragma pop +#endif /* 80284338-802843B8 27EC78 0080+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3fvb16TObject_constantFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::fvb::TObject_constant::TObject_constant( - JStudio::fvb::data::TParse_TBlock const& param_0) { +asm TObject_constant::TObject_constant(data::TParse_TBlock const& param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb16TObject_constantFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop -/* 802843B8-802843C8 27ECF8 0010+00 1/0 0/0 0/0 .text - * prepare_data___Q37JStudio3fvb16TObject_constantFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TObject_constant::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_802843B8.s" +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]); } -#pragma pop /* 802843C8-80284448 27ED08 0080+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3fvb18TObject_transitionFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::fvb::TObject_transition::TObject_transition( - JStudio::fvb::data::TParse_TBlock const& param_0) { +asm TObject_transition::TObject_transition(data::TParse_TBlock const& param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb18TObject_transitionFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop -/* 80284448-80284460 27ED88 0018+00 1/0 0/0 0/0 .text - * prepare_data___Q37JStudio3fvb18TObject_transitionFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TObject_transition::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284448.s" +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]); } -#pragma pop /* 80284460-802844E0 27EDA0 0080+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3fvb12TObject_listFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::fvb::TObject_list::TObject_list(JStudio::fvb::data::TParse_TBlock const& param_0) { +asm TObject_list::TObject_list(data::TParse_TBlock const& param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb12TObject_listFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop -/* 802844E0-80284500 27EE20 0020+00 1/0 0/0 0/0 .text - * prepare_data___Q37JStudio3fvb12TObject_listFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TObject_list::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_802844E0.s" +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); } -#pragma pop /* 80284500-80284580 27EE40 0080+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3fvb22TObject_list_parameterFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::fvb::TObject_list_parameter::TObject_list_parameter( - JStudio::fvb::data::TParse_TBlock const& param_0) { +asm TObject_list_parameter::TObject_list_parameter(data::TParse_TBlock const& param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb22TObject_list_parameterFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop -/* 80284580-802845B0 27EEC0 0030+00 1/0 0/0 0/0 .text - * prepare_data___Q37JStudio3fvb22TObject_list_parameterFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TObject_list_parameter::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284580.s" +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); } -#pragma pop /* 802845B0-80284630 27EEF0 0080+00 1/1 0/0 0/0 .text * __ct__Q37JStudio3fvb15TObject_hermiteFRCQ47JStudio3fvb4data13TParse_TBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm JStudio::fvb::TObject_hermite::TObject_hermite( - JStudio::fvb::data::TParse_TBlock const& param_0) { +asm TObject_hermite::TObject_hermite(data::TParse_TBlock const& param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb15TObject_hermiteFRCQ47JStudio3fvb4data13TParse_TBlock.s" } #pragma pop -/* 80284630-80284668 27EF70 0038+00 1/0 0/0 0/0 .text - * prepare_data___Q37JStudio3fvb15TObject_hermiteFRCQ57JStudio3fvb4data17TParse_TParagraph5TDataPQ37JStudio3fvb8TControl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TObject_hermite::prepare_data_( - JStudio::fvb::data::TParse_TParagraph::TData const& param_0, JStudio::fvb::TControl* param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80284630.s" -} -#pragma pop +void TObject_hermite::prepare_data_(const data::TParse_TParagraph::TData& rData, + TControl* control) { + ASSERT(rData.u32Type == data::PARAGRAPH_DATA); -/* 80284668-80284698 27EFA8 0030+00 0/0 1/1 0/0 .text __ct__Q37JStudio3fvb8TControlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TControl::TControl() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb8TControlFv.s" -} -#pragma pop + u32 u32Size = rData.u32Size; + JUT_EXPECT(u32size >= 8); -/* 80284698-80284704 27EFD8 006C+00 1/0 1/1 0/0 .text __dt__Q37JStudio3fvb8TControlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TControl::~TControl() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb8TControlFv.s" + const ListData* pContent = static_cast(rData.pContent); + ASSERT(pContent != NULL); + + fnValue.data_set(pContent->_4, pContent->_0 & 0xFFFFFFF, pContent->_0 >> 0x1C); +} + +TControl::TControl() : pFactory(NULL) {} + +TControl::~TControl() { + JUT_EXPECT(ocObject_.empty()); } -#pragma pop /* 80284704-80284750 27F044 004C+00 1/1 0/0 0/0 .text * appendObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::appendObject(JStudio::fvb::TObject* param_0) { +asm void TControl::appendObject(TObject* param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/appendObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject.s" } @@ -789,7 +720,7 @@ asm void JStudio::fvb::TControl::appendObject(JStudio::fvb::TObject* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::removeObject(JStudio::fvb::TObject* param_0) { +asm void TControl::removeObject(TObject* param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/removeObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject.s" } @@ -800,7 +731,7 @@ asm void JStudio::fvb::TControl::removeObject(JStudio::fvb::TObject* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::destroyObject(JStudio::fvb::TObject* param_0) { +asm void TControl::destroyObject(TObject* param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/destroyObject__Q37JStudio3fvb8TControlFPQ37JStudio3fvb7TObject.s" } @@ -811,7 +742,7 @@ asm void JStudio::fvb::TControl::destroyObject(JStudio::fvb::TObject* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::destroyObject_all() { +asm void TControl::destroyObject_all() { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/destroyObject_all__Q37JStudio3fvb8TControlFv.s" } @@ -821,7 +752,7 @@ asm void JStudio::fvb::TControl::destroyObject_all() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::getObject(void const* param_0, u32 param_1) { +asm TObject* TControl::getObject(void const* param_0, u32 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/getObject__Q37JStudio3fvb8TControlFPCvUl.s" } @@ -832,159 +763,121 @@ asm void JStudio::fvb::TControl::getObject(void const* param_0, u32 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::fvb::TControl::getObject_index(u32 param_0) { +asm TObject* TControl::getObject_index(u32 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/fvb/getObject_index__Q37JStudio3fvb8TControlFUl.s" } #pragma pop -/* 80284918-80284960 27F258 0048+00 1/0 1/1 0/0 .text __dt__Q37JStudio3fvb8TFactoryFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TFactory::~TFactory() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb8TFactoryFv.s" -} -#pragma pop +TFactory::~TFactory() {} -/* 80284960-80284AA0 27F2A0 0140+00 1/0 0/0 0/0 .text - * create__Q37JStudio3fvb8TFactoryFRCQ47JStudio3fvb4data13TParse_TBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TFactory::create(JStudio::fvb::data::TParse_TBlock const& param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/create__Q37JStudio3fvb8TFactoryFRCQ47JStudio3fvb4data13TParse_TBlock.s" +TObject* TFactory::create(data::TParse_TBlock const& 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; + } } -#pragma pop -/* 80284AA0-80284ADC 27F3E0 003C+00 1/0 0/0 0/0 .text - * destroy__Q37JStudio3fvb8TFactoryFPQ37JStudio3fvb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TFactory::destroy(JStudio::fvb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/destroy__Q37JStudio3fvb8TFactoryFPQ37JStudio3fvb7TObject.s" +void TFactory::destroy(TObject* pObject) { + delete pObject; } -#pragma pop -/* 80284ADC-80284AFC 27F41C 0020+00 0/0 1/1 0/0 .text - * __ct__Q37JStudio3fvb6TParseFPQ37JStudio3fvb8TControl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TParse::TParse(JStudio::fvb::TControl* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__ct__Q37JStudio3fvb6TParseFPQ37JStudio3fvb8TControl.s" +TParse::TParse(TControl* pControl) : pControl_(pControl) { + ASSERT(pControl_ != 0); } -#pragma pop -/* 80284AFC-80284B5C 27F43C 0060+00 1/0 1/1 0/0 .text __dt__Q37JStudio3fvb6TParseFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TParse::~TParse() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb6TParseFv.s" -} -#pragma pop +TParse::~TParse() {} -/* 80284B5C-80284BF0 27F49C 0094+00 1/0 0/0 0/0 .text - * parseHeader_next__Q37JStudio3fvb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TParse::parseHeader_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/parseHeader_next__Q37JStudio3fvb6TParseFPPCvPUlUl.s" -} -#pragma pop +bool TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_out, u32 flags) { + ASSERT(ppData_inout != 0); + ASSERT(puBlock_out != 0); -/* 80284BF0-80284CE4 27F530 00F4+00 1/0 0/0 0/0 .text - * parseBlock_next__Q37JStudio3fvb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::fvb::TParse::parseBlock_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/parseBlock_next__Q37JStudio3fvb6TParseFPPCvPUlUl.s" -} -#pragma pop + const void* pData = *ppData_inout; + ASSERT(pData != 0); -/* 80284CE4-80284D68 27F624 0084+00 1/0 0/0 0/0 .text __dt__Q37JStudio3fvb15TObject_hermiteFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_hermite::~TObject_hermite() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb15TObject_hermiteFv.s" -} -#pragma pop + const data::TParse_THeader header(pData); + *ppData_inout = header.getContent(); + *puBlock_out = header.get_blockNumber(); -/* 80284D68-80284DEC 27F6A8 0084+00 1/0 0/0 0/0 .text - * __dt__Q37JStudio3fvb22TObject_list_parameterFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_list_parameter::~TObject_list_parameter() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb22TObject_list_parameterFv.s" -} -#pragma pop + if (memcmp(header.get_signature(), &data::ga4cSignature, 4) != 0) { + JUTWarn w; + w << "unknown signature"; + return false; + } -/* 80284DEC-80284E70 27F72C 0084+00 1/0 0/0 0/0 .text __dt__Q37JStudio3fvb12TObject_listFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_list::~TObject_list() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb12TObject_listFv.s" + 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; } -#pragma pop -/* 80284E70-80284EF4 27F7B0 0084+00 1/0 0/0 0/0 .text __dt__Q37JStudio3fvb18TObject_transitionFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_transition::~TObject_transition() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb18TObject_transitionFv.s" -} -#pragma pop +bool TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 flags) { + ASSERT(ppData_inout != 0); + ASSERT(puData_out != 0); -/* 80284EF4-80284F78 27F834 0084+00 1/0 0/0 0/0 .text __dt__Q37JStudio3fvb16TObject_constantFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_constant::~TObject_constant() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb16TObject_constantFv.s" -} -#pragma pop + const void* pData = *ppData_inout; + ASSERT(pData != 0); + data::TParse_TBlock blk(pData); + *ppData_inout = blk.getNext(); + *puData_out = blk.get_size(); -/* 80284F78-80285018 27F8B8 00A0+00 1/0 0/0 0/0 .text __dt__Q37JStudio3fvb17TObject_compositeFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::fvb::TObject_composite::~TObject_composite() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/__dt__Q37JStudio3fvb17TObject_compositeFv.s" -} -#pragma pop + TControl* pControl = getControl(); + ASSERT(pControl != 0); -/* 80285018-802850AC 27F958 0094+00 1/1 0/0 0/0 .text - * find_if8iterator,Q37JStudio6object18TPRObject_ID_equal>__3stdFQ37JGadget37TLinkList8iteratorQ37JGadget37TLinkList8iteratorQ37JStudio6object18TPRObject_ID_equal - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -extern "C" asm void func_80285018(void* _this, JGadget::TLinkList__template1::iterator param_0, - JGadget::TLinkList__template1::iterator param_1, - JStudio::object::TPRObject_ID_equal param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/fvb/func_80285018.s" + if (flags & 0x10) { + if (pControl->getObject(blk.get_ID(), blk.get_IDSize()) != NULL) + return 1; + } + if (flags & 0x20) { + return 1; + } + + TFactory* pFactory = pControl->getFactory(); + if (pFactory == NULL) { + JUTWarn w; + w << "factory not specified"; + return 0; + } + + TObject* pObject = pFactory->create(blk); + if (pObject == NULL) { + JUTWarn w; + w << "can't create function-value"; + if (flags & 0x40) { + return 1; + } + return 0; + } + pObject->prepare(blk, pControl); + pControl->appendObject(pObject); + return 1; } -#pragma pop + +} // namespace fvb +} // namespace JStudio diff --git a/libs/JSystem/JStudio/JStudio/jstudio-control.cpp b/libs/JSystem/JStudio/JStudio/jstudio-control.cpp index 211873d7836..6b9b6c7afe6 100644 --- a/libs/JSystem/JStudio/JStudio/jstudio-control.cpp +++ b/libs/JSystem/JStudio/JStudio/jstudio-control.cpp @@ -4,6 +4,9 @@ // #include "JSystem/JStudio/JStudio/jstudio-control.h" +#include "JSystem/JGadget/binary.h" +#include "JSystem/JStudio/JStudio/fvb.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -18,38 +21,6 @@ struct TCreateObject { /* 80285488 */ ~TCreateObject(); }; -namespace stb { -struct data { - struct TParse_TBlock_object {}; - - struct TParse_THeader {}; - - struct TParse_TBlock {}; -}; - -struct TControl { - /* 802890B4 */ TControl(); - /* 80289194 */ ~TControl(); -}; - -struct TObject {}; - -struct TFactory { - /* 802895B4 */ ~TFactory(); - /* 80289604 */ void destroy(JStudio::stb::TObject*); -}; - -struct TParse { - /* 80289640 */ TParse(JStudio::stb::TControl*); - /* 80289660 */ ~TParse(); - /* 802896C0 */ void parseHeader_next(void const**, u32*, u32); - /* 8028978C */ void parseBlock_next(void const**, u32*, u32); - /* 802897E8 */ void parseBlock_block(JStudio::stb::data::TParse_TBlock const&, u32); - /* 80289820 */ void parseBlock_object(JStudio::stb::data::TParse_TBlock_object const&, u32); -}; - -}; // namespace stb - struct TFactory { /* 802854D0 */ ~TFactory(); /* 80285560 */ void appendCreateObject(JStudio::TCreateObject*); @@ -95,47 +66,12 @@ struct TParse { /* 802858F0 */ void parseBlock_block_ctb_(JStudio::stb::data::TParse_TBlock const&, u32); }; -namespace fvb { -struct TControl { - /* 80284668 */ TControl(); - /* 80284698 */ ~TControl(); -}; - -struct TFactory { - /* 80284918 */ ~TFactory(); -}; - -struct TParse { - /* 80284ADC */ TParse(JStudio::fvb::TControl*); - /* 80284AFC */ ~TParse(); -}; - -}; // namespace fvb - struct data { static u8 ga8cSignature[8]; }; }; // namespace JStudio -namespace JGadget { -struct binary { - struct TParse_header_block { - /* 802DC910 */ void parse_next(void const**, u32); - }; -}; - -struct TLinkListNode {}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA1C */ ~TNodeLinkList(); - /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); -}; - -}; // namespace JGadget - // // Forward References: // diff --git a/libs/JSystem/JStudio/JStudio/jstudio-object.cpp b/libs/JSystem/JStudio/JStudio/jstudio-object.cpp index b8b71f4d628..3580ce4e508 100644 --- a/libs/JSystem/JStudio/JStudio/jstudio-object.cpp +++ b/libs/JSystem/JStudio/JStudio/jstudio-object.cpp @@ -4,6 +4,8 @@ // #include "JSystem/JStudio/JStudio/jstudio-object.h" +#include "JSystem/JStudio/JStudio/fvb.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -73,18 +75,6 @@ struct TVariableValue { static u8 soOutput_none_[4 + 4 /* padding */]; }; -namespace stb { -struct data { - struct TParse_TBlock_object {}; -}; - -struct TObject { - /* 80288AC0 */ TObject(JStudio::stb::data::TParse_TBlock_object const&); - /* 80288B30 */ ~TObject(); -}; - -}; // namespace stb - struct TObject { /* 802866B0 */ ~TObject(); /* 80286734 */ void forward_value(u32); @@ -214,14 +204,6 @@ struct TObject_sound { /* 80287F04 */ ~TObject_sound(); }; -namespace fvb { -struct TControl { - /* 80284834 */ void getObject(void const*, u32); - /* 802848D4 */ void getObject_index(u32); -}; - -}; // namespace fvb - }; // namespace JStudio // diff --git a/libs/JSystem/JStudio/JStudio/object-id.cpp b/libs/JSystem/JStudio/JStudio/object-id.cpp index e060913bf3e..cdd9cbb9daa 100644 --- a/libs/JSystem/JStudio/JStudio/object-id.cpp +++ b/libs/JSystem/JStudio/JStudio/object-id.cpp @@ -11,16 +11,6 @@ // Types: // -namespace JStudio { -struct object { - struct TIDData { - /* 80288988 */ void isEqual(JStudio::object::TIDData const&, - JStudio::object::TIDData const&); - }; -}; - -}; // namespace JStudio - // // Forward References: // diff --git a/libs/JSystem/JStudio/JStudio/stb-data-parse.cpp b/libs/JSystem/JStudio/JStudio/stb-data-parse.cpp index 838e1fbbd30..bef8ceabdb9 100644 --- a/libs/JSystem/JStudio/JStudio/stb-data-parse.cpp +++ b/libs/JSystem/JStudio/JStudio/stb-data-parse.cpp @@ -5,106 +5,94 @@ #include "JSystem/JStudio/JStudio/stb-data-parse.h" #include "dol2asm.h" -#include "dolphin/types.h" - -// -// Types: -// +#include "global.h" namespace JStudio { namespace stb { -struct data { - struct TParse_TSequence { - struct TData {}; +namespace data { - /* 802899BC */ void getData(JStudio::stb::data::TParse_TSequence::TData*) const; - }; +extern "C" u32 gauDataSize_TEParagraph_data__Q37JStudio3stb4data[]; - struct TParse_TParagraph { - struct TData {}; +void TParse_TSequence::getData(TData* pData) const { + ASSERT(pData != 0); - /* 80289A08 */ void getData(JStudio::stb::data::TParse_TParagraph::TData*) const; - }; - - struct TParse_TParagraph_data { - struct TData {}; - - /* 80289A80 */ void getData(JStudio::stb::data::TParse_TParagraph_data::TData*) const; - }; - - static u8 const gauDataSize_TEParagraph_data[32]; -}; - -}; // namespace stb - -}; // namespace JStudio - -namespace JGadget { -struct binary { - struct TEBit {}; - - /* 802DC864 */ void parseVariableUInt_16_32_following(void const*, u32*, u32*, - JGadget::binary::TEBit*); -}; - -}; // namespace JGadget - -// -// Forward References: -// - -extern "C" void -getData__Q47JStudio3stb4data16TParse_TSequenceCFPQ57JStudio3stb4data16TParse_TSequence5TData(); -extern "C" void -getData__Q47JStudio3stb4data17TParse_TParagraphCFPQ57JStudio3stb4data17TParse_TParagraph5TData(); -extern "C" void -getData__Q47JStudio3stb4data22TParse_TParagraph_dataCFPQ57JStudio3stb4data22TParse_TParagraph_data5TData(); - -// -// External References: -// - -extern "C" void -parseVariableUInt_16_32_following__Q27JGadget6binaryFPCvPUlPUlPQ37JGadget6binary5TEBit(); -extern "C" u8 const gauDataSize_TEParagraph_data__Q37JStudio3stb4data[32]; - -// -// Declarations: -// - -/* 802899BC-80289A08 2842FC 004C+00 0/0 1/1 0/0 .text - * getData__Q47JStudio3stb4data16TParse_TSequenceCFPQ57JStudio3stb4data16TParse_TSequence5TData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::data::TParse_TSequence::getData( - JStudio::stb::data::TParse_TSequence::TData* param_0) const { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb-data-parse/func_802899BC.s" + pData->content = NULL; + pData->next = NULL; + u32 head = get_head(); + u8 type = head >> 24; + u32 param = head & 0xffffff; + pData->type = type; + pData->param = param; + if (type != 0) { + const void* next = (const void*)((int)getRaw() + 4); + if (type <= 0x7f) { + pData->next = next; + } else { + pData->content = next; + pData->next = (const void*)((int)next + param); + } + } } -#pragma pop -/* 80289A08-80289A80 284348 0078+00 0/0 1/1 0/0 .text - * getData__Q47JStudio3stb4data17TParse_TParagraphCFPQ57JStudio3stb4data17TParse_TParagraph5TData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::data::TParse_TParagraph::getData( - JStudio::stb::data::TParse_TParagraph::TData* param_0) const { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb-data-parse/func_80289A08.s" +void TParse_TParagraph::getData(TData* pData) const { + ASSERT(pData != 0); + + const void* data = getRaw(); + u32 result; + const void* next = parseVariableUInt_16_32_following(data, &result, &pData->type, NULL); + pData->param = result; + if (result == 0) { + pData->content = NULL; + pData->next = next; + } else { + pData->content = next; + pData->next = (const void*)((int)next + align_roundUp(result, 4)); + } } -#pragma pop +#ifdef NONMATCHING +void TParse_TParagraph_data::getData(data::TParse_TParagraph_data::TData* pData) const { + ASSERT(pData != 0); + + pData->_4 = 0; + pData->_8 = 0; + pData->_c = NULL; + pData->_10 = 0; + u8* p = (u8*)getRaw(); + if (p != NULL) { + u8 val = *p; + pData->_0 = val & ~8; + if (val != 0) { + u32 count = 1; + p++; + if (val & 8) { + count = *(p++); + } + pData->_8 = count; + pData->_c = p; + u8 idx = val & 7; + if (idx) { + u32 size = gauDataSize_TEParagraph_data[idx]; + pData->_4 = size; + pData->_10 = p + size * count; + } + } + } +} +#else /* 80289A80-80289B00 2843C0 0080+00 0/0 3/3 1/1 .text * getData__Q47JStudio3stb4data22TParse_TParagraph_dataCFPQ57JStudio3stb4data22TParse_TParagraph_data5TData */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::data::TParse_TParagraph_data::getData( - JStudio::stb::data::TParse_TParagraph_data::TData* param_0) const { +asm void TParse_TParagraph_data::getData(TParse_TParagraph_data::TData* param_0) const { nofralloc #include "asm/JSystem/JStudio/JStudio/stb-data-parse/func_80289A80.s" } #pragma pop +#endif + +} // namespace data +} // namespace stb +} // namespace JStudio \ No newline at end of file diff --git a/libs/JSystem/JStudio/JStudio/stb-data.cpp b/libs/JSystem/JStudio/JStudio/stb-data.cpp index d2085fb9927..79a90607216 100644 --- a/libs/JSystem/JStudio/JStudio/stb-data.cpp +++ b/libs/JSystem/JStudio/JStudio/stb-data.cpp @@ -7,49 +7,17 @@ #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - namespace JStudio { namespace stb { -struct data { - static u8 const gauDataSize_TEParagraph_data[32]; - static u32 ga4cSignature[1 + 1 /* padding */]; -}; +namespace data { -}; // namespace stb - -}; // namespace JStudio - -// -// Forward References: -// - -extern "C" u8 const gauDataSize_TEParagraph_data__Q37JStudio3stb4data[32]; -extern "C" u32 ga4cSignature__Q37JStudio3stb4data[1 + 1 /* padding */]; - -// -// External References: -// - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 8039AB88-8039ABA8 0271E8 0020+00 0/0 1/1 0/0 .rodata - * gauDataSize_TEParagraph_data__Q37JStudio3stb4data */ -SECTION_RODATA u8 const JStudio::stb::data::gauDataSize_TEParagraph_data[32] = { +const u8 gauDataSize_TEParagraph_data[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, }; -COMPILER_STRIP_GATE(0x8039AB88, &JStudio::stb::data::gauDataSize_TEParagraph_data); -/* 804554D8-804554E0 003AD8 0004+04 0/0 1/1 0/0 .sdata2 ga4cSignature__Q37JStudio3stb4data - */ -SECTION_SDATA2 u32 JStudio::stb::data::ga4cSignature[1 + 1 /* padding */] = { - 0x53544200, - /* padding */ - 0x00000000, -}; +const u32 ga4cSignature = 'STB\0'; + +} // namespace data +} // namespace stb +} // namespace JStudio diff --git a/libs/JSystem/JStudio/JStudio/stb.cpp b/libs/JSystem/JStudio/JStudio/stb.cpp index b0fcc4c7c9b..4f09284ed72 100644 --- a/libs/JSystem/JStudio/JStudio/stb.cpp +++ b/libs/JSystem/JStudio/JStudio/stb.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: stb -// - #include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -11,171 +6,26 @@ // Types: // -namespace JStudio { -namespace stb { -struct data { - struct TParse_TBlock_object {}; - - struct TParse_THeader {}; - - struct TParse_TBlock {}; - - struct TParse_TSequence { - struct TData {}; - - /* 802899BC */ void getData(JStudio::stb::data::TParse_TSequence::TData*) const; - }; - - struct TParse_TParagraph { - struct TData {}; - - /* 80289A08 */ void getData(JStudio::stb::data::TParse_TParagraph::TData*) const; - }; - - static u32 gu32Mask_TSequence_value_signExpansion[1 + 1 /* padding */]; - static u32 ga4cSignature[1 + 1 /* padding */]; -}; - -struct TObject { - /* 80288AC0 */ TObject(JStudio::stb::data::TParse_TBlock_object const&); - /* 80288A78 */ TObject(u32, void const*, u32); - /* 80288B30 */ ~TObject(); - /* 80288B78 */ void setFlag_operation(u8, int); - /* 80288BD0 */ void reset(void const*); - /* 80288BE8 */ void forward(u32); - /* 80288E18 */ void do_begin(); - /* 80288E1C */ void do_end(); - /* 80288E20 */ void do_paragraph(u32, void const*, u32); - /* 80288E24 */ void do_wait(u32); - /* 80288E28 */ void do_data(void const*, u32, void const*, u32); - /* 80288E2C */ void process_sequence_(); - /* 80288F80 */ void process_paragraph_reserved_(u32, void const*, u32); -}; - -struct TObject_control { - /* 80289068 */ TObject_control(void const*, u32); - /* 80289134 */ ~TObject_control(); -}; - -struct TControl { - /* 802890B4 */ TControl(); - /* 80289194 */ ~TControl(); - /* 80289228 */ void appendObject(JStudio::stb::TObject*); - /* 80289278 */ void removeObject(JStudio::stb::TObject*); - /* 802892B0 */ void destroyObject(JStudio::stb::TObject*); - /* 80289300 */ void destroyObject_all(); - /* 80289364 */ void getObject(void const*, u32); - /* 80289404 */ void reset(); - /* 802894B4 */ void forward(u32); -}; - -struct TFactory { - /* 802895B4 */ ~TFactory(); - /* 802895FC */ bool create(JStudio::stb::data::TParse_TBlock_object const&); - /* 80289604 */ void destroy(JStudio::stb::TObject*); -}; - -struct TParse { - /* 80289640 */ TParse(JStudio::stb::TControl*); - /* 80289660 */ ~TParse(); - /* 802896C0 */ void parseHeader_next(void const**, u32*, u32); - /* 8028978C */ void parseBlock_next(void const**, u32*, u32); - /* 802897E0 */ bool parseHeader(JStudio::stb::data::TParse_THeader const&, u32); - /* 802897E8 */ void parseBlock_block(JStudio::stb::data::TParse_TBlock const&, u32); - /* 80289820 */ void parseBlock_object(JStudio::stb::data::TParse_TBlock_object const&, u32); -}; - -}; // namespace stb - -struct object { - struct TPRObject_ID_equal {}; - - struct TIDData { - /* 80288988 */ void isEqual(JStudio::object::TIDData const&, - JStudio::object::TIDData const&); - }; -}; - -}; // namespace JStudio - -namespace JGadget { -template -struct TLinkList {}; -/* TLinkList */ -struct TLinkList__template2 { - struct iterator {}; -}; - -struct binary { - struct TParse_header_block { - /* 802DC8C8 */ ~TParse_header_block(); - }; -}; - -struct TLinkListNode {}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA1C */ ~TNodeLinkList(); - /* 802DCBA8 */ void Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*); - /* 802DCBD4 */ void Erase(JGadget::TLinkListNode*); -}; - -}; // namespace JGadget - namespace std { template void find_if(/* ... */); /* 80289928 */ /* std::find_if::iterator, JStudio::object::TPRObject_ID_equal> */ -void func_80289928(void* _this, JGadget::TLinkList__template2::iterator, - JGadget::TLinkList__template2::iterator, JStudio::object::TPRObject_ID_equal); +void func_80289928(void* _this, JGadget::TLinkList::iterator, + JGadget::TLinkList::iterator, + JStudio::object::TPRObject_ID_equal); }; // namespace std // // Forward References: // -extern "C" void __ct__Q37JStudio3stb7TObjectFUlPCvUl(); -extern "C" void __ct__Q37JStudio3stb7TObjectFRCQ47JStudio3stb4data20TParse_TBlock_object(); -extern "C" void __dt__Q37JStudio3stb7TObjectFv(); -extern "C" void setFlag_operation__Q37JStudio3stb7TObjectFUci(); extern "C" void reset__Q37JStudio3stb7TObjectFPCv(); extern "C" void forward__Q37JStudio3stb7TObjectFUl(); -extern "C" void do_begin__Q37JStudio3stb7TObjectFv(); -extern "C" void do_end__Q37JStudio3stb7TObjectFv(); -extern "C" void do_paragraph__Q37JStudio3stb7TObjectFUlPCvUl(); -extern "C" void do_wait__Q37JStudio3stb7TObjectFUl(); -extern "C" void do_data__Q37JStudio3stb7TObjectFPCvUlPCvUl(); -extern "C" void process_sequence___Q37JStudio3stb7TObjectFv(); -extern "C" void process_paragraph_reserved___Q37JStudio3stb7TObjectFUlPCvUl(); -extern "C" void __ct__Q37JStudio3stb15TObject_controlFPCvUl(); -extern "C" void __ct__Q37JStudio3stb8TControlFv(); -extern "C" void __dt__Q37JStudio3stb15TObject_controlFv(); -extern "C" void __dt__Q37JStudio3stb8TControlFv(); -extern "C" void appendObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject(); -extern "C" void removeObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject(); extern "C" void destroyObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject(); -extern "C" void destroyObject_all__Q37JStudio3stb8TControlFv(); -extern "C" void getObject__Q37JStudio3stb8TControlFPCvUl(); -extern "C" void reset__Q37JStudio3stb8TControlFv(); -extern "C" void forward__Q37JStudio3stb8TControlFUl(); -extern "C" void __dt__Q37JStudio3stb8TFactoryFv(); -extern "C" bool create__Q37JStudio3stb8TFactoryFRCQ47JStudio3stb4data20TParse_TBlock_object(); -extern "C" void destroy__Q37JStudio3stb8TFactoryFPQ37JStudio3stb7TObject(); -extern "C" void __ct__Q37JStudio3stb6TParseFPQ37JStudio3stb8TControl(); -extern "C" void __dt__Q37JStudio3stb6TParseFv(); -extern "C" void parseHeader_next__Q37JStudio3stb6TParseFPPCvPUlUl(); -extern "C" void parseBlock_next__Q37JStudio3stb6TParseFPPCvPUlUl(); -extern "C" bool parseHeader__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data14TParse_THeaderUl(); -extern "C" void parseBlock_block__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data13TParse_TBlockUl(); -extern "C" void -parseBlock_object__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data20TParse_TBlock_objectUl(); -extern "C" void func_80289928(void* _this, JGadget::TLinkList__template2::iterator, - JGadget::TLinkList__template2::iterator, +extern "C" void func_80289928(void* _this, JGadget::TLinkList::iterator, + JGadget::TLinkList::iterator, JStudio::object::TPRObject_ID_equal); -extern "C" u32 gu32Mask_TSequence_value_signExpansion__Q37JStudio3stb4data[1 + 1 /* padding */]; // // External References: @@ -184,13 +34,6 @@ extern "C" u32 gu32Mask_TSequence_value_signExpansion__Q37JStudio3stb4data[1 + 1 extern "C" void isEqual__Q37JStudio6object7TIDDataFRCQ37JStudio6object7TIDDataRCQ37JStudio6object7TIDData(); extern "C" void -getData__Q47JStudio3stb4data16TParse_TSequenceCFPQ57JStudio3stb4data16TParse_TSequence5TData(); -extern "C" void -getData__Q47JStudio3stb4data17TParse_TParagraphCFPQ57JStudio3stb4data17TParse_TParagraph5TData(); -extern "C" void __dl__FPv(); -extern "C" void __dt__Q37JGadget6binary19TParse_header_blockFv(); -extern "C" void __dt__Q27JGadget13TNodeLinkListFv(); -extern "C" void Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode(); extern "C" void Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode(); extern "C" void _savegpr_25(); @@ -199,274 +42,331 @@ extern "C" void _savegpr_29(); extern "C" void _restgpr_25(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void memcmp(); -extern "C" extern void* __vt__Q37JGadget6binary19TParse_header_block[5]; -extern "C" u32 ga4cSignature__Q37JStudio3stb4data[1 + 1 /* padding */]; +extern "C" int memcmp(const void*, const void*, u32); -// -// Declarations: -// +namespace JStudio { +namespace stb { -/* ############################################################################################## */ -/* 803C56A0-803C56C0 0227C0 0020+00 2/2 0/0 0/0 .data __vt__Q37JStudio3stb6TParse */ -SECTION_DATA extern void* __vt__Q37JStudio3stb6TParse[8] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__Q37JStudio3stb6TParseFv, - (void*)parseHeader_next__Q37JStudio3stb6TParseFPPCvPUlUl, - (void*)parseBlock_next__Q37JStudio3stb6TParseFPPCvPUlUl, - (void*)parseHeader__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data14TParse_THeaderUl, - (void*)parseBlock_block__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data13TParse_TBlockUl, - (void*)parseBlock_object__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data20TParse_TBlock_objectUl, -}; +// unchecked, in debug dol +const char* TObject::toString_status(int status) { + const char* result; -/* 803C56C0-803C56D4 0227E0 0014+00 1/1 1/1 0/0 .data __vt__Q37JStudio3stb8TFactory */ -SECTION_DATA extern void* __vt__Q37JStudio3stb8TFactory[5] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__Q37JStudio3stb8TFactoryFv, - (void*)create__Q37JStudio3stb8TFactoryFRCQ47JStudio3stb4data20TParse_TBlock_object, - (void*)destroy__Q37JStudio3stb8TFactoryFPQ37JStudio3stb7TObject, -}; - -/* 803C56D4-803C56E0 0227F4 000C+00 2/2 0/0 0/0 .data __vt__Q37JStudio3stb8TControl */ -SECTION_DATA extern void* __vt__Q37JStudio3stb8TControl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__Q37JStudio3stb8TControlFv, -}; - -/* 803C56E0-803C5700 022800 0020+00 3/3 0/0 0/0 .data __vt__Q37JStudio3stb15TObject_control */ -SECTION_DATA extern void* __vt__Q37JStudio3stb15TObject_control[8] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__Q37JStudio3stb15TObject_controlFv, - (void*)do_begin__Q37JStudio3stb7TObjectFv, - (void*)do_end__Q37JStudio3stb7TObjectFv, - (void*)do_paragraph__Q37JStudio3stb7TObjectFUlPCvUl, - (void*)do_wait__Q37JStudio3stb7TObjectFUl, - (void*)do_data__Q37JStudio3stb7TObjectFPCvUlPCvUl, -}; - -/* 803C5700-803C5720 022820 0020+00 3/3 0/0 0/0 .data __vt__Q37JStudio3stb7TObject */ -SECTION_DATA extern void* __vt__Q37JStudio3stb7TObject[8] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__Q37JStudio3stb7TObjectFv, - (void*)do_begin__Q37JStudio3stb7TObjectFv, - (void*)do_end__Q37JStudio3stb7TObjectFv, - (void*)do_paragraph__Q37JStudio3stb7TObjectFUlPCvUl, - (void*)do_wait__Q37JStudio3stb7TObjectFUl, - (void*)do_data__Q37JStudio3stb7TObjectFPCvUlPCvUl, -}; - -/* 80288A78-80288AC0 2833B8 0048+00 1/1 0/0 0/0 .text __ct__Q37JStudio3stb7TObjectFUlPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TObject::TObject(u32 param_0, void const* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__ct__Q37JStudio3stb7TObjectFUlPCvUl.s" + switch (status) { + default: + result = "(undefined)"; + break; + case 0: + result = "still"; + break; + case 1: + result = "end"; + break; + case 2: + result = "wait"; + break; + case 4: + result = "suspend"; + break; + case 8: + result = "inactive"; + break; + } + return result; } -#pragma pop -/* 80288AC0-80288B30 283400 0070+00 0/0 1/1 0/0 .text - * __ct__Q37JStudio3stb7TObjectFRCQ47JStudio3stb4data20TParse_TBlock_object */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TObject::TObject(JStudio::stb::data::TParse_TBlock_object const& param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__ct__Q37JStudio3stb7TObjectFRCQ47JStudio3stb4data20TParse_TBlock_object.s" +TObject::TObject(u32 arg1, const void* id, u32 id_size) + : TObject_ID(id, id_size), pControl(NULL), signature(arg1), mFlag(0), bSequence_(0), _20(0), + pSequence(NULL), pSequence_next(NULL), u32Wait_(0), mStatus(STATUS_STILL) {} + +TObject::TObject(const data::TParse_TBlock_object& object) + : TObject_ID(object.get_ID(), object.get_IDSize()), pControl(NULL), + signature(object.get_type()), mFlag(object.get_flag()), bSequence_(0), _20(0), pSequence(0), + pSequence_next(object.getContent()), u32Wait_(0), mStatus(STATUS_STILL) {} + +TObject::~TObject() { + JUT_EXPECT(getControl() == NULL); } -#pragma pop -/* 80288B30-80288B78 283470 0048+00 3/2 1/1 0/0 .text __dt__Q37JStudio3stb7TObjectFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TObject::~TObject() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__dt__Q37JStudio3stb7TObjectFv.s" +void TObject::setFlag_operation(u8 op, int val) { + switch (op) { + default: + JUTWarn w; + w << "unknown flag-operation : " << op; + break; + case 1: + mFlag |= val; + break; + case 2: + mFlag &= val; + break; + case 3: + mFlag ^= val; + break; + } } -#pragma pop -/* 80288B78-80288BD0 2834B8 0058+00 2/2 0/0 0/0 .text - * setFlag_operation__Q37JStudio3stb7TObjectFUci */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TObject::setFlag_operation(u8 param_0, int param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/setFlag_operation__Q37JStudio3stb7TObjectFUci.s" +void TObject::reset(const void* arg1) { + bSequence_ = 0; + mStatus = STATUS_STILL; + pSequence_next = arg1; + u32Wait_ = 0; } -#pragma pop -/* 80288BD0-80288BE8 283510 0018+00 2/2 0/0 0/0 .text reset__Q37JStudio3stb7TObjectFPCv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TObject::reset(void const* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/reset__Q37JStudio3stb7TObjectFPCv.s" +int TObject::forward(u32 arg1) { + u8 temp = false; + + while (true) { + if (mFlag & 0x8000) { + switch (getStatus()) { + case STATUS_STILL: + case STATUS_END: + break; + case STATUS_WAIT: + case STATUS_SUSPEND: + setStatus_(STATUS_INACTIVE); + if (bSequence_) { + on_end(); + } + break; + case STATUS_INACTIVE: + break; + default: + ASSERT(false); + break; + } + return 1; + } + + if (getStatus() == STATUS_INACTIVE) { + ASSERT(bSequence_); + on_begin(); + setStatus_(STATUS_WAIT); + } + ASSERT(getStatus() != STATUS_INACTIVE); + + TControl* control = getControl(); + if ((control != NULL && control->isSuspended()) || isSuspended()) { + if (bSequence_) { + ASSERT((getStatus() == STATUS_WAIT) || (getStatus() == STATUS_SUSPEND)); + setStatus_(STATUS_SUSPEND); + on_wait(arg1); + } + return 1; + } + + while (true) { + void* nextseq = (void*)getSequence_next(); + setSequence_(nextseq); + + if (nextseq == NULL) { + if (bSequence_) { + ASSERT(getStatus() != STATUS_STILL); + if (!temp) { + on_wait(0); + } + bSequence_ = false; + setStatus_(STATUS_END); + on_end(); + } + return 0; + } + + if (!bSequence_) { + ASSERT(getStatus() == STATUS_STILL); + bSequence_ = true; + on_begin(); + } + setStatus_(STATUS_WAIT); + if (u32Wait_ == 0) { + process_sequence_(); + if (u32Wait_ == 0) { + break; + } + } + ASSERT(u32Wait_ > 0); + + temp = true; + if (arg1 >= u32Wait_) { + u32 wait = u32Wait_; + arg1 -= u32Wait_; + u32Wait_ = 0; + on_wait(wait); + } else { + u32Wait_ -= arg1; + on_wait(arg1); + return 1; + } + } + } } -#pragma pop -/* 80288BE8-80288E18 283528 0230+00 1/1 0/0 0/0 .text forward__Q37JStudio3stb7TObjectFUl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TObject::forward(u32 param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/forward__Q37JStudio3stb7TObjectFUl.s" -} -#pragma pop - -/* 80288E18-80288E1C 283758 0004+00 2/0 0/0 0/0 .text do_begin__Q37JStudio3stb7TObjectFv - */ -void JStudio::stb::TObject::do_begin() { +void TObject::do_begin() { /* empty function */ } -/* 80288E1C-80288E20 28375C 0004+00 2/0 0/0 0/0 .text do_end__Q37JStudio3stb7TObjectFv */ -void JStudio::stb::TObject::do_end() { +void TObject::do_end() { /* empty function */ } -/* 80288E20-80288E24 283760 0004+00 2/0 0/0 0/0 .text do_paragraph__Q37JStudio3stb7TObjectFUlPCvUl - */ -void JStudio::stb::TObject::do_paragraph(u32 param_0, void const* param_1, u32 param_2) { +void TObject::do_paragraph(u32 param_0, void const* param_1, u32 param_2) { /* empty function */ } -/* 80288E24-80288E28 283764 0004+00 2/0 0/0 0/0 .text do_wait__Q37JStudio3stb7TObjectFUl - */ -void JStudio::stb::TObject::do_wait(u32 param_0) { +void TObject::do_wait(u32 param_0) { /* empty function */ } -/* 80288E28-80288E2C 283768 0004+00 2/0 0/0 0/0 .text do_data__Q37JStudio3stb7TObjectFPCvUlPCvUl - */ -void JStudio::stb::TObject::do_data(void const* param_0, u32 param_1, void const* param_2, - u32 param_3) { +void TObject::do_data(void const* param_0, u32 param_1, void const* param_2, u32 param_3) { /* empty function */ } -/* ############################################################################################## */ -/* 804554D0-804554D8 003AD0 0004+04 1/1 0/0 0/0 .sdata2 - * gu32Mask_TSequence_value_signExpansion__Q37JStudio3stb4data */ -SECTION_SDATA2 u32 - JStudio::stb::data::gu32Mask_TSequence_value_signExpansion[1 + 1 /* padding */] = { - 0xFF000000, - /* padding */ - 0x00000000, -}; +void TObject::process_sequence_() { + ASSERT(getWait() == 0); + data::TParse_TSequence seq(getSequence()); -/* 80288E2C-80288F80 28376C 0154+00 1/1 0/0 0/0 .text process_sequence___Q37JStudio3stb7TObjectFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TObject::process_sequence_() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/process_sequence___Q37JStudio3stb7TObjectFv.s" + data::TParse_TSequence::TData dat; + + seq.getData(&dat); + u8 type = dat.type; + u32 u32Value = dat.param; + const void* pContent = dat.content; + const void* pNext = dat.next; + setSequence_next(dat.next); + + switch (type) { + case 0: + JUT_EXPECT(u32Value == 0); + JUT_EXPECT(pContent == 0); + break; + case 1: + JUT_EXPECT(pContent == 0); + setFlag_operation_(u32Value); + break; + case 2: + JUT_EXPECT(pContent == 0); + setWait(u32Value); + break; + case 3: + JUT_EXPECT(pContent == 0); + s32 off = toInt32FromUInt24_(u32Value); + void* nextseq = (void*)getSequence_offset(off); + setSequence_next(nextseq); + break; + case 4: + JUT_EXPECT(pContent == 0); + u32 val = toInt32FromUInt24_(u32Value); + suspend(val); + break; + case 0x80: + ASSERT(pContent != 0); + void* p = (void*)pContent; + data::TParse_TParagraph para(NULL); + while (p < pNext) { + para.setRaw(p); + + data::TParse_TParagraph::TData para_dat; + para.getData(¶_dat); + if (para_dat.type <= 0xff) { + process_paragraph_reserved_(para_dat.type, para_dat.content, para_dat.param); + } else { + on_paragraph(para_dat.type, para_dat.content, para_dat.param); + } + p = (void*)para_dat.next; + ASSERT(p != 0); + } + JUT_EXPECT(p == pNext); + break; + default: + JUTWarn w; + w << "unknown sequence : " << dat.type; + break; + } } -#pragma pop -/* 80288F80-80289068 2838C0 00E8+00 1/1 0/0 0/0 .text - * process_paragraph_reserved___Q37JStudio3stb7TObjectFUlPCvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TObject::process_paragraph_reserved_(u32 param_0, void const* param_1, - u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/process_paragraph_reserved___Q37JStudio3stb7TObjectFUlPCvUl.s" +void TObject::process_paragraph_reserved_(u32 arg1, const void* pContent, u32 uSize) { + switch (arg1) { + case 0x1: + ASSERT(pContent != 0); + ASSERT(uSize == 4); + setFlag_operation_(*(u32*)pContent); + break; + case 0x2: + ASSERT(pContent != 0); + ASSERT(uSize == 4); + setWait(*(u32*)pContent); + break; + case 0x3: + ASSERT(pContent != 0); + ASSERT(uSize == 4); + const void* seq = getSequence_offset(*(s32*)pContent); + setSequence_next(seq); + break; + case 0x80: + on_data(NULL, 0, pContent, uSize); + break; + case 0x81: + data::TParse_TParagraph_dataID dataID(pContent); + const void* temp = dataID.getContent(); + on_data(dataID.get_ID(), dataID.get_IDSize(), temp, + uSize - ((u32)temp - (u32)dataID.getRaw())); + break; + case 0x82: + ASSERT(pContent != 0); + break; + } } -#pragma pop -/* 80289068-802890B4 2839A8 004C+00 1/1 0/0 0/0 .text __ct__Q37JStudio3stb15TObject_controlFPCvUl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TObject_control::TObject_control(void const* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__ct__Q37JStudio3stb15TObject_controlFPCvUl.s" +TObject_control::TObject_control(const void* arg1, u32 arg2) : TObject(-1, arg1, arg2) {} + +TControl::TControl() : _4(0), _8(0), pFactory(NULL), mObject_control(NULL, 0), _54(0) { + resetStatus_(); + mObject_control.setControl_(this); } -#pragma pop -/* 802890B4-80289134 2839F4 0080+00 0/0 1/1 0/0 .text __ct__Q37JStudio3stb8TControlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TControl::TControl() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__ct__Q37JStudio3stb8TControlFv.s" +// TObject_control::TObject_control() definition gets inlined here + +TControl::~TControl() { + mObject_control.setControl_(NULL); + JUT_EXPECT(ocObject_.empty()); } -#pragma pop -/* 80289134-80289194 283A74 0060+00 1/0 0/0 0/0 .text __dt__Q37JStudio3stb15TObject_controlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TObject_control::~TObject_control() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__dt__Q37JStudio3stb15TObject_controlFv.s" +#ifdef NONMATCHING +void TControl::appendObject(TObject* p) { + p->setControl(this); + mObjectContainer.Push_back(p); } -#pragma pop - -/* 80289194-80289228 283AD4 0094+00 1/0 1/1 0/0 .text __dt__Q37JStudio3stb8TControlFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TControl::~TControl() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__dt__Q37JStudio3stb8TControlFv.s" -} -#pragma pop - +#else /* 80289228-80289278 283B68 0050+00 1/1 0/0 0/0 .text * appendObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::TControl::appendObject(JStudio::stb::TObject* param_0) { +asm void TControl::appendObject(TObject* param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/appendObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject.s" } #pragma pop +#endif -/* 80289278-802892B0 283BB8 0038+00 1/1 0/0 0/0 .text - * removeObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TControl::removeObject(JStudio::stb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/removeObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject.s" +void TControl::removeObject(TObject* p) { + ASSERT(p != 0); + ASSERT(p->getControl() == this); + p->setControl_(NULL); + mObjectContainer.Erase(p); } -#pragma pop -/* 802892B0-80289300 283BF0 0050+00 1/1 0/0 0/0 .text - * destroyObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TControl::destroyObject(JStudio::stb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/destroyObject__Q37JStudio3stb8TControlFPQ37JStudio3stb7TObject.s" +void TControl::destroyObject(TObject* p) { + removeObject(p); + ASSERT(pFactory != 0); + pFactory->destroy(p); } -#pragma pop /* 80289300-80289364 283C40 0064+00 0/0 2/2 0/0 .text destroyObject_all__Q37JStudio3stb8TControlFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::TControl::destroyObject_all() { +asm void TControl::destroyObject_all() { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/destroyObject_all__Q37JStudio3stb8TControlFv.s" } @@ -476,7 +376,7 @@ asm void JStudio::stb::TControl::destroyObject_all() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::TControl::getObject(void const* param_0, u32 param_1) { +asm TObject* TControl::getObject(void const* param_0, u32 param_1) { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/getObject__Q37JStudio3stb8TControlFPCvUl.s" } @@ -486,7 +386,7 @@ asm void JStudio::stb::TControl::getObject(void const* param_0, u32 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::TControl::reset() { +asm void TControl::reset() { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/reset__Q37JStudio3stb8TControlFv.s" } @@ -497,113 +397,131 @@ asm void JStudio::stb::TControl::reset() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void JStudio::stb::TControl::forward(u32 param_0) { +asm void TControl::forward(u32 param_0) { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/forward__Q37JStudio3stb8TControlFUl.s" } #pragma pop -/* 802895B4-802895FC 283EF4 0048+00 1/0 1/1 0/0 .text __dt__Q37JStudio3stb8TFactoryFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TFactory::~TFactory() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__dt__Q37JStudio3stb8TFactoryFv.s" -} -#pragma pop +TFactory::~TFactory() {} -/* 802895FC-80289604 283F3C 0008+00 1/0 0/0 0/0 .text - * create__Q37JStudio3stb8TFactoryFRCQ47JStudio3stb4data20TParse_TBlock_object */ -bool JStudio::stb::TFactory::create(JStudio::stb::data::TParse_TBlock_object const& param_0) { - return false; +TObject* TFactory::create(data::TParse_TBlock_object const& param_0) { + return NULL; } -/* 80289604-80289640 283F44 003C+00 1/0 1/0 0/0 .text - * destroy__Q37JStudio3stb8TFactoryFPQ37JStudio3stb7TObject */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TFactory::destroy(JStudio::stb::TObject* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/destroy__Q37JStudio3stb8TFactoryFPQ37JStudio3stb7TObject.s" +void TFactory::destroy(TObject* p) { + delete p; } -#pragma pop -/* 80289640-80289660 283F80 0020+00 0/0 1/1 0/0 .text - * __ct__Q37JStudio3stb6TParseFPQ37JStudio3stb8TControl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TParse::TParse(JStudio::stb::TControl* param_0) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__ct__Q37JStudio3stb6TParseFPQ37JStudio3stb8TControl.s" +TParse::TParse(TControl* pControl) : pControl(pControl) {} + +TParse::~TParse() {} + +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 < 1) { + JUTWarn w; + w << "obselete version : " << (long)0; + return false; + } else if (version > 3) { + JUTWarn w; + w << "unknown version : " << version; + return false; + } + return parseHeader(header, flags); } -#pragma pop -/* 80289660-802896C0 283FA0 0060+00 1/0 1/1 0/0 .text __dt__Q37JStudio3stb6TParseFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JStudio::stb::TParse::~TParse() { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/__dt__Q37JStudio3stb6TParseFv.s" +bool TParse::parseBlock_next(void const** 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(); + return parseBlock_block(blk, flags); } -#pragma pop -/* 802896C0-8028978C 284000 00CC+00 1/0 1/0 0/0 .text - * parseHeader_next__Q37JStudio3stb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TParse::parseHeader_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/parseHeader_next__Q37JStudio3stb6TParseFPPCvPUlUl.s" -} -#pragma pop - -/* 8028978C-802897E0 2840CC 0054+00 1/0 1/0 0/0 .text - * parseBlock_next__Q37JStudio3stb6TParseFPPCvPUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TParse::parseBlock_next(void const** param_0, u32* param_1, u32 param_2) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/parseBlock_next__Q37JStudio3stb6TParseFPPCvPUlUl.s" -} -#pragma pop - -/* 802897E0-802897E8 284120 0008+00 1/0 0/0 0/0 .text - * parseHeader__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data14TParse_THeaderUl */ -bool JStudio::stb::TParse::parseHeader(JStudio::stb::data::TParse_THeader const& param_0, - u32 param_1) { +bool TParse::parseHeader(data::TParse_THeader const& param_0, u32 flags) { return true; } -/* 802897E8-80289820 284128 0038+00 1/0 1/1 0/0 .text - * parseBlock_block__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data13TParse_TBlockUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JStudio::stb::TParse::parseBlock_block(JStudio::stb::data::TParse_TBlock const& param_0, - u32 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/parseBlock_block__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data13TParse_TBlockUl.s" +bool TParse::parseBlock_block(const data::TParse_TBlock& ppBlock, u32 flags) { + return parseBlock_object(ppBlock.get(), flags); } -#pragma pop -/* 80289820-80289928 284160 0108+00 1/0 1/0 0/0 .text - * parseBlock_object__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data20TParse_TBlock_objectUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void -JStudio::stb::TParse::parseBlock_object(JStudio::stb::data::TParse_TBlock_object const& param_0, - u32 param_1) { - nofralloc -#include "asm/JSystem/JStudio/JStudio/stb/parseBlock_object__Q37JStudio3stb6TParseFRCQ47JStudio3stb4data20TParse_TBlock_objectUl.s" +bool TParse::parseBlock_object(const data::TParse_TBlock_object& ppObject, u32 flags) { + TControl* pControl = getControl(); + ASSERT(pControl != 0); + + if (ppObject.get_type() == data::BLOCK_NONE) { + TObject_control& ref = pControl->referObject_control(); + ref.reset(ppObject.getContent()); + return true; + } + + if (flags & 0x10) { + TObject* p = pControl->getObject(ppObject.get_ID(), ppObject.get_IDSize()); + if (p != NULL) { + p->reset(ppObject.getContent()); + return true; + } + } + + if (flags & 0x20) + return true; + + TFactory* pFactory = pControl->getFactory(); + if (pFactory == NULL) { + JUTWarn w; + w << "factory not specified"; + return false; + } + + TObject* p = pFactory->create(ppObject); + if (p == NULL) { + if (flags & 0x40) + return true; + + char a5c[8]; + char t[16]; + int type = ppObject.get_type(); + data::toString_block(a5c, type); + + JUTWarn w; + w << "can't create object : " << a5c; + w << "(0x" << type << ")"; + return false; + } + pControl->appendObject(p); + return true; } -#pragma pop + +} // namespace stb +} // namespace JStudio /* 80289928-802899BC 284268 0094+00 1/1 0/0 0/0 .text * find_if8iterator,Q37JStudio6object18TPRObject_ID_equal>__3stdFQ37JGadget37TLinkList8iteratorQ37JGadget37TLinkList8iteratorQ37JStudio6object18TPRObject_ID_equal @@ -611,8 +529,9 @@ JStudio::stb::TParse::parseBlock_object(JStudio::stb::data::TParse_TBlock_object #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -extern "C" asm void func_80289928(void* _this, JGadget::TLinkList__template2::iterator param_0, - JGadget::TLinkList__template2::iterator param_1, +extern "C" asm void func_80289928(void* _this, + JGadget::TLinkList::iterator param_0, + JGadget::TLinkList::iterator param_1, JStudio::object::TPRObject_ID_equal param_2) { nofralloc #include "asm/JSystem/JStudio/JStudio/stb/func_80289928.s" diff --git a/libs/JSystem/JStudio/JStudio_JParticle/control.cpp b/libs/JSystem/JStudio/JStudio_JParticle/control.cpp index 64d21c7fb10..625fc80b680 100644 --- a/libs/JSystem/JStudio/JStudio_JParticle/control.cpp +++ b/libs/JSystem/JStudio/JStudio_JParticle/control.cpp @@ -4,6 +4,7 @@ // #include "JSystem/JStudio/JStudio_JParticle/control.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -14,13 +15,6 @@ namespace JStudio { struct TObject {}; -namespace stb { -struct data { - struct TParse_TBlock_object {}; -}; - -}; // namespace stb - struct TCreateObject { /* 80285488 */ ~TCreateObject(); }; diff --git a/rel/d/a/d_a_title/d_a_title.cpp b/rel/d/a/d_a_title/d_a_title.cpp index 541b55c9d92..29d39c7c0ab 100644 --- a/rel/d/a/d_a_title/d_a_title.cpp +++ b/rel/d/a/d_a_title/d_a_title.cpp @@ -4,6 +4,7 @@ // #include "rel/d/a/d_a_title/d_a_title.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" diff --git a/src/d/a/d_a_alink.cpp b/src/d/a/d_a_alink.cpp index cb7d394ae04..b07f1de0df3 100644 --- a/src/d/a/d_a_alink.cpp +++ b/src/d/a/d_a_alink.cpp @@ -5,6 +5,7 @@ #include "d/a/d_a_alink.h" #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "Z2AudioLib/Z2AudioMgr.h" #include "d/a/d_a_horse_static.h" #include "d/com/d_com_inf_game.h" @@ -599,20 +600,6 @@ struct dCamera_c { /* 80181500 */ void GetForceLockOnActor(); }; -namespace JStudio { -namespace stb { -struct data { - struct TParse_TParagraph_data { - struct TData {}; - - /* 80289A80 */ void getData(JStudio::stb::data::TParse_TParagraph_data::TData*) const; - }; -}; - -}; // namespace stb - -}; // namespace JStudio - struct JASKernel { /* 80290B08 */ void getAramHeap(); }; diff --git a/src/d/d_demo.cpp b/src/d/d_demo.cpp index 15794476f6c..4d8d7c3ad42 100644 --- a/src/d/d_demo.cpp +++ b/src/d/d_demo.cpp @@ -4,6 +4,9 @@ // #include "d/d_demo.h" +#include "JSystem/JGadget/binary.h" +#include "JSystem/JStudio/JStudio/fvb.h" +#include "JSystem/JStudio/JStudio/stb.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -293,13 +296,6 @@ struct TControl { }; // namespace ctb -namespace fvb { -struct TControl { - /* 802847D0 */ void destroyObject_all(); -}; - -}; // namespace fvb - struct TCreateObject { /* 80285488 */ ~TCreateObject(); }; @@ -332,25 +328,6 @@ struct TAdaptor_message { /* 802875E0 */ ~TAdaptor_message(); }; -namespace stb { -struct data { - struct TParse_TBlock_object {}; - - struct TParse_TParagraph_data { - struct TData {}; - - /* 80289A80 */ void getData(JStudio::stb::data::TParse_TParagraph_data::TData*) const; - }; -}; - -struct TControl { - /* 80289300 */ void destroyObject_all(); - /* 80289404 */ void reset(); - /* 802894B4 */ void forward(u32); -}; - -}; // namespace stb - struct TObject_message { /* 80287640 */ TObject_message(JStudio::stb::data::TParse_TBlock_object const&, JStudio::TAdaptor_message*); @@ -377,15 +354,6 @@ struct JMessage { }; }; -namespace JGadget { -struct binary { - struct TParse_header_block { - /* 802DC910 */ void parse_next(void const**, u32); - }; -}; - -}; // namespace JGadget - // // Forward References: // diff --git a/src/d/msg/d_msg_object.cpp b/src/d/msg/d_msg_object.cpp index 3b5360e5bb4..b5f7e8dc758 100644 --- a/src/d/msg/d_msg_object.cpp +++ b/src/d/msg/d_msg_object.cpp @@ -4,6 +4,7 @@ // #include "d/msg/d_msg_object.h" +#include "JSystem/JGadget/binary.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -388,21 +389,6 @@ struct JMessage { }; }; -namespace JGadget { -struct binary { - struct TParse_header_block { - /* 802DC910 */ void parse_next(void const**, u32); - }; -}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA58 */ void erase(JGadget::TNodeLinkList::iterator); -}; - -}; // namespace JGadget - // // Forward References: // diff --git a/src/d/msg/d_msg_string_base.cpp b/src/d/msg/d_msg_string_base.cpp index c9e639a9f5e..76fc19a2fd8 100644 --- a/src/d/msg/d_msg_string_base.cpp +++ b/src/d/msg/d_msg_string_base.cpp @@ -4,6 +4,7 @@ // #include "d/msg/d_msg_string_base.h" +#include "JSystem/JGadget/binary.h" #include "dol2asm.h" #include "dolphin/types.h" @@ -79,21 +80,6 @@ struct JKRArchive { /* 802D5B38 */ void getGlbResource(u32, char const*, JKRArchive*); }; -namespace JGadget { -struct binary { - struct TParse_header_block { - /* 802DC910 */ void parse_next(void const**, u32); - }; -}; - -struct TNodeLinkList { - struct iterator {}; - - /* 802DCA58 */ void erase(JGadget::TNodeLinkList::iterator); -}; - -}; // namespace JGadget - // // Forward References: //