diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-03-04 18:28:09 -0500 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2024-03-04 18:28:09 -0500 |
| commit | cddc3efdcd2d199732caa275584e0ef714fe41f7 (patch) | |
| tree | 06d0bbb005673ee826678f546bad8c7422c461d2 /include/JSystem/JMessage/processor.h | |
| parent | 47f60f27333873609a15e5e60cf112da4d0a1559 (diff) | |
Started copying JStudio progress from pikmin2
Diffstat (limited to 'include/JSystem/JMessage/processor.h')
| -rw-r--r-- | include/JSystem/JMessage/processor.h | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/include/JSystem/JMessage/processor.h b/include/JSystem/JMessage/processor.h new file mode 100644 index 00000000..0c4e78c9 --- /dev/null +++ b/include/JSystem/JMessage/processor.h @@ -0,0 +1,195 @@ +#ifndef JMESSAGE_PROCESSOR_H +#define JMESSAGE_PROCESSOR_H + +#include "JSystem/JMessage/resource.h" +#include "dolphin/types.h" + +namespace JMessage { + +struct TReference; +struct TControl; +struct TResource; + +struct TProcessor { + typedef bool (*OnCharacterEndCallBack)(TProcessor*); + typedef void (*OnSelectBeginCallBack)(TProcessor*); + typedef const char* (*ProcessOnSelectCallBack)(TProcessor*); + + struct TStack_ { + TStack_() { clear(); } + + TStack_(const TStack_& other) + { + mSize = other.mSize; + for (int i = 0; i < mSize; i++) { + mStack[i] = mStack[i]; + } + } + + inline bool empty() const { return mSize == 0; } + inline bool isPushable() const { return mSize < 4; } + inline void clear() { mSize = 0; } + + inline u32 getMaxSize() const { return 4; } + inline u32 getSize() const { return mSize; } + inline const char* getTop() const { return mStack[mSize - 1]; } + + inline void push(const char* str) + { + mStack[mSize] = str; + mSize++; + } + + inline void pop() { mSize--; } + + u32 mSize; // _00 + const char* mStack[4]; // _04 + }; + + struct TProcess { + struct TProcessData { + ProcessOnSelectCallBack mSelectCallback; // _00 + const char* mBase; // _04 + const void* mOffset; // _08 + u32 mRest; // _0C + }; + + TProcess() { reset_normal(); } + + void reset_normal() { mEndCallback = process_onCharacterEnd_normal_; } + void reset_select() { mEndCallback = process_onCharacterEnd_select_; } + + OnCharacterEndCallBack mEndCallback; // _00 + TProcessData mData; // _04 + }; + + virtual ~TProcessor(); // _08 + virtual void do_reset(); // _0C + virtual void do_character(int); // _10 + virtual bool do_tag(u32, const void*, u32); // _14 + virtual bool do_systemTagCode(u16, const void*, u32); // _18 + virtual void do_select_begin(u32); // _1C + virtual void do_select_end(); // _20 + virtual void do_select_separate(); // _24 + virtual void do_reset_(const char*) = 0; // _28 + virtual bool do_setBegin_isReady_() const; // _2C + virtual void do_begin_(const void*, const char*) = 0; // _30 + virtual void do_end_() = 0; // _34 + virtual bool do_tag_(u32, const void*, u32) = 0; // _38 + virtual void do_systemTagCode_(u16, const void*, u32) = 0; // _3C + + void setBegin_messageCode(u16, u16); + void setBegin_messageID(u32, u32, bool*); + void setBegin_messageCode(u32); // weak + TResource* getResource_groupID(u16) const; + u32 toMessageCode_messageID(u32, u32, bool*) const; + char* on_message_limited(u16) const; // weak + char* on_message(u32) const; // weak + char* getMessageText_messageCode(u32) const; // weak + static bool process_onCharacterEnd_normal_(TProcessor*); + static bool process_onCharacterEnd_select_(TProcessor*); + static const char* process_onSelect_limited_(TProcessor*); + static const char* process_onSelect_(TProcessor*); + void reset_(const char*); + + int setBegin_messageEntryText(const TResource* resource, const void* entry, const char* param_2) + { + mResourceCache = resource; + reset_(param_2); + do_begin_(entry, param_2); + return TRUE; + } + + const TResource* getResourceCache() const { return mResourceCache; } + const char* getCurrent() const { return mCurrent; } + const TReference* getReference() const { return mReference; } + + // Unused/inlined: + void pushCurrent(const char*); + const char* popCurrent(); + void on_select_begin(OnSelectBeginCallBack* p1, const char* p2, const void* p3, const char* p4, u32 p5); + void on_select_end(); + void on_select_separate(); + void on_tag_(); + void process_character_(); + + // _00 = VTBL + const TReference* mReference; // _04 + const TResource* mResourceCache; // _08 + const char* mCurrent; // _0C + TStack_ mStack; // _10 + TProcess mProcess; // _24 +}; + +struct TSequenceProcessor : public TProcessor { + typedef void OnJumpRegisterCallBack(TSequenceProcessor*); + typedef void OnBranchRegisterCallBack(TSequenceProcessor*, u32); + typedef void* ProcessOnJumpCallBack(const TSequenceProcessor*); + + TSequenceProcessor(const TReference*, TControl*); + + virtual ~TSequenceProcessor(); // _08 + virtual void do_reset_(const char*); // _28 + virtual bool do_setBegin_isReady_() const; // _2C + virtual void do_begin_(const void*, const char*); // _30 + virtual void do_end_(); // _34 + virtual bool do_tag_(u32, const void*, u32); // _38 + virtual void do_systemTagCode_(u16, const void*, u32); // _3C + virtual void do_begin(const void*, const char*); // _40 + virtual void do_end(); // _44 + virtual bool do_isReady(); // _48 + virtual bool do_jump_isReady(); // _4C + virtual void do_jump(const void*, const char*); // _50 + virtual void do_branch_query(u16); // _54 + virtual int do_branch_queryResult(); // _58 + virtual void do_branch(const void*, const char*); // _5C + + char* process(const char*); + bool on_isReady(); + void on_jump_isReady(); + void on_jump(const void*, const char*); + void on_branch_queryResult(); + void on_branch(const void*, const char*); + void process_onJump_limited_(const TSequenceProcessor*); + static void* process_onJump_(const TSequenceProcessor*); + void process_onBranch_limited_(const TSequenceProcessor*, u32); + void process_onBranch_(const TSequenceProcessor*, u32); + + // Unused/inlined: + const char* toString_status(int); + int toValue_status(const char*); + void on_jump_register(OnJumpRegisterCallBack*, const void*, u32); + void on_branch_register(OnBranchRegisterCallBack*, const void*, const void*, u32); + void on_branch_query(u16); + void process_setMessageIndex_reserved_(u16); + void process_setMessageCode_(const TSequenceProcessor*, u16, u16); + + // _00 = VTBL + // _00-_38 = TProcessor + TControl* _38; // _38 + int _3C; // _3C + ProcessOnJumpCallBack* _40; // _40 - processorCallBack(void*, ulong) pointer? + u32 _44; // _44 + u32 _48; // _48 +}; + +struct TRenderingProcessor : public TProcessor { + TRenderingProcessor(const TReference*); + + virtual ~TRenderingProcessor(); // _08 + virtual void do_reset_(const char*); // _28 + virtual void do_begin_(const void*, const char*); // _30 + virtual void do_end_(); // _34 + virtual bool do_tag_(u32, const void*, u32); // _38 + virtual void do_systemTagCode_(u16, const void*, u32); // _3C + virtual void do_begin(const void*, const char*); // _40 + virtual void do_end(); // _44 + + void process(const char*); + + // _00 = VTBL + // _00-_38 = TProcessor +}; +} // namespace JMessage + +#endif /* JMESSAGE_PROCESSOR_H */ |
