mirror of https://github.com/zeldaret/tp.git
228 lines
8.9 KiB
C++
228 lines
8.9 KiB
C++
#ifndef D_MSG_D_MSG_FLOW_H
|
|
#define D_MSG_D_MSG_FLOW_H
|
|
|
|
#include "dolphin/types.h"
|
|
|
|
enum {
|
|
NODETYPE_MESSAGE_e = 1,
|
|
NODETYPE_BRANCH_e = 2,
|
|
NODETYPE_EVENT_e = 3,
|
|
};
|
|
|
|
enum {
|
|
SELTYPE_NONE_e = 0,
|
|
SELTYPE_VERTICAL_e = 1,
|
|
SELTYPE_HORIZONTAL_e = 2,
|
|
};
|
|
|
|
class fopAc_ac_c;
|
|
class msg_class;
|
|
|
|
// all mesg_flow_node structs members might be wrong
|
|
struct mesg_flow_node {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 field_0x1;
|
|
/* 0x02 */ u16 msg_index;
|
|
/* 0x04 */ u16 next_node_idx;
|
|
/* 0x06 */ u16 unk_0x6;
|
|
}; // Size: 0x8
|
|
|
|
struct mesg_flow_node_branch {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 field_0x1;
|
|
/* 0x02 */ u16 query_idx;
|
|
/* 0x04 */ u16 param;
|
|
/* 0x06 */ u16 next_node_idx;
|
|
};
|
|
|
|
struct mesg_flow_node_event {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 event_idx;
|
|
/* 0x02 */ u16 next_node_idx;
|
|
/* 0x04 */ u8 params[4];
|
|
}; // Size: 0x8
|
|
|
|
class dMsgFlow_c;
|
|
typedef u16 (dMsgFlow_c::*queryFunc)(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
typedef int (dMsgFlow_c::*eventFunc)(mesg_flow_node_event*, fopAc_ac_c*);
|
|
|
|
class dMsgFlow_c {
|
|
public:
|
|
dMsgFlow_c();
|
|
virtual ~dMsgFlow_c();
|
|
|
|
void init(fopAc_ac_c* i_partner, int i_flowID, int, fopAc_ac_c**);
|
|
int checkOpenDoor(fopAc_ac_c*, int*);
|
|
int doFlow(fopAc_ac_c*, fopAc_ac_c**, int i_flow);
|
|
int checkEventRender(int*, int*, int*, int*);
|
|
void remove();
|
|
u16 getEventId(int*);
|
|
u32 getMsgNo();
|
|
u32 getNowMsgNo();
|
|
msg_class* getMsg();
|
|
void setInitValue(int);
|
|
void setInitValueGroupChange(int, fopAc_ac_c**);
|
|
u8* getMsgDataBlock(char const*);
|
|
u16 getInitNodeIndex(u16);
|
|
void setNodeIndex(u16, fopAc_ac_c**);
|
|
int setSelectMsg(mesg_flow_node*, mesg_flow_node*, fopAc_ac_c*);
|
|
int setNormalMsg(mesg_flow_node*, fopAc_ac_c*);
|
|
int messageNodeProc(fopAc_ac_c*, fopAc_ac_c**);
|
|
int branchNodeProc(fopAc_ac_c*, fopAc_ac_c**);
|
|
int eventNodeProc(fopAc_ac_c*, fopAc_ac_c**);
|
|
int nodeProc(fopAc_ac_c*, fopAc_ac_c**);
|
|
int getParam(u16*, u16*, u8*);
|
|
int getParam(u8*, u8*);
|
|
int getParam(u8*);
|
|
u16 query001(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query002(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query003(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query004(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query005(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query006(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query007(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query008(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query009(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query010(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query011(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query012(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query013(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query014(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query015(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query016(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query017(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query018(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query019(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query020(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query021(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query022(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query023(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query024(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query025(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query026(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query027(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query028(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query029(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query030(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query031(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query032(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query033(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query034(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query035(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query036(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query037(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query038(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query039(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query040(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query041(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query042(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query043(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query044(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query045(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query046(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query047(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query048(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query049(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query050(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query051(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query052(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
u16 query053(mesg_flow_node_branch*, fopAc_ac_c*, int);
|
|
int event000(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event001(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event002(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event003(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event004(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event005(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event006(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event007(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event008(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event009(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event010(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event011(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event012(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event013(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event014(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event015(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event016(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event017(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event018(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event019(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event020(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event021(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event022(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event023(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event024(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event025(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event026(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event027(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event028(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event029(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event030(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event031(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event032(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event033(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event034(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event035(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event036(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event037(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event038(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event039(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event040(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event041(mesg_flow_node_event*, fopAc_ac_c*);
|
|
int event042(mesg_flow_node_event*, fopAc_ac_c*);
|
|
|
|
void initWord(fopAc_ac_c*, const char*, u8, int, fopAc_ac_c**);
|
|
|
|
#if DEBUG
|
|
void dbgPrint();
|
|
#endif
|
|
|
|
u8 isSelectMessage() { return mSelectMessage; }
|
|
void onNonStopJunpFlowFlag() { mNonStopJunpFlowFlag = 1; }
|
|
u16 getSelectNum() { return query005(NULL, NULL, 0); }
|
|
int getChoiceNo() { return (s16)mChoiceNo; }
|
|
void setMsg(u32 msg) { mMsg = msg; }
|
|
bool checkEndFlow() { return (u32)field_0x26 == 1; }
|
|
|
|
static queryFunc mQueryList[53];
|
|
static eventFunc mEventList[43];
|
|
|
|
private:
|
|
/* 0x04 */ u8* mFlow_p;
|
|
/* 0x08 */ u8* mLabelInfo_p;
|
|
/* 0x0C */ union mesg_flow {
|
|
mesg_flow_node message;
|
|
mesg_flow_node_branch branch;
|
|
mesg_flow_node_event event;
|
|
}* mFlowNodeTBL;
|
|
/* 0x10 */ u16 mNodeIdx;
|
|
/* 0x12 */ u16 field_0x12;
|
|
/* 0x14 */ u16* mFlowIdxTBL;
|
|
/* 0x18 */ u16* field_0x18;
|
|
/* 0x1C */ u16 mFlow;
|
|
/* 0x20 */ u32 mMsg;
|
|
/* 0x24 */ u8 mSelectMessage;
|
|
/* 0x25 */ u8 field_0x25;
|
|
/* 0x26 */ u8 field_0x26;
|
|
/* 0x27 */ u8 field_0x27;
|
|
/* 0x28 */ u32 mMsgNo;
|
|
/* 0x2C */ u32 mNowMsgNo;
|
|
/* 0x30 */ u16 field_0x30;
|
|
/* 0x32 */ u16 mEventId;
|
|
/* 0x34 */ int field_0x34;
|
|
/* 0x38 */ u16 field_0x38;
|
|
/* 0x3A */ u16 mChoiceNo;
|
|
/* 0x3C */ s32 mTimer;
|
|
/* 0x40 */ u8 field_0x40;
|
|
/* 0x41 */ u8 field_0x41;
|
|
/* 0x42 */ u8 field_0x42;
|
|
/* 0x43 */ u8 field_0x43;
|
|
/* 0x44 */ u8 field_0x44;
|
|
/* 0x45 */ u8 field_0x45;
|
|
/* 0x46 */ u8 mSelType;
|
|
/* 0x47 */ u8 field_0x47;
|
|
/* 0x48 */ u8 mNonStopJunpFlowFlag;
|
|
}; // size 0x4c
|
|
|
|
#endif /* D_MSG_D_MSG_FLOW_H */
|