mirror of
https://github.com/pret/pmd-red.git
synced 2024-12-12 23:18:09 +00:00
180 lines
5.3 KiB
C
180 lines
5.3 KiB
C
#ifndef GUARD_EVENT_FLAG_H
|
|
#define GUARD_EVENT_FLAG_H
|
|
|
|
enum FlagCalcOperation {
|
|
CALC_SET,
|
|
CALC_SUB,
|
|
CALC_ADD,
|
|
CALC_MUL,
|
|
CALC_DIV,
|
|
CALC_MOD,
|
|
CALC_AND,
|
|
CALC_OR,
|
|
CALC_XOR,
|
|
CALC_SETBIT,
|
|
CALC_CLEARBIT,
|
|
CALC_RANDOM,
|
|
};
|
|
|
|
enum FlagJudgeOperation {
|
|
JUDGE_TRUE,
|
|
JUDGE_FALSE,
|
|
JUDGE_EQ,
|
|
JUDGE_GT,
|
|
JUDGE_LT,
|
|
JUDGE_GE,
|
|
JUDGE_LE,
|
|
JUDGE_NE,
|
|
JUDGE_AND_NONZERO,
|
|
JUDGE_XOR_NONZERO, // logically identical to JUDGE_NE
|
|
JUDGE_BIT_SET,
|
|
};
|
|
|
|
enum ScriptVarId {
|
|
/* 0x00 */ VERSION,
|
|
/* 0x01 */ CONDITION,
|
|
/* 0x02 */ SCENARIO_SELECT,
|
|
/* 0x03 */ SCENARIO_MAIN,
|
|
/* 0x04 */ SCENARIO_SUB1,
|
|
/* 0x05 */ SCENARIO_SUB2,
|
|
/* 0x06 */ SCENARIO_SUB3,
|
|
/* 0x07 */ SCENARIO_SUB4,
|
|
/* 0x08 */ SCENARIO_SUB5,
|
|
/* 0x09 */ SCENARIO_SUB6,
|
|
/* 0x0a */ SCENARIO_SUB7,
|
|
/* 0x0b */ SCENARIO_SUB8,
|
|
/* 0x0c */ SCENARIO_SUB9,
|
|
/* 0x0d */ GROUND_ENTER,
|
|
/* 0x0e */ GROUND_ENTER_LINK,
|
|
/* 0x0f */ GROUND_GETOUT,
|
|
/* 0x10 */ GROUND_MAP,
|
|
/* 0x11 */ GROUND_PLACE,
|
|
/* 0x12 */ DUNGEON_SELECT,
|
|
/* 0x13 */ DUNGEON_ENTER,
|
|
/* 0x14 */ DUNGEON_ENTER_INDEX,
|
|
/* 0x15 */ DUNGEON_ENTER_FREQUENCY,
|
|
/* 0x16 */ DUNGEON_RESULT,
|
|
/* 0x17 */ SCRIPT_MODE,
|
|
/* 0x18 */ START_MODE,
|
|
/* 0x19 */ CLEAR_COUNT,
|
|
/* 0x1a */ CONDITION_KIND,
|
|
/* 0x1b */ WEATHER_KIND,
|
|
/* 0x1c */ PLAYER_KIND,
|
|
/* 0x1d */ PARTNER1_KIND,
|
|
/* 0x1e */ PARTNER2_KIND,
|
|
/* 0x1f */ NEW_FRIEND_KIND,
|
|
/* 0x20 */ FRIEND_SUM,
|
|
/* 0x21 */ UNIT_SUM,
|
|
/* 0x22 */ GOLD,
|
|
/* 0x23 */ BANK_GOLD,
|
|
/* 0x24 */ WARP_LIST,
|
|
/* 0x25 */ WARP_LOCK,
|
|
/* 0x26 */ PARTNER_TALK_KIND,
|
|
/* 0x27 */ BASE_KIND,
|
|
/* 0x28 */ BASE_LEVEL,
|
|
/* 0x29 */ FLAG_KIND,
|
|
/* 0x2a */ FLAG_KIND_CHANGE_REQUEST,
|
|
/* 0x2b */ RESCUE_SCENARIO_ORDER_LIST,
|
|
/* 0x2c */ RESCUE_SCENARIO_JOB_LIST,
|
|
/* 0x2d */ RESCUE_SCENARIO_CONQUEST_LIST,
|
|
/* 0x2e */ TRAINING_CONQUEST_LIST,
|
|
/* 0x2f */ TRAINING_PRESENT_LIST,
|
|
/* 0x30 */ DUNGEON_ENTER_LIST,
|
|
/* 0x31 */ DUNGEON_CLEAR_LIST,
|
|
/* 0x32 */ POSITION_X,
|
|
/* 0x33 */ POSITION_Y,
|
|
/* 0x34 */ POSITION_HEIGHT,
|
|
/* 0x35 */ POSITION_DIRECTION,
|
|
/* 0x36 */ GROUND_LOCAL,
|
|
/* 0x37 */ MAP_LOCAL,
|
|
/* 0x38 */ MAP_LOCAL_DOOR,
|
|
/* 0x39 */ EVENT_LOCAL,
|
|
/* 0x3a */ STATION_ITEM_STATIC,
|
|
/* 0x3b */ STATION_ITEM_TEMP,
|
|
/* 0x3c */ DELIVER_ITEM_STATIC,
|
|
/* 0x3d */ DELIVER_ITEM_TEMP,
|
|
/* 0x3e */ SHOP_TEMP,
|
|
/* 0x3f */ INN_TEMP,
|
|
/* 0x40 */ EVENT_S07E01,
|
|
/* 0x41 */ EVENT_S08E01,
|
|
/* 0x42 */ EVENT_GONBE,
|
|
/* 0x43 */ EVENT_ORNAMENT_01,
|
|
/* 0x44 */ EVENT_ORNAMENT_02,
|
|
/* 0x45 */ EVENT_ORNAMENT_03,
|
|
/* 0x46 */ EVENT_ORNAMENT_04,
|
|
/* 0x47 */ EVENT_B01P01,
|
|
/* 0x48 */ EVENT_T01P01,
|
|
/* 0x49 */ EVENT_T01P02,
|
|
/* 0x4a */ EVENT_T01P03,
|
|
/* 0x4b */ EVENT_M01E09A_2N,
|
|
/* 0x4c */ EVENT_M01E09A_8N,
|
|
/* 0x4d */ EVENT_M01E10A_1N,
|
|
/* 0x4e */ EVENT_M01E10A_3N,
|
|
/* 0x4f */ EVENT_M01E10A_5N,
|
|
/* 0x50 */ EVENT_M02E01A_2N,
|
|
/* 0x51 */ SUM,
|
|
/* 0x400 */ LOCAL0 = 0x400,
|
|
/* 0x401 */ LOCAL1,
|
|
/* 0x402 */ LOCAL2,
|
|
/* 0x403 */ LOCAL3,
|
|
};
|
|
|
|
// size: 0x10
|
|
struct ScriptVarInfo {
|
|
s16 type;
|
|
s16 unk2;
|
|
s16 bufOffset;
|
|
s16 bitOffset;
|
|
s16 arrayLen;
|
|
s16 defaultValue;
|
|
char *name;
|
|
};
|
|
|
|
// size: 0x8
|
|
struct ScriptVarPtr
|
|
{
|
|
/* 0x0 */ struct ScriptVarInfo *info;
|
|
/* 0x4 */ u8 *ptr;
|
|
};
|
|
|
|
// event_flag.s
|
|
|
|
void ThoroughlyResetScriptVars(void);
|
|
void ResetScriptVarArray(u8 *localVarBuf, s16 varId);
|
|
void ClearScriptVarArray(u8 *localVarBuf, s16 varId);
|
|
void GetScriptVarRef(struct ScriptVarPtr *out, u8 *localVarBuf, s32 varId);
|
|
s32 GetScriptVarValue(u8 *localVarBuf, s32 varId);
|
|
s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx);
|
|
void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val);
|
|
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, u16 idx, s32 val);
|
|
s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId);
|
|
void GetScriptVarScenario(s32 varId,u32 *outMain,u32 *outSub);
|
|
void ScenarioCalc(s16 varId, s32 main, s32 sub);
|
|
bool8 ScriptVarScenarioBefore(s16 varId, u32 main, s32 sub);
|
|
bool8 ScriptVarScenarioEqual(s16 varId, u32 main, s32 sub);
|
|
bool8 ScriptVarScenarioAfter(s16 varId, u32 main, s32 sub);
|
|
void sub_8001D88(void);
|
|
s32 _FlagCalc(s32 param_1, s32 param_2, enum FlagCalcOperation operation);
|
|
bool8 _FlagJudge(s32 param_1, s32 param_2, enum FlagJudgeOperation operation);
|
|
s32 FlagCalc(s32 r0, s32 r1, enum FlagCalcOperation operation);
|
|
void UpdateScriptVarWithImmediate(u8 *localVarBuf, s16 varId, s32 val, enum FlagCalcOperation operation);
|
|
void UpdateScriptVarWithVar(u8 *localVarBuf, s16 dstVarId, s16 srcVarId, enum FlagCalcOperation operation);
|
|
bool8 FlagJudge(s32 r0, s32 r1, enum FlagJudgeOperation operation);
|
|
bool8 JudgeVarWithImmediate(u8 *localVarBuf, s16 varId, s32 val, enum FlagJudgeOperation operation);
|
|
bool8 JudgeVarWithVar(u8 *localVarBuf, s16 varId1, s16 varId2, enum FlagJudgeOperation operation);
|
|
bool8 sub_80023E4(u32 param_1); // some kind of helper for predefined scenario checks
|
|
u8 sub_8002658(s16 param_1); // GroundEnter -> value lookup
|
|
s16 sub_8002694(u8 param_1); // value -> GroundEnter lookup
|
|
bool8 sub_80026CC(s16 r0);
|
|
void sub_80026E8(s16 r0, bool8 r1);
|
|
bool8 SaveGlobalScriptVars(void *r0);
|
|
bool8 RestoreGlobalScriptVars(u8 *r0);
|
|
|
|
// .rodata
|
|
extern struct ScriptVarInfo gScriptVarInfo[];
|
|
|
|
// EWRAM
|
|
extern u8 gScriptVarBuffer[0x400];
|
|
|
|
#endif // GUARD_EVENT_FLAG_H
|