1 /* 2 * Copyright (C) Volition, Inc. 1999. All rights reserved. 3 * 4 * All source code herein is the property of Volition, Inc. You may not sell 5 * or otherwise commercially exploit the source or things you created based on the 6 * source. 7 * 8 */ 9 10 #ifndef _SEXP_H 11 #define _SEXP_H 12 13 #include "globalincs/globals.h" 14 #include "globalincs/pstypes.h" // for NULL 15 16 class ship_subsys; 17 class ship; 18 class waypoint_list; 19 20 // bumped to 30 by Goober5000 21 #define OPERATOR_LENGTH 30 // if this ever exceeds TOKEN_LENGTH, let JasonH know! 22 23 #define MAX_SEXP_VARIABLES 250 24 25 #define MAX_OPERATORS 1024 // Yes, this is used, but not by the Sexp code. 26 27 // Operator argument formats (data types of an argument) 28 #define OPF_NONE 1 // argument cannot exist at this position if it's this 29 #define OPF_NULL 2 // no value. Can still be used for type matching, however 30 #define OPF_BOOL 3 31 #define OPF_NUMBER 4 32 #define OPF_SHIP 5 33 #define OPF_WING 6 34 #define OPF_SUBSYSTEM 7 35 #define OPF_POINT 8 // either a 3d point in space, or a waypoint name 36 #define OPF_IFF 9 37 #define OPF_AI_GOAL 10 // special to match ai goals 38 #define OPF_DOCKER_POINT 11 // docking point on docker ship 39 #define OPF_DOCKEE_POINT 12 // docking point on dockee ship 40 #define OPF_MESSAGE 13 // the name (id) of a message in Messages[] array 41 #define OPF_WHO_FROM 14 // who sent the message -- doesn't necessarily have to be a ship!!! 42 #define OPF_PRIORITY 15 // priority for messages 43 #define OPF_WAYPOINT_PATH 16 // name of a waypoint 44 #define OPF_POSITIVE 17 // positive number or zero 45 #define OPF_MISSION_NAME 18 // name of a mission for various mission related things 46 #define OPF_SHIP_POINT 19 // a waypoint or a ship 47 #define OPF_GOAL_NAME 20 // name of goal (or maybe event?) from a mission 48 #define OPF_SHIP_WING 21 // either a ship or wing name (they don't conflict) 49 #define OPF_SHIP_WING_WHOLETEAM 22 // Karajorma - Ship, wing or an entire team's worth of ships 50 #define OPF_SHIP_WING_SHIPONTEAM_POINT 23 // name of a ship, wing, any ship on a team, or a point 51 #define OPF_SHIP_WING_POINT 24 52 #define OPF_SHIP_WING_POINT_OR_NONE 25 // WMC - Ship, wing, point or none 53 #define OPF_SHIP_TYPE 26 // type of ship (fighter/bomber/etc) 54 #define OPF_KEYPRESS 27 // a default key 55 #define OPF_EVENT_NAME 28 // name of an event 56 #define OPF_AI_ORDER 29 // a squadmsg order player can give to a ship 57 #define OPF_SKILL_LEVEL 30 // current skill level of the game 58 #define OPF_MEDAL_NAME 31 // name of medals 59 #define OPF_WEAPON_NAME 32 // name of a weapon 60 #define OPF_SHIP_CLASS_NAME 33 // name of a ship class 61 #define OPF_CUSTOM_HUD_GAUGE 34 // name of custom HUD gauge 62 #define OPF_HUGE_WEAPON 35 // name of a secondary bomb type weapon 63 #define OPF_SHIP_NOT_PLAYER 36 // a ship, but not a player ship 64 #define OPF_JUMP_NODE_NAME 37 // name of a jump node 65 #define OPF_VARIABLE_NAME 38 // variable name 66 #define OPF_AMBIGUOUS 39 // type used with variable 67 #define OPF_AWACS_SUBSYSTEM 40 // an awacs subsystem 68 #define OPF_CARGO 41 // Goober5000 - a cargo string (currently used for set-cargo and is-cargo) 69 #define OPF_AI_CLASS 42 // Goober5000 - an AI class 70 #define OPF_SUPPORT_SHIP_CLASS 43 // Goober5000 - a support ship class 71 #define OPF_ARRIVAL_LOCATION 44 // Goober5000 - a ship arrival location 72 #define OPF_ARRIVAL_ANCHOR_ALL 45 // Goober5000 - all of a ship's possible arrival anchors 73 #define OPF_DEPARTURE_LOCATION 46 // Goober5000 - a ship departure location 74 #define OPF_SHIP_WITH_BAY 47 // Goober5000 - a ship with a fighter bay 75 #define OPF_SOUNDTRACK_NAME 48 // Goober5000 - the name of a music soundtrack 76 #define OPF_INTEL_NAME 49 // Goober5000 - the name of an intel entry in species.tbl 77 #define OPF_STRING 50 // Goober5000 - any old string 78 #define OPF_ROTATING_SUBSYSTEM 51 // Goober5000 - a rotating subsystem 79 #define OPF_NAV_POINT 52 // Kazan - a Nav Point name 80 #define OPF_SSM_CLASS 53 // Goober5000 - an SSM class 81 #define OPF_FLEXIBLE_ARGUMENT 54 // Goober5000 - special to match for when-argument 82 #define OPF_ANYTHING 55 // Goober5000 - anything goes 83 #define OPF_SKYBOX_MODEL_NAME 56 // taylor - changing skybox model 84 #define OPF_SHIP_OR_NONE 57 // Goober5000 - an "optional" ship argument 85 #define OPF_BACKGROUND_BITMAP 58 // phreak - name of a background bitmap 86 #define OPF_SUN_BITMAP 59 // phreak - name of a background bitmap 87 #define OPF_NEBULA_STORM_TYPE 60 // phreak - name a nebula storm 88 #define OPF_NEBULA_POOF 61 // phreak - name of a nebula poof 89 #define OPF_TURRET_TARGET_ORDER 62 // WMC - name of a turret target type (see aiturret.cpp) 90 #define OPF_SUBSYSTEM_OR_NONE 63 // Goober5000 - an "optional" subsystem argument 91 #define OPF_PERSONA 64 // Karajorma - name of a persona 92 #define OPF_SUBSYS_OR_GENERIC 65 // Karajorma - a subsystem or a generic name (like engine) which covers all subsystems of that type 93 #define OPF_ORDER_RECIPIENT 66 // Karajorma - since orders can go to All Fighters as well as a ship or wing 94 #define OPF_SUBSYSTEM_TYPE 67 // Goober5000 - a generic subsystem type (navigation, engines, etc.) rather than a specific subsystem 95 #define OPF_POST_EFFECT 68 // Hery - type of post-processing effect 96 #define OPF_TARGET_PRIORITIES 69 // FUBAR - Target priority groups 97 #define OPF_ARMOR_TYPE 70 // FUBAR - Armor type or <none> 98 #define OPF_FONT 71 // Goober5000 - a FreeSpace font 99 #define OPF_HUD_ELEMENT 72 // A magic name of a specific HUD element 100 #define OPF_SOUND_ENVIRONMENT 73 // Goober5000 - one of EFX_presets, per Taylor 101 #define OPF_SOUND_ENVIRONMENT_OPTION 74 // Goober5000 - one of Taylor's options 102 #define OPF_EXPLOSION_OPTION 75 // Goober5000 103 #define OPF_AUDIO_VOLUME_OPTION 76 // The E 104 #define OPF_WEAPON_BANK_NUMBER 77 // Karajorma - The number of a primary/secondary/tertiary weapon bank or all of them 105 #define OPF_MESSAGE_OR_STRING 78 // Goober5000 - provides a list of messages like OPF_MESSAGE, but also allows entering arbitrary strings 106 #define OPF_BUILTIN_HUD_GAUGE 79 // The E 107 #define OPF_DAMAGE_TYPE 80 // FUBAR - Damage type or <none> 108 #define OPF_SHIP_EFFECT 81 // The E - per-ship effects, as defined in post-processing.tbl 109 #define OPF_ANIMATION_TYPE 82 // Goober5000 - as defined in modelanim.h 110 #define OPF_MISSION_MOOD 83 // Karajorma - Moods determine which builtin messages will be sent 111 #define OPF_SHIP_FLAG 84 // Karajorma - The name of a ship flag 112 #define OPF_TEAM_COLOR 85 // The E - Color settings as defined in Colors.tbl 113 #define OPF_NEBULA_PATTERN 86 // Axem - Full Nebula Background Patterns, as defined in nebula.tbl 114 #define OPF_SKYBOX_FLAGS 87 // niffiwan - valid skybox flags 115 #define OPF_GAME_SND 88 // m!m - A game sound 116 #define OPF_FIREBALL 89 // Goober5000 - an entry in fireball.tbl 117 #define OPF_SPECIES 90 // Goober5000 118 #define OPF_LANGUAGE 91 // Goober5000 119 120 // Operand return types 121 #define OPR_NUMBER 1 // returns number 122 #define OPR_BOOL 2 // returns true/false value 123 #define OPR_NULL 3 // doesn't return a value 124 #define OPR_AI_GOAL 4 // is an ai operator (doesn't really return a value, but used for type matching) 125 #define OPR_POSITIVE 5 // returns a non-negative number 126 #define OPR_STRING 6 // not really a return type, but used for type matching. 127 #define OPR_AMBIGUOUS 7 // not really a return type, but used for type matching. 128 #define OPR_FLEXIBLE_ARGUMENT 8 // Goober5000 - is an argument operator (doesn't really return a value, but used for type matching) 129 130 #define OP_INSERT_FLAG 0x8000 131 #define OP_REPLACE_FLAG 0x4000 132 #define OP_NONCAMPAIGN_FLAG 0x2000 133 #define OP_CAMPAIGN_ONLY_FLAG 0x1000 134 135 // if we ever have more than 1024 (!) 136 // total sexps, we're going to have to 137 // figure out a different way of 138 // distinguishing between sexp identifier 139 // and sexp array index 140 #define FIRST_OP 0x0400 141 142 // IMPORTANT: because of the way 143 // categories work, no category can 144 // have more than 256 sexps (mapped 145 // to 00 through ff) otherwise 146 // they'll overlap their category) 147 #define OP_CATEGORY_OBJECTIVE 0x0400 148 #define OP_CATEGORY_TIME 0x0500 149 #define OP_CATEGORY_LOGICAL 0x0600 150 #define OP_CATEGORY_ARITHMETIC 0x0700 151 #define OP_CATEGORY_STATUS 0x0800 152 #define OP_CATEGORY_CHANGE 0x0900 153 #define OP_CATEGORY_CHANGE2 0x0a00 154 #define OP_CATEGORY_CONDITIONAL 0x0b00 155 #define OP_CATEGORY_AI 0x0c00 // used for AI goals 156 #define OP_CATEGORY_TRAINING 0x0d00 157 #define OP_CATEGORY_UNLISTED 0x0e00 158 #define OP_CATEGORY_GOAL_EVENT 0x0f00 // final category can't be higher than 0x0f00, 159 // to avoid overlap with flags above 160 161 #define OP_CATEGORY_MASK 0x0f00 // 0000111100000000b 162 163 164 // The debug category is obsolete, so 165 // I removed it. It originally took the 166 // place of OP_CATEGORY_CONDITIONAL, 167 // which was bumped (along with all the 168 // lower categories) so that FIRST_OP 169 // could be 0x0400. This allows for 170 // 1024 possible sexps, as opposed to 171 // the 768 possible if the categories 172 // had not been bumped. 173 /* 174 #define OP_CATEGORY_DEBUG 0x0a00 175 */ 176 177 // New subcategories! :) -- Goober5000 178 // Adding more subcategories is possible with the new code. All that needs to be done is 179 // to add a #define here (a number from 0x0000 to 0x00ff ORred with the category that it 180 // goes under), some appropriate case statements in get_subcategory() (in sexp.cpp) that 181 // will return the subcategory for each sexp that uses it, and the submenu name in the 182 // op_submenu[] array in sexp.cpp. 183 #define SUBCATEGORY_MASK 0x00ff 184 185 #define CHANGE_SUBCATEGORY_MESSAGING (0x0000 | OP_CATEGORY_CHANGE) 186 #define CHANGE_SUBCATEGORY_AI_CONTROL (0x0001 | OP_CATEGORY_CHANGE) 187 #define CHANGE_SUBCATEGORY_SHIP_STATUS (0x0002 | OP_CATEGORY_CHANGE) 188 #define CHANGE_SUBCATEGORY_SHIELDS_ENGINES_AND_WEAPONS (0x0003 | OP_CATEGORY_CHANGE) 189 #define CHANGE_SUBCATEGORY_SUBSYSTEMS (0x0004 | OP_CATEGORY_CHANGE) 190 #define CHANGE_SUBCATEGORY_CARGO (0x0005 | OP_CATEGORY_CHANGE) 191 #define CHANGE_SUBCATEGORY_ARMOR_AND_DAMAGE_TYPES (0x0006 | OP_CATEGORY_CHANGE) 192 #define CHANGE_SUBCATEGORY_BEAMS_AND_TURRETS (0x0007 | OP_CATEGORY_CHANGE) 193 #define CHANGE_SUBCATEGORY_MODELS_AND_TEXTURES (0x0008 | OP_CATEGORY_CHANGE) 194 #define CHANGE_SUBCATEGORY_COORDINATE_MANIPULATION (0x0009 | OP_CATEGORY_CHANGE) 195 #define CHANGE_SUBCATEGORY_MISSION_AND_CAMPAIGN (0x000A | OP_CATEGORY_CHANGE) 196 #define CHANGE_SUBCATEGORY_MUSIC_AND_SOUND (0x000B | OP_CATEGORY_CHANGE) 197 #define CHANGE_SUBCATEGORY_HUD (0x000C | OP_CATEGORY_CHANGE) 198 #define CHANGE_SUBCATEGORY_NAV (0x000D | OP_CATEGORY_CHANGE) 199 #define CHANGE_SUBCATEGORY_CUTSCENES (0x000E | OP_CATEGORY_CHANGE) 200 #define CHANGE_SUBCATEGORY_BACKGROUND_AND_NEBULA (0x000F | OP_CATEGORY_CHANGE) 201 #define CHANGE_SUBCATEGORY_JUMP_NODES (0x0010 | OP_CATEGORY_CHANGE) 202 #define CHANGE_SUBCATEGORY_SPECIAL_EFFECTS (0x0011 | OP_CATEGORY_CHANGE) 203 #define CHANGE_SUBCATEGORY_VARIABLES (0x0012 | OP_CATEGORY_CHANGE) 204 #define CHANGE_SUBCATEGORY_OTHER (0x0013 | OP_CATEGORY_CHANGE) 205 206 207 #define STATUS_SUBCATEGORY_MISSION (0x0000 | OP_CATEGORY_STATUS) 208 #define STATUS_SUBCATEGORY_PLAYER (0x0001 | OP_CATEGORY_STATUS) 209 #define STATUS_SUBCATEGORY_MULTIPLAYER (0x0002 | OP_CATEGORY_STATUS) 210 #define STATUS_SUBCATEGORY_SHIP_STATUS (0x0003 | OP_CATEGORY_STATUS) 211 #define STATUS_SUBCATEGORY_SHIELDS_ENGINES_AND_WEAPONS (0x0004 | OP_CATEGORY_STATUS) 212 #define STATUS_SUBCATEGORY_CARGO (0x0005 | OP_CATEGORY_STATUS) 213 #define STATUS_SUBCATEGORY_DAMAGE (0x0006 | OP_CATEGORY_STATUS) 214 #define STATUS_SUBCATEGORY_DISTANCE_AND_COORDINATES (0x0007 | OP_CATEGORY_STATUS) 215 #define STATUS_SUBCATEGORY_VARIABLES (0x0008 | OP_CATEGORY_STATUS) 216 #define STATUS_SUBCATEGORY_OTHER (0x0009 | OP_CATEGORY_STATUS) 217 218 219 #define OP_PLUS (0x0000 | OP_CATEGORY_ARITHMETIC) 220 #define OP_MINUS (0x0001 | OP_CATEGORY_ARITHMETIC) 221 #define OP_MOD (0x0002 | OP_CATEGORY_ARITHMETIC) 222 #define OP_MUL (0x0003 | OP_CATEGORY_ARITHMETIC) 223 #define OP_DIV (0x0004 | OP_CATEGORY_ARITHMETIC) 224 #define OP_RAND (0x0005 | OP_CATEGORY_ARITHMETIC) 225 #define OP_ABS (0x0006 | OP_CATEGORY_ARITHMETIC) // Goober5000 226 #define OP_MIN (0x0007 | OP_CATEGORY_ARITHMETIC) // Goober5000 227 #define OP_MAX (0x0008 | OP_CATEGORY_ARITHMETIC) // Goober5000 228 #define OP_AVG (0x0009 | OP_CATEGORY_ARITHMETIC) // Goober5000 229 #define OP_RAND_MULTIPLE (0x000a | OP_CATEGORY_ARITHMETIC) // Goober5000 230 #define OP_POW (0x000b | OP_CATEGORY_ARITHMETIC) // Goober5000 231 #define OP_BITWISE_AND (0x000c | OP_CATEGORY_ARITHMETIC) // Goober5000 232 #define OP_BITWISE_OR (0x000d | OP_CATEGORY_ARITHMETIC) // Goober5000 233 #define OP_BITWISE_NOT (0x000e | OP_CATEGORY_ARITHMETIC) // Goober5000 234 #define OP_BITWISE_XOR (0x000f | OP_CATEGORY_ARITHMETIC) // Goober5000 235 236 #define OP_SET_BIT (0x0010 | OP_CATEGORY_ARITHMETIC) // Goober5000 237 #define OP_UNSET_BIT (0x0011 | OP_CATEGORY_ARITHMETIC) // Goober5000 238 #define OP_IS_BIT_SET (0x0012 | OP_CATEGORY_ARITHMETIC) // Goober5000 239 #define OP_SIGNUM (0x0013 | OP_CATEGORY_ARITHMETIC) // Goober5000 240 #define OP_IS_NAN (0x0014 | OP_CATEGORY_ARITHMETIC) // Goober5000 241 #define OP_NAN_TO_NUMBER (0x0015 | OP_CATEGORY_ARITHMETIC) // Goober5000 242 243 244 #define OP_TRUE (0x0000 | OP_CATEGORY_LOGICAL) 245 #define OP_FALSE (0x0001 | OP_CATEGORY_LOGICAL) 246 #define OP_AND (0x0002 | OP_CATEGORY_LOGICAL) 247 #define OP_AND_IN_SEQUENCE (0x0003 | OP_CATEGORY_LOGICAL) 248 #define OP_OR (0x0004 | OP_CATEGORY_LOGICAL) 249 #define OP_EQUALS (0x0005 | OP_CATEGORY_LOGICAL) 250 #define OP_GREATER_THAN (0x0006 | OP_CATEGORY_LOGICAL) 251 #define OP_LESS_THAN (0x0007 | OP_CATEGORY_LOGICAL) 252 #define OP_HAS_TIME_ELAPSED (0x0008 | OP_CATEGORY_LOGICAL | OP_NONCAMPAIGN_FLAG) 253 #define OP_NOT (0x0009 | OP_CATEGORY_LOGICAL) 254 #define OP_STRING_EQUALS (0x000a | OP_CATEGORY_LOGICAL) 255 #define OP_STRING_GREATER_THAN (0x000b | OP_CATEGORY_LOGICAL) 256 #define OP_STRING_LESS_THAN (0x000c | OP_CATEGORY_LOGICAL) 257 #define OP_NOT_EQUAL (0x000d | OP_CATEGORY_LOGICAL) // Goober5000 258 #define OP_GREATER_OR_EQUAL (0x000e | OP_CATEGORY_LOGICAL) // Goober5000 259 #define OP_LESS_OR_EQUAL (0x000f | OP_CATEGORY_LOGICAL) // Goober5000 260 261 #define OP_XOR (0x0010 | OP_CATEGORY_LOGICAL) // Goober5000 262 #define OP_PERFORM_ACTIONS (0x0011 | OP_CATEGORY_LOGICAL | OP_NONCAMPAIGN_FLAG) // Goober5000 263 264 265 #define OP_GOAL_INCOMPLETE (0x0000 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 266 #define OP_GOAL_TRUE_DELAY (0x0001 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 267 #define OP_GOAL_FALSE_DELAY (0x0002 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 268 #define OP_EVENT_INCOMPLETE (0x0003 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 269 #define OP_EVENT_TRUE_DELAY (0x0004 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 270 #define OP_EVENT_FALSE_DELAY (0x0005 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 271 #define OP_PREVIOUS_EVENT_TRUE (0x0006 | OP_CATEGORY_GOAL_EVENT) 272 #define OP_PREVIOUS_EVENT_FALSE (0x0007 | OP_CATEGORY_GOAL_EVENT) 273 #define OP_PREVIOUS_GOAL_TRUE (0x0009 | OP_CATEGORY_GOAL_EVENT) 274 #define OP_PREVIOUS_GOAL_FALSE (0x000a | OP_CATEGORY_GOAL_EVENT) 275 #define OP_EVENT_TRUE_MSECS_DELAY (0x000b | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 276 #define OP_EVENT_FALSE_MSECS_DELAY (0x000c | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG) 277 278 #define OP_IS_DESTROYED_DELAY (0x0000 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 279 #define OP_IS_SUBSYSTEM_DESTROYED_DELAY (0x0001 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 280 #define OP_IS_DISABLED_DELAY (0x0002 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 281 #define OP_IS_DISARMED_DELAY (0x0003 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 282 #define OP_HAS_DOCKED_DELAY (0x0004 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 283 #define OP_HAS_UNDOCKED_DELAY (0x0005 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 284 #define OP_HAS_ARRIVED_DELAY (0x0006 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 285 #define OP_HAS_DEPARTED_DELAY (0x0007 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 286 #define OP_WAYPOINTS_DONE_DELAY (0x0008 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 287 #define OP_SHIP_TYPE_DESTROYED (0x0009 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 288 #define OP_PERCENT_SHIPS_DEPARTED (0x000a | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 289 #define OP_PERCENT_SHIPS_DESTROYED (0x000b | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 290 #define OP_DEPART_NODE_DELAY (0x000c | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 291 #define OP_DESTROYED_DEPARTED_DELAY (0x000d | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) 292 #define OP_PERCENT_SHIPS_DISARMED (0x000e | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Goober5000 293 #define OP_PERCENT_SHIPS_DISABLED (0x000f | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Goober5000 294 #define OP_PERCENT_SHIPS_ARRIVED (0x0010 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // FUBAR-BDHR 295 #define OP_NAV_IS_VISITED (0x0011 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Kazan 296 #define OP_WAS_DESTROYED_BY_DELAY (0x0012 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // WCS 297 298 #define OP_TIME_SHIP_DESTROYED (0x0000 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 299 #define OP_TIME_SHIP_ARRIVED (0x0001 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 300 #define OP_TIME_SHIP_DEPARTED (0x0002 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 301 #define OP_TIME_WING_DESTROYED (0x0003 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 302 #define OP_TIME_WING_ARRIVED (0x0004 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 303 #define OP_TIME_WING_DEPARTED (0x0005 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 304 #define OP_MISSION_TIME (0x0006 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 305 #define OP_MISSION_TIME_MSECS (0x0007 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) // Goober5000 306 #define OP_TIME_DOCKED (0x0008 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 307 #define OP_TIME_UNDOCKED (0x0009 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) 308 #define OP_TIME_TO_GOAL (0x000a | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) // tcrayford 309 310 #define OP_SHIELDS_LEFT (0x0000 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 311 #define OP_HITS_LEFT (0x0001 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 312 #define OP_HITS_LEFT_SUBSYSTEM (0x0002 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // deprecated 313 #define OP_SIM_HITS_LEFT (0x0003 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 314 #define OP_DISTANCE (0x0004 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 315 #define OP_DISTANCE_CENTER_SUBSYSTEM (0x0005 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 316 #define OP_LAST_ORDER_TIME (0x0006 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 317 #define OP_NUM_PLAYERS (0x0007 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 318 #define OP_SKILL_LEVEL_AT_LEAST (0x0008 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 319 #define OP_WAS_PROMOTION_GRANTED (0x0009 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 320 #define OP_WAS_MEDAL_GRANTED (0x000a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 321 #define OP_CARGO_KNOWN_DELAY (0x000b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 322 #define OP_CAP_SUBSYS_CARGO_KNOWN_DELAY (0x000c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 323 #define OP_HAS_BEEN_TAGGED_DELAY (0x000d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 324 #define OP_IS_TAGGED (0x000e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 325 #define OP_NUM_KILLS (0x000f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 326 327 #define OP_NUM_TYPE_KILLS (0x0010 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 328 #define OP_NUM_CLASS_KILLS (0x0011 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 329 #define OP_SHIELD_RECHARGE_PCT (0x0012 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 330 #define OP_ENGINE_RECHARGE_PCT (0x0013 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 331 #define OP_WEAPON_RECHARGE_PCT (0x0014 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 332 #define OP_SHIELD_QUAD_LOW (0x0015 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 333 #define OP_SECONDARY_AMMO_PCT (0x0016 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 334 #define OP_IS_SECONDARY_SELECTED (0x0017 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 335 #define OP_IS_PRIMARY_SELECTED (0x0018 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 336 #define OP_SPECIAL_WARP_DISTANCE (0x0019 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 337 #define OP_IS_SHIP_VISIBLE (0x001a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 338 #define OP_TEAM_SCORE (0x001b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 339 #define OP_PRIMARY_AMMO_PCT (0x001c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 340 #define OP_IS_SHIP_STEALTHY (0x001d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 341 #define OP_IS_CARGO (0x001e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 342 #define OP_IS_FRIENDLY_STEALTH_VISIBLE (0x001f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 343 344 #define OP_GET_OBJECT_X (0x0020 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 345 #define OP_GET_OBJECT_Y (0x0021 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 346 #define OP_GET_OBJECT_Z (0x0022 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 347 #define OP_IS_AI_CLASS (0x0023 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 348 #define OP_IS_SHIP_TYPE (0x0024 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 349 #define OP_IS_SHIP_CLASS (0x0025 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 350 #define OP_NUM_SHIPS_IN_BATTLE (0x0026 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // phreak 351 #define OP_CURRENT_SPEED (0x0027 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon 352 #define OP_IS_IFF (0x0028 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 353 #define OP_NUM_WITHIN_BOX (0x0029 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon 354 #define OP_SCRIPT_EVAL_NUM (0x002a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon 355 #define OP_SCRIPT_EVAL_STRING (0x002b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon 356 #define OP_NUM_SHIPS_IN_WING (0x002c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 357 #define OP_GET_PRIMARY_AMMO (0x002d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 358 #define OP_GET_SECONDARY_AMMO (0x002e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 359 #define OP_NUM_ASSISTS (0x002f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 360 361 #define OP_SHIP_SCORE (0x0030 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 362 #define OP_SHIP_DEATHS (0x0031 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 363 #define OP_RESPAWNS_LEFT (0x0032 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 364 #define OP_IS_PLAYER (0x0033 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 365 #define OP_GET_DAMAGE_CAUSED (0x0034 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 366 #define OP_AFTERBURNER_LEFT (0x0035 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 367 #define OP_WEAPON_ENERGY_LEFT (0x0036 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 368 #define OP_PRIMARY_FIRED_SINCE (0x0037 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 369 #define OP_SECONDARY_FIRED_SINCE (0x0038 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 370 #define OP_CUTSCENES_GET_FOV (0x0039 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Echelon9 371 #define OP_GET_THROTTLE_SPEED (0x003a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 372 #define OP_HITS_LEFT_SUBSYSTEM_GENERIC (0x003b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 373 #define OP_HITS_LEFT_SUBSYSTEM_SPECIFIC (0x003c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 374 #define OP_GET_OBJECT_PITCH (0x003d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 375 #define OP_GET_OBJECT_BANK (0x003e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 376 #define OP_GET_OBJECT_HEADING (0x003f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 377 378 #define OP_HAS_PRIMARY_WEAPON (0x0040 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 379 #define OP_HAS_SECONDARY_WEAPON (0x0041 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 380 #define OP_STRING_TO_INT (0x0042 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 381 #define OP_STRING_GET_LENGTH (0x0043 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 382 #define OP_GET_OBJECT_SPEED_X (0x0044 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 383 #define OP_GET_OBJECT_SPEED_Y (0x0045 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 384 #define OP_GET_OBJECT_SPEED_Z (0x0046 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) 385 #define OP_NAV_DISTANCE (0x0047 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Kazan 386 #define OP_NAV_ISLINKED (0x0048 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Kazan 387 #define OP_IS_FACING (0x0049 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // The E 388 #define OP_DIRECTIVE_VALUE (0x004a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 389 #define OP_GET_NUM_COUNTERMEASURES (0x004b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 390 #define OP_IS_IN_BOX (0x004c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Sushi 391 #define OP_IS_IN_MISSION (0x004d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 392 #define OP_ARE_SHIP_FLAGS_SET (0x004e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma 393 #define OP_TURRET_GET_PRIMARY_AMMO (0x004f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo code 394 395 #define OP_TURRET_GET_SECONDARY_AMMO (0x0050 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo code 396 #define OP_IS_DOCKED (0x0051 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 397 #define OP_IS_IN_TURRET_FOV (0x0052 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 398 #define OP_GET_HOTKEY (0x0053 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // wookieejedi 399 #define OP_DISTANCE_CENTER (0x0054 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 400 #define OP_DISTANCE_BBOX (0x0055 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 401 #define OP_DISTANCE_BBOX_SUBSYSTEM (0x0056 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000 402 #define OP_IS_LANGUAGE (0x0057 | OP_CATEGORY_STATUS) // Goober5000 403 404 // conditional sexpressions 405 #define OP_WHEN (0x0000 | OP_CATEGORY_CONDITIONAL) 406 #define OP_WHEN_ARGUMENT (0x0001 | OP_CATEGORY_CONDITIONAL) // Goober5000 407 #define OP_EVERY_TIME (0x0002 | OP_CATEGORY_CONDITIONAL | OP_NONCAMPAIGN_FLAG) // Goober5000 408 #define OP_EVERY_TIME_ARGUMENT (0x0003 | OP_CATEGORY_CONDITIONAL | OP_NONCAMPAIGN_FLAG) // Goober5000 409 #define OP_ANY_OF (0x0004 | OP_CATEGORY_CONDITIONAL) // Goober5000 410 #define OP_EVERY_OF (0x0005 | OP_CATEGORY_CONDITIONAL) // Goober5000 411 #define OP_RANDOM_OF (0x0006 | OP_CATEGORY_CONDITIONAL) // Goober5000 412 #define OP_NUMBER_OF (0x0007 | OP_CATEGORY_CONDITIONAL) // Goober5000 413 #define OP_INVALIDATE_ARGUMENT (0x0008 | OP_CATEGORY_CONDITIONAL) // Goober5000 414 #define OP_RANDOM_MULTIPLE_OF (0x0009 | OP_CATEGORY_CONDITIONAL) // Karajorma 415 #define OP_IN_SEQUENCE (0x000a | OP_CATEGORY_CONDITIONAL) // Karajorma 416 #define OP_VALIDATE_ARGUMENT (0x000b | OP_CATEGORY_CONDITIONAL) // Karajorma 417 #define OP_DO_FOR_VALID_ARGUMENTS (0x000c | OP_CATEGORY_CONDITIONAL) // Karajorma 418 #define OP_INVALIDATE_ALL_ARGUMENTS (0x000d | OP_CATEGORY_CONDITIONAL) // Karajorma 419 #define OP_VALIDATE_ALL_ARGUMENTS (0x000e | OP_CATEGORY_CONDITIONAL) // Karajorma 420 #define OP_FOR_COUNTER (0x000f | OP_CATEGORY_CONDITIONAL) // Goober5000 421 422 #define OP_IF_THEN_ELSE (0x0010 | OP_CATEGORY_CONDITIONAL) // Goober5000 423 #define OP_NUM_VALID_ARGUMENTS (0x0011 | OP_CATEGORY_CONDITIONAL) // Karajorma 424 #define OP_FUNCTIONAL_IF_THEN_ELSE (0x0012 | OP_CATEGORY_CONDITIONAL) // Goober5000 425 #define OP_FOR_SHIP_CLASS (0x0013 | OP_CATEGORY_CONDITIONAL) // Goober5000 426 #define OP_FOR_SHIP_TYPE (0x0014 | OP_CATEGORY_CONDITIONAL) // Goober5000 427 #define OP_FOR_SHIP_TEAM (0x0015 | OP_CATEGORY_CONDITIONAL) // Goober5000 428 #define OP_FOR_SHIP_SPECIES (0x0016 | OP_CATEGORY_CONDITIONAL) // Goober5000 429 #define OP_FOR_PLAYERS (0x0017 | OP_CATEGORY_CONDITIONAL) // Goober5000 430 #define OP_FIRST_OF (0x0018 | OP_CATEGORY_CONDITIONAL) // MageKing17 431 #define OP_SWITCH (0x0019 | OP_CATEGORY_CONDITIONAL) // Goober5000 432 #define OP_FUNCTIONAL_SWITCH (0x001a | OP_CATEGORY_CONDITIONAL) // Goober5000 433 434 435 // sexpressions with side-effects 436 #define OP_CHANGE_IFF (0x0000 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 437 #define OP_REPAIR_SUBSYSTEM (0x0001 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 438 #define OP_SABOTAGE_SUBSYSTEM (0x0002 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 439 #define OP_SET_SUBSYSTEM_STRNGTH (0x0003 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 440 #define OP_PROTECT_SHIP (0x0004 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 441 #define OP_SEND_MESSAGE (0x0005 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 442 #define OP_SELF_DESTRUCT (0x0006 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 443 #define OP_CLEAR_GOALS (0x0007 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 444 #define OP_ADD_GOAL (0x0008 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 445 #define OP_REMOVE_GOAL (0x0009 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 446 #define OP_INVALIDATE_GOAL (0x000a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 447 #define OP_VALIDATE_GOAL (0x000b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 448 #define OP_SEND_RANDOM_MESSAGE (0x000c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 449 #define OP_TRANSFER_CARGO (0x000d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 450 #define OP_EXCHANGE_CARGO (0x000e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 451 #define OP_UNPROTECT_SHIP (0x000f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 452 453 #define OP_GOOD_REARM_TIME (0x0010 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 454 #define OP_BAD_REARM_TIME (0x0011 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 455 #define OP_GRANT_PROMOTION (0x0012 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 456 #define OP_GRANT_MEDAL (0x0013 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 457 #define OP_ALLOW_SHIP (0x0014 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 458 #define OP_ALLOW_WEAPON (0x0015 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 459 #define OP_GOOD_SECONDARY_TIME (0x0016 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 460 #define OP_WARP_BROKEN (0x0017 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 461 #define OP_WARP_NOT_BROKEN (0x0018 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 462 #define OP_WARP_NEVER (0x0019 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 463 #define OP_WARP_ALLOWED (0x001a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 464 #define OP_SHIP_INVISIBLE (0x001b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 465 #define OP_SHIP_VISIBLE (0x001c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 466 #define OP_SHIP_INVULNERABLE (0x001d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 467 #define OP_SHIP_VULNERABLE (0x001e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 468 #define OP_RED_ALERT (0x001f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 469 470 #define OP_TECH_ADD_SHIP (0x0020 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 471 #define OP_TECH_ADD_WEAPON (0x0021 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 472 #define OP_END_CAMPAIGN (0x0022 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 473 #define OP_JETTISON_CARGO_DELAY (0x0023 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 474 #define OP_MODIFY_VARIABLE (0X0024 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 475 #define OP_NOP (0x0025 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 476 #define OP_BEAM_FIRE (0x0026 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 477 #define OP_BEAM_FREE (0x0027 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 478 #define OP_BEAM_FREE_ALL (0x0028 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 479 #define OP_BEAM_LOCK (0x0029 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 480 #define OP_BEAM_LOCK_ALL (0x002a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 481 #define OP_BEAM_PROTECT_SHIP (0x002b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 482 #define OP_BEAM_UNPROTECT_SHIP (0x002c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 483 #define OP_TURRET_FREE (0x002d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 484 #define OP_TURRET_FREE_ALL (0x002e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 485 #define OP_TURRET_LOCK (0x002f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 486 487 #define OP_TURRET_LOCK_ALL (0x0030 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 488 #define OP_ADD_REMOVE_ESCORT (0x0031 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 489 #define OP_AWACS_SET_RADIUS (0x0032 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 490 #define OP_SEND_MESSAGE_LIST (0x0033 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 491 #define OP_CAP_WAYPOINT_SPEED (0x0034 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 492 #define OP_SHIP_GUARDIAN (0x0035 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 493 #define OP_SHIP_NO_GUARDIAN (0x0036 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 494 #define OP_TURRET_TAGGED_ONLY_ALL (0x0037 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 495 #define OP_TURRET_TAGGED_CLEAR_ALL (0x0038 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 496 #define OP_SUBSYS_SET_RANDOM (0x0039 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 497 #define OP_SUPERNOVA_START (0x003a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 498 #define OP_CARGO_NO_DEPLETE (0x003b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 499 #define OP_SET_SPECIAL_WARPOUT_NAME (0X003c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 500 #define OP_SHIP_VANISH (0X003d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 501 #define OP_SHIELDS_ON (0x003e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian 502 #define OP_SHIELDS_OFF (0x003f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian 503 504 #define OP_CHANGE_AI_LEVEL (0x0040 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian 505 #define OP_END_MISSION (0x0041 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian. replaces end-mission-delay, which did nothing 506 #define OP_SET_SCANNED (0x0042 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 507 #define OP_SET_UNSCANNED (0x0043 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 508 #define OP_SHIP_STEALTHY (0x0044 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 509 #define OP_SHIP_UNSTEALTHY (0x0045 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 510 #define OP_SET_CARGO (0x0046 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 511 #define OP_CHANGE_AI_CLASS (0x0047 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 512 #define OP_FRIENDLY_STEALTH_INVISIBLE (0x0048 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 513 #define OP_FRIENDLY_STEALTH_VISIBLE (0x0049 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 514 #define OP_DAMAGED_ESCORT_LIST (0x004a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak 515 #define OP_DAMAGED_ESCORT_LIST_ALL (0x004b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 516 #define OP_SHIP_VAPORIZE (0x004c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 517 #define OP_SHIP_NO_VAPORIZE (0x004d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 518 #define OP_COLLIDE_INVISIBLE (0x004e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 519 #define OP_DONT_COLLIDE_INVISIBLE (0x004f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 520 521 #define OP_PRIMITIVE_SENSORS_SET_RANGE (0x0050 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 522 #define OP_CHANGE_SHIP_CLASS (0x0051 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 523 #define OP_SCRIPT_EVAL (0x0052 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 524 #define OP_SET_SUPPORT_SHIP (0x0053 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 525 #define OP_DEACTIVATE_GLOW_POINTS (0x0054 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 526 #define OP_ACTIVATE_GLOW_POINTS (0x0055 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 527 #define OP_DEACTIVATE_GLOW_MAPS (0x0056 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 528 #define OP_ACTIVATE_GLOW_MAPS (0x0057 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 529 #define OP_DEACTIVATE_GLOW_POINT_BANK (0x0058 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 530 #define OP_ACTIVATE_GLOW_POINT_BANK (0x0059 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau 531 #define OP_CHANGE_SOUNDTRACK (0x005a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 532 #define OP_TECH_ADD_INTEL (0x005b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 533 #define OP_TECH_RESET_TO_DEFAULT (0x005c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 534 #define OP_EXPLOSION_EFFECT (0x005d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 535 #define OP_WARP_EFFECT (0x005e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 536 #define OP_SET_OBJECT_FACING (0x005f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 537 538 #define OP_SET_OBJECT_FACING_OBJECT (0x0060 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 539 #define OP_SET_OBJECT_POSITION (0x0061 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 540 #define OP_PLAY_SOUND_FROM_TABLE (0x0062 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 541 #define OP_PLAY_SOUND_FROM_FILE (0x0063 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 542 #define OP_CLOSE_SOUND_FROM_FILE (0x0064 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 543 #define OP_HUD_DISABLE (0x0065 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 544 #define OP_KAMIKAZE (0x0066 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian 545 #define OP_MISSION_SET_SUBSPACE (0x0067 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 546 #define OP_TURRET_TAGGED_SPECIFIC (0x0068 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak 547 #define OP_TURRET_TAGGED_CLEAR_SPECIFIC (0x0069 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak 548 #define OP_LOCK_ROTATING_SUBSYSTEM (0x006a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 549 #define OP_FREE_ROTATING_SUBSYSTEM (0x006b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 550 #define OP_REVERSE_ROTATING_SUBSYSTEM (0x006c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 551 #define OP_ROTATING_SUBSYS_SET_TURN_TIME (0x006d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 552 #define OP_PLAYER_USE_AI (0x006e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 553 #define OP_PLAYER_NOT_USE_AI (0x006f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 554 555 #define OP_HUD_DISABLE_EXCEPT_MESSAGES (0x0070 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 556 #define OP_FORCE_JUMP (0x0071 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 557 #define OP_HUD_SET_TEXT (0x0072 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 558 #define OP_HUD_SET_TEXT_NUM (0x0073 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 559 #define OP_HUD_SET_COORDS (0x0074 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 560 #define OP_HUD_SET_FRAME (0x0075 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 561 #define OP_HUD_SET_COLOR (0x0076 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 562 #define OP_HUD_SET_MAX_TARGETING_RANGE (0x0077 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 563 #define OP_SHIP_TAG (0x0078 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 564 #define OP_SHIP_UNTAG (0x0079 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 565 #define OP_SHIP_CHANGE_ALT_NAME (0x007a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 566 #define OP_SCRAMBLE_MESSAGES (0x007b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // phreak 567 #define OP_UNSCRAMBLE_MESSAGES (0x007c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // phreak 568 #define OP_CUTSCENES_SET_CUTSCENE_BARS (0x007d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 569 #define OP_CUTSCENES_UNSET_CUTSCENE_BARS (0x007e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 570 #define OP_CUTSCENES_FADE_IN (0x007f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 571 572 #define OP_CUTSCENES_FADE_OUT (0x0080 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 573 #define OP_CUTSCENES_SET_CAMERA_POSITION (0x0081 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 574 #define OP_CUTSCENES_SET_CAMERA_FACING (0x0082 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 575 #define OP_CUTSCENES_SET_CAMERA_FACING_OBJECT (0x0083 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 576 #define OP_CUTSCENES_SET_CAMERA_ROTATION (0x0084 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 577 #define OP_CUTSCENES_SET_FOV (0x0085 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 578 #define OP_CUTSCENES_RESET_FOV (0x0086 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 579 #define OP_CUTSCENES_RESET_CAMERA (0x0087 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 580 #define OP_CUTSCENES_SHOW_SUBTITLE (0x0088 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC / deprecated 581 #define OP_CUTSCENES_SET_TIME_COMPRESSION (0x0089 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 582 #define OP_CUTSCENES_RESET_TIME_COMPRESSION (0x008a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 583 #define OP_CUTSCENES_FORCE_PERSPECTIVE (0x008b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 584 #define OP_JUMP_NODE_SET_JUMPNODE_NAME (0x008c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // CommanderDJ 585 #define OP_JUMP_NODE_SET_JUMPNODE_COLOR (0x008d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 586 #define OP_JUMP_NODE_SET_JUMPNODE_MODEL (0x008e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 587 #define OP_JUMP_NODE_SHOW_JUMPNODE (0x008f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 588 589 #define OP_JUMP_NODE_HIDE_JUMPNODE (0x0090 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 590 #define OP_SHIP_GUARDIAN_THRESHOLD (0x0091 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 591 #define OP_SHIP_SUBSYS_GUARDIAN_THRESHOLD (0x0092 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 592 #define OP_SET_SKYBOX_MODEL (0x0093 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // taylor 593 #define OP_SHIP_CREATE (0X0094 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 594 #define OP_WEAPON_CREATE (0x0095 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 595 #define OP_SET_OBJECT_SPEED_X (0X0096 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Deprecated by wookieejedi 596 #define OP_SET_OBJECT_SPEED_Y (0X0097 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Deprecated by wookieejedi 597 #define OP_SET_OBJECT_SPEED_Z (0X0098 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Deprecated by wookieejedi 598 #define OP_MISSION_SET_NEBULA (0x0099 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 599 #define OP_ADD_BACKGROUND_BITMAP (0x009a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 600 #define OP_REMOVE_BACKGROUND_BITMAP (0x009b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 601 #define OP_ADD_SUN_BITMAP (0x009c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 602 #define OP_REMOVE_SUN_BITMAP (0x009d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 603 #define OP_NEBULA_CHANGE_STORM (0x009e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 604 #define OP_NEBULA_TOGGLE_POOF (0x009f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 605 606 #define OP_TURRET_CHANGE_WEAPON (0x00a0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 607 #define OP_TURRET_SET_TARGET_ORDER (0x00a1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 608 #define OP_SHIP_TURRET_TARGET_ORDER (0x00a2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 609 #define OP_SET_PRIMARY_AMMO (0x00a3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 610 #define OP_SET_SECONDARY_AMMO (0x00a4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 611 #define OP_SHIP_BOMB_TARGETABLE (0x00a5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 612 #define OP_SHIP_BOMB_UNTARGETABLE (0x00a6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC 613 #define OP_SHIP_SUBSYS_TARGETABLE (0x00a7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 614 #define OP_SHIP_SUBSYS_UNTARGETABLE (0x00a8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 615 #define OP_SET_DEATH_MESSAGE (0x00a9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 616 #define OP_SET_PRIMARY_WEAPON (0x00aa | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 617 #define OP_SET_SECONDARY_WEAPON (0x00ab | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 618 #define OP_DISABLE_BUILTIN_MESSAGES (0x00ac | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 619 #define OP_ENABLE_BUILTIN_MESSAGES (0x00ad | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 620 #define OP_LOCK_PRIMARY_WEAPON (0x00ae | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 621 #define OP_UNLOCK_PRIMARY_WEAPON (0x00af | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 622 623 #define OP_LOCK_SECONDARY_WEAPON (0x00b0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 624 #define OP_UNLOCK_SECONDARY_WEAPON (0x00b1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 625 #define OP_SET_CAMERA_SHUDDER (0x00b2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 626 #define OP_ALLOW_TREASON (0x00b3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 627 #define OP_SHIP_COPY_DAMAGE (0x00b4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 628 #define OP_CHANGE_SUBSYSTEM_NAME (0x00b5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 629 #define OP_SET_PERSONA (0x00b6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 630 #define OP_CHANGE_PLAYER_SCORE (0x00b7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 631 #define OP_CHANGE_TEAM_SCORE (0x00b8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 632 #define OP_CUTSCENES_SET_CAMERA_FOV (0x00b9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 633 #define OP_CUTSCENES_SET_CAMERA (0x00ba | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 634 #define OP_CUTSCENES_SET_CAMERA_HOST (0x00bb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 635 #define OP_CUTSCENES_SET_CAMERA_TARGET (0x00bc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC 636 #define OP_LOCK_AFTERBURNER (0x00bd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // KeldorKatarn 637 #define OP_UNLOCK_AFTERBURNER (0x00be | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // KeldorKatarn 638 #define OP_SHIP_CHANGE_CALLSIGN (0x00bf | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 639 640 #define OP_SET_RESPAWNS (0x00c0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 641 #define OP_SET_AFTERBURNER_ENERGY (0x00c1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 642 #define OP_SET_WEAPON_ENERGY (0x00c2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 643 #define OP_SET_SHIELD_ENERGY (0x00c3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 644 #define OP_SET_AMBIENT_LIGHT (0x00c4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma 645 #define OP_CHANGE_IFF_COLOR (0x00c5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 646 #define OP_TURRET_SUBSYS_TARGET_DISABLE (0x00c6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 647 #define OP_TURRET_SUBSYS_TARGET_ENABLE (0x00c7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 648 #define OP_CLEAR_WEAPONS (0x00c8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 649 #define OP_SHIP_MANEUVER (0x00c9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 650 #define OP_SHIP_ROT_MANEUVER (0x00ca | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 651 #define OP_SHIP_LAT_MANEUVER (0x00cb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer 652 #define OP_GET_VARIABLE_BY_INDEX (0x00cc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 653 #define OP_SET_VARIABLE_BY_INDEX (0x00cd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 654 #define OP_SET_POST_EFFECT (0x00ce | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Hery 655 #define OP_TURRET_SET_OPTIMUM_RANGE (0x00cf | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 656 657 #define OP_TURRET_SET_DIRECTION_PREFERENCE (0x00d0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 658 #define OP_TURRET_SET_TARGET_PRIORITIES (0x00d1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 659 #define OP_SET_ARMOR_TYPE (0x00d2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 660 #define OP_CUTSCENES_SHOW_SUBTITLE_TEXT (0x00d3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 661 #define OP_CUTSCENES_SHOW_SUBTITLE_IMAGE (0x00d4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 662 #define OP_HUD_DISPLAY_GAUGE (0x00d5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) 663 #define OP_SET_SOUND_ENVIRONMENT (0x00d6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor 664 #define OP_UPDATE_SOUND_ENVIRONMENT (0x00d7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor 665 #define OP_SET_EXPLOSION_OPTION (0x00d8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 666 #define OP_ADJUST_AUDIO_VOLUME (0x00d9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 667 #define OP_FORCE_GLIDE (0x00da | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 668 #define OP_TURRET_SET_RATE_OF_FIRE (0x00db | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 669 #define OP_HUD_SET_MESSAGE (0x00dc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 670 #define OP_SHIP_SUBSYS_NO_REPLACE (0x00dd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 671 #define OP_SET_IMMOBILE (0x00de | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 672 #define OP_SET_MOBILE (0x00df | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 673 674 #define OP_SHIP_SUBSYS_NO_LIVE_DEBRIS (0x00e0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 675 #define OP_SHIP_SUBSYS_VANISHED (0x00e1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 676 #define OP_SHIP_SUBSYS_IGNORE_IF_DEAD (0x00e2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 677 #define OP_HUD_SET_DIRECTIVE (0x00e3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 678 #define OP_HUD_GAUGE_SET_ACTIVE (0x00e4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated 679 #define OP_HUD_ACTIVATE_GAUGE_TYPE (0x00e5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated 680 #define OP_SET_OBJECT_ORIENTATION (0x00e6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 681 #define OP_STRING_CONCATENATE (0x00e7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 682 #define OP_INT_TO_STRING (0x00e8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 683 #define OP_WEAPON_SET_DAMAGE_TYPE (0x00e9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 684 #define OP_SHIP_SET_DAMAGE_TYPE (0x00ea | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 685 #define OP_SHIP_SHOCKWAVE_SET_DAMAGE_TYPE (0x00eb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 686 #define OP_FIELD_SET_DAMAGE_TYPE (0x00ec | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR 687 #define OP_TURRET_PROTECT_SHIP (0x00ed | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 688 #define OP_TURRET_UNPROTECT_SHIP (0x00ee | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000 689 #define OP_DISABLE_ETS (0x00ef | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 690 691 #define OP_ENABLE_ETS (0x00f0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E 692 #define OP_NAV_ADD_WAYPOINT (0x00f1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 693 #define OP_NAV_ADD_SHIP (0x00f2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 694 #define OP_NAV_DEL (0x00f3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 695 #define OP_NAV_HIDE (0x00f4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 696 #define OP_NAV_RESTRICT (0x00f5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 697 #define OP_NAV_UNHIDE (0x00f6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 698 #define OP_NAV_UNRESTRICT (0x00f7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 699 #define OP_NAV_SET_VISITED (0x00f8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 700 #define OP_NAV_SET_CARRY (0x00f9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 701 #define OP_NAV_UNSET_CARRY (0x00fa | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 702 #define OP_NAV_UNSET_VISITED (0x00fb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 703 #define OP_NAV_SET_NEEDSLINK (0x00fc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 704 #define OP_NAV_UNSET_NEEDSLINK (0x00fd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 705 #define OP_NAV_USECINEMATICS (0x00fe | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 706 #define OP_NAV_USEAP (0x00ff | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan 707 708 // 0x00ff is the last remaining sexp in the CHANGE category! Future change sexps should go under CHANGE2 709 710 #define OP_STRING_GET_SUBSTRING (0x0000 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 711 #define OP_STRING_SET_SUBSTRING (0x0001 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 712 #define OP_SET_NUM_COUNTERMEASURES (0x0002 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 713 #define OP_ADD_TO_COLGROUP (0x0003 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 714 #define OP_REMOVE_FROM_COLGROUP (0x0004 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 715 #define OP_GET_COLGROUP_ID (0x0005 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 716 #define OP_SHIP_EFFECT (0x0006 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Valathil 717 #define OP_CLEAR_SUBTITLES (0x0007 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 718 #define OP_BEAM_FIRE_COORDS (0x0008 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 719 #define OP_SET_DOCKED (0x0009 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Sushi 720 #define OP_SET_THRUSTERS (0x000a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 721 #define OP_TRIGGER_SUBMODEL_ANIMATION (0x000b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 722 #define OP_HUD_CLEAR_MESSAGES (0x000c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Swifty 723 #define OP_SET_PLAYER_ORDERS (0x000d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 724 #define OP_SUPERNOVA_STOP (0x000e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) //CommanderDJ 725 #define OP_SET_PLAYER_THROTTLE_SPEED (0x000f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) //CommanderDJ 726 727 #define OP_SET_DEBRIEFING_TOGGLED (0x0010 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 728 #define OP_SET_SUBSPACE_DRIVE (0x0011 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 729 #define OP_SET_ARRIVAL_INFO (0x0012 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 730 #define OP_SET_DEPARTURE_INFO (0x0013 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 731 #define OP_SET_SKYBOX_ORIENT (0x0014 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 732 #define OP_DESTROY_INSTANTLY (0x0015 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Admiral MS 733 #define OP_DESTROY_SUBSYS_INSTANTLY (0x0016 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Admiral MS 734 #define OP_DEBUG (0x0017 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 735 #define OP_SET_MISSION_MOOD (0x0018 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 736 #define OP_NAV_SELECT (0x0019 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024 737 #define OP_NAV_UNSELECT (0x001a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024 738 #define OP_ALTER_SHIP_FLAG (0x001b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 739 #define OP_CHANGE_TEAM_COLOR (0x001c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 740 #define OP_NEBULA_CHANGE_PATTERN (0x001d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Axem 741 #define OP_PLAYER_IS_CHEATING_BASTARD (0x001e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 742 #define OP_TECH_ADD_INTEL_XSTR (0x001f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 743 744 #define OP_COPY_VARIABLE_FROM_INDEX (0x0020 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 745 #define OP_COPY_VARIABLE_BETWEEN_INDEXES (0x0021 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 746 #define OP_GET_ETS_VALUE (0x0022 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan 747 #define OP_SET_ETS_VALUES (0x0023 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan 748 #define OP_CALL_SSM_STRIKE (0x0024 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // X3N0-Life-Form 749 #define OP_SET_MOTION_DEBRIS (0x0025 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 750 #define OP_HUD_SET_CUSTOM_GAUGE_ACTIVE (0x0026 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem 751 #define OP_HUD_SET_BUILTIN_GAUGE_ACTIVE (0x0027 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem 752 #define OP_SCRIPT_EVAL_MULTI (0x0028 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma 753 #define OP_PAUSE_SOUND_FROM_FILE (0x0029 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 754 #define OP_SCRIPT_EVAL_BLOCK (0x002a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan 755 #define OP_BEAM_FLOATING_FIRE (0x002b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // MageKing17 756 #define OP_TURRET_SET_PRIMARY_AMMO (0x002c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo changes 757 #define OP_TURRET_SET_SECONDARY_AMMO (0x002d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo changes 758 #define OP_JETTISON_CARGO_NEW (0x002e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 759 #define OP_STRING_CONCATENATE_BLOCK (0x002f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 760 761 #define OP_MODIFY_VARIABLE_XSTR (0X0030 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // m!m 762 #define OP_RESET_POST_EFFECTS (0x0031 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 763 #define OP_ADD_REMOVE_HOTKEY (0x0032 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // wookieejedi 764 #define OP_TECH_REMOVE_INTEL_XSTR (0x0033 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // wookieejedi 765 #define OP_TECH_REMOVE_INTEL (0x0034 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // wookieejedi 766 #define OP_CHANGE_BACKGROUND (0x0035 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 767 #define OP_CLEAR_DEBRIS (0x0036 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 768 #define OP_SET_DEBRIEFING_PERSONA (0x0037 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 769 #define OP_ADD_TO_COLGROUP2 (0x0038 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 770 #define OP_REMOVE_FROM_COLGROUP2 (0x0039 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 771 #define OP_GET_POWER_OUTPUT (0x003a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E 772 #define OP_TURRET_SET_FORCED_TARGET (0x003b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Asteroth 773 #define OP_TURRET_SET_FORCED_SUBSYS_TARGET (0x003c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Asteroth 774 #define OP_TURRET_CLEAR_FORCED_TARGET (0x003d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Asteroth 775 #define OP_SEND_MESSAGE_CHAIN (0x003e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000 776 #define OP_TURRET_SET_INACCURACY (0x003f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Asteroth 777 778 #define OP_REPLACE_TEXTURE (0x0040 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Lafiel 779 #define OP_NEBULA_CHANGE_FOG_COLOR (0x0041 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Asteroth 780 781 // defined for AI goals 782 #define OP_AI_CHASE (0x0000 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 783 #define OP_AI_DOCK (0x0001 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 784 #define OP_AI_UNDOCK (0x0002 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 785 #define OP_AI_WARP_OUT (0x0003 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 786 #define OP_AI_WAYPOINTS (0x0004 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 787 #define OP_AI_WAYPOINTS_ONCE (0x0005 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 788 #define OP_AI_DESTROY_SUBSYS (0x0006 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 789 #define OP_AI_DISABLE_SHIP (0x0007 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 790 #define OP_AI_DISARM_SHIP (0x0008 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 791 #define OP_AI_GUARD (0x0009 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 792 #define OP_AI_CHASE_ANY (0x000a | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 793 #define OP_AI_EVADE_SHIP (0x000b | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 794 #define OP_AI_STAY_NEAR_SHIP (0x000c | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 795 #define OP_AI_KEEP_SAFE_DISTANCE (0x000d | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 796 #define OP_AI_IGNORE (0x000e | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 797 #define OP_AI_STAY_STILL (0x000f | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 798 #define OP_AI_PLAY_DEAD (0x0010 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) 799 #define OP_AI_IGNORE_NEW (0x0011 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // Goober5000 800 #define OP_AI_FORM_ON_WING (0x0012 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // The E 801 #define OP_AI_CHASE_SHIP_CLASS (0x0013 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // Goober5000 802 #define OP_AI_PLAY_DEAD_PERSISTENT (0x0014 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // Goober5000 803 804 #define OP_GOALS_ID (0x0000 | OP_CATEGORY_UNLISTED) 805 #define OP_NEXT_MISSION (0x0001 | OP_CATEGORY_UNLISTED) // used in campaign files for branching 806 #define OP_IS_DESTROYED (0x0002 | OP_CATEGORY_UNLISTED) 807 #define OP_IS_SUBSYSTEM_DESTROYED (0x0003 | OP_CATEGORY_UNLISTED) 808 #define OP_IS_DISABLED (0x0004 | OP_CATEGORY_UNLISTED) 809 #define OP_IS_DISARMED (0x0005 | OP_CATEGORY_UNLISTED) 810 #define OP_HAS_DOCKED (0x0006 | OP_CATEGORY_UNLISTED) 811 #define OP_HAS_UNDOCKED (0x0007 | OP_CATEGORY_UNLISTED) 812 #define OP_HAS_ARRIVED (0x0008 | OP_CATEGORY_UNLISTED) 813 #define OP_HAS_DEPARTED (0x0009 | OP_CATEGORY_UNLISTED) 814 #define OP_WAYPOINTS_DONE (0x000a | OP_CATEGORY_UNLISTED) 815 #define OP_ADD_SHIP_GOAL (0x000b | OP_CATEGORY_UNLISTED) 816 #define OP_CLEAR_SHIP_GOALS (0x000c | OP_CATEGORY_UNLISTED) 817 #define OP_ADD_WING_GOAL (0x000d | OP_CATEGORY_UNLISTED) 818 #define OP_CLEAR_WING_GOALS (0x000e | OP_CATEGORY_UNLISTED) 819 #define OP_AI_CHASE_WING (0x000f | OP_CATEGORY_UNLISTED) 820 #define OP_AI_GUARD_WING (0x0010 | OP_CATEGORY_UNLISTED) 821 #define OP_EVENT_TRUE (0x0011 | OP_CATEGORY_UNLISTED) 822 #define OP_EVENT_FALSE (0x0012 | OP_CATEGORY_UNLISTED) 823 #define OP_PREVIOUS_GOAL_INCOMPLETE (0x0013 | OP_CATEGORY_UNLISTED) 824 #define OP_PREVIOUS_EVENT_INCOMPLETE (0x0014 | OP_CATEGORY_UNLISTED) 825 #define OP_AI_WARP (0x0015 | OP_CATEGORY_UNLISTED) 826 #define OP_IS_CARGO_KNOWN (0x0016 | OP_CATEGORY_UNLISTED) 827 #define OP_COND (0x0017 | OP_CATEGORY_UNLISTED) 828 #define OP_END_OF_CAMPAIGN (0x0018 | OP_CATEGORY_UNLISTED) 829 830 // training sexps 831 #define OP_KEY_PRESSED (0x0000 | OP_CATEGORY_TRAINING) 832 #define OP_KEY_RESET (0x0001 | OP_CATEGORY_TRAINING) 833 #define OP_TARGETED (0x0002 | OP_CATEGORY_TRAINING) 834 #define OP_SPEED (0x0003 | OP_CATEGORY_TRAINING) 835 #define OP_FACING (0x0004 | OP_CATEGORY_TRAINING) 836 #define OP_ORDER (0x0005 | OP_CATEGORY_TRAINING) 837 #define OP_WAYPOINT_MISSED (0x0006 | OP_CATEGORY_TRAINING) 838 #define OP_PATH_FLOWN (0x0007 | OP_CATEGORY_TRAINING) 839 #define OP_WAYPOINT_TWICE (0x0008 | OP_CATEGORY_TRAINING) 840 #define OP_TRAINING_MSG (0x0009 | OP_CATEGORY_TRAINING) 841 #define OP_FLASH_HUD_GAUGE (0x000a | OP_CATEGORY_TRAINING) 842 #define OP_SPECIAL_CHECK (0x000b | OP_CATEGORY_TRAINING) 843 #define OP_SECONDARIES_DEPLETED (0x000c | OP_CATEGORY_TRAINING) 844 #define OP_FACING2 (0x000d | OP_CATEGORY_TRAINING) 845 #define OP_PRIMARIES_DEPLETED (0x000e | OP_CATEGORY_TRAINING) // Goober5000 846 #define OP_MISSILE_LOCKED (0x000f | OP_CATEGORY_TRAINING) // Sesquipedalian 847 #define OP_SET_TRAINING_CONTEXT_FLY_PATH (0x0010 | OP_CATEGORY_TRAINING) 848 #define OP_SET_TRAINING_CONTEXT_SPEED (0x0011 | OP_CATEGORY_TRAINING) 849 #define OP_KEY_RESET_MULTIPLE (0x0012 | OP_CATEGORY_TRAINING) // Goober5000 850 #define OP_RESET_ORDERS (0x0013 | OP_CATEGORY_TRAINING) // Karajorma 851 #define OP_QUERY_ORDERS (0x0014 | OP_CATEGORY_TRAINING) // Karajorma 852 #define OP_NODE_TARGETED (0x0015 | OP_CATEGORY_TRAINING) // FUBAR 853 #define OP_IGNORE_KEY (0x0016 | OP_CATEGORY_TRAINING) // Karajorma 854 855 // defines for string constants 856 #define SEXP_HULL_STRING "Hull" 857 #define SEXP_SIM_HULL_STRING "Simulated Hull" 858 #define SEXP_SHIELD_STRING "Shields" 859 #define SEXP_ALL_ENGINES_STRING "<all engines>" 860 #define SEXP_ALL_TURRETS_STRING "<all turrets>" 861 #define SEXP_ARGUMENT_STRING "<argument>" 862 #define SEXP_NONE_STRING "<none>" 863 #define SEXP_ANY_STRING "<any string>" 864 #define SEXP_ALL_BANKS_STRING "<all weapon banks>" 865 866 // macros for accessing sexpression atoms 867 /** 868 * @brief Returns the first element of a SEXP list 869 * 870 * The name CAR originates from the original LISP language where it was a function which retrieved the first element of 871 * a list. 872 * 873 * @see https://en.wikipedia.org/wiki/CAR_and_CDR 874 */ 875 #define CAR(n) ((n < 0) ? -1 : Sexp_nodes[n].first) 876 /** 877 * @brief Returns the rest of a SEXP list. The rest is everything starting from the second element. 878 * 879 * The name CDR originates from the original LISP language where it was a function which retrieved the "rest" of a list. 880 * 881 * @see https://en.wikipedia.org/wiki/CAR_and_CDR 882 */ 883 #define CDR(n) ((n < 0) ? -1 : Sexp_nodes[n].rest) 884 #define CADR(n) CAR(CDR(n)) 885 // #define CTEXT(n) (Sexp_nodes[n].text) 886 const char *CTEXT(int n); 887 888 // added by Goober5000 889 #define CDDR(n) CDR(CDR(n)) 890 #define CDDDR(n) CDR(CDDR(n)) 891 #define CDDDDR(n) CDR(CDDDR(n)) 892 #define CDDDDDR(n) CDR(CDDDDR(n)) 893 #define CADDR(n) CAR(CDDR(n)) 894 #define CADDDR(n) CAR(CDDDR(n)) 895 #define CADDDDR(n) CAR(CDDDDR(n)) 896 #define CADDDDDR(n) CAR(CDDDDDR(n)) 897 898 #define REF_TYPE_SHIP 1 899 #define REF_TYPE_WING 2 900 #define REF_TYPE_PLAYER 3 901 #define REF_TYPE_WAYPOINT 4 902 #define REF_TYPE_PATH 5 // waypoint path 903 904 #define SRC_SHIP_ARRIVAL 0x10000 905 #define SRC_SHIP_DEPARTURE 0x20000 906 #define SRC_WING_ARRIVAL 0x30000 907 #define SRC_WING_DEPARTURE 0x40000 908 #define SRC_EVENT 0x50000 909 #define SRC_MISSION_GOAL 0x60000 910 #define SRC_SHIP_ORDER 0x70000 911 #define SRC_WING_ORDER 0x80000 912 #define SRC_DEBRIEFING 0x90000 913 #define SRC_BRIEFING 0xa0000 914 #define SRC_UNKNOWN 0xffff0000 915 #define SRC_MASK 0xffff0000 916 #define SRC_DATA_MASK 0xffff 917 918 #define SEXP_MODE_GENERAL 0 919 #define SEXP_MODE_CAMPAIGN 1 920 921 // defines for type field of sexp nodes. The actual type of the node will be stored in the lower 922 // two bytes of the field. The upper two bytes will be used for flags (bleah...) 923 // Be sure not to conflict with type field of sexp_variable 924 #define SEXP_NOT_USED 0 925 #define SEXP_LIST 1 926 #define SEXP_ATOM 2 927 928 // flags for sexpressions -- masked onto the end of the type field 929 #define SEXP_FLAG_PERSISTENT (1<<31) // should this sexp node be persistant across missions 930 #define SEXP_FLAG_VARIABLE (1<<30) 931 932 // sexp variable definitions 933 #define SEXP_VARIABLE_CHAR ('@') 934 // defines for type field of sexp_variable. Be sure not to conflict with type field of sexp_node 935 #define SEXP_VARIABLE_NUMBER (1<<4) // (0x0010) 936 #define SEXP_VARIABLE_STRING (1<<5) // (0x0020) 937 #define SEXP_VARIABLE_UNKNOWN (1<<6) // (0x0040) 938 #define SEXP_VARIABLE_NOT_USED (1<<7) // (0x0080) 939 940 #define SEXP_VARIABLE_BLOCK (1<<0) // (0x0001) 941 /* 942 #define SEXP_VARIABLE_BLOCK_EXP (1<<1) // (0x0002) 943 #define SEXP_VARIABLE_BLOCK_HIT (1<<2) // (0x0004) 944 */ 945 #define SEXP_VARIABLE_SAVE_ON_MISSION_CLOSE (1<<3) // (0x0008) 946 947 // Goober5000 - hopefully this should work and not conflict with anything 948 #define SEXP_VARIABLE_SAVE_ON_MISSION_PROGRESS (1<<29) // (0x0100) 949 //Karajorma 950 #define SEXP_VARIABLE_NETWORK (1<<28) 951 #define SEXP_VARIABLE_SAVE_TO_PLAYER_FILE (1<<27) 952 953 #define SEXP_VARIABLE_IS_PERSISTENT (SEXP_VARIABLE_SAVE_ON_MISSION_PROGRESS|SEXP_VARIABLE_SAVE_ON_MISSION_CLOSE) 954 955 #define BLOCK_EXP_SIZE 6 956 #define INNER_RAD 0 957 #define OUTER_RAD 1 958 #define DAMAGE 2 959 #define BLAST 3 960 #define PROPAGATE 4 961 #define SHOCK_SPEED 5 962 963 #define BLOCK_HIT_SIZE 2 964 #define SHIELD_STRENGTH 0 965 #define HULL_STRENGTH 1 966 967 968 #define SEXP_VARIABLE_SET (0x0100) 969 #define SEXP_VARIABLE_MODIFIED (0x0200) 970 971 #define SEXP_TYPE_MASK(t) (t & 0x00ff) 972 #define SEXP_NODE_TYPE(n) (Sexp_nodes[n].type & 0x00ff) 973 974 // defines for subtypes of atoms 975 #define SEXP_ATOM_LIST 0 976 #define SEXP_ATOM_OPERATOR 1 977 #define SEXP_ATOM_NUMBER 2 978 #define SEXP_ATOM_STRING 3 979 #define SEXP_ATOM_CONTAINER 4 980 981 // defines to short circuit evaluation when possible. Also used when goals can't 982 // be satisfied yet because ship (or wing) hasn't been created yet. 983 984 #define SEXP_TRUE 1 985 #define SEXP_FALSE 0 986 987 // Goober5000: changed these to unlikely values, because now we have sexps using negative numbers 988 #define SEXP_KNOWN_FALSE (INT_MIN+10) 989 #define SEXP_KNOWN_TRUE (INT_MIN+11) 990 #define SEXP_UNKNOWN (INT_MIN+12) 991 #define SEXP_NAN (INT_MIN+13) // not a number -- used when ships/wing part of boolean and haven't arrived yet 992 #define SEXP_NAN_FOREVER (INT_MIN+14) // not a number and will never change -- used to falsify boolean sexpressions 993 #define SEXP_CANT_EVAL (INT_MIN+15) // can't evaluate yet for whatever reason (acts like false) 994 #define SEXP_NUM_EVAL (INT_MIN+16) // already completed an arithmetic operation and result is stored 995 // in case we want to test for any of the above 996 #define SEXP_UNLIKELY_RETURN_VALUE_BOUND (INT_MIN+17) 997 998 // defines for check_sexp_syntax 999 #define SEXP_CHECK_NONOP_ARGS -1 // non-operator has arguments 1000 #define SEXP_CHECK_OP_EXPECTED -2 // operator expected, but found data instead 1001 #define SEXP_CHECK_UNKNOWN_OP -3 // unrecognized operator 1002 #define SEXP_CHECK_TYPE_MISMATCH -4 // return type or data type mismatch 1003 #define SEXP_CHECK_BAD_ARG_COUNT -5 // argument count in incorrect 1004 #define SEXP_CHECK_UNKNOWN_TYPE -6 // unrecognized return type of data type 1005 1006 #define SEXP_CHECK_INVALID_NUM -101 // number is not valid 1007 #define SEXP_CHECK_INVALID_SHIP -102 // invalid ship name 1008 #define SEXP_CHECK_INVALID_WING -103 // invalid wing name 1009 #define SEXP_CHECK_INVALID_SUBSYS -104 // invalid subsystem 1010 #define SEXP_CHECK_INVALID_IFF -105 // invalid iff string 1011 #define SEXP_CHECK_INVALID_POINT -106 // invalid point 1012 #define SEXP_CHECK_NEGATIVE_NUM -107 // negative number wasn't allowed 1013 #define SEXP_CHECK_INVALID_SHIP_WING -108 // invalid ship/wing 1014 #define SEXP_CHECK_INVALID_SHIP_TYPE -109 // invalid ship type 1015 #define SEXP_CHECK_UNKNOWN_MESSAGE -110 // invalid message 1016 #define SEXP_CHECK_INVALID_PRIORITY -111 // invalid priority for a message 1017 #define SEXP_CHECK_INVALID_MISSION_NAME -112 // invalid mission name 1018 #define SEXP_CHECK_INVALID_GOAL_NAME -113 // invalid goal name 1019 #define SEXP_CHECK_INVALID_LEVEL -114 // mission level too high in campaign 1020 #define SEXP_CHECK_INVALID_MSG_SOURCE -115 // invalid 'who-from' for a message being sent 1021 #define SEXP_CHECK_INVALID_DOCKER_POINT -116 1022 #define SEXP_CHECK_INVALID_DOCKEE_POINT -117 1023 #define SEXP_CHECK_ORDER_NOT_ALLOWED -118 // ship goal (order) isn't allowed for given ship 1024 #define SEXP_CHECK_DOCKING_NOT_ALLOWED -119 1025 #define SEXP_CHECK_NUM_RANGE_INVALID -120 1026 #define SEXP_CHECK_INVALID_EVENT_NAME -121 1027 #define SEXP_CHECK_INVALID_SKILL_LEVEL -122 1028 #define SEXP_CHECK_INVALID_MEDAL_NAME -123 1029 #define SEXP_CHECK_INVALID_WEAPON_NAME -124 1030 #define SEXP_CHECK_INVALID_SHIP_CLASS_NAME -125 1031 #define SEXP_CHECK_INVALID_CUSTOM_HUD_GAUGE -126 1032 #define SEXP_CHECK_INVALID_JUMP_NODE -127 1033 #define SEXP_CHECK_INVALID_VARIABLE -128 1034 #define SEXP_CHECK_INVALID_AI_CLASS -129 1035 #define SEXP_CHECK_UNKNOWN_ERROR -130 1036 #define SEXP_CHECK_INVALID_SUPPORT_SHIP_CLASS -131 1037 #define SEXP_CHECK_INVALID_SHIP_WITH_BAY -132 1038 #define SEXP_CHECK_INVALID_ARRIVAL_LOCATION -133 1039 #define SEXP_CHECK_INVALID_DEPARTURE_LOCATION -134 1040 #define SEXP_CHECK_INVALID_ARRIVAL_ANCHOR_ALL -135 1041 #define SEXP_CHECK_INVALID_SOUNDTRACK_NAME -136 1042 #define SEXP_CHECK_INVALID_INTEL_NAME -137 1043 #define SEXP_CHECK_INVALID_SKYBOX_NAME -138 1044 #define SEXP_CHECK_INVALID_PERSONA_NAME -139 1045 #define SEXP_CHECK_INVALID_VARIABLE_TYPE -140 1046 #define SEXP_CHECK_INVALID_SUBSYS_TYPE -141 1047 #define SEXP_CHECK_INVALID_FONT -142 1048 #define SEXP_CHECK_INVALID_HUD_ELEMENT -143 1049 #define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT -144 1050 #define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT_OPTION -145 1051 #define SEXP_CHECK_INVALID_EXPLOSION_OPTION -146 1052 #define SEXP_CHECK_INVALID_SHIP_EFFECT -147 1053 #define SEXP_CHECK_INVALID_TURRET_TARGET_ORDER -148 1054 #define SEXP_CHECK_INVALID_ARMOR_TYPE -149 1055 #define SEXP_CHECK_INVALID_DAMAGE_TYPE -150 1056 #define SEXP_CHECK_INVALID_TARGET_PRIORITIES -151 1057 #define SEXP_CHECK_INVALID_AUDIO_VOLUME_OPTION -152 1058 #define SEXP_CHECK_INVALID_BUILTIN_HUD_GAUGE -153 1059 #define SEXP_CHECK_INVALID_ANIMATION_TYPE -154 1060 #define SEXP_CHECK_INVALID_MISSION_MOOD -155 1061 #define SEXP_CHECK_INVALID_SHIP_FLAG -156 1062 #define SEXP_CHECK_INVALID_TEAM_COLOR -157 1063 #define SEXP_CHECK_INVALID_SKYBOX_FLAG -158 1064 #define SEXP_CHECK_INVALID_GAME_SND -159 1065 #define SEXP_CHECK_INVALID_SSM_CLASS -160 1066 #define SEXP_CHECK_INVALID_FIREBALL -161 1067 #define SEXP_CHECK_INVALID_SPECIES -162 1068 1069 #define TRAINING_CONTEXT_SPEED (1<<0) 1070 #define TRAINING_CONTEXT_FLY_PATH (1<<1) 1071 1072 // numbers used in special_training_check() function 1073 #define SPECIAL_CHECK_TRAINING_FAILURE 2000 1074 1075 typedef struct sexp_ai_goal_link { 1076 int ai_goal; 1077 int op_code; 1078 } sexp_ai_goal_link; 1079 1080 #define SEXP_CONDITIONAL_OPERATOR (1<<0) 1081 #define SEXP_ARGUMENT_OPERATOR (1<<1) 1082 #define SEXP_ACTION_OPERATOR (1<<2) 1083 #define SEXP_ARITHMETIC_OPERATOR (1<<3) 1084 #define SEXP_BOOLEAN_OPERATOR (1<<4) 1085 #define SEXP_INTEGER_OPERATOR (1<<5) 1086 #define SEXP_GOAL_OPERATOR (1<<6) 1087 1088 #define SEXP_TRIGGER_OPERATOR ( SEXP_ARITHMETIC_OPERATOR | SEXP_BOOLEAN_OPERATOR | SEXP_INTEGER_OPERATOR ) 1089 1090 typedef struct sexp_oper { 1091 SCP_string text; 1092 int value; 1093 int min, max; 1094 int type; 1095 } sexp_oper; 1096 1097 // Goober5000 1098 struct sexp_cached_data 1099 { 1100 int sexp_node_data_type = OPF_NONE; // an OPF_ #define 1101 int numeric_literal = 0; // i.e. a number 1102 int ship_registry_index = -1; // because ship status is pretty common 1103 void *pointer = nullptr; // could be an IFF, a wing, a goal, or other unchanging reference 1104 1105 sexp_cached_data() = default; 1106 sexp_cached_datasexp_cached_data1107 sexp_cached_data(int _sexp_node_data_type) 1108 : sexp_node_data_type(_sexp_node_data_type) 1109 {} 1110 sexp_cached_datasexp_cached_data1111 sexp_cached_data(int _sexp_node_data_type, void *_pointer) 1112 : sexp_node_data_type(_sexp_node_data_type), pointer(_pointer) 1113 {} 1114 sexp_cached_datasexp_cached_data1115 sexp_cached_data(int _sexp_node_data_type, int _numeric_literal, int _ship_registry_index) 1116 : sexp_node_data_type(_sexp_node_data_type), numeric_literal(_numeric_literal), ship_registry_index(_ship_registry_index) 1117 {} 1118 }; 1119 1120 typedef struct sexp_node { 1121 char text[TOKEN_LENGTH]; 1122 int op_index; // the index in the Operators array for the operator at this node (or -1 if not an operator) 1123 int type; // atom, list, or not used 1124 int subtype; // type of atom or list? 1125 int first; // if first parameter is sexp, index into Sexp_nodes 1126 int rest; // index into Sexp_nodes of rest of parameters 1127 int value; // known to be true, known to be false, or not known 1128 int flags; // Goober5000 1129 1130 sexp_cached_data *cache; // Goober5000 1131 int cached_variable_index; // Goober5000 1132 } sexp_node; 1133 1134 // Goober5000 1135 #define SNF_ARGUMENT_VALID (1<<0) 1136 #define SNF_ARGUMENT_SELECT (1<<1) 1137 #define SNF_SPECIAL_ARG_IN_NODE (1<<2) 1138 #define SNF_SPECIAL_ARG_IN_TREE (1<<3) 1139 #define SNF_SPECIAL_ARG_NOT_IN_TREE (1<<4) 1140 #define SNF_CHECKED_ARG_FOR_VAR (1<<5) 1141 #define SNF_DEFAULT_VALUE SNF_ARGUMENT_VALID 1142 1143 typedef struct sexp_variable { 1144 int type; 1145 char text[TOKEN_LENGTH]; 1146 char variable_name[TOKEN_LENGTH]; 1147 } sexp_variable; 1148 1149 // next define used to eventually mark a directive as satisfied even though there may be more 1150 // waves for a wing. bascially a hack for the directives display. 1151 #define DIRECTIVE_WING_ZERO -999 1152 1153 // Goober5000 - it's dynamic now 1154 //extern sexp_node Sexp_nodes[MAX_SEXP_NODES]; 1155 1156 extern int Num_sexp_nodes; 1157 extern sexp_node *Sexp_nodes; 1158 1159 extern sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]; 1160 extern sexp_variable Block_variables[MAX_SEXP_VARIABLES]; 1161 1162 extern SCP_vector<sexp_oper> Operators; 1163 1164 extern int Locked_sexp_true, Locked_sexp_false; 1165 extern int Directive_count; 1166 extern int Sexp_useful_number; // a variable to pass useful info in from external modules 1167 extern int Training_context; 1168 extern int Training_context_speed_min; 1169 extern int Training_context_speed_max; 1170 extern int Training_context_speed_set; 1171 extern int Training_context_speed_timestamp; 1172 extern waypoint_list *Training_context_path; 1173 extern int Training_context_goal_waypoint; 1174 extern int Training_context_at_waypoint; 1175 extern float Training_context_distance; 1176 extern int Players_target; 1177 extern int Players_mlocked; 1178 extern ship_subsys *Players_targeted_subsys; 1179 extern int Players_target_timestamp; 1180 extern int Players_mlocked_timestamp; 1181 extern int Sexp_clipboard; // used by Fred 1182 1183 extern SCP_vector<int> Current_sexp_operator; 1184 1185 1186 // event log stuff 1187 extern SCP_vector<SCP_string> *Current_event_log_buffer; 1188 extern SCP_vector<SCP_string> *Current_event_log_variable_buffer; 1189 extern SCP_vector<SCP_string> *Current_event_log_argument_buffer; 1190 1191 extern void init_sexp(); 1192 extern void sexp_shutdown(); 1193 extern int alloc_sexp(const char *text, int type, int subtype, int first, int rest); 1194 extern int find_free_sexp(); 1195 extern int free_one_sexp(int num); 1196 extern int free_sexp(int num); 1197 extern int free_sexp2(int num); 1198 extern int dup_sexp_chain(int node); 1199 extern int cmp_sexp_chains(int node1, int node2); 1200 extern int find_sexp_list(int num); 1201 extern int find_parent_operator(int num); 1202 extern int is_sexp_top_level( int node ); 1203 1204 // Goober5000 - renamed these to be more clear, to prevent bugs :p 1205 extern int get_operator_index(const char *token); 1206 extern int get_operator_index(int node); 1207 extern int get_operator_const(const char *token); 1208 extern int get_operator_const(int node); 1209 1210 extern int check_sexp_syntax(int node, int return_type = OPR_BOOL, int recursive = 0, int *bad_node = 0 /*NULL*/, int mode = 0); 1211 extern int get_sexp_main(void); // Returns start node 1212 extern int run_sexp(const char* sexpression, bool run_eval_num = false, bool *is_nan_or_nan_forever = nullptr); // debug and lua sexps 1213 extern int stuff_sexp_variable_list(); 1214 extern int eval_sexp(int cur_node, int referenced_node = -1); 1215 extern int eval_num(int n, bool &is_nan, bool &is_nan_forever); 1216 extern bool is_sexp_true(int cur_node, int referenced_node = -1); 1217 extern int query_operator_return_type(int op); 1218 extern int query_operator_argument_type(int op, int argnum); 1219 extern void update_sexp_references(const char *old_name, const char *new_name); 1220 extern void update_sexp_references(const char *old_name, const char *new_name, int format); 1221 extern int query_referenced_in_sexp(int mode, const char *name, int *node); 1222 extern int build_sexp_string(SCP_string &accumulator, int cur_node, int level, int mode); 1223 extern int sexp_query_type_match(int opf, int opr); 1224 extern const char *sexp_error_message(int num); 1225 extern int count_free_sexp_nodes(); 1226 1227 struct ship_registry_entry; 1228 struct wing; 1229 1230 // Goober5000 - stuff with caching 1231 // (included in the header file because Lua uses the first three) 1232 extern const ship_registry_entry *eval_ship(int node); 1233 extern wing *eval_wing(int node); 1234 extern int sexp_get_variable_index(int node); 1235 extern int sexp_atoi(int node); 1236 extern bool sexp_can_construe_as_integer(int node); 1237 1238 // Goober5000 1239 void do_action_for_each_special_argument(int cur_node); 1240 bool special_argument_appears_in_sexp_tree(int node); 1241 bool special_argument_appears_in_sexp_list(int node); 1242 1243 // functions to change the attributes of an sexpression tree to persistent or not persistent 1244 extern void sexp_unmark_persistent( int n ); 1245 extern void sexp_mark_persistent( int n ); 1246 extern int verify_sexp_tree(int node); 1247 extern int query_sexp_ai_goal_valid(int sexp_ai_goal, int ship); 1248 int query_node_in_sexp(int node, int sexp); 1249 void flush_sexp_tree(int node); 1250 1251 // sexp_variable 1252 void sexp_modify_variable(const char *text, int index, bool sexp_callback = true); 1253 int get_index_sexp_variable_name(const char *text); 1254 int get_index_sexp_variable_name(SCP_string &text); // Goober5000 1255 int get_index_sexp_variable_name_special(const char *text); // Goober5000 1256 int get_index_sexp_variable_name_special(SCP_string &text, size_t startpos); // Goober5000 1257 bool sexp_replace_variable_names_with_values(char *text, int max_len); // Goober5000 1258 bool sexp_replace_variable_names_with_values(SCP_string &text); // Goober5000 1259 int get_nth_variable_index(int nth, int variable_type); // Karajorma 1260 int sexp_variable_count(); 1261 int sexp_campaign_file_variable_count(); // Goober5000 1262 int sexp_variable_typed_count(int sexp_variables_index, int variable_type); // Karajorma 1263 void sexp_variable_delete(int index); 1264 void sexp_variable_sort(); 1265 void sexp_fred_modify_variable(const char *text, const char *var_name, int index, int type); 1266 int sexp_add_variable(const char *text, const char *var_name, int type, int index=-1); 1267 bool generate_special_explosion_block_variables(); 1268 int num_block_variables(); 1269 bool has_special_explosion_block_index(ship *shipp, int *index); 1270 1271 // Karajorma 1272 void set_primary_ammo (int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1); 1273 void set_secondary_ammo (int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1); 1274 1275 // DahBlount - Similar to Karajorma's functions, but for turrets 1276 void set_turret_primary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo); 1277 void set_turret_secondary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo); 1278 1279 extern int get_category(int sexp_id); 1280 extern int category_of_subcategory(int subcategory_id); 1281 extern int get_subcategory(int sexp_id); 1282 1283 // Goober5000 1284 extern void sexp_music_close(); 1285 1286 // Goober5000 1287 extern int Knossos_warp_ani_used; 1288 1289 //WMC - moved here from FRED 1290 typedef struct sexp_help_struct { 1291 int id; 1292 SCP_string help; 1293 } sexp_help_struct; 1294 1295 extern SCP_vector<sexp_help_struct> Sexp_help; 1296 1297 typedef struct op_menu_struct { 1298 SCP_string name; 1299 int id; 1300 } op_menu_struct; 1301 1302 extern SCP_vector<op_menu_struct> op_menu; 1303 extern SCP_vector<op_menu_struct> op_submenu; 1304 1305 //WMC 1306 //Outputs sexp.html file 1307 bool output_sexps(const char *filepath); 1308 1309 void multi_sexp_eval(); 1310 1311 // Goober5000/Taylor 1312 extern int Num_sound_environment_options; 1313 extern const char *Sound_environment_option[]; 1314 1315 // Goober5000 1316 extern int Num_explosion_options; 1317 extern const char *Explosion_option[]; 1318 1319 //The E 1320 extern int Num_adjust_audio_options; 1321 extern const char *Adjust_audio_options[]; 1322 1323 extern int Num_skybox_flags; 1324 extern const char *Skybox_flags[]; 1325 1326 /** Global state variables for the hud-display-gauge sexp. 1327 They all should be named Sexp_hud_display_*; 1328 They all should follow the following symantics for the value of the 1329 variable: 1330 =0 don't show 1331 =1 show until canceled 1332 >1 timestamp when gauge should stop showing (set zero when expired) 1333 \sa sexp_hud_display_warpout 1334 */ 1335 extern int Sexp_hud_display_warpout; 1336 1337 //Needed for scripting access to ship effects 1338 int get_effect_from_name(const char* name); 1339 1340 void maybe_write_to_event_log(int result); 1341 1342 #endif 1343