pmd-red/include/event_flag.h
2024-09-20 01:04:29 +02:00

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