Files
sslc/extra.h
T
NovaRain 7d5d93aa57 Added new opcodes sfall_func7 and sfall_func8
Added skipping UTF-8 BOM in the script.
2020-12-22 16:56:05 +08:00

645 lines
12 KiB
C

#ifndef _EXTRA_H_
#define _EXTRA_H_
#ifndef FALLOUT_VERSION
#define FALLOUT_VERSION 2
#endif
#include "parse.h"
#include "parselib.h"
//
// Parse library functions. Given the procedure list and
// what token was just parsed. Parse everything up to but
// not including the ending ; for this statement.
void parseExtraStatement(Procedure *, NodeList*, int);
void parseExtraExpression(Procedure *p, NodeList*, int i);
//
// code generation function for extra opcodes.
// receives the parsed list of things, the position in that
// list, and the stream to write to. Generate code, and return
// the position in the last immediately *after* the the statement
// written.
int writeExtraStatement(NodeList *n, int i, FILE *);
// write out an expression (library functions that return values)
// These are kind of annoying, since the statement versions have
// to realize they are in a statement instead of in an expression.
// For the statement version, you have to generate the call to the
// interpreter function, and follow it with a pop_stack opcode.
// This means that you have to have code generators in both the
// extra statement and extra expression functions (or, if you're
// clever, you can recursively call writeStatement from
// writeExtraExpression, and let writeExtraExpression conditionally
// write out the pop if it can figure out it's in a statement).
int writeExtraExpression(NodeList *n, int i, FILE *f);
// all extra tokens and their meanings
void initLexExtras(void);
#include "opextra.h"
enum {
C_END_CONSTANT = C_END_LIB,
};
enum {
// define any user-specific tokens here, starting with T_END_LIB,
// ending with T_END_TOKEN
T_GIVE_EXP_POINTS = T_END_LIB,
T_SCR_RETURN,
T_PLAY_SFX,
T_OBJ_NAME,
T_SFX_BUILD_OPEN_NAME,
T_GET_PC_STAT,
T_TILE_CONTAINS_PID_OBJ,
T_SET_MAP_START,
T_OVERRIDE_MAP_START,
T_HAS_SKILL,
T_USING_SKILL,
T_ROLL_VS_SKILL,
T_SKILL_CONTEST,
T_DO_CHECK,
T_IS_SUCCESS,
T_IS_CRITICAL,
T_HOW_MUCH,
#if (FALLOUT_VERSION == 2)
T_MARK_AREA_KNOWN,
#else
T_REACTION,
#endif
T_REACTION_INFLUENCE,
T_RANDOM,
T_ROLL_DICE,
T_MOVE_TO,
T_CREATE_OBJECT_SID,
T_DISPLAY_MSG,
T_SCRIPT_OVERRIDES,
T_OBJ_IS_CARRYING_OBJ_PID,
T_TILE_CONTAINS_OBJ_PID,
T_SELF_OBJ,
T_SOURCE_OBJ,
T_TARGET_OBJ,
T_DUDE_OBJ,
T_OBJ_BEING_USED_WITH,
T_LOCAL_VAR,
T_SET_LOCAL_VAR,
T_MAP_VAR,
T_SET_MAP_VAR,
T_GLOBAL_VAR,
T_SET_GLOBAL_VAR,
T_SCRIPT_ACTION,
T_OBJ_TYPE,
T_OBJ_ITEM_SUBTYPE,
T_GET_CRITTER_STAT,
T_SET_CRITTER_STAT,
T_ANIMATE_STAND_OBJ,
T_ANIMATE_STAND_REVERSE_OBJ,
T_ANIMATE_MOVE_OBJ_TO_TILE,
#if (FALLOUT_VERSION == 2)
T_TILE_IN_TILE_RECT,
#else
T_ANIMATE_JUMP,
#endif
T_ATTACK_COMPLEX,
T_MAKE_DAYTIME,
T_TILE_DISTANCE,
T_TILE_DISTANCE_OBJS,
T_TILE_NUM,
T_TILE_NUM_IN_DIRECTION,
T_PICKUP_OBJ,
T_DROP_OBJ,
T_ADD_OBJ_TO_INVEN,
T_RM_OBJ_FROM_INVEN,
T_WIELD_OBJ_CRITTER,
T_USE_OBJ,
T_OBJ_CAN_SEE_OBJ,
T_ATTACK,
T_START_GDIALOG,
T_END_DIALOGUE,
T_DIALOGUE_REACTION,
#if (FALLOUT_VERSION == 2)
T_METARULE3,
T_SET_MAP_MUSIC,
#else
T_TURN_OFF_OBJS_IN_AREA,
T_TURN_ON_OBJS_IN_AREA,
#endif
T_SET_OBJ_VISIBILITY,
T_LOAD_MAP,
#if (FALLOUT_VERSION == 2)
T_WM_AREA_SET_POS,
T_SET_EXIT_GRIDS,
#else
T_BARTER_OFFER,
T_BARTER_ASKING,
#endif
T_ANIM_BUSY,
T_CRITTER_HEAL,
T_SET_LIGHT_LEVEL,
T_GAME_TIME,
T_GAME_TIME_IN_SECONDS,
T_ELEVATION,
T_KILL_CRITTER,
T_KILL_CRITTER_TYPE,
T_CRITTER_DMG,
T_ADD_TIMER_EVENT,
T_RM_TIMER_EVENT,
T_GAME_TICKS,
T_HAS_TRAIT,
T_DESTROY_OBJECT,
T_OBJ_CAN_HEAR_OBJ,
T_GAME_TIME_HOUR,
T_FIXED_PARAM,
T_TILE_IS_VISIBLE,
T_DIALOGUE_SYSTEM_ENTER,
T_ACTION_BEING_USED,
T_CRITTER_STATE,
T_GAME_TIME_ADVANCE,
T_RADIATION_INC,
T_RADIATION_DEC,
T_CRITTER_ATTEMPT_PLACEMENT,
T_OBJ_PID,
T_CUR_MAP_INDEX,
T_CRITTER_ADD_TRAIT,
T_CRITTER_RM_TRAIT,
T_PROTO_DATA,
T_MESSAGE_STR,
T_CRITTER_INVEN_OBJ,
T_OBJ_SET_LIGHT_LEVEL,
T_WORLD_MAP,
#if (FALLOUT_VERSION == 2)
T_INVEN_CMDS,
#else
T_TOWN_MAP,
#endif
T_FLOAT_MSG,
T_METARULE,
T_ANIM,
T_OBJ_CARRYING_PID_OBJ,
T_REG_ANIM_FUNC,
T_REG_ANIM_ANIMATE,
T_REG_ANIM_ANIMATE_REVERSE,
T_REG_ANIM_OBJ_MOVE_TO_OBJ,
T_REG_ANIM_OBJ_RUN_TO_OBJ,
T_REG_ANIM_OBJ_MOVE_TO_TILE,
T_REG_ANIM_OBJ_RUN_TO_TILE,
T_PLAY_GMOVIE,
T_ADD_MULT_OBJS_TO_INVEN,
T_RM_MULT_OBJS_FROM_INVEN,
T_GET_MONTH,
T_GET_DAY,
T_EXPLOSION,
T_DAYS_SINCE_VISITED,
T_GSAY_START,
T_GSAY_END,
T_GSAY_REPLY,
T_GSAY_OPTION,
T_GSAY_MESSAGE,
T_GIQ_OPTION,
T_POISON,
T_GET_POISON,
T_PARTY_ADD,
T_PARTY_REMOVE,
T_REG_ANIM_ANIMATE_FOREVER,
T_CRITTER_INJURE,
T_COMBAT_IS_INITIALIZED,
T_GDIALOG_MOD_BARTER,
T_DIFFICULTY_LEVEL,
T_RUNNING_BURNING_GUY,
T_INVEN_UNWIELD,
T_OBJ_IS_LOCKED,
T_OBJ_LOCK,
T_OBJ_UNLOCK,
T_OBJ_IS_OPEN,
T_OBJ_OPEN,
T_OBJ_CLOSE,
T_GAME_UI_DISABLE,
T_GAME_UI_ENABLE,
T_GAME_UI_IS_DISABLED,
T_GFADE_OUT,
T_GFADE_IN,
T_ITEM_CAPS_TOTAL,
T_ITEM_CAPS_ADJUST,
T_ANIM_ACTION_FRAME,
T_REG_ANIM_PLAY_SFX,
T_CRITTER_MOD_SKILL,
T_SFX_BUILD_CHAR_NAME,
T_SFX_BUILD_AMBIENT_NAME,
T_SFX_BUILD_INTERFACE_NAME,
T_SFX_BUILD_ITEM_NAME,
T_SFX_BUILD_WEAPON_NAME,
T_SFX_BUILD_SCENERY_NAME,
T_ATTACK_SETUP,
T_DESTROY_MULT_OBJS,
T_USE_OBJ_ON_OBJ,
T_ENDGAME_SLIDESHOW,
T_MOVE_OBJ_INVEN_TO_OBJ,
T_ENDGAME_MOVIE,
T_OBJ_ART_FID,
T_ART_ANIM,
T_PARTY_MEMBER_OBJ,
T_ROTATION_TO_TILE,
T_JAM_LOCK,
T_GDIALOG_SET_BARTER_MOD,
T_COMBAT_DIFFICULTY,
T_OBJ_ON_SCREEN,
T_CRITTER_IS_FLEEING,
T_CRITTER_SET_FLEE_STATE,
T_TERMINATE_COMBAT,
T_DEBUG_MSG,
T_CRITTER_STOP_ATTACKING,
T_TS_READ_BYTE,
T_TS_READ_SHORT,
T_TS_READ_INT,
T_TS_READ_STRING,
T_TS_SET_PC_BASE_STAT,
T_TS_SET_PC_EXTRA_STAT,
T_TS_GET_PC_BASE_STAT,
T_TS_GET_PC_EXTRA_STAT,
T_TS_SET_CRITTER_BASE_STAT,
T_TS_SET_CRITTER_EXTRA_STAT,
T_TS_GET_CRITTER_BASE_STAT,
T_TS_GET_CRITTER_EXTRA_STAT,
T_TS_TAP_KEY,
T_TS_GET_YEAR,
T_TS_GAME_LOADED,
T_TS_GRAPHICS_FUNCS_AVAILABLE,
T_TS_LOAD_SHADER,
T_TS_FREE_SHADER,
T_TS_ACTIVATE_SHADER,
T_TS_DEACTIVATE_SHADER,
T_TS_SET_GLOBAL_SCRIPT_REPEAT,
T_TS_INPUT_FUNCS_AVAILABLE,
T_TS_KEY_PRESSED,
T_TS_SET_SHADER_INT,
T_TS_SET_SHADER_FLOAT,
T_TS_SET_SHADER_VECTOR,
T_TS_IN_WORLD_MAP,
T_TS_FORCE_ENCOUNTER,
T_TS_SET_WORLD_MAP_POS,
T_TS_GET_WORLD_MAP_X_POS,
T_TS_GET_WORLD_MAP_Y_POS,
T_TS_SET_DM_MODEL,
T_TS_SET_DF_MODEL,
T_TS_SET_MOVIE_PATH,
T_TS_SET_PERK_IMAGE,
T_TS_SET_PERK_RANKS,
T_TS_SET_PERK_LEVEL,
T_TS_SET_PERK_STAT,
T_TS_SET_PERK_STAT_MAG,
T_TS_SET_PERK_SKILL1,
T_TS_SET_PERK_SKILl1_MAG,
T_TS_SET_PERK_TYPE,
T_TS_SET_PERK_SKILL2,
T_TS_SET_PERK_SKILL2_MAG,
T_TS_SET_PERK_STR,
T_TS_SET_PERK_PER,
T_TS_SET_PERK_END,
T_TS_SET_PERK_CHR,
T_TS_SET_PERK_INT,
T_TS_SET_PERK_AGL,
T_TS_SET_PERK_LCK,
T_TS_SET_PERK_NAME,
T_TS_SET_PERK_DESC,
T_TS_SET_PIPBOY_AVAILABLE,
T_TS_GET_KILL_COUNTER,
T_TS_MOD_KILL_COUNTER,
T_TS_GET_PERK_OWED,
T_TS_SET_PERK_OWED,
T_TS_GET_PERK_AVAILABLE,
T_TS_GET_CRITTER_AP,
T_TS_SET_CRITTER_AP,
T_TS_GET_ACTIVE_HAND,
T_TS_TOGGLE_ACTIVE_HAND,
T_TS_SET_WEAPON_KNOCKBACK,
T_TS_SET_TARGET_KNOCKBACK,
T_TS_SET_ATTACKER_KNOCKBACK,
T_TS_REMOVE_WEAPON_KNOCKBACK,
T_TS_REMOVE_TARGET_KNOCKBACK,
T_TS_REMOVE_ATTACKER_KNOCKBACK,
T_TS_SET_GLOBAL_SCRIPT_TYPE,
T_TS_AVAILABLE_GLOBAL_SCRIPT_TYPES,
T_TS_SET_SFALL_GLOBAL,
T_TS_GET_SFALL_GLOBAL_INT,
T_TS_GET_SFALL_GLOBAL_FLOAT,
T_TS_SET_PICKPOCKET_MAX,
T_TS_SET_HIT_CHANCE_MAX,
T_TS_SET_SKILL_MAX,
T_TS_EAX_AVAILABLE,
T_TS_SET_EAX_ENVIRONMENT,
T_TS_INC_NPC_LEVEL,
T_TS_GET_VIEWPORT_X,
T_TS_GET_VIEWPORT_Y,
T_TS_SET_VIEWPORT_X,
T_TS_SET_VIEWPORT_Y,
T_TS_SET_XP_MOD,
T_TS_SET_PERK_LEVEL_MOD,
T_TS_GET_INI_SETTING,
T_TS_GET_SHADER_VERSION,
T_TS_SET_SHADER_MODE,
T_TS_GET_GAME_MODE,
T_TS_FORCE_GRAPHICS_REFRESH,
T_TS_GET_SHADER_TEXTURE,
T_TS_SET_SHADER_TEXTURE,
T_TS_GET_UPTIME,
T_TS_SET_STAT_MAX,
T_TS_SET_STAT_MIN,
T_TS_SET_CAR_CURRENT_TOWN,
T_TS_SET_PC_STAT_MAX,
T_TS_SET_PC_STAT_MIN,
T_TS_SET_NPC_STAT_MAX,
T_TS_SET_NPC_STAT_MIN,
T_TS_SET_FAKE_PERK,
T_TS_SET_FAKE_TRAIT,
T_TS_SET_SELECTABLE_PERK,
T_TS_SET_PERKBOX_TITLE,
T_TS_HIDE_REAL_PERKS,
T_TS_SHOW_REAL_PERKS,
T_TS_HAS_FAKE_PERK,
T_TS_HAS_FAKE_TRAIT,
T_TS_PERK_ADD_MODE,
T_TS_CLEAR_SELECTABLE_PERKS,
T_TS_SET_CRITTER_HIT_CHANCE_MOD,
T_TS_SET_BASE_HIT_CHANCE_MOD,
T_TS_SET_CRITTER_SKILL_MOD,
T_TS_SET_BASE_SKILL_MOD,
T_TS_SET_CRITTER_PICKPOCKET_MOD,
T_TS_SET_BASE_PICKPOCKET_MOD,
T_TS_SET_PYROMANIAC_MOD,
T_TS_APPLY_HEAVEHO_FIX,
T_TS_SET_SWIFTLEARNER_MOD,
T_TS_SET_HP_LEVEL_MOD,
T_TS_WRITE_BYTE,
T_TS_WRITE_SHORT,
T_TS_WRITE_INT,
T_TS_CALL_OFFSET_V0,
T_TS_CALL_OFFSET_V1,
T_TS_CALL_OFFSET_V2,
T_TS_CALL_OFFSET_V3,
T_TS_CALL_OFFSET_V4,
T_TS_CALL_OFFSET_R0,
T_TS_CALL_OFFSET_R1,
T_TS_CALL_OFFSET_R2,
T_TS_CALL_OFFSET_R3,
T_TS_CALL_OFFSET_R4,
T_TS_SHOW_IFACE_TAG,
T_TS_HIDE_IFACE_TAG,
T_TS_IS_IFACE_TAG_ACTIVE,
T_TS_GET_BODYPART_HIT_MODIFIER,
T_TS_SET_BODYPART_HIT_MODIFIER,
T_TS_SET_CRITICAL_TABLE,
T_TS_GET_CRITICAL_TABLE,
T_TS_RESET_CRITICAL_TABLE,
T_TS_GET_SFALL_ARG,
T_TS_SET_SFALL_RETURN,
T_TS_SET_UNSPENT_AP_BONUS,
T_TS_GET_UNSPENT_AP_BONUS,
T_TS_SET_UNSPENT_AP_EBONUS,
T_TS_GET_UNSPENT_AP_EBONUS,
T_TS_INIT_HOOK,
T_TS_GET_INI_STRING,
T_TS_SQRT,
T_TS_ABS,
T_TS_SIN,
T_TS_COS,
T_TS_TAN,
T_TS_ATAN,
//T_TS_CREATE_BUTTON,
T_TS_SET_PALETTE,
//T_TS_BUTTON_PRESSED,
T_TS_REMOVE_SCRIPT,
T_TS_SET_SCRIPT,
T_TS_GET_SCRIPT,
T_TS_NB_CREATE_CHAR,
T_TS_FS_CREATE,
T_TS_FS_COPY,
T_TS_FS_FIND,
T_TS_FS_WRITE_BYTE,
T_TS_FS_WRITE_SHORT,
T_TS_FS_WRITE_INT,
T_TS_FS_WRITE_FLOAT,
T_TS_FS_WRITE_STRING,
T_TS_FS_DELETE,
T_TS_FS_SIZE,
T_TS_FS_POS,
T_TS_FS_SEEK,
T_TS_FS_RESIZE,
T_TS_GET_PROTO_DATA,
T_TS_SET_PROTO_DATA,
T_TS_SET_SELF,
T_TS_REGISTER_HOOK,
T_TS_FS_WRITE_BSTRING,
T_TS_FS_READ_BYTE,
T_TS_FS_READ_SHORT,
T_TS_FS_READ_INT,
T_TS_FS_READ_FLOAT,
T_TS_LIST_BEGIN,
T_TS_LIST_NEXT,
T_TS_LIST_END,
T_TS_SFALL_VER_MAJOR,
T_TS_SFALL_VER_MINOR,
T_TS_SFALL_VER_BUILD,
T_TS_HERO_SELECT_WIN,
T_TS_SET_HERO_RACE,
T_TS_SET_HERO_STYLE,
T_TS_SET_CRITTER_BURST_DISABLE,
T_TS_GET_WEAPON_AMMO_PID,
T_TS_SET_WEAPON_AMMO_PID,
T_TS_GET_WEAPON_AMMO_COUNT,
T_TS_SET_WEAPON_AMMO_COUNT,
T_TS_WRITE_STRING,
T_TS_GET_MOUSE_X,
T_TS_GET_MOUSE_Y,
T_TS_GET_MOUSE_BUTTONS,
T_TS_GET_WINDOW_UNDER_MOUSE,
T_TS_GET_SCREEN_WIDTH,
T_TS_GET_SCREEN_HEIGHT,
T_TS_STOP_GAME,
T_TS_RESUME_GAME,
T_TS_CREATE_MESSAGE_WINDOW,
T_TS_REMOVE_TRAIT,
T_TS_GET_LIGHT_LEVEL,
T_TS_REFRESH_PC_ART,
T_TS_GET_ATTACK_TYPE,
T_TS_FORCE_ENCOUNTER_WITH_FLAGS,
T_TS_SET_MAP_TIME_MULTI,
T_TS_PLAY_SFALL_SOUND,
T_TS_STOP_SFALL_SOUND,
T_TS_CREATE_ARRAY,
T_TS_SET_ARRAY,
T_TS_GET_ARRAY,
T_TS_FREE_ARRAY,
T_TS_LEN_ARRAY,
T_TS_RESIZE_ARRAY,
T_TS_TEMP_ARRAY,
T_TS_FIX_ARRAY,
T_TS_SCAN_ARRAY,
T_TS_STRING_SPLIT,
T_TS_LIST_AS_ARRAY,
T_TS_ATOI,
T_TS_ATOF,
T_TS_TILE_PID,
T_TS_MODIFIED_INI,
T_TS_GET_SFALL_ARGS,
T_TS_SET_SFALL_ARG,
T_TS_FORCE_AIMED_SHOTS,
T_TS_DISABLE_AIMED_SHOTS,
T_TS_MARK_MOVIE_PLAYED,
T_TS_GET_NPC_LEVEL,
T_TS_SET_CRITTER_SKILL_POINTS,
T_TS_GET_CRITTER_SKILL_POINTS,
T_TS_SET_AVAILABLE_SKILL_POINTS,
T_TS_GET_AVAILABLE_SKILL_POINTS,
T_TS_MOD_SKILL_POINTS_PER_LEVEL,
T_TS_SET_PERK_FREQ,
T_TS_GET_LAST_ATTACKER,
T_TS_GET_LAST_TARGET,
T_TS_BLOCK_COMBAT,
T_TS_TILE_UNDER_CURSOR,
T_TS_GET_BARTER_MOD,
T_TS_SET_INVEN_AP_COST,
T_TS_SUBSTR,
T_TS_STRLEN,
T_TS_SPRINTF,
T_TS_ORD,
T_TS_RESERVD2,
T_TS_TYPEOF,
T_TS_SAVE_ARRAY,
T_TS_LOAD_ARRAY,
T_TS_GET_ARRAY_KEY,
T_TS_STACK_ARRAY,
T_TS_RESERVD3,
T_TS_RESERVD4,
T_TS_REG_ANIM_DESTROY,
T_TS_REG_ANIM_ANIMATE_AND_HIDE,
T_TS_REG_ANIM_COMBAT_CHECK,
T_TS_REG_ANIM_LIGHT,
T_TS_REG_ANIM_CHANGE_FID,
T_TS_REG_ANIM_TAKE_OUT,
T_TS_REG_ANIM_TURN_TOWARDS,
T_TS_EXPLOSIONS_METARULE,
T_TS_REGISTER_HOOK_PROC,
T_TS_LOG,
T_TS_EXP,
T_TS_CEIL,
T_TS_ROUND,
T_TS_MESSAGE_STR_GAME,
T_TS_SNEAK_SUCCESS,
T_TS_TILE_LIGHT,
T_TS_MAKE_STRAIGHT_PATH,
T_TS_OBJ_BLOCKING_AT,
T_TS_TILE_GET_OBJECTS,
T_TS_GET_PARTY_MEMBERS,
T_TS_PATH_FIND,
T_TS_CREATE_SPATIAL,
T_TS_ART_EXISTS,
T_TS_OBJ_IS_CARRYING_OBJ,
T_TS_SFALL_METARULE0,
T_TS_SFALL_METARULE1,
T_TS_SFALL_METARULE2,
T_TS_SFALL_METARULE3,
T_TS_SFALL_METARULE4,
T_TS_SFALL_METARULE5,
T_TS_SFALL_METARULE6,
T_TS_REGISTER_HOOK_PROC2,
T_TS_REG_ANIM_CALLBACK,
T_TS_SFALL_METARULE7,
T_TS_SFALL_METARULE8,
T_END_TOKEN
};
#endif