mirror of
https://github.com/sfall-team/sslc.git
synced 2026-07-27 16:52:49 -07:00
1792 lines
60 KiB
C
1792 lines
60 KiB
C
#include "parse.h"
|
|
#include "gencode.h"
|
|
#include "parselib.h"
|
|
#include "extra.h"
|
|
|
|
extern int backwardcompat;
|
|
|
|
// scripting function - expression
|
|
#define SFALLEXPR(name, token, args) {name, T_##token, O_##token, args, 1, 0, 0},
|
|
// scripting function - statement
|
|
#define SFALLSTMT(name, token, args) {name, T_##token, O_##token, args, 0, 1, 0},
|
|
// function to be used both as statement or expression
|
|
#define SFALLEXPRSTMT(name, token, args) {name, T_##token, O_##token, args, 1, 1, 0},
|
|
// statement with proc arguments
|
|
#define SFALLSTMTPROC(name, token, args, proc) {name, T_##token, O_##token, args, 0, 1, proc},
|
|
|
|
typedef struct {
|
|
const char* name;
|
|
int token;
|
|
int opcode;
|
|
int numArgs;
|
|
int isExpression;
|
|
int isStatement;
|
|
int procArgs;
|
|
} SfallOpcode;
|
|
|
|
// the above list must be in EXACTLY the same order as in tokens enum
|
|
static const int sfall_start_token = T_TS_SAVE_ARRAY;
|
|
static const SfallOpcode sfall_opcodes[] = {
|
|
SFALLSTMT("save_array", TS_SAVE_ARRAY, 2)
|
|
SFALLEXPR("load_array", TS_LOAD_ARRAY, 1)
|
|
SFALLEXPR("array_key", TS_GET_ARRAY_KEY, 2)
|
|
SFALLEXPR("arrayexpr", TS_STACK_ARRAY, 2)
|
|
SFALLEXPR(0, TS_RESERVD3, 1)
|
|
SFALLEXPR(0, TS_RESERVD4, 1)
|
|
SFALLSTMT("reg_anim_destroy", TS_REG_ANIM_DESTROY, 1)
|
|
SFALLSTMT("reg_anim_animate_and_hide", TS_REG_ANIM_ANIMATE_AND_HIDE, 3)
|
|
SFALLSTMT("reg_anim_combat_check", TS_REG_ANIM_COMBAT_CHECK, 1)
|
|
SFALLSTMT("reg_anim_light", TS_REG_ANIM_LIGHT, 3)
|
|
SFALLSTMT("reg_anim_change_fid", TS_REG_ANIM_CHANGE_FID, 3)
|
|
SFALLSTMT("reg_anim_take_out", TS_REG_ANIM_TAKE_OUT, 3)
|
|
SFALLSTMT("reg_anim_turn_towards", TS_REG_ANIM_TURN_TOWARDS, 3)
|
|
SFALLEXPRSTMT("metarule2_explosions", TS_EXPLOSIONS_METARULE, 3)
|
|
SFALLSTMTPROC("register_hook_proc", TS_REGISTER_HOOK_PROC, 2, (2))
|
|
SFALLEXPR("log", TS_LOG, 1)
|
|
SFALLEXPR("exponent", TS_EXP, 1)
|
|
SFALLEXPR("ceil", TS_CEIL, 1)
|
|
SFALLEXPR("round", TS_ROUND, 1)
|
|
SFALLEXPR("message_str_game", TS_MESSAGE_STR_GAME, 2)
|
|
SFALLEXPR("sneak_success", TS_SNEAK_SUCCESS, 0)
|
|
SFALLEXPR("tile_light", TS_TILE_LIGHT, 2)
|
|
SFALLEXPR("obj_blocking_line", TS_MAKE_STRAIGHT_PATH, 3)
|
|
SFALLEXPR("obj_blocking_tile", TS_OBJ_BLOCKING_AT, 3)
|
|
SFALLEXPR("tile_get_objs", TS_TILE_GET_OBJECTS, 2)
|
|
SFALLEXPR("party_member_list", TS_GET_PARTY_MEMBERS, 1)
|
|
SFALLEXPR("path_find_to", TS_PATH_FIND, 3)
|
|
SFALLEXPRSTMT("create_spatial", TS_CREATE_SPATIAL, 4)
|
|
SFALLEXPR("art_exists", TS_ART_EXISTS, 1)
|
|
SFALLEXPR("obj_is_carrying_obj", TS_OBJ_IS_CARRYING_OBJ, 2)
|
|
SFALLEXPRSTMT("sfall_func0", TS_SFALL_METARULE0, 1)
|
|
SFALLEXPRSTMT("sfall_func1", TS_SFALL_METARULE1, 2)
|
|
SFALLEXPRSTMT("sfall_func2", TS_SFALL_METARULE2, 3)
|
|
SFALLEXPRSTMT("sfall_func3", TS_SFALL_METARULE3, 4)
|
|
SFALLEXPRSTMT("sfall_func4", TS_SFALL_METARULE4, 5)
|
|
SFALLEXPRSTMT("sfall_func5", TS_SFALL_METARULE5, 6)
|
|
SFALLEXPRSTMT("sfall_func6", TS_SFALL_METARULE6, 7)
|
|
SFALLSTMTPROC("register_hook_proc_spec", TS_REGISTER_HOOK_PROC2, 2, 2)
|
|
SFALLSTMTPROC("reg_anim_callback", TS_REG_ANIM_CALLBACK, 1, 1)
|
|
SFALLEXPRSTMT("sfall_func7", TS_SFALL_METARULE7, 8)
|
|
SFALLEXPRSTMT("sfall_func8", TS_SFALL_METARULE8, 9)
|
|
};
|
|
|
|
int numSfallOpcodes() {
|
|
return sizeof(sfall_opcodes) / sizeof(SfallOpcode);
|
|
}
|
|
|
|
const SfallOpcode* getSfallOpcode(int token) {
|
|
if (token >= sfall_start_token && token < T_END_TOKEN) {
|
|
return &sfall_opcodes[token - sfall_start_token];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void parseExtraExpression(Procedure *p, NodeList* nodes, int token)
|
|
{
|
|
p = p;
|
|
|
|
switch(token) {
|
|
PARSEEXP(HAS_SKILL, 2);
|
|
PARSEEXP(USING_SKILL, 2);
|
|
PARSEEXP(ROLL_VS_SKILL, 3);
|
|
PARSEEXP(SKILL_CONTEST, 3);
|
|
PARSEEXP(DO_CHECK, 3);
|
|
PARSEEXP(IS_SUCCESS, 1);
|
|
PARSEEXP(IS_CRITICAL, 1);
|
|
PARSEEXP(HOW_MUCH, 1);
|
|
PARSEEXP(REACTION_INFLUENCE, 3);
|
|
PARSEEXP(RANDOM, 2);
|
|
PARSEEXP(ROLL_DICE, 2);
|
|
PARSEEXP(MOVE_TO, 3);
|
|
PARSEEXP(CREATE_OBJECT_SID, 4);
|
|
PARSEEXP(OBJ_IS_CARRYING_OBJ_PID, 2);
|
|
PARSEEXP(TILE_CONTAINS_OBJ_PID, 3);
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSEEXP(TILE_IN_TILE_RECT, 5);
|
|
#endif
|
|
|
|
PARSEEXP(SELF_OBJ, 0);
|
|
PARSEEXP(SOURCE_OBJ, 0);
|
|
PARSEEXP(TARGET_OBJ, 0);
|
|
PARSEEXP(DUDE_OBJ, 0);
|
|
PARSEEXP(OBJ_BEING_USED_WITH, 0);
|
|
PARSEEXP(LOCAL_VAR, 1);
|
|
PARSEEXP(MAP_VAR, 1);
|
|
PARSEEXP(GLOBAL_VAR, 1);
|
|
PARSEEXP(SCRIPT_ACTION, 0);
|
|
PARSEEXP(OBJ_TYPE, 1);
|
|
PARSEEXP(OBJ_ITEM_SUBTYPE, 1);
|
|
PARSEEXP(GET_CRITTER_STAT, 2);
|
|
PARSEEXP(SET_CRITTER_STAT, 3);
|
|
PARSEEXP(TILE_DISTANCE, 2);
|
|
PARSEEXP(TILE_DISTANCE_OBJS, 2);
|
|
PARSEEXP(TILE_NUM, 1);
|
|
PARSEEXP(TILE_NUM_IN_DIRECTION, 3);
|
|
PARSEEXP(OBJ_CAN_SEE_OBJ, 2);
|
|
PARSEEXP(ANIM_BUSY, 1);
|
|
PARSEEXP(CRITTER_HEAL, 2);
|
|
PARSEEXP(GAME_TIME, 0);
|
|
PARSEEXP(GAME_TIME_IN_SECONDS, 0);
|
|
PARSEEXP(ELEVATION, 1);
|
|
PARSEEXP(GAME_TICKS, 1);
|
|
PARSEEXP(HAS_TRAIT, 3);
|
|
PARSEEXP(OBJ_CAN_HEAR_OBJ, 2);
|
|
PARSEEXP(GAME_TIME_HOUR, 0);
|
|
PARSEEXP(FIXED_PARAM, 0);
|
|
PARSEEXP(TILE_IS_VISIBLE, 1);
|
|
PARSEEXP(ACTION_BEING_USED, 0);
|
|
PARSEEXP(CRITTER_STATE, 1);
|
|
PARSEEXP(CRITTER_ATTEMPT_PLACEMENT, 3);
|
|
PARSEEXP(OBJ_PID, 1);
|
|
PARSEEXP(CUR_MAP_INDEX, 0);
|
|
PARSEEXP(CRITTER_ADD_TRAIT, 4);
|
|
PARSEEXP(CRITTER_RM_TRAIT, 4);
|
|
PARSEEXP(PROTO_DATA, 2);
|
|
PARSEEXP(MESSAGE_STR, 2);
|
|
PARSEEXP(CRITTER_INVEN_OBJ, 2);
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSEEXP(INVEN_CMDS, 3);
|
|
#endif
|
|
PARSEEXP(METARULE, 2);
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSEEXP(METARULE3, 4);
|
|
#endif
|
|
PARSEEXP(OBJ_CARRYING_PID_OBJ, 2);
|
|
PARSEEXP(RM_MULT_OBJS_FROM_INVEN, 3);
|
|
PARSEEXP(GET_MONTH, 0);
|
|
PARSEEXP(GET_DAY, 0);
|
|
PARSEEXP(DAYS_SINCE_VISITED, 0);
|
|
PARSEEXP(GET_POISON, 1);
|
|
PARSEEXP(COMBAT_IS_INITIALIZED, 0);
|
|
PARSEEXP(DIFFICULTY_LEVEL, 0);
|
|
PARSEEXP(RUNNING_BURNING_GUY, 0);
|
|
PARSEEXP(OBJ_IS_LOCKED, 1);
|
|
PARSEEXP(OBJ_IS_OPEN, 1);
|
|
PARSEEXP(GAME_UI_IS_DISABLED, 0);
|
|
PARSEEXP(ITEM_CAPS_TOTAL, 1);
|
|
PARSEEXP(ITEM_CAPS_ADJUST, 2);
|
|
PARSEEXP(ANIM_ACTION_FRAME, 2);
|
|
PARSEEXP(DESTROY_MULT_OBJS, 2);
|
|
PARSEEXP(OBJ_ART_FID, 1);
|
|
PARSEEXP(ART_ANIM, 1);
|
|
PARSEEXP(PARTY_MEMBER_OBJ, 1);
|
|
PARSEEXP(ROTATION_TO_TILE, 2);
|
|
PARSEEXP(SFX_BUILD_CHAR_NAME, 3);
|
|
PARSEEXP(SFX_BUILD_AMBIENT_NAME, 1);
|
|
PARSEEXP(SFX_BUILD_INTERFACE_NAME, 1);
|
|
PARSEEXP(SFX_BUILD_ITEM_NAME, 1);
|
|
PARSEEXP(SFX_BUILD_WEAPON_NAME, 4);
|
|
PARSEEXP(SFX_BUILD_SCENERY_NAME, 3);
|
|
PARSEEXP(SFX_BUILD_OPEN_NAME, 2);
|
|
PARSEEXP(GET_PC_STAT, 1);
|
|
PARSEEXP(COMBAT_DIFFICULTY, 0);
|
|
PARSEEXP(OBJ_ON_SCREEN, 1);
|
|
PARSEEXP(CRITTER_IS_FLEEING, 1);
|
|
PARSEEXP(TILE_CONTAINS_PID_OBJ, 3);
|
|
PARSEEXP(OBJ_NAME, 1);
|
|
|
|
PARSEEXP(TS_READ_BYTE, 1);
|
|
PARSEEXP(TS_READ_SHORT, 1);
|
|
PARSEEXP(TS_READ_INT, 1);
|
|
PARSEEXP(TS_READ_STRING, 1);
|
|
PARSEEXP(TS_GET_PC_BASE_STAT, 1);
|
|
PARSEEXP(TS_GET_PC_EXTRA_STAT, 1);
|
|
PARSEEXP(TS_GET_CRITTER_BASE_STAT, 2);
|
|
PARSEEXP(TS_GET_CRITTER_EXTRA_STAT, 2);
|
|
PARSEEXP(TS_GET_YEAR, 0);
|
|
PARSEEXP(TS_GAME_LOADED, 0);
|
|
PARSEEXP(TS_GRAPHICS_FUNCS_AVAILABLE, 0);
|
|
PARSEEXP(TS_LOAD_SHADER, 1);
|
|
PARSEEXP(TS_INPUT_FUNCS_AVAILABLE, 0);
|
|
PARSEEXP(TS_KEY_PRESSED, 1);
|
|
PARSEEXP(TS_IN_WORLD_MAP, 0);
|
|
PARSEEXP(TS_GET_WORLD_MAP_X_POS, 0);
|
|
PARSEEXP(TS_GET_WORLD_MAP_Y_POS, 0);
|
|
|
|
PARSEEXP(TS_GET_KILL_COUNTER, 1);
|
|
|
|
PARSEEXP(TS_GET_PERK_OWED, 0);
|
|
PARSEEXP(TS_GET_PERK_AVAILABLE, 1);
|
|
PARSEEXP(TS_GET_CRITTER_AP, 1);
|
|
PARSEEXP(TS_GET_ACTIVE_HAND, 0);
|
|
PARSEEXP(TS_AVAILABLE_GLOBAL_SCRIPT_TYPES, 0);
|
|
PARSEEXP(TS_GET_SFALL_GLOBAL_INT, 1);
|
|
PARSEEXP(TS_GET_SFALL_GLOBAL_FLOAT, 1);
|
|
PARSEEXP(TS_EAX_AVAILABLE, 0);
|
|
PARSEEXP(TS_GET_VIEWPORT_X, 0);
|
|
PARSEEXP(TS_GET_VIEWPORT_Y, 0);
|
|
PARSEEXP(TS_GET_INI_SETTING, 1);
|
|
PARSEEXP(TS_GET_SHADER_VERSION, 0);
|
|
PARSEEXP(TS_GET_GAME_MODE, 0);
|
|
PARSEEXP(TS_GET_SHADER_TEXTURE, 2);
|
|
PARSEEXP(TS_GET_UPTIME, 0);
|
|
|
|
PARSEEXP(TS_HAS_FAKE_PERK, 1);
|
|
PARSEEXP(TS_HAS_FAKE_TRAIT, 1);
|
|
|
|
PARSEEXP(TS_CALL_OFFSET_R0, 1);
|
|
PARSEEXP(TS_CALL_OFFSET_R1, 2);
|
|
PARSEEXP(TS_CALL_OFFSET_R2, 3);
|
|
PARSEEXP(TS_CALL_OFFSET_R3, 4);
|
|
PARSEEXP(TS_CALL_OFFSET_R4, 5);
|
|
|
|
PARSEEXP(TS_IS_IFACE_TAG_ACTIVE, 1);
|
|
|
|
PARSEEXP(TS_GET_BODYPART_HIT_MODIFIER, 1);
|
|
|
|
PARSEEXP(TS_GET_CRITICAL_TABLE, 4);
|
|
PARSEEXP(TS_GET_SFALL_ARG, 0);
|
|
|
|
PARSEEXP(TS_GET_UNSPENT_AP_BONUS, 0);
|
|
PARSEEXP(TS_GET_UNSPENT_AP_EBONUS, 0);
|
|
|
|
PARSEEXP(TS_INIT_HOOK, 0);
|
|
|
|
PARSEEXP(TS_GET_INI_STRING, 1);
|
|
|
|
PARSEEXP(TS_SQRT, 1);
|
|
PARSEEXP(TS_ABS, 1);
|
|
PARSEEXP(TS_SIN, 1);
|
|
PARSEEXP(TS_COS, 1);
|
|
PARSEEXP(TS_TAN, 1);
|
|
PARSEEXP(TS_ATAN, 2);
|
|
|
|
PARSEEXP(TS_GET_SCRIPT, 1);
|
|
|
|
PARSEEXP(TS_NB_CREATE_CHAR, 0);
|
|
|
|
PARSEEXP(TS_FS_CREATE, 2);
|
|
PARSEEXP(TS_FS_COPY, 2);
|
|
PARSEEXP(TS_FS_FIND, 1);
|
|
PARSEEXP(TS_FS_SIZE, 1);
|
|
PARSEEXP(TS_FS_POS, 1);
|
|
|
|
PARSEEXP(TS_GET_PROTO_DATA, 2);
|
|
|
|
PARSEEXP(TS_FS_READ_BYTE, 1);
|
|
PARSEEXP(TS_FS_READ_SHORT, 1);
|
|
PARSEEXP(TS_FS_READ_INT, 1);
|
|
PARSEEXP(TS_FS_READ_FLOAT, 1);
|
|
|
|
PARSEEXP(TS_LIST_BEGIN, 1);
|
|
PARSEEXP(TS_LIST_NEXT, 1);
|
|
|
|
PARSEEXP(TS_SFALL_VER_MAJOR, 0);
|
|
PARSEEXP(TS_SFALL_VER_MINOR, 0);
|
|
PARSEEXP(TS_SFALL_VER_BUILD, 0);
|
|
|
|
PARSEEXP(TS_GET_WEAPON_AMMO_PID, 1);
|
|
PARSEEXP(TS_GET_WEAPON_AMMO_COUNT, 1);
|
|
|
|
PARSEEXP(TS_GET_MOUSE_X, 0);
|
|
PARSEEXP(TS_GET_MOUSE_Y, 0);
|
|
PARSEEXP(TS_GET_MOUSE_BUTTONS, 0);
|
|
PARSEEXP(TS_GET_WINDOW_UNDER_MOUSE, 0);
|
|
PARSEEXP(TS_GET_SCREEN_WIDTH, 0);
|
|
PARSEEXP(TS_GET_SCREEN_HEIGHT, 0);
|
|
PARSEEXP(TS_GET_LIGHT_LEVEL, 0);
|
|
|
|
PARSEEXP(TS_GET_ATTACK_TYPE, 0);
|
|
|
|
PARSEEXP(TS_PLAY_SFALL_SOUND, 2);
|
|
|
|
PARSEEXP(TS_CREATE_ARRAY, 2);
|
|
PARSEEXP(TS_GET_ARRAY, 2);
|
|
PARSEEXP(TS_LEN_ARRAY, 1);
|
|
PARSEEXP(TS_TEMP_ARRAY, 2);
|
|
|
|
PARSEEXP(TS_STRING_SPLIT, 2);
|
|
|
|
PARSEEXP(TS_LIST_AS_ARRAY, 1);
|
|
|
|
PARSEEXP(TS_ATOI, 1);
|
|
PARSEEXP(TS_ATOF, 1);
|
|
|
|
PARSEEXP(TS_SCAN_ARRAY, 2);
|
|
|
|
PARSEEXP(TS_TILE_PID, 1);
|
|
|
|
PARSEEXP(TS_MODIFIED_INI, 0);
|
|
|
|
PARSEEXP(TS_GET_SFALL_ARGS, 0);
|
|
|
|
PARSEEXP(TS_GET_NPC_LEVEL, 1);
|
|
|
|
PARSEEXP(TS_GET_CRITTER_SKILL_POINTS, 2);
|
|
PARSEEXP(TS_GET_AVAILABLE_SKILL_POINTS, 0);
|
|
|
|
PARSEEXP(TS_GET_LAST_ATTACKER, 1);
|
|
PARSEEXP(TS_GET_LAST_TARGET, 1);
|
|
|
|
PARSEEXP(TS_TILE_UNDER_CURSOR, 0);
|
|
PARSEEXP(TS_GET_BARTER_MOD, 0);
|
|
|
|
PARSEEXP(TS_SUBSTR, 3);
|
|
PARSEEXP(TS_STRLEN, 1);
|
|
PARSEEXP(TS_SPRINTF, 2);
|
|
PARSEEXP(TS_ORD, 1);
|
|
// reserved
|
|
PARSEEXP(TS_TYPEOF, 1);
|
|
|
|
//PARSEEXP(TS_CREATE_BUTTON, 6);
|
|
//PARSEEXP(TS_BUTTON_PRESSED, 0);
|
|
|
|
#if (FALLOUT_VERSION != 2)
|
|
PARSEEXP(REACTION, 3); // 426
|
|
#endif
|
|
default: {
|
|
const SfallOpcode* opcode = getSfallOpcode(token);
|
|
if (opcode) {
|
|
emitOp(p, nodes, token);
|
|
parseLibArgs(p, nodes, opcode->numArgs, opcode->procArgs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void parseExtraStatement(Procedure *p, NodeList* nodes, int token) {
|
|
switch (token) {
|
|
PARSE(GIVE_EXP_POINTS, 1); // 409
|
|
PARSE(SCR_RETURN, 1); // 410
|
|
PARSE(PLAY_SFX, 1); // 411
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSE(MARK_AREA_KNOWN, 3); // 426
|
|
#endif
|
|
PARSE(SET_MAP_START, 4); // 416
|
|
PARSE(OVERRIDE_MAP_START, 4); // 417
|
|
PARSE(HAS_SKILL, 2); // 418
|
|
PARSE(USING_SKILL, 2); // 419
|
|
PARSE(ROLL_VS_SKILL, 3); // 420
|
|
PARSE(SKILL_CONTEST, 3); // 421
|
|
PARSE(DO_CHECK, 3); // 422
|
|
PARSE(ROLL_DICE, 2); // 429
|
|
PARSE(MOVE_TO, 3); // 430
|
|
PARSE(CREATE_OBJECT_SID, 4); // 431
|
|
PARSE(DISPLAY_MSG, 1); // 432
|
|
PARSE(SCRIPT_OVERRIDES, 0); // 433
|
|
PARSE(SET_LOCAL_VAR, 2); // 442
|
|
PARSE(SET_MAP_VAR, 2); // 444
|
|
PARSE(SET_GLOBAL_VAR, 2); // 446
|
|
PARSE(SET_CRITTER_STAT, 3); // 451
|
|
PARSE(ANIMATE_STAND_OBJ, 1); // 452
|
|
PARSE(ANIMATE_STAND_REVERSE_OBJ, 1); // 453
|
|
PARSE(ANIMATE_MOVE_OBJ_TO_TILE, 3); // 454
|
|
PARSE(ATTACK_COMPLEX, 8); // 456
|
|
PARSE(MAKE_DAYTIME, 0); // 457
|
|
PARSE(PICKUP_OBJ, 1); // 462
|
|
PARSE(DROP_OBJ, 1); // 463
|
|
PARSE(ADD_OBJ_TO_INVEN, 2); // 464
|
|
PARSE(RM_OBJ_FROM_INVEN, 2); // 465
|
|
PARSE(WIELD_OBJ_CRITTER, 2); // 466
|
|
PARSE(USE_OBJ, 1); // 467
|
|
PARSE(ATTACK, 8); // 469
|
|
PARSE(START_GDIALOG, 5); // 470
|
|
PARSE(END_DIALOGUE, 0); // 471
|
|
PARSE(DIALOGUE_REACTION, 1); // 472
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSE(SET_MAP_MUSIC, 2); // 474
|
|
#endif
|
|
PARSE(SET_OBJ_VISIBILITY, 2); // 475
|
|
PARSE(LOAD_MAP, 2); // 476
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSE(WM_AREA_SET_POS, 3); // 477
|
|
PARSE(SET_EXIT_GRIDS, 5); // 478
|
|
#endif
|
|
PARSE(CRITTER_HEAL, 2); // 480
|
|
PARSE(SET_LIGHT_LEVEL, 1); // 481
|
|
PARSE(KILL_CRITTER, 2); // 485
|
|
PARSE(KILL_CRITTER_TYPE, 2); // 486
|
|
PARSE(CRITTER_DMG, 3); // 487
|
|
PARSE(ADD_TIMER_EVENT, 3); // 488
|
|
PARSE(RM_TIMER_EVENT, 1); // 489
|
|
PARSE(DESTROY_OBJECT, 1); // 492
|
|
PARSE(DIALOGUE_SYSTEM_ENTER, 0); // 497
|
|
PARSE(GAME_TIME_ADVANCE, 1); // 500
|
|
PARSE(RADIATION_INC, 2); // 501
|
|
PARSE(RADIATION_DEC, 2); // 502
|
|
PARSE(CRITTER_ATTEMPT_PLACEMENT, 3); // 503
|
|
PARSE(CRITTER_ADD_TRAIT, 4); // 506
|
|
PARSE(CRITTER_RM_TRAIT, 4); // 507
|
|
PARSE(OBJ_SET_LIGHT_LEVEL, 3); // 511
|
|
PARSE(WORLD_MAP, 0); // 512
|
|
PARSE(FLOAT_MSG, 3); // 514
|
|
PARSE(METARULE, 2); // 515
|
|
#if (FALLOUT_VERSION == 2)
|
|
PARSE(METARULE3, 4); // 473
|
|
#endif
|
|
PARSE(ANIM, 3); // 516
|
|
PARSE(REG_ANIM_FUNC, 2); // 518
|
|
PARSE(REG_ANIM_ANIMATE, 3); // 519
|
|
PARSE(REG_ANIM_ANIMATE_REVERSE, 3); // 520
|
|
PARSE(REG_ANIM_OBJ_MOVE_TO_OBJ, 3); // 521
|
|
PARSE(REG_ANIM_OBJ_RUN_TO_OBJ, 3); // 522
|
|
PARSE(REG_ANIM_OBJ_MOVE_TO_TILE, 3); // 523
|
|
PARSE(REG_ANIM_OBJ_RUN_TO_TILE, 3); // 524
|
|
PARSE(PLAY_GMOVIE, 1); // 525
|
|
PARSE(ADD_MULT_OBJS_TO_INVEN, 3); // 526
|
|
PARSE(EXPLOSION, 3); // 530
|
|
PARSE(GSAY_START, 0); // 532
|
|
PARSE(GSAY_END, 0); // 533
|
|
PARSE(GSAY_REPLY, 2); // 534
|
|
PARSEPROC(GSAY_OPTION, 4, 4); // 535
|
|
PARSE(GSAY_MESSAGE, 3); // 536
|
|
PARSEPROC(GIQ_OPTION, 5, 8); // 537
|
|
PARSE(POISON, 2); // 538
|
|
PARSE(PARTY_ADD, 1); // 540
|
|
PARSE(PARTY_REMOVE, 1); // 541
|
|
PARSE(REG_ANIM_ANIMATE_FOREVER, 2); // 542
|
|
PARSE(CRITTER_INJURE, 2); // 543
|
|
PARSE(GDIALOG_MOD_BARTER, 1); // 545
|
|
PARSE(INVEN_UNWIELD, 0); // 548
|
|
PARSE(OBJ_LOCK, 1); // 550
|
|
PARSE(OBJ_UNLOCK, 1); // 551
|
|
PARSE(OBJ_OPEN, 1); // 553
|
|
PARSE(OBJ_CLOSE, 1); // 554
|
|
PARSE(GAME_UI_DISABLE, 0); // 555
|
|
PARSE(GAME_UI_ENABLE, 0); // 556
|
|
PARSE(GFADE_OUT, 1); // 558
|
|
PARSE(GFADE_IN, 1); // 559
|
|
PARSE(ITEM_CAPS_ADJUST, 2); // 561
|
|
PARSE(REG_ANIM_PLAY_SFX, 3); // 563
|
|
PARSE(CRITTER_MOD_SKILL, 3); // 564
|
|
PARSE(ATTACK_SETUP, 2); // 571
|
|
PARSE(USE_OBJ_ON_OBJ, 2); // 573
|
|
PARSE(ENDGAME_SLIDESHOW, 0); // 574
|
|
PARSE(MOVE_OBJ_INVEN_TO_OBJ, 2); // 575
|
|
PARSE(ENDGAME_MOVIE, 0); // 576
|
|
PARSE(JAM_LOCK, 1); // 581
|
|
PARSE(GDIALOG_SET_BARTER_MOD, 1); // 582
|
|
PARSE(CRITTER_SET_FLEE_STATE, 2); // 586
|
|
PARSE(TERMINATE_COMBAT, 0); // 587 !!! Must be here
|
|
PARSE(DEBUG_MSG, 1); // 588
|
|
PARSE(CRITTER_STOP_ATTACKING, 1); // 589
|
|
|
|
PARSE(TS_SET_PC_BASE_STAT, 2);
|
|
PARSE(TS_SET_PC_EXTRA_STAT, 2);
|
|
PARSE(TS_SET_CRITTER_BASE_STAT, 3);
|
|
PARSE(TS_SET_CRITTER_EXTRA_STAT, 3);
|
|
PARSE(TS_TAP_KEY, 1);
|
|
PARSE(TS_FREE_SHADER, 1);
|
|
PARSE(TS_ACTIVATE_SHADER, 1);
|
|
PARSE(TS_DEACTIVATE_SHADER, 1);
|
|
PARSE(TS_SET_GLOBAL_SCRIPT_REPEAT, 1);
|
|
PARSE(TS_SET_SHADER_INT, 3);
|
|
PARSE(TS_SET_SHADER_FLOAT, 3);
|
|
PARSE(TS_SET_SHADER_VECTOR, 6);
|
|
PARSE(TS_FORCE_ENCOUNTER, 1);
|
|
PARSE(TS_SET_WORLD_MAP_POS, 2);
|
|
|
|
PARSE(TS_SET_DM_MODEL, 1);
|
|
PARSE(TS_SET_DF_MODEL, 1);
|
|
PARSE(TS_SET_MOVIE_PATH, 2);
|
|
|
|
PARSE(TS_SET_PERK_IMAGE, 2);
|
|
PARSE(TS_SET_PERK_RANKS, 2);
|
|
PARSE(TS_SET_PERK_LEVEL, 2);
|
|
PARSE(TS_SET_PERK_STAT, 2);
|
|
PARSE(TS_SET_PERK_STAT_MAG, 2);
|
|
PARSE(TS_SET_PERK_SKILL1, 2);
|
|
PARSE(TS_SET_PERK_SKILl1_MAG, 2);
|
|
PARSE(TS_SET_PERK_TYPE, 2);
|
|
PARSE(TS_SET_PERK_SKILL2, 2);
|
|
PARSE(TS_SET_PERK_SKILL2_MAG, 2);
|
|
PARSE(TS_SET_PERK_STR, 2);
|
|
PARSE(TS_SET_PERK_PER, 2);
|
|
PARSE(TS_SET_PERK_END, 2);
|
|
PARSE(TS_SET_PERK_CHR, 2);
|
|
PARSE(TS_SET_PERK_INT, 2);
|
|
PARSE(TS_SET_PERK_AGL, 2);
|
|
PARSE(TS_SET_PERK_LCK, 2);
|
|
PARSE(TS_SET_PERK_NAME, 2);
|
|
PARSE(TS_SET_PERK_DESC, 2);
|
|
PARSE(TS_SET_PIPBOY_AVAILABLE, 1);
|
|
PARSE(TS_MOD_KILL_COUNTER, 2);
|
|
PARSE(TS_SET_PERK_OWED, 1);
|
|
PARSE(TS_SET_CRITTER_AP, 2);
|
|
PARSE(TS_TOGGLE_ACTIVE_HAND, 0);
|
|
PARSE(TS_SET_WEAPON_KNOCKBACK, 3);
|
|
PARSE(TS_SET_TARGET_KNOCKBACK, 3);
|
|
PARSE(TS_SET_ATTACKER_KNOCKBACK, 3);
|
|
PARSE(TS_REMOVE_WEAPON_KNOCKBACK, 1);
|
|
PARSE(TS_REMOVE_TARGET_KNOCKBACK, 1);
|
|
PARSE(TS_REMOVE_ATTACKER_KNOCKBACK, 1);
|
|
PARSE(TS_SET_GLOBAL_SCRIPT_TYPE, 1);
|
|
PARSE(TS_SET_SFALL_GLOBAL, 2);
|
|
PARSE(TS_SET_PICKPOCKET_MAX, 1);
|
|
PARSE(TS_SET_HIT_CHANCE_MAX, 1);
|
|
PARSE(TS_SET_SKILL_MAX, 1);
|
|
PARSE(TS_EAX_AVAILABLE, 0);
|
|
PARSE(TS_SET_EAX_ENVIRONMENT, 1);
|
|
PARSE(TS_INC_NPC_LEVEL, 1);
|
|
PARSE(TS_SET_VIEWPORT_X, 1);
|
|
PARSE(TS_SET_VIEWPORT_Y, 1);
|
|
PARSE(TS_SET_XP_MOD, 1);
|
|
PARSE(TS_SET_PERK_LEVEL_MOD, 1);
|
|
PARSE(TS_SET_SHADER_MODE, 2);
|
|
PARSE(TS_FORCE_GRAPHICS_REFRESH, 1);
|
|
PARSE(TS_SET_SHADER_TEXTURE, 3);
|
|
PARSE(TS_SET_STAT_MAX, 2);
|
|
PARSE(TS_SET_STAT_MIN, 2);
|
|
PARSE(TS_SET_CAR_CURRENT_TOWN, 1);
|
|
PARSE(TS_SET_PC_STAT_MAX, 2);
|
|
PARSE(TS_SET_PC_STAT_MIN, 2);
|
|
PARSE(TS_SET_NPC_STAT_MAX, 2);
|
|
PARSE(TS_SET_NPC_STAT_MIN, 2);
|
|
PARSE(TS_SET_FAKE_PERK, 4);
|
|
PARSE(TS_SET_FAKE_TRAIT, 4);
|
|
PARSE(TS_SET_SELECTABLE_PERK, 4);
|
|
PARSE(TS_SET_PERKBOX_TITLE, 1);
|
|
PARSE(TS_HIDE_REAL_PERKS, 0);
|
|
PARSE(TS_SHOW_REAL_PERKS, 0);
|
|
PARSE(TS_PERK_ADD_MODE, 1);
|
|
PARSE(TS_CLEAR_SELECTABLE_PERKS, 0);
|
|
PARSE(TS_SET_CRITTER_HIT_CHANCE_MOD, 3);
|
|
PARSE(TS_SET_BASE_HIT_CHANCE_MOD, 2);
|
|
PARSE(TS_SET_CRITTER_SKILL_MOD, 2);
|
|
PARSE(TS_SET_BASE_SKILL_MOD, 1);
|
|
PARSE(TS_SET_CRITTER_PICKPOCKET_MOD, 3);
|
|
PARSE(TS_SET_BASE_PICKPOCKET_MOD, 2);
|
|
PARSE(TS_SET_PYROMANIAC_MOD, 1);
|
|
PARSE(TS_APPLY_HEAVEHO_FIX, 0);
|
|
PARSE(TS_SET_SWIFTLEARNER_MOD, 1);
|
|
PARSE(TS_SET_HP_LEVEL_MOD, 1);
|
|
PARSE(TS_WRITE_BYTE, 2);
|
|
PARSE(TS_WRITE_SHORT, 2);
|
|
PARSE(TS_WRITE_INT, 2);
|
|
|
|
PARSE(TS_CALL_OFFSET_V0, 1);
|
|
PARSE(TS_CALL_OFFSET_V1, 2);
|
|
PARSE(TS_CALL_OFFSET_V2, 3);
|
|
PARSE(TS_CALL_OFFSET_V3, 4);
|
|
PARSE(TS_CALL_OFFSET_V4, 5);
|
|
|
|
PARSE(TS_SHOW_IFACE_TAG, 1);
|
|
PARSE(TS_HIDE_IFACE_TAG, 1);
|
|
|
|
PARSE(TS_SET_BODYPART_HIT_MODIFIER, 2);
|
|
|
|
PARSE(TS_SET_CRITICAL_TABLE, 5);
|
|
PARSE(TS_RESET_CRITICAL_TABLE, 4);
|
|
PARSE(TS_SET_SFALL_RETURN, 1);
|
|
|
|
PARSE(TS_SET_UNSPENT_AP_BONUS, 1);
|
|
PARSE(TS_SET_UNSPENT_AP_EBONUS, 1);
|
|
|
|
PARSE(TS_SET_PALETTE, 1);
|
|
|
|
PARSE(TS_REMOVE_SCRIPT, 1);
|
|
PARSE(TS_SET_SCRIPT, 2);
|
|
|
|
PARSE(TS_FS_WRITE_BYTE, 2);
|
|
PARSE(TS_FS_WRITE_SHORT, 2);
|
|
PARSE(TS_FS_WRITE_INT, 2);
|
|
PARSE(TS_FS_WRITE_FLOAT, 2);
|
|
PARSE(TS_FS_WRITE_STRING, 2);
|
|
PARSE(TS_FS_DELETE, 1);
|
|
PARSE(TS_FS_SEEK, 2);
|
|
PARSE(TS_FS_RESIZE, 2);
|
|
|
|
PARSE(TS_SET_PROTO_DATA, 3);
|
|
|
|
PARSE(TS_SET_SELF, 1);
|
|
PARSE(TS_REGISTER_HOOK, 1);
|
|
|
|
PARSE(TS_FS_WRITE_BSTRING, 2);
|
|
|
|
PARSE(TS_LIST_END, 1);
|
|
|
|
PARSE(TS_HERO_SELECT_WIN, 1);
|
|
PARSE(TS_SET_HERO_RACE, 1);
|
|
PARSE(TS_SET_HERO_STYLE, 1);
|
|
|
|
PARSE(TS_SET_CRITTER_BURST_DISABLE, 2);
|
|
|
|
PARSE(TS_SET_WEAPON_AMMO_PID, 2);
|
|
PARSE(TS_SET_WEAPON_AMMO_COUNT, 2);
|
|
|
|
PARSE(TS_WRITE_STRING, 2);
|
|
|
|
PARSE(TS_STOP_GAME, 0);
|
|
PARSE(TS_RESUME_GAME, 0);
|
|
PARSE(TS_CREATE_MESSAGE_WINDOW, 1);
|
|
|
|
PARSE(TS_REMOVE_TRAIT, 1);
|
|
|
|
PARSE(TS_REFRESH_PC_ART, 0);
|
|
|
|
PARSE(TS_FORCE_ENCOUNTER_WITH_FLAGS, 2);
|
|
|
|
PARSE(TS_SET_MAP_TIME_MULTI, 1);
|
|
|
|
PARSE(TS_STOP_SFALL_SOUND, 1);
|
|
|
|
PARSE(TS_SET_ARRAY, 3);
|
|
PARSE(TS_FREE_ARRAY, 1);
|
|
PARSE(TS_RESIZE_ARRAY, 2);
|
|
PARSE(TS_FIX_ARRAY, 1);
|
|
|
|
PARSE(TS_SET_SFALL_ARG, 2);
|
|
|
|
PARSE(TS_FORCE_AIMED_SHOTS, 1);
|
|
PARSE(TS_DISABLE_AIMED_SHOTS, 1);
|
|
|
|
PARSE(TS_MARK_MOVIE_PLAYED, 1);
|
|
|
|
PARSE(TS_SET_CRITTER_SKILL_POINTS, 3);
|
|
PARSE(TS_SET_AVAILABLE_SKILL_POINTS, 1);
|
|
PARSE(TS_MOD_SKILL_POINTS_PER_LEVEL, 1);
|
|
PARSE(TS_SET_PERK_FREQ, 1);
|
|
|
|
PARSE(TS_BLOCK_COMBAT, 1);
|
|
|
|
PARSE(TS_SET_INVEN_AP_COST, 1);
|
|
|
|
#if (FALLOUT_VERSION != 2)
|
|
PARSE(ANIMATE_JUMP, 0); // 455
|
|
PARSE(TURN_OFF_OBJS_IN_AREA, 4); // 473
|
|
PARSE(TURN_ON_OBJS_IN_AREA, 4); // 474
|
|
PARSE(BARTER_OFFER, 3); // 477
|
|
PARSE(BARTER_ASKING, 3); // 478
|
|
PARSE(TOWN_MAP, 0); // 513
|
|
#endif
|
|
default: {
|
|
const SfallOpcode* opcode = getSfallOpcode(token);
|
|
if (opcode) {
|
|
parseLibArgs(p, nodes, opcode->numArgs, opcode->procArgs);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int writeExtraStatement(NodeList *n, int i, FILE *f) {
|
|
switch(n->nodes[i].token) {
|
|
EXP(GIVE_EXP_POINTS, 1); // 409
|
|
EXP(SCR_RETURN, 1); // 410
|
|
EXP(PLAY_SFX, 1); // 411
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(MARK_AREA_KNOWN, 3); // 426
|
|
#endif
|
|
|
|
EXP(SET_MAP_START, 4); // 416
|
|
EXP(OVERRIDE_MAP_START, 4); // 417
|
|
EXPST(HAS_SKILL, 2); // 418
|
|
EXPST(USING_SKILL, 2); // 419
|
|
EXPST(ROLL_VS_SKILL, 3); // 420
|
|
EXPST(SKILL_CONTEST, 3); // 421
|
|
EXPST(DO_CHECK, 3); // 422
|
|
EXPST(ROLL_DICE, 2); // 429
|
|
EXPST(MOVE_TO, 3); // 430
|
|
EXPST(CREATE_OBJECT_SID, 4); // 431
|
|
EXP(DISPLAY_MSG, 1); // 432
|
|
EXP(SCRIPT_OVERRIDES, 0); // 433
|
|
EXP(SET_LOCAL_VAR, 2); // 442
|
|
EXP(SET_MAP_VAR, 2); // 444
|
|
EXP(SET_GLOBAL_VAR, 2); // 446
|
|
EXPST(SET_CRITTER_STAT, 3); // 451
|
|
EXP(ANIMATE_STAND_OBJ, 1); // 452
|
|
EXP(ANIMATE_STAND_REVERSE_OBJ, 1); // 453
|
|
EXP(ANIMATE_MOVE_OBJ_TO_TILE, 3); // 454
|
|
EXP(ATTACK_COMPLEX, 8); // 456
|
|
EXP(MAKE_DAYTIME, 0); // 457
|
|
EXP(PICKUP_OBJ, 1); // 462
|
|
EXP(DROP_OBJ, 1); // 463
|
|
EXP(ADD_OBJ_TO_INVEN, 2); // 464
|
|
EXP(RM_OBJ_FROM_INVEN, 2); // 465
|
|
EXP(WIELD_OBJ_CRITTER, 2); // 466
|
|
EXP(USE_OBJ, 1); // 467
|
|
EXP(ATTACK, 8); // 469
|
|
EXP(START_GDIALOG, 5); // 470
|
|
EXP(END_DIALOGUE, 0); // 471
|
|
EXP(DIALOGUE_REACTION, 1); // 472
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(SET_MAP_MUSIC, 2); // 474
|
|
#endif
|
|
|
|
EXP(SET_OBJ_VISIBILITY, 2); // 475
|
|
EXP(LOAD_MAP, 2); // 476
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(WM_AREA_SET_POS, 3); // 477
|
|
EXP(SET_EXIT_GRIDS, 5); // 478
|
|
#endif
|
|
|
|
EXPST(CRITTER_HEAL, 2); // 480
|
|
EXP(SET_LIGHT_LEVEL, 1); // 481
|
|
EXP(KILL_CRITTER, 2); // 485
|
|
EXP(KILL_CRITTER_TYPE, 2); // 486
|
|
EXP(CRITTER_DMG, 3); // 487
|
|
EXP(ADD_TIMER_EVENT, 3); // 488
|
|
EXP(RM_TIMER_EVENT, 1); // 489
|
|
EXP(DESTROY_OBJECT, 1); // 492
|
|
EXP(DIALOGUE_SYSTEM_ENTER, 0); // 497
|
|
EXP(GAME_TIME_ADVANCE, 1); // 500
|
|
EXP(RADIATION_INC, 2); // 501
|
|
EXP(RADIATION_DEC, 2); // 502
|
|
EXPST(CRITTER_ATTEMPT_PLACEMENT, 3); // 503
|
|
EXPST(CRITTER_ADD_TRAIT, 4); // 506
|
|
EXPST(CRITTER_RM_TRAIT, 4); // 507
|
|
EXP(OBJ_SET_LIGHT_LEVEL, 3); // 511
|
|
EXP(WORLD_MAP, 0); // 512
|
|
EXP(FLOAT_MSG, 3); // 514
|
|
EXPST(METARULE, 2); // 515
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXPST(METARULE3, 4); // 473
|
|
#endif
|
|
|
|
EXP(ANIM, 3); // 516
|
|
EXP(REG_ANIM_FUNC, 2); // 518
|
|
EXP(REG_ANIM_ANIMATE, 3); // 519
|
|
EXP(REG_ANIM_ANIMATE_REVERSE, 3); // 520
|
|
EXP(REG_ANIM_OBJ_MOVE_TO_OBJ, 3); // 521
|
|
EXP(REG_ANIM_OBJ_RUN_TO_OBJ, 3); // 522
|
|
EXP(REG_ANIM_OBJ_MOVE_TO_TILE, 3); // 523
|
|
EXP(REG_ANIM_OBJ_RUN_TO_TILE, 3); // 524
|
|
EXP(PLAY_GMOVIE, 1); // 525
|
|
EXP(ADD_MULT_OBJS_TO_INVEN, 3); // 526
|
|
EXP(EXPLOSION, 3); // 530
|
|
ST(GSAY_START); // 532 !!!
|
|
ST(GSAY_END); // 533 !!!
|
|
EXP(GSAY_REPLY, 2); // 534
|
|
EXPPROC(GSAY_OPTION, 4); // 535 !!!
|
|
EXP(GSAY_MESSAGE, 3); // 536
|
|
EXPPROC(GIQ_OPTION, 5); // 537 !!!
|
|
EXP(POISON, 2); // 538
|
|
EXP(PARTY_ADD, 1); // 540
|
|
EXP(PARTY_REMOVE, 1); // 541
|
|
EXP(REG_ANIM_ANIMATE_FOREVER, 2); // 542
|
|
EXP(CRITTER_INJURE, 2); // 543
|
|
EXP(GDIALOG_MOD_BARTER, 1); // 545
|
|
EXP(INVEN_UNWIELD, 0); // 548
|
|
EXP(OBJ_LOCK, 1); // 550
|
|
EXP(OBJ_UNLOCK, 1); // 551
|
|
EXP(OBJ_OPEN, 1); // 553
|
|
EXP(OBJ_CLOSE, 1); // 554
|
|
EXP(GAME_UI_DISABLE, 0); // 555
|
|
EXP(GAME_UI_ENABLE, 0); // 556
|
|
EXP(GFADE_OUT, 1); // 558
|
|
EXP(GFADE_IN, 1); // 559
|
|
EXPST(ITEM_CAPS_ADJUST, 2); // 561
|
|
EXP(REG_ANIM_PLAY_SFX, 3); // 563
|
|
EXP(CRITTER_MOD_SKILL, 3); // 564
|
|
EXP(ATTACK_SETUP, 2); // 571
|
|
EXP(USE_OBJ_ON_OBJ, 2); // 573
|
|
EXP(ENDGAME_SLIDESHOW, 0); // 574
|
|
EXP(MOVE_OBJ_INVEN_TO_OBJ, 2); // 575
|
|
EXP(ENDGAME_MOVIE, 0); // 576
|
|
EXP(JAM_LOCK, 1); // 581
|
|
EXP(GDIALOG_SET_BARTER_MOD, 1); // 582
|
|
EXP(CRITTER_SET_FLEE_STATE, 2); // 586
|
|
EXP(TERMINATE_COMBAT, 0); // 587
|
|
EXP(DEBUG_MSG, 1); // 588
|
|
EXP(CRITTER_STOP_ATTACKING, 1); // 589
|
|
|
|
EXP(TS_SET_PC_BASE_STAT, 2);
|
|
EXP(TS_SET_PC_EXTRA_STAT, 2);
|
|
EXP(TS_SET_CRITTER_BASE_STAT, 3);
|
|
EXP(TS_SET_CRITTER_EXTRA_STAT, 3);
|
|
EXP(TS_TAP_KEY, 1);
|
|
EXP(TS_FREE_SHADER, 1);
|
|
EXP(TS_ACTIVATE_SHADER, 1);
|
|
EXP(TS_DEACTIVATE_SHADER, 1);
|
|
EXP(TS_SET_GLOBAL_SCRIPT_REPEAT, 1);
|
|
EXP(TS_SET_SHADER_INT, 3);
|
|
EXP(TS_SET_SHADER_FLOAT, 3);
|
|
EXP(TS_SET_SHADER_VECTOR, 6);
|
|
EXP(TS_FORCE_ENCOUNTER, 1);
|
|
EXP(TS_SET_WORLD_MAP_POS, 2);
|
|
|
|
EXP(TS_SET_DM_MODEL, 1);
|
|
EXP(TS_SET_DF_MODEL, 1);
|
|
EXP(TS_SET_MOVIE_PATH, 2);
|
|
|
|
EXP(TS_SET_PERK_IMAGE, 2);
|
|
EXP(TS_SET_PERK_RANKS, 2);
|
|
EXP(TS_SET_PERK_LEVEL, 2);
|
|
EXP(TS_SET_PERK_STAT, 2);
|
|
EXP(TS_SET_PERK_STAT_MAG, 2);
|
|
EXP(TS_SET_PERK_SKILL1, 2);
|
|
EXP(TS_SET_PERK_SKILl1_MAG, 2);
|
|
EXP(TS_SET_PERK_TYPE, 2);
|
|
EXP(TS_SET_PERK_SKILL2, 2);
|
|
EXP(TS_SET_PERK_SKILL2_MAG, 2);
|
|
EXP(TS_SET_PERK_STR, 2);
|
|
EXP(TS_SET_PERK_PER, 2);
|
|
EXP(TS_SET_PERK_END, 2);
|
|
EXP(TS_SET_PERK_CHR, 2);
|
|
EXP(TS_SET_PERK_INT, 2);
|
|
EXP(TS_SET_PERK_AGL, 2);
|
|
EXP(TS_SET_PERK_LCK, 2);
|
|
EXP(TS_SET_PERK_NAME, 2);
|
|
EXP(TS_SET_PERK_DESC, 2);
|
|
EXP(TS_SET_PIPBOY_AVAILABLE, 1);
|
|
EXP(TS_MOD_KILL_COUNTER, 2);
|
|
EXP(TS_SET_PERK_OWED, 1);
|
|
EXP(TS_SET_CRITTER_AP, 2);
|
|
EXP(TS_TOGGLE_ACTIVE_HAND, 0);
|
|
EXP(TS_SET_WEAPON_KNOCKBACK, 3);
|
|
EXP(TS_SET_TARGET_KNOCKBACK, 3);
|
|
EXP(TS_SET_ATTACKER_KNOCKBACK, 3);
|
|
EXP(TS_REMOVE_WEAPON_KNOCKBACK, 1);
|
|
EXP(TS_REMOVE_TARGET_KNOCKBACK, 1);
|
|
EXP(TS_REMOVE_ATTACKER_KNOCKBACK, 1);
|
|
EXP(TS_SET_GLOBAL_SCRIPT_TYPE, 1);
|
|
EXP(TS_SET_SFALL_GLOBAL, 2);
|
|
EXP(TS_SET_PICKPOCKET_MAX, 1);
|
|
EXP(TS_SET_HIT_CHANCE_MAX, 1);
|
|
EXP(TS_SET_SKILL_MAX, 1);
|
|
EXP(TS_SET_EAX_ENVIRONMENT, 1);
|
|
EXP(TS_INC_NPC_LEVEL, 1);
|
|
EXP(TS_SET_VIEWPORT_X, 1);
|
|
EXP(TS_SET_VIEWPORT_Y, 1);
|
|
EXP(TS_SET_XP_MOD, 1);
|
|
EXP(TS_SET_PERK_LEVEL_MOD, 1);
|
|
EXP(TS_SET_SHADER_MODE, 2);
|
|
EXP(TS_FORCE_GRAPHICS_REFRESH, 1);
|
|
EXP(TS_SET_SHADER_TEXTURE, 3);
|
|
EXP(TS_SET_STAT_MAX, 2);
|
|
EXP(TS_SET_STAT_MIN, 2);
|
|
EXP(TS_SET_CAR_CURRENT_TOWN, 1);
|
|
EXP(TS_SET_PC_STAT_MAX, 2);
|
|
EXP(TS_SET_PC_STAT_MIN, 2);
|
|
EXP(TS_SET_NPC_STAT_MAX, 2);
|
|
EXP(TS_SET_NPC_STAT_MIN, 2);
|
|
EXP(TS_SET_FAKE_PERK, 4);
|
|
EXP(TS_SET_FAKE_TRAIT, 4);
|
|
EXP(TS_SET_SELECTABLE_PERK, 4);
|
|
EXP(TS_SET_PERKBOX_TITLE, 1);
|
|
EXP(TS_HIDE_REAL_PERKS, 0);
|
|
EXP(TS_SHOW_REAL_PERKS, 0);
|
|
EXP(TS_PERK_ADD_MODE, 1);
|
|
EXP(TS_CLEAR_SELECTABLE_PERKS, 0);
|
|
EXP(TS_SET_CRITTER_HIT_CHANCE_MOD, 3);
|
|
EXP(TS_SET_BASE_HIT_CHANCE_MOD, 2);
|
|
EXP(TS_SET_CRITTER_SKILL_MOD, 2);
|
|
EXP(TS_SET_BASE_SKILL_MOD, 1);
|
|
EXP(TS_SET_CRITTER_PICKPOCKET_MOD, 3);
|
|
EXP(TS_SET_BASE_PICKPOCKET_MOD, 2);
|
|
EXP(TS_SET_PYROMANIAC_MOD, 1);
|
|
EXP(TS_APPLY_HEAVEHO_FIX, 0);
|
|
EXP(TS_SET_SWIFTLEARNER_MOD, 1);
|
|
EXP(TS_SET_HP_LEVEL_MOD, 1);
|
|
EXP(TS_WRITE_BYTE, 2);
|
|
EXP(TS_WRITE_SHORT, 2);
|
|
EXP(TS_WRITE_INT, 2);
|
|
EXP(TS_CALL_OFFSET_V0, 1);
|
|
EXP(TS_CALL_OFFSET_V1, 2);
|
|
EXP(TS_CALL_OFFSET_V2, 3);
|
|
EXP(TS_CALL_OFFSET_V3, 4);
|
|
EXP(TS_CALL_OFFSET_V4, 5);
|
|
|
|
EXP(TS_SHOW_IFACE_TAG, 1);
|
|
EXP(TS_HIDE_IFACE_TAG, 1);
|
|
|
|
EXP(TS_SET_BODYPART_HIT_MODIFIER, 2);
|
|
|
|
EXP(TS_SET_CRITICAL_TABLE, 5);
|
|
EXP(TS_RESET_CRITICAL_TABLE, 4);
|
|
EXP(TS_SET_SFALL_RETURN, 1);
|
|
|
|
EXP(TS_SET_UNSPENT_AP_BONUS, 1);
|
|
EXP(TS_SET_UNSPENT_AP_EBONUS, 1);
|
|
|
|
EXP(TS_SET_PALETTE, 1);
|
|
|
|
EXP(TS_REMOVE_SCRIPT, 1);
|
|
EXP(TS_SET_SCRIPT, 2);
|
|
|
|
EXP(TS_FS_WRITE_BYTE, 2);
|
|
EXP(TS_FS_WRITE_SHORT, 2);
|
|
EXP(TS_FS_WRITE_INT, 2);
|
|
EXP(TS_FS_WRITE_FLOAT, 2);
|
|
EXP(TS_FS_WRITE_STRING, 2);
|
|
EXP(TS_FS_DELETE, 1);
|
|
EXP(TS_FS_SEEK, 2);
|
|
EXP(TS_FS_RESIZE, 2);
|
|
|
|
EXP(TS_SET_PROTO_DATA, 3);
|
|
|
|
EXP(TS_SET_SELF, 1);
|
|
EXP(TS_REGISTER_HOOK, 1);
|
|
|
|
EXP(TS_FS_WRITE_BSTRING, 2);
|
|
|
|
EXP(TS_LIST_END, 1);
|
|
|
|
EXP(TS_HERO_SELECT_WIN, 1);
|
|
EXP(TS_SET_HERO_RACE, 1);
|
|
EXP(TS_SET_HERO_STYLE, 1);
|
|
|
|
EXP(TS_SET_CRITTER_BURST_DISABLE, 2);
|
|
|
|
EXP(TS_SET_WEAPON_AMMO_PID, 2);
|
|
EXP(TS_SET_WEAPON_AMMO_COUNT, 2);
|
|
|
|
EXP(TS_WRITE_STRING, 2);
|
|
|
|
EXP(TS_STOP_GAME, 0);
|
|
EXP(TS_RESUME_GAME, 0);
|
|
EXP(TS_CREATE_MESSAGE_WINDOW, 1);
|
|
|
|
EXP(TS_REMOVE_TRAIT, 1);
|
|
|
|
EXP(TS_REFRESH_PC_ART, 0);
|
|
|
|
EXP(TS_FORCE_ENCOUNTER_WITH_FLAGS, 2);
|
|
|
|
EXP(TS_SET_MAP_TIME_MULTI, 1);
|
|
|
|
EXP(TS_STOP_SFALL_SOUND, 1);
|
|
|
|
EXP(TS_SET_ARRAY, 3);
|
|
EXP(TS_FREE_ARRAY, 1);
|
|
EXP(TS_RESIZE_ARRAY, 2);
|
|
EXP(TS_FIX_ARRAY, 1);
|
|
|
|
EXP(TS_SET_SFALL_ARG, 2);
|
|
|
|
EXP(TS_FORCE_AIMED_SHOTS, 1);
|
|
EXP(TS_DISABLE_AIMED_SHOTS, 1);
|
|
|
|
EXP(TS_MARK_MOVIE_PLAYED, 1);
|
|
|
|
EXP(TS_SET_CRITTER_SKILL_POINTS, 3);
|
|
EXP(TS_SET_AVAILABLE_SKILL_POINTS, 1);
|
|
EXP(TS_MOD_SKILL_POINTS_PER_LEVEL, 1);
|
|
EXP(TS_SET_PERK_FREQ, 1);
|
|
|
|
EXP(TS_BLOCK_COMBAT, 1);
|
|
|
|
EXP(TS_SET_INVEN_AP_COST, 1);
|
|
|
|
#if (FALLOUT_VERSION != 2)
|
|
EXP(ANIMATE_JUMP, 0); // 455
|
|
EXP(TURN_OFF_OBJS_IN_AREA, 4); // 473
|
|
EXP(TURN_ON_OBJS_IN_AREA, 4); // 474
|
|
EXP(BARTER_OFFER, 3); // 477
|
|
EXP(BARTER_ASKING, 3); // 478
|
|
EXP(TOWN_MAP, 0); // 513
|
|
#endif
|
|
|
|
default: {
|
|
const SfallOpcode* opcode = getSfallOpcode(n->nodes[i].token);
|
|
i++;
|
|
if (opcode && opcode->isStatement) {
|
|
if (opcode->procArgs != 0) {
|
|
i = writeNumExpressionProc(n, i, opcode->numArgs, f);
|
|
} else {
|
|
i = writeNumExpression(n, i, opcode->numArgs, f);
|
|
}
|
|
writeOp(opcode->opcode, f);
|
|
if (opcode->isExpression) {
|
|
writeOp(O_POP, f);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
|
|
int writeExtraExpression(NodeList *n, int i, FILE *f) {
|
|
f = f;
|
|
|
|
switch(n->nodes[i].token) {
|
|
EXP(HAS_SKILL, 2); // 418
|
|
EXP(USING_SKILL, 2); // 419
|
|
EXP(ROLL_VS_SKILL, 3); // 420
|
|
EXP(SKILL_CONTEST, 3); // 421
|
|
EXP(DO_CHECK, 3); // 422
|
|
EXP(IS_SUCCESS, 1); // 423
|
|
EXP(IS_CRITICAL, 1); // 424
|
|
EXP(HOW_MUCH, 1); // 425
|
|
EXP(REACTION_INFLUENCE, 3); // 427
|
|
EXP(RANDOM, 2); // 428
|
|
EXP(ROLL_DICE, 2); // 429
|
|
EXP(MOVE_TO, 3); // 430
|
|
EXP(CREATE_OBJECT_SID, 4); // 431
|
|
EXP(OBJ_IS_CARRYING_OBJ_PID, 2); // 434
|
|
EXP(TILE_CONTAINS_OBJ_PID, 3); // 435
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(TILE_IN_TILE_RECT, 5); // 455
|
|
#endif
|
|
|
|
EXP(SELF_OBJ, 0); // 436
|
|
EXP(SOURCE_OBJ, 0); // 437
|
|
EXP(TARGET_OBJ, 0); // 438
|
|
EXP(DUDE_OBJ, 0); // 439
|
|
EXP(OBJ_BEING_USED_WITH, 0); // 440
|
|
EXP(LOCAL_VAR, 1); // 441
|
|
EXP(MAP_VAR, 1); // 443
|
|
EXP(GLOBAL_VAR, 1); // 445
|
|
EXP(SCRIPT_ACTION, 0); // 447
|
|
EXP(OBJ_TYPE, 1); // 448
|
|
EXP(OBJ_ITEM_SUBTYPE, 1); // 449
|
|
EXP(GET_CRITTER_STAT, 2); // 450
|
|
EXP(SET_CRITTER_STAT, 3); // 451
|
|
EXP(TILE_DISTANCE, 2); // 458
|
|
EXP(TILE_DISTANCE_OBJS, 2); // 459
|
|
EXP(TILE_NUM, 1); // 460
|
|
EXP(TILE_NUM_IN_DIRECTION, 3); // 461
|
|
EXP(OBJ_CAN_SEE_OBJ, 2); // 468
|
|
EXP(ANIM_BUSY, 1); // 479
|
|
EXP(CRITTER_HEAL, 2); // 480
|
|
EXP(GAME_TIME, 0); // 482
|
|
EXP(GAME_TIME_IN_SECONDS, 0); // 483
|
|
EXP(ELEVATION, 1); // 484
|
|
EXP(GAME_TICKS, 1); // 490
|
|
EXP(HAS_TRAIT, 3); // 491
|
|
EXP(OBJ_CAN_HEAR_OBJ, 2); // 493
|
|
EXP(GAME_TIME_HOUR, 0); // 494
|
|
EXP(FIXED_PARAM, 0); // 495
|
|
EXP(TILE_IS_VISIBLE, 1); // 496
|
|
EXP(ACTION_BEING_USED, 0); // 498
|
|
EXP(CRITTER_STATE, 1); // 499
|
|
EXP(CRITTER_ATTEMPT_PLACEMENT, 3); // 503
|
|
EXP(OBJ_PID, 1); // 504
|
|
EXP(CUR_MAP_INDEX, 0); // 505
|
|
EXP(CRITTER_ADD_TRAIT, 4); // 506
|
|
EXP(CRITTER_RM_TRAIT, 4); // 507
|
|
EXP(PROTO_DATA, 2); // 508
|
|
EXP(MESSAGE_STR, 2); // 509
|
|
EXP(CRITTER_INVEN_OBJ, 2); // 510
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(INVEN_CMDS, 3); // 513
|
|
#endif
|
|
|
|
EXP(METARULE, 2); // 515
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
EXP(METARULE3, 4); // 473
|
|
#endif
|
|
|
|
EXP(OBJ_CARRYING_PID_OBJ, 2); // 517
|
|
// EXP(ADD_MULT_OBJS_TO_INVEN, 3); // 526
|
|
EXP(RM_MULT_OBJS_FROM_INVEN, 3); // 527
|
|
EXP(GET_MONTH, 0); // 528
|
|
EXP(GET_DAY, 0); // 529
|
|
EXP(DAYS_SINCE_VISITED, 0); // 531
|
|
EXP(GET_POISON, 1); // 539
|
|
EXP(COMBAT_IS_INITIALIZED, 0); // 544
|
|
EXP(DIFFICULTY_LEVEL, 0); // 546
|
|
EXP(RUNNING_BURNING_GUY, 0); // 547
|
|
EXP(OBJ_IS_LOCKED, 1); // 549
|
|
EXP(OBJ_IS_OPEN, 1); // 552
|
|
EXP(GAME_UI_IS_DISABLED, 0); // 557
|
|
EXP(ITEM_CAPS_TOTAL, 1); // 560
|
|
EXP(ITEM_CAPS_ADJUST, 2); // 561
|
|
EXP(ANIM_ACTION_FRAME, 2); // 562
|
|
EXP(DESTROY_MULT_OBJS, 2); // 572
|
|
EXP(ENDGAME_SLIDESHOW, 0); // 574
|
|
EXP(ENDGAME_MOVIE, 0); // 576
|
|
EXP(OBJ_ART_FID, 1); // 577
|
|
EXP(ART_ANIM, 1); // 578
|
|
EXP(PARTY_MEMBER_OBJ, 1); // 579
|
|
EXP(ROTATION_TO_TILE, 2); // 580
|
|
EXP(SFX_BUILD_CHAR_NAME, 3); // 565
|
|
EXP(SFX_BUILD_AMBIENT_NAME, 1); // 566
|
|
EXP(SFX_BUILD_INTERFACE_NAME, 1); // 567
|
|
EXP(SFX_BUILD_ITEM_NAME, 1); // 568
|
|
EXP(SFX_BUILD_WEAPON_NAME, 4); // 569
|
|
EXP(SFX_BUILD_SCENERY_NAME, 3); // 570
|
|
EXP(SFX_BUILD_OPEN_NAME, 2); // 413
|
|
EXP(GET_PC_STAT, 1); // 414
|
|
EXP(COMBAT_DIFFICULTY, 0); // 583
|
|
EXP(OBJ_ON_SCREEN, 1); // 584
|
|
EXP(CRITTER_IS_FLEEING, 1); // 585
|
|
EXP(TILE_CONTAINS_PID_OBJ, 3); // 415
|
|
EXP(OBJ_NAME, 1); // 412
|
|
|
|
EXP(TS_READ_BYTE, 1);
|
|
EXP(TS_READ_SHORT, 1);
|
|
EXP(TS_READ_INT, 1);
|
|
EXP(TS_READ_STRING, 1);
|
|
EXP(TS_GET_PC_BASE_STAT, 1);
|
|
EXP(TS_GET_PC_EXTRA_STAT, 1);
|
|
EXP(TS_GET_CRITTER_BASE_STAT, 2);
|
|
EXP(TS_GET_CRITTER_EXTRA_STAT, 2);
|
|
EXP(TS_GET_YEAR, 0);
|
|
EXP(TS_GAME_LOADED, 0);
|
|
EXP(TS_GRAPHICS_FUNCS_AVAILABLE, 0);
|
|
EXP(TS_LOAD_SHADER, 1);
|
|
EXP(TS_INPUT_FUNCS_AVAILABLE, 0);
|
|
EXP(TS_KEY_PRESSED, 1);
|
|
EXP(TS_IN_WORLD_MAP, 0);
|
|
EXP(TS_GET_WORLD_MAP_X_POS, 0);
|
|
EXP(TS_GET_WORLD_MAP_Y_POS, 0);
|
|
EXP(TS_GET_KILL_COUNTER, 1);
|
|
EXP(TS_GET_PERK_OWED, 0);
|
|
EXP(TS_GET_PERK_AVAILABLE, 1);
|
|
EXP(TS_GET_CRITTER_AP, 1);
|
|
EXP(TS_GET_ACTIVE_HAND, 0);
|
|
EXP(TS_AVAILABLE_GLOBAL_SCRIPT_TYPES, 0);
|
|
EXP(TS_GET_SFALL_GLOBAL_INT, 1);
|
|
EXP(TS_GET_SFALL_GLOBAL_FLOAT, 1);
|
|
EXP(TS_EAX_AVAILABLE, 0);
|
|
EXP(TS_GET_VIEWPORT_X, 0);
|
|
EXP(TS_GET_VIEWPORT_Y, 0);
|
|
EXP(TS_GET_INI_SETTING, 1);
|
|
EXP(TS_GET_SHADER_VERSION, 0);
|
|
EXP(TS_GET_GAME_MODE, 0);
|
|
EXP(TS_GET_SHADER_TEXTURE, 2);
|
|
EXP(TS_GET_UPTIME, 0);
|
|
|
|
EXP(TS_HAS_FAKE_PERK, 1);
|
|
EXP(TS_HAS_FAKE_TRAIT, 1);
|
|
|
|
EXP(TS_CALL_OFFSET_R0, 1);
|
|
EXP(TS_CALL_OFFSET_R1, 2);
|
|
EXP(TS_CALL_OFFSET_R2, 3);
|
|
EXP(TS_CALL_OFFSET_R3, 4);
|
|
EXP(TS_CALL_OFFSET_R4, 5);
|
|
|
|
EXP(TS_IS_IFACE_TAG_ACTIVE, 1);
|
|
|
|
EXP(TS_GET_BODYPART_HIT_MODIFIER, 1);
|
|
|
|
EXP(TS_GET_CRITICAL_TABLE, 4);
|
|
EXP(TS_GET_SFALL_ARG, 0);
|
|
|
|
EXP(TS_GET_UNSPENT_AP_BONUS, 0);
|
|
EXP(TS_GET_UNSPENT_AP_EBONUS, 0);
|
|
|
|
EXP(TS_INIT_HOOK, 0);
|
|
|
|
EXP(TS_GET_INI_STRING, 1);
|
|
|
|
EXP(TS_SQRT, 1);
|
|
EXP(TS_ABS, 1);
|
|
EXP(TS_SIN, 1);
|
|
EXP(TS_COS, 1);
|
|
EXP(TS_TAN, 1);
|
|
EXP(TS_ATAN, 2);
|
|
|
|
EXP(TS_GET_SCRIPT, 1);
|
|
|
|
EXP(TS_NB_CREATE_CHAR, 0);
|
|
|
|
EXP(TS_FS_CREATE, 2);
|
|
EXP(TS_FS_COPY, 2);
|
|
EXP(TS_FS_FIND, 1);
|
|
EXP(TS_FS_SIZE, 1);
|
|
EXP(TS_FS_POS, 1);
|
|
EXP(TS_GET_PROTO_DATA, 2);
|
|
|
|
EXP(TS_FS_READ_BYTE, 1);
|
|
EXP(TS_FS_READ_SHORT, 1);
|
|
EXP(TS_FS_READ_INT, 1);
|
|
EXP(TS_FS_READ_FLOAT, 1);
|
|
|
|
EXP(TS_LIST_BEGIN, 1);
|
|
EXP(TS_LIST_NEXT, 1);
|
|
|
|
EXP(TS_SFALL_VER_MAJOR, 0);
|
|
EXP(TS_SFALL_VER_MINOR, 0);
|
|
EXP(TS_SFALL_VER_BUILD, 0);
|
|
|
|
EXP(TS_GET_WEAPON_AMMO_PID, 1);
|
|
EXP(TS_GET_WEAPON_AMMO_COUNT, 1);
|
|
|
|
EXP(TS_GET_MOUSE_X, 0);
|
|
EXP(TS_GET_MOUSE_Y, 0);
|
|
EXP(TS_GET_MOUSE_BUTTONS, 0);
|
|
EXP(TS_GET_WINDOW_UNDER_MOUSE, 0);
|
|
EXP(TS_GET_SCREEN_WIDTH, 0);
|
|
EXP(TS_GET_SCREEN_HEIGHT, 0);
|
|
EXP(TS_GET_LIGHT_LEVEL, 0);
|
|
|
|
EXP(TS_GET_ATTACK_TYPE, 0);
|
|
|
|
EXP(TS_PLAY_SFALL_SOUND, 2);
|
|
|
|
EXP(TS_CREATE_ARRAY, 2);
|
|
EXP(TS_GET_ARRAY, 2);
|
|
EXP(TS_LEN_ARRAY, 1);
|
|
EXP(TS_TEMP_ARRAY, 2);
|
|
|
|
EXP(TS_STRING_SPLIT, 2);
|
|
|
|
EXP(TS_LIST_AS_ARRAY, 1);
|
|
|
|
EXP(TS_ATOI, 1);
|
|
EXP(TS_ATOF, 1);
|
|
|
|
EXP(TS_SCAN_ARRAY, 2);
|
|
|
|
EXP(TS_TILE_PID, 1);
|
|
|
|
EXP(TS_MODIFIED_INI, 0);
|
|
|
|
EXP(TS_GET_SFALL_ARGS, 0);
|
|
|
|
EXP(TS_GET_NPC_LEVEL, 1);
|
|
|
|
EXP(TS_GET_CRITTER_SKILL_POINTS, 2);
|
|
EXP(TS_GET_AVAILABLE_SKILL_POINTS, 0);
|
|
|
|
EXP(TS_GET_LAST_ATTACKER, 1);
|
|
EXP(TS_GET_LAST_TARGET, 1);
|
|
|
|
EXP(TS_TILE_UNDER_CURSOR, 0);
|
|
EXP(TS_GET_BARTER_MOD, 0);
|
|
|
|
EXP(TS_SUBSTR, 3);
|
|
EXP(TS_STRLEN, 1);
|
|
EXP(TS_SPRINTF, 2);
|
|
EXP(TS_ORD, 1);
|
|
// EXP(TS_, 2); RESERVED
|
|
EXP(TS_TYPEOF, 1);
|
|
|
|
//EXP(TS_CREATE_BUTTON, 6);
|
|
//EXP(TS_BUTTON_PRESSED, 0);
|
|
|
|
#if (FALLOUT_VERSION != 2)
|
|
EXP(REACTION, 3); // 426
|
|
#endif
|
|
|
|
default: {
|
|
const SfallOpcode* opcode = getSfallOpcode(n->nodes[i].token);
|
|
i++;
|
|
if (opcode && opcode->isExpression) {
|
|
if (opcode->procArgs != 0) {
|
|
i = writeNumExpressionProc(n, i, opcode->numArgs, f);
|
|
} else {
|
|
i = writeNumExpression(n, i, opcode->numArgs, f);
|
|
}
|
|
writeOp(opcode->opcode, f);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
return i;
|
|
}
|
|
|
|
void initLexExtras(void)
|
|
{
|
|
lexAddToken(T_GIVE_EXP_POINTS, "give_exp_points");
|
|
lexAddToken(T_SCR_RETURN, "scr_return");
|
|
lexAddToken(T_PLAY_SFX, "play_sfx");
|
|
lexAddToken(T_OBJ_NAME, "obj_name");
|
|
lexAddToken(T_SFX_BUILD_OPEN_NAME, "sfx_build_open_name");
|
|
lexAddToken(T_GET_PC_STAT, "get_pc_stat");
|
|
lexAddToken(T_TILE_CONTAINS_PID_OBJ, "tile_contains_pid_obj");
|
|
lexAddToken(T_SET_MAP_START, "set_map_start");
|
|
lexAddToken(T_OVERRIDE_MAP_START, "override_map_start");
|
|
lexAddToken(T_HAS_SKILL, "has_skill");
|
|
lexAddToken(T_USING_SKILL, "using_skill");
|
|
lexAddToken(T_ROLL_VS_SKILL, "roll_vs_skill");
|
|
lexAddToken(T_SKILL_CONTEST, "skill_contest");
|
|
lexAddToken(T_DO_CHECK, "do_check");
|
|
lexAddToken(T_IS_SUCCESS, "is_success");
|
|
lexAddToken(T_IS_CRITICAL, "is_critical");
|
|
lexAddToken(T_HOW_MUCH, "how_much");
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
lexAddToken(T_MARK_AREA_KNOWN, "mark_area_known");
|
|
#else
|
|
lexAddToken(T_REACTION, "reaction");
|
|
#endif
|
|
|
|
lexAddToken(T_REACTION_INFLUENCE, "reaction_influence");
|
|
lexAddToken(T_RANDOM, "random");
|
|
lexAddToken(T_ROLL_DICE, "roll_dice");
|
|
lexAddToken(T_MOVE_TO, "move_to");
|
|
lexAddToken(T_CREATE_OBJECT_SID, "create_object_sid");
|
|
lexAddToken(T_DISPLAY_MSG, "display_msg");
|
|
lexAddToken(T_SCRIPT_OVERRIDES, "script_overrides");
|
|
lexAddToken(T_OBJ_IS_CARRYING_OBJ_PID, "obj_is_carrying_obj_pid");
|
|
lexAddToken(T_TILE_CONTAINS_OBJ_PID, "tile_contains_obj_pid");
|
|
lexAddToken(T_SELF_OBJ, "self_obj");
|
|
lexAddToken(T_SOURCE_OBJ, "source_obj");
|
|
lexAddToken(T_TARGET_OBJ, "target_obj");
|
|
lexAddToken(T_DUDE_OBJ, "dude_obj");
|
|
lexAddToken(T_OBJ_BEING_USED_WITH, "obj_being_used_with");
|
|
lexAddToken(T_LOCAL_VAR, "local_var");
|
|
lexAddToken(T_SET_LOCAL_VAR, "set_local_var");
|
|
lexAddToken(T_MAP_VAR, "map_var");
|
|
lexAddToken(T_SET_MAP_VAR, "set_map_var");
|
|
lexAddToken(T_GLOBAL_VAR, "global_var");
|
|
lexAddToken(T_SET_GLOBAL_VAR, "set_global_var");
|
|
lexAddToken(T_SCRIPT_ACTION, "script_action");
|
|
lexAddToken(T_OBJ_TYPE, "obj_type");
|
|
lexAddToken(T_OBJ_ITEM_SUBTYPE, "obj_item_subtype");
|
|
lexAddToken(T_GET_CRITTER_STAT, "get_critter_stat");
|
|
lexAddToken(T_SET_CRITTER_STAT, "set_critter_stat");
|
|
lexAddToken(T_ANIMATE_STAND_OBJ, "animate_stand_obj");
|
|
lexAddToken(T_ANIMATE_STAND_REVERSE_OBJ, "animate_stand_reverse_obj");
|
|
lexAddToken(T_ANIMATE_MOVE_OBJ_TO_TILE, "animate_move_obj_to_tile");
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
lexAddToken(T_TILE_IN_TILE_RECT, "tile_in_tile_rect");
|
|
#else
|
|
lexAddToken(T_ANIMATE_JUMP, "animate_jump");
|
|
#endif
|
|
|
|
lexAddToken(T_ATTACK_COMPLEX, "attack_complex");
|
|
lexAddToken(T_MAKE_DAYTIME, "make_daytime");
|
|
lexAddToken(T_TILE_DISTANCE, "tile_distance");
|
|
lexAddToken(T_TILE_DISTANCE_OBJS, "tile_distance_objs");
|
|
lexAddToken(T_TILE_NUM, "tile_num");
|
|
lexAddToken(T_TILE_NUM_IN_DIRECTION, "tile_num_in_direction");
|
|
lexAddToken(T_PICKUP_OBJ, "pickup_obj");
|
|
lexAddToken(T_DROP_OBJ, "drop_obj");
|
|
lexAddToken(T_ADD_OBJ_TO_INVEN, "add_obj_to_inven");
|
|
lexAddToken(T_RM_OBJ_FROM_INVEN, "rm_obj_from_inven");
|
|
lexAddToken(T_WIELD_OBJ_CRITTER, "wield_obj_critter");
|
|
lexAddToken(T_USE_OBJ, "use_obj");
|
|
lexAddToken(T_OBJ_CAN_SEE_OBJ, "obj_can_see_obj");
|
|
lexAddToken(T_ATTACK, "attack");
|
|
lexAddToken(T_START_GDIALOG, "start_gdialog");
|
|
lexAddToken(T_END_DIALOGUE, "end_dialogue");
|
|
lexAddToken(T_DIALOGUE_REACTION, "dialogue_reaction");
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
lexAddToken(T_METARULE3, "metarule3");
|
|
lexAddToken(T_SET_MAP_MUSIC, "set_map_music");
|
|
#else
|
|
lexAddToken(T_TURN_OFF_OBJS_IN_AREA, "turn_off_objs_in_area");
|
|
lexAddToken(T_TURN_ON_OBJS_IN_AREA, "turn_on_objs_in_area");
|
|
#endif
|
|
|
|
lexAddToken(T_SET_OBJ_VISIBILITY, "set_obj_visibility");
|
|
lexAddToken(T_LOAD_MAP, "load_map");
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
lexAddToken(T_WM_AREA_SET_POS, "wm_area_set_pos");
|
|
lexAddToken(T_SET_EXIT_GRIDS, "set_exit_grids");
|
|
#else
|
|
lexAddToken(T_BARTER_OFFER, "barter_offer");
|
|
lexAddToken(T_BARTER_ASKING, "barter_asking");
|
|
#endif
|
|
|
|
lexAddToken(T_ANIM_BUSY, "anim_busy");
|
|
lexAddToken(T_CRITTER_HEAL, "critter_heal");
|
|
lexAddToken(T_SET_LIGHT_LEVEL, "set_light_level");
|
|
lexAddToken(T_GAME_TIME, "game_time");
|
|
lexAddToken(T_GAME_TIME_IN_SECONDS, "game_time_in_seconds");
|
|
lexAddToken(T_ELEVATION, "elevation");
|
|
lexAddToken(T_KILL_CRITTER, "kill_critter");
|
|
lexAddToken(T_KILL_CRITTER_TYPE, "kill_critter_type");
|
|
lexAddToken(T_CRITTER_DMG, "critter_dmg");
|
|
lexAddToken(T_ADD_TIMER_EVENT, "add_timer_event");
|
|
lexAddToken(T_RM_TIMER_EVENT, "rm_timer_event");
|
|
lexAddToken(T_GAME_TICKS, "game_ticks");
|
|
lexAddToken(T_HAS_TRAIT, "has_trait");
|
|
lexAddToken(T_DESTROY_OBJECT, "destroy_object");
|
|
lexAddToken(T_OBJ_CAN_HEAR_OBJ, "obj_can_hear_obj");
|
|
lexAddToken(T_GAME_TIME_HOUR, "game_time_hour");
|
|
lexAddToken(T_FIXED_PARAM, "fixed_param");
|
|
lexAddToken(T_TILE_IS_VISIBLE, "tile_is_visible");
|
|
lexAddToken(T_DIALOGUE_SYSTEM_ENTER, "dialogue_system_enter");
|
|
lexAddToken(T_ACTION_BEING_USED, "action_being_used");
|
|
lexAddToken(T_CRITTER_STATE, "critter_state");
|
|
lexAddToken(T_GAME_TIME_ADVANCE, "game_time_advance");
|
|
lexAddToken(T_RADIATION_INC, "radiation_inc");
|
|
lexAddToken(T_RADIATION_DEC, "radiation_dec");
|
|
lexAddToken(T_CRITTER_ATTEMPT_PLACEMENT, "critter_attempt_placement");
|
|
lexAddToken(T_OBJ_PID, "obj_pid");
|
|
lexAddToken(T_CUR_MAP_INDEX, "cur_map_index");
|
|
lexAddToken(T_CRITTER_ADD_TRAIT, "critter_add_trait");
|
|
lexAddToken(T_CRITTER_RM_TRAIT, "critter_rm_trait");
|
|
lexAddToken(T_PROTO_DATA, "proto_data");
|
|
lexAddToken(T_MESSAGE_STR, "message_str");
|
|
lexAddToken(T_CRITTER_INVEN_OBJ, "critter_inven_obj");
|
|
lexAddToken(T_OBJ_SET_LIGHT_LEVEL, "obj_set_light_level");
|
|
lexAddToken(T_WORLD_MAP, "world_map");
|
|
|
|
#if (FALLOUT_VERSION == 2)
|
|
lexAddToken(T_INVEN_CMDS, "inven_cmds");
|
|
#else
|
|
lexAddToken(T_TOWN_MAP, "town_map");
|
|
#endif
|
|
|
|
lexAddToken(T_FLOAT_MSG, "float_msg");
|
|
lexAddToken(T_METARULE, "metarule");
|
|
lexAddToken(T_ANIM, "anim");
|
|
lexAddToken(T_OBJ_CARRYING_PID_OBJ, "obj_carrying_pid_obj");
|
|
lexAddToken(T_REG_ANIM_FUNC, "REG_ANIM_FUNC");
|
|
lexAddToken(T_REG_ANIM_ANIMATE, "reg_anim_animate");
|
|
lexAddToken(T_REG_ANIM_ANIMATE_REVERSE, "reg_anim_animate_reverse");
|
|
lexAddToken(T_REG_ANIM_OBJ_MOVE_TO_OBJ, "reg_anim_obj_move_to_obj");
|
|
lexAddToken(T_REG_ANIM_OBJ_RUN_TO_OBJ, "reg_anim_obj_run_to_obj");
|
|
lexAddToken(T_REG_ANIM_OBJ_MOVE_TO_TILE, "reg_anim_obj_move_to_tile");
|
|
lexAddToken(T_REG_ANIM_OBJ_RUN_TO_TILE, "reg_anim_obj_run_to_tile");
|
|
lexAddToken(T_PLAY_GMOVIE, "play_gmovie");
|
|
lexAddToken(T_ADD_MULT_OBJS_TO_INVEN, "add_mult_objs_to_inven");
|
|
lexAddToken(T_RM_MULT_OBJS_FROM_INVEN, "rm_mult_objs_from_inven");
|
|
lexAddToken(T_GET_MONTH, "get_month");
|
|
lexAddToken(T_GET_DAY, "get_day");
|
|
lexAddToken(T_EXPLOSION, "explosion");
|
|
lexAddToken(T_DAYS_SINCE_VISITED, "days_since_visited");
|
|
lexAddToken(T_GSAY_START, "gsay_start");
|
|
lexAddToken(T_GSAY_END, "gsay_end");
|
|
lexAddToken(T_GSAY_REPLY, "gsay_reply");
|
|
lexAddToken(T_GSAY_OPTION, "gsay_option");
|
|
lexAddToken(T_GSAY_MESSAGE, "gsay_message");
|
|
lexAddToken(T_GIQ_OPTION, "giq_option");
|
|
lexAddToken(T_POISON, "poison");
|
|
lexAddToken(T_GET_POISON, "get_poison");
|
|
lexAddToken(T_PARTY_ADD, "party_add");
|
|
lexAddToken(T_PARTY_REMOVE, "party_remove");
|
|
lexAddToken(T_REG_ANIM_ANIMATE_FOREVER, "reg_anim_animate_forever");
|
|
lexAddToken(T_CRITTER_INJURE, "critter_injure");
|
|
lexAddToken(T_COMBAT_IS_INITIALIZED, "combat_is_initialized");
|
|
lexAddToken(T_GDIALOG_MOD_BARTER, "gdialog_mod_barter");
|
|
lexAddToken(T_DIFFICULTY_LEVEL, "difficulty_level");
|
|
lexAddToken(T_RUNNING_BURNING_GUY, "running_burning_guy");
|
|
lexAddToken(T_INVEN_UNWIELD, "inven_unwield");
|
|
lexAddToken(T_OBJ_IS_LOCKED, "obj_is_locked");
|
|
lexAddToken(T_OBJ_LOCK, "obj_lock");
|
|
lexAddToken(T_OBJ_UNLOCK, "obj_unlock");
|
|
lexAddToken(T_OBJ_IS_OPEN, "obj_is_open");
|
|
lexAddToken(T_OBJ_OPEN, "obj_open");
|
|
lexAddToken(T_OBJ_CLOSE, "obj_close");
|
|
lexAddToken(T_GAME_UI_DISABLE, "game_ui_disable");
|
|
lexAddToken(T_GAME_UI_ENABLE, "game_ui_enable");
|
|
lexAddToken(T_GAME_UI_IS_DISABLED, "game_ui_is_disabled");
|
|
lexAddToken(T_GFADE_OUT, "gfade_out");
|
|
lexAddToken(T_GFADE_IN, "gfade_in");
|
|
lexAddToken(T_ITEM_CAPS_TOTAL, "item_caps_total");
|
|
lexAddToken(T_ITEM_CAPS_ADJUST, "item_caps_adjust");
|
|
lexAddToken(T_ANIM_ACTION_FRAME, "anim_action_frame");
|
|
lexAddToken(T_REG_ANIM_PLAY_SFX, "reg_anim_play_sfx");
|
|
lexAddToken(T_CRITTER_MOD_SKILL, "critter_mod_skill");
|
|
lexAddToken(T_SFX_BUILD_CHAR_NAME, "sfx_build_char_name");
|
|
lexAddToken(T_SFX_BUILD_AMBIENT_NAME, "sfx_build_ambient_name");
|
|
lexAddToken(T_SFX_BUILD_INTERFACE_NAME, "sfx_build_interface_name");
|
|
lexAddToken(T_SFX_BUILD_ITEM_NAME, "sfx_build_item_name");
|
|
lexAddToken(T_SFX_BUILD_WEAPON_NAME, "sfx_build_weapon_name");
|
|
lexAddToken(T_SFX_BUILD_SCENERY_NAME, "sfx_build_scenery_name");
|
|
lexAddToken(T_ATTACK_SETUP, "attack_setup");
|
|
lexAddToken(T_DESTROY_MULT_OBJS, "destroy_mult_objs");
|
|
lexAddToken(T_USE_OBJ_ON_OBJ, "use_obj_on_obj");
|
|
lexAddToken(T_ENDGAME_SLIDESHOW, "endgame_slideshow");
|
|
lexAddToken(T_MOVE_OBJ_INVEN_TO_OBJ, "move_obj_inven_to_obj");
|
|
lexAddToken(T_ENDGAME_MOVIE, "endgame_movie");
|
|
lexAddToken(T_OBJ_ART_FID, "obj_art_fid");
|
|
lexAddToken(T_ART_ANIM, "art_anim");
|
|
lexAddToken(T_PARTY_MEMBER_OBJ, "party_member_obj");
|
|
lexAddToken(T_ROTATION_TO_TILE, "rotation_to_tile");
|
|
lexAddToken(T_JAM_LOCK, "jam_lock");
|
|
lexAddToken(T_GDIALOG_SET_BARTER_MOD, "gdialog_set_barter_mod");
|
|
lexAddToken(T_COMBAT_DIFFICULTY, "combat_difficulty");
|
|
lexAddToken(T_OBJ_ON_SCREEN, "obj_on_screen");
|
|
lexAddToken(T_CRITTER_IS_FLEEING, "critter_is_fleeing");
|
|
lexAddToken(T_CRITTER_SET_FLEE_STATE, "critter_set_flee_state");
|
|
lexAddToken(T_TERMINATE_COMBAT, "terminate_combat");
|
|
lexAddToken(T_DEBUG_MSG, "debug_msg");
|
|
lexAddToken(T_CRITTER_STOP_ATTACKING, "critter_stop_attacking");
|
|
|
|
if (backwardcompat == 0) {
|
|
lexAddToken(T_TS_READ_BYTE, "read_byte");
|
|
lexAddToken(T_TS_READ_SHORT, "read_short");
|
|
lexAddToken(T_TS_READ_INT, "read_int");
|
|
lexAddToken(T_TS_READ_STRING, "read_string");
|
|
lexAddToken(T_TS_SET_PC_BASE_STAT, "set_pc_base_stat");
|
|
lexAddToken(T_TS_SET_PC_EXTRA_STAT, "set_pc_extra_stat");
|
|
lexAddToken(T_TS_GET_PC_BASE_STAT, "get_pc_base_stat");
|
|
lexAddToken(T_TS_GET_PC_EXTRA_STAT, "get_pc_extra_stat");
|
|
lexAddToken(T_TS_SET_CRITTER_BASE_STAT, "set_critter_base_stat");
|
|
lexAddToken(T_TS_SET_CRITTER_EXTRA_STAT, "set_critter_extra_stat");
|
|
lexAddToken(T_TS_GET_CRITTER_BASE_STAT, "get_critter_base_stat");
|
|
lexAddToken(T_TS_GET_CRITTER_EXTRA_STAT, "get_critter_extra_stat");
|
|
lexAddToken(T_TS_TAP_KEY, "tap_key");
|
|
lexAddToken(T_TS_GET_YEAR, "get_year");
|
|
lexAddToken(T_TS_GAME_LOADED, "game_loaded");
|
|
lexAddToken(T_TS_GRAPHICS_FUNCS_AVAILABLE, "graphics_funcs_available");
|
|
lexAddToken(T_TS_LOAD_SHADER, "load_shader");
|
|
lexAddToken(T_TS_FREE_SHADER, "free_shader");
|
|
lexAddToken(T_TS_ACTIVATE_SHADER, "activate_shader");
|
|
lexAddToken(T_TS_DEACTIVATE_SHADER, "deactivate_shader");
|
|
lexAddToken(T_TS_SET_GLOBAL_SCRIPT_REPEAT, "set_global_script_repeat");
|
|
lexAddToken(T_TS_INPUT_FUNCS_AVAILABLE, "input_funcs_available");
|
|
lexAddToken(T_TS_KEY_PRESSED, "key_pressed");
|
|
lexAddToken(T_TS_SET_SHADER_INT, "set_shader_int");
|
|
lexAddToken(T_TS_SET_SHADER_FLOAT, "set_shader_float");
|
|
lexAddToken(T_TS_SET_SHADER_VECTOR, "set_shader_vector");
|
|
lexAddToken(T_TS_IN_WORLD_MAP, "in_world_map");
|
|
lexAddToken(T_TS_FORCE_ENCOUNTER, "force_encounter");
|
|
lexAddToken(T_TS_SET_WORLD_MAP_POS, "set_world_map_pos");
|
|
lexAddToken(T_TS_GET_WORLD_MAP_X_POS, "get_world_map_x_pos");
|
|
lexAddToken(T_TS_GET_WORLD_MAP_Y_POS, "get_world_map_y_pos");
|
|
lexAddToken(T_TS_SET_DM_MODEL, "set_dm_model");
|
|
lexAddToken(T_TS_SET_DF_MODEL, "set_df_model");
|
|
lexAddToken(T_TS_SET_MOVIE_PATH, "set_movie_path");
|
|
lexAddToken(T_TS_SET_PERK_IMAGE, "set_perk_image");
|
|
lexAddToken(T_TS_SET_PERK_RANKS, "set_perk_ranks");
|
|
lexAddToken(T_TS_SET_PERK_LEVEL, "set_perk_level");
|
|
lexAddToken(T_TS_SET_PERK_STAT, "set_perk_stat");
|
|
lexAddToken(T_TS_SET_PERK_STAT_MAG, "set_perk_stat_mag");
|
|
lexAddToken(T_TS_SET_PERK_SKILL1, "set_perk_skill1");
|
|
lexAddToken(T_TS_SET_PERK_SKILl1_MAG, "set_perk_skill1_mag");
|
|
lexAddToken(T_TS_SET_PERK_TYPE, "set_perk_type");
|
|
lexAddToken(T_TS_SET_PERK_SKILL2, "set_perk_skill2");
|
|
lexAddToken(T_TS_SET_PERK_SKILL2_MAG, "set_perk_skill2_mag");
|
|
lexAddToken(T_TS_SET_PERK_STR, "set_perk_str");
|
|
lexAddToken(T_TS_SET_PERK_PER, "set_perk_per");
|
|
lexAddToken(T_TS_SET_PERK_END, "set_perk_end");
|
|
lexAddToken(T_TS_SET_PERK_CHR, "set_perk_chr");
|
|
lexAddToken(T_TS_SET_PERK_INT, "set_perk_int");
|
|
lexAddToken(T_TS_SET_PERK_AGL, "set_perk_agl");
|
|
lexAddToken(T_TS_SET_PERK_LCK, "set_perk_lck");
|
|
lexAddToken(T_TS_SET_PERK_NAME, "set_perk_name");
|
|
lexAddToken(T_TS_SET_PERK_DESC, "set_perk_desc");
|
|
lexAddToken(T_TS_SET_PIPBOY_AVAILABLE, "set_pipboy_available");
|
|
lexAddToken(T_TS_GET_KILL_COUNTER, "get_kill_counter");
|
|
lexAddToken(T_TS_MOD_KILL_COUNTER, "mod_kill_counter");
|
|
lexAddToken(T_TS_GET_PERK_OWED, "get_perk_owed");
|
|
lexAddToken(T_TS_SET_PERK_OWED, "set_perk_owed");
|
|
lexAddToken(T_TS_GET_PERK_AVAILABLE, "get_perk_available");
|
|
lexAddToken(T_TS_GET_CRITTER_AP, "get_critter_current_ap");
|
|
lexAddToken(T_TS_SET_CRITTER_AP, "set_critter_current_ap");
|
|
lexAddToken(T_TS_GET_ACTIVE_HAND, "active_hand");
|
|
lexAddToken(T_TS_TOGGLE_ACTIVE_HAND, "toggle_active_hand");
|
|
lexAddToken(T_TS_SET_WEAPON_KNOCKBACK, "set_weapon_knockback");
|
|
lexAddToken(T_TS_SET_TARGET_KNOCKBACK, "set_target_knockback");
|
|
lexAddToken(T_TS_SET_ATTACKER_KNOCKBACK, "set_attacker_knockback");
|
|
lexAddToken(T_TS_REMOVE_WEAPON_KNOCKBACK, "remove_weapon_knockback");
|
|
lexAddToken(T_TS_REMOVE_TARGET_KNOCKBACK, "remove_target_knockback");
|
|
lexAddToken(T_TS_REMOVE_ATTACKER_KNOCKBACK, "remove_attacker_knockback");
|
|
lexAddToken(T_TS_SET_GLOBAL_SCRIPT_TYPE, "set_global_script_type");
|
|
lexAddToken(T_TS_AVAILABLE_GLOBAL_SCRIPT_TYPES, "available_global_script_types");
|
|
lexAddToken(T_TS_SET_SFALL_GLOBAL, "set_sfall_global");
|
|
lexAddToken(T_TS_GET_SFALL_GLOBAL_INT, "get_sfall_global_int");
|
|
lexAddToken(T_TS_GET_SFALL_GLOBAL_FLOAT, "get_sfall_global_float");
|
|
lexAddToken(T_TS_SET_PICKPOCKET_MAX, "set_pickpocket_max");
|
|
lexAddToken(T_TS_SET_HIT_CHANCE_MAX, "set_hit_chance_max");
|
|
lexAddToken(T_TS_SET_SKILL_MAX, "set_skill_max");
|
|
lexAddToken(T_TS_EAX_AVAILABLE, "eax_available");
|
|
lexAddToken(T_TS_SET_EAX_ENVIRONMENT, "set_eax_environment");
|
|
lexAddToken(T_TS_INC_NPC_LEVEL, "inc_npc_level");
|
|
lexAddToken(T_TS_GET_VIEWPORT_X, "get_viewport_x");
|
|
lexAddToken(T_TS_GET_VIEWPORT_Y, "get_viewport_y");
|
|
lexAddToken(T_TS_SET_VIEWPORT_X, "set_viewport_x");
|
|
lexAddToken(T_TS_SET_VIEWPORT_Y, "set_viewport_y");
|
|
lexAddToken(T_TS_SET_XP_MOD, "set_xp_mod");
|
|
lexAddToken(T_TS_SET_PERK_LEVEL_MOD, "set_perk_level_mod");
|
|
lexAddToken(T_TS_GET_INI_SETTING, "get_ini_setting");
|
|
lexAddToken(T_TS_GET_SHADER_VERSION, "get_shader_version");
|
|
lexAddToken(T_TS_SET_SHADER_MODE, "set_shader_mode");
|
|
lexAddToken(T_TS_GET_GAME_MODE, "get_game_mode");
|
|
lexAddToken(T_TS_FORCE_GRAPHICS_REFRESH, "force_graphics_refresh");
|
|
lexAddToken(T_TS_GET_SHADER_TEXTURE, "get_shader_texture");
|
|
lexAddToken(T_TS_SET_SHADER_TEXTURE, "set_shader_texture");
|
|
lexAddToken(T_TS_GET_UPTIME, "get_uptime");
|
|
lexAddToken(T_TS_SET_STAT_MAX, "set_stat_max");
|
|
lexAddToken(T_TS_SET_STAT_MIN, "set_stat_min");
|
|
lexAddToken(T_TS_SET_CAR_CURRENT_TOWN, "set_car_current_town");
|
|
lexAddToken(T_TS_SET_PC_STAT_MAX, "set_pc_stat_max");
|
|
lexAddToken(T_TS_SET_PC_STAT_MIN, "set_pc_stat_min");
|
|
lexAddToken(T_TS_SET_NPC_STAT_MAX, "set_npc_stat_max");
|
|
lexAddToken(T_TS_SET_NPC_STAT_MIN, "set_npc_stat_min");
|
|
lexAddToken(T_TS_SET_FAKE_PERK, "set_fake_perk");
|
|
lexAddToken(T_TS_SET_FAKE_TRAIT, "set_fake_trait");
|
|
lexAddToken(T_TS_SET_SELECTABLE_PERK, "set_selectable_perk");
|
|
lexAddToken(T_TS_SET_PERKBOX_TITLE, "set_perkbox_title");
|
|
lexAddToken(T_TS_HIDE_REAL_PERKS, "hide_real_perks");
|
|
lexAddToken(T_TS_SHOW_REAL_PERKS, "show_real_perks");
|
|
lexAddToken(T_TS_HAS_FAKE_PERK, "has_fake_perk");
|
|
lexAddToken(T_TS_HAS_FAKE_TRAIT, "has_fake_trait");
|
|
lexAddToken(T_TS_PERK_ADD_MODE, "perk_add_mode");
|
|
lexAddToken(T_TS_CLEAR_SELECTABLE_PERKS, "clear_selectable_perks");
|
|
lexAddToken(T_TS_SET_CRITTER_HIT_CHANCE_MOD, "set_critter_hit_chance_mod");
|
|
lexAddToken(T_TS_SET_BASE_HIT_CHANCE_MOD, "set_base_hit_chance_mod");
|
|
lexAddToken(T_TS_SET_CRITTER_SKILL_MOD, "set_critter_skill_mod");
|
|
lexAddToken(T_TS_SET_BASE_SKILL_MOD, "set_base_skill_mod");
|
|
lexAddToken(T_TS_SET_CRITTER_PICKPOCKET_MOD, "set_critter_pickpocket_mod");
|
|
lexAddToken(T_TS_SET_BASE_PICKPOCKET_MOD, "set_base_pickpocket_mod");
|
|
lexAddToken(T_TS_SET_PYROMANIAC_MOD, "set_pyromaniac_mod");
|
|
lexAddToken(T_TS_APPLY_HEAVEHO_FIX, "apply_heaveho_fix");
|
|
lexAddToken(T_TS_SET_SWIFTLEARNER_MOD, "set_swiftlearner_mod");
|
|
lexAddToken(T_TS_SET_HP_LEVEL_MOD, "set_hp_per_level_mod");
|
|
lexAddToken(T_TS_WRITE_BYTE, "write_byte");
|
|
lexAddToken(T_TS_WRITE_SHORT, "write_short");
|
|
lexAddToken(T_TS_WRITE_INT, "write_int");
|
|
lexAddToken(T_TS_CALL_OFFSET_V0, "call_offset_v0");
|
|
lexAddToken(T_TS_CALL_OFFSET_V1, "call_offset_v1");
|
|
lexAddToken(T_TS_CALL_OFFSET_V2, "call_offset_v2");
|
|
lexAddToken(T_TS_CALL_OFFSET_V3, "call_offset_v3");
|
|
lexAddToken(T_TS_CALL_OFFSET_V4, "call_offset_v4");
|
|
lexAddToken(T_TS_CALL_OFFSET_R0, "call_offset_r0");
|
|
lexAddToken(T_TS_CALL_OFFSET_R1, "call_offset_r1");
|
|
lexAddToken(T_TS_CALL_OFFSET_R2, "call_offset_r2");
|
|
lexAddToken(T_TS_CALL_OFFSET_R3, "call_offset_r3");
|
|
lexAddToken(T_TS_CALL_OFFSET_R4, "call_offset_r4");
|
|
lexAddToken(T_TS_SHOW_IFACE_TAG, "show_iface_tag");
|
|
lexAddToken(T_TS_HIDE_IFACE_TAG, "hide_iface_tag");
|
|
lexAddToken(T_TS_IS_IFACE_TAG_ACTIVE, "is_iface_tag_active");
|
|
lexAddToken(T_TS_GET_BODYPART_HIT_MODIFIER, "get_bodypart_hit_modifier");
|
|
lexAddToken(T_TS_SET_BODYPART_HIT_MODIFIER, "set_bodypart_hit_modifier");
|
|
lexAddToken(T_TS_SET_CRITICAL_TABLE, "set_critical_table");
|
|
lexAddToken(T_TS_GET_CRITICAL_TABLE, "get_critical_table");
|
|
lexAddToken(T_TS_RESET_CRITICAL_TABLE, "reset_critical_table");
|
|
lexAddToken(T_TS_GET_SFALL_ARG, "get_sfall_arg");
|
|
lexAddToken(T_TS_SET_SFALL_RETURN, "set_sfall_return");
|
|
lexAddToken(T_TS_SET_UNSPENT_AP_BONUS, "set_unspent_ap_bonus");
|
|
lexAddToken(T_TS_GET_UNSPENT_AP_BONUS, "get_unspent_ap_bonus");
|
|
lexAddToken(T_TS_SET_UNSPENT_AP_EBONUS, "set_unspent_ap_perk_bonus");
|
|
lexAddToken(T_TS_GET_UNSPENT_AP_EBONUS, "get_unspent_ap_perk_bonus");
|
|
lexAddToken(T_TS_INIT_HOOK, "init_hook");
|
|
lexAddToken(T_TS_GET_INI_STRING, "get_ini_string");
|
|
|
|
lexAddToken(T_TS_SQRT, "sqrt");
|
|
lexAddToken(T_TS_ABS, "abs");
|
|
lexAddToken(T_TS_SIN, "sin");
|
|
lexAddToken(T_TS_COS, "cos");
|
|
lexAddToken(T_TS_TAN, "tan");
|
|
lexAddToken(T_TS_ATAN, "arctan");
|
|
|
|
//lexAddToken(T_TS_CREATE_BUTTON, "create_button");
|
|
lexAddToken(T_TS_SET_PALETTE, "set_palette");
|
|
//lexAddToken(T_TS_BUTTON_PRESSED, "button_pressed");
|
|
lexAddToken(T_TS_REMOVE_SCRIPT, "remove_script");
|
|
lexAddToken(T_TS_SET_SCRIPT, "set_script");
|
|
lexAddToken(T_TS_GET_SCRIPT, "get_script");
|
|
lexAddToken(T_TS_NB_CREATE_CHAR, "nb_create_char");
|
|
|
|
lexAddToken(T_TS_FS_CREATE, "fs_create");
|
|
lexAddToken(T_TS_FS_COPY, "fs_copy");
|
|
lexAddToken(T_TS_FS_FIND, "fs_find");
|
|
lexAddToken(T_TS_FS_WRITE_BYTE, "fs_write_byte");
|
|
lexAddToken(T_TS_FS_WRITE_SHORT, "fs_write_short");
|
|
lexAddToken(T_TS_FS_WRITE_INT, "fs_write_int");
|
|
lexAddToken(T_TS_FS_WRITE_FLOAT, "fs_write_float");
|
|
lexAddToken(T_TS_FS_WRITE_STRING, "fs_write_string");
|
|
lexAddToken(T_TS_FS_DELETE, "fs_delete");
|
|
lexAddToken(T_TS_FS_SIZE, "fs_size");
|
|
lexAddToken(T_TS_FS_POS, "fs_pos");
|
|
lexAddToken(T_TS_FS_SEEK, "fs_seek");
|
|
lexAddToken(T_TS_FS_RESIZE, "fs_resize");
|
|
lexAddToken(T_TS_GET_PROTO_DATA, "get_proto_data");
|
|
lexAddToken(T_TS_SET_PROTO_DATA, "set_proto_data");
|
|
lexAddToken(T_TS_SET_SELF, "set_self");
|
|
lexAddToken(T_TS_REGISTER_HOOK, "register_hook");
|
|
lexAddToken(T_TS_FS_WRITE_BSTRING, "fs_write_bstring");
|
|
lexAddToken(T_TS_FS_READ_BYTE, "fs_read_byte");
|
|
lexAddToken(T_TS_FS_READ_SHORT, "fs_read_short");
|
|
lexAddToken(T_TS_FS_READ_INT, "fs_read_int");
|
|
lexAddToken(T_TS_FS_READ_FLOAT, "fs_read_float");
|
|
lexAddToken(T_TS_LIST_BEGIN, "list_begin");
|
|
lexAddToken(T_TS_LIST_NEXT, "list_next");
|
|
lexAddToken(T_TS_LIST_END, "list_end");
|
|
lexAddToken(T_TS_SFALL_VER_MAJOR, "sfall_ver_major");
|
|
lexAddToken(T_TS_SFALL_VER_MINOR, "sfall_ver_minor");
|
|
lexAddToken(T_TS_SFALL_VER_BUILD, "sfall_ver_build");
|
|
lexAddToken(T_TS_HERO_SELECT_WIN, "hero_select_win");
|
|
lexAddToken(T_TS_SET_HERO_RACE, "set_hero_race");
|
|
lexAddToken(T_TS_SET_HERO_STYLE, "set_hero_style");
|
|
lexAddToken(T_TS_SET_CRITTER_BURST_DISABLE, "set_critter_burst_disable");
|
|
lexAddToken(T_TS_GET_WEAPON_AMMO_PID, "get_weapon_ammo_pid");
|
|
lexAddToken(T_TS_SET_WEAPON_AMMO_PID, "set_weapon_ammo_pid");
|
|
lexAddToken(T_TS_GET_WEAPON_AMMO_COUNT, "get_weapon_ammo_count");
|
|
lexAddToken(T_TS_SET_WEAPON_AMMO_COUNT, "set_weapon_ammo_count");
|
|
lexAddToken(T_TS_WRITE_STRING, "write_String");
|
|
lexAddToken(T_TS_GET_MOUSE_X, "get_mouse_x");
|
|
lexAddToken(T_TS_GET_MOUSE_Y, "get_mouse_y");
|
|
lexAddToken(T_TS_GET_MOUSE_BUTTONS, "get_mouse_buttons");
|
|
lexAddToken(T_TS_GET_WINDOW_UNDER_MOUSE, "get_window_under_mouse");
|
|
lexAddToken(T_TS_GET_SCREEN_WIDTH, "get_screen_width");
|
|
lexAddToken(T_TS_GET_SCREEN_HEIGHT, "get_screen_height");
|
|
lexAddToken(T_TS_STOP_GAME, "stop_game");
|
|
lexAddToken(T_TS_RESUME_GAME, "resume_game");
|
|
lexAddToken(T_TS_CREATE_MESSAGE_WINDOW, "create_message_window");
|
|
lexAddToken(T_TS_REMOVE_TRAIT, "remove_trait");
|
|
lexAddToken(T_TS_GET_LIGHT_LEVEL, "get_light_level");
|
|
lexAddToken(T_TS_REFRESH_PC_ART, "refresh_pc_art");
|
|
lexAddToken(T_TS_GET_ATTACK_TYPE, "get_attack_type");
|
|
lexAddToken(T_TS_FORCE_ENCOUNTER_WITH_FLAGS, "force_encounter_with_flags");
|
|
lexAddToken(T_TS_SET_MAP_TIME_MULTI, "set_map_time_multi");
|
|
lexAddToken(T_TS_PLAY_SFALL_SOUND, "play_sfall_sound");
|
|
lexAddToken(T_TS_STOP_SFALL_SOUND, "stop_sfall_sound");
|
|
lexAddToken(T_TS_CREATE_ARRAY, "create_array");
|
|
lexAddToken(T_TS_SET_ARRAY, "set_array");
|
|
lexAddToken(T_TS_GET_ARRAY, "get_array");
|
|
lexAddToken(T_TS_FREE_ARRAY, "free_array");
|
|
lexAddToken(T_TS_LEN_ARRAY, "len_array");
|
|
lexAddToken(T_TS_RESIZE_ARRAY, "resize_array");
|
|
lexAddToken(T_TS_TEMP_ARRAY, "temp_array");
|
|
lexAddToken(T_TS_FIX_ARRAY, "fix_array");
|
|
lexAddToken(T_TS_STRING_SPLIT, "string_split");
|
|
lexAddToken(T_TS_LIST_AS_ARRAY, "list_as_array");
|
|
lexAddToken(T_TS_ATOI, "atoi");
|
|
lexAddToken(T_TS_ATOF, "atof");
|
|
lexAddToken(T_TS_SCAN_ARRAY, "scan_array");
|
|
lexAddToken(T_TS_TILE_PID, "get_tile_fid");
|
|
lexAddToken(T_TS_MODIFIED_INI, "modified_ini");
|
|
lexAddToken(T_TS_GET_SFALL_ARGS, "get_sfall_args");
|
|
lexAddToken(T_TS_SET_SFALL_ARG, "set_sfall_arg");
|
|
lexAddToken(T_TS_FORCE_AIMED_SHOTS, "force_aimed_shots");
|
|
lexAddToken(T_TS_DISABLE_AIMED_SHOTS, "disable_aimed_shots");
|
|
lexAddToken(T_TS_MARK_MOVIE_PLAYED, "mark_movie_played");
|
|
lexAddToken(T_TS_GET_NPC_LEVEL, "get_npc_level");
|
|
lexAddToken(T_TS_SET_CRITTER_SKILL_POINTS, "set_critter_skill_points");
|
|
lexAddToken(T_TS_GET_CRITTER_SKILL_POINTS, "get_critter_skill_points");
|
|
lexAddToken(T_TS_SET_AVAILABLE_SKILL_POINTS, "set_available_skill_points");
|
|
lexAddToken(T_TS_GET_AVAILABLE_SKILL_POINTS, "get_available_skill_points");
|
|
lexAddToken(T_TS_MOD_SKILL_POINTS_PER_LEVEL, "mod_skill_points_per_level");
|
|
lexAddToken(T_TS_SET_PERK_FREQ, "set_perk_freq");
|
|
lexAddToken(T_TS_GET_LAST_ATTACKER, "get_last_attacker");
|
|
lexAddToken(T_TS_GET_LAST_TARGET, "get_last_target");
|
|
lexAddToken(T_TS_BLOCK_COMBAT, "block_combat");
|
|
lexAddToken(T_TS_TILE_UNDER_CURSOR, "tile_under_cursor");
|
|
lexAddToken(T_TS_GET_BARTER_MOD, "gdialog_get_barter_mod");
|
|
lexAddToken(T_TS_SET_INVEN_AP_COST, "set_inven_ap_cost");
|
|
|
|
lexAddToken(T_TS_SUBSTR, "substr");
|
|
lexAddToken(T_TS_STRLEN, "strlen");
|
|
lexAddToken(T_TS_SPRINTF, "sprintf");
|
|
lexAddToken(T_TS_ORD, "charcode");
|
|
// reserved
|
|
lexAddToken(T_TS_TYPEOF, "typeof");
|
|
/*lexAddToken(T_TS_LOG, "log");
|
|
lexAddToken(T_TS_EXP, "exponent");*/
|
|
|
|
// ceil function temporarily disabled because vanilla "floor" function works incorrectly with negative values
|
|
// lexAddToken(T_TS_CEIL, "ceil");
|
|
|
|
//lexAddToken(T_TS_ROUND, "round");
|
|
|
|
lexAddToken(T_TS_SAVE_ARRAY, "save_array");
|
|
lexAddToken(T_TS_LOAD_ARRAY, "load_array");
|
|
lexAddToken(T_TS_GET_ARRAY_KEY, "array_key");
|
|
lexAddToken(T_TS_STACK_ARRAY, "arrayexpr");
|
|
// reserved
|
|
// reserved
|
|
lexAddToken(T_TS_REG_ANIM_DESTROY, "reg_anim_destroy");
|
|
lexAddToken(T_TS_REG_ANIM_ANIMATE_AND_HIDE, "reg_anim_animate_and_hide");
|
|
lexAddToken(T_TS_REG_ANIM_COMBAT_CHECK, "reg_anim_combat_check");
|
|
lexAddToken(T_TS_REG_ANIM_LIGHT, "reg_anim_light");
|
|
lexAddToken(T_TS_REG_ANIM_CHANGE_FID, "reg_anim_change_fid");
|
|
lexAddToken(T_TS_REG_ANIM_TAKE_OUT, "reg_anim_take_out");
|
|
lexAddToken(T_TS_REG_ANIM_TURN_TOWARDS, "reg_anim_turn_towards");
|
|
|
|
lexAddToken(T_TS_EXPLOSIONS_METARULE, "metarule2_explosions");
|
|
|
|
/*lexAddToken(T_TS_REGISTER_HOOK_PROC, "register_hook_proc");
|
|
|
|
lexAddToken(T_TS_MESSAGE_STR_GAME, "message_str_game");
|
|
lexAddToken(T_TS_SNEAK_SUCCESS, "sneak_success");
|
|
lexAddToken(T_TS_TILE_LIGHT, "tile_light");
|
|
lexAddToken(T_TS_MAKE_STRAIGHT_PATH, "obj_blocking_line");
|
|
lexAddToken(T_TS_OBJ_BLOCKING_AT, "obj_blocking_tile");
|
|
lexAddToken(T_TS_TILE_GET_OBJECTS, "tile_get_objs");
|
|
lexAddToken(T_TS_GET_PARTY_MEMBERS, "party_member_list");
|
|
lexAddToken(T_TS_PATH_FIND, "path_find_to");
|
|
lexAddToken(T_TS_CREATE_SPATIAL, "create_spatial");*/
|
|
{
|
|
int i;
|
|
for (i = 0; i < numSfallOpcodes(); i++) {
|
|
if (sfall_opcodes[i].name != 0)
|
|
lexAddToken(sfall_opcodes[i].token, (char*)sfall_opcodes[i].name);
|
|
}
|
|
}
|
|
}
|
|
}
|