mirror of https://github.com/n64decomp/007.git
7720 lines
249 KiB
C
7720 lines
249 KiB
C
// gcc -o build/aiparse tools/aiParse.c
|
|
// ./build/aiparse
|
|
//#include <arpa/inet.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <time.h>
|
|
#define _LANGUAGE_C
|
|
#define TARGET_N64
|
|
#include "../include/PR/ultratypes.h"
|
|
|
|
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wint-conversion"
|
|
#pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
|
|
#pragma GCC diagnostic ignored "-Wformat="
|
|
|
|
//odd, I though this would differ on L-Endian
|
|
// Ahh, figured it out, this "makes" a number and the cpu stores it in a reg in its own endianness
|
|
# define CharArrayTo16(val, index) ( val[index + 1] | val[index] << 8)
|
|
# define CharArrayTo24(val, index) ( val[index + 1] << 8 | val[index + 2] | val[index] << 16)
|
|
# define CharArrayTo32(val, index) (val[index + 1] << 16 | val[index + 2] << 8 | val[index + 3] | val[index] << 24)
|
|
|
|
#define ntohl(var) CharArrayTo32(((unsigned char *)(&(var))), 0)
|
|
#define ntohs(var) CharArrayTo16(((unsigned char *)(&(var))), 0)
|
|
#define btol(var) *(unsigned int *)&(var) = ntohl(var)
|
|
#define btos(var) *(unsigned int *)&(var) = ntohs(var)
|
|
|
|
#define isNotBoundPad(pad) pad < 10000
|
|
#define getBoundPadNum(pad) pad - 10000
|
|
#define setBoundPadNum(pad) pad + 10000
|
|
|
|
#define M_TAU_F 6.2831855f
|
|
#define ByteToRadian(Byte) ((Byte * M_TAU_F) * (1.0f / 256.0f))
|
|
#define RadToDeg(RAD) (float)((RAD) / M_TAU_F * 360.0f)
|
|
|
|
#define TARGET_BOND 0x0001 /* Set target to bond (ignores target argument)*/
|
|
#define TARGET_FRONT_OF_CHR 0x0002 /* Set target to front of chr*/
|
|
#define TARGET_CHR 0x0004 /* Set target type to chr_num*/
|
|
#define TARGET_PAD 0x0008 /* Set target type to pad*/
|
|
#define TARGET_COMPASS 0x0010 /* Set target to compass direction (hex) N: 0000 E: C000 S: 8000: W: 4000*/
|
|
#define TARGET_AIM_ONLY 0x0020 /* Aim at target instead of firing*/
|
|
#define TARGET_DONTTURN 0x0040 /* Limits target to 180 degrees in front of guard (cannot be used with TARGET_BOND flag)*/
|
|
|
|
char *HITTARGET_ToString[] = {
|
|
"HIT_NULL_PART", /* Null part, no reaction - 1x damage*/
|
|
"HIT_LEFT_FOOT", /* Left foot - 1x damage*/
|
|
"HIT_LEFT_LEG", /* Left leg - 1x damage*/
|
|
"HIT_LEFT_THIGH", /* Left thigh - 1x damage*/
|
|
"HIT_RIGHT_FOOT", /* Right foot - 1x damage*/
|
|
"HIT_RIGHT_LEG", /* Right leg - 1x damage*/
|
|
"HIT_RIGHT_THIGH", /* Right thigh - 1x damage*/
|
|
"HIT_PELVIS", /* Pelvis - 1x damage*/
|
|
"HIT_HEAD", /* Head - 4x damage*/
|
|
"HIT_LEFT_HAND", /* Left hand - 1x damage*/
|
|
"HIT_LEFT_ARM", /* Left arm - 1x damage*/
|
|
"HIT_LEFT_SHOULDER", /* Left shoulder - 1x damage*/
|
|
"HIT_RIGHT_HAND", /* Right hand - 1x damage*/
|
|
"HIT_RIGHT_ARM", /* Right arm - 1x damage*/
|
|
"HIT_RIGHT_SHOULDER", /* Right shoulder - 1x damage*/
|
|
"HIT_CHEST",
|
|
"16",
|
|
"17",
|
|
"18",
|
|
"19",
|
|
"20",
|
|
"21",
|
|
"22",
|
|
"23",
|
|
"24",
|
|
"25",
|
|
"26",
|
|
"27",
|
|
"28",
|
|
"29",
|
|
"30",
|
|
"31",
|
|
"32",
|
|
"33",
|
|
"34",
|
|
"35",
|
|
"36",
|
|
"37",
|
|
"38",
|
|
"39",
|
|
"40",
|
|
"41",
|
|
"42",
|
|
"43",
|
|
"44",
|
|
"45",
|
|
"46",
|
|
"47",
|
|
"48",
|
|
"49",
|
|
"50",
|
|
"51",
|
|
"52",
|
|
"53",
|
|
"54",
|
|
"55",
|
|
"56",
|
|
"57",
|
|
"58",
|
|
"59",
|
|
"60",
|
|
"61",
|
|
"62",
|
|
"63",
|
|
"64",
|
|
"65",
|
|
"66",
|
|
"67",
|
|
"68",
|
|
"69",
|
|
"70",
|
|
"71",
|
|
"72",
|
|
"73",
|
|
"74",
|
|
"75",
|
|
"76",
|
|
"77",
|
|
"78",
|
|
"79",
|
|
"80",
|
|
"81",
|
|
"82",
|
|
"83",
|
|
"84",
|
|
"85",
|
|
"86",
|
|
"87",
|
|
"88",
|
|
"89",
|
|
"90",
|
|
"91",
|
|
"92",
|
|
"93",
|
|
"94",
|
|
"95",
|
|
"96",
|
|
"97",
|
|
"98",
|
|
"99",
|
|
"HIT_GUN", /* GUN - 0x damage*/
|
|
"101",
|
|
"102",
|
|
"103",
|
|
"104",
|
|
"105",
|
|
"106",
|
|
"107",
|
|
"108",
|
|
"109",
|
|
"HIT_HAT", /* HAT - 0x damage*/
|
|
"111",
|
|
"112",
|
|
"113",
|
|
"114",
|
|
"115",
|
|
"116",
|
|
"117",
|
|
"118",
|
|
"119",
|
|
"120",
|
|
"121",
|
|
"122",
|
|
"123",
|
|
"124",
|
|
"125",
|
|
"126",
|
|
"127",
|
|
"128",
|
|
"129",
|
|
"130",
|
|
"131",
|
|
"132",
|
|
"133",
|
|
"134",
|
|
"135",
|
|
"136",
|
|
"137",
|
|
"138",
|
|
"139",
|
|
"140",
|
|
"141",
|
|
"142",
|
|
"143",
|
|
"144",
|
|
"145",
|
|
"146",
|
|
"147",
|
|
"148",
|
|
"149",
|
|
"150",
|
|
"151",
|
|
"152",
|
|
"153",
|
|
"154",
|
|
"155",
|
|
"156",
|
|
"157",
|
|
"158",
|
|
"159",
|
|
"160",
|
|
"161",
|
|
"162",
|
|
"163",
|
|
"164",
|
|
"165",
|
|
"166",
|
|
"167",
|
|
"168",
|
|
"169",
|
|
"170",
|
|
"171",
|
|
"172",
|
|
"173",
|
|
"174",
|
|
"175",
|
|
"176",
|
|
"177",
|
|
"178",
|
|
"179",
|
|
"180",
|
|
"181",
|
|
"182",
|
|
"183",
|
|
"184",
|
|
"185",
|
|
"186",
|
|
"187",
|
|
"188",
|
|
"189",
|
|
"190",
|
|
"191",
|
|
"192",
|
|
"193",
|
|
"194",
|
|
"195",
|
|
"196",
|
|
"197",
|
|
"198",
|
|
"199",
|
|
"HIT_GENERAL",
|
|
"HIT_GENERALHALF"};
|
|
|
|
// command 68 - door states
|
|
char *DOORSTATE_ToString[] = {
|
|
" AI_DOOR_STATE_CLOSED", /* Closed*/
|
|
" AI_DOOR_STATE_OPEN", /* Opened*/
|
|
" AI_DOOR_STATE_CLOSING", /* Closing*/
|
|
" AI_DOOR_STATE_OPENING" /* Opening*/};
|
|
|
|
// command D7 - hud flags
|
|
#define HUD_HIDE_ALL 0x00 /* Hide all*/
|
|
#define HUD_SHOW_TEXT_TOP 0x01 /* Don't hide top text*/
|
|
#define HUD_SHOW_TEXT_BOTTOM 0x02 /* Don't hide bottom text*/
|
|
#define HUD_SHOW_HUD_COUNTDOWN 0x04 /* Don't hide hud countdown*/
|
|
|
|
/* special chr num IDs */
|
|
#define CHR_BOND_CINEMA -8 /* only works when bond has a third person model (intro/exit cutscene) */
|
|
#define CHR_CLONE -7
|
|
#define CHR_SEE_SHOT -6 /* stored as chr->chrseeshot */
|
|
#define CHR_SEE_DIE -5 /* stored as chr->chrseedie */
|
|
#define CHR_PRESET -4 /* stored as chr->chrpreset1 */
|
|
#define CHR_SELF -3
|
|
|
|
/* private chr ID, cannot be accessed with ai commands */
|
|
#define CHR_OBJECTIVE -2 /* objective ai list chr ID */
|
|
#define CHR_FREE -1 /* chr IDs when free'd (killed or removed from level) */
|
|
|
|
char *CHR_ToString[] = {
|
|
"",
|
|
"CHR_FREE",
|
|
"CHR_OBJECTIVE",
|
|
"CHR_SELF",
|
|
"CHR_PRESET",
|
|
"CHR_SEE_DIE",
|
|
"CHR_SEE_SHOT",
|
|
"CHR_CLONE",
|
|
"CHR_BOND_CINEMA"
|
|
};
|
|
|
|
|
|
#define CHR_SPAWN_NUM_START 5000 /* default chr num for spawned guards with ai command BD/BE */
|
|
#define CHR_CLONED_NUM_START 10000 /* default chr num for cloned guards with ai command C1 */
|
|
/* Special ID for selecting PadPreset in AI list */
|
|
#define PAD_PRESET1 9000 /* stored as chr->padpreset1 */
|
|
|
|
#define isGlobalAIListID(ID) ((ID) <= 1024)
|
|
#define isBGAIListID(ID) ((ID) >= 4096)
|
|
#define isChrAIListID(ID) (!isGlobalAIListID(ID) && !isBGAIListID(ID))
|
|
#define setGlobalAIListID(ID) ((ID) + 0)
|
|
#define setChrAIListID(ID) ((ID) + 1025)
|
|
#define setBGAIListID(ID) ((ID) + 4096)
|
|
#define getGlobalAIListID(ID) ((ID)-0)
|
|
#define getChrAIListID(ID) ((ID)-1025)
|
|
#define getBGAIListID(ID) ((ID)-4096)
|
|
|
|
char *ANIMATIONS_ToString[] = {
|
|
"ANIM_idle",
|
|
"ANIM_fire_standing",
|
|
"ANIM_fire_standing_fast",
|
|
"ANIM_fire_hip",
|
|
"ANIM_fire_shoulder_left",
|
|
"ANIM_fire_turn_right1",
|
|
"ANIM_fire_turn_right2",
|
|
"ANIM_fire_kneel_right_leg",
|
|
"ANIM_fire_kneel_left_leg",
|
|
"ANIM_fire_kneel_left",
|
|
"ANIM_fire_kneel_right",
|
|
"ANIM_fire_roll_left",
|
|
"ANIM_fire_roll_right1",
|
|
"ANIM_fire_roll_left_fast",
|
|
"ANIM_hit_left_shoulder",
|
|
"ANIM_hit_right_shoulder",
|
|
"ANIM_hit_left_arm",
|
|
"ANIM_hit_right_arm",
|
|
"ANIM_hit_left_hand",
|
|
"ANIM_hit_right_hand",
|
|
"ANIM_hit_left_leg",
|
|
"ANIM_hit_right_leg",
|
|
"ANIM_death_genitalia", /* Thank you Mr. Botwood", here is your award */
|
|
"ANIM_hit_neck",
|
|
"ANIM_death_neck",
|
|
"ANIM_death_stagger_back_to_wall",
|
|
"ANIM_death_forward_face_down",
|
|
"ANIM_death_forward_spin_face_up",
|
|
"ANIM_death_backward_fall_face_up1",
|
|
"ANIM_death_backward_spin_face_down_right",
|
|
"ANIM_death_backward_spin_face_up_right",
|
|
"ANIM_death_backward_spin_face_down_left",
|
|
"ANIM_death_backward_spin_face_up_left",
|
|
"ANIM_death_forward_face_down_hard",
|
|
"ANIM_death_forward_face_down_soft",
|
|
"ANIM_death_fetal_position_right",
|
|
"ANIM_death_fetal_position_left",
|
|
"ANIM_death_backward_fall_face_up2",
|
|
"ANIM_side_step_left",
|
|
"ANIM_fire_roll_right2",
|
|
"ANIM_walking",
|
|
"ANIM_sprinting",
|
|
"ANIM_running",
|
|
"ANIM_bond_eye_walk",
|
|
"ANIM_bond_eye_fire",
|
|
"ANIM_bond_watch",
|
|
"ANIM_surrendering_armed",
|
|
"ANIM_surrendering_armed_drop_weapon",
|
|
"ANIM_fire_walking",
|
|
"ANIM_fire_running",
|
|
"ANIM_null50", /* invalid slot */
|
|
"ANIM_null51", /* invalid slot */
|
|
"ANIM_fire_jump_to_side_left",
|
|
"ANIM_fire_jump_to_side_right",
|
|
"ANIM_hit_butt_long",
|
|
"ANIM_hit_butt_short",
|
|
"ANIM_death_head",
|
|
"ANIM_death_left_leg",
|
|
"ANIM_slide_right",
|
|
"ANIM_slide_left",
|
|
"ANIM_jump_backwards",
|
|
"ANIM_extending_left_hand",
|
|
"ANIM_fire_throw_grenade",
|
|
"ANIM_spotting_bond", /* used by chr ai command guard_points_at_bond */
|
|
"ANIM_look_around", /* used by chr ai command GUARD_ANIM_LOOKS_AROUND_SELF */
|
|
"ANIM_fire_standing_one_handed_weapon",
|
|
"ANIM_fire_standing_draw_one_handed_weapon_fast",
|
|
"ANIM_fire_standing_draw_one_handed_weapon_slow",
|
|
"ANIM_fire_hip_one_handed_weapon_fast",
|
|
"ANIM_fire_hip_one_handed_weapon_slow",
|
|
"ANIM_fire_hip_forward_one_handed_weapon",
|
|
"ANIM_fire_standing_right_one_handed_weapon",
|
|
"ANIM_fire_step_right_one_handed_weapon",
|
|
"ANIM_fire_standing_left_one_handed_weapon_slow",
|
|
"ANIM_fire_standing_left_one_handed_weapon_fast",
|
|
"ANIM_fire_kneel_forward_one_handed_weapon_slow",
|
|
"ANIM_fire_kneel_forward_one_handed_weapon_fast",
|
|
"ANIM_fire_kneel_right_one_handed_weapon_slow",
|
|
"ANIM_fire_kneel_right_one_handed_weapon_fast",
|
|
"ANIM_fire_kneel_left_one_handed_weapon_slow",
|
|
"ANIM_fire_kneel_left_one_handed_weapon_fast",
|
|
"ANIM_fire_kneel_left_one_handed_weapon",
|
|
"ANIM_aim_walking_one_handed_weapon",
|
|
"ANIM_aim_walking_left_one_handed_weapon",
|
|
"ANIM_aim_walking_right_one_handed_weapon",
|
|
"ANIM_aim_running_one_handed_weapon",
|
|
"ANIM_aim_running_right_one_handed_weapon",
|
|
"ANIM_aim_running_left_one_handed_weapon",
|
|
"ANIM_aim_sprinting_one_handed_weapon",
|
|
"ANIM_running_one_handed_weapon",
|
|
"ANIM_sprinting_one_handed_weapon",
|
|
"ANIM_null91", /* invalid slot */
|
|
"ANIM_null92", /* invalid slot */
|
|
"ANIM_null93", /* invalid slot */
|
|
"ANIM_null94", /* invalid slot */
|
|
"ANIM_null95", /* invalid slot */
|
|
"ANIM_null96", /* invalid slot */
|
|
"ANIM_draw_one_handed_weapon_and_look_around",
|
|
"ANIM_draw_one_handed_weapon_and_stand_up",
|
|
"ANIM_aim_one_handed_weapon_left_right",
|
|
"ANIM_cock_one_handed_weapon_and_turn_around",
|
|
"ANIM_holster_one_handed_weapon_and_cross_arms",
|
|
"ANIM_cock_one_handed_weapon_turn_around_and_stand_up",
|
|
"ANIM_draw_one_handed_weapon_and_turn_around",
|
|
"ANIM_step_foward_and_hold_one_handed_weapon",
|
|
"ANIM_holster_one_handed_weapon_and_adjust_suit",
|
|
"ANIM_idle_unarmed",
|
|
"ANIM_walking_unarmed",
|
|
"ANIM_fire_walking_dual_wield",
|
|
"ANIM_fire_walking_dual_wield_hands_crossed",
|
|
"ANIM_fire_running_dual_wield",
|
|
"ANIM_fire_running_dual_wield_hands_crossed",
|
|
"ANIM_fire_sprinting_dual_wield",
|
|
"ANIM_fire_sprinting_dual_wield_hands_crossed",
|
|
"ANIM_walking_female",
|
|
"ANIM_running_female",
|
|
"ANIM_fire_kneel_dual_wield",
|
|
"ANIM_fire_kneel_dual_wield_left",
|
|
"ANIM_fire_kneel_dual_wield_right",
|
|
"ANIM_fire_kneel_dual_wield_hands_crossed",
|
|
"ANIM_fire_kneel_dual_wield_hands_crossed_left",
|
|
"ANIM_fire_kneel_dual_wield_hands_crossed_right",
|
|
"ANIM_fire_standing_dual_wield",
|
|
"ANIM_fire_standing_dual_wield_left",
|
|
"ANIM_fire_standing_dual_wield_right",
|
|
"ANIM_fire_standing_dual_wield_hands_crossed_left",
|
|
"ANIM_fire_standing_dual_wield_hands_crossed_right",
|
|
"ANIM_fire_standing_aiming_down_sights",
|
|
"ANIM_fire_kneel_aiming_down_sights",
|
|
"ANIM_hit_taser", /* unused tazer boy hit reaction */
|
|
"ANIM_death_explosion_forward",
|
|
"ANIM_death_explosion_left1",
|
|
"ANIM_death_explosion_back_left",
|
|
"ANIM_death_explosion_back1",
|
|
"ANIM_death_explosion_right",
|
|
"ANIM_death_explosion_forward_right1",
|
|
"ANIM_death_explosion_back2",
|
|
"ANIM_death_explosion_forward_roll",
|
|
"ANIM_death_explosion_forward_face_down",
|
|
"ANIM_death_explosion_left2",
|
|
"ANIM_death_explosion_forward_right2",
|
|
"ANIM_death_explosion_forward_right2_alt", /* copy of right2 with different fall */
|
|
"ANIM_death_explosion_forward_right3",
|
|
"ANIM_null143", /* invalid slot */
|
|
"ANIM_null144", /* invalid slot */
|
|
"ANIM_null145", /* invalid slot */
|
|
"ANIM_null146", /* invalid slot */
|
|
"ANIM_running_hands_up",
|
|
"ANIM_sprinting_hands_up",
|
|
"ANIM_aim_and_blow_one_handed_weapon",
|
|
"ANIM_aim_one_handed_weapon_left",
|
|
"ANIM_aim_one_handed_weapon_right",
|
|
"ANIM_conversation",
|
|
"ANIM_drop_weapon_and_show_fight_stance", /* orthodox stance woo */
|
|
"ANIM_yawning",
|
|
"ANIM_swatting_flies",
|
|
"ANIM_scratching_leg",
|
|
"ANIM_scratching_butt",
|
|
"ANIM_adjusting_crotch",
|
|
"ANIM_sneeze",
|
|
"ANIM_conversation_cleaned", /* cleaned up copy of "ANIM_conversation (compare left wrist) */
|
|
"ANIM_conversation_listener",
|
|
"ANIM_startled_and_looking_around",
|
|
"ANIM_laughing_in_disbelief",
|
|
"ANIM_surrendering_unarmed",
|
|
"ANIM_coughing_standing",
|
|
"ANIM_coughing_kneel1",
|
|
"ANIM_coughing_kneel2",
|
|
"ANIM_standing_up",
|
|
"ANIM_null169", /* invalid slot */
|
|
"ANIM_dancing",
|
|
"ANIM_dancing_one_handed_weapon",
|
|
"ANIM_keyboard_right_hand1",
|
|
"ANIM_keyboard_right_hand2",
|
|
"ANIM_keyboard_left_hand",
|
|
"ANIM_keyboard_right_hand_tapping",
|
|
"ANIM_bond_eye_fire_alt", /* unused */
|
|
"ANIM_dam_jump",
|
|
"ANIM_surface_vent_jump",
|
|
"ANIM_cradle_jump",
|
|
"ANIM_cradle_fall",
|
|
"ANIM_credits_bond_kissing",
|
|
"ANIM_credits_natalya_kissing"};
|
|
|
|
char *AIRCRAFT_ANIMATION_ToString[] = {
|
|
"AIRCRAFT_ANIMATION_helicopter_cradle",
|
|
"AIRCRAFT_ANIMATION_plane_runway",
|
|
"AIRCRAFT_ANIMATION_helicopter_takeoff"};
|
|
|
|
// Add 1 to ID for correct string
|
|
char *DIFFICULTY_ToString[] = {
|
|
"DIFFICULTY_MULTI", //-1
|
|
"DIFFICULTY_AGENT",
|
|
"DIFFICULTY_SECRET",
|
|
"DIFFICULTY_00",
|
|
"DIFFICULTY_007",
|
|
};
|
|
|
|
char *ITEM_IDS_ToString[] = {
|
|
"ITEM_UNARMED",
|
|
"ITEM_FIST",
|
|
"ITEM_KNIFE",
|
|
"ITEM_THROWKNIFE",
|
|
"ITEM_WPPK",
|
|
"ITEM_WPPKSIL",
|
|
"ITEM_TT33",
|
|
"ITEM_SKORPION",
|
|
"ITEM_AK47",
|
|
"ITEM_UZI",
|
|
"ITEM_MP5K",
|
|
"ITEM_MP5KSIL",
|
|
"ITEM_SPECTRE",
|
|
"ITEM_M16",
|
|
"ITEM_FNP90",
|
|
"ITEM_SHOTGUN",
|
|
"ITEM_AUTOSHOT",
|
|
"ITEM_SNIPERRIFLE",
|
|
"ITEM_RUGER",
|
|
"ITEM_GOLDENGUN",
|
|
"ITEM_SILVERWPPK",
|
|
"ITEM_GOLDWPPK",
|
|
"ITEM_LASER",
|
|
"ITEM_WATCHLASER",
|
|
"ITEM_GRENADELAUNCH",
|
|
"ITEM_ROCKETLAUNCH",
|
|
"ITEM_GRENADE",
|
|
"ITEM_TIMEDMINE",
|
|
"ITEM_PROXIMITYMINE",
|
|
"ITEM_REMOTEMINE",
|
|
"ITEM_TRIGGER",
|
|
"ITEM_TASER",
|
|
"ITEM_TANKSHELLS",
|
|
"ITEM_BOMBCASE",
|
|
"ITEM_PLASTIQUE",
|
|
"ITEM_FLAREPISTOL",
|
|
"ITEM_PITONGUN",
|
|
"ITEM_BUNGEE",
|
|
"ITEM_DOORDECODER",
|
|
"ITEM_BOMBDEFUSER",
|
|
"ITEM_CAMERA",
|
|
"ITEM_LOCKEXPLODER",
|
|
"ITEM_DOOREXPLODER",
|
|
"ITEM_BRIEFCASE",
|
|
"ITEM_WEAPONCASE",
|
|
"ITEM_SAFECRACKERCASE",
|
|
"ITEM_KEYANALYSERCASE",
|
|
"ITEM_BUG",
|
|
"ITEM_MICROCAMERA",
|
|
"ITEM_BUGDETECTOR",
|
|
"ITEM_EXPLOSIVEFLOPPY",
|
|
"ITEM_POLARIZEDGLASSES",
|
|
"ITEM_DARKGLASSES",
|
|
"ITEM_CREDITCARD",
|
|
"ITEM_GASKEYRING",
|
|
"ITEM_DATATHIEF",
|
|
"ITEM_WATCHIDENTIFIER",
|
|
"ITEM_WATCHCOMMUNICATOR",
|
|
"ITEM_WATCHGEIGERCOUNTER",
|
|
"ITEM_WATCHMAGNETREPEL",
|
|
"ITEM_WATCHMAGNETATTRACT",
|
|
"ITEM_GOLDENEYEKEY",
|
|
"ITEM_BLACKBOX",
|
|
"ITEM_CIRCUITBOARD",
|
|
"ITEM_CLIPBOARD",
|
|
"ITEM_STAFFLIST",
|
|
"ITEM_DOSSIERRED",
|
|
"ITEM_PLANS",
|
|
"ITEM_SPYFILE",
|
|
"ITEM_BLUEPRINTS",
|
|
"ITEM_MAP",
|
|
"ITEM_AUDIOTAPE",
|
|
"ITEM_VIDEOTAPE",
|
|
"ITEM_DATTAPE",
|
|
"ITEM_SPOOLTAPE",
|
|
"ITEM_MICROFILM",
|
|
"ITEM_MICROCODE",
|
|
"ITEM_LECTRE",
|
|
"ITEM_MONEY",
|
|
"ITEM_GOLDBAR",
|
|
"ITEM_HEROIN",
|
|
"ITEM_KEYCARD",
|
|
"ITEM_KEYYALE",
|
|
"ITEM_KEYBOLT",
|
|
"ITEM_SUIT_LF_HAND",
|
|
"ITEM_JOYPAD",
|
|
"ITEM_NULL86",
|
|
"ITEM_NULL87",
|
|
"ITEM_TOKEN",
|
|
"ITEM_IDS_MAX"};
|
|
|
|
char *PROPDEF_TYPE_ToString[] = {
|
|
"PROPDEF_NOTHING",
|
|
"PROPDEF_DOOR",
|
|
"PROPDEF_DOOR_SCALE",
|
|
"PROPDEF_PROP",
|
|
"PROPDEF_KEY",
|
|
"PROPDEF_ALARM",
|
|
"PROPDEF_CCTV",
|
|
"PROPDEF_MAGAZINE",
|
|
"PROPDEF_COLLECTABLE",
|
|
"PROPDEF_GUARD",
|
|
"PROPDEF_MONITOR",
|
|
"PROPDEF_MULTI_MONITOR",
|
|
"PROPDEF_RACK",
|
|
"PROPDEF_AUTOGUN",
|
|
"PROPDEF_LINK",
|
|
"PROPDEF_DEBRIS",
|
|
"PROPDEF_UNK16",
|
|
"PROPDEF_HAT",
|
|
"PROPDEF_GUARD_ATTRIBUTE",
|
|
"PROPDEF_SWITCH",
|
|
"PROPDEF_AMMO",
|
|
"PROPDEF_ARMOUR",
|
|
"PROPDEF_TAG",
|
|
"PROPDEF_OBJECTIVE_START",
|
|
"PROPDEF_OBJECTIVE_END",
|
|
"PROPDEF_OBJECTIVE_DESTROY_OBJECT",
|
|
"PROPDEF_OBJECTIVE_COMPLETE_CONDITION",
|
|
"PROPDEF_OBJECTIVE_FAIL_CONDITION",
|
|
"PROPDEF_OBJECTIVE_COLLECT_OBJECT",
|
|
"PROPDEF_OBJECTIVE_DEPOSIT_OBJECT",
|
|
"PROPDEF_OBJECTIVE_PHOTOGRAPH",
|
|
"PROPDEF_OBJECTIVE_NULL",
|
|
"PROPDEF_OBJECTIVE_ENTER_ROOM",
|
|
"PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM",
|
|
"PROPDEF_OBJECTIVE_COPY_ITEM",
|
|
"PROPDEF_WATCH_MENU_OBJECTIVE_TEXT",
|
|
"PROPDEF_GAS_RELEASING",
|
|
"PROPDEF_RENAME",
|
|
"PROPDEF_LOCK_DOOR",
|
|
"PROPDEF_VEHICHLE",
|
|
"PROPDEF_AIRCRAFT",
|
|
"PROPDEF_UNK41",
|
|
"PROPDEF_GLASS",
|
|
"PROPDEF_SAFE",
|
|
"PROPDEF_SAFE_ITEM",
|
|
"PROPDEF_TANK",
|
|
"PROPDEF_CAMERAPOS", // canonical name
|
|
"PROPDEF_TINTED_GLASS",
|
|
"PROPDEF_END",
|
|
};
|
|
|
|
char *PROP_ToString[] = {
|
|
"PROP_ALARM1", /* Beta Alarm / Default Multi Weapon */
|
|
"PROP_ALARM2", /* Alarm */
|
|
"PROP_EXPLOSIONBIT", /* White Pyramid (Explosion Bit) */
|
|
"PROP_AMMO_CRATE1", /* Ammo Crate (Brown w/ Edge Brace", 6x240 Black) */
|
|
"PROP_AMMO_CRATE2", /* Ammo Crate (Brown w/ Center Brace", 12x8 Black) */
|
|
"PROP_AMMO_CRATE3", /* Ammo Crate (Green w/ Center Brace", 12x8 Brown) */
|
|
"PROP_AMMO_CRATE4", /* Ammo Crate (Green w/ Edge Brace", 6x8 White) */
|
|
"PROP_AMMO_CRATE5", /* Ammo Crate (Green w/ Double Brace", 24x60 Black) */
|
|
"PROP_BIN1", /* Rusted Trash Bin */
|
|
"PROP_BLOTTER1", /* Desk Blotter */
|
|
"PROP_BOOK1", /* Red Book */
|
|
"PROP_BOOKSHELF1", /* Bookshelf */
|
|
"PROP_BRIDGE_CONSOLE1A", /* Bridge Console w/ Monitor", Navigation + Keyboard 1A */
|
|
"PROP_BRIDGE_CONSOLE1B", /* Bridge Console w/ Navigation 1B */
|
|
"PROP_BRIDGE_CONSOLE2A", /* Bridge Console w/ Navigation", Monitor + Keyboard 2A */
|
|
"PROP_BRIDGE_CONSOLE2B", /* Bridge Console w/ Various Controls 2B */
|
|
"PROP_BRIDGE_CONSOLE3A", /* Bridge Console w/ Monitor", Navigation + Keyboard 3A */
|
|
"PROP_BRIDGE_CONSOLE3B", /* Bridge Console w/ Monitor", Keyboard + Navigation 3B */
|
|
"PROP_CARD_BOX1", /* Cardboard Box", Kapto|Enb */
|
|
"PROP_CARD_BOX2", /* Cardboard Box", Red Arrow", Bahko */
|
|
"PROP_CARD_BOX3", /* Cardboard Box", Scrawled Text", Bahah */
|
|
"PROP_CARD_BOX4_LG", /* Cardboard Box", Three Seams */
|
|
"PROP_CARD_BOX5_LG", /* Cardboard Box", Two Seams", Bahah */
|
|
"PROP_CARD_BOX6_LG", /* Cardboard Box", Bahko */
|
|
"PROP_CCTV", /* Surveillance Camera */
|
|
"PROP_CONSOLE1", /* Double Screen Consoles w/ Keyboards */
|
|
"PROP_CONSOLE2", /* Double Screen Consoles w/ Left Keyboard */
|
|
"PROP_CONSOLE3", /* Double Screen Consoles w/ Right Keyboard */
|
|
"PROP_CONSOLE_SEVA", /* Console w/ Keyboard */
|
|
"PROP_CONSOLE_SEVB", /* Console w/ Monitor + Keyboard */
|
|
"PROP_CONSOLE_SEVC", /* Console w/ Switches */
|
|
"PROP_CONSOLE_SEVD", /* Console w/ Five Gauges */
|
|
"PROP_CONSOLE_SEV2A", /* Console w/ Four Faders */
|
|
"PROP_CONSOLE_SEV2B", /* Console w/ Monitor", Keyboard + Switches */
|
|
"PROP_CONSOLE_SEV2C", /* Console w/ Three Gauges */
|
|
"PROP_CONSOLE_SEV2D", /* Console w/ Pressure Gauge */
|
|
"PROP_CONSOLE_SEV_GEA", /* Console w/ GoldenEye Key Slot */
|
|
"PROP_CONSOLE_SEV_GEB", /* Console w/ Faders + Pressure Gauge */
|
|
"PROP_DESK1", /* Desk w/ Kickplate */
|
|
"PROP_DESK2", /* Desk */
|
|
"PROP_DESK_LAMP2", /* Desk Lamp */
|
|
"PROP_DISC_READER", /* External Hard Drive */
|
|
"PROP_DISK_DRIVE1", /* Floppy Disc Drive */
|
|
"PROP_FILING_CABINET1", /* Filing Cabinet */
|
|
"PROP_JERRY_CAN1", /* Jerrycan (Fuel Container) */
|
|
"PROP_KEYBOARD1", /* Computer Keyboard */
|
|
"PROP_KIT_UNITS1", /* Kitchen Cabinets */
|
|
"PROP_LETTER_TRAY1", /* Letter Tray */
|
|
"PROP_MAINFRAME1", /* Mainframe", Basic */
|
|
"PROP_MAINFRAME2", /* Mainframe", Advanced */
|
|
"PROP_METAL_CHAIR1", /* Chair (Metal) */
|
|
"PROP_METAL_CRATE1", /* Metal Crate", 6 Top Corner */
|
|
"PROP_METAL_CRATE2", /* Metal Crate", 6 Bottom Corner */
|
|
"PROP_METAL_CRATE3", /* Metal Crate", Toxic Materials */
|
|
"PROP_METAL_CRATE4", /* Metal Crate", Double Stripe - Class D1 Hazard */
|
|
"PROP_MISSILE_RACK", /* Naval Harpoon Missile in Containment Rack */
|
|
"PROP_MISSILE_RACK2", /* Naval Harpoon Missiles in Containment Racks x4 */
|
|
"PROP_OIL_DRUM1", /* Oil Drum", Single Stripe", Ribbed */
|
|
"PROP_OIL_DRUM2", /* Oil Drum", Single Stripe", Ribbed - Class D1 Hazard */
|
|
"PROP_OIL_DRUM3", /* Oil Drum", Single Stripe", Ribbed - Toxic Materials */
|
|
"PROP_OIL_DRUM5", /* Oil Drum", Double Stripe - Toxic Materials */
|
|
"PROP_OIL_DRUM6", /* Oil Drum - Toxic Materials */
|
|
"PROP_OIL_DRUM7", /* Oil Drum", Double Dashes - Class D1 Hazard */
|
|
"PROP_PADLOCK", /* Padlock */
|
|
"PROP_PHONE1", /* Telephone */
|
|
"PROP_RADIO_UNIT1", /* Radio Tuner w/ 1 Knob + 2 Gauges */
|
|
"PROP_RADIO_UNIT2", /* Radio Tuner w/ 1 Knob + 5 Gauges */
|
|
"PROP_RADIO_UNIT3", /* Radio Tuner w/ 3 Knobs + 5 Gauges */
|
|
"PROP_RADIO_UNIT4", /* Radio Tuner w/ 3 Knobs + 2 Gauges */
|
|
"PROP_SAT1_REFLECT", /* GoldenEye Satellite */
|
|
"PROP_SATDISH", /* Satellite Dish (Arkangelsk) */
|
|
"PROP_SATBOX", /* Uplink Box */
|
|
"PROP_STOOL1", /* Wooden Stool */
|
|
"PROP_SWIVEL_CHAIR1", /* Swivel Chair */
|
|
"PROP_TORPEDO_RACK", /* Naval Torpedo Rack x3 */
|
|
"PROP_TV1", /* Television Monitor */
|
|
"PROP_TV_HOLDER", /* Hanging Monitor Rack */
|
|
"PROP_TVSCREEN", /* Wall Monitor Screen */
|
|
"PROP_TV4SCREEN", /* Wall Monitor Screens", 4-in-1 */
|
|
"PROP_WOOD_LG_CRATE1", /* Wooden Crate w/ #4 Label", Bahah */
|
|
"PROP_WOOD_LG_CRATE2", /* Wooden Crate", Darker Shading", Kapto|Enb */
|
|
"PROP_WOOD_MD_CRATE3", /* Wooden Crates x8", Bahko */
|
|
"PROP_WOOD_SM_CRATE4", /* Wooden Crate w/ #2 Label", Bahko */
|
|
"PROP_WOOD_SM_CRATE5", /* Wooden Crate w/ #4 Label", Darker Shading", Bahah */
|
|
"PROP_WOOD_SM_CRATE6", /* Wooden Crate w/ UP Arrow", Kapto|Enb */
|
|
"PROP_WOODEN_TABLE1", /* Wooden Table */
|
|
"PROP_SWIPE_CARD2", /* Keycard */
|
|
"PROP_BORG_CRATE", /* Blue and Gold Printed Circuit Cube (Borg Crate) */
|
|
"PROP_BOXES4X4", /* Metal Crate Stack", 4x4 */
|
|
"PROP_BOXES3X4", /* Metal Crate Stack", 3x4 */
|
|
"PROP_BOXES2X4", /* Metal Crate Stack", 2x4 */
|
|
"PROP_SEC_PANEL", /* Security Card Panel */
|
|
"PROP_ICBM_NOSE", /* Silo Missile (ICBM)", Nose Cone Only */
|
|
"PROP_ICBM", /* Silo Missile (ICBM) */
|
|
"PROP_TUNING_CONSOLE1", /* Dual Consoles on Castors */
|
|
"PROP_DESK_ARECIBO1", /* Computer Work Desk */
|
|
"PROP_LOCKER3", /* Lockers", Single Venting */
|
|
"PROP_LOCKER4", /* Lockers", Double Venting */
|
|
"PROP_ROOFGUN", /* Ceiling Mounted Drone Gun */
|
|
"PROP_DEST_ENGINE", /* Frigate Engine */
|
|
"PROP_DEST_EXOCET", /* Naval MK 29 Missile Launcher (Exocet) */
|
|
"PROP_DEST_GUN", /* Naval 100 mm Gun Turret (TR 100) */
|
|
"PROP_DEST_HARPOON", /* Naval MK 141 Launch Canisters (Harpoon) */
|
|
"PROP_DEST_SEAWOLF", /* Naval MK 26 Dual Missile Launcher (Seawolf) */
|
|
"PROP_WINDOW", /* Window Glass */
|
|
"PROP_WINDOW_LIB_LG1", /* Window Glass", Lattice Frame", 4x10 (single-sided) */
|
|
"PROP_WINDOW_LIB_SM1", /* Window Glass", Lattice Frame", 4x3 (double-sided) */
|
|
"PROP_WINDOW_COR11", /* Window Glass", Lattice Frame", 4x4 (single-sided) */
|
|
"PROP_JUNGLE3_TREE", /* Jungle Large Tree */
|
|
"PROP_PALM", /* Jungle Palm Tree */
|
|
"PROP_PALMTREE", /* Jungle Palm Tree", Resprouting After Loss of Fronds */
|
|
"PROP_PLANT2B", /* Jungle Plant", Low Shrub */
|
|
"PROP_LABBENCH", /* Laboratory Table w/ Sink Drains */
|
|
"PROP_GASBARREL", /* White Bin */
|
|
"PROP_GASBARRELS", /* White Bins x4 */
|
|
"PROP_BODYARMOUR", /* Body Armor */
|
|
"PROP_BODYARMOURVEST", /* Body Armor (Vest) */
|
|
"PROP_GASTANK", /* Bottling Tank */
|
|
"PROP_GLASSWARE1", /* Glass Cup */
|
|
"PROP_HATCHBOLT", /* Metallic Securing Strip (Hatch Bolt) */
|
|
"PROP_BRAKEUNIT", /* Train Brake Controller */
|
|
"PROP_AK47MAG", /* Gun Magazine (KF7 Soviet) */
|
|
"PROP_M16MAG", /* Gun Magazine (AR33 Assault Rifle) */
|
|
"PROP_MP5KMAG", /* Gun Magazine (D5K Deutsche) */
|
|
"PROP_SKORPIONMAG", /* Gun Magazine (Klobb) */
|
|
"PROP_SPECTREMAG", /* Gun Magazine (Phantom) */
|
|
"PROP_UZIMAG", /* Gun Magazine (ZMG (9mm)) */
|
|
"PROP_SILENCER", /* Silencer */
|
|
"PROP_CHREXTINGUISHER", /* Fire Extinguisher */
|
|
"PROP_BOXCARTRIDGES", /* Box of Shells (Shotgun Cartridges) */
|
|
"PROP_FNP90MAG", /* Gun Magazine (RC-P90) */
|
|
"PROP_GOLDENSHELLS", /* Box of Shells (Golden Gun Bullets) */
|
|
"PROP_MAGNUMSHELLS", /* Box of Shells (Magnum Rounds) */
|
|
"PROP_WPPKMAG", /* Gun Magazine (PP7) */
|
|
"PROP_TT33MAG", /* Gun Magazine (DD44 Dostovei) */
|
|
"PROP_SEV_DOOR", /* Grey Containment Door w/ Caution Stripes and Window */
|
|
"PROP_SEV_DOOR3", /* Grey Electronic Door w/ LEFT Arrow */
|
|
"PROP_SEV_DOOR3_WIND", /* BETA Electronic Door w/ LEFT Arrow and Fake Window */
|
|
"PROP_SEV_DOOR4_WIND", /* Grey Electronic Door w/ LEFT Arrow and Window */
|
|
"PROP_SEV_TRISLIDE", /* Glass Door w/ Stone Frame */
|
|
"PROP_SEV_DOOR_V1", /* Grey Electronic Door w/ UP Arrow */
|
|
"PROP_STEEL_DOOR1", /* Silver Corrugated Door w/ Caution Stripes */
|
|
"PROP_STEEL_DOOR2", /* Rusty Door w/ Handle */
|
|
"PROP_STEEL_DOOR3", /* Double Cross Brace Door */
|
|
"PROP_SILO_LIFT_DOOR", /* Elevator Door */
|
|
"PROP_STEEL_DOOR2B", /* Rusty Door w/o Handle */
|
|
"PROP_DOOR_ROLLER1", /* Blue Bay Door w/ Caution Stripes */
|
|
"PROP_DOOR_ROLLER2", /* Blue Bay Door w/ Venting and Caution Stripes */
|
|
"PROP_DOOR_ROLLER3", /* Blue Bay Door w/ Venting and Caution Stripes */
|
|
"PROP_DOOR_ROLLER4", /* Cargo Bay Door w/ UP Arrow and Transportation Stripes */
|
|
"PROP_DOOR_ST_AREC1", /* Blue Corrugated Door w/ Transportation Stripes */
|
|
"PROP_DOOR_ST_AREC2", /* Blue Reversed Corrugated Door w/ Transportation Stripes */
|
|
"PROP_DOOR_DEST1", /* Grey Frigate Door w/ Indents and Caution Stripes */
|
|
"PROP_DOOR_DEST2", /* Grey Frigate Door w/ Indents", Caution Stripes and KEEP CLEAR Label */
|
|
"PROP_GAS_PLANT_SW_DO1", /* Grey Swinging Door w/ Blue Stripe */
|
|
"PROP_GAS_PLANT_SW2_DO1", /* Grey Swinging Door", Darker */
|
|
"PROP_GAS_PLANT_SW3_DO1", /* Grey Swinging Door", Lighter */
|
|
"PROP_GAS_PLANT_SW4_DO1", /* Light Wooden Door (Looks Like Sand) */
|
|
"PROP_GAS_PLANT_MET1_DO1", /* Brown Electronic Door */
|
|
"PROP_GAS_PLANT_WC_CUB1", /* Bathroom Stall Door */
|
|
"PROP_GASPLANT_CLEAR_DOOR", /* Laboratory Glass Door */
|
|
"PROP_TRAIN_DOOR", /* Dark Wooden Door */
|
|
"PROP_TRAIN_DOOR2", /* Dark Wooden Door w/ Window */
|
|
"PROP_TRAIN_DOOR3", /* Dark Wooden Door w/ Window + Shutter */
|
|
"PROP_DOOR_EYELID", /* Eyelid Door */
|
|
"PROP_DOOR_IRIS", /* Iris Door */
|
|
"PROP_SEVDOORWOOD", /* Cabin Door */
|
|
"PROP_SEVDOORWIND", /* Weathered Swinging Door w/ Window */
|
|
"PROP_SEVDOORNOWIND", /* Weathered Swinging Door */
|
|
"PROP_SEVDOORMETSLIDE", /* Brown Corrugated Electronic Door */
|
|
"PROP_CRYPTDOOR1A", /* Stone Door w/ Prints (Set A) */
|
|
"PROP_CRYPTDOOR1B", /* Sand Door w/ Damage (Set A) */
|
|
"PROP_CRYPTDOOR2A", /* Stone Door w/ Prints", Darker (Set B) */
|
|
"PROP_CRYPTDOOR2B", /* Sand Door w/ Damage", Darker (Set B) */
|
|
"PROP_CRYPTDOOR3", /* Egyptian Moving Wall */
|
|
"PROP_CRYPTDOOR4", /* Brown Sand Door (Temple) */
|
|
"PROP_VERTDOOR", /* Blast Door (Control) */
|
|
"PROP_HATCHDOOR", /* Train Floor Hatch */
|
|
"PROP_DAMGATEDOOR", /* Security Gate (Dam) */
|
|
"PROP_DAMTUNDOOR", /* Tunnel Flood Door (Dam) */
|
|
"PROP_DAMCHAINDOOR", /* Mesh Gate */
|
|
"PROP_SILOTOPDOOR", /* Launch Tube Ceiling Shutter (Silo) */
|
|
"PROP_DOORPRISON1", /* Cell Door */
|
|
"PROP_DOORSTATGATE", /* Park Gate */
|
|
"PROP_CHRKALASH", /* KF7 Soviet */
|
|
"PROP_CHRGRENADELAUNCH", /* Grenade Launcher */
|
|
"PROP_CHRKNIFE", /* Hunting Knife */
|
|
"PROP_CHRLASER", /* Moonraker Laser */
|
|
"PROP_CHRM16", /* AR33 Assault Rifle */
|
|
"PROP_CHRMP5K", /* D5K Deutsche */
|
|
"PROP_CHRRUGER", /* Cougar Magnum */
|
|
"PROP_CHRWPPK", /* PP7 Special Issue */
|
|
"PROP_CHRSHOTGUN", /* Shotgun */
|
|
"PROP_CHRSKORPION", /* Klobb */
|
|
"PROP_CHRSPECTRE", /* Phantom */
|
|
"PROP_CHRUZI", /* ZMG (9mm) */
|
|
"PROP_CHRGRENADE", /* Hand Grenade */
|
|
"PROP_CHRFNP90", /* RC-P90 */
|
|
"PROP_CHRBRIEFCASE", /* Briefcase */
|
|
"PROP_CHRREMOTEMINE", /* Remote Mine */
|
|
"PROP_CHRPROXIMITYMINE", /* Proximity Mine */
|
|
"PROP_CHRTIMEDMINE", /* Timed Mine */
|
|
"PROP_CHRROCKET", /* Rocket */
|
|
"PROP_CHRGRENADEROUND", /* Grenade Round */
|
|
"PROP_CHRWPPKSIL", /* PP7 (Silenced) */
|
|
"PROP_CHRTT33", /* DD44 Dostovei */
|
|
"PROP_CHRMP5KSIL", /* D5K (Silenced) */
|
|
"PROP_CHRAUTOSHOT", /* Automatic Shotgun */
|
|
"PROP_CHRGOLDEN", /* Golden Gun */
|
|
"PROP_CHRTHROWKNIFE", /* Throwing Knife */
|
|
"PROP_CHRSNIPERRIFLE", /* Sniper Rifle */
|
|
"PROP_CHRROCKETLAUNCH", /* Rocket Launcher */
|
|
"PROP_HATFURRY", /* Fur Hat", Blue */
|
|
"PROP_HATFURRYBROWN", /* Fur Hat", Brown */
|
|
"PROP_HATFURRYBLACK", /* Fur Hat", Black */
|
|
"PROP_HATTBIRD", /* Side Cap", Light Green */
|
|
"PROP_HATTBIRDBROWN", /* Side Cap", Dark Green */
|
|
"PROP_HATHELMET", /* Combat Helmet", Green */
|
|
"PROP_HATHELMETGREY", /* Combat Helmet", Grey */
|
|
"PROP_HATMOON", /* Elite Headgear */
|
|
"PROP_HATBERET", /* Special Forces Beret", Black */
|
|
"PROP_HATBERETBLUE", /* Special Forces Beret", Navy */
|
|
"PROP_HATBERETRED", /* Special Forces Beret", Burgundy */
|
|
"PROP_HATPEAKED", /* Officer's Peaked Visor Cap */
|
|
"PROP_CHRWRISTDART", /* Pchrwristdart (BETA) */
|
|
"PROP_CHREXPLOSIVEPEN", /* Pchrexplosivepen (BETA) */
|
|
"PROP_CHRBOMBCASE", /* Bomb Case (Briefcase Laying Down) */
|
|
"PROP_CHRFLAREPISTOL", /* Pchrflarepistol (BETA Pickup) */
|
|
"PROP_CHRPITONGUN", /* Pchrpitongun (BETA Pickup) */
|
|
"PROP_CHRFINGERGUN", /* Pchrfingergun (BETA Pickup) */
|
|
"PROP_CHRSILVERWPPK", /* Pchrsilverwppk (BETA Pickup) */
|
|
"PROP_CHRGOLDWPPK", /* Pchrgoldwppk (BETA Pickup) */
|
|
"PROP_CHRDYNAMITE", /* Pchrdynamite (BETA Pickup) */
|
|
"PROP_CHRBUNGEE", /* Pchrbungee (BETA Pickup) */
|
|
"PROP_CHRDOORDECODER", /* Door Decoder */
|
|
"PROP_CHRBOMBDEFUSER", /* Bomb Defuser */
|
|
"PROP_CHRBUGDETECTOR", /* Pchrbugdetector (BETA Pickup) */
|
|
"PROP_CHRSAFECRACKERCASE", /* Safe Cracker Case (Briefcase Laying Down) */
|
|
"PROP_CHRCAMERA", /* Photo Camera (007) */
|
|
"PROP_CHRLOCKEXPLODER", /* Pchrlockexploder (BETA Pickup) */
|
|
"PROP_CHRDOOREXPLODER", /* Pchrdoorexploder (BETA Pickup) */
|
|
"PROP_CHRKEYANALYSERCASE", /* Key Analyzer Case (Briefcase Laying Down) */
|
|
"PROP_CHRWEAPONCASE", /* Weapon Case (Briefcase Standing Up) */
|
|
"PROP_CHRKEYYALE", /* Yale Key */
|
|
"PROP_CHRKEYBOLT", /* Bolt Key */
|
|
"PROP_CHRBUG", /* Covert Modem / Tracker Bug */
|
|
"PROP_CHRMICROCAMERA", /* Micro Camera */
|
|
"PROP_FLOPPY", /* Floppy Disc */
|
|
"PROP_CHRGOLDENEYEKEY", /* GoldenEye Key */
|
|
"PROP_CHRPOLARIZEDGLASSES", /* Polarized Glasses */
|
|
"PROP_CHRCREDITCARD", /* Pchrcreditcard (BETA Pickup) */
|
|
"PROP_CHRDARKGLASSES", /* Pchrdarkglasses (BETA Pickup) */
|
|
"PROP_CHRGASKEYRING", /* Gas Keyring */
|
|
"PROP_CHRDATATHIEF", /* Datathief */
|
|
"PROP_SAFE", /* Safe Body */
|
|
"PROP_BOMB", /* Pbomb (BETA Pickup) */
|
|
"PROP_CHRPLANS", /* Plans (Briefing Folder) */
|
|
"PROP_CHRSPYFILE", /* Pchrspyfile (BETA Pickup) */
|
|
"PROP_CHRBLUEPRINTS", /* Pirate Blueprints */
|
|
"PROP_CHRCIRCUITBOARD", /* Circuitboard */
|
|
"PROP_CHRMAP", /* Bunker Expansion Plans */
|
|
"PROP_CHRSPOOLTAPE", /* Pchrspooltape (BETA Pickup) */
|
|
"PROP_CHRAUDIOTAPE", /* Audiotape */
|
|
"PROP_CHRMICROFILM", /* Pchrmicrofilm (BETA Pickup) */
|
|
"PROP_CHRMICROCODE", /* Pchrmicrocode (BETA Pickup) */
|
|
"PROP_CHRLECTRE", /* Pchrlectre (BETA Pickup) */
|
|
"PROP_CHRMONEY", /* Pchrmoney (BETA Pickup) */
|
|
"PROP_CHRGOLDBAR", /* Pchrgoldbar (BETA Pickup) */
|
|
"PROP_CHRHEROIN", /* Pchrheroin (BETA Pickup) */
|
|
"PROP_CHRCLIPBOARD", /* Clipboard */
|
|
"PROP_CHRDOSSIERRED", /* Red Dossier */
|
|
"PROP_CHRSTAFFLIST", /* Staff List */
|
|
"PROP_CHRDATTAPE", /* DAT */
|
|
"PROP_CHRPLASTIQUE", /* Plastique */
|
|
"PROP_CHRBLACKBOX", /* Black Box (Orange Flight Recorder) */
|
|
"PROP_CHRVIDEOTAPE", /* CCTV Tape (GoldenEye VHS) */
|
|
"PROP_NINTENDOLOGO", /* Nintendo Logo */
|
|
"PROP_GOLDENEYELOGO", /* GoldenEye Logo */
|
|
"PROP_WALLETBOND", /* Classified Folder w/ Royal Crest (Folder Menus) */
|
|
"PROP_MILTRUCK", /* Supply Truck */
|
|
"PROP_JEEP", /* Military Jeep */
|
|
"PROP_ARTIC", /* Red Prime Mover */
|
|
"PROP_HELICOPTER", /* Transport Helicopter w/ Natalya */
|
|
"PROP_TIGER", /* Pirate Euro Chopper */
|
|
"PROP_MILCOPTER", /* Hound Helicopter */
|
|
"PROP_HIND", /* Soviet Camouflage Chopper */
|
|
"PROP_ARTICTRAILER", /* Black Trailer */
|
|
"PROP_MOTORBIKE", /* Motorbike */
|
|
"PROP_TANK", /* Tank */
|
|
"PROP_APC", /* Armored Personnel Carrier */
|
|
"PROP_SPEEDBOAT", /* Speedboat */
|
|
"PROP_PLANE", /* Aeroplane */
|
|
"PROP_GUN_RUNWAY1", /* Heavy Gun Emplacement */
|
|
"PROP_SAFEDOOR", /* Safe Door */
|
|
"PROP_KEY_HOLDER", /* Key Rack */
|
|
"PROP_HATCHSEVX", /* Grating (Ventshaft Hatch) */
|
|
"PROP_SEVDISH", /* Satellite Dish (Severnaya) */
|
|
"PROP_ARCHSECDOOR1", /* Archives Moving Wall (Dark) */
|
|
"PROP_ARCHSECDOOR2", /* Archives Moving Wall (Light) */
|
|
"PROP_GROUNDGUN", /* Free Standing Drone Gun */
|
|
"PROP_TRAINEXTDOOR", /* Train Exterior Door */
|
|
"PROP_CARBMW", /* White Car #1 (BMW) */
|
|
"PROP_CARESCORT", /* White Car #2 (Escort) */
|
|
"PROP_CARGOLF", /* White Car #3 (Golf) */
|
|
"PROP_CARWEIRD", /* Red Car (Cadillac) */
|
|
"PROP_CARZIL", /* Ourumov's Car (ZIL) */
|
|
"PROP_SHUTTLE_DOOR_L", /* Exhaust Bay Doors", Left Side */
|
|
"PROP_SHUTTLE_DOOR_R", /* Exhaust Bay Doors", Right Side */
|
|
"PROP_DEPOT_GATE_ENTRY", /* Metallic Gate w/ Red Star */
|
|
"PROP_DEPOT_DOOR_STEEL", /* Rusty Door w/ Handle (Lo-Res) */
|
|
"PROP_GLASSWARE2", /* Beaker w/ Blue Topper */
|
|
"PROP_GLASSWARE3", /* Erlenmeyer Flask */
|
|
"PROP_GLASSWARE4", /* Set of Five Beakers */
|
|
"PROP_LANDMINE", /* Land Mine */
|
|
"PROP_PLANT1", /* Jungle Plant", Withered and Dying */
|
|
"PROP_PLANT11", /* Jungle Plant", Turning Colour */
|
|
"PROP_PLANT2", /* Jungle Plant", Healthy and Thick */
|
|
"PROP_PLANT3", /* Jungle Plant", Tall Leaves */
|
|
"PROP_JUNGLE5_TREE", /* Jungle Tree", Moss Covered */
|
|
"PROP_LEGALPAGE", /* GoldenEye Certification Screen */
|
|
"PROP_ST_PETE_ROOM_1I", /* Roads and Buildings #1 (stretch of road) */
|
|
"PROP_ST_PETE_ROOM_2I", /* Roads and Buildings #2 (stretch of road) */
|
|
"PROP_ST_PETE_ROOM_3T", /* Roads and Buildings #3 (intersection) */
|
|
"PROP_ST_PETE_ROOM_5C", /* Roads and Buildings #4 (street corner) */
|
|
"PROP_ST_PETE_ROOM_6C", /* Roads and Buildings #5 (street corner) */
|
|
"PROP_DOOR_ROLLERTRAIN", /* Roller Door */
|
|
"PROP_DOOR_WIN", /* Glass Sliding Door (Aztec) */
|
|
"PROP_DOOR_AZTEC", /* Stone Sliding Door (Aztec) */
|
|
"PROP_SHUTTLE", /* Moonraker Shuttle */
|
|
"PROP_DOOR_AZT_DESK", /* Boardroom Table (Aztec Exhaust Bay) */
|
|
"PROP_DOOR_AZT_DESK_TOP", /* Boardroom Table Extension (Aztec Exhaust Bay) */
|
|
"PROP_DOOR_AZT_CHAIR", /* Boardroom Chair (Aztec Exhaust Bay) */
|
|
"PROP_DOOR_MF", /* Mainframe Door */
|
|
"PROP_FLAG", /* Flag Tag Token */
|
|
"PROP_BARRICADE", /* Road Barricade */
|
|
"PROP_MODEMBOX", /* Covert Modem Connection Screen */
|
|
"PROP_DOORPANEL", /* Sliding Door Activation Switch */
|
|
"PROP_DOORCONSOLE", /* Console w/ Activation Light */
|
|
"PROP_CHRTESTTUBE", /* Glass Test Tube */
|
|
"PROP_BOLLARD", /* Bollard */
|
|
};
|
|
|
|
char *CAMERAMODE_ToString[] = {
|
|
"CAMERAMODE_NONE",
|
|
"CAMERAMODE_INTRO",
|
|
"CAMERAMODE_FADESWIRL",
|
|
"CAMERAMODE_SWIRL",
|
|
"CAMERAMODE_FP",
|
|
"CAMERAMODE_DEATH_CAM_SP",
|
|
"CAMERAMODE_DEATH_CAM_MP",
|
|
"CAMERAMODE_POSEND",
|
|
"CAMERAMODE_FP_NOINPUT",
|
|
"CAMERAMODE_MP",
|
|
"CAMERAMODE_FADE_TO_TITLE",
|
|
};
|
|
|
|
char *INTRO_TYPE_ToString[] = {
|
|
"INTROTYPE_SPAWN",
|
|
"INTROTYPE_ITEM",
|
|
"INTROTYPE_AMMO",
|
|
"INTROTYPE_SWIRL",
|
|
"INTROTYPE_ANIM",
|
|
"INTROTYPE_CUFF",
|
|
"INTROTYPE_CAMERA",
|
|
"INTROTYPE_WATCH",
|
|
"INTROTYPE_CREDITS",
|
|
"INTROTYPE_END",
|
|
};
|
|
|
|
char *MISSION_STATE_IDS_ToString[] = {
|
|
"MISSION_STATE_0",
|
|
"MISSION_STATE_1",
|
|
"MISSION_STATE_2",
|
|
"MISSION_STATE_3",
|
|
"MISSION_STATE_4",
|
|
"MISSION_STATE_5",
|
|
"MISSION_STATE_6"};
|
|
|
|
char *OBJECTIVESTATUS_ToString[] = {
|
|
"OBJECTIVESTATUS_INCOMPLETE",
|
|
"OBJECTIVESTATUS_COMPLETE",
|
|
"OBJECTIVESTATUS_FAILED"};
|
|
|
|
char *GAILIST_ToString[] = {
|
|
"GAILIST_AIM_AT_BOND",
|
|
"GAILIST_DEAD_AI",
|
|
"GAILIST_STANDARD_GUARD",
|
|
"GAILIST_PLAY_IDLE_ANIMATION",
|
|
"GAILIST_BASH_KEYBOARD",
|
|
"GAILIST_SIMPLE_GUARD_DEAF",
|
|
"GAILIST_ATTACK_BOND",
|
|
"GAILIST_SIMPLE_GUARD",
|
|
"GAILIST_RUN_TO_BOND",
|
|
"GAILIST_SIMPLE_GUARD_ALARM_RAISER",
|
|
"GAILIST_STARTLE_AND_RUN_TO_BOND",
|
|
"GAILIST_TRY_CLONE_SEND_OR_RUN_TO_BOND",
|
|
"GAILIST_STANDARD_CLONE",
|
|
"GAILIST_PERSISTENTLY_CHASE_AND_ATTACK_BOND",
|
|
"GAILIST_WAIT_ONE_SECOND",
|
|
"GAILIST_END_LEVEL",
|
|
"GAILIST_DRAW_TT33_AND_ATTCK_BOND",
|
|
"GAILIST_REMOVE_CHR"};
|
|
|
|
char *LEVELID_ToString[] = {
|
|
"LEVELID_NONE",
|
|
"LEVELID_DEFAULT",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"LEVELID_BUNKER1",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"LEVELID_SILO",
|
|
"",
|
|
"LEVELID_STATUE",
|
|
"LEVELID_CONTROL",
|
|
"LEVELID_ARCHIVES",
|
|
"LEVELID_TRAIN",
|
|
"LEVELID_FRIGATE",
|
|
"LEVELID_BUNKER2",
|
|
"LEVELID_AZTEC",
|
|
"LEVELID_STREETS",
|
|
"LEVELID_DEPOT",
|
|
"LEVELID_COMPLEX",
|
|
"LEVELID_EGYPT",
|
|
"LEVELID_DAM",
|
|
"LEVELID_FACILITY",
|
|
"LEVELID_RUNWAY",
|
|
"LEVELID_SURFACE",
|
|
"LEVELID_JUNGLE",
|
|
"LEVELID_TEMPLE",
|
|
"LEVELID_CAVERNS",
|
|
"LEVELID_CITADEL",
|
|
"LEVELID_CRADLE",
|
|
"LEVELID_SHO",
|
|
"LEVELID_SURFACE2",
|
|
"LEVELID_ELD",
|
|
"LEVELID_BASEMENT",
|
|
"LEVELID_STACK",
|
|
"LEVELID_LUE",
|
|
"LEVELID_LIBRARY",
|
|
"LEVELID_RIT",
|
|
"LEVELID_CAVES",
|
|
"LEVELID_EAR",
|
|
"LEVELID_LEE",
|
|
"LEVELID_LIP",
|
|
"LEVELID_CUBA",
|
|
"LEVELID_WAX",
|
|
"LEVELID_PAM",
|
|
"LEVELID_MAX",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"LEVELID_TITLE"};
|
|
|
|
char *TEXTBANK_LEVEL_INDEX_ToString[] =
|
|
{
|
|
"LNULL", /* Null (unused) */
|
|
"LAME", /* Library (multi) */
|
|
"LARCH", /* Archives */
|
|
"LARK", /* Facility */
|
|
"LASH", /* Stack (multi) */
|
|
"LAZT", /* Aztec */
|
|
"LCAT", /* Citadel (multi) */
|
|
"LCAVE", /* Caverns */
|
|
"LAREC", /* Control */
|
|
"LCRAD", /* Cradle */
|
|
"LCRYP", /* Egypt */
|
|
"LDAM", /* Dam */
|
|
"LDEPO", /* Depot */
|
|
"LDEST", /* Frigate */
|
|
"LDISH", /* Temple (multi) */
|
|
"LEAR", /* Ear (unused) */
|
|
"LELD", /* Eld (unused) */
|
|
"LIMP", /* Basement (multi) */
|
|
"LJUN", /* Jungle */
|
|
"LLEE", /* Lee (unused) */
|
|
"LLEN", /* Cuba */
|
|
"LLIP", /* Lip (unused) */
|
|
"LLUE", /* Lue (unused) */
|
|
"LOAT", /* Cave (multi) */
|
|
"LPAM", /* Pam (unused) */
|
|
"LPETE", /* Streets */
|
|
"LREF", /* Complex (multi) */
|
|
"LRIT", /* Rit (unused) */
|
|
"LRUN", /* Runway */
|
|
"LSEVB", /* Bunker 2 */
|
|
"LSEV", /* Bunker 1 */
|
|
"LSEVX", /* Surface 1 */
|
|
"LSEVXB", /* Surface 2 */
|
|
"LSHO", /* Sho (unused) */
|
|
"LSILO", /* Silo */
|
|
"LSTAT", /* Statue */
|
|
"LTRA", /* Train */
|
|
"LWAX", /* Wax (unused) */
|
|
"LGUN", /* Guns */
|
|
"LTITLE", /* Stage and menu titles */
|
|
"LMPMENU", /* Multi menus */
|
|
"LPROPOBJ", /* In-game pickups */
|
|
"LMPWEAPONS", /* Multi weapon select */
|
|
"LOPTIONS", /* Solo in-game menus */
|
|
"LMISC" /* Cheat options */
|
|
};
|
|
#pragma region lengths
|
|
#define AI_GotoNext_LENGTH 2
|
|
#define AI_GotoFirst_LENGTH 2
|
|
#define AI_Label_LENGTH 2
|
|
#define AI_Yield_LENGTH 1
|
|
#define AI_EndList_LENGTH /*canonical name*/ 1
|
|
#define AI_SetChrAiList_LENGTH 4
|
|
#define AI_SetReturnAiList_LENGTH 3
|
|
#define AI_Return_LENGTH 1
|
|
#define AI_Stop_LENGTH 1
|
|
#define AI_Kneel_LENGTH 1
|
|
#define AI_PlayAnimation_LENGTH 9
|
|
#define AI_IFPlayingAnimation_LENGTH 2
|
|
#define AI_PointAtBond_LENGTH 1
|
|
#define AI_LookSurprised_LENGTH 1
|
|
#define AI_TRYSidestepping_LENGTH 2
|
|
#define AI_TRYSideHopping_LENGTH 2
|
|
#define AI_TRYSideRunning_LENGTH 2
|
|
#define AI_TRYFiringWalk_LENGTH 2
|
|
#define AI_TRYFiringRun_LENGTH 2
|
|
#define AI_TRYFiringRoll_LENGTH 2
|
|
#define AI_TRYFireOrAimAtTarget_LENGTH 6
|
|
#define AI_TRYFireOrAimAtTargetKneel_LENGTH 6
|
|
#define AI_IFImFiring_LENGTH 2
|
|
#define AI_IFImFiringAndLockedForward_LENGTH 2
|
|
#define AI_TRYFireOrAimAtTargetUpdate_LENGTH 6
|
|
#define AI_TRYFacingTarget_LENGTH 6
|
|
#define AI_HitChrWithItem_LENGTH 4
|
|
#define AI_ChrHitChr_LENGTH 4
|
|
#define AI_TRYThrowingGrenade_LENGTH 2
|
|
#define AI_TRYDroppingItem_LENGTH 5
|
|
#define AI_RunToPad_LENGTH 3
|
|
#define AI_RunToPadPreset_LENGTH 1
|
|
#define AI_WalkToPad_LENGTH 3
|
|
#define AI_SprintToPad_LENGTH 3
|
|
#define AI_StartPatrol_LENGTH 2
|
|
#define AI_Surrender_LENGTH 1
|
|
#define AI_RemoveMe_LENGTH 1
|
|
#define AI_ChrRemoveInstant_LENGTH 2
|
|
#define AI_TRYTriggeringAlarmAtPad_LENGTH 4
|
|
#define AI_AlarmOn_LENGTH 1
|
|
#define AI_AlarmOff_LENGTH 1
|
|
#define AI_TRYRunFromBond_LENGTH 2
|
|
#define AI_TRYRunToBond_LENGTH 2
|
|
#define AI_TRYWalkToBond_LENGTH 2
|
|
#define AI_TRYSprintToBond_LENGTH 2
|
|
#define AI_TRYFindCover_LENGTH 2
|
|
#define AI_TRYRunToChr_LENGTH 3
|
|
#define AI_TRYWalkToChr_LENGTH 3
|
|
#define AI_TRYSprintToChr_LENGTH 3
|
|
#define AI_IFImOnPatrolOrStopped_LENGTH 2
|
|
#define AI_IFChrDyingOrDead_LENGTH 3
|
|
#define AI_IFChrDoesNotExist_LENGTH 3
|
|
#define AI_IFISeeBond_LENGTH 2
|
|
#define AI_SetNewRandom_LENGTH 1
|
|
#define AI_IFRandomLessThan_LENGTH 3
|
|
#define AI_IFRandomGreaterThan_LENGTH 3
|
|
#define AI_IFICanHearAlarm_LENGTH 2
|
|
#define AI_IFAlarmIsOn_LENGTH 2
|
|
#define AI_IFGasIsLeaking_LENGTH 2
|
|
#define AI_IFIHeardBond_LENGTH 2
|
|
#define AI_IFISeeSomeoneShot_LENGTH 2
|
|
#define AI_IFISeeSomeoneDie_LENGTH 2
|
|
#define AI_IFICouldSeeBond_LENGTH 2
|
|
#define AI_IFICouldSeeBondsStan_LENGTH 2
|
|
#define AI_IFIWasShotRecently_LENGTH 2
|
|
#define AI_IFIHeardBondRecently_LENGTH 2
|
|
#define AI_IFImInRoomWithChr_LENGTH 3
|
|
#define AI_IFIveNotBeenSeen_LENGTH 2
|
|
#define AI_IFImOnScreen_LENGTH 2
|
|
#define AI_IFMyRoomIsOnScreen_LENGTH 2
|
|
#define AI_IFRoomWithPadIsOnScreen_LENGTH 4
|
|
#define AI_IFImTargetedByBond_LENGTH 2
|
|
#define AI_IFBondMissedMe_LENGTH 2
|
|
#define AI_IFMyAngleToBondLessThan_LENGTH 3
|
|
#define AI_IFMyAngleToBondGreaterThan_LENGTH 3
|
|
#define AI_IFMyAngleFromBondLessThan_LENGTH 3
|
|
#define AI_IFMyAngleFromBondGreaterThan_LENGTH 3
|
|
#define AI_IFMyDistanceToBondLessThanDecimeter_LENGTH 4
|
|
#define AI_IFMyDistanceToBondGreaterThanDecimeter_LENGTH 4
|
|
#define AI_IFChrDistanceToPadLessThanDecimeter_LENGTH 7
|
|
#define AI_IFChrDistanceToPadGreaterThanDecimeter_LENGTH 7
|
|
#define AI_IFMyDistanceToChrLessThanDecimeter_LENGTH 5
|
|
#define AI_IFMyDistanceToChrGreaterThanDecimeter_LENGTH 5
|
|
#define AI_TRYSettingMyPresetToChrWithinDistanceDecimeter_LENGTH 4
|
|
#define AI_IFBondDistanceToPadLessThanDecimeter_LENGTH 6
|
|
#define AI_IFBondDistanceToPadGreaterThanDecimeter_LENGTH 6
|
|
#define AI_IFChrInRoomWithPad_LENGTH 5
|
|
#define AI_IFBondInRoomWithPad_LENGTH 4
|
|
#define AI_IFBondCollectedObject_LENGTH 3
|
|
#define AI_IFKeyDropped_LENGTH 3
|
|
#define AI_IFItemIsAttachedToObject_LENGTH 4
|
|
#define AI_IFBondHasItemEquipped_LENGTH 3
|
|
#define AI_IFObjectExists_LENGTH 3
|
|
#define AI_IFObjectNotDestroyed_LENGTH 3
|
|
#define AI_IFObjectWasActivated_LENGTH 3
|
|
#define AI_IFBondUsedGadgetOnObject_LENGTH 3
|
|
#define AI_ActivateObject_LENGTH 2
|
|
#define AI_DestroyObject_LENGTH 2
|
|
#define AI_DropObject_LENGTH 2
|
|
#define AI_ChrDropAllConcealedItems_LENGTH 2
|
|
#define AI_ChrDropAllHeldItems_LENGTH 2
|
|
#define AI_BondCollectObject_LENGTH 2
|
|
#define AI_ChrEquipObject_LENGTH 3
|
|
#define AI_MoveObject_LENGTH 4
|
|
#define AI_DoorOpen_LENGTH 2
|
|
#define AI_DoorClose_LENGTH 2
|
|
#define AI_IFDoorStateEqual_LENGTH 4
|
|
#define AI_IFDoorHasBeenOpenedBefore_LENGTH 3
|
|
#define AI_DoorSetLock_LENGTH 3
|
|
#define AI_DoorUnsetLock_LENGTH 3
|
|
#define AI_IFDoorLockEqual_LENGTH 4
|
|
#define AI_IFObjectiveNumComplete_LENGTH 3
|
|
#define AI_TRYUnknown6e_LENGTH 3
|
|
#define AI_TRYUnknown6f_LENGTH 3
|
|
#define AI_IFGameDifficultyLessThan_LENGTH 3
|
|
#define AI_IFGameDifficultyGreaterThan_LENGTH 3
|
|
#define AI_IFMissionTimeLessThan_LENGTH 4
|
|
#define AI_IFMissionTimeGreaterThan_LENGTH 4
|
|
#define AI_IFSystemPowerTimeLessThan_LENGTH 4
|
|
#define AI_IFSystemPowerTimeGreaterThan_LENGTH 4
|
|
#define AI_IFLevelIdLessThan_LENGTH 3
|
|
#define AI_IFLevelIdGreaterThan_LENGTH 3
|
|
#define AI_IFMyNumArghsLessThan_LENGTH 3
|
|
#define AI_IFMyNumArghsGreaterThan_LENGTH 3
|
|
#define AI_IFMyNumCloseArghsLessThan_LENGTH 3
|
|
#define AI_IFMyNumCloseArghsGreaterThan_LENGTH 3
|
|
#define AI_IFChrHealthLessThan_LENGTH 4
|
|
#define AI_IFChrHealthGreaterThan_LENGTH 4
|
|
#define AI_IFChrWasDamagedSinceLastCheck_LENGTH 3
|
|
#define AI_IFBondHealthLessThan_LENGTH 3
|
|
#define AI_IFBondHealthGreaterThan_LENGTH 3
|
|
#define AI_SetMyMorale_LENGTH 2
|
|
#define AI_AddToMyMorale_LENGTH 2
|
|
#define AI_SubtractFromMyMorale_LENGTH 2
|
|
#define AI_IFMyMoraleLessThan_LENGTH 3
|
|
#define AI_IFMyMoraleLessThanRandom_LENGTH 2
|
|
#define AI_SetMyAlertness_LENGTH 2
|
|
#define AI_AddToMyAlertness_LENGTH 2
|
|
#define AI_SubtractFromMyAlertness_LENGTH 2
|
|
#define AI_IFMyAlertnessLessThan_LENGTH 3
|
|
#define AI_IFMyAlertnessLessThanRandom_LENGTH 2
|
|
#define AI_SetMyHearingScale_LENGTH 3
|
|
#define AI_SetMyVisionRange_LENGTH 2
|
|
#define AI_SetMyGrenadeProbability_LENGTH 2
|
|
#define AI_SetMyChrNum_LENGTH 2
|
|
#define AI_SetMyHealthTotal_LENGTH 3
|
|
#define AI_SetMyArmour_LENGTH 3
|
|
#define AI_SetMySpeedRating_LENGTH 2
|
|
#define AI_SetMyArghRating_LENGTH 2
|
|
#define AI_SetMyAccuracyRating_LENGTH 2
|
|
#define AI_SetMyFlags2_LENGTH 2
|
|
#define AI_UnsetMyFlags2_LENGTH 2
|
|
#define AI_IFMyFlags2Has_LENGTH 3
|
|
#define AI_SetChrBitfield_LENGTH 3
|
|
#define AI_UnsetChrBitfield_LENGTH 3
|
|
#define AI_IFChrBitfieldHas_LENGTH 4
|
|
#define AI_SetObjectiveBitfield_LENGTH 5
|
|
#define AI_UnsetObjectiveBitfield_LENGTH 5
|
|
#define AI_IFObjectiveBitfieldHas_LENGTH 6
|
|
#define AI_SetMychrflags_LENGTH 5
|
|
#define AI_UnsetMychrflags_LENGTH 5
|
|
#define AI_IFMychrflagsHas_LENGTH 6
|
|
#define AI_SetChrchrflags_LENGTH 6
|
|
#define AI_UnsetChrchrflags_LENGTH 6
|
|
#define AI_IFChrchrflagsHas_LENGTH 7
|
|
#define AI_SetObjectFlags_LENGTH 6
|
|
#define AI_UnsetObjectFlags_LENGTH 6
|
|
#define AI_IFObjectFlagsHas_LENGTH 7
|
|
#define AI_SetObjectFlags2_LENGTH 6
|
|
#define AI_UnsetObjectFlags2_LENGTH 6
|
|
#define AI_IFObjectFlags2Has_LENGTH 7
|
|
#define AI_SetMyChrPreset_LENGTH 2
|
|
#define AI_SetChrChrPreset_LENGTH 3
|
|
#define AI_SetMyPadPreset_LENGTH 3
|
|
#define AI_SetChrPadPreset_LENGTH 4
|
|
#define AI_MyTimerStart_LENGTH 1
|
|
#define AI_MyTimerReset_LENGTH 1
|
|
#define AI_MyTimerPause_LENGTH 1
|
|
#define AI_MyTimerResume_LENGTH 1
|
|
#define AI_IFMyTimerIsNotRunning_LENGTH 2
|
|
#define AI_IFMyTimerLessThanTicks_LENGTH 5
|
|
#define AI_IFMyTimerGreaterThanTicks_LENGTH 5
|
|
#define AI_HudCountdownShow_LENGTH 1
|
|
#define AI_HudCountdownHide_LENGTH 1
|
|
#define AI_HudCountdownSet_LENGTH 3
|
|
#define AI_HudCountdownStop_LENGTH 1
|
|
#define AI_HudCountdownStart_LENGTH 1
|
|
#define AI_IFHudCountdownIsNotRunning_LENGTH 2
|
|
#define AI_IFHudCountdownLessThan_LENGTH 4
|
|
#define AI_IFHudCountdownGreaterThan_LENGTH 4
|
|
#define AI_TRYSpawningChrAtPad_LENGTH 12
|
|
#define AI_TRYSpawningChrNextToChr_LENGTH 11
|
|
#define AI_TRYGiveMeItem_LENGTH 9
|
|
#define AI_TRYGiveMeHat_LENGTH 8
|
|
#define AI_TRYCloningChr_LENGTH 5
|
|
#define AI_TextPrintBottom_LENGTH 3
|
|
#define AI_TextPrintTop_LENGTH 3
|
|
#define AI_SfxPlay_LENGTH 4
|
|
#define AI_SfxEmitFromObject_LENGTH 5
|
|
#define AI_SfxEmitFromPad_LENGTH 6
|
|
#define AI_SfxSetChannelVolume_LENGTH 6
|
|
#define AI_SfxFadeChannelVolume_LENGTH 6
|
|
#define AI_SfxStopChannel_LENGTH 2
|
|
#define AI_IFSfxChannelVolumeLessThan_LENGTH 5
|
|
#define AI_VehicleStartPath_LENGTH 2
|
|
#define AI_VehicleSpeed_LENGTH 5
|
|
#define AI_AircraftRotorSpeed_LENGTH 5
|
|
#define AI_IFCameraIsInIntro_LENGTH 2
|
|
#define AI_IFCameraIsInBondSwirl_LENGTH 2
|
|
#define AI_TvChangeScreenBank_LENGTH 4
|
|
#define AI_IFBondInTank_LENGTH /*canonical name*/ 2
|
|
#define AI_EndLevel_LENGTH /* canonical name */ 1
|
|
#define AI_CameraReturnToBond_LENGTH 1
|
|
#define AI_CameraLookAtBondFromPad_LENGTH 3
|
|
#define AI_CameraSwitch_LENGTH 6
|
|
#define AI_IFBondYPosLessThan_LENGTH 4
|
|
#define AI_BondDisableControl_LENGTH 2
|
|
#define AI_BondEnableControl_LENGTH 1
|
|
#define AI_TRYTeleportingChrToPad_LENGTH 5
|
|
#define AI_ScreenFadeToBlack_LENGTH 1
|
|
#define AI_ScreenFadeFromBlack_LENGTH 1
|
|
#define AI_IFScreenFadeCompleted_LENGTH 2
|
|
#define AI_HideAllChrs_LENGTH 1
|
|
#define AI_ShowAllChrs_LENGTH 1
|
|
#define AI_DoorOpenInstant_LENGTH 2
|
|
#define AI_ChrRemoveItemInHand_LENGTH 3
|
|
#define AI_IfNumberOfActivePlayersLessThan_LENGTH 3
|
|
#define AI_IFBondItemTotalAmmoLessThan_LENGTH 4
|
|
#define AI_BondEquipItem_LENGTH 2
|
|
#define AI_BondEquipItemCinema_LENGTH 2
|
|
#define AI_BondSetLockedVelocity_LENGTH 3
|
|
#define AI_IFObjectInRoomWithPad_LENGTH 5
|
|
#define AI_SwitchSky_LENGTH 1
|
|
#define AI_TriggerFadeAndExitLevelOnButtonPress_LENGTH 1
|
|
#define AI_IFBondIsDead_LENGTH 2
|
|
#define AI_BondDisableDamageAndPickups_LENGTH 1
|
|
#define AI_BondHideWeapons_LENGTH 1
|
|
#define AI_CameraOrbitPad_LENGTH 13
|
|
#define AI_CreditsRoll_LENGTH 1
|
|
#define AI_IFCreditsHasCompleted_LENGTH 2
|
|
#define AI_IFObjectiveAllCompleted_LENGTH 2
|
|
#define AI_IFFolderActorIsEqual_LENGTH 3
|
|
#define AI_IFBondDamageAndPickupsDisabled_LENGTH 2
|
|
#define AI_MusicPlaySlot_LENGTH 4
|
|
#define AI_MusicStopSlot_LENGTH 2
|
|
#define AI_TriggerExplosionsAroundBond_LENGTH 1
|
|
#define AI_IFKilledCiviliansGreaterThan_LENGTH 3
|
|
#define AI_IFChrWasShotSinceLastCheck_LENGTH 3
|
|
#define AI_BondKilledInAction_LENGTH 1
|
|
#define AI_RaiseArms_LENGTH 1
|
|
#define AI_GasLeakAndFadeFog_LENGTH 1
|
|
#define AI_ObjectRocketLaunch_LENGTH 2
|
|
#pragma endregion //w
|
|
|
|
int AI_CMD_LENGTHS_ToInt[] = {
|
|
AI_GotoNext_LENGTH,
|
|
AI_GotoFirst_LENGTH,
|
|
AI_Label_LENGTH,
|
|
AI_Yield_LENGTH,
|
|
AI_EndList_LENGTH,
|
|
AI_SetChrAiList_LENGTH,
|
|
AI_SetReturnAiList_LENGTH,
|
|
AI_Return_LENGTH,
|
|
AI_Stop_LENGTH,
|
|
AI_Kneel_LENGTH,
|
|
AI_PlayAnimation_LENGTH,
|
|
AI_IFPlayingAnimation_LENGTH,
|
|
AI_PointAtBond_LENGTH,
|
|
AI_LookSurprised_LENGTH,
|
|
AI_TRYSidestepping_LENGTH,
|
|
AI_TRYSideHopping_LENGTH,
|
|
AI_TRYSideRunning_LENGTH,
|
|
AI_TRYFiringWalk_LENGTH,
|
|
AI_TRYFiringRun_LENGTH,
|
|
AI_TRYFiringRoll_LENGTH,
|
|
AI_TRYFireOrAimAtTarget_LENGTH,
|
|
AI_TRYFireOrAimAtTargetKneel_LENGTH,
|
|
AI_TRYFireOrAimAtTargetUpdate_LENGTH,
|
|
AI_TRYFacingTarget_LENGTH,
|
|
AI_HitChrWithItem_LENGTH,
|
|
AI_ChrHitChr_LENGTH,
|
|
AI_TRYThrowingGrenade_LENGTH,
|
|
AI_TRYDroppingItem_LENGTH,
|
|
AI_RunToPad_LENGTH,
|
|
AI_RunToPadPreset_LENGTH,
|
|
AI_WalkToPad_LENGTH,
|
|
AI_SprintToPad_LENGTH,
|
|
AI_StartPatrol_LENGTH,
|
|
AI_Surrender_LENGTH,
|
|
AI_RemoveMe_LENGTH,
|
|
AI_ChrRemoveInstant_LENGTH,
|
|
AI_TRYTriggeringAlarmAtPad_LENGTH,
|
|
AI_AlarmOn_LENGTH,
|
|
AI_AlarmOff_LENGTH,
|
|
AI_TRYRunFromBond_LENGTH,
|
|
AI_TRYRunToBond_LENGTH,
|
|
AI_TRYWalkToBond_LENGTH,
|
|
AI_TRYSprintToBond_LENGTH,
|
|
AI_TRYFindCover_LENGTH,
|
|
AI_TRYRunToChr_LENGTH,
|
|
AI_TRYWalkToChr_LENGTH,
|
|
AI_TRYSprintToChr_LENGTH,
|
|
AI_IFImOnPatrolOrStopped_LENGTH,
|
|
AI_IFChrDyingOrDead_LENGTH,
|
|
AI_IFChrDoesNotExist_LENGTH,
|
|
AI_IFISeeBond_LENGTH,
|
|
AI_SetNewRandom_LENGTH,
|
|
AI_IFRandomLessThan_LENGTH,
|
|
AI_IFRandomGreaterThan_LENGTH,
|
|
AI_IFICanHearAlarm_LENGTH,
|
|
AI_IFAlarmIsOn_LENGTH,
|
|
AI_IFGasIsLeaking_LENGTH,
|
|
AI_IFIHeardBond_LENGTH,
|
|
AI_IFISeeSomeoneShot_LENGTH,
|
|
AI_IFISeeSomeoneDie_LENGTH,
|
|
AI_IFICouldSeeBond_LENGTH,
|
|
AI_IFICouldSeeBondsStan_LENGTH,
|
|
AI_IFIWasShotRecently_LENGTH,
|
|
AI_IFIHeardBondRecently_LENGTH,
|
|
AI_IFImInRoomWithChr_LENGTH,
|
|
AI_IFIveNotBeenSeen_LENGTH,
|
|
AI_IFImOnScreen_LENGTH,
|
|
AI_IFMyRoomIsOnScreen_LENGTH,
|
|
AI_IFRoomWithPadIsOnScreen_LENGTH,
|
|
AI_IFImTargetedByBond_LENGTH,
|
|
AI_IFBondMissedMe_LENGTH,
|
|
AI_IFMyAngleToBondLessThan_LENGTH,
|
|
AI_IFMyAngleToBondGreaterThan_LENGTH,
|
|
AI_IFMyAngleFromBondLessThan_LENGTH,
|
|
AI_IFMyAngleFromBondGreaterThan_LENGTH,
|
|
AI_IFMyDistanceToBondLessThanDecimeter_LENGTH,
|
|
AI_IFMyDistanceToBondGreaterThanDecimeter_LENGTH,
|
|
AI_IFChrDistanceToPadLessThanDecimeter_LENGTH,
|
|
AI_IFChrDistanceToPadGreaterThanDecimeter_LENGTH,
|
|
AI_IFMyDistanceToChrLessThanDecimeter_LENGTH,
|
|
AI_IFMyDistanceToChrGreaterThanDecimeter_LENGTH,
|
|
AI_TRYSettingMyPresetToChrWithinDistanceDecimeter_LENGTH,
|
|
AI_IFBondDistanceToPadLessThanDecimeter_LENGTH,
|
|
AI_IFBondDistanceToPadGreaterThanDecimeter_LENGTH,
|
|
AI_IFChrInRoomWithPad_LENGTH,
|
|
AI_IFBondInRoomWithPad_LENGTH,
|
|
AI_IFBondCollectedObject_LENGTH,
|
|
AI_IFKeyDropped_LENGTH,
|
|
AI_IFItemIsAttachedToObject_LENGTH,
|
|
AI_IFBondHasItemEquipped_LENGTH,
|
|
AI_IFObjectExists_LENGTH,
|
|
AI_IFObjectNotDestroyed_LENGTH,
|
|
AI_IFObjectWasActivated_LENGTH,
|
|
AI_IFBondUsedGadgetOnObject_LENGTH,
|
|
AI_ActivateObject_LENGTH,
|
|
AI_DestroyObject_LENGTH,
|
|
AI_DropObject_LENGTH,
|
|
AI_ChrDropAllConcealedItems_LENGTH,
|
|
AI_ChrDropAllHeldItems_LENGTH,
|
|
AI_BondCollectObject_LENGTH,
|
|
AI_ChrEquipObject_LENGTH,
|
|
AI_MoveObject_LENGTH,
|
|
AI_DoorOpen_LENGTH,
|
|
AI_DoorClose_LENGTH,
|
|
AI_IFDoorStateEqual_LENGTH,
|
|
AI_IFDoorHasBeenOpenedBefore_LENGTH,
|
|
AI_DoorSetLock_LENGTH,
|
|
AI_DoorUnsetLock_LENGTH,
|
|
AI_IFDoorLockEqual_LENGTH,
|
|
AI_IFObjectiveNumComplete_LENGTH,
|
|
AI_TRYUnknown6e_LENGTH,
|
|
AI_TRYUnknown6f_LENGTH,
|
|
AI_IFGameDifficultyLessThan_LENGTH,
|
|
AI_IFGameDifficultyGreaterThan_LENGTH,
|
|
AI_IFMissionTimeLessThan_LENGTH,
|
|
AI_IFMissionTimeGreaterThan_LENGTH,
|
|
AI_IFSystemPowerTimeLessThan_LENGTH,
|
|
AI_IFSystemPowerTimeGreaterThan_LENGTH,
|
|
AI_IFLevelIdLessThan_LENGTH,
|
|
AI_IFLevelIdGreaterThan_LENGTH,
|
|
AI_IFMyNumArghsLessThan_LENGTH,
|
|
AI_IFMyNumArghsGreaterThan_LENGTH,
|
|
AI_IFMyNumCloseArghsLessThan_LENGTH,
|
|
AI_IFMyNumCloseArghsGreaterThan_LENGTH,
|
|
AI_IFChrHealthLessThan_LENGTH,
|
|
AI_IFChrHealthGreaterThan_LENGTH,
|
|
AI_IFChrWasDamagedSinceLastCheck_LENGTH,
|
|
AI_IFBondHealthLessThan_LENGTH,
|
|
AI_IFBondHealthGreaterThan_LENGTH,
|
|
AI_SetMyMorale_LENGTH,
|
|
AI_AddToMyMorale_LENGTH,
|
|
AI_SubtractFromMyMorale_LENGTH,
|
|
AI_IFMyMoraleLessThan_LENGTH,
|
|
AI_IFMyMoraleLessThanRandom_LENGTH,
|
|
AI_SetMyAlertness_LENGTH,
|
|
AI_AddToMyAlertness_LENGTH,
|
|
AI_SubtractFromMyAlertness_LENGTH,
|
|
AI_IFMyAlertnessLessThan_LENGTH,
|
|
AI_IFMyAlertnessLessThanRandom_LENGTH,
|
|
AI_SetMyHearingScale_LENGTH,
|
|
AI_SetMyVisionRange_LENGTH,
|
|
AI_SetMyGrenadeProbability_LENGTH,
|
|
AI_SetMyChrNum_LENGTH,
|
|
AI_SetMyHealthTotal_LENGTH,
|
|
AI_SetMyArmour_LENGTH,
|
|
AI_SetMySpeedRating_LENGTH,
|
|
AI_SetMyArghRating_LENGTH,
|
|
AI_SetMyAccuracyRating_LENGTH,
|
|
AI_SetMyFlags2_LENGTH,
|
|
AI_UnsetMyFlags2_LENGTH,
|
|
AI_IFMyFlags2Has_LENGTH,
|
|
AI_SetChrBitfield_LENGTH,
|
|
AI_UnsetChrBitfield_LENGTH,
|
|
AI_IFChrBitfieldHas_LENGTH,
|
|
AI_SetObjectiveBitfield_LENGTH,
|
|
AI_UnsetObjectiveBitfield_LENGTH,
|
|
AI_IFObjectiveBitfieldHas_LENGTH,
|
|
AI_SetMychrflags_LENGTH,
|
|
AI_UnsetMychrflags_LENGTH,
|
|
AI_IFMychrflagsHas_LENGTH,
|
|
AI_SetChrchrflags_LENGTH,
|
|
AI_UnsetChrchrflags_LENGTH,
|
|
AI_IFChrchrflagsHas_LENGTH,
|
|
AI_SetObjectFlags_LENGTH,
|
|
AI_UnsetObjectFlags_LENGTH,
|
|
AI_IFObjectFlagsHas_LENGTH,
|
|
AI_SetObjectFlags2_LENGTH,
|
|
AI_UnsetObjectFlags2_LENGTH,
|
|
AI_IFObjectFlags2Has_LENGTH,
|
|
AI_SetMyChrPreset_LENGTH,
|
|
AI_SetChrChrPreset_LENGTH,
|
|
AI_SetMyPadPreset_LENGTH,
|
|
AI_SetChrPadPreset_LENGTH,
|
|
0,
|
|
AI_MyTimerStart_LENGTH,
|
|
AI_MyTimerReset_LENGTH,
|
|
AI_MyTimerPause_LENGTH,
|
|
AI_MyTimerResume_LENGTH,
|
|
AI_IFMyTimerIsNotRunning_LENGTH,
|
|
AI_IFMyTimerLessThanTicks_LENGTH,
|
|
AI_IFMyTimerGreaterThanTicks_LENGTH,
|
|
AI_HudCountdownShow_LENGTH,
|
|
AI_HudCountdownHide_LENGTH,
|
|
AI_HudCountdownSet_LENGTH,
|
|
AI_HudCountdownStop_LENGTH,
|
|
AI_HudCountdownStart_LENGTH,
|
|
AI_IFHudCountdownIsNotRunning_LENGTH,
|
|
AI_IFHudCountdownLessThan_LENGTH,
|
|
AI_IFHudCountdownGreaterThan_LENGTH,
|
|
AI_TRYSpawningChrAtPad_LENGTH,
|
|
AI_TRYSpawningChrNextToChr_LENGTH,
|
|
AI_TRYGiveMeItem_LENGTH,
|
|
AI_TRYGiveMeHat_LENGTH,
|
|
AI_TRYCloningChr_LENGTH,
|
|
AI_TextPrintBottom_LENGTH,
|
|
AI_TextPrintTop_LENGTH,
|
|
AI_SfxPlay_LENGTH,
|
|
AI_SfxEmitFromObject_LENGTH,
|
|
AI_SfxEmitFromPad_LENGTH,
|
|
AI_SfxSetChannelVolume_LENGTH,
|
|
AI_SfxFadeChannelVolume_LENGTH,
|
|
AI_SfxStopChannel_LENGTH,
|
|
AI_IFSfxChannelVolumeLessThan_LENGTH,
|
|
AI_VehicleStartPath_LENGTH,
|
|
AI_VehicleSpeed_LENGTH,
|
|
AI_AircraftRotorSpeed_LENGTH,
|
|
AI_IFCameraIsInIntro_LENGTH,
|
|
AI_IFCameraIsInBondSwirl_LENGTH,
|
|
AI_TvChangeScreenBank_LENGTH,
|
|
AI_IFBondInTank_LENGTH,
|
|
AI_EndLevel_LENGTH,
|
|
AI_CameraReturnToBond_LENGTH,
|
|
AI_CameraLookAtBondFromPad_LENGTH,
|
|
AI_CameraSwitch_LENGTH,
|
|
AI_IFBondYPosLessThan_LENGTH,
|
|
AI_BondDisableControl_LENGTH,
|
|
AI_BondEnableControl_LENGTH,
|
|
AI_TRYTeleportingChrToPad_LENGTH,
|
|
AI_ScreenFadeToBlack_LENGTH,
|
|
AI_ScreenFadeFromBlack_LENGTH,
|
|
AI_IFScreenFadeCompleted_LENGTH,
|
|
AI_HideAllChrs_LENGTH,
|
|
AI_ShowAllChrs_LENGTH,
|
|
AI_DoorOpenInstant_LENGTH,
|
|
AI_ChrRemoveItemInHand_LENGTH,
|
|
AI_IfNumberOfActivePlayersLessThan_LENGTH,
|
|
AI_IFBondItemTotalAmmoLessThan_LENGTH,
|
|
AI_BondEquipItem_LENGTH,
|
|
AI_BondEquipItemCinema_LENGTH,
|
|
AI_BondSetLockedVelocity_LENGTH,
|
|
AI_IFObjectInRoomWithPad_LENGTH,
|
|
AI_IFImFiringAndLockedForward_LENGTH,
|
|
AI_IFImFiring_LENGTH,
|
|
AI_SwitchSky_LENGTH,
|
|
AI_TriggerFadeAndExitLevelOnButtonPress_LENGTH,
|
|
AI_IFBondIsDead_LENGTH,
|
|
AI_BondDisableDamageAndPickups_LENGTH,
|
|
AI_BondHideWeapons_LENGTH,
|
|
AI_CameraOrbitPad_LENGTH,
|
|
AI_CreditsRoll_LENGTH,
|
|
AI_IFCreditsHasCompleted_LENGTH,
|
|
AI_IFObjectiveAllCompleted_LENGTH,
|
|
AI_IFFolderActorIsEqual_LENGTH,
|
|
AI_IFBondDamageAndPickupsDisabled_LENGTH,
|
|
AI_MusicPlaySlot_LENGTH,
|
|
AI_MusicStopSlot_LENGTH,
|
|
AI_TriggerExplosionsAroundBond_LENGTH,
|
|
AI_IFKilledCiviliansGreaterThan_LENGTH,
|
|
AI_IFChrWasShotSinceLastCheck_LENGTH,
|
|
AI_BondKilledInAction_LENGTH,
|
|
AI_RaiseArms_LENGTH,
|
|
AI_GasLeakAndFadeFog_LENGTH,
|
|
AI_ObjectRocketLaunch_LENGTH};
|
|
|
|
typedef enum AI_CMD
|
|
{
|
|
AI_GotoNext,
|
|
AI_GotoFirst,
|
|
AI_Label,
|
|
AI_Yield,
|
|
AI_EndList,
|
|
AI_SetChrAiList,
|
|
AI_SetReturnAiList,
|
|
AI_Return,
|
|
AI_Stop,
|
|
AI_Kneel,
|
|
AI_PlayAnimation,
|
|
AI_IFPlayingAnimation,
|
|
AI_PointAtBond,
|
|
AI_LookSurprised,
|
|
AI_TRYSidestepping,
|
|
AI_TRYSideHopping,
|
|
AI_TRYSideRunning,
|
|
AI_TRYFiringWalk,
|
|
AI_TRYFiringRun,
|
|
AI_TRYFiringRoll,
|
|
AI_TRYFireOrAimAtTarget,
|
|
AI_TRYFireOrAimAtTargetKneel,
|
|
AI_TRYFireOrAimAtTargetUpdate,
|
|
AI_TRYFacingTarget,
|
|
AI_HitChrWithItem,
|
|
AI_ChrHitChr,
|
|
AI_TRYThrowingGrenade,
|
|
AI_TRYDroppingItem,
|
|
AI_RunToPad,
|
|
AI_RunToPadPreset,
|
|
AI_WalkToPad,
|
|
AI_SprintToPad,
|
|
AI_StartPatrol,
|
|
AI_Surrender,
|
|
AI_RemoveMe,
|
|
AI_ChrRemoveInstant,
|
|
AI_TRYTriggeringAlarmAtPad,
|
|
AI_AlarmOn,
|
|
AI_AlarmOff,
|
|
AI_TRYRunFromBond,
|
|
AI_TRYRunToBond,
|
|
AI_TRYWalkToBond,
|
|
AI_TRYSprintToBond,
|
|
AI_TRYFindCover,
|
|
AI_TRYRunToChr,
|
|
AI_TRYWalkToChr,
|
|
AI_TRYSprintToChr,
|
|
AI_IFImOnPatrolOrStopped,
|
|
AI_IFChrDyingOrDead,
|
|
AI_IFChrDoesNotExist,
|
|
AI_IFISeeBond,
|
|
AI_SetNewRandom,
|
|
AI_IFRandomLessThan,
|
|
AI_IFRandomGreaterThan,
|
|
AI_IFICanHearAlarm,
|
|
AI_IFAlarmIsOn,
|
|
AI_IFGasIsLeaking,
|
|
AI_IFIHeardBond,
|
|
AI_IFISeeSomeoneShot,
|
|
AI_IFISeeSomeoneDie,
|
|
AI_IFICouldSeeBond,
|
|
AI_IFICouldSeeBondsStan,
|
|
AI_IFIWasShotRecently,
|
|
AI_IFIHeardBondRecently,
|
|
AI_IFImInRoomWithChr,
|
|
AI_IFIveNotBeenSeen,
|
|
AI_IFImOnScreen,
|
|
AI_IFMyRoomIsOnScreen,
|
|
AI_IFRoomWithPadIsOnScreen,
|
|
AI_IFImTargetedByBond,
|
|
AI_IFBondMissedMe,
|
|
AI_IFMyAngleToBondLessThan,
|
|
AI_IFMyAngleToBondGreaterThan,
|
|
AI_IFMyAngleFromBondLessThan,
|
|
AI_IFMyAngleFromBondGreaterThan,
|
|
AI_IFMyDistanceToBondLessThanDecimeter,
|
|
AI_IFMyDistanceToBondGreaterThanDecimeter,
|
|
AI_IFChrDistanceToPadLessThanDecimeter,
|
|
AI_IFChrDistanceToPadGreaterThanDecimeter,
|
|
AI_IFMyDistanceToChrLessThanDecimeter,
|
|
AI_IFMyDistanceToChrGreaterThanDecimeter,
|
|
AI_TRYSettingMyPresetToChrWithinDistanceDecimeter,
|
|
AI_IFBondDistanceToPadLessThanDecimeter,
|
|
AI_IFBondDistanceToPadGreaterThanDecimeter,
|
|
AI_IFChrInRoomWithPad,
|
|
AI_IFBondInRoomWithPad,
|
|
AI_IFBondCollectedObject,
|
|
AI_IFKeyDropped,
|
|
AI_IFItemIsAttachedToObject,
|
|
AI_IFBondHasItemEquipped,
|
|
AI_IFObjectExists,
|
|
AI_IFObjectNotDestroyed,
|
|
AI_IFObjectWasActivated,
|
|
AI_IFBondUsedGadgetOnObject,
|
|
AI_ActivateObject,
|
|
AI_DestroyObject,
|
|
AI_DropObject,
|
|
AI_ChrDropAllConcealedItems,
|
|
AI_ChrDropAllHeldItems,
|
|
AI_BondCollectObject,
|
|
AI_ChrEquipObject,
|
|
AI_MoveObject,
|
|
AI_DoorOpen,
|
|
AI_DoorClose,
|
|
AI_IFDoorStateEqual,
|
|
AI_IFDoorHasBeenOpenedBefore,
|
|
AI_DoorSetLock,
|
|
AI_DoorUnsetLock,
|
|
AI_IFDoorLockEqual,
|
|
AI_IFObjectiveNumComplete,
|
|
AI_TRYUnknown6e,
|
|
AI_TRYUnknown6f,
|
|
AI_IFGameDifficultyLessThan,
|
|
AI_IFGameDifficultyGreaterThan,
|
|
AI_IFMissionTimeLessThan,
|
|
AI_IFMissionTimeGreaterThan,
|
|
AI_IFSystemPowerTimeLessThan,
|
|
AI_IFSystemPowerTimeGreaterThan,
|
|
AI_IFLevelIdLessThan,
|
|
AI_IFLevelIdGreaterThan,
|
|
AI_IFMyNumArghsLessThan,
|
|
AI_IFMyNumArghsGreaterThan,
|
|
AI_IFMyNumCloseArghsLessThan,
|
|
AI_IFMyNumCloseArghsGreaterThan,
|
|
AI_IFChrHealthLessThan,
|
|
AI_IFChrHealthGreaterThan,
|
|
AI_IFChrWasDamagedSinceLastCheck,
|
|
AI_IFBondHealthLessThan,
|
|
AI_IFBondHealthGreaterThan,
|
|
AI_SetMyMorale,
|
|
AI_AddToMyMorale,
|
|
AI_SubtractFromMyMorale,
|
|
AI_IFMyMoraleLessThan,
|
|
AI_IFMyMoraleLessThanRandom,
|
|
AI_SetMyAlertness,
|
|
AI_AddToMyAlertness,
|
|
AI_SubtractFromMyAlertness,
|
|
AI_IFMyAlertnessLessThan,
|
|
AI_IFMyAlertnessLessThanRandom,
|
|
AI_SetMyHearingScale,
|
|
AI_SetMyVisionRange,
|
|
AI_SetMyGrenadeProbability,
|
|
AI_SetMyChrNum,
|
|
AI_SetMyHealthTotal,
|
|
AI_SetMyArmour,
|
|
AI_SetMySpeedRating,
|
|
AI_SetMyArghRating,
|
|
AI_SetMyAccuracyRating,
|
|
AI_SetMyFlags2,
|
|
AI_UnsetMyFlags2,
|
|
AI_IFMyFlags2Has,
|
|
AI_SetChrBitfield,
|
|
AI_UnsetChrBitfield,
|
|
AI_IFChrBitfieldHas,
|
|
AI_SetObjectiveBitfield,
|
|
AI_UnsetObjectiveBitfield,
|
|
AI_IFObjectiveBitfieldHas,
|
|
AI_SetMychrflags,
|
|
AI_UnsetMychrflags,
|
|
AI_IFMychrflagsHas,
|
|
AI_SetChrchrflags,
|
|
AI_UnsetChrchrflags,
|
|
AI_IFChrchrflagsHas,
|
|
AI_SetObjectFlags,
|
|
AI_UnsetObjectFlags,
|
|
AI_IFObjectFlagsHas,
|
|
AI_SetObjectFlags2,
|
|
AI_UnsetObjectFlags2,
|
|
AI_IFObjectFlags2Has,
|
|
AI_SetMyChrPreset,
|
|
AI_SetChrChrPreset,
|
|
AI_SetMyPadPreset,
|
|
AI_SetChrPadPreset,
|
|
AI_PRINT,
|
|
AI_MyTimerStart,
|
|
AI_MyTimerReset,
|
|
AI_MyTimerPause,
|
|
AI_MyTimerResume,
|
|
AI_IFMyTimerIsNotRunning,
|
|
AI_IFMyTimerLessThanTicks,
|
|
AI_IFMyTimerGreaterThanTicks,
|
|
AI_HudCountdownShow,
|
|
AI_HudCountdownHide,
|
|
AI_HudCountdownSet,
|
|
AI_HudCountdownStop,
|
|
AI_HudCountdownStart,
|
|
AI_IFHudCountdownIsNotRunning,
|
|
AI_IFHudCountdownLessThan,
|
|
AI_IFHudCountdownGreaterThan,
|
|
AI_TRYSpawningChrAtPad,
|
|
AI_TRYSpawningChrNextToChr,
|
|
AI_TRYGiveMeItem,
|
|
AI_TRYGiveMeHat,
|
|
AI_TRYCloningChr,
|
|
AI_TextPrintBottom,
|
|
AI_TextPrintTop,
|
|
AI_SfxPlay,
|
|
AI_SfxEmitFromObject,
|
|
AI_SfxEmitFromPad,
|
|
AI_SfxSetChannelVolume,
|
|
AI_SfxFadeChannelVolume,
|
|
AI_SfxStopChannel,
|
|
AI_IFSfxChannelVolumeLessThan,
|
|
AI_VehicleStartPath,
|
|
AI_VehicleSpeed,
|
|
AI_AircraftRotorSpeed,
|
|
AI_IFCameraIsInIntro,
|
|
AI_IFCameraIsInBondSwirl,
|
|
AI_TvChangeScreenBank,
|
|
AI_IFBondInTank,
|
|
AI_EndLevel,
|
|
AI_CameraReturnToBond,
|
|
AI_CameraLookAtBondFromPad,
|
|
AI_CameraSwitch,
|
|
AI_IFBondYPosLessThan,
|
|
AI_BondDisableControl,
|
|
AI_BondEnableControl,
|
|
AI_TRYTeleportingChrToPad,
|
|
AI_ScreenFadeToBlack,
|
|
AI_ScreenFadeFromBlack,
|
|
AI_IFScreenFadeCompleted,
|
|
AI_HideAllChrs,
|
|
AI_ShowAllChrs,
|
|
AI_DoorOpenInstant,
|
|
AI_ChrRemoveItemInHand,
|
|
AI_IfNumberOfActivePlayersLessThan,
|
|
AI_IFBondItemTotalAmmoLessThan,
|
|
AI_BondEquipItem,
|
|
AI_BondEquipItemCinema,
|
|
AI_BondSetLockedVelocity,
|
|
AI_IFObjectInRoomWithPad,
|
|
AI_IFImFiringAndLockedForward,
|
|
AI_IFImFiring,
|
|
AI_SwitchSky,
|
|
AI_TriggerFadeAndExitLevelOnButtonPress,
|
|
AI_IFBondIsDead,
|
|
AI_BondDisableDamageAndPickups,
|
|
AI_BondHideWeapons,
|
|
AI_CameraOrbitPad,
|
|
AI_CreditsRoll,
|
|
AI_IFCreditsHasCompleted,
|
|
AI_IFObjectiveAllCompleted,
|
|
AI_IFFolderActorIsEqual,
|
|
AI_IFBondDamageAndPickupsDisabled,
|
|
AI_MusicPlaySlot,
|
|
AI_MusicStopSlot,
|
|
AI_TriggerExplosionsAroundBond,
|
|
AI_IFKilledCiviliansGreaterThan,
|
|
AI_IFChrWasShotSinceLastCheck,
|
|
AI_BondKilledInAction,
|
|
AI_RaiseArms,
|
|
AI_GasLeakAndFadeFog,
|
|
AI_ObjectRocketLaunch,
|
|
AI_CMD_COUNT
|
|
} AI_CMD;
|
|
|
|
char *AI_CMD_ToString[] = {
|
|
"GotoNext",
|
|
"GotoFirst",
|
|
"Label",
|
|
"Yield",
|
|
"EndList",
|
|
"SetChrAiList",
|
|
"SetReturnAiList",
|
|
"Return",
|
|
"Stop",
|
|
"Kneel",
|
|
"PlayAnimation",
|
|
"IFPlayingAnimation",
|
|
"PointAtBond",
|
|
"LookSurprised",
|
|
"TRYSidestepping",
|
|
"TRYSideHopping",
|
|
"TRYSideRunning",
|
|
"TRYFiringWalk",
|
|
"TRYFiringRun",
|
|
"TRYFiringRoll",
|
|
"TRYFireOrAimAtTarget",
|
|
"TRYFireOrAimAtTargetKneel",
|
|
"TRYFireOrAimAtTargetUpdate",
|
|
"TRYFacingTarget",
|
|
"HitChrWithItem",
|
|
"ChrHitChr",
|
|
"TRYThrowingGrenade",
|
|
"TRYDroppingItem",
|
|
"RunToPad",
|
|
"RunToPadPreset",
|
|
"WalkToPad",
|
|
"SprintToPad",
|
|
"StartPatrol",
|
|
"Surrender",
|
|
"RemoveMe",
|
|
"ChrRemoveInstant",
|
|
"TRYTriggeringAlarmAtPad",
|
|
"AlarmOn",
|
|
"AlarmOff",
|
|
"TRYRunFromBond",
|
|
"TRYRunToBond",
|
|
"TRYWalkToBond",
|
|
"TRYSprintToBond",
|
|
"TRYFindCover",
|
|
"TRYRunToChr",
|
|
"TRYWalkToChr",
|
|
"TRYSprintToChr",
|
|
"IFImOnPatrolOrStopped",
|
|
"IFChrDyingOrDead",
|
|
"IFChrDoesNotExist",
|
|
"IFISeeBond",
|
|
"SetNewRandom",
|
|
"IFRandomLessThan",
|
|
"IFRandomGreaterThan",
|
|
"IFICanHearAlarm",
|
|
"IFAlarmIsOn",
|
|
"IFGasIsLeaking",
|
|
"IFIHeardBond",
|
|
"IFISeeSomeoneShot",
|
|
"IFISeeSomeoneDie",
|
|
"IFICouldSeeBond",
|
|
"IFICouldSeeBondsStan",
|
|
"IFIWasShotRecently",
|
|
"IFIHeardBondRecently",
|
|
"IFImInRoomWithChr",
|
|
"IFIveNotBeenSeen",
|
|
"IFImOnScreen",
|
|
"IFMyRoomIsOnScreen",
|
|
"IFRoomWithPadIsOnScreen",
|
|
"IFImTargetedByBond",
|
|
"IFBondMissedMe",
|
|
"IFMyAngleToBondLessThan",
|
|
"IFMyAngleToBondGreaterThan",
|
|
"IFMyAngleFromBondLessThan",
|
|
"IFMyAngleFromBondGreaterThan",
|
|
"IFMyDistanceToBondLessThanDecimeter",
|
|
"IFMyDistanceToBondGreaterThanDecimeter",
|
|
"IFChrDistanceToPadLessThanDecimeter",
|
|
"IFChrDistanceToPadGreaterThanDecimeter",
|
|
"IFMyDistanceToChrLessThanDecimeter",
|
|
"IFMyDistanceToChrGreaterThanDecimeter",
|
|
"TRYSettingMyPresetToChrWithinDistanceDecimeter",
|
|
"IFBondDistanceToPadLessThanDecimeter",
|
|
"IFBondDistanceToPadGreaterThanDecimeter",
|
|
"IFChrInRoomWithPad",
|
|
"IFBondInRoomWithPad",
|
|
"IFBondCollectedObject",
|
|
"IFKeyDropped",
|
|
"IFItemIsAttachedToObject",
|
|
"IFBondHasItemEquipped",
|
|
"IFObjectExists",
|
|
"IFObjectNotDestroyed",
|
|
"IFObjectWasActivated",
|
|
"IFBondUsedGadgetOnObject",
|
|
"ActivateObject",
|
|
"DestroyObject",
|
|
"DropObject",
|
|
"ChrDropAllConcealedItems",
|
|
"ChrDropAllHeldItems",
|
|
"BondCollectObject",
|
|
"ChrEquipObject",
|
|
"MoveObject",
|
|
"DoorOpen",
|
|
"DoorClose",
|
|
"IFDoorStateEqual",
|
|
"IFDoorHasBeenOpenedBefore",
|
|
"DoorSetLock",
|
|
"DoorUnsetLock",
|
|
"IFDoorLockEqual",
|
|
"IFObjectiveNumComplete",
|
|
"TRYUnknown6e",
|
|
"TRYUnknown6f",
|
|
"IFGameDifficultyLessThan",
|
|
"IFGameDifficultyGreaterThan",
|
|
"IFMissionTimeLessThan",
|
|
"IFMissionTimeGreaterThan",
|
|
"IFSystemPowerTimeLessThan",
|
|
"IFSystemPowerTimeGreaterThan",
|
|
"IFLevelIdLessThan",
|
|
"IFLevelIdGreaterThan",
|
|
"IFMyNumArghsLessThan",
|
|
"IFMyNumArghsGreaterThan",
|
|
"IFMyNumCloseArghsLessThan",
|
|
"IFMyNumCloseArghsGreaterThan",
|
|
"IFChrHealthLessThan",
|
|
"IFChrHealthGreaterThan",
|
|
"IFChrWasDamagedSinceLastCheck",
|
|
"IFBondHealthLessThan",
|
|
"IFBondHealthGreaterThan",
|
|
"SetMyMorale",
|
|
"AddToMyMorale",
|
|
"SubtractFromMyMorale",
|
|
"IFMyMoraleLessThan",
|
|
"IFMyMoraleLessThanRandom",
|
|
"SetMyAlertness",
|
|
"AddToMyAlertness",
|
|
"SubtractFromMyAlertness",
|
|
"IFMyAlertnessLessThan",
|
|
"IFMyAlertnessLessThanRandom",
|
|
"SetMyHearingScale",
|
|
"SetMyVisionRange",
|
|
"SetMyGrenadeProbability",
|
|
"SetMyChrNum",
|
|
"SetMyHealthTotal",
|
|
"SetMyArmour",
|
|
"SetMySpeedRating",
|
|
"SetMyArghRating",
|
|
"SetMyAccuracyRating",
|
|
"SetMyFlags2",
|
|
"UnsetMyFlags2",
|
|
"IFMyFlags2Has",
|
|
"SetChrBitfield",
|
|
"UnsetChrBitfield",
|
|
"IFChrBitfieldHas",
|
|
"SetObjectiveBitfield",
|
|
"UnsetObjectiveBitfield",
|
|
"IFObjectiveBitfieldHas",
|
|
"SetMychrflags",
|
|
"UnsetMychrflags",
|
|
"IFMychrflagsHas",
|
|
"SetChrchrflags",
|
|
"UnsetChrchrflags",
|
|
"IFChrchrflagsHas",
|
|
"SetObjectFlags",
|
|
"UnsetObjectFlags",
|
|
"IFObjectFlagsHas",
|
|
"SetObjectFlags2",
|
|
"UnsetObjectFlags2",
|
|
"IFObjectFlags2Has",
|
|
"SetMyChrPreset",
|
|
"SetChrChrPreset",
|
|
"SetMyPadPreset",
|
|
"SetChrPadPreset",
|
|
"PRINT",
|
|
"MyTimerStart",
|
|
"MyTimerReset",
|
|
"MyTimerPause",
|
|
"MyTimerResume",
|
|
"IFMyTimerIsNotRunning",
|
|
"IFMyTimerLessThanTicks",
|
|
"IFMyTimerGreaterThanTicks",
|
|
"HudCountdownShow",
|
|
"HudCountdownHide",
|
|
"HudCountdownSet",
|
|
"HudCountdownStop",
|
|
"HudCountdownStart",
|
|
"IFHudCountdownIsNotRunning",
|
|
"IFHudCountdownLessThan",
|
|
"IFHudCountdownGreaterThan",
|
|
"TRYSpawningChrAtPad",
|
|
"TRYSpawningChrNextToChr",
|
|
"TRYGiveMeItem",
|
|
"TRYGiveMeHat",
|
|
"TRYCloningChr",
|
|
"TextPrintBottom",
|
|
"TextPrintTop",
|
|
"SfxPlay",
|
|
"SfxEmitFromObject",
|
|
"SfxEmitFromPad",
|
|
"SfxSetChannelVolume",
|
|
"SfxFadeChannelVolume",
|
|
"SfxStopChannel",
|
|
"IFSfxChannelVolumeLessThan",
|
|
"VehicleStartPath",
|
|
"VehicleSpeed",
|
|
"AircraftRotorSpeed",
|
|
"IFCameraIsInIntro",
|
|
"IFCameraIsInBondSwirl",
|
|
"TvChangeScreenBank",
|
|
"IFBondInTank",
|
|
"EndLevel",
|
|
"CameraReturnToBond",
|
|
"CameraLookAtBondFromPad",
|
|
"CameraSwitch",
|
|
"IFBondYPosLessThan",
|
|
"BondDisableControl",
|
|
"BondEnableControl",
|
|
"TRYTeleportingChrToPad",
|
|
"ScreenFadeToBlack",
|
|
"ScreenFadeFromBlack",
|
|
"IFScreenFadeCompleted",
|
|
"HideAllChrs",
|
|
"ShowAllChrs",
|
|
"DoorOpenInstant",
|
|
"ChrRemoveItemInHand",
|
|
"IfNumberOfActivePlayersLessThan",
|
|
"IFBondItemTotalAmmoLessThan",
|
|
"BondEquipItem",
|
|
"BondEquipItemCinema",
|
|
"BondSetLockedVelocity",
|
|
"IFObjectInRoomWithPad",
|
|
"IFImFiringAndLockedForward",
|
|
"IFImFiring",
|
|
"SwitchSky",
|
|
"TriggerFadeAndExitLevelOnButtonPress",
|
|
"IFBondIsDead",
|
|
"BondDisableDamageAndPickups",
|
|
"BondHideWeapons",
|
|
"CameraOrbitPad",
|
|
"CreditsRoll",
|
|
"IFCreditsHasCompleted",
|
|
"IFObjectiveAllCompleted",
|
|
"IFFolderActorIsEqual",
|
|
"IFBondDamageAndPickupsDisabled",
|
|
"MusicPlaySlot",
|
|
"MusicStopSlot",
|
|
"TriggerExplosionsAroundBond",
|
|
"IFKilledCiviliansGreaterThan",
|
|
"IFChrWasShotSinceLastCheck",
|
|
"BondKilledInAction",
|
|
"RaiseArms",
|
|
"GasLeakAndFadeFog",
|
|
"ObjectRocketLaunch"};
|
|
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct AiGotoNextRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiGotoNextRecord;
|
|
|
|
typedef struct AiGotoFirstRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiGotoFirstRecord;
|
|
|
|
typedef struct AiLabelRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ID;
|
|
} AiLabelRecord;
|
|
|
|
typedef struct AiYieldRecord
|
|
{
|
|
u8 cmd;
|
|
} AiYieldRecord;
|
|
|
|
typedef struct AiEndListRecord
|
|
{
|
|
u8 cmd;
|
|
} AiEndListRecord;
|
|
|
|
typedef struct AiSetChrAiListRecord
|
|
{
|
|
u8 cmd;
|
|
s8 CHR_NUM;
|
|
s16 AI_LIST_ID;
|
|
} AiSetChrAiListRecord;
|
|
|
|
typedef struct AiSetReturnAiListRecord
|
|
{
|
|
u8 cmd;
|
|
s16 AI_LIST_ID;
|
|
} AiSetReturnAiListRecord;
|
|
|
|
typedef struct AiReturnRecord
|
|
{
|
|
u8 cmd;
|
|
} AiReturnRecord;
|
|
|
|
typedef struct AiStopRecord
|
|
{
|
|
u8 cmd;
|
|
} AiStopRecord;
|
|
|
|
typedef struct AiKneelRecord
|
|
{
|
|
u8 cmd;
|
|
} AiKneelRecord;
|
|
|
|
typedef struct AiPlayAnimationRecord
|
|
{
|
|
u8 cmd;
|
|
s16 ANIMATION_ID;
|
|
s16 START_TIME30;
|
|
s16 END_TIME30;
|
|
u8 BITFIELD;
|
|
u8 INTERPOL_TIME60;
|
|
} AiPlayAnimationRecord;
|
|
|
|
typedef struct AiIFPlayingAnimationRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFPlayingAnimationRecord;
|
|
|
|
typedef struct AiPointAtBondRecord
|
|
{
|
|
u8 cmd;
|
|
} AiPointAtBondRecord;
|
|
|
|
typedef struct AiLookSurprisedRecord
|
|
{
|
|
u8 cmd;
|
|
} AiLookSurprisedRecord;
|
|
|
|
typedef struct AiTRYSidesteppingRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSidesteppingRecord;
|
|
|
|
typedef struct AiTRYSideHoppingRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSideHoppingRecord;
|
|
|
|
typedef struct AiTRYSideRunningRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSideRunningRecord;
|
|
|
|
typedef struct AiTRYFiringWalkRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFiringWalkRecord;
|
|
|
|
typedef struct AiTRYFiringRunRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFiringRunRecord;
|
|
|
|
typedef struct AiTRYFiringRollRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFiringRollRecord;
|
|
|
|
typedef struct AiTRYFireOrAimAtTargetRecord
|
|
{
|
|
u8 cmd;
|
|
s16 BITFIELD;
|
|
s16 TARGET;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFireOrAimAtTargetRecord;
|
|
|
|
typedef struct AiTRYFireOrAimAtTargetKneelRecord
|
|
{
|
|
u8 cmd;
|
|
s16 BITFIELD;
|
|
s16 TARGET;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFireOrAimAtTargetKneelRecord;
|
|
|
|
typedef struct AiTRYFireOrAimAtTargetUpdateRecord
|
|
{
|
|
u8 cmd;
|
|
s16 BITFIELD;
|
|
s16 TARGET;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFireOrAimAtTargetUpdateRecord;
|
|
|
|
typedef struct AiTRYFacingTargetRecord
|
|
{
|
|
u8 cmd;
|
|
s16 BITFIELD;
|
|
s16 TARGET;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFacingTargetRecord;
|
|
|
|
typedef struct AiHitChrWithItemRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s8 PART_NUM;
|
|
u8 ITEM_NUM;
|
|
} AiHitChrWithItemRecord;
|
|
|
|
typedef struct AiChrHitChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 CHR_NUM_TARGET;
|
|
s8 PART_NUM;
|
|
} AiChrHitChrRecord;
|
|
|
|
typedef struct AiTRYThrowingGrenadeRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYThrowingGrenadeRecord;
|
|
|
|
typedef struct AiTRYDroppingItemRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PROP_NUM;
|
|
u8 ITEM_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiTRYDroppingItemRecord;
|
|
|
|
typedef struct AiRunToPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
} AiRunToPadRecord;
|
|
|
|
typedef struct AiRunToPadPresetRecord
|
|
{
|
|
u8 cmd;
|
|
} AiRunToPadPresetRecord;
|
|
|
|
typedef struct AiWalkToPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
} AiWalkToPadRecord;
|
|
|
|
typedef struct AiSprintToPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
} AiSprintToPadRecord;
|
|
|
|
typedef struct AiStartPatrolRecord
|
|
{
|
|
u8 cmd;
|
|
u8 PATH_NUM;
|
|
} AiStartPatrolRecord;
|
|
|
|
typedef struct AiSurrenderRecord
|
|
{
|
|
u8 cmd;
|
|
} AiSurrenderRecord;
|
|
|
|
typedef struct AiRemoveMeRecord
|
|
{
|
|
u8 cmd;
|
|
} AiRemoveMeRecord;
|
|
|
|
typedef struct AiChrRemoveInstantRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
} AiChrRemoveInstantRecord;
|
|
|
|
typedef struct AiTRYTriggeringAlarmAtPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiTRYTriggeringAlarmAtPadRecord;
|
|
|
|
typedef struct AiAlarmOnRecord
|
|
{
|
|
u8 cmd;
|
|
} AiAlarmOnRecord;
|
|
|
|
typedef struct AiAlarmOffRecord
|
|
{
|
|
u8 cmd;
|
|
} AiAlarmOffRecord;
|
|
|
|
typedef struct AiTRYRunFromBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYRunFromBondRecord;
|
|
|
|
typedef struct AiTRYRunToBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYRunToBondRecord;
|
|
|
|
typedef struct AiTRYWalkToBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYWalkToBondRecord;
|
|
|
|
typedef struct AiTRYSprintToBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSprintToBondRecord;
|
|
|
|
typedef struct AiTRYFindCoverRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiTRYFindCoverRecord;
|
|
|
|
typedef struct AiTRYRunToChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiTRYRunToChrRecord;
|
|
|
|
typedef struct AiTRYWalkToChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiTRYWalkToChrRecord;
|
|
|
|
typedef struct AiTRYSprintToChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSprintToChrRecord;
|
|
|
|
typedef struct AiIFImOnPatrolOrStoppedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFImOnPatrolOrStoppedRecord;
|
|
|
|
typedef struct AiIFChrDyingOrDeadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrDyingOrDeadRecord;
|
|
|
|
typedef struct AiIFChrDoesNotExistRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrDoesNotExistRecord;
|
|
|
|
typedef struct AiIFISeeBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFISeeBondRecord;
|
|
|
|
typedef struct AiSetNewRandomRecord
|
|
{
|
|
u8 cmd;
|
|
} AiSetNewRandomRecord;
|
|
|
|
typedef struct AiIFRandomLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 BYTE;
|
|
u8 GOTOLABEL;
|
|
} AiIFRandomLessThanRecord;
|
|
|
|
typedef struct AiIFRandomGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 BYTE;
|
|
u8 GOTOLABEL;
|
|
} AiIFRandomGreaterThanRecord;
|
|
|
|
typedef struct AiIFICanHearAlarmRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFICanHearAlarmRecord;
|
|
|
|
typedef struct AiIFAlarmIsOnRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFAlarmIsOnRecord;
|
|
|
|
typedef struct AiIFGasIsLeakingRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFGasIsLeakingRecord;
|
|
|
|
typedef struct AiIFIHeardBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFIHeardBondRecord;
|
|
|
|
typedef struct AiIFISeeSomeoneShotRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFISeeSomeoneShotRecord;
|
|
|
|
typedef struct AiIFISeeSomeoneDieRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFISeeSomeoneDieRecord;
|
|
|
|
typedef struct AiIFICouldSeeBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFICouldSeeBondRecord;
|
|
|
|
typedef struct AiIFICouldSeeBondsStanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFICouldSeeBondsStanRecord;
|
|
|
|
typedef struct AiIFIWasShotRecentlyRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFIWasShotRecentlyRecord;
|
|
|
|
typedef struct AiIFIHeardBondRecentlyRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFIHeardBondRecentlyRecord;
|
|
|
|
typedef struct AiIFImInRoomWithChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFImInRoomWithChrRecord;
|
|
|
|
typedef struct AiIFIveNotBeenSeenRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFIveNotBeenSeenRecord;
|
|
|
|
typedef struct AiIFImOnScreenRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFImOnScreenRecord;
|
|
|
|
typedef struct AiIFMyRoomIsOnScreenRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyRoomIsOnScreenRecord;
|
|
|
|
typedef struct AiIFRoomWithPadIsOnScreenRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFRoomWithPadIsOnScreenRecord;
|
|
|
|
typedef struct AiIFImTargetedByBondRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFImTargetedByBondRecord;
|
|
|
|
typedef struct AiIFBondMissedMeRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondMissedMeRecord;
|
|
|
|
typedef struct AiIFMyAngleToBondLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ANGLE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAngleToBondLessThanRecord;
|
|
|
|
typedef struct AiIFMyAngleToBondGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ANGLE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAngleToBondGreaterThanRecord;
|
|
|
|
typedef struct AiIFMyAngleFromBondLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ANGLE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAngleFromBondLessThanRecord;
|
|
|
|
typedef struct AiIFMyAngleFromBondGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ANGLE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAngleFromBondGreaterThanRecord;
|
|
|
|
typedef struct AiIFMyDistanceToBondLessThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyDistanceToBondLessThanDecimeterRecord;
|
|
|
|
typedef struct AiIFMyDistanceToBondGreaterThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyDistanceToBondGreaterThanDecimeterRecord;
|
|
|
|
typedef struct AiIFChrDistanceToPadLessThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 DISTANCE;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrDistanceToPadLessThanDecimeterRecord;
|
|
|
|
typedef struct AiIFChrDistanceToPadGreaterThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 DISTANCE;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrDistanceToPadGreaterThanDecimeterRecord;
|
|
|
|
typedef struct AiIFMyDistanceToChrLessThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyDistanceToChrLessThanDecimeterRecord;
|
|
|
|
typedef struct AiIFMyDistanceToChrGreaterThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyDistanceToChrGreaterThanDecimeterRecord;
|
|
|
|
typedef struct AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord;
|
|
|
|
typedef struct AiIFBondDistanceToPadLessThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondDistanceToPadLessThanDecimeterRecord;
|
|
|
|
typedef struct AiIFBondDistanceToPadGreaterThanDecimeterRecord
|
|
{
|
|
u8 cmd;
|
|
s16 DISTANCE;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondDistanceToPadGreaterThanDecimeterRecord;
|
|
|
|
typedef struct AiIFChrInRoomWithPadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrInRoomWithPadRecord;
|
|
|
|
typedef struct AiIFBondInRoomWithPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondInRoomWithPadRecord;
|
|
|
|
typedef struct AiIFBondCollectedObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondCollectedObjectRecord;
|
|
|
|
typedef struct AiIFKeyDroppedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 KEY_ID;
|
|
u8 GOTOLABEL;
|
|
} AiIFKeyDroppedRecord;
|
|
|
|
typedef struct AiIFItemIsAttachedToObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ITEM_NUM;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFItemIsAttachedToObjectRecord;
|
|
|
|
typedef struct AiIFBondHasItemEquippedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 ITEM_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondHasItemEquippedRecord;
|
|
|
|
typedef struct AiIFObjectExistsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectExistsRecord;
|
|
|
|
typedef struct AiIFObjectNotDestroyedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectNotDestroyedRecord;
|
|
|
|
typedef struct AiIFObjectWasActivatedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectWasActivatedRecord;
|
|
|
|
typedef struct AiIFBondUsedGadgetOnObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondUsedGadgetOnObjectRecord;
|
|
|
|
typedef struct AiActivateObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiActivateObjectRecord;
|
|
|
|
typedef struct AiDestroyObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiDestroyObjectRecord;
|
|
|
|
typedef struct AiDropObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiDropObjectRecord;
|
|
|
|
typedef struct AiChrDropAllConcealedItemsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
} AiChrDropAllConcealedItemsRecord;
|
|
|
|
typedef struct AiChrDropAllHeldItemsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
} AiChrDropAllHeldItemsRecord;
|
|
|
|
typedef struct AiBondCollectObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiBondCollectObjectRecord;
|
|
|
|
typedef struct AiChrEquipObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 CHR_NUM;
|
|
} AiChrEquipObjectRecord;
|
|
|
|
typedef struct AiMoveObjectRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s16 PAD;
|
|
} AiMoveObjectRecord;
|
|
|
|
typedef struct AiDoorOpenRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiDoorOpenRecord;
|
|
|
|
typedef struct AiDoorCloseRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiDoorCloseRecord;
|
|
|
|
typedef struct AiIFDoorStateEqualRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 DOOR_STATE;
|
|
u8 GOTOLABEL;
|
|
} AiIFDoorStateEqualRecord;
|
|
|
|
typedef struct AiIFDoorHasBeenOpenedBeforeRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFDoorHasBeenOpenedBeforeRecord;
|
|
|
|
typedef struct AiDoorSetLockRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 LOCK_FLAG;
|
|
} AiDoorSetLockRecord;
|
|
|
|
typedef struct AiDoorUnsetLockRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 LOCK_FLAG;
|
|
} AiDoorUnsetLockRecord;
|
|
|
|
typedef struct AiIFDoorLockEqualRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 LOCK_FLAG;
|
|
u8 GOTOLABEL;
|
|
} AiIFDoorLockEqualRecord;
|
|
|
|
typedef struct AiIFObjectiveNumCompleteRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJ_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectiveNumCompleteRecord;
|
|
|
|
typedef struct AiTRYUnknown6eRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiTRYUnknown6eRecord;
|
|
|
|
typedef struct AiTRYUnknown6fRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiTRYUnknown6fRecord;
|
|
|
|
typedef struct AiIFGameDifficultyLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 DIFICULTY_ID;
|
|
u8 GOTOLABEL;
|
|
} AiIFGameDifficultyLessThanRecord;
|
|
|
|
typedef struct AiIFGameDifficultyGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 DIFICULTY_ID;
|
|
u8 GOTOLABEL;
|
|
} AiIFGameDifficultyGreaterThanRecord;
|
|
|
|
typedef struct AiIFMissionTimeLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SECONDS;
|
|
u8 GOTOLABEL;
|
|
} AiIFMissionTimeLessThanRecord;
|
|
|
|
typedef struct AiIFMissionTimeGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SECONDS;
|
|
u8 GOTOLABEL;
|
|
} AiIFMissionTimeGreaterThanRecord;
|
|
|
|
typedef struct AiIFSystemPowerTimeLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 MINUTES;
|
|
u8 GOTOLABEL;
|
|
} AiIFSystemPowerTimeLessThanRecord;
|
|
|
|
typedef struct AiIFSystemPowerTimeGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 MINUTES;
|
|
u8 GOTOLABEL;
|
|
} AiIFSystemPowerTimeGreaterThanRecord;
|
|
|
|
typedef struct AiIFLevelIdLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 LEVEL_ID;
|
|
u8 GOTOLABEL;
|
|
} AiIFLevelIdLessThanRecord;
|
|
|
|
typedef struct AiIFLevelIdGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 LEVEL_ID;
|
|
u8 GOTOLABEL;
|
|
} AiIFLevelIdGreaterThanRecord;
|
|
|
|
typedef struct AiIFMyNumArghsLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyNumArghsLessThanRecord;
|
|
|
|
typedef struct AiIFMyNumArghsGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyNumArghsGreaterThanRecord;
|
|
|
|
typedef struct AiIFMyNumCloseArghsLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyNumCloseArghsLessThanRecord;
|
|
|
|
typedef struct AiIFMyNumCloseArghsGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyNumCloseArghsGreaterThanRecord;
|
|
|
|
typedef struct AiIFChrHealthLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 HEALTH;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrHealthLessThanRecord;
|
|
|
|
typedef struct AiIFChrHealthGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 HEALTH;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrHealthGreaterThanRecord;
|
|
|
|
typedef struct AiIFChrWasDamagedSinceLastCheckRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrWasDamagedSinceLastCheckRecord;
|
|
|
|
typedef struct AiIFBondHealthLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 HEALTH;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondHealthLessThanRecord;
|
|
|
|
typedef struct AiIFBondHealthGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 HEALTH;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondHealthGreaterThanRecord;
|
|
|
|
typedef struct AiSetMyMoraleRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiSetMyMoraleRecord;
|
|
|
|
typedef struct AiAddToMyMoraleRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiAddToMyMoraleRecord;
|
|
|
|
typedef struct AiSubtractFromMyMoraleRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiSubtractFromMyMoraleRecord;
|
|
|
|
typedef struct AiIFMyMoraleLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyMoraleLessThanRecord;
|
|
|
|
typedef struct AiIFMyMoraleLessThanRandomRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyMoraleLessThanRandomRecord;
|
|
|
|
typedef struct AiSetMyAlertnessRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiSetMyAlertnessRecord;
|
|
|
|
typedef struct AiAddToMyAlertnessRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiAddToMyAlertnessRecord;
|
|
|
|
typedef struct AiSubtractFromMyAlertnessRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiSubtractFromMyAlertnessRecord;
|
|
|
|
typedef struct AiIFMyAlertnessLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHRBYTE;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAlertnessLessThanRecord;
|
|
|
|
typedef struct AiIFMyAlertnessLessThanRandomRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyAlertnessLessThanRandomRecord;
|
|
|
|
typedef struct AiSetMyHearingScaleRecord
|
|
{
|
|
u8 cmd;
|
|
s16 HEARING_SCALE;
|
|
} AiSetMyHearingScaleRecord;
|
|
|
|
typedef struct AiSetMyVisionRangeRecord
|
|
{
|
|
u8 cmd;
|
|
u8 VISION_RANGE;
|
|
} AiSetMyVisionRangeRecord;
|
|
|
|
typedef struct AiSetMyGrenadeProbabilityRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GRENADE_PROB;
|
|
} AiSetMyGrenadeProbabilityRecord;
|
|
|
|
typedef struct AiSetMyChrNumRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
} AiSetMyChrNumRecord;
|
|
|
|
typedef struct AiSetMyHealthTotalRecord
|
|
{
|
|
u8 cmd;
|
|
s16 HEALTH;
|
|
} AiSetMyHealthTotalRecord;
|
|
|
|
typedef struct AiSetMyArmourRecord
|
|
{
|
|
u8 cmd;
|
|
s16 AMOUNT;
|
|
} AiSetMyArmourRecord;
|
|
|
|
typedef struct AiSetMySpeedRatingRecord
|
|
{
|
|
u8 cmd;
|
|
s8 val;
|
|
} AiSetMySpeedRatingRecord;
|
|
|
|
typedef struct AiSetMyArghRatingRecord
|
|
{
|
|
u8 cmd;
|
|
s8 val;
|
|
} AiSetMyArghRatingRecord;
|
|
|
|
typedef struct AiSetMyAccuracyRatingRecord
|
|
{
|
|
u8 cmd;
|
|
s8 val;
|
|
} AiSetMyAccuracyRatingRecord;
|
|
|
|
typedef struct AiSetMyFlags2Record
|
|
{
|
|
u8 cmd;
|
|
u8 BITS;
|
|
} AiSetMyFlags2Record;
|
|
|
|
typedef struct AiUnsetMyFlags2Record
|
|
{
|
|
u8 cmd;
|
|
u8 BITS;
|
|
} AiUnsetMyFlags2Record;
|
|
|
|
typedef struct AiIFMyFlags2HasRecord
|
|
{
|
|
u8 cmd;
|
|
u8 BITS;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyFlags2HasRecord;
|
|
|
|
typedef struct AiSetChrBitfieldRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 BITS;
|
|
} AiSetChrBitfieldRecord;
|
|
|
|
typedef struct AiUnsetChrBitfieldRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 BITS;
|
|
} AiUnsetChrBitfieldRecord;
|
|
|
|
typedef struct AiIFChrBitfieldHasRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 BITS;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrBitfieldHasRecord;
|
|
|
|
typedef struct AiSetObjectiveBitfieldRecord
|
|
{
|
|
u8 cmd;
|
|
s32 BITFIELD;
|
|
} AiSetObjectiveBitfieldRecord;
|
|
|
|
typedef struct AiUnsetObjectiveBitfieldRecord
|
|
{
|
|
u8 cmd;
|
|
s32 BITFIELD;
|
|
} AiUnsetObjectiveBitfieldRecord;
|
|
|
|
typedef struct AiIFObjectiveBitfieldHasRecord
|
|
{
|
|
u8 cmd;
|
|
s32 BITS;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectiveBitfieldHasRecord;
|
|
|
|
typedef struct AiSetMychrflagsRecord
|
|
{
|
|
u8 cmd;
|
|
s32 CHRFLAGS;
|
|
} AiSetMychrflagsRecord;
|
|
|
|
typedef struct AiUnsetMychrflagsRecord
|
|
{
|
|
u8 cmd;
|
|
s32 CHRFLAGS;
|
|
} AiUnsetMychrflagsRecord;
|
|
|
|
typedef struct AiIFMychrflagsHasRecord
|
|
{
|
|
u8 cmd;
|
|
s32 CHRFLAGS;
|
|
u8 GOTOLABEL;
|
|
} AiIFMychrflagsHasRecord;
|
|
|
|
typedef struct AiSetChrchrflagsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s32 CHRFLAGS;
|
|
} AiSetChrchrflagsRecord;
|
|
|
|
typedef struct AiUnsetChrchrflagsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s32 CHRFLAGS;
|
|
} AiUnsetChrchrflagsRecord;
|
|
|
|
typedef struct AiIFChrchrflagsHasRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s32 CHRFLAGS;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrchrflagsHasRecord;
|
|
|
|
typedef struct AiSetObjectFlagsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITFIELD;
|
|
} AiSetObjectFlagsRecord;
|
|
|
|
typedef struct AiUnsetObjectFlagsRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITFIELD;
|
|
} AiUnsetObjectFlagsRecord;
|
|
|
|
typedef struct AiIFObjectFlagsHasRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITS;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectFlagsHasRecord;
|
|
|
|
typedef struct AiSetObjectFlags2Record
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITS;
|
|
} AiSetObjectFlags2Record;
|
|
|
|
typedef struct AiUnsetObjectFlags2Record
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITS;
|
|
} AiUnsetObjectFlags2Record;
|
|
|
|
typedef struct AiIFObjectFlags2HasRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s32 BITFIELD;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectFlags2HasRecord;
|
|
|
|
typedef struct AiSetMyChrPresetRecord
|
|
{
|
|
u8 cmd;
|
|
u8 PRESET;
|
|
} AiSetMyChrPresetRecord;
|
|
|
|
typedef struct AiSetChrChrPresetRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 PRESET;
|
|
} AiSetChrChrPresetRecord;
|
|
|
|
typedef struct AiSetMyPadPresetRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD_PRESET;
|
|
} AiSetMyPadPresetRecord;
|
|
|
|
typedef struct AiSetChrPadPresetRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 PAD_PRESET;
|
|
} AiSetChrPadPresetRecord;
|
|
|
|
typedef struct AiPRINTRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val[];
|
|
} AiPRINTRecord;
|
|
|
|
typedef struct AiMyTimerStartRecord
|
|
{
|
|
u8 cmd;
|
|
} AiMyTimerStartRecord;
|
|
|
|
typedef struct AiMyTimerResetRecord
|
|
{
|
|
u8 cmd;
|
|
} AiMyTimerResetRecord;
|
|
|
|
typedef struct AiMyTimerPauseRecord
|
|
{
|
|
u8 cmd;
|
|
} AiMyTimerPauseRecord;
|
|
|
|
typedef struct AiMyTimerResumeRecord
|
|
{
|
|
u8 cmd;
|
|
} AiMyTimerResumeRecord;
|
|
|
|
typedef struct AiIFMyTimerIsNotRunningRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFMyTimerIsNotRunningRecord;
|
|
|
|
typedef struct AiIFMyTimerLessThanTicksRecord
|
|
{
|
|
u8 cmd;
|
|
u8 TICKS[3];
|
|
u8 GOTOLABEL;
|
|
} AiIFMyTimerLessThanTicksRecord;
|
|
|
|
typedef struct AiIFMyTimerGreaterThanTicksRecord
|
|
{
|
|
u8 cmd;
|
|
u8 TICKS[3];
|
|
u8 GOTOLABEL;
|
|
} AiIFMyTimerGreaterThanTicksRecord;
|
|
|
|
typedef struct AiHudCountdownShowRecord
|
|
{
|
|
u8 cmd;
|
|
} AiHudCountdownShowRecord;
|
|
|
|
typedef struct AiHudCountdownHideRecord
|
|
{
|
|
u8 cmd;
|
|
} AiHudCountdownHideRecord;
|
|
|
|
typedef struct AiHudCountdownSetRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SECONDS;
|
|
} AiHudCountdownSetRecord;
|
|
|
|
typedef struct AiHudCountdownStopRecord
|
|
{
|
|
u8 cmd;
|
|
} AiHudCountdownStopRecord;
|
|
|
|
typedef struct AiHudCountdownStartRecord
|
|
{
|
|
u8 cmd;
|
|
} AiHudCountdownStartRecord;
|
|
|
|
typedef struct AiIFHudCountdownIsNotRunningRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFHudCountdownIsNotRunningRecord;
|
|
|
|
typedef struct AiIFHudCountdownLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SECONDS;
|
|
u8 GOTOLABEL;
|
|
} AiIFHudCountdownLessThanRecord;
|
|
|
|
typedef struct AiIFHudCountdownGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SECONDS;
|
|
u8 GOTOLABEL;
|
|
} AiIFHudCountdownGreaterThanRecord;
|
|
|
|
typedef struct AiTRYSpawningChrAtPadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 BODY_NUM;
|
|
s8 HEAD_NUM;
|
|
s16 PAD;
|
|
s16 AI_LIST_ID;
|
|
s32 BITFIELD;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSpawningChrAtPadRecord;
|
|
|
|
typedef struct AiTRYSpawningChrNextToChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 BODY_NUM;
|
|
s8 HEAD_NUM;
|
|
u8 CHR_NUM_TARGET;
|
|
s16 AI_LIST_ID;
|
|
s32 BITFIELD;
|
|
u8 GOTOLABEL;
|
|
} AiTRYSpawningChrNextToChrRecord;
|
|
|
|
typedef struct AiTRYGiveMeItemRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PROP_NUM;
|
|
u8 ITEM_NUM;
|
|
s32 PROPFLAG;
|
|
u8 GOTOLABEL;
|
|
} AiTRYGiveMeItemRecord;
|
|
|
|
typedef struct AiTRYGiveMeHatRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PROP_NUM;
|
|
s32 PROP_BITFIELD;
|
|
u8 GOTOLABEL;
|
|
} AiTRYGiveMeHatRecord;
|
|
|
|
typedef struct AiTRYCloningChrRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 AI_LIST_ID;
|
|
u8 GOTOLABEL;
|
|
} AiTRYCloningChrRecord;
|
|
|
|
typedef struct AiTextPrintBottomRecord
|
|
{
|
|
u8 cmd;
|
|
s16 txt;
|
|
} AiTextPrintBottomRecord;
|
|
|
|
typedef struct AiTextPrintTopRecord
|
|
{
|
|
u8 cmd;
|
|
s16 txt;
|
|
} AiTextPrintTopRecord;
|
|
|
|
typedef struct AiSfxPlayRecord
|
|
{
|
|
u8 cmd;
|
|
s16 SOUND_NUM;
|
|
s8 CHANNEL_NUM;
|
|
} AiSfxPlayRecord;
|
|
|
|
typedef struct AiSfxEmitFromObjectRecord
|
|
{
|
|
u8 cmd;
|
|
s8 slotID;
|
|
u8 OBJECT_TAG;
|
|
s16 sfxID;
|
|
} AiSfxEmitFromObjectRecord;
|
|
|
|
typedef struct AiSfxEmitFromPadRecord
|
|
{
|
|
u8 cmd;
|
|
s8 slotID;
|
|
s16 PAD;
|
|
s16 sfxID;
|
|
} AiSfxEmitFromPadRecord;
|
|
|
|
typedef struct AiSfxSetChannelVolumeRecord
|
|
{
|
|
u8 cmd;
|
|
s8 slotID;
|
|
s16 TARGET_VOLUME;
|
|
s16 sfxID;
|
|
} AiSfxSetChannelVolumeRecord;
|
|
|
|
typedef struct AiSfxFadeChannelVolumeRecord
|
|
{
|
|
u8 cmd;
|
|
s8 slotID;
|
|
s16 TARGET_VOLUME;
|
|
s16 sfxID;
|
|
} AiSfxFadeChannelVolumeRecord;
|
|
|
|
typedef struct AiSfxStopChannelRecord
|
|
{
|
|
u8 cmd;
|
|
s8 CHANNEL_NUM;
|
|
} AiSfxStopChannelRecord;
|
|
|
|
typedef struct AiIFSfxChannelVolumeLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s8 slotID;
|
|
s16 VOLUME;
|
|
u8 GOTOLABEL;
|
|
} AiIFSfxChannelVolumeLessThanRecord;
|
|
|
|
typedef struct AiVehicleStartPathRecord
|
|
{
|
|
u8 cmd;
|
|
u8 PATH_NUM;
|
|
} AiVehicleStartPathRecord;
|
|
|
|
typedef struct AiVehicleSpeedRecord
|
|
{
|
|
u8 cmd;
|
|
s16 TOP_SPEED;
|
|
s16 ACCELERATION_TIME60;
|
|
} AiVehicleSpeedRecord;
|
|
|
|
typedef struct AiAircraftRotorSpeedRecord
|
|
{
|
|
u8 cmd;
|
|
s16 ROTOR_SPEED;
|
|
s16 ACCELERATION_TIME60;
|
|
} AiAircraftRotorSpeedRecord;
|
|
|
|
typedef struct AiIFCameraIsInIntroRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFCameraIsInIntroRecord;
|
|
|
|
typedef struct AiIFCameraIsInBondSwirlRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFCameraIsInBondSwirlRecord;
|
|
|
|
typedef struct AiTvChangeScreenBankRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
u8 SCREEN_INDEX;
|
|
u8 SCREEN_BANK;
|
|
} AiTvChangeScreenBankRecord;
|
|
|
|
typedef struct AiIFBondInTankRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondInTankRecord;
|
|
|
|
typedef struct AiEndLevelRecord
|
|
{
|
|
u8 cmd;
|
|
} AiEndLevelRecord;
|
|
|
|
typedef struct AiCameraReturnToBondRecord
|
|
{
|
|
u8 cmd;
|
|
} AiCameraReturnToBondRecord;
|
|
|
|
typedef struct AiCameraLookAtBondFromPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 PAD;
|
|
} AiCameraLookAtBondFromPadRecord;
|
|
|
|
typedef struct AiCameraSwitchRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s16 LOOK_AT_BOND_FLAG;
|
|
s16 UNUSED_FLAG;
|
|
} AiCameraSwitchRecord;
|
|
|
|
typedef struct AiIFBondYPosLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s16 Y_POS;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondYPosLessThanRecord;
|
|
|
|
typedef struct AiBondDisableControlRecord
|
|
{
|
|
u8 cmd;
|
|
u8 val;
|
|
} AiBondDisableControlRecord;
|
|
|
|
typedef struct AiBondEnableControlRecord
|
|
{
|
|
u8 cmd;
|
|
} AiBondEnableControlRecord;
|
|
|
|
typedef struct AiTRYTeleportingChrToPadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiTRYTeleportingChrToPadRecord;
|
|
|
|
typedef struct AiScreenFadeToBlackRecord
|
|
{
|
|
u8 cmd;
|
|
} AiScreenFadeToBlackRecord;
|
|
|
|
typedef struct AiScreenFadeFromBlackRecord
|
|
{
|
|
u8 cmd;
|
|
} AiScreenFadeFromBlackRecord;
|
|
|
|
typedef struct AiIFScreenFadeCompletedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFScreenFadeCompletedRecord;
|
|
|
|
typedef struct AiHideAllChrsRecord
|
|
{
|
|
u8 cmd;
|
|
} AiHideAllChrsRecord;
|
|
|
|
typedef struct AiShowAllChrsRecord
|
|
{
|
|
u8 cmd;
|
|
} AiShowAllChrsRecord;
|
|
|
|
typedef struct AiDoorOpenInstantRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiDoorOpenInstantRecord;
|
|
|
|
typedef struct AiChrRemoveItemInHandRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 HAND_INDEX;
|
|
} AiChrRemoveItemInHandRecord;
|
|
|
|
typedef struct AiIfNumberOfActivePlayersLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s8 NUMBER;
|
|
u8 GOTOLABEL;
|
|
} AiIfNumberOfActivePlayersLessThanRecord;
|
|
|
|
typedef struct AiIFBondItemTotalAmmoLessThanRecord
|
|
{
|
|
u8 cmd;
|
|
s8 ITEM_NUM;
|
|
s8 AMMO_TOTAL;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondItemTotalAmmoLessThanRecord;
|
|
|
|
typedef struct AiBondEquipItemRecord
|
|
{
|
|
u8 cmd;
|
|
s8 ITEM_NUM;
|
|
} AiBondEquipItemRecord;
|
|
|
|
typedef struct AiBondEquipItemCinemaRecord
|
|
{
|
|
u8 cmd;
|
|
s8 ITEM_NUM;
|
|
} AiBondEquipItemCinemaRecord;
|
|
|
|
typedef struct AiBondSetLockedVelocityRecord
|
|
{
|
|
u8 cmd;
|
|
s8 X_SPEED60;
|
|
s8 Z_SPEED60;
|
|
} AiBondSetLockedVelocityRecord;
|
|
|
|
typedef struct AiIFObjectInRoomWithPadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
s16 PAD;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectInRoomWithPadRecord;
|
|
|
|
typedef struct AiIFImFiringAndLockedForwardRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFImFiringAndLockedForwardRecord;
|
|
|
|
typedef struct AiIFImFiringRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFImFiringRecord;
|
|
|
|
typedef struct AiSwitchSkyRecord
|
|
{
|
|
u8 cmd;
|
|
} AiSwitchSkyRecord;
|
|
|
|
typedef struct AiTriggerFadeAndExitLevelOnButtonPressRecord
|
|
{
|
|
u8 cmd;
|
|
} AiTriggerFadeAndExitLevelOnButtonPressRecord;
|
|
|
|
typedef struct AiIFBondIsDeadRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondIsDeadRecord;
|
|
|
|
typedef struct AiBondDisableDamageAndPickupsRecord
|
|
{
|
|
u8 cmd;
|
|
} AiBondDisableDamageAndPickupsRecord;
|
|
|
|
typedef struct AiBondHideWeaponsRecord
|
|
{
|
|
u8 cmd;
|
|
} AiBondHideWeaponsRecord;
|
|
|
|
typedef struct AiCameraOrbitPadRecord
|
|
{
|
|
u8 cmd;
|
|
s16 LAT_DISTANCE;
|
|
s16 VERT_DISTANCE;
|
|
s16 ORBIT_SPEED60;
|
|
s16 PAD;
|
|
s16 Y_POS_OFFSET;
|
|
s16 INITIAL_ROTATION;
|
|
} AiCameraOrbitPadRecord;
|
|
|
|
typedef struct AiCreditsRollRecord
|
|
{
|
|
u8 cmd;
|
|
} AiCreditsRollRecord;
|
|
|
|
typedef struct AiIFCreditsHasCompletedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFCreditsHasCompletedRecord;
|
|
|
|
typedef struct AiIFObjectiveAllCompletedRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFObjectiveAllCompletedRecord;
|
|
|
|
typedef struct AiIFFolderActorIsEqualRecord
|
|
{
|
|
u8 cmd;
|
|
s8 BOND_ACTOR_INDEX;
|
|
u8 GOTOLABEL;
|
|
} AiIFFolderActorIsEqualRecord;
|
|
|
|
typedef struct AiIFBondDamageAndPickupsDisabledRecord
|
|
{
|
|
u8 cmd;
|
|
u8 GOTOLABEL;
|
|
} AiIFBondDamageAndPickupsDisabledRecord;
|
|
|
|
typedef struct AiMusicPlaySlotRecord
|
|
{
|
|
u8 cmd;
|
|
s8 MUSIC_SLOT;
|
|
u8 SECONDS_STOPPED_DURATION;
|
|
u8 SECONDS_TOTAL_DURATION;
|
|
} AiMusicPlaySlotRecord;
|
|
|
|
typedef struct AiMusicStopSlotRecord
|
|
{
|
|
u8 cmd;
|
|
s8 MUSIC_SLOT;
|
|
} AiMusicStopSlotRecord;
|
|
|
|
typedef struct AiTriggerExplosionsAroundBondRecord
|
|
{
|
|
u8 cmd;
|
|
} AiTriggerExplosionsAroundBondRecord;
|
|
|
|
typedef struct AiIFKilledCiviliansGreaterThanRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CIVILIANS_KILLED;
|
|
u8 GOTOLABEL;
|
|
} AiIFKilledCiviliansGreaterThanRecord;
|
|
|
|
typedef struct AiIFChrWasShotSinceLastCheckRecord
|
|
{
|
|
u8 cmd;
|
|
u8 CHR_NUM;
|
|
u8 GOTOLABEL;
|
|
} AiIFChrWasShotSinceLastCheckRecord;
|
|
|
|
typedef struct AiBondKilledInActionRecord
|
|
{
|
|
u8 cmd;
|
|
} AiBondKilledInActionRecord;
|
|
|
|
typedef struct AiRaiseArmsRecord
|
|
{
|
|
u8 cmd;
|
|
} AiRaiseArmsRecord;
|
|
|
|
typedef struct AiGasLeakAndFadeFogRecord
|
|
{
|
|
u8 cmd;
|
|
} AiGasLeakAndFadeFogRecord;
|
|
|
|
typedef struct AiObjectRocketLaunchRecord
|
|
{
|
|
u8 cmd;
|
|
u8 OBJECT_TAG;
|
|
} AiObjectRocketLaunchRecord;
|
|
|
|
#pragma pack(0)
|
|
|
|
typedef struct coord3d
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
float x;
|
|
float y;
|
|
float z;
|
|
};
|
|
float AsArray[3];
|
|
};
|
|
} coord3d;
|
|
|
|
typedef struct bbox
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
float xmin;
|
|
float xmax;
|
|
float ymin;
|
|
float ymax;
|
|
float zmin;
|
|
float zmax;
|
|
};
|
|
float AsArray[6];
|
|
};
|
|
} bbox;
|
|
|
|
typedef struct PropDefHeaderRecord
|
|
{
|
|
unsigned short extrascale; /*0x0 Fixed-Point format char.8 eg: 0x03.80 = 3.5*/
|
|
char state;
|
|
char type; /*0x3*/
|
|
} PropDefHeaderRecord;
|
|
|
|
typedef struct AIListRecord
|
|
{
|
|
char *ailist;
|
|
int ID;
|
|
} AIListRecord;
|
|
typedef struct PadRecord /*0x2c (44) long confirmed*/
|
|
{
|
|
coord3d pos; /*0x00*/
|
|
coord3d up; /*0x0c*/
|
|
coord3d look; /*0x18*/
|
|
char *plink; /*0x24 canonical name */
|
|
void *stan; /*0x28 canonical name */
|
|
} PadRecord;
|
|
|
|
/**
|
|
* Bound Pads hold an extra Bounding Box which any prop assigned will try to
|
|
* fill (non-uniform scaling).
|
|
*/
|
|
typedef struct BoundPadRecord /*0x44 (68) long confirmed*/
|
|
{
|
|
// inherits PadRecord; /*0x00 confirmed*/
|
|
coord3d pos; /*0x00*/
|
|
coord3d up; /*0x0c*/
|
|
coord3d look; /*0x18*/
|
|
char *plink; /*0x24 canonical name */
|
|
void *stan; /*0x28 canonical name */
|
|
// temporary fix for no inheritance support by glibtools
|
|
bbox bbox; /*0x2c - 0x40 confirmed*/
|
|
} BoundPadRecord;
|
|
typedef struct waypoint
|
|
{
|
|
int padID; // Pad ID to anchor waypoint to.
|
|
int *neighbours; // Array of neighbouring (connected) waypoint IDs (ending in -1)
|
|
int groupNum; // index entry in the waygroup table that contains this path entry
|
|
int dist; // Initialise to 0, used by engine for pathfinding Heuristics between waypoints within a set.
|
|
} waypoint;
|
|
|
|
/**
|
|
* The Subset waygroup table which lists the IDs of the waypoints that
|
|
* belong to each group as well as any connected groups
|
|
*/
|
|
typedef struct waygroup
|
|
{
|
|
int *neighbours; // Array of neighbouring (connected) waygroup IDs (ending in -1)
|
|
int *waypoints; // Array of waypoint IDs (ending in -1)
|
|
int dist; // Initialise to 0, used by engine for pathfinding Heuristics between sets
|
|
} waygroup;
|
|
|
|
/**
|
|
* Path for guard to patrol (loop) or get from A to B (linear)
|
|
*/
|
|
typedef struct PathRecord
|
|
{
|
|
int *waypoints; // array of waypoint IDs in path (ending in -1)
|
|
char ID; // path ID
|
|
char isLoop; // 0x05 Path loops
|
|
short len; /*0x06 unused*/
|
|
} PathRecord;
|
|
|
|
typedef struct stagesetup
|
|
{
|
|
waypoint *pathwaypoints;
|
|
waygroup *waypointgroups;
|
|
void *intro;
|
|
PropDefHeaderRecord *propDefs;
|
|
PathRecord *patrolpaths;
|
|
AIListRecord *ailists;
|
|
PadRecord *pads;
|
|
BoundPadRecord *boundpads;
|
|
char **padnames;
|
|
char **boundpadnames;
|
|
} stagesetup;
|
|
|
|
#define MAX 10
|
|
|
|
int top = -1;
|
|
char stack[MAX];
|
|
|
|
typedef struct
|
|
{
|
|
int id;
|
|
int used;
|
|
int num0s;
|
|
} LLEnum;
|
|
LLEnum labels[100];
|
|
LLEnum tags[100];
|
|
LLEnum keys[100];
|
|
LLEnum chrs[100];
|
|
LLEnum pads[1000];
|
|
LLEnum SubIDs[100];
|
|
|
|
char *hasName;
|
|
|
|
|
|
|
|
/*PUSH FUNCTION*/
|
|
int push(int item)
|
|
{
|
|
if (top == (MAX - 1))
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
++top;
|
|
stack[top] = item;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
/*POP */
|
|
int pop()
|
|
{
|
|
if (top == -1)
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
--top;
|
|
return stack[top + 1];
|
|
}
|
|
}
|
|
|
|
/*Sniff */
|
|
int sniff()
|
|
{
|
|
if (top == -1)
|
|
{
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return stack[top];
|
|
}
|
|
}
|
|
int stackFind(int find)
|
|
{
|
|
int i;
|
|
if (top == -1)
|
|
{
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
for (i = top; i >= 0; --i)
|
|
{
|
|
if (stack[i] == find) return i;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
int stackFindAndremove(int find)
|
|
{
|
|
int i = stackFind(find);
|
|
if (i >= 0)
|
|
{
|
|
for (; i <= top; i++)
|
|
{
|
|
stack[i] = i < MAX ? stack[i + 1] : 0;
|
|
}
|
|
top--;
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
void displayStack()
|
|
{
|
|
int i;
|
|
|
|
printf("\nThe label Stack is: ");
|
|
|
|
if (top == -1)
|
|
{
|
|
printf("empty");
|
|
}
|
|
else
|
|
{
|
|
for (i = top; i >= 0; --i)
|
|
{
|
|
printf("\n%3d", stack[i]);
|
|
}
|
|
}
|
|
|
|
printf("\n---------------\n\n");
|
|
}
|
|
void _AddLabel(int lbl, void *ptr)
|
|
{
|
|
int i = 0;
|
|
int found = 0;
|
|
LLEnum *labels = ptr;
|
|
if (lbl == 0)
|
|
{
|
|
labels[0].num0s++;
|
|
return;
|
|
}
|
|
|
|
while (labels[i].id != 0)
|
|
{
|
|
if (lbl == labels[i].id)
|
|
{
|
|
found = 1;
|
|
labels[i].used++;
|
|
}
|
|
i++;
|
|
}
|
|
|
|
if (!found)
|
|
{
|
|
labels[i].id = lbl;
|
|
labels[i].used++;
|
|
}
|
|
}
|
|
void AddLabel(char lbl)
|
|
{
|
|
_AddLabel(lbl, labels);
|
|
}
|
|
void AddTag(char lbl)
|
|
{
|
|
_AddLabel(lbl, tags);
|
|
}
|
|
void AddKey(char lbl)
|
|
{
|
|
_AddLabel(lbl, keys);
|
|
}
|
|
void AddChr(char lbl)
|
|
{
|
|
_AddLabel(lbl, chrs);
|
|
}
|
|
void AddPad(short lbl)
|
|
{
|
|
_AddLabel(lbl, pads);
|
|
}
|
|
void AddSubID(int lbl)
|
|
{
|
|
_AddLabel(lbl, SubIDs);
|
|
}
|
|
|
|
void SortEnums(LLEnum *labels)
|
|
{
|
|
int i, j, tempid, tempnum;
|
|
|
|
for (i = 0; i < 100; ++i)
|
|
{
|
|
if (labels[i].id != 0)
|
|
{
|
|
for (j = i + 1; j < 100; ++j)
|
|
{
|
|
if (labels[j].id != 0)
|
|
{
|
|
if (labels[i].id > labels[j].id)
|
|
{
|
|
tempid = labels[i].id;
|
|
tempnum = labels[i].used;
|
|
labels[i].id = labels[j].id;
|
|
labels[i].used = labels[j].used;
|
|
labels[j].id = tempid;
|
|
labels[j].used = tempnum;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void printenum(LLEnum labels[], char *enumname)
|
|
{
|
|
int i = 0;
|
|
if (labels[0].num0s || labels[i].id)
|
|
{
|
|
printf(" enum %s\n {\n", enumname);
|
|
if (labels[0].num0s) printf(" %s0, //used %d times\n", enumname, labels[0].num0s);
|
|
while (labels[i].id != 0)
|
|
{
|
|
if (!(enumname == "chr" && ((signed char)labels[i].id < 0 && (signed char)labels[i].id > -9)))
|
|
{
|
|
if ((i > 0 && labels[i - 1].id == labels[i].id - 1)||(i==0 && labels[0].num0s && labels[0].id ==1))
|
|
{
|
|
printf(" %s%u, //Used %d times\n", enumname, labels[i].id, labels[i].used);
|
|
}
|
|
else
|
|
{
|
|
printf(" %s%u = %u, //Used %d times\n", enumname, labels[i].id, labels[i].id, labels[i].used);
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
printf(" };\n");
|
|
}
|
|
}
|
|
|
|
int getDataSize(FILE *pfile ,void *pointer, int endtag)
|
|
{
|
|
int i = 0;
|
|
|
|
fseek(pfile, (int)pointer, SEEK_SET);
|
|
|
|
// scan for end of Record (NULL or -1)
|
|
do
|
|
{
|
|
fread(&i, 4, 1, pfile);
|
|
|
|
} while (i != endtag);
|
|
|
|
return (ftell(pfile) ) - (int)pointer;
|
|
}
|
|
|
|
int chraiitemsize(unsigned char *AIList, int offset)
|
|
{
|
|
switch (AIList[offset])
|
|
{
|
|
case AI_GotoNext:
|
|
return sizeof(AiGotoNextRecord);
|
|
case AI_GotoFirst:
|
|
return sizeof(AiGotoFirstRecord);
|
|
case AI_Label:
|
|
return sizeof(AiLabelRecord);
|
|
case AI_Yield:
|
|
return sizeof(AiYieldRecord);
|
|
case AI_EndList:
|
|
return sizeof(AiEndListRecord);
|
|
case AI_SetChrAiList:
|
|
return sizeof(AiSetChrAiListRecord);
|
|
case AI_SetReturnAiList:
|
|
return sizeof(AiSetReturnAiListRecord);
|
|
case AI_Return:
|
|
return sizeof(AiReturnRecord);
|
|
case AI_Stop:
|
|
return sizeof(AiStopRecord);
|
|
case AI_Kneel:
|
|
return sizeof(AiKneelRecord);
|
|
case AI_PlayAnimation:
|
|
return sizeof(AiPlayAnimationRecord);
|
|
case AI_IFPlayingAnimation:
|
|
return sizeof(AiIFPlayingAnimationRecord);
|
|
case AI_PointAtBond:
|
|
return sizeof(AiPointAtBondRecord);
|
|
case AI_LookSurprised:
|
|
return sizeof(AiLookSurprisedRecord);
|
|
case AI_TRYSidestepping:
|
|
return sizeof(AiTRYSidesteppingRecord);
|
|
case AI_TRYSideHopping:
|
|
return sizeof(AiTRYSideHoppingRecord);
|
|
case AI_TRYSideRunning:
|
|
return sizeof(AiTRYSideRunningRecord);
|
|
case AI_TRYFiringWalk:
|
|
return sizeof(AiTRYFiringWalkRecord);
|
|
case AI_TRYFiringRun:
|
|
return sizeof(AiTRYFiringRunRecord);
|
|
case AI_TRYFiringRoll:
|
|
return sizeof(AiTRYFiringRollRecord);
|
|
case AI_TRYFireOrAimAtTarget:
|
|
return sizeof(AiTRYFireOrAimAtTargetRecord);
|
|
case AI_TRYFireOrAimAtTargetKneel:
|
|
return sizeof(AiTRYFireOrAimAtTargetKneelRecord);
|
|
case AI_IFImFiring:
|
|
return sizeof(AiIFImFiringRecord);
|
|
case AI_IFImFiringAndLockedForward:
|
|
return sizeof(AiIFImFiringAndLockedForwardRecord);
|
|
case AI_TRYFireOrAimAtTargetUpdate:
|
|
return sizeof(AiTRYFireOrAimAtTargetUpdateRecord);
|
|
case AI_TRYFacingTarget:
|
|
return sizeof(AiTRYFacingTargetRecord);
|
|
case AI_HitChrWithItem:
|
|
return sizeof(AiHitChrWithItemRecord);
|
|
case AI_ChrHitChr:
|
|
return sizeof(AiChrHitChrRecord);
|
|
case AI_TRYThrowingGrenade:
|
|
return sizeof(AiTRYThrowingGrenadeRecord);
|
|
case AI_TRYDroppingItem:
|
|
return sizeof(AiTRYDroppingItemRecord);
|
|
case AI_RunToPad:
|
|
return sizeof(AiRunToPadRecord);
|
|
case AI_RunToPadPreset:
|
|
return sizeof(AiRunToPadPresetRecord);
|
|
case AI_WalkToPad:
|
|
return sizeof(AiWalkToPadRecord);
|
|
case AI_SprintToPad:
|
|
return sizeof(AiSprintToPadRecord);
|
|
case AI_StartPatrol:
|
|
return sizeof(AiStartPatrolRecord);
|
|
case AI_Surrender:
|
|
return sizeof(AiSurrenderRecord);
|
|
case AI_RemoveMe:
|
|
return sizeof(AiRemoveMeRecord);
|
|
case AI_ChrRemoveInstant:
|
|
return sizeof(AiChrRemoveInstantRecord);
|
|
case AI_TRYTriggeringAlarmAtPad:
|
|
return sizeof(AiTRYTriggeringAlarmAtPadRecord);
|
|
case AI_AlarmOn:
|
|
return sizeof(AiAlarmOnRecord);
|
|
case AI_AlarmOff:
|
|
return sizeof(AiAlarmOffRecord);
|
|
case AI_TRYRunFromBond:
|
|
return sizeof(AiTRYRunFromBondRecord);
|
|
case AI_TRYRunToBond:
|
|
return sizeof(AiTRYRunToBondRecord);
|
|
case AI_TRYWalkToBond:
|
|
return sizeof(AiTRYWalkToBondRecord);
|
|
case AI_TRYSprintToBond:
|
|
return sizeof(AiTRYSprintToBondRecord);
|
|
case AI_TRYFindCover:
|
|
return sizeof(AiTRYFindCoverRecord);
|
|
case AI_TRYRunToChr:
|
|
return sizeof(AiTRYRunToChrRecord);
|
|
case AI_TRYWalkToChr:
|
|
return sizeof(AiTRYWalkToChrRecord);
|
|
case AI_TRYSprintToChr:
|
|
return sizeof(AiTRYSprintToChrRecord);
|
|
case AI_IFImOnPatrolOrStopped:
|
|
return sizeof(AiIFImOnPatrolOrStoppedRecord);
|
|
case AI_IFChrDyingOrDead:
|
|
return sizeof(AiIFChrDyingOrDeadRecord);
|
|
case AI_IFChrDoesNotExist:
|
|
return sizeof(AiIFChrDoesNotExistRecord);
|
|
case AI_IFISeeBond:
|
|
return sizeof(AiIFISeeBondRecord);
|
|
case AI_SetNewRandom:
|
|
return sizeof(AiSetNewRandomRecord);
|
|
case AI_IFRandomLessThan:
|
|
return sizeof(AiIFRandomLessThanRecord);
|
|
case AI_IFRandomGreaterThan:
|
|
return sizeof(AiIFRandomGreaterThanRecord);
|
|
case AI_IFICanHearAlarm:
|
|
return sizeof(AiIFICanHearAlarmRecord);
|
|
case AI_IFAlarmIsOn:
|
|
return sizeof(AiIFAlarmIsOnRecord);
|
|
case AI_IFGasIsLeaking:
|
|
return sizeof(AiIFGasIsLeakingRecord);
|
|
case AI_IFIHeardBond:
|
|
return sizeof(AiIFIHeardBondRecord);
|
|
case AI_IFISeeSomeoneShot:
|
|
return sizeof(AiIFISeeSomeoneShotRecord);
|
|
case AI_IFISeeSomeoneDie:
|
|
return sizeof(AiIFISeeSomeoneDieRecord);
|
|
case AI_IFICouldSeeBond:
|
|
return sizeof(AiIFICouldSeeBondRecord);
|
|
case AI_IFICouldSeeBondsStan:
|
|
return sizeof(AiIFICouldSeeBondsStanRecord);
|
|
case AI_IFIWasShotRecently:
|
|
return sizeof(AiIFIWasShotRecentlyRecord);
|
|
case AI_IFIHeardBondRecently:
|
|
return sizeof(AiIFIHeardBondRecentlyRecord);
|
|
case AI_IFImInRoomWithChr:
|
|
return sizeof(AiIFImInRoomWithChrRecord);
|
|
case AI_IFIveNotBeenSeen:
|
|
return sizeof(AiIFIveNotBeenSeenRecord);
|
|
case AI_IFImOnScreen:
|
|
return sizeof(AiIFImOnScreenRecord);
|
|
case AI_IFMyRoomIsOnScreen:
|
|
return sizeof(AiIFMyRoomIsOnScreenRecord);
|
|
case AI_IFRoomWithPadIsOnScreen:
|
|
return sizeof(AiIFRoomWithPadIsOnScreenRecord);
|
|
case AI_IFImTargetedByBond:
|
|
return sizeof(AiIFImTargetedByBondRecord);
|
|
case AI_IFBondMissedMe:
|
|
return sizeof(AiIFBondMissedMeRecord);
|
|
case AI_IFMyAngleToBondLessThan:
|
|
return sizeof(AiIFMyAngleToBondLessThanRecord);
|
|
case AI_IFMyAngleToBondGreaterThan:
|
|
return sizeof(AiIFMyAngleToBondGreaterThanRecord);
|
|
case AI_IFMyAngleFromBondLessThan:
|
|
return sizeof(AiIFMyAngleFromBondLessThanRecord);
|
|
case AI_IFMyAngleFromBondGreaterThan:
|
|
return sizeof(AiIFMyAngleFromBondGreaterThanRecord);
|
|
case AI_IFMyDistanceToBondLessThanDecimeter:
|
|
return sizeof(AiIFMyDistanceToBondLessThanDecimeterRecord);
|
|
case AI_IFMyDistanceToBondGreaterThanDecimeter:
|
|
return sizeof(AiIFMyDistanceToBondGreaterThanDecimeterRecord);
|
|
case AI_IFChrDistanceToPadLessThanDecimeter:
|
|
return sizeof(AiIFChrDistanceToPadLessThanDecimeterRecord);
|
|
case AI_IFChrDistanceToPadGreaterThanDecimeter:
|
|
return sizeof(AiIFChrDistanceToPadGreaterThanDecimeterRecord);
|
|
case AI_IFMyDistanceToChrLessThanDecimeter:
|
|
return sizeof(AiIFMyDistanceToChrLessThanDecimeterRecord);
|
|
case AI_IFMyDistanceToChrGreaterThanDecimeter:
|
|
return sizeof(AiIFMyDistanceToChrGreaterThanDecimeterRecord);
|
|
case AI_TRYSettingMyPresetToChrWithinDistanceDecimeter:
|
|
return sizeof(AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord);
|
|
case AI_IFBondDistanceToPadLessThanDecimeter:
|
|
return sizeof(AiIFBondDistanceToPadLessThanDecimeterRecord);
|
|
case AI_IFBondDistanceToPadGreaterThanDecimeter:
|
|
return sizeof(AiIFBondDistanceToPadGreaterThanDecimeterRecord);
|
|
case AI_IFChrInRoomWithPad:
|
|
return sizeof(AiIFChrInRoomWithPadRecord);
|
|
case AI_IFBondInRoomWithPad:
|
|
return sizeof(AiIFBondInRoomWithPadRecord);
|
|
case AI_IFBondCollectedObject:
|
|
return sizeof(AiIFBondCollectedObjectRecord);
|
|
case AI_IFKeyDropped:
|
|
return sizeof(AiIFKeyDroppedRecord);
|
|
case AI_IFItemIsAttachedToObject:
|
|
return sizeof(AiIFItemIsAttachedToObjectRecord);
|
|
case AI_IFBondHasItemEquipped:
|
|
return sizeof(AiIFBondHasItemEquippedRecord);
|
|
case AI_IFObjectExists:
|
|
return sizeof(AiIFObjectExistsRecord);
|
|
case AI_IFObjectNotDestroyed:
|
|
return sizeof(AiIFObjectNotDestroyedRecord);
|
|
case AI_IFObjectWasActivated:
|
|
return sizeof(AiIFObjectWasActivatedRecord);
|
|
case AI_IFBondUsedGadgetOnObject:
|
|
return sizeof(AiIFBondUsedGadgetOnObjectRecord);
|
|
case AI_ActivateObject:
|
|
return sizeof(AiActivateObjectRecord);
|
|
case AI_DestroyObject:
|
|
return sizeof(AiDestroyObjectRecord);
|
|
case AI_DropObject:
|
|
return sizeof(AiDropObjectRecord);
|
|
case AI_ChrDropAllConcealedItems:
|
|
return sizeof(AiChrDropAllConcealedItemsRecord);
|
|
case AI_ChrDropAllHeldItems:
|
|
return sizeof(AiChrDropAllHeldItemsRecord);
|
|
case AI_BondCollectObject:
|
|
return sizeof(AiBondCollectObjectRecord);
|
|
case AI_ChrEquipObject:
|
|
return sizeof(AiChrEquipObjectRecord);
|
|
case AI_MoveObject:
|
|
return sizeof(AiMoveObjectRecord);
|
|
case AI_DoorOpen:
|
|
return sizeof(AiDoorOpenRecord);
|
|
case AI_DoorClose:
|
|
return sizeof(AiDoorCloseRecord);
|
|
case AI_IFDoorStateEqual:
|
|
return sizeof(AiIFDoorStateEqualRecord);
|
|
case AI_IFDoorHasBeenOpenedBefore:
|
|
return sizeof(AiIFDoorHasBeenOpenedBeforeRecord);
|
|
case AI_DoorSetLock:
|
|
return sizeof(AiDoorSetLockRecord);
|
|
case AI_DoorUnsetLock:
|
|
return sizeof(AiDoorUnsetLockRecord);
|
|
case AI_IFDoorLockEqual:
|
|
return sizeof(AiIFDoorLockEqualRecord);
|
|
case AI_IFObjectiveNumComplete:
|
|
return sizeof(AiIFObjectiveNumCompleteRecord);
|
|
case AI_TRYUnknown6e:
|
|
return sizeof(AiTRYUnknown6eRecord);
|
|
case AI_TRYUnknown6f:
|
|
return sizeof(AiTRYUnknown6fRecord);
|
|
case AI_IFGameDifficultyLessThan:
|
|
return sizeof(AiIFGameDifficultyLessThanRecord);
|
|
case AI_IFGameDifficultyGreaterThan:
|
|
return sizeof(AiIFGameDifficultyGreaterThanRecord);
|
|
case AI_IFMissionTimeLessThan:
|
|
return sizeof(AiIFMissionTimeLessThanRecord);
|
|
case AI_IFMissionTimeGreaterThan:
|
|
return sizeof(AiIFMissionTimeGreaterThanRecord);
|
|
case AI_IFSystemPowerTimeLessThan:
|
|
return sizeof(AiIFSystemPowerTimeLessThanRecord);
|
|
case AI_IFSystemPowerTimeGreaterThan:
|
|
return sizeof(AiIFSystemPowerTimeGreaterThanRecord);
|
|
case AI_IFLevelIdLessThan:
|
|
return sizeof(AiIFLevelIdLessThanRecord);
|
|
case AI_IFLevelIdGreaterThan:
|
|
return sizeof(AiIFLevelIdGreaterThanRecord);
|
|
case AI_IFMyNumArghsLessThan:
|
|
return sizeof(AiIFMyNumArghsLessThanRecord);
|
|
case AI_IFMyNumArghsGreaterThan:
|
|
return sizeof(AiIFMyNumArghsGreaterThanRecord);
|
|
case AI_IFMyNumCloseArghsLessThan:
|
|
return sizeof(AiIFMyNumCloseArghsLessThanRecord);
|
|
case AI_IFMyNumCloseArghsGreaterThan:
|
|
return sizeof(AiIFMyNumCloseArghsGreaterThanRecord);
|
|
case AI_IFChrHealthLessThan:
|
|
return sizeof(AiIFChrHealthLessThanRecord);
|
|
case AI_IFChrHealthGreaterThan:
|
|
return sizeof(AiIFChrHealthGreaterThanRecord);
|
|
case AI_IFChrWasDamagedSinceLastCheck:
|
|
return sizeof(AiIFChrWasDamagedSinceLastCheckRecord);
|
|
case AI_IFBondHealthLessThan:
|
|
return sizeof(AiIFBondHealthLessThanRecord);
|
|
case AI_IFBondHealthGreaterThan:
|
|
return sizeof(AiIFBondHealthGreaterThanRecord);
|
|
case AI_SetMyMorale:
|
|
return sizeof(AiSetMyMoraleRecord);
|
|
case AI_AddToMyMorale:
|
|
return sizeof(AiAddToMyMoraleRecord);
|
|
case AI_SubtractFromMyMorale:
|
|
return sizeof(AiSubtractFromMyMoraleRecord);
|
|
case AI_IFMyMoraleLessThan:
|
|
return sizeof(AiIFMyMoraleLessThanRecord);
|
|
case AI_IFMyMoraleLessThanRandom:
|
|
return sizeof(AiIFMyMoraleLessThanRandomRecord);
|
|
case AI_SetMyAlertness:
|
|
return sizeof(AiSetMyAlertnessRecord);
|
|
case AI_AddToMyAlertness:
|
|
return sizeof(AiAddToMyAlertnessRecord);
|
|
case AI_SubtractFromMyAlertness:
|
|
return sizeof(AiSubtractFromMyAlertnessRecord);
|
|
case AI_IFMyAlertnessLessThan:
|
|
return sizeof(AiIFMyAlertnessLessThanRecord);
|
|
case AI_IFMyAlertnessLessThanRandom:
|
|
return sizeof(AiIFMyAlertnessLessThanRandomRecord);
|
|
case AI_SetMyHearingScale:
|
|
return sizeof(AiSetMyHearingScaleRecord);
|
|
case AI_SetMyVisionRange:
|
|
return sizeof(AiSetMyVisionRangeRecord);
|
|
case AI_SetMyGrenadeProbability:
|
|
return sizeof(AiSetMyGrenadeProbabilityRecord);
|
|
case AI_SetMyChrNum:
|
|
return sizeof(AiSetMyChrNumRecord);
|
|
case AI_SetMyHealthTotal:
|
|
return sizeof(AiSetMyHealthTotalRecord);
|
|
case AI_SetMyArmour:
|
|
return sizeof(AiSetMyArmourRecord);
|
|
case AI_SetMySpeedRating:
|
|
return sizeof(AiSetMySpeedRatingRecord);
|
|
case AI_SetMyArghRating:
|
|
return sizeof(AiSetMyArghRatingRecord);
|
|
case AI_SetMyAccuracyRating:
|
|
return sizeof(AiSetMyAccuracyRatingRecord);
|
|
case AI_SetMyFlags2:
|
|
return sizeof(AiSetMyFlags2Record);
|
|
case AI_UnsetMyFlags2:
|
|
return sizeof(AiUnsetMyFlags2Record);
|
|
case AI_IFMyFlags2Has:
|
|
return sizeof(AiIFMyFlags2HasRecord);
|
|
case AI_SetChrBitfield:
|
|
return sizeof(AiSetChrBitfieldRecord);
|
|
case AI_UnsetChrBitfield:
|
|
return sizeof(AiUnsetChrBitfieldRecord);
|
|
case AI_IFChrBitfieldHas:
|
|
return sizeof(AiIFChrBitfieldHasRecord);
|
|
case AI_SetObjectiveBitfield:
|
|
return sizeof(AiSetObjectiveBitfieldRecord);
|
|
case AI_UnsetObjectiveBitfield:
|
|
return sizeof(AiUnsetObjectiveBitfieldRecord);
|
|
case AI_IFObjectiveBitfieldHas:
|
|
return sizeof(AiIFObjectiveBitfieldHasRecord);
|
|
case AI_SetMychrflags:
|
|
return sizeof(AiSetMychrflagsRecord);
|
|
case AI_UnsetMychrflags:
|
|
return sizeof(AiUnsetMychrflagsRecord);
|
|
case AI_IFMychrflagsHas:
|
|
return sizeof(AiIFMychrflagsHasRecord);
|
|
case AI_SetChrchrflags:
|
|
return sizeof(AiSetChrchrflagsRecord);
|
|
case AI_UnsetChrchrflags:
|
|
return sizeof(AiUnsetChrchrflagsRecord);
|
|
case AI_IFChrchrflagsHas:
|
|
return sizeof(AiIFChrchrflagsHasRecord);
|
|
case AI_SetObjectFlags:
|
|
return sizeof(AiSetObjectFlagsRecord);
|
|
case AI_UnsetObjectFlags:
|
|
return sizeof(AiUnsetObjectFlagsRecord);
|
|
case AI_IFObjectFlagsHas:
|
|
return sizeof(AiIFObjectFlagsHasRecord);
|
|
case AI_SetObjectFlags2:
|
|
return sizeof(AiSetObjectFlags2Record);
|
|
case AI_UnsetObjectFlags2:
|
|
return sizeof(AiUnsetObjectFlags2Record);
|
|
case AI_IFObjectFlags2Has:
|
|
return sizeof(AiIFObjectFlags2HasRecord);
|
|
case AI_SetMyChrPreset:
|
|
return sizeof(AiSetMyChrPresetRecord);
|
|
case AI_SetChrChrPreset:
|
|
return sizeof(AiSetChrChrPresetRecord);
|
|
case AI_SetMyPadPreset:
|
|
return sizeof(AiSetMyPadPresetRecord);
|
|
case AI_SetChrPadPreset:
|
|
return sizeof(AiSetChrPadPresetRecord);
|
|
case AI_MyTimerStart:
|
|
return sizeof(AiMyTimerStartRecord);
|
|
case AI_MyTimerReset:
|
|
return sizeof(AiMyTimerResetRecord);
|
|
case AI_MyTimerPause:
|
|
return sizeof(AiMyTimerPauseRecord);
|
|
case AI_MyTimerResume:
|
|
return sizeof(AiMyTimerResumeRecord);
|
|
case AI_IFMyTimerIsNotRunning:
|
|
return sizeof(AiIFMyTimerIsNotRunningRecord);
|
|
case AI_IFMyTimerLessThanTicks:
|
|
return sizeof(AiIFMyTimerLessThanTicksRecord);
|
|
case AI_IFMyTimerGreaterThanTicks:
|
|
return sizeof(AiIFMyTimerGreaterThanTicksRecord);
|
|
case AI_HudCountdownShow:
|
|
return sizeof(AiHudCountdownShowRecord);
|
|
case AI_HudCountdownHide:
|
|
return sizeof(AiHudCountdownHideRecord);
|
|
case AI_HudCountdownSet:
|
|
return sizeof(AiHudCountdownSetRecord);
|
|
case AI_HudCountdownStop:
|
|
return sizeof(AiHudCountdownStopRecord);
|
|
case AI_HudCountdownStart:
|
|
return sizeof(AiHudCountdownStartRecord);
|
|
case AI_IFHudCountdownIsNotRunning:
|
|
return sizeof(AiIFHudCountdownIsNotRunningRecord);
|
|
case AI_IFHudCountdownLessThan:
|
|
return sizeof(AiIFHudCountdownLessThanRecord);
|
|
case AI_IFHudCountdownGreaterThan:
|
|
return sizeof(AiIFHudCountdownGreaterThanRecord);
|
|
case AI_TRYSpawningChrAtPad:
|
|
return sizeof(AiTRYSpawningChrAtPadRecord);
|
|
case AI_TRYSpawningChrNextToChr:
|
|
return sizeof(AiTRYSpawningChrNextToChrRecord);
|
|
case AI_TRYGiveMeItem:
|
|
return sizeof(AiTRYGiveMeItemRecord);
|
|
case AI_TRYGiveMeHat:
|
|
return sizeof(AiTRYGiveMeHatRecord);
|
|
case AI_TRYCloningChr:
|
|
return sizeof(AiTRYCloningChrRecord);
|
|
case AI_TextPrintBottom:
|
|
return sizeof(AiTextPrintBottomRecord);
|
|
case AI_TextPrintTop:
|
|
return sizeof(AiTextPrintTopRecord);
|
|
case AI_SfxPlay:
|
|
return sizeof(AiSfxPlayRecord);
|
|
case AI_SfxEmitFromObject:
|
|
return sizeof(AiSfxEmitFromObjectRecord);
|
|
case AI_SfxEmitFromPad:
|
|
return sizeof(AiSfxEmitFromPadRecord);
|
|
case AI_SfxSetChannelVolume:
|
|
return sizeof(AiSfxSetChannelVolumeRecord);
|
|
case AI_SfxFadeChannelVolume:
|
|
return sizeof(AiSfxFadeChannelVolumeRecord);
|
|
case AI_SfxStopChannel:
|
|
return sizeof(AiSfxStopChannelRecord);
|
|
case AI_IFSfxChannelVolumeLessThan:
|
|
return sizeof(AiIFSfxChannelVolumeLessThanRecord);
|
|
case AI_VehicleStartPath:
|
|
return sizeof(AiVehicleStartPathRecord);
|
|
case AI_VehicleSpeed:
|
|
return sizeof(AiVehicleSpeedRecord);
|
|
case AI_AircraftRotorSpeed:
|
|
return sizeof(AiAircraftRotorSpeedRecord);
|
|
case AI_IFCameraIsInIntro:
|
|
return sizeof(AiIFCameraIsInIntroRecord);
|
|
case AI_IFCameraIsInBondSwirl:
|
|
return sizeof(AiIFCameraIsInBondSwirlRecord);
|
|
case AI_TvChangeScreenBank:
|
|
return sizeof(AiTvChangeScreenBankRecord);
|
|
case AI_IFBondInTank:
|
|
return sizeof(AiIFBondInTankRecord);
|
|
case AI_EndLevel:
|
|
return sizeof(AiEndLevelRecord);
|
|
case AI_CameraReturnToBond:
|
|
return sizeof(AiCameraReturnToBondRecord);
|
|
case AI_CameraLookAtBondFromPad:
|
|
return sizeof(AiCameraLookAtBondFromPadRecord);
|
|
case AI_CameraSwitch:
|
|
return sizeof(AiCameraSwitchRecord);
|
|
case AI_IFBondYPosLessThan:
|
|
return sizeof(AiIFBondYPosLessThanRecord);
|
|
case AI_BondDisableControl:
|
|
return sizeof(AiBondDisableControlRecord);
|
|
case AI_BondEnableControl:
|
|
return sizeof(AiBondEnableControlRecord);
|
|
case AI_TRYTeleportingChrToPad:
|
|
return sizeof(AiTRYTeleportingChrToPadRecord);
|
|
case AI_ScreenFadeToBlack:
|
|
return sizeof(AiScreenFadeToBlackRecord);
|
|
case AI_ScreenFadeFromBlack:
|
|
return sizeof(AiScreenFadeFromBlackRecord);
|
|
case AI_IFScreenFadeCompleted:
|
|
return sizeof(AiIFScreenFadeCompletedRecord);
|
|
case AI_HideAllChrs:
|
|
return sizeof(AiHideAllChrsRecord);
|
|
case AI_ShowAllChrs:
|
|
return sizeof(AiShowAllChrsRecord);
|
|
case AI_DoorOpenInstant:
|
|
return sizeof(AiDoorOpenInstantRecord);
|
|
case AI_ChrRemoveItemInHand:
|
|
return sizeof(AiChrRemoveItemInHandRecord);
|
|
case AI_IfNumberOfActivePlayersLessThan:
|
|
return sizeof(AiIfNumberOfActivePlayersLessThanRecord);
|
|
case AI_IFBondItemTotalAmmoLessThan:
|
|
return sizeof(AiIFBondItemTotalAmmoLessThanRecord);
|
|
case AI_BondEquipItem:
|
|
return sizeof(AiBondEquipItemRecord);
|
|
case AI_BondEquipItemCinema:
|
|
return sizeof(AiBondEquipItemCinemaRecord);
|
|
case AI_BondSetLockedVelocity:
|
|
return sizeof(AiBondSetLockedVelocityRecord);
|
|
case AI_IFObjectInRoomWithPad:
|
|
return sizeof(AiIFObjectInRoomWithPadRecord);
|
|
case AI_SwitchSky:
|
|
return sizeof(AiSwitchSkyRecord);
|
|
case AI_TriggerFadeAndExitLevelOnButtonPress:
|
|
return sizeof(AiTriggerFadeAndExitLevelOnButtonPressRecord);
|
|
case AI_IFBondIsDead:
|
|
return sizeof(AiIFBondIsDeadRecord);
|
|
case AI_BondDisableDamageAndPickups:
|
|
return sizeof(AiBondDisableDamageAndPickupsRecord);
|
|
case AI_BondHideWeapons:
|
|
return sizeof(AiBondHideWeaponsRecord);
|
|
case AI_CameraOrbitPad:
|
|
return sizeof(AiCameraOrbitPadRecord);
|
|
case AI_CreditsRoll:
|
|
return sizeof(AiCreditsRollRecord);
|
|
case AI_IFCreditsHasCompleted:
|
|
return sizeof(AiIFCreditsHasCompletedRecord);
|
|
case AI_IFObjectiveAllCompleted:
|
|
return sizeof(AiIFObjectiveAllCompletedRecord);
|
|
case AI_IFFolderActorIsEqual:
|
|
return sizeof(AiIFFolderActorIsEqualRecord);
|
|
case AI_IFBondDamageAndPickupsDisabled:
|
|
return sizeof(AiIFBondDamageAndPickupsDisabledRecord);
|
|
case AI_MusicPlaySlot:
|
|
return sizeof(AiMusicPlaySlotRecord);
|
|
case AI_MusicStopSlot:
|
|
return sizeof(AiMusicStopSlotRecord);
|
|
case AI_TriggerExplosionsAroundBond:
|
|
return sizeof(AiTriggerExplosionsAroundBondRecord);
|
|
case AI_IFKilledCiviliansGreaterThan:
|
|
return sizeof(AiIFKilledCiviliansGreaterThanRecord);
|
|
case AI_IFChrWasShotSinceLastCheck:
|
|
return sizeof(AiIFChrWasShotSinceLastCheckRecord);
|
|
case AI_BondKilledInAction:
|
|
return sizeof(AiBondKilledInActionRecord);
|
|
case AI_RaiseArms:
|
|
return sizeof(AiRaiseArmsRecord);
|
|
case AI_GasLeakAndFadeFog:
|
|
return sizeof(AiGasLeakAndFadeFogRecord);
|
|
case AI_ObjectRocketLaunch:
|
|
return sizeof(AiObjectRocketLaunchRecord);
|
|
case AI_PRINT:
|
|
{
|
|
int pos = offset + 1;
|
|
while (AIList[pos] != 0)
|
|
{
|
|
++pos;
|
|
}
|
|
return (pos - offset) + 1;
|
|
}
|
|
default:
|
|
printf("chraiitemsize: unknown type %d!\n", AIList[offset]);
|
|
printf("%d,%d,%d,[%d],%d,%d,%d\n", AIList[offset - 3], AIList[offset - 2], AIList[offset - 1], AIList[offset ], AIList[offset +1], AIList[offset + 2], AIList[offset +3]);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
#define EraseCommand printf("\r%*s\r", (int)strlen(AI_CMD_ToString[AiList[Offset]]) + ((int)strlen((char *)tabs) + 1), "")
|
|
//#define NOMACROS
|
|
/**
|
|
* @brief Parse AI list and print out C Macros
|
|
* @param AiList: Bytestream for ai
|
|
* @param ID: List ID
|
|
*/
|
|
void ai(unsigned char *AiList, short ID)
|
|
{
|
|
for (int Offset = 0;;)
|
|
{
|
|
int hasClosingBrace = FALSE;
|
|
int hasLabel = FALSE;
|
|
int hasMacro = FALSE;
|
|
int tabs[MAX + 1]; // 4 char wide string
|
|
int i;
|
|
for ( i = 0; i < MAX; i++)
|
|
{
|
|
tabs[i] = 0;
|
|
}
|
|
for ( i = 0; i < top + 2 && i < MAX; i++)
|
|
{
|
|
tabs[i] = 0x20202020; // 4 spaces
|
|
}
|
|
|
|
printf("%s%s(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]);
|
|
|
|
switch (AiList[Offset])
|
|
{
|
|
case AI_GotoFirst: // BYTE(LABEL)
|
|
{
|
|
AiGotoFirstRecord *ai = &AiList+Offset;
|
|
int lbl = AiList[Offset + 1];
|
|
#ifndef NOMACROS
|
|
if (lbl == sniff()) //either contnue or loop
|
|
{
|
|
int found = 0;
|
|
for (i = Offset; AiList[i] != AI_EndList; i += chraiitemsize(AiList, i))
|
|
{
|
|
if (AiList[i] == AI_GotoFirst && AiList[i+1] == lbl) found++;
|
|
}
|
|
|
|
EraseCommand;
|
|
if (found ==1)
|
|
{
|
|
pop();
|
|
for ( i = top + 2; i < MAX; i++)
|
|
{
|
|
tabs[i] = 0;
|
|
}
|
|
printf("%sLOOP(", (char *)tabs);
|
|
}
|
|
else
|
|
{
|
|
printf("%sCONTINUE(", (char *)tabs);
|
|
}
|
|
}
|
|
#endif
|
|
printf("lbl%d)\n\n",lbl);
|
|
AddLabel(lbl);
|
|
hasClosingBrace = TRUE;
|
|
break;
|
|
}
|
|
case AI_Label: // BYTE(ID)
|
|
{
|
|
AiLabelRecord *ai = &AiList+Offset;
|
|
|
|
int lbl = AiList[Offset + 1];
|
|
#ifndef NOMACROS
|
|
Offset += AI_Label_LENGTH;
|
|
hasMacro = TRUE;
|
|
if (AiList[Offset] == AI_Yield)
|
|
{
|
|
int hasLoop = FALSE;
|
|
Offset += AI_Yield_LENGTH;
|
|
for (i = Offset; AiList[i] != AI_EndList; i += chraiitemsize(AiList, i))
|
|
{
|
|
if (AiList[i] == AI_GotoFirst && AiList[i + 1] == lbl) hasLoop = TRUE;
|
|
}
|
|
if (hasLoop)
|
|
{
|
|
EraseCommand;
|
|
if (AiList[Offset] != AI_GotoFirst)
|
|
{
|
|
push(lbl);
|
|
|
|
printf("\n%sDO(", (char *)tabs);
|
|
}
|
|
else
|
|
{
|
|
printf("\n%sYIELD_FOREVER( lbl%d )\n\n", (char *)tabs, lbl);
|
|
Offset += AI_GotoFirst_LENGTH;
|
|
hasClosingBrace = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Offset -= AI_Yield_LENGTH;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
if(!hasClosingBrace) printf(" lbl%d ", lbl);
|
|
AddLabel(lbl);
|
|
break;
|
|
}
|
|
|
|
case AI_EndList /*canonical name*/: // /*NONE*/
|
|
{
|
|
AiEndListRecord *ai = &AiList+Offset;
|
|
printf(")\n\n");
|
|
|
|
return;
|
|
}
|
|
case AI_SetChrAiList: // BYTE(CHR_NUM), DBYTE(AI_LIST_ID)
|
|
{
|
|
AiSetChrAiListRecord *ai = &AiList+Offset;
|
|
unsigned short AI_LIST_ID = CharArrayTo16(AiList, (Offset + 1 + 1));
|
|
signed char CHR_NUM = AiList[Offset + 1];
|
|
|
|
if (CHR_NUM < 0 && CHR_NUM > -10)
|
|
{
|
|
EraseCommand;
|
|
|
|
switch (CHR_NUM)
|
|
{
|
|
case CHR_SELF:
|
|
{
|
|
int found = 0;
|
|
i = Offset;
|
|
while (i > 0)
|
|
{
|
|
if (AiList[i] == AI_SetReturnAiList &&
|
|
CharArrayTo16(AiList, i + 1) == ID)
|
|
{
|
|
found = 1;
|
|
if (i < Offset - AI_SetReturnAiList_LENGTH) printf("// tentative, Please confirm\n");
|
|
break;
|
|
}
|
|
i --;
|
|
}
|
|
if (found)
|
|
{
|
|
printf("%s%s(", (char *)tabs, "CALL");
|
|
}
|
|
else
|
|
{
|
|
printf("%s%s(", (char *)tabs, "JumpTo");
|
|
}
|
|
break;
|
|
}
|
|
case CHR_BOND_CINEMA:
|
|
{
|
|
printf("%s%s(", (char *)tabs, "SetBondsAiList");
|
|
break;
|
|
}
|
|
case CHR_CLONE:
|
|
{
|
|
printf("%s%s(", (char *)tabs, "SetMyClonesAiList");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (CHR_NUM < 0 && CHR_NUM > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM);
|
|
}
|
|
}
|
|
|
|
if (isGlobalAIListID(AI_LIST_ID))
|
|
{
|
|
printf("%s", GAILIST_ToString[AI_LIST_ID]);
|
|
}
|
|
else if (isBGAIListID(AI_LIST_ID))
|
|
{
|
|
printf("bgai_%hd", getBGAIListID(AI_LIST_ID));
|
|
}
|
|
else
|
|
{
|
|
printf("chrai_%hd", getChrAIListID(AI_LIST_ID));
|
|
}
|
|
|
|
if (hasClosingBrace) printf(")\n\n");
|
|
|
|
break;
|
|
}
|
|
case AI_SetReturnAiList: // DBYTE(AI_LIST_ID)
|
|
{
|
|
AiSetReturnAiListRecord *ai = &AiList+Offset;
|
|
unsigned short AI_LIST_ID = CharArrayTo16(AiList, (Offset + 1));
|
|
|
|
if (!(AiList[Offset + AI_SetReturnAiList_LENGTH] == AI_SetChrAiList &&
|
|
AI_LIST_ID == ID &&
|
|
(signed char)AiList[Offset + AI_SetReturnAiList_LENGTH + 1] == CHR_SELF))
|
|
{
|
|
if (isGlobalAIListID(AI_LIST_ID))
|
|
{
|
|
printf("%s", GAILIST_ToString[AI_LIST_ID]);
|
|
}
|
|
else if (isBGAIListID(AI_LIST_ID))
|
|
{
|
|
printf("bgai_%hd", getBGAIListID(AI_LIST_ID));
|
|
}
|
|
else
|
|
{
|
|
printf("chrai_%hd", getChrAIListID(AI_LIST_ID));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
EraseCommand; // CALL should already be printed
|
|
hasClosingBrace = TRUE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_Return: // /*NONE*/
|
|
{
|
|
AiReturnRecord *ai = &AiList+Offset;
|
|
AddSubID(ID);
|
|
break;
|
|
}
|
|
|
|
case AI_PlayAnimation: // DBYTE(ANIMATION_ID), DBYTE(START_TIME30),DBYTE(END_TIME30), BYTE(BITFIELD), BYTE(INTERPOL_TIME60)
|
|
{
|
|
AiPlayAnimationRecord *ai = &AiList+Offset;
|
|
int anim_id, zero ;
|
|
short startframe, endframe;
|
|
anim_id = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
startframe = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
endframe = CharArrayTo16(AiList, Offset + 1 + 4);
|
|
if (startframe == -1 && endframe == -1 && AiList[Offset + 1 + 6] == 6 && AiList[Offset + 1 + 7] == 16)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "PlayAnimationSimple");
|
|
printf("%s", ANIMATIONS_ToString[anim_id]);
|
|
}
|
|
else
|
|
{
|
|
printf("%s,%d,%d,0x%02X,%d", ANIMATIONS_ToString[anim_id], startframe, endframe, AiList[Offset + 1 + 6], AiList[Offset + 1 + 7]);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrDyingOrDead: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrDyingOrDeadRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
if (chr == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFImDyingOrDead");
|
|
}
|
|
else
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrDoesNotExist: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrDoesNotExistRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
switch (chr)
|
|
{
|
|
case CHR_SELF:
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFIDoNotExist");
|
|
break;
|
|
}
|
|
case CHR_CLONE:
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFMyCloneDoesNotExist");
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
|
|
case AI_TRYFireOrAimAtTarget: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYFireOrAimAtTargetRecord *ai = &AiList+Offset;
|
|
int targetid = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
int targettype = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (targettype == TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtBond");
|
|
}
|
|
else if (targettype == TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtPad");
|
|
printf("%d", targetid);
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtBond");
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtPad");
|
|
printf("%d", targetid);
|
|
}
|
|
else
|
|
{
|
|
printf("%04X,", targettype);
|
|
printf("chr%d", targetid);
|
|
AddChr(targetid);
|
|
}
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYFireOrAimAtTargetKneel: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYFireOrAimAtTargetKneelRecord *ai = &AiList+Offset;
|
|
int targetid = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
int targettype = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (targettype == TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtBondKneeling");
|
|
}
|
|
else if (targettype == TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtPadKneeling");
|
|
printf("%d", targetid);
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtBondKneeling");
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtPadKneeling");
|
|
printf("%d", targetid);
|
|
}
|
|
else
|
|
{
|
|
printf("%04X,", targettype);
|
|
printf("chr%d", targetid);
|
|
AddChr(targetid);
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
|
|
case AI_TRYFireOrAimAtTargetUpdate: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYFireOrAimAtTargetUpdateRecord *ai = &AiList+Offset;
|
|
int targetid = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
int targettype = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (targettype == TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtBondUpdate");
|
|
}
|
|
else if (targettype == TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFireAtPadUpdate");
|
|
printf("%d", targetid);
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtBondUpdate");
|
|
}
|
|
else if (targettype == TARGET_AIM_ONLY | TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYAimAtPadUpdate");
|
|
printf("%d", targetid);
|
|
}
|
|
else
|
|
{
|
|
printf("%04X,", targettype);
|
|
printf("chr%d", targetid);
|
|
AddChr(targetid);
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_TRYFacingTarget: // DBYTE(BITFIELD),DBYTE(TARGET),BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYFacingTargetRecord *ai = &AiList+Offset;
|
|
int targetid = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
int targettype = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (targettype == TARGET_BOND)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFacingBond");
|
|
}
|
|
else if (targettype == TARGET_PAD)
|
|
{
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYFacingPad");
|
|
printf("%d", targetid);
|
|
}
|
|
else
|
|
{
|
|
printf("%04X,", targettype);
|
|
printf("chr%d", targetid);
|
|
AddChr(targetid);
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_HitChrWithItem: // BYTE(CHR_NUM),BYTE(PART_NUM),BYTE(ITEM_NUM)
|
|
{
|
|
AiHitChrWithItemRecord *ai = &AiList+Offset;
|
|
signed char CHR_NUM = AiList[Offset + 1];
|
|
|
|
if (CHR_NUM == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "HitMeWithItem");
|
|
printf("%d,%d", AiList[Offset + 2], AiList[Offset + 1 + 2]);
|
|
}
|
|
else
|
|
{
|
|
if (CHR_NUM<0 && CHR_NUM> - 10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM);
|
|
AddChr(CHR_NUM);
|
|
}
|
|
printf("%s,%s", HITTARGET_ToString[AiList[Offset + 1 + 1]], ITEM_IDS_ToString[AiList[Offset + 1 + 2]]);
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_ChrHitChr: // BYTE(CHR_NUM),BYTE(CHR_NUM_TARGET),BYTE(PART_NUM)
|
|
{
|
|
AiChrHitChrRecord *ai = &AiList+Offset;
|
|
signed char CHR_NUM = AiList[Offset + 1];
|
|
signed char CHR_NUM2 = AiList[Offset + 2];
|
|
char PART_NUM = AiList[Offset + 3];
|
|
|
|
if (CHR_NUM == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IHitChr");
|
|
if (CHR_NUM2 < 0 && CHR_NUM2 > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM2)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM2);
|
|
AddChr(CHR_NUM2);
|
|
}
|
|
}
|
|
else if (CHR_NUM2 == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "ChrHitMe");
|
|
if (CHR_NUM < 0 && CHR_NUM > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM);
|
|
AddChr(CHR_NUM);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (CHR_NUM < 0 && CHR_NUM > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM);
|
|
AddChr(CHR_NUM);
|
|
}
|
|
if (CHR_NUM2 < 0 && CHR_NUM2 > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(CHR_NUM2)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", CHR_NUM2);
|
|
AddChr(CHR_NUM2);
|
|
}
|
|
}
|
|
printf("%s", HITTARGET_ToString[PART_NUM]);
|
|
break;
|
|
}
|
|
|
|
case AI_TRYDroppingItem: // DBYTE(PROP_NUM),BYTE(ITEM_NUM),BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYDroppingItemRecord *ai = &AiList+Offset;
|
|
unsigned short modelnum = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%s,%s", PROP_ToString[modelnum], ITEM_IDS_ToString[AiList[Offset + 1 + 2]]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_ChrRemoveInstant: // BYTE(CHR_NUM)
|
|
{
|
|
AiChrRemoveInstantRecord *ai = AiList[Offset];
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
if (chr == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "RemoveMeInstantly");
|
|
}
|
|
else
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_TRYTriggeringAlarmAtPad: // DBYTE(PAD),BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYTriggeringAlarmAtPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
|
|
case AI_TRYRunToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYRunToChrRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
if (chr == CHR_PRESET)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYRunToPresetChr");
|
|
}
|
|
else
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYWalkToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYWalkToChrRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
if (chr == CHR_PRESET)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYWalkToPresetChr");
|
|
}
|
|
else
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_TRYSprintToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYSprintToChrRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
if (chr == CHR_PRESET)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "TRYSprintToPresetChr");
|
|
}
|
|
else
|
|
{
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetNewRandom:
|
|
{
|
|
AiSetNewRandomRecord *ai = &AiList+Offset;
|
|
if (AiList[Offset + 1] == AI_IFRandomLessThan || AiList[Offset + 1] == AI_IFRandomGreaterThan)
|
|
{
|
|
EraseCommand;
|
|
hasClosingBrace = TRUE;
|
|
}
|
|
break;
|
|
}
|
|
case AI_IFRandomLessThan: // BYTE(BYTE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFRandomLessThanRecord *ai = &AiList+Offset;
|
|
if (AiList[Offset - 1] == AI_SetNewRandom)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFNewRandomLessThan");
|
|
}
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFRandomGreaterThan: // BYTE(BYTE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFRandomGreaterThanRecord *ai = &AiList+Offset;
|
|
if (AiList[Offset - 1] == AI_SetNewRandom)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFNewRandomGreaterThan");
|
|
}
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_RunToPad: // DBYTE(PAD)
|
|
{
|
|
AiRunToPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_WalkToPad: // DBYTE(PAD)
|
|
{
|
|
AiWalkToPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_SprintToPad: // DBYTE(PAD)
|
|
{
|
|
AiSprintToPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_StartPatrol: // BYTE(PATH_NUM)
|
|
{
|
|
AiStartPatrolRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_IFImInRoomWithChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFImInRoomWithChrRecord *ai = &AiList+Offset;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
|
|
case AI_IFRoomWithPadIsOnScreen: // DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFRoomWithPadIsOnScreenRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
|
|
case AI_IFMyAngleToBondLessThan: // BYTE(ANGLE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyAngleToBondLessThanRecord *ai = &AiList+Offset;
|
|
EraseCommand;
|
|
printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]);
|
|
printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))));
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyAngleToBondGreaterThan: // BYTE(ANGLE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyAngleToBondGreaterThanRecord *ai = &AiList+Offset;
|
|
EraseCommand;
|
|
|
|
printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]);
|
|
printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))));
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyAngleFromBondLessThan: // BYTE(ANGLE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyAngleFromBondLessThanRecord *ai = &AiList+Offset;
|
|
EraseCommand;
|
|
|
|
printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]);
|
|
printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))));
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyAngleFromBondGreaterThan: // BYTE(ANGLE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyAngleFromBondGreaterThanRecord *ai = &AiList+Offset;
|
|
EraseCommand;
|
|
|
|
printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]);
|
|
printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))));
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyDistanceToBondLessThanDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyDistanceToBondLessThanDecimeterRecord *ai = &AiList+Offset;
|
|
float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "IFMyDistanceToBondLessThanMeter");
|
|
printf("%f,", distance / 100);
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyDistanceToBondGreaterThanDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyDistanceToBondGreaterThanDecimeterRecord *ai = &AiList+Offset;
|
|
float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "IFMyDistanceToBondGreaterThanMeter");
|
|
printf("%f,", distance / 100);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFChrDistanceToPadLessThanDecimeter: // BYTE(CHR_NUM), DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrDistanceToPadLessThanDecimeterRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 3);
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 1) * 10.0f;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
EraseCommand;
|
|
|
|
if (chr == CHR_SELF)
|
|
{
|
|
printf("%s%s(", (char *)tabs, "IFMyDistanceToPadLessThanMeter");
|
|
}
|
|
else
|
|
{
|
|
printf("%s%s(", (char *)tabs, "IFChrDistanceToPadLessThanMeter");
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
printf("%f,", value / 100);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFChrDistanceToPadGreaterThanDecimeter: // BYTE(CHR_NUM), DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrDistanceToPadGreaterThanDecimeterRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 3);
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 1) * 10.0f;
|
|
signed char chr = AiList[Offset + 1];
|
|
|
|
EraseCommand;
|
|
|
|
if ((signed char)AiList[Offset + 1 + 0] == CHR_SELF)
|
|
{
|
|
printf("%s%s(", (char *)tabs, "IFMyDistanceToPadGreaterThanMeter");
|
|
}
|
|
else
|
|
{
|
|
printf("%s%s(", (char *)tabs, "IFChrDistanceToPadGreaterThanMeter");
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
}
|
|
printf("%f,", value / 100);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyDistanceToChrLessThanDecimeter: // DBYTE(DISTANCE), BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyDistanceToChrLessThanDecimeterRecord *ai = &AiList+Offset;
|
|
float cutoff = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
signed char chr = AiList[Offset + 3];
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "AIFMyDistanceToChrLessThanMeter");
|
|
printf("%f,", cutoff / 100 );
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyDistanceToChrGreaterThanDecimeter: // DBYTE(DISTANCE), BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyDistanceToChrGreaterThanDecimeterRecord *ai = &AiList+Offset;
|
|
float cutoff = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
signed char chr = AiList[Offset + 3];
|
|
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "AIFMyDistanceToChrGreaterThanMeter");
|
|
printf("%f,", cutoff / 100);
|
|
if (chr < 0 && chr > -10)
|
|
{
|
|
printf("%s,", CHR_ToString[abs(chr)]);
|
|
}
|
|
else
|
|
{
|
|
printf("chr%hd,", chr);
|
|
AddChr(chr);
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYSettingMyPresetToChrWithinDistanceDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord *ai = &AiList+Offset;
|
|
float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "TRYSettingMyPresetToChrWithinDistanceMeter");
|
|
printf("%f,", distance / 100);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFBondDistanceToPadLessThanDecimeter: // DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondDistanceToPadLessThanDecimeterRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "IFBondDistanceToPadLessThanMeter");
|
|
printf("%f,", value / 100);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFBondDistanceToPadGreaterThanDecimeter: // DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondDistanceToPadGreaterThanDecimeterRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f;
|
|
EraseCommand;
|
|
|
|
printf("%s%s(", (char *)tabs, "IFBondDistanceToPadGreaterThanMeter");
|
|
printf("%f,", value / 100);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFChrInRoomWithPad: // BYTE(CHR_NUM), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrInRoomWithPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
if ((signed char)AiList[Offset + 1 + 0] == CHR_SELF)
|
|
{
|
|
EraseCommand;
|
|
printf("%s%s(", (char *)tabs, "IFImInRoomWithPad");
|
|
}
|
|
else
|
|
{
|
|
printf("%d,", AiList[Offset + 1 + 0]);
|
|
}
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFBondInRoomWithPad: // DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondInRoomWithPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFBondCollectedObject: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondCollectedObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFKeyDropped: // BYTE(KEY_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFKeyDroppedRecord *ai = &AiList+Offset;
|
|
printf("key%d,", AiList[Offset + 1]);
|
|
|
|
AddKey(AiList[Offset + 1]);
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFItemIsAttachedToObject: // BYTE(ITEM_NUM), BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFItemIsAttachedToObjectRecord *ai = &AiList+Offset;
|
|
printf("%s,tag%d,", ITEM_IDS_ToString[AiList[Offset + 1]], AiList[Offset + 2]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFBondHasItemEquipped: // BYTE(ITEM_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondHasItemEquippedRecord *ai = &AiList+Offset;
|
|
printf("%s,", ITEM_IDS_ToString[AiList[Offset + 1]]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFObjectExists: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectExistsRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
break;
|
|
}
|
|
case AI_IFObjectNotDestroyed: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectNotDestroyedRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectWasActivated: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectWasActivatedRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFBondUsedGadgetOnObject: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondUsedGadgetOnObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_ActivateObject: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiActivateObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_DestroyObject: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiDestroyObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_DropObject: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiDropObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_ChrDropAllConcealedItems: // BYTE(CHR_NUM)
|
|
{
|
|
AiChrDropAllConcealedItemsRecord *ai = &AiList+Offset;
|
|
printf("chr%d", AiList[Offset + 1]);
|
|
AddChr(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_ChrDropAllHeldItems: // BYTE(CHR_NUM)
|
|
{
|
|
AiChrDropAllHeldItemsRecord *ai = &AiList+Offset;
|
|
printf("chr%d", AiList[Offset + 1]);
|
|
AddChr(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_BondCollectObject: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiBondCollectObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_ChrEquipObject: // BYTE(OBJECT_TAG), BYTE(CHR_NUM)
|
|
{
|
|
AiChrEquipObjectRecord *ai = &AiList+Offset;
|
|
printf("tag%d,chr%d", AiList[Offset + 1], AiList[Offset + 2]);
|
|
AddTag(AiList[Offset + 1]);
|
|
AddChr(AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_MoveObject: // BYTE(OBJECT_TAG), DBYTE(PAD)
|
|
{
|
|
AiMoveObjectRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
AddTag(AiList[Offset + 1]);
|
|
AddPad(pad);
|
|
|
|
break;
|
|
}
|
|
case AI_DoorOpen: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiDoorOpenRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_DoorClose: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiDoorCloseRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFDoorStateEqual: // BYTE(OBJECT_TAG), BYTE(DOOR_STATE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFDoorStateEqualRecord *ai = &AiList+Offset;
|
|
printf("tag%d,%s,", AiList[Offset + 1], DOORSTATE_ToString[AiList[Offset + 2] >> 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFDoorHasBeenOpenedBefore: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFDoorHasBeenOpenedBeforeRecord *ai = &AiList+Offset;
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_DoorSetLock: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG)
|
|
{
|
|
AiDoorSetLockRecord *ai = &AiList+Offset;
|
|
printf("tag%d,%d", AiList[Offset + 1], AiList[Offset + 2]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_DoorUnsetLock: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG)
|
|
{
|
|
AiDoorUnsetLockRecord *ai = &AiList+Offset;
|
|
printf("tag%d,%d", AiList[Offset + 1], AiList[Offset + 2]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFDoorLockEqual: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFDoorLockEqualRecord *ai = &AiList+Offset;
|
|
printf("tag%d,%d,%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]);
|
|
AddTag(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectiveNumComplete: // BYTE(OBJ_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectiveNumCompleteRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYUnknown6e: // BYTE(UNKNOWN_FLAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYUnknown6eRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYUnknown6f: // BYTE(UNKNOWN_FLAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYUnknown6fRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyNumArghsLessThan: // BYTE(HIT_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyNumArghsLessThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyNumArghsGreaterThan: // BYTE(HIT_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyNumArghsGreaterThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyNumCloseArghsLessThan: // BYTE(MISSED_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyNumCloseArghsLessThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMyNumCloseArghsGreaterThan: // BYTE(MISSED_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyNumCloseArghsGreaterThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFChrHealthLessThan: // BYTE(CHR_NUM), BYTE(HEALTH), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrHealthLessThanRecord *ai = &AiList+Offset;
|
|
float value = (AiList[Offset + 1 + 1]) * 0.1f;
|
|
|
|
printf("%d,%f,", AiList[Offset + 1], value * 10);
|
|
|
|
hasLabel = TRUE;
|
|
AddChr(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrHealthGreaterThan: // BYTE(CHR_NUM), BYTE(HEALTH), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrHealthGreaterThanRecord *ai = &AiList+Offset;
|
|
float value = (AiList[Offset + 1 + 1]) * 0.1f;
|
|
|
|
printf("%d,%f,", AiList[Offset + 1], value * 10);
|
|
|
|
hasLabel = TRUE;
|
|
AddChr(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrWasDamagedSinceLastCheck: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrWasDamagedSinceLastCheckRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
AddChr(AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFBondHealthLessThan: // BYTE(HEALTH), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondHealthLessThanRecord *ai = &AiList+Offset;
|
|
float val = (AiList[Offset + 1 + 0]) / 255.0f;
|
|
|
|
printf("%f,", val * 255);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFBondHealthGreaterThan: // BYTE(HEALTH), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondHealthGreaterThanRecord *ai = &AiList+Offset;
|
|
float val = (AiList[Offset + 1 + 0]) / 255.0f;
|
|
|
|
printf("%f,", val * 255);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFGameDifficultyLessThan: // BYTE(DIFICULTY_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFGameDifficultyLessThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFGameDifficultyGreaterThan: // BYTE(DIFICULTY_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFGameDifficultyGreaterThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMissionTimeLessThan: // DBYTE(SECONDS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMissionTimeLessThanRecord *ai = &AiList+Offset;
|
|
float target = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", target);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFMissionTimeGreaterThan: // DBYTE(SECONDS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMissionTimeGreaterThanRecord *ai = &AiList+Offset;
|
|
float target = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", target);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFSystemPowerTimeLessThan: // DBYTE(MINUTES), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFSystemPowerTimeLessThanRecord *ai = &AiList+Offset;
|
|
float target = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", target);
|
|
|
|
break;
|
|
}
|
|
case AI_IFSystemPowerTimeGreaterThan: // DBYTE(MINUTES), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFSystemPowerTimeGreaterThanRecord *ai = &AiList+Offset;
|
|
float target = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", target);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFLevelIdLessThan: // BYTE(LEVEL_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFLevelIdLessThanRecord *ai = &AiList+Offset;
|
|
printf("%s,", LEVELID_ToString[AiList[Offset + 1] + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_IFLevelIdGreaterThan: // BYTE(LEVEL_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFLevelIdGreaterThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyMorale: // BYTE(CHRBYTE)
|
|
{
|
|
AiSetMyMoraleRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_AddToMyMorale: // BYTE(CHRBYTE)
|
|
{
|
|
AiAddToMyMoraleRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SubtractFromMyMorale: // BYTE(CHRBYTE)
|
|
{
|
|
AiSubtractFromMyMoraleRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyMoraleLessThan: // BYTE(CHRBYTE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyMoraleLessThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_SetMyAlertness: // BYTE(CHRBYTE)
|
|
{
|
|
AiSetMyAlertnessRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_AddToMyAlertness: // BYTE(CHRBYTE)
|
|
{
|
|
AiAddToMyAlertnessRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SubtractFromMyAlertness: // BYTE(CHRBYTE)
|
|
{
|
|
AiSubtractFromMyAlertnessRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyAlertnessLessThan: // BYTE(CHRBYTE), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyAlertnessLessThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyHearingScale: // DBYTE(HEARING_SCALE)
|
|
{
|
|
AiSetMyHearingScaleRecord *ai = &AiList+Offset;
|
|
float distance = CharArrayTo16(AiList, Offset + 1 + 0) / 1000.0f;
|
|
|
|
printf("%f", distance * 1000);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyVisionRange: // BYTE(VISION_RANGE)
|
|
{
|
|
AiSetMyVisionRangeRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyGrenadeProbability: // BYTE(GRENADE_PROB)
|
|
{
|
|
AiSetMyGrenadeProbabilityRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyChrNum: // BYTE(CHR_NUM)
|
|
{
|
|
AiSetMyChrNumRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyHealthTotal: // DBYTE(HEALTH)
|
|
{
|
|
AiSetMyHealthTotalRecord *ai = &AiList+Offset;
|
|
float amount = CharArrayTo16(AiList, Offset + 1 + 0) * 0.1f;
|
|
|
|
printf("%f", amount * 10);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyArmour: // DBYTE(AMOUNT)
|
|
{
|
|
AiSetMyArmourRecord *ai = &AiList+Offset;
|
|
float amount = CharArrayTo16(AiList, Offset + 1 + 0) * 0.1f; /*if (cheatIsActive(CHEAT_ENEMYSHIELDS)) { amount = amount < 8 ? 8 : amount; } */
|
|
|
|
printf("%f", amount * 10);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMySpeedRating: // BYTE(SPEED_RATING)
|
|
{
|
|
AiSetMySpeedRatingRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyArghRating: // BYTE(ARGH_RATING)
|
|
{
|
|
AiSetMyArghRatingRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyAccuracyRating: // BYTE(ACCURACY_RATING)
|
|
{
|
|
AiSetMyAccuracyRatingRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyFlags2: // BYTE(BITS)
|
|
{
|
|
AiSetMyFlags2Record *ai = &AiList+Offset;
|
|
printf("0x%x", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetMyFlags2: // BYTE(BITS)
|
|
{
|
|
AiUnsetMyFlags2Record *ai = &AiList+Offset;
|
|
printf("0x%x", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyFlags2Has: // BYTE(BITS) BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyFlags2HasRecord *ai = &AiList+Offset;
|
|
printf("0x%x,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetChrBitfield: // BYTE(CHR_NUM), BYTE(BITS)
|
|
{
|
|
AiSetChrBitfieldRecord *ai = &AiList+Offset;
|
|
printf("%d,0x%x", AiList[Offset + 1], AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetChrBitfield: // BYTE(CHR_NUM), BYTE(BITS)
|
|
{
|
|
AiUnsetChrBitfieldRecord *ai = &AiList+Offset;
|
|
printf("%d,0x%x", AiList[Offset + 1], AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrBitfieldHas: // BYTE(CHR_NUM), BYTE(BITS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrBitfieldHasRecord *ai = &AiList+Offset;
|
|
printf("%d,0x%x,", AiList[Offset + 1], AiList[Offset + 2]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetObjectiveBitfield: // QBYTE(BITFIELD)
|
|
{
|
|
AiSetObjectiveBitfieldRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x", flags);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetObjectiveBitfield: // QBYTE(BITFIELD)
|
|
{
|
|
AiUnsetObjectiveBitfieldRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x", flags);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectiveBitfieldHas: // QBYTE(BITS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectiveBitfieldHasRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x,", flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetMychrflags: // QBYTE(CHRFLAGS)
|
|
{
|
|
AiSetMychrflagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x", flags);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetMychrflags: // QBYTE(CHRFLAGS)
|
|
{
|
|
AiUnsetMychrflagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x", flags);
|
|
|
|
break;
|
|
}
|
|
case AI_IFMychrflagsHas: // QBYTE(CHRFLAGS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMychrflagsHasRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 0);
|
|
|
|
printf("0x%x,", flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetChrchrflags: // BYTE(CHR_NUM), QBYTE(CHRFLAGS)
|
|
{
|
|
AiSetChrchrflagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetChrchrflags: // BYTE(CHR_NUM), QBYTE(CHRFLAGS)
|
|
{
|
|
AiUnsetChrchrflagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrchrflagsHas: // BYTE(CHR_NUM), QBYTE(CHRFLAGS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrchrflagsHasRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x,", AiList[Offset + 1], flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetObjectFlags: // BYTE(OBJECT_TAG), QBYTE(BITFIELD)
|
|
{
|
|
AiSetObjectFlagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetObjectFlags: // BYTE(OBJECT_TAG), QBYTE(BITFIELD)
|
|
{
|
|
AiUnsetObjectFlagsRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectFlagsHas: // BYTE(OBJECT_TAG), QBYTE(BITS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectFlagsHasRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x,", AiList[Offset + 1], flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetObjectFlags2: // BYTE(OBJECT_TAG), QBYTE(BITS)
|
|
{
|
|
AiSetObjectFlags2Record *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_UnsetObjectFlags2: // BYTE(OBJECT_TAG), QBYTE(BITS)
|
|
{
|
|
AiUnsetObjectFlags2Record *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x", AiList[Offset + 1], flags);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectFlags2Has: // BYTE(OBJECT_TAG), QBYTE(BITFIELD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectFlags2HasRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,0x%x,", AiList[Offset + 1], flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyChrPreset: // BYTE(CHR_PRESET)
|
|
{
|
|
AiSetMyChrPresetRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetChrChrPreset: // BYTE(CHR_NUM), BYTE(CHR_PRESET)
|
|
{
|
|
AiSetChrChrPresetRecord *ai = &AiList+Offset;
|
|
printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_SetMyPadPreset: // DBYTE(PAD_PRESET)
|
|
{
|
|
AiSetMyPadPresetRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_SetChrPadPreset: // BYTE(CHR_NUM), DBYTE(PAD_PRESET)
|
|
{
|
|
AiSetChrPadPresetRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
|
|
printf("%s(%d,", AI_CMD_ToString[AiList[Offset]], AiList[Offset + 1]);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d)", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_PRINT:
|
|
{
|
|
AiPRINTRecord *ai = &AiList+Offset;
|
|
int j = 1;
|
|
printf("\"");
|
|
for (; AiList[Offset + j] != 0; j++)
|
|
{
|
|
if (AiList[Offset + j] == '\n')
|
|
{
|
|
printf("\\n");
|
|
}
|
|
else
|
|
{
|
|
printf("%c", AiList[Offset + j]);
|
|
}
|
|
}
|
|
if (!hasName)
|
|
{
|
|
hasName = malloc(j);
|
|
hasName = &AiList[Offset + 1];
|
|
}
|
|
|
|
printf("\"");
|
|
break;
|
|
}
|
|
|
|
case AI_IFMyTimerLessThanTicks: // TBYTE(TICKS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyTimerLessThanTicksRecord *ai = &AiList+Offset;
|
|
float valf = ((unsigned)CharArrayTo24(AiList, Offset + 1 + 0));
|
|
|
|
printf("%f,", valf);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFMyTimerGreaterThanTicks: // TBYTE(TICKS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFMyTimerGreaterThanTicksRecord *ai = &AiList+Offset;
|
|
float valf = ((unsigned)CharArrayTo24(AiList, Offset + 1 + 0));
|
|
|
|
printf("%f,", valf);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_HudCountdownSet: // DBYTE(SECONDS)
|
|
{
|
|
AiHudCountdownSetRecord *ai = &AiList+Offset;
|
|
float seconds = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f", seconds);
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_IFHudCountdownLessThan: // DBYTE(SECONDS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFHudCountdownLessThanRecord *ai = &AiList+Offset;
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", value);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFHudCountdownGreaterThan: // DBYTE(SECONDS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFHudCountdownGreaterThanRecord *ai = &AiList+Offset;
|
|
float value = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", value);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_TRYSpawningChrAtPad: // BYTE(BODY_NUM), BYTE(HEAD_NUM), DBYTE(PAD), DBYTE(AI_LIST_ID), QBYTE(BITFIELD), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYSpawningChrAtPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 6);
|
|
unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 4);
|
|
|
|
printf("%d,", AiList[Offset + 1]);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
printf("%d,0x%x,%d,", ailistid, flags, AiList[Offset + 10]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_TRYSpawningChrNextToChr: // BYTE(BODY_NUM), BYTE(HEAD_NUM), BYTE(CHR_NUM_TARGET), DBYTE(AI_LIST_ID), QBYTE(BITFIELD), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYSpawningChrNextToChrRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 5);
|
|
unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 3);
|
|
|
|
printf("%d,%d,%d,%d,0x%x,", AiList[Offset + 1], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2], ailistid, flags);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYGiveMeItem: // DBYTE(PROP_NUM), BYTE(ITEM_NUM), QBYTE(PROPFLAG), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYGiveMeItemRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 3);
|
|
int model = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%d,%d,0x%x,", model, AiList[Offset + 1 + 2], flags);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_TRYGiveMeHat: // DBYTE(PROP_NUM), QBYTE(PROP_BITFIELD), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYGiveMeHatRecord *ai = &AiList+Offset;
|
|
int flags = CharArrayTo32(AiList, Offset + 1 + 2);
|
|
int modelnum = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%d,0x%x,", modelnum, flags);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TRYCloningChr: // BYTE(CHR_NUM), DBYTE(AI_LIST_ID), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYCloningChrRecord *ai = &AiList+Offset;
|
|
unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,%d,", AiList[Offset + 4], ailistid);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_TextPrintBottom: // DBYTE(TEXT_SLOT)
|
|
{
|
|
AiTextPrintBottomRecord *ai = &AiList+Offset;
|
|
// printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0));
|
|
|
|
printf("TEXT(%s,%d)", TEXTBANK_LEVEL_INDEX_ToString[(CharArrayTo16(AiList, Offset + 1 + 0)) / 1024], (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024);
|
|
|
|
break;
|
|
}
|
|
case AI_TextPrintTop: // DBYTE(TEXT_SLOT)
|
|
{
|
|
AiTextPrintTopRecord *ai = &AiList+Offset;
|
|
// printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0));
|
|
|
|
printf("TEXT(%s,%d)", TEXTBANK_LEVEL_INDEX_ToString[(CharArrayTo16(AiList, Offset + 1 + 0)) / 1024], (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxPlay: // DBYTE(SOUND_NUM), BYTE(CHANNEL_NUM)
|
|
{
|
|
AiSfxPlayRecord *ai = &AiList+Offset;
|
|
short audio_id = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%d,%d", audio_id, AiList[Offset + 3]);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxStopChannel: // BYTE(CHANNEL_NUM)
|
|
{
|
|
AiSfxStopChannelRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 3]);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxSetChannelVolume: // BYTE(CHANNEL_NUM), DBYTE(TARGET_VOLUME), DBYTE(TRANSITION_TIME60)
|
|
{
|
|
AiSfxSetChannelVolumeRecord *ai = &AiList+Offset;
|
|
short vol = CharArrayTo16(AiList, Offset + 2 + 0);
|
|
unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2);
|
|
|
|
printf("%d, %d,%d", AiList[Offset + 1], vol, sfxID);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxFadeChannelVolume: // BYTE(CHANNEL_NUM), DBYTE(TARGET_VOLUME), DBYTE(TRANSITION_TIME60)
|
|
{
|
|
AiSfxFadeChannelVolumeRecord *ai = &AiList+Offset;
|
|
short vol = CharArrayTo16(AiList, Offset + 2 + 0);
|
|
unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2);
|
|
|
|
printf("%d, %d,%d", AiList[Offset + 1], vol, sfxID);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxEmitFromObject: // BYTE(CHANNEL_NUM), BYTE(OBJECT_TAG), DBYTE(VOL_DECAY_TIME60)
|
|
{
|
|
AiSfxEmitFromObjectRecord *ai = &AiList+Offset;
|
|
unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 1);
|
|
|
|
printf("%d, %d,%d", AiList[Offset + 1], AiList[Offset + 2], sfxID);
|
|
|
|
break;
|
|
}
|
|
case AI_SfxEmitFromPad: // BYTE(CHANNEL_NUM), DBYTE(PAD), DBYTE(VOL_DECAY_TIME60)
|
|
{
|
|
AiSfxEmitFromPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 2 + 0);
|
|
unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2);
|
|
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
printf("%d", sfxID);
|
|
|
|
break;
|
|
}
|
|
case AI_IFSfxChannelVolumeLessThan: // BYTE(CHANNEL_NUM), DBYTE(VOLUME), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFSfxChannelVolumeLessThanRecord *ai = &AiList+Offset;
|
|
short vol = CharArrayTo16(AiList, Offset + 2 + 0);
|
|
|
|
printf("%d, %d,", AiList[Offset + 1], vol);
|
|
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_VehicleStartPath: // BYTE(PATH_NUM)
|
|
{
|
|
AiVehicleStartPathRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1 + 0]);
|
|
|
|
break;
|
|
}
|
|
case AI_VehicleSpeed: // DBYTE(TOP_SPEED), DBYTE(ACCELERATION_TIME60)
|
|
{
|
|
AiVehicleSpeedRecord *ai = &AiList+Offset;
|
|
float speedtime = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
float speedaim = CharArrayTo16(AiList, Offset + 1 + 0) * 100.0f / 15360.0f;
|
|
|
|
printf("%d,%f", CharArrayTo16(AiList, Offset + 1 + 0), speedtime);
|
|
|
|
break;
|
|
}
|
|
case AI_AircraftRotorSpeed: // DBYTE(ROTOR_SPEED), DBYTE(ACCELERATION_TIME60)
|
|
{
|
|
AiAircraftRotorSpeedRecord *ai = &AiList+Offset;
|
|
float speedtime = CharArrayTo16(AiList, Offset + 1 + 2);
|
|
float speedaim = CharArrayTo16(AiList, Offset + 1 + 0) * M_TAU_F / 3600.0f;
|
|
|
|
printf("%d,%f", CharArrayTo16(AiList, Offset + 1 + 0), speedtime);
|
|
|
|
break;
|
|
}
|
|
case AI_TvChangeScreenBank: // BYTE(OBJECT_TAG), BYTE(SCREEN_INDEX), BYTE(SCREEN_BANK)
|
|
{
|
|
AiTvChangeScreenBankRecord *ai = &AiList+Offset;
|
|
printf("%d,%d,%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]);
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_CameraLookAtBondFromPad: // DBYTE(PAD)
|
|
{
|
|
AiCameraLookAtBondFromPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
break;
|
|
}
|
|
case AI_CameraSwitch: // BYTE(OBJECT_TAG), DBYTE(LOOK_AT_BOND_FLAG), DBYTE(UNUSED_FLAG)
|
|
{
|
|
AiCameraSwitchRecord *ai = &AiList+Offset;
|
|
printf("%d,%d,%d", AiList[Offset + 1 + 0], CharArrayTo16(AiList, Offset + 1 + 1), CharArrayTo16(AiList, Offset + 1 + 3));
|
|
|
|
break;
|
|
}
|
|
case AI_IFBondYPosLessThan: // DBYTE(Y_POS), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondYPosLessThanRecord *ai = &AiList+Offset;
|
|
float bondpos = (short)CharArrayTo16(AiList, Offset + 1 + 0);
|
|
|
|
printf("%f,", bondpos );
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_BondDisableControl: // BYTE(BITFIELD)
|
|
{
|
|
AiBondDisableControlRecord *ai = &AiList+Offset;
|
|
printf("%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_TRYTeleportingChrToPad: // BYTE(CHR_NUM), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiTRYTeleportingChrToPadRecord *ai = &AiList+Offset;
|
|
int pad = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
|
|
printf("%d,", AiList[Offset + 1]);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_DoorOpenInstant: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiDoorOpenInstantRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_ChrRemoveItemInHand: // BYTE(CHR_NUM), BYTE(HAND_INDEX)
|
|
{
|
|
AiChrRemoveItemInHandRecord *ai = &AiList+Offset;
|
|
printf("chr%d,%s", AiList[Offset + 1], AiList[Offset + 2] == 0 ? "GUNRIGHT" : "GUNLEFT");
|
|
|
|
break;
|
|
}
|
|
case AI_IfNumberOfActivePlayersLessThan: // BYTE(NUMBER), BYTE(GOTOLABEL)
|
|
{
|
|
AiIfNumberOfActivePlayersLessThanRecord *ai = &AiList+Offset;
|
|
if (AiList[Offset + 1] == 2)
|
|
{
|
|
printf("%sIFSinglePlayer(", (char *)tabs);
|
|
}
|
|
else
|
|
{
|
|
printf("%d,", AiList[Offset + 1]);
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFBondItemTotalAmmoLessThan: // BYTE(ITEM_NUM), BYTE(AMMO_TOTAL), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFBondItemTotalAmmoLessThanRecord *ai = &AiList+Offset;
|
|
printf("%s,%d,", ITEM_IDS_ToString[AiList[Offset + 1]], AiList[Offset + 2]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_BondEquipItem: // BYTE(ITEM_NUM)
|
|
{
|
|
AiBondEquipItemRecord *ai = &AiList+Offset;
|
|
printf("%s", ITEM_IDS_ToString[AiList[Offset + 1]]);
|
|
|
|
break;
|
|
}
|
|
case AI_BondEquipItemCinema: // BYTE(ITEM_NUM)
|
|
{
|
|
AiBondEquipItemCinemaRecord *ai = &AiList+Offset;
|
|
printf("%s", ITEM_IDS_ToString[ AiList[Offset + 1]]);
|
|
|
|
break;
|
|
}
|
|
case AI_BondSetLockedVelocity: // BYTE(X_SPEED60), BYTE(Z_SPEED60)
|
|
{
|
|
AiBondSetLockedVelocityRecord *ai = &AiList+Offset;
|
|
printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFObjectInRoomWithPad: // BYTE(OBJECT_TAG), DBYTE(PAD), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFObjectInRoomWithPadRecord *ai = &AiList+Offset;
|
|
unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1);
|
|
|
|
printf("tag%d,", AiList[Offset + 1]);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_CameraOrbitPad:
|
|
{
|
|
AiCameraOrbitPadRecord *ai = &AiList+Offset;
|
|
int pad;
|
|
int speed60;
|
|
int camDististance;
|
|
int targetHeight;
|
|
int camHeight;
|
|
int start;
|
|
camDististance = CharArrayTo16(AiList, Offset + 1 + 0);
|
|
camHeight = (short)CharArrayTo16(AiList, Offset + 1 + 2);
|
|
speed60 = (short)CharArrayTo16(AiList, Offset + 1 + 4);
|
|
pad = CharArrayTo16(AiList, Offset + 1 + 6);
|
|
targetHeight = (short)CharArrayTo16(AiList, Offset + 1 + 8);
|
|
start = CharArrayTo16(AiList, Offset + 1 + 10);
|
|
|
|
printf("%d,%d,%d,", camDististance, camHeight, speed60);
|
|
if (isNotBoundPad(pad))
|
|
{
|
|
printf("%d,", pad);
|
|
}
|
|
else
|
|
{
|
|
printf("setBoundPadNum(%d),", getBoundPadNum(pad));
|
|
}
|
|
|
|
printf("%d,%d", targetHeight, start);
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_IFFolderActorIsEqual: // BYTE(BOND_ACTOR_INDEX), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFFolderActorIsEqualRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
|
|
case AI_MusicPlaySlot: // BYTE(MUSIC_SLOT), BYTE(SECONDS_STOPPED_DURATION), BYTE(SECONDS_TOTAL_DURATION)
|
|
{
|
|
AiMusicPlaySlotRecord *ai = &AiList+Offset;
|
|
// printf("/*ai: enery tune on (%d, %d, %d)*/", AiList[Offset + 1 + 0], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]);
|
|
|
|
printf("%d,%d,%d", AiList[Offset + 1 + 0], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]);
|
|
|
|
break;
|
|
}
|
|
case AI_MusicStopSlot:
|
|
{
|
|
AiMusicStopSlotRecord *ai = &AiList+Offset;
|
|
// printf("/*ai: enery tune off (%d)*/", AiList[Offset + 1 + 0]);
|
|
|
|
printf("%d", AiList[Offset + 1 + 0]);
|
|
|
|
break;
|
|
}
|
|
case AI_IFKilledCiviliansGreaterThan:
|
|
{
|
|
AiIFKilledCiviliansGreaterThanRecord *ai = &AiList+Offset;
|
|
printf("%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_IFChrWasShotSinceLastCheck: // BYTE(CHR_NUM), BYTE(GOTOLABEL)
|
|
{
|
|
AiIFChrWasShotSinceLastCheckRecord *ai = &AiList+Offset;
|
|
printf("chr%d,", AiList[Offset + 1]);
|
|
|
|
hasLabel = TRUE;
|
|
|
|
break;
|
|
}
|
|
case AI_ObjectRocketLaunch: // BYTE(OBJECT_TAG)
|
|
{
|
|
AiObjectRocketLaunchRecord *ai = &AiList+Offset;
|
|
printf("tag%d", AiList[Offset + 1]);
|
|
|
|
break;
|
|
}
|
|
case AI_GotoNext: // BYTE(LABEL)
|
|
case AI_IFPlayingAnimation: // BYTE(GOTOLABEL)
|
|
case AI_IFImOnPatrolOrStopped: // BYTE(GOTOLABEL)
|
|
case AI_IFISeeBond: // BYTE(GOTOLABEL)
|
|
case AI_TRYSidestepping: // BYTE(GOTOLABEL)
|
|
case AI_TRYSideHopping: // BYTE(GOTOLABEL)
|
|
case AI_TRYSideRunning: // BYTE(GOTOLABEL)
|
|
case AI_TRYFiringWalk: // BYTE(GOTOLABEL)
|
|
case AI_TRYFiringRun: // BYTE(GOTOLABEL)
|
|
case AI_TRYFiringRoll: // BYTE(GOTOLABEL)
|
|
case AI_IFImFiringAndLockedForward: // BYTE(GOTOLABEL)
|
|
case AI_IFImFiring: // BYTE(GOTOLABEL)
|
|
case AI_TRYThrowingGrenade: // BYTE(GOTOLABEL)
|
|
case AI_TRYRunFromBond: // BYTE(GOTOLABEL)
|
|
case AI_TRYRunToBond: // BYTE(GOTOLABEL)
|
|
case AI_TRYWalkToBond: // BYTE(GOTOLABEL)
|
|
case AI_TRYSprintToBond: // BYTE(GOTOLABEL)
|
|
case AI_TRYFindCover: // BYTE(GOTOLABEL)
|
|
case AI_IFICanHearAlarm: // BYTE(GOTOLABEL)
|
|
case AI_IFAlarmIsOn: // BYTE(GOTOLABEL)
|
|
case AI_IFGasIsLeaking: // BYTE(GOTOLABEL)
|
|
case AI_IFIHeardBond: // BYTE(GOTOLABEL)
|
|
case AI_IFISeeSomeoneShot: // BYTE(GOTOLABEL)
|
|
case AI_IFISeeSomeoneDie: // BYTE(GOTOLABEL)
|
|
case AI_IFICouldSeeBond: // BYTE(GOTOLABEL)
|
|
case AI_IFICouldSeeBondsStan: // BYTE(GOTOLABEL)
|
|
case AI_IFIWasShotRecently: // BYTE(GOTOLABEL)
|
|
case AI_IFIHeardBondRecently: // BYTE(GOTOLABEL)
|
|
case AI_IFIveNotBeenSeen: // BYTE(GOTOLABEL)
|
|
case AI_IFImOnScreen: // BYTE(GOTOLABEL)
|
|
case AI_IFMyRoomIsOnScreen: // BYTE(GOTOLABEL)
|
|
case AI_IFImTargetedByBond: // BYTE(GOTOLABEL)
|
|
case AI_IFBondMissedMe: // BYTE(GOTOLABEL)
|
|
case AI_IFMyMoraleLessThanRandom: // BYTE(GOTOLABEL)
|
|
case AI_IFMyAlertnessLessThanRandom: // BYTE(GOTOLABEL)
|
|
case AI_IFMyTimerIsNotRunning: // BYTE(GOTOLABEL)
|
|
case AI_IFHudCountdownIsNotRunning: // BYTE(GOTOLABEL)
|
|
case AI_IFCameraIsInIntro: // BYTE(GOTOLABEL)
|
|
case AI_IFCameraIsInBondSwirl: // BYTE(GOTOLABEL)
|
|
case AI_IFBondInTank: // canonical name
|
|
case AI_IFScreenFadeCompleted: // BYTE(GOTOLABEL)
|
|
case AI_IFBondIsDead:
|
|
case AI_IFCreditsHasCompleted:
|
|
case AI_IFObjectiveAllCompleted:
|
|
case AI_IFBondDamageAndPickupsDisabled:
|
|
{
|
|
AiIFBondDamageAndPickupsDisabledRecord *ai = &AiList+Offset;
|
|
hasLabel = TRUE;
|
|
break;
|
|
}
|
|
case AI_Yield: // /*NONE*/
|
|
case AI_Stop: // /*NONE*/
|
|
case AI_Kneel: // /*NONE*/
|
|
case AI_PointAtBond: // /*NONE*/
|
|
case AI_LookSurprised: // /*NONE*/
|
|
case AI_Surrender: // /*NONE*/
|
|
case AI_RemoveMe: // /*NONE*/
|
|
case AI_AlarmOn:
|
|
case AI_AlarmOff:
|
|
case AI_RunToPadPreset: // /*NONE*/
|
|
case AI_MyTimerStart:
|
|
case AI_MyTimerReset:
|
|
case AI_MyTimerPause:
|
|
case AI_MyTimerResume:
|
|
case AI_HudCountdownShow:
|
|
case AI_HudCountdownHide:
|
|
case AI_HudCountdownStop:
|
|
case AI_HudCountdownStart:
|
|
case AI_EndLevel: // canonical name
|
|
case AI_CameraReturnToBond:
|
|
case AI_BondEnableControl:
|
|
case AI_ScreenFadeToBlack:
|
|
case AI_ScreenFadeFromBlack:
|
|
case AI_HideAllChrs:
|
|
case AI_ShowAllChrs:
|
|
case AI_TriggerFadeAndExitLevelOnButtonPress:
|
|
case AI_BondDisableDamageAndPickups:
|
|
case AI_BondHideWeapons:
|
|
case AI_CreditsRoll:
|
|
case AI_SwitchSky:
|
|
case AI_BondKilledInAction:
|
|
case AI_RaiseArms:
|
|
case AI_TriggerExplosionsAroundBond:
|
|
case AI_GasLeakAndFadeFog:
|
|
default:
|
|
{
|
|
break;
|
|
}
|
|
|
|
} // switch
|
|
if(!hasMacro)Offset += chraiitemsize(AiList, Offset);
|
|
if (hasLabel)
|
|
{
|
|
printf(" lbl%d ", AiList[Offset - 1]);
|
|
AddLabel(AiList[Offset - 1]);
|
|
}
|
|
if (!hasClosingBrace) printf(")\n");
|
|
}
|
|
}
|
|
|
|
void hexDump(char *desc, void *addr, int len)
|
|
{
|
|
int i;
|
|
unsigned char buff[17];
|
|
unsigned char *pc = (unsigned char *)addr;
|
|
|
|
// Output description if given.
|
|
if (desc != NULL)
|
|
printf("%s:\n", desc);
|
|
|
|
// Process every byte in the data.
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
// Multiple of 16 means new line (with line offset).
|
|
|
|
if ((i % 16) == 0)
|
|
{
|
|
// Just don't print ASCII for the zeroth line.
|
|
if (i != 0)
|
|
printf(" %s\n", buff);
|
|
|
|
// Output the offset.
|
|
printf(" %04x ", i);
|
|
}
|
|
|
|
// Now the hex code for the specific character.
|
|
printf(" %02x", pc[i]);
|
|
|
|
// And store a printable ASCII character for later.
|
|
if ((pc[i] < 0x20) || (pc[i] > 0x7e))
|
|
{
|
|
buff[i % 16] = '.';
|
|
}
|
|
else
|
|
{
|
|
buff[i % 16] = pc[i];
|
|
}
|
|
|
|
buff[(i % 16) + 1] = '\0';
|
|
}
|
|
|
|
// Pad out last line if not exactly 16 characters.
|
|
while ((i % 16) != 0)
|
|
{
|
|
printf(" ");
|
|
i++;
|
|
}
|
|
|
|
// And print the final ASCII bit.
|
|
printf(" %s\n", buff);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
#define PRINTDEBUG
|
|
char fname[1000];
|
|
FILE *pfile;
|
|
char cwd[1000];
|
|
void *g_ptrStageSetupFile, *lastAddr;
|
|
int fsize;
|
|
|
|
|
|
int i,j;
|
|
time_t current_time;
|
|
time(¤t_time);
|
|
|
|
getcwd(cwd, sizeof(cwd));
|
|
|
|
if (argc > 1)
|
|
{
|
|
strcat(cwd, "/");
|
|
strcat(cwd, argv[1]);
|
|
strcpy(fname,argv[1]);
|
|
}
|
|
else
|
|
{
|
|
printf("Enter a filename:\n");
|
|
scanf("%99s", fname);
|
|
strcat(cwd, "/");
|
|
strcat(cwd, fname);
|
|
}
|
|
|
|
for (i=strlen(fname); i>0; i-- )
|
|
{
|
|
j = i+1;
|
|
if (fname[i] == '/') break;
|
|
}
|
|
|
|
for (i = 0; i < strlen(fname); i++, j++)
|
|
{
|
|
if (fname[j] == '.')
|
|
{
|
|
fname[i] = 0;
|
|
break;
|
|
}
|
|
fname[i] = fname[j];
|
|
}
|
|
pfile = fopen(cwd, "rb");
|
|
|
|
if (!pfile)
|
|
{
|
|
printf("Error! opening file: %s\n", cwd);
|
|
// exit from program if file pointer returns NULL.
|
|
return 0;
|
|
}
|
|
|
|
// Get file size
|
|
fseek(pfile, 0, SEEK_END);
|
|
fsize = ftell(pfile);
|
|
rewind(pfile);
|
|
|
|
//allocate setup file
|
|
g_ptrStageSetupFile = malloc(fsize);
|
|
rewind(pfile);
|
|
|
|
//Load setup file
|
|
if (1 != fread(g_ptrStageSetupFile, fsize, 1, pfile))
|
|
{
|
|
fclose(pfile);
|
|
free(g_ptrStageSetupFile);
|
|
printf("entire read fails\n");
|
|
return 0;
|
|
}
|
|
fclose(pfile);
|
|
|
|
{
|
|
stagesetup g_chraiCurrentSetup = *(stagesetup *)g_ptrStageSetupFile;
|
|
|
|
// convert to host endian and turn file pointer to RAM pointer
|
|
g_chraiCurrentSetup.pathwaypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pathwaypoints);
|
|
g_chraiCurrentSetup.waypointgroups = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups);
|
|
g_chraiCurrentSetup.intro = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.intro);
|
|
g_chraiCurrentSetup.propDefs = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.propDefs);
|
|
g_chraiCurrentSetup.patrolpaths = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.patrolpaths);
|
|
g_chraiCurrentSetup.ailists = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.ailists);
|
|
g_chraiCurrentSetup.pads = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pads);
|
|
g_chraiCurrentSetup.boundpads = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpads);
|
|
g_chraiCurrentSetup.padnames = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.padnames);
|
|
g_chraiCurrentSetup.boundpadnames = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpadnames);
|
|
|
|
// iterate over all items and sub-items converting from file to ram pointer
|
|
#pragma region "foreach item in setupheader"
|
|
if (g_chraiCurrentSetup.pathwaypoints)
|
|
{
|
|
// NAV Points - use Pads as NavPoints
|
|
for (i = 0; g_chraiCurrentSetup.pathwaypoints[i].padID >= 0; i++)
|
|
{
|
|
btol(g_chraiCurrentSetup.pathwaypoints[i].padID);
|
|
g_chraiCurrentSetup.pathwaypoints[i].neighbours = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pathwaypoints[i].neighbours);
|
|
btol(g_chraiCurrentSetup.pathwaypoints[i].groupNum);
|
|
btol(g_chraiCurrentSetup.pathwaypoints[i].dist);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nwaypoint %d: pad %d, nb %X, GN %d, dst%d\n", i, g_chraiCurrentSetup.pathwaypoints[i].padID, g_chraiCurrentSetup.pathwaypoints[i].neighbours, g_chraiCurrentSetup.pathwaypoints[i].groupNum, g_chraiCurrentSetup.pathwaypoints[i].dist);
|
|
#endif
|
|
for (j = 0; g_chraiCurrentSetup.pathwaypoints[i].neighbours[j] >= 0; j++)
|
|
{
|
|
btol(g_chraiCurrentSetup.pathwaypoints[i].neighbours[j]);
|
|
#ifdef PRINTDEBUG
|
|
printf("%d, ", g_chraiCurrentSetup.pathwaypoints[i].neighbours[j]);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.waypointgroups)
|
|
{
|
|
// NAV Mesh, make a mesh from NAV Points
|
|
for (i = 0; g_chraiCurrentSetup.waypointgroups[i].neighbours; i++)
|
|
{
|
|
g_chraiCurrentSetup.waypointgroups[i].neighbours = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups[i].neighbours);
|
|
g_chraiCurrentSetup.waypointgroups[i].waypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups[i].waypoints);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nwaygrp %d: nb %X, wp%X, dst%d\n", i, g_chraiCurrentSetup.waypointgroups[i].neighbours, g_chraiCurrentSetup.waypointgroups[i].waypoints, g_chraiCurrentSetup.waypointgroups[i].dist);
|
|
#endif
|
|
for (j = 0; g_chraiCurrentSetup.waypointgroups[i].neighbours[j] >= 0; j++)
|
|
{
|
|
btol(g_chraiCurrentSetup.waypointgroups[i].neighbours[j]);
|
|
#ifdef PRINTDEBUG
|
|
printf("%d, ", g_chraiCurrentSetup.waypointgroups[i].neighbours[j]);
|
|
#endif
|
|
}
|
|
#ifdef PRINTDEBUG
|
|
printf("\n");
|
|
#endif
|
|
for (j = 0; g_chraiCurrentSetup.waypointgroups[i].waypoints[j] >= 0; j++)
|
|
{
|
|
btol(g_chraiCurrentSetup.waypointgroups[i].waypoints[j]);
|
|
#ifdef PRINTDEBUG
|
|
printf("%d, ", g_chraiCurrentSetup.waypointgroups[i].waypoints[j]);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.intro)
|
|
{
|
|
//g_chraiCurrentSetup.intro = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.intro);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nintro %X: \n", g_chraiCurrentSetup.intro);
|
|
#endif
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.propDefs)
|
|
{
|
|
// g_chraiCurrentSetup.propDefs = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.propDefs);
|
|
#ifdef PRINTDEBUG
|
|
printf("\npropDefs %X: \n", g_chraiCurrentSetup.propDefs);
|
|
#endif
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.patrolpaths)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.patrolpaths[i].waypoints; i++)
|
|
{
|
|
g_chraiCurrentSetup.patrolpaths[i].waypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.patrolpaths[i].waypoints);
|
|
|
|
#ifdef PRINTDEBUG
|
|
printf("path %d: wp %X, ID%d, isLoop %d, len %d\n", i, g_chraiCurrentSetup.patrolpaths[i].waypoints, g_chraiCurrentSetup.patrolpaths[i].ID, g_chraiCurrentSetup.patrolpaths[i].isLoop, g_chraiCurrentSetup.patrolpaths[i].len);
|
|
#endif
|
|
for (j = 0; g_chraiCurrentSetup.patrolpaths[i].waypoints[j] > -1; j++)
|
|
{
|
|
g_chraiCurrentSetup.patrolpaths[i].waypoints[j] = ntohl(g_chraiCurrentSetup.patrolpaths[i].waypoints[j]);
|
|
#ifdef PRINTDEBUG
|
|
printf("wp %d: %d\n", j, g_chraiCurrentSetup.patrolpaths[i].waypoints[j]);
|
|
#endif
|
|
}
|
|
g_chraiCurrentSetup.patrolpaths[i].len = j;
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.ailists)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++)
|
|
{
|
|
g_chraiCurrentSetup.ailists[i].ailist = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.ailists[i].ailist);
|
|
btol(g_chraiCurrentSetup.ailists[i].ID);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nAI %d: Lst %X, ID%d\n", i, g_chraiCurrentSetup.ailists[i].ailist, g_chraiCurrentSetup.ailists[i].ID);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.pads)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.pads[i].plink; i++)
|
|
{
|
|
|
|
for (j = 0; j < 3; j++)
|
|
{
|
|
btol(g_chraiCurrentSetup.pads[i].pos.AsArray[j]);
|
|
btol(g_chraiCurrentSetup.pads[i].up.AsArray[j]);
|
|
btol(g_chraiCurrentSetup.pads[i].look.AsArray[j]);
|
|
}
|
|
|
|
g_chraiCurrentSetup.pads[i].plink = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pads[i].plink);
|
|
|
|
if (g_chraiCurrentSetup.pads[i].plink == 0)
|
|
{
|
|
printf("pad number %d has no stan! (%s)\n", i, g_chraiCurrentSetup.pads[i].plink);
|
|
}
|
|
|
|
}
|
|
}
|
|
if (g_chraiCurrentSetup.boundpads)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.boundpads[i].plink; i++)
|
|
{
|
|
|
|
for (j = 0; j < 6; j++)
|
|
{
|
|
if (j < 3)
|
|
{
|
|
btol(g_chraiCurrentSetup.boundpads[i].pos.AsArray[j]);
|
|
btol(g_chraiCurrentSetup.boundpads[i].up.AsArray[j]);
|
|
btol(g_chraiCurrentSetup.boundpads[i].look.AsArray[j]);
|
|
}
|
|
btol(g_chraiCurrentSetup.boundpads[i].bbox.AsArray[j]);
|
|
}
|
|
g_chraiCurrentSetup.boundpads[i].plink = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpads[i].plink);
|
|
|
|
if (g_chraiCurrentSetup.boundpads[i].plink == 0)
|
|
{
|
|
printf("vol number %d has no stan! (%s)\n", i, g_chraiCurrentSetup.boundpads[i].plink);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.padnames)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.padnames[i]; i++)
|
|
{
|
|
g_chraiCurrentSetup.padnames[i] = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.padnames[i]);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nNAVPoint %d: %s\n", i, g_chraiCurrentSetup.padnames[i]);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.boundpadnames)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.boundpadnames[i]; i++)
|
|
{
|
|
g_chraiCurrentSetup.boundpadnames[i] = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpadnames[i]);
|
|
#ifdef PRINTDEBUG
|
|
printf("\nNAVMesh %d: %s\n", i, g_chraiCurrentSetup.boundpadnames[i]);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
#pragma endregion // foreach item in setupheader
|
|
|
|
printf("/*\n* This file was automatically generated from %s\n*\n* $Date: %s*/\n\n#include <bondtypes.h>\n#include <bondaicommands.h>\n\n// forward declarations\nwaypoint pathwaypoints[];\nwaygroup pathsets[];\ns32 intro[];\ns32 propDefs[];\nPathRecord patrolpaths[];\nAIListRecord ailists[];\nPadRecord pads[];\nBoundPadRecord vols[];\nchar *NAVPADs[];\nchar *NAVnames[];\n\nstagesetup %s = {\n &pathwaypoints,\n &pathsets,\n &intro,\n &propDefs,\n &patrolpaths,\n &ailists,\n &pads,\n &vols,\n &NAVPADs,\n &NAVnames\n};\n\n", fname, ctime(¤t_time), fname);
|
|
|
|
//retain file-order
|
|
for (lastAddr = g_ptrStageSetupFile; lastAddr < g_ptrStageSetupFile + fsize; lastAddr += 4)
|
|
{
|
|
if (g_chraiCurrentSetup.pathwaypoints && lastAddr == &g_chraiCurrentSetup.pathwaypoints[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
if (g_chraiCurrentSetup.waypointgroups && lastAddr == &g_chraiCurrentSetup.waypointgroups[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
if (g_chraiCurrentSetup.intro && lastAddr == &g_chraiCurrentSetup.intro[0])
|
|
{
|
|
printf("char intro[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
if (g_chraiCurrentSetup.propDefs && lastAddr == &g_chraiCurrentSetup.propDefs[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
if (g_chraiCurrentSetup.patrolpaths && lastAddr == &g_chraiCurrentSetup.patrolpaths[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.ailists)
|
|
{
|
|
for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++)
|
|
{
|
|
if (lastAddr == g_chraiCurrentSetup.ailists[i].ailist)
|
|
{
|
|
if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
printf("u8 chrAI_%hd[] = {\n #define THIS chrai_%hd\n\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
else
|
|
{
|
|
printf("u8 bgAi_%hd[] = {\n #define THIS bgai_%hd\n\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
hasName = 0;
|
|
ai(g_chraiCurrentSetup.ailists[i].ailist, g_chraiCurrentSetup.ailists[i].ID);
|
|
|
|
// un-closed loops
|
|
if (top != -1) printf("\nUnused Labels Found!"), displayStack();
|
|
top = -1;
|
|
|
|
printf(" #undef THIS \n};%s%s\n\n", hasName ? " //Possible Name " : "", hasName ? hasName : "");
|
|
}
|
|
}
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.ailists && lastAddr == &g_chraiCurrentSetup.ailists[0])
|
|
{
|
|
printf("AIListRecord ailists[] = {\n");
|
|
for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++)
|
|
{
|
|
if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
printf(" { &chrAI_%hd, chrai_%hd }, \n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
else if (isBGAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
printf(" { &bgAi_%hd, bgai_%hd },\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
else
|
|
{
|
|
printf(" /*Invalid ID*/{ &Ai_%hd, %hd }, //index %d\n", g_chraiCurrentSetup.ailists[i].ID, g_chraiCurrentSetup.ailists[i].ID, i);
|
|
}
|
|
}
|
|
printf(" { NULL, 0 }\n};\n");
|
|
}
|
|
|
|
if (g_chraiCurrentSetup.pads && lastAddr == &g_chraiCurrentSetup.pads[0])
|
|
{
|
|
printf("PadRecord pads[] = {\n //%30s%30s%40s%40s\tstan\n", "pos", "up", "look", "plink");
|
|
for (i = 0; g_chraiCurrentSetup.pads[i].plink; i++)
|
|
{
|
|
printf(" {{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf}, \t\"%#s\", NULL }, \n", g_chraiCurrentSetup.pads[i].pos.x, g_chraiCurrentSetup.pads[i].pos.y, g_chraiCurrentSetup.pads[i].pos.z, g_chraiCurrentSetup.pads[i].up.x, g_chraiCurrentSetup.pads[i].up.y, g_chraiCurrentSetup.pads[i].up.z, g_chraiCurrentSetup.pads[i].look.x, g_chraiCurrentSetup.pads[i].look.y, g_chraiCurrentSetup.pads[i].look.z, g_chraiCurrentSetup.pads[i].plink);
|
|
}
|
|
printf(" { 0 }\n};\n");
|
|
}
|
|
if (g_chraiCurrentSetup.boundpads && lastAddr == &g_chraiCurrentSetup.boundpads[0])
|
|
{
|
|
printf("BoundPadRecord boundpads[] = {\n //%30s%30s%40s%40s\tstan\tbbox\n", "pos", "up", "look", "plink");
|
|
for (i = 0; g_chraiCurrentSetup.boundpads[i].plink; i++)
|
|
{
|
|
printf(" {{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf}, \t\"%#s\", NULL, {%# 10gf, %# 10gf, %# 10gf, %# 10gf, %# 10gf, %# 10gf} }, \n", g_chraiCurrentSetup.boundpads[i].pos.x, g_chraiCurrentSetup.boundpads[i].pos.y, g_chraiCurrentSetup.boundpads[i].pos.z, g_chraiCurrentSetup.boundpads[i].up.x, g_chraiCurrentSetup.boundpads[i].up.y, g_chraiCurrentSetup.boundpads[i].up.z, g_chraiCurrentSetup.boundpads[i].look.x, g_chraiCurrentSetup.boundpads[i].look.y, g_chraiCurrentSetup.boundpads[i].look.z, g_chraiCurrentSetup.boundpads[i].plink, g_chraiCurrentSetup.boundpads[i].bbox.AsArray[0], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[1], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[2], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[3], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[4], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[5]);
|
|
}
|
|
printf(" { 0 }\n};\n");
|
|
}
|
|
if (g_chraiCurrentSetup.padnames && lastAddr == &g_chraiCurrentSetup.padnames[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
if (g_chraiCurrentSetup.boundpadnames && lastAddr == &g_chraiCurrentSetup.boundpadnames[0])
|
|
{
|
|
printf("char propDefs[] = {\n");
|
|
|
|
printf(" };\n //nothing to see here yet");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
printf("#pragma region Enums \n //Move the following Enums to the top of file\n");
|
|
|
|
if (g_chraiCurrentSetup.ailists)
|
|
{
|
|
printf(" enum chrAilist\n {\n");
|
|
for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++)
|
|
{
|
|
if (g_chraiCurrentSetup.ailists[i].ID)
|
|
{
|
|
if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
if (getChrAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
printf(" chrai_%hd,\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
else
|
|
{
|
|
printf(" chrai_%hd = setChrAIListID(%hd),\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
printf(" };\n");
|
|
}
|
|
if (g_chraiCurrentSetup.ailists)
|
|
{
|
|
printf(" enum bgAilist\n {\n");
|
|
for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++)
|
|
{
|
|
if (g_chraiCurrentSetup.ailists[i].ID)
|
|
{
|
|
if (isBGAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
if (getBGAIListID(g_chraiCurrentSetup.ailists[i].ID))
|
|
{
|
|
printf(" bgai_%hd,\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
else
|
|
{
|
|
printf(" bgai_%hd = setBGAIListID(%hd),\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
printf(" };\n");
|
|
}
|
|
|
|
SortEnums(labels);
|
|
SortEnums(keys);
|
|
SortEnums(tags);
|
|
SortEnums(chrs);
|
|
SortEnums(pads);
|
|
|
|
printenum(labels, "lbl");
|
|
printenum(tags, "tag");
|
|
printenum(keys, "key");
|
|
printenum(chrs, "chr");
|
|
printenum(pads, "pad");
|
|
i = 0;
|
|
|
|
if (SubIDs[i].id)
|
|
{
|
|
printf(" #define SETUPSUBROUTINES(ID) ");
|
|
while (SubIDs[i].id != 0)
|
|
{
|
|
if (isBGAIListID(SubIDs[i].id))
|
|
{
|
|
printf(" (ID == bgai_%hd)", getBGAIListID(SubIDs[i].id));
|
|
}
|
|
else
|
|
{
|
|
printf(" (ID == chrai_%hd)", getChrAIListID(SubIDs[i].id));
|
|
}
|
|
i++;
|
|
if (SubIDs[i].id) printf(" | \\\n");
|
|
}
|
|
printf("\n");
|
|
}
|
|
printf("#pragma endregion\n");
|
|
}
|
|
|
|
free(g_ptrStageSetupFile);
|
|
|
|
return 0;
|
|
}
|