FS2_Open
Open source remastering of the Freespace 2 engine
sexp.h
Go to the documentation of this file.
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_HUD_GAUGE_NAME 34 // name of 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_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 
117 // Operand return types
118 #define OPR_NUMBER 1 // returns number
119 #define OPR_BOOL 2 // returns true/false value
120 #define OPR_NULL 3 // doesn't return a value
121 #define OPR_AI_GOAL 4 // is an ai operator (doesn't really return a value, but used for type matching)
122 #define OPR_POSITIVE 5 // returns a non-negative number
123 #define OPR_STRING 6 // not really a return type, but used for type matching.
124 #define OPR_AMBIGUOUS 7 // not really a return type, but used for type matching.
125 #define OPR_FLEXIBLE_ARGUMENT 8 // Goober5000 - is an argument operator (doesn't really return a value, but used for type matching)
126 
127 #define OP_INSERT_FLAG 0x8000
128 #define OP_REPLACE_FLAG 0x4000
129 #define OP_NONCAMPAIGN_FLAG 0x2000
130 #define OP_CAMPAIGN_ONLY_FLAG 0x1000
131 
132 // if we ever have more than 1024 (!)
133 // total sexps, we're going to have to
134 // figure out a different way of
135 // distinguishing between sexp identifier
136 // and sexp array index
137 #define FIRST_OP 0x0400
138 
139 // IMPORTANT: because of the way
140 // categories work, no category can
141 // have more than 256 sexps (mapped
142 // to 00 through ff) otherwise
143 // they'll overlap their category)
144 #define OP_CATEGORY_OBJECTIVE 0x0400
145 #define OP_CATEGORY_TIME 0x0500
146 #define OP_CATEGORY_LOGICAL 0x0600
147 #define OP_CATEGORY_ARITHMETIC 0x0700
148 #define OP_CATEGORY_STATUS 0x0800
149 #define OP_CATEGORY_CHANGE 0x0900
150 #define OP_CATEGORY_CHANGE2 0x0a00
151 #define OP_CATEGORY_CONDITIONAL 0x0b00
152 #define OP_CATEGORY_AI 0x0c00 // used for AI goals
153 #define OP_CATEGORY_TRAINING 0x0d00
154 #define OP_CATEGORY_UNLISTED 0x0e00
155 #define OP_CATEGORY_GOAL_EVENT 0x0f00 // final category can't be higher than 0x0f00,
156  // to avoid overlap with flags above
157 
158 #define OP_CATEGORY_MASK 0x0f00 // 0000111100000000b
159 
160 
161 // The debug category is obsolete, so
162 // I removed it. It originally took the
163 // place of OP_CATEGORY_CONDITIONAL,
164 // which was bumped (along with all the
165 // lower categories) so that FIRST_OP
166 // could be 0x0400. This allows for
167 // 1024 possible sexps, as opposed to
168 // the 768 possible if the categories
169 // had not been bumped.
170 /*
171 #define OP_CATEGORY_DEBUG 0x0a00
172 */
173 
174 // New subcategories! :) -- Goober5000
175 // Adding more subcategories is possible with the new code. All that needs to be done is
176 // to add a #define here (a number from 0x0000 to 0x00ff ORred with the category that it
177 // goes under), some appropriate case statements in get_subcategory() (in sexp.cpp) that
178 // will return the subcategory for each sexp that uses it, and the submenu name in the
179 // op_submenu[] array in sexp.cpp.
180 #define SUBCATEGORY_MASK 0x00ff
181 
182 #define CHANGE_SUBCATEGORY_MESSAGING (0x0000 | OP_CATEGORY_CHANGE)
183 #define CHANGE_SUBCATEGORY_AI_CONTROL (0x0001 | OP_CATEGORY_CHANGE)
184 #define CHANGE_SUBCATEGORY_SHIP_STATUS (0x0002 | OP_CATEGORY_CHANGE)
185 #define CHANGE_SUBCATEGORY_SHIELDS_ENGINES_AND_WEAPONS (0x0003 | OP_CATEGORY_CHANGE)
186 #define CHANGE_SUBCATEGORY_SUBSYSTEMS (0x0004 | OP_CATEGORY_CHANGE)
187 #define CHANGE_SUBCATEGORY_CARGO (0x0005 | OP_CATEGORY_CHANGE)
188 #define CHANGE_SUBCATEGORY_ARMOR_AND_DAMAGE_TYPES (0x0006 | OP_CATEGORY_CHANGE)
189 #define CHANGE_SUBCATEGORY_BEAMS_AND_TURRETS (0x0007 | OP_CATEGORY_CHANGE)
190 #define CHANGE_SUBCATEGORY_MODELS_AND_TEXTURES (0x0008 | OP_CATEGORY_CHANGE)
191 #define CHANGE_SUBCATEGORY_COORDINATE_MANIPULATION (0x0009 | OP_CATEGORY_CHANGE)
192 #define CHANGE_SUBCATEGORY_MISSION_AND_CAMPAIGN (0x000A | OP_CATEGORY_CHANGE)
193 #define CHANGE_SUBCATEGORY_MUSIC_AND_SOUND (0x000B | OP_CATEGORY_CHANGE)
194 #define CHANGE_SUBCATEGORY_HUD (0x000C | OP_CATEGORY_CHANGE)
195 #define CHANGE_SUBCATEGORY_NAV (0x000D | OP_CATEGORY_CHANGE)
196 #define CHANGE_SUBCATEGORY_CUTSCENES (0x000E | OP_CATEGORY_CHANGE)
197 #define CHANGE_SUBCATEGORY_BACKGROUND_AND_NEBULA (0x000F | OP_CATEGORY_CHANGE)
198 #define CHANGE_SUBCATEGORY_JUMP_NODES (0x0010 | OP_CATEGORY_CHANGE)
199 #define CHANGE_SUBCATEGORY_SPECIAL_EFFECTS (0x0011 | OP_CATEGORY_CHANGE)
200 #define CHANGE_SUBCATEGORY_VARIABLES (0x0012 | OP_CATEGORY_CHANGE)
201 #define CHANGE_SUBCATEGORY_OTHER (0x0013 | OP_CATEGORY_CHANGE)
202 
203 
204 #define STATUS_SUBCATEGORY_MISSION (0x0000 | OP_CATEGORY_STATUS)
205 #define STATUS_SUBCATEGORY_PLAYER (0x0001 | OP_CATEGORY_STATUS)
206 #define STATUS_SUBCATEGORY_MULTIPLAYER (0x0002 | OP_CATEGORY_STATUS)
207 #define STATUS_SUBCATEGORY_SHIP_STATUS (0x0003 | OP_CATEGORY_STATUS)
208 #define STATUS_SUBCATEGORY_SHIELDS_ENGINES_AND_WEAPONS (0x0004 | OP_CATEGORY_STATUS)
209 #define STATUS_SUBCATEGORY_CARGO (0x0005 | OP_CATEGORY_STATUS)
210 #define STATUS_SUBCATEGORY_DAMAGE (0x0006 | OP_CATEGORY_STATUS)
211 #define STATUS_SUBCATEGORY_DISTANCE_AND_COORDINATES (0x0007 | OP_CATEGORY_STATUS)
212 #define STATUS_SUBCATEGORY_VARIABLES (0x0008 | OP_CATEGORY_STATUS)
213 #define STATUS_SUBCATEGORY_OTHER (0x0009 | OP_CATEGORY_STATUS)
214 
215 
216 #define OP_PLUS (0x0000 | OP_CATEGORY_ARITHMETIC)
217 #define OP_MINUS (0x0001 | OP_CATEGORY_ARITHMETIC)
218 #define OP_MOD (0x0002 | OP_CATEGORY_ARITHMETIC)
219 #define OP_MUL (0x0003 | OP_CATEGORY_ARITHMETIC)
220 #define OP_DIV (0x0004 | OP_CATEGORY_ARITHMETIC)
221 #define OP_RAND (0x0005 | OP_CATEGORY_ARITHMETIC)
222 #define OP_ABS (0x0006 | OP_CATEGORY_ARITHMETIC) // Goober5000
223 #define OP_MIN (0x0007 | OP_CATEGORY_ARITHMETIC) // Goober5000
224 #define OP_MAX (0x0008 | OP_CATEGORY_ARITHMETIC) // Goober5000
225 #define OP_AVG (0x0009 | OP_CATEGORY_ARITHMETIC) // Goober5000
226 #define OP_RAND_MULTIPLE (0x000a | OP_CATEGORY_ARITHMETIC) // Goober5000
227 #define OP_POW (0x000b | OP_CATEGORY_ARITHMETIC) // Goober5000
228 #define OP_BITWISE_AND (0x000c | OP_CATEGORY_ARITHMETIC) // Goober5000
229 #define OP_BITWISE_OR (0x000d | OP_CATEGORY_ARITHMETIC) // Goober5000
230 #define OP_BITWISE_NOT (0x000e | OP_CATEGORY_ARITHMETIC) // Goober5000
231 #define OP_BITWISE_XOR (0x000f | OP_CATEGORY_ARITHMETIC) // Goober5000
232 
233 #define OP_SET_BIT (0x0010 | OP_CATEGORY_ARITHMETIC) // Goober5000
234 #define OP_UNSET_BIT (0x0011 | OP_CATEGORY_ARITHMETIC) // Goober5000
235 #define OP_IS_BIT_SET (0x0012 | OP_CATEGORY_ARITHMETIC) // Goober5000
236 #define OP_SIGNUM (0x0013 | OP_CATEGORY_ARITHMETIC) // Goober5000
237 
238 
239 #define OP_TRUE (0x0000 | OP_CATEGORY_LOGICAL)
240 #define OP_FALSE (0x0001 | OP_CATEGORY_LOGICAL)
241 #define OP_AND (0x0002 | OP_CATEGORY_LOGICAL)
242 #define OP_AND_IN_SEQUENCE (0x0003 | OP_CATEGORY_LOGICAL)
243 #define OP_OR (0x0004 | OP_CATEGORY_LOGICAL)
244 #define OP_EQUALS (0x0005 | OP_CATEGORY_LOGICAL)
245 #define OP_GREATER_THAN (0x0006 | OP_CATEGORY_LOGICAL)
246 #define OP_LESS_THAN (0x0007 | OP_CATEGORY_LOGICAL)
247 #define OP_HAS_TIME_ELAPSED (0x0008 | OP_CATEGORY_LOGICAL | OP_NONCAMPAIGN_FLAG)
248 #define OP_NOT (0x0009 | OP_CATEGORY_LOGICAL)
249 #define OP_STRING_EQUALS (0x000a | OP_CATEGORY_LOGICAL)
250 #define OP_STRING_GREATER_THAN (0x000b | OP_CATEGORY_LOGICAL)
251 #define OP_STRING_LESS_THAN (0x000c | OP_CATEGORY_LOGICAL)
252 #define OP_NOT_EQUAL (0x000d | OP_CATEGORY_LOGICAL) // Goober5000
253 #define OP_GREATER_OR_EQUAL (0x000e | OP_CATEGORY_LOGICAL) // Goober5000
254 #define OP_LESS_OR_EQUAL (0x000f | OP_CATEGORY_LOGICAL) // Goober5000
255 
256 #define OP_XOR (0x0010 | OP_CATEGORY_LOGICAL) // Goober5000
257 #define OP_PERFORM_ACTIONS (0x0011 | OP_CATEGORY_LOGICAL) // Goober5000
258 
259 
260 #define OP_GOAL_INCOMPLETE (0x0000 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
261 #define OP_GOAL_TRUE_DELAY (0x0001 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
262 #define OP_GOAL_FALSE_DELAY (0x0002 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
263 #define OP_EVENT_INCOMPLETE (0x0003 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
264 #define OP_EVENT_TRUE_DELAY (0x0004 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
265 #define OP_EVENT_FALSE_DELAY (0x0005 | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
266 #define OP_PREVIOUS_EVENT_TRUE (0x0006 | OP_CATEGORY_GOAL_EVENT)
267 #define OP_PREVIOUS_EVENT_FALSE (0x0007 | OP_CATEGORY_GOAL_EVENT)
268 #define OP_PREVIOUS_GOAL_TRUE (0x0009 | OP_CATEGORY_GOAL_EVENT)
269 #define OP_PREVIOUS_GOAL_FALSE (0x000a | OP_CATEGORY_GOAL_EVENT)
270 #define OP_EVENT_TRUE_MSECS_DELAY (0x000b | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
271 #define OP_EVENT_FALSE_MSECS_DELAY (0x000c | OP_CATEGORY_GOAL_EVENT | OP_NONCAMPAIGN_FLAG)
272 
273 #define OP_IS_DESTROYED_DELAY (0x0000 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
274 #define OP_IS_SUBSYSTEM_DESTROYED_DELAY (0x0001 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
275 #define OP_IS_DISABLED_DELAY (0x0002 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
276 #define OP_IS_DISARMED_DELAY (0x0003 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
277 #define OP_HAS_DOCKED_DELAY (0x0004 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
278 #define OP_HAS_UNDOCKED_DELAY (0x0005 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
279 #define OP_HAS_ARRIVED_DELAY (0x0006 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
280 #define OP_HAS_DEPARTED_DELAY (0x0007 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
281 #define OP_WAYPOINTS_DONE_DELAY (0x0008 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
282 #define OP_SHIP_TYPE_DESTROYED (0x0009 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
283 #define OP_PERCENT_SHIPS_DEPARTED (0x000a | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
284 #define OP_PERCENT_SHIPS_DESTROYED (0x000b | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
285 #define OP_DEPART_NODE_DELAY (0x000c | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
286 #define OP_DESTROYED_DEPARTED_DELAY (0x000d | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG)
287 #define OP_PERCENT_SHIPS_DISARMED (0x000e | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Goober5000
288 #define OP_PERCENT_SHIPS_DISABLED (0x000f | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Goober5000
289 #define OP_PERCENT_SHIPS_ARRIVED (0x0010 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // FUBAR-BDHR
290 #define OP_NAV_IS_VISITED (0x0011 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // Kazan
291 #define OP_WAS_DESTROYED_BY_DELAY (0x0012 | OP_CATEGORY_OBJECTIVE | OP_NONCAMPAIGN_FLAG) // WCS
292 
293 #define OP_TIME_SHIP_DESTROYED (0x0000 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
294 #define OP_TIME_SHIP_ARRIVED (0x0001 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
295 #define OP_TIME_SHIP_DEPARTED (0x0002 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
296 #define OP_TIME_WING_DESTROYED (0x0003 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
297 #define OP_TIME_WING_ARRIVED (0x0004 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
298 #define OP_TIME_WING_DEPARTED (0x0005 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
299 #define OP_MISSION_TIME (0x0006 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
300 #define OP_MISSION_TIME_MSECS (0x0007 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG) // Goober5000
301 #define OP_TIME_DOCKED (0x0008 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
302 #define OP_TIME_UNDOCKED (0x0009 | OP_CATEGORY_TIME | OP_NONCAMPAIGN_FLAG)
303 
304 #define OP_SHIELDS_LEFT (0x0000 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
305 #define OP_HITS_LEFT (0x0001 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
306 #define OP_HITS_LEFT_SUBSYSTEM (0x0002 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // deprecated
307 #define OP_SIM_HITS_LEFT (0x0003 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
308 #define OP_DISTANCE (0x0004 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
309 #define OP_DISTANCE_SUBSYSTEM (0x0005 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
310 #define OP_LAST_ORDER_TIME (0x0006 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
311 #define OP_NUM_PLAYERS (0x0007 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
312 #define OP_SKILL_LEVEL_AT_LEAST (0x0008 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
313 #define OP_WAS_PROMOTION_GRANTED (0x0009 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
314 #define OP_WAS_MEDAL_GRANTED (0x000a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
315 #define OP_CARGO_KNOWN_DELAY (0x000b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
316 #define OP_CAP_SUBSYS_CARGO_KNOWN_DELAY (0x000c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
317 #define OP_HAS_BEEN_TAGGED_DELAY (0x000d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
318 #define OP_IS_TAGGED (0x000e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
319 #define OP_NUM_KILLS (0x000f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
320 
321 #define OP_NUM_TYPE_KILLS (0x0010 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
322 #define OP_NUM_CLASS_KILLS (0x0011 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
323 #define OP_SHIELD_RECHARGE_PCT (0x0012 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
324 #define OP_ENGINE_RECHARGE_PCT (0x0013 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
325 #define OP_WEAPON_RECHARGE_PCT (0x0014 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
326 #define OP_SHIELD_QUAD_LOW (0x0015 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
327 #define OP_SECONDARY_AMMO_PCT (0x0016 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
328 #define OP_IS_SECONDARY_SELECTED (0x0017 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
329 #define OP_IS_PRIMARY_SELECTED (0x0018 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
330 #define OP_SPECIAL_WARP_DISTANCE (0x0019 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
331 #define OP_IS_SHIP_VISIBLE (0x001a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
332 #define OP_TEAM_SCORE (0x001b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
333 #define OP_PRIMARY_AMMO_PCT (0x001c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
334 #define OP_IS_SHIP_STEALTHY (0x001d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
335 #define OP_IS_CARGO (0x001e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
336 #define OP_IS_FRIENDLY_STEALTH_VISIBLE (0x001f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
337 
338 #define OP_GET_OBJECT_X (0x0020 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
339 #define OP_GET_OBJECT_Y (0x0021 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
340 #define OP_GET_OBJECT_Z (0x0022 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
341 #define OP_IS_AI_CLASS (0x0023 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
342 #define OP_IS_SHIP_TYPE (0x0024 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
343 #define OP_IS_SHIP_CLASS (0x0025 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
344 #define OP_NUM_SHIPS_IN_BATTLE (0x0026 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // phreak
345 #define OP_CURRENT_SPEED (0x0027 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon
346 #define OP_IS_IFF (0x0028 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
347 #define OP_NUM_WITHIN_BOX (0x0029 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon
348 #define OP_SCRIPT_EVAL_NUM (0x002a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon
349 #define OP_SCRIPT_EVAL_STRING (0x002b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // WMCoolmon
350 #define OP_NUM_SHIPS_IN_WING (0x002c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
351 #define OP_GET_PRIMARY_AMMO (0x002d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
352 #define OP_GET_SECONDARY_AMMO (0x002e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
353 #define OP_NUM_ASSISTS (0x002f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
354 
355 #define OP_SHIP_SCORE (0x0030 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
356 #define OP_SHIP_DEATHS (0x0031 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
357 #define OP_RESPAWNS_LEFT (0x0032 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
358 #define OP_IS_PLAYER (0x0033 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
359 #define OP_GET_DAMAGE_CAUSED (0x0034 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
360 #define OP_AFTERBURNER_LEFT (0x0035 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
361 #define OP_WEAPON_ENERGY_LEFT (0x0036 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
362 #define OP_PRIMARY_FIRED_SINCE (0x0037 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
363 #define OP_SECONDARY_FIRED_SINCE (0x0038 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
364 #define OP_CUTSCENES_GET_FOV (0x0039 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Echelon9
365 #define OP_GET_THROTTLE_SPEED (0x003a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
366 #define OP_HITS_LEFT_SUBSYSTEM_GENERIC (0x003b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
367 #define OP_HITS_LEFT_SUBSYSTEM_SPECIFIC (0x003c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
368 #define OP_GET_OBJECT_PITCH (0x003d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
369 #define OP_GET_OBJECT_BANK (0x003e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
370 #define OP_GET_OBJECT_HEADING (0x003f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
371 
372 #define OP_HAS_PRIMARY_WEAPON (0x0040 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
373 #define OP_HAS_SECONDARY_WEAPON (0x0041 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
374 #define OP_STRING_TO_INT (0x0042 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
375 #define OP_STRING_GET_LENGTH (0x0043 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
376 #define OP_GET_OBJECT_SPEED_X (0x0044 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
377 #define OP_GET_OBJECT_SPEED_Y (0x0045 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
378 #define OP_GET_OBJECT_SPEED_Z (0x0046 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG)
379 #define OP_NAV_DISTANCE (0x0047 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Kazan
380 #define OP_NAV_ISLINKED (0x0048 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Kazan
381 #define OP_IS_FACING (0x0049 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // The E
382 #define OP_DIRECTIVE_VALUE (0x004a | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
383 #define OP_GET_NUM_COUNTERMEASURES (0x004b | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
384 #define OP_IS_IN_BOX (0x004c | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Sushi
385 #define OP_IS_IN_MISSION (0x004d | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Goober5000
386 #define OP_ARE_SHIP_FLAGS_SET (0x004e | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // Karajorma
387 #define OP_TURRET_GET_PRIMARY_AMMO (0x004f | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo code
388 
389 #define OP_TURRET_GET_SECONDARY_AMMO (0x0050 | OP_CATEGORY_STATUS | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo code
390 
391 // conditional sexpressions
392 #define OP_WHEN (0x0000 | OP_CATEGORY_CONDITIONAL)
393 #define OP_WHEN_ARGUMENT (0x0001 | OP_CATEGORY_CONDITIONAL) // Goober5000
394 #define OP_EVERY_TIME (0x0002 | OP_CATEGORY_CONDITIONAL) // Goober5000
395 #define OP_EVERY_TIME_ARGUMENT (0x0003 | OP_CATEGORY_CONDITIONAL) // Goober5000
396 #define OP_ANY_OF (0x0004 | OP_CATEGORY_CONDITIONAL) // Goober5000
397 #define OP_EVERY_OF (0x0005 | OP_CATEGORY_CONDITIONAL) // Goober5000
398 #define OP_RANDOM_OF (0x0006 | OP_CATEGORY_CONDITIONAL) // Goober5000
399 #define OP_NUMBER_OF (0x0007 | OP_CATEGORY_CONDITIONAL) // Goober5000
400 #define OP_INVALIDATE_ARGUMENT (0x0008 | OP_CATEGORY_CONDITIONAL) // Goober5000
401 #define OP_RANDOM_MULTIPLE_OF (0x0009 | OP_CATEGORY_CONDITIONAL) // Karajorma
402 #define OP_IN_SEQUENCE (0x000a | OP_CATEGORY_CONDITIONAL) // Karajorma
403 #define OP_VALIDATE_ARGUMENT (0x000b | OP_CATEGORY_CONDITIONAL) // Karajorma
404 #define OP_DO_FOR_VALID_ARGUMENTS (0x000c | OP_CATEGORY_CONDITIONAL) // Karajorma
405 #define OP_INVALIDATE_ALL_ARGUMENTS (0x000d | OP_CATEGORY_CONDITIONAL) // Karajorma
406 #define OP_VALIDATE_ALL_ARGUMENTS (0x000e | OP_CATEGORY_CONDITIONAL) // Karajorma
407 #define OP_FOR_COUNTER (0x000f | OP_CATEGORY_CONDITIONAL) // Goober5000
408 #define OP_IF_THEN_ELSE (0x0010 | OP_CATEGORY_CONDITIONAL) // Goober5000
409 #define OP_NUM_VALID_ARGUMENTS (0x0011 | OP_CATEGORY_CONDITIONAL) // Karajorma
410 
411 
412 // sexpressions with side-effects
413 #define OP_CHANGE_IFF (0x0000 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
414 #define OP_REPAIR_SUBSYSTEM (0x0001 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
415 #define OP_SABOTAGE_SUBSYSTEM (0x0002 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
416 #define OP_SET_SUBSYSTEM_STRNGTH (0x0003 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
417 #define OP_PROTECT_SHIP (0x0004 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
418 #define OP_SEND_MESSAGE (0x0005 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
419 #define OP_SELF_DESTRUCT (0x0006 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
420 #define OP_CLEAR_GOALS (0x0007 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
421 #define OP_ADD_GOAL (0x0008 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
422 #define OP_REMOVE_GOAL (0x0009 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
423 #define OP_INVALIDATE_GOAL (0x000a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
424 #define OP_VALIDATE_GOAL (0x000b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
425 #define OP_SEND_RANDOM_MESSAGE (0x000c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
426 #define OP_TRANSFER_CARGO (0x000d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
427 #define OP_EXCHANGE_CARGO (0x000e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
428 #define OP_UNPROTECT_SHIP (0x000f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
429 
430 #define OP_GOOD_REARM_TIME (0x0010 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
431 #define OP_BAD_REARM_TIME (0x0011 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
432 #define OP_GRANT_PROMOTION (0x0012 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
433 #define OP_GRANT_MEDAL (0x0013 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
434 #define OP_ALLOW_SHIP (0x0014 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
435 #define OP_ALLOW_WEAPON (0x0015 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
436 #define OP_GOOD_SECONDARY_TIME (0x0016 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
437 #define OP_WARP_BROKEN (0x0017 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
438 #define OP_WARP_NOT_BROKEN (0x0018 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
439 #define OP_WARP_NEVER (0x0019 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
440 #define OP_WARP_ALLOWED (0x001a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
441 #define OP_SHIP_INVISIBLE (0x001b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
442 #define OP_SHIP_VISIBLE (0x001c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
443 #define OP_SHIP_INVULNERABLE (0x001d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
444 #define OP_SHIP_VULNERABLE (0x001e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
445 #define OP_RED_ALERT (0x001f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
446 
447 #define OP_TECH_ADD_SHIP (0x0020 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
448 #define OP_TECH_ADD_WEAPON (0x0021 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
449 #define OP_END_CAMPAIGN (0x0022 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
450 #define OP_JETTISON_CARGO (0x0023 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
451 #define OP_MODIFY_VARIABLE (0X0024 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
452 #define OP_NOP (0x0025 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
453 #define OP_BEAM_FIRE (0x0026 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
454 #define OP_BEAM_FREE (0x0027 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
455 #define OP_BEAM_FREE_ALL (0x0028 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
456 #define OP_BEAM_LOCK (0x0029 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
457 #define OP_BEAM_LOCK_ALL (0x002a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
458 #define OP_BEAM_PROTECT_SHIP (0x002b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
459 #define OP_BEAM_UNPROTECT_SHIP (0x002c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
460 #define OP_TURRET_FREE (0x002d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
461 #define OP_TURRET_FREE_ALL (0x002e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
462 #define OP_TURRET_LOCK (0x002f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
463 
464 #define OP_TURRET_LOCK_ALL (0x0030 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
465 #define OP_ADD_REMOVE_ESCORT (0x0031 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
466 #define OP_AWACS_SET_RADIUS (0x0032 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
467 #define OP_SEND_MESSAGE_LIST (0x0033 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
468 #define OP_CAP_WAYPOINT_SPEED (0x0034 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
469 #define OP_SHIP_GUARDIAN (0x0035 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
470 #define OP_SHIP_NO_GUARDIAN (0x0036 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
471 #define OP_TURRET_TAGGED_ONLY_ALL (0x0037 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
472 #define OP_TURRET_TAGGED_CLEAR_ALL (0x0038 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
473 #define OP_SUBSYS_SET_RANDOM (0x0039 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
474 #define OP_SUPERNOVA_START (0x003a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
475 #define OP_CARGO_NO_DEPLETE (0x003b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
476 #define OP_SET_SPECIAL_WARPOUT_NAME (0X003c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
477 #define OP_SHIP_VANISH (0X003d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
478 #define OP_SHIELDS_ON (0x003e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian
479 #define OP_SHIELDS_OFF (0x003f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian
480 
481 #define OP_CHANGE_AI_LEVEL (0x0040 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian
482 #define OP_END_MISSION (0x0041 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian. replaces end-mission-delay, which did nothing
483 #define OP_SET_SCANNED (0x0042 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
484 #define OP_SET_UNSCANNED (0x0043 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
485 #define OP_SHIP_STEALTHY (0x0044 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
486 #define OP_SHIP_UNSTEALTHY (0x0045 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
487 #define OP_SET_CARGO (0x0046 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
488 #define OP_CHANGE_AI_CLASS (0x0047 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
489 #define OP_FRIENDLY_STEALTH_INVISIBLE (0x0048 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
490 #define OP_FRIENDLY_STEALTH_VISIBLE (0x0049 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
491 #define OP_DAMAGED_ESCORT_LIST (0x004a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak
492 #define OP_DAMAGED_ESCORT_LIST_ALL (0x004b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
493 #define OP_SHIP_VAPORIZE (0x004c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
494 #define OP_SHIP_NO_VAPORIZE (0x004d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
495 #define OP_COLLIDE_INVISIBLE (0x004e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
496 #define OP_DONT_COLLIDE_INVISIBLE (0x004f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
497 
498 #define OP_PRIMITIVE_SENSORS_SET_RANGE (0x0050 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
499 #define OP_CHANGE_SHIP_CLASS (0x0051 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
500 #define OP_SCRIPT_EVAL (0x0052 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
501 #define OP_SET_SUPPORT_SHIP (0x0053 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
502 #define OP_DEACTIVATE_GLOW_POINTS (0x0054 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
503 #define OP_ACTIVATE_GLOW_POINTS (0x0055 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
504 #define OP_DEACTIVATE_GLOW_MAPS (0x0056 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
505 #define OP_ACTIVATE_GLOW_MAPS (0x0057 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
506 #define OP_DEACTIVATE_GLOW_POINT_BANK (0x0058 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
507 #define OP_ACTIVATE_GLOW_POINT_BANK (0x0059 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Bobboau
508 #define OP_CHANGE_SOUNDTRACK (0x005a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
509 #define OP_TECH_ADD_INTEL (0x005b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
510 #define OP_TECH_RESET_TO_DEFAULT (0x005c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
511 #define OP_EXPLOSION_EFFECT (0x005d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
512 #define OP_WARP_EFFECT (0x005e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
513 #define OP_SET_OBJECT_FACING (0x005f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
514 
515 #define OP_SET_OBJECT_FACING_OBJECT (0x0060 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
516 #define OP_SET_OBJECT_POSITION (0x0061 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
517 #define OP_PLAY_SOUND_FROM_TABLE (0x0062 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
518 #define OP_PLAY_SOUND_FROM_FILE (0x0063 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
519 #define OP_CLOSE_SOUND_FROM_FILE (0x0064 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
520 #define OP_HUD_DISABLE (0x0065 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
521 #define OP_KAMIKAZE (0x0066 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //-Sesquipedalian
522 #define OP_MISSION_SET_SUBSPACE (0x0067 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
523 #define OP_TURRET_TAGGED_SPECIFIC (0x0068 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak
524 #define OP_TURRET_TAGGED_CLEAR_SPECIFIC (0x0069 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //phreak
525 #define OP_LOCK_ROTATING_SUBSYSTEM (0x006a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
526 #define OP_FREE_ROTATING_SUBSYSTEM (0x006b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
527 #define OP_REVERSE_ROTATING_SUBSYSTEM (0x006c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
528 #define OP_ROTATING_SUBSYS_SET_TURN_TIME (0x006d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
529 #define OP_PLAYER_USE_AI (0x006e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
530 #define OP_PLAYER_NOT_USE_AI (0x006f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
531 
532 #define OP_HUD_DISABLE_EXCEPT_MESSAGES (0x0070 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
533 #define OP_FORCE_JUMP (0x0071 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
534 #define OP_HUD_SET_TEXT (0x0072 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
535 #define OP_HUD_SET_TEXT_NUM (0x0073 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
536 #define OP_HUD_SET_COORDS (0x0074 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
537 #define OP_HUD_SET_FRAME (0x0075 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
538 #define OP_HUD_SET_COLOR (0x0076 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
539 #define OP_HUD_SET_MAX_TARGETING_RANGE (0x0077 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
540 #define OP_SHIP_TAG (0x0078 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
541 #define OP_SHIP_UNTAG (0x0079 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
542 #define OP_SHIP_CHANGE_ALT_NAME (0x007a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
543 #define OP_SCRAMBLE_MESSAGES (0x007b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // phreak
544 #define OP_UNSCRAMBLE_MESSAGES (0x007c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // phreak
545 #define OP_CUTSCENES_SET_CUTSCENE_BARS (0x007d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
546 #define OP_CUTSCENES_UNSET_CUTSCENE_BARS (0x007e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
547 #define OP_CUTSCENES_FADE_IN (0x007f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
548 
549 #define OP_CUTSCENES_FADE_OUT (0x0080 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
550 #define OP_CUTSCENES_SET_CAMERA_POSITION (0x0081 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
551 #define OP_CUTSCENES_SET_CAMERA_FACING (0x0082 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
552 #define OP_CUTSCENES_SET_CAMERA_FACING_OBJECT (0x0083 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
553 #define OP_CUTSCENES_SET_CAMERA_ROTATION (0x0084 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
554 #define OP_CUTSCENES_SET_FOV (0x0085 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
555 #define OP_CUTSCENES_RESET_FOV (0x0086 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
556 #define OP_CUTSCENES_RESET_CAMERA (0x0087 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
557 #define OP_CUTSCENES_SHOW_SUBTITLE (0x0088 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC / deprecated
558 #define OP_CUTSCENES_SET_TIME_COMPRESSION (0x0089 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
559 #define OP_CUTSCENES_RESET_TIME_COMPRESSION (0x008a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
560 #define OP_CUTSCENES_FORCE_PERSPECTIVE (0x008b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
561 #define OP_JUMP_NODE_SET_JUMPNODE_NAME (0x008c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // CommanderDJ
562 #define OP_JUMP_NODE_SET_JUMPNODE_COLOR (0x008d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
563 #define OP_JUMP_NODE_SET_JUMPNODE_MODEL (0x008e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
564 #define OP_JUMP_NODE_SHOW_JUMPNODE (0x008f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
565 
566 #define OP_JUMP_NODE_HIDE_JUMPNODE (0x0090 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
567 #define OP_SHIP_GUARDIAN_THRESHOLD (0x0091 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
568 #define OP_SHIP_SUBSYS_GUARDIAN_THRESHOLD (0x0092 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
569 #define OP_SET_SKYBOX_MODEL (0x0093 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // taylor
570 #define OP_SHIP_CREATE (0X0094 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
571 #define OP_WEAPON_CREATE (0x0095 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
572 #define OP_SET_OBJECT_SPEED_X (0X0096 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
573 #define OP_SET_OBJECT_SPEED_Y (0X0097 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
574 #define OP_SET_OBJECT_SPEED_Z (0X0098 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
575 #define OP_MISSION_SET_NEBULA (0x0099 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
576 #define OP_ADD_BACKGROUND_BITMAP (0x009a | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
577 #define OP_REMOVE_BACKGROUND_BITMAP (0x009b | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
578 #define OP_ADD_SUN_BITMAP (0x009c | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
579 #define OP_REMOVE_SUN_BITMAP (0x009d | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
580 #define OP_NEBULA_CHANGE_STORM (0x009e | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
581 #define OP_NEBULA_TOGGLE_POOF (0x009f | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
582 
583 #define OP_TURRET_CHANGE_WEAPON (0x00a0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
584 #define OP_TURRET_SET_TARGET_ORDER (0x00a1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
585 #define OP_SHIP_TURRET_TARGET_ORDER (0x00a2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
586 #define OP_SET_PRIMARY_AMMO (0x00a3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
587 #define OP_SET_SECONDARY_AMMO (0x00a4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
588 #define OP_SHIP_BOMB_TARGETABLE (0x00a5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
589 #define OP_SHIP_BOMB_UNTARGETABLE (0x00a6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) //WMC
590 #define OP_SHIP_SUBSYS_TARGETABLE (0x00a7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
591 #define OP_SHIP_SUBSYS_UNTARGETABLE (0x00a8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
592 #define OP_SET_DEATH_MESSAGE (0x00a9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
593 #define OP_SET_PRIMARY_WEAPON (0x00aa | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
594 #define OP_SET_SECONDARY_WEAPON (0x00ab | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
595 #define OP_DISABLE_BUILTIN_MESSAGES (0x00ac | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
596 #define OP_ENABLE_BUILTIN_MESSAGES (0x00ad | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
597 #define OP_LOCK_PRIMARY_WEAPON (0x00ae | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
598 #define OP_UNLOCK_PRIMARY_WEAPON (0x00af | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
599 
600 #define OP_LOCK_SECONDARY_WEAPON (0x00b0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
601 #define OP_UNLOCK_SECONDARY_WEAPON (0x00b1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
602 #define OP_SET_CAMERA_SHUDDER (0x00b2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
603 #define OP_ALLOW_TREASON (0x00b3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
604 #define OP_SHIP_COPY_DAMAGE (0x00b4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
605 #define OP_CHANGE_SUBSYSTEM_NAME (0x00b5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
606 #define OP_SET_PERSONA (0x00b6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
607 #define OP_CHANGE_PLAYER_SCORE (0x00b7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
608 #define OP_CHANGE_TEAM_SCORE (0x00b8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
609 #define OP_CUTSCENES_SET_CAMERA_FOV (0x00b9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
610 #define OP_CUTSCENES_SET_CAMERA (0x00ba | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
611 #define OP_CUTSCENES_SET_CAMERA_HOST (0x00bb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
612 #define OP_CUTSCENES_SET_CAMERA_TARGET (0x00bc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // WMC
613 #define OP_LOCK_AFTERBURNER (0x00bd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // KeldorKatarn
614 #define OP_UNLOCK_AFTERBURNER (0x00be | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // KeldorKatarn
615 #define OP_SHIP_CHANGE_CALLSIGN (0x00bf | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
616 
617 #define OP_SET_RESPAWNS (0x00c0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
618 #define OP_SET_AFTERBURNER_ENERGY (0x00c1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
619 #define OP_SET_WEAPON_ENERGY (0x00c2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
620 #define OP_SET_SHIELD_ENERGY (0x00c3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
621 #define OP_SET_AMBIENT_LIGHT (0x00c4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Karajorma
622 #define OP_CHANGE_IFF_COLOR (0x00c5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
623 #define OP_TURRET_SUBSYS_TARGET_DISABLE (0x00c6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
624 #define OP_TURRET_SUBSYS_TARGET_ENABLE (0x00c7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
625 #define OP_REMOVE_WEAPONS (0x00c8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
626 #define OP_SHIP_MANEUVER (0x00c9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
627 #define OP_SHIP_ROT_MANEUVER (0x00ca | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
628 #define OP_SHIP_LAT_MANEUVER (0x00cb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Wanderer
629 #define OP_GET_VARIABLE_BY_INDEX (0x00cc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
630 #define OP_SET_VARIABLE_BY_INDEX (0x00cd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
631 #define OP_SET_POST_EFFECT (0x00ce | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Hery
632 #define OP_TURRET_SET_OPTIMUM_RANGE (0x00cf | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
633 
634 #define OP_TURRET_SET_DIRECTION_PREFERENCE (0x00d0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
635 #define OP_TURRET_SET_TARGET_PRIORITIES (0x00d1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
636 #define OP_SET_ARMOR_TYPE (0x00d2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
637 #define OP_CUTSCENES_SHOW_SUBTITLE_TEXT (0x00d3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
638 #define OP_CUTSCENES_SHOW_SUBTITLE_IMAGE (0x00d4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
639 #define OP_HUD_DISPLAY_GAUGE (0x00d5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG)
640 #define OP_SET_SOUND_ENVIRONMENT (0x00d6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor
641 #define OP_UPDATE_SOUND_ENVIRONMENT (0x00d7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Taylor
642 #define OP_SET_EXPLOSION_OPTION (0x00d8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
643 #define OP_ADJUST_AUDIO_VOLUME (0x00d9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
644 #define OP_FORCE_GLIDE (0x00da | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
645 #define OP_TURRET_SET_RATE_OF_FIRE (0x00db | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
646 #define OP_HUD_SET_MESSAGE (0x00dc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
647 #define OP_SHIP_SUBSYS_NO_REPLACE (0x00dd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
648 #define OP_SET_IMMOBILE (0x00de | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
649 #define OP_SET_MOBILE (0x00df | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
650 
651 #define OP_SHIP_SUBSYS_NO_LIVE_DEBRIS (0x00e0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
652 #define OP_SHIP_SUBSYS_VANISHED (0x00e1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
653 #define OP_SHIP_SUBSYS_IGNORE_IF_DEAD (0x00e2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
654 #define OP_HUD_SET_DIRECTIVE (0x00e3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
655 #define OP_HUD_GAUGE_SET_ACTIVE (0x00e4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated
656 #define OP_HUD_ACTIVATE_GAUGE_TYPE (0x00e5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated
657 #define OP_SET_OBJECT_ORIENTATION (0x00e6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
658 #define OP_STRING_CONCATENATE (0x00e7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
659 #define OP_INT_TO_STRING (0x00e8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
660 #define OP_WEAPON_SET_DAMAGE_TYPE (0x00e9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
661 #define OP_SHIP_SET_DAMAGE_TYPE (0x00ea | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
662 #define OP_SHIP_SHOCKWAVE_SET_DAMAGE_TYPE (0x00eb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
663 #define OP_FIELD_SET_DAMAGE_TYPE (0x00ec | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
664 #define OP_TURRET_PROTECT_SHIP (0x00ed | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
665 #define OP_TURRET_UNPROTECT_SHIP (0x00ee | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
666 #define OP_DISABLE_ETS (0x00ef | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
667 
668 #define OP_ENABLE_ETS (0x00f0 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
669 #define OP_NAV_ADD_WAYPOINT (0x00f1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
670 #define OP_NAV_ADD_SHIP (0x00f2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
671 #define OP_NAV_DEL (0x00f3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
672 #define OP_NAV_HIDE (0x00f4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
673 #define OP_NAV_RESTRICT (0x00f5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
674 #define OP_NAV_UNHIDE (0x00f6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
675 #define OP_NAV_UNRESTRICT (0x00f7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
676 #define OP_NAV_SET_VISITED (0x00f8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
677 #define OP_NAV_SET_CARRY (0x00f9 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
678 #define OP_NAV_UNSET_CARRY (0x00fa | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
679 #define OP_NAV_UNSET_VISITED (0x00fb | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
680 #define OP_NAV_SET_NEEDSLINK (0x00fc | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
681 #define OP_NAV_UNSET_NEEDSLINK (0x00fd | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
682 #define OP_NAV_USECINEMATICS (0x00fe | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
683 #define OP_NAV_USEAP (0x00ff | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Kazan
684 
685 // 0x00ff is the last remaining sexp in the CHANGE category! Future change sexps should go under CHANGE2
686 
687 #define OP_STRING_GET_SUBSTRING (0x0000 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
688 #define OP_STRING_SET_SUBSTRING (0x0001 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
689 #define OP_SET_NUM_COUNTERMEASURES (0x0002 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
690 #define OP_ADD_TO_COLGROUP (0x0003 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
691 #define OP_REMOVE_FROM_COLGROUP (0x0004 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
692 #define OP_GET_COLGROUP_ID (0x0005 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
693 #define OP_SHIP_EFFECT (0x0006 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Valathil
694 #define OP_CLEAR_SUBTITLES (0x0007 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
695 #define OP_BEAM_FIRE_COORDS (0x0008 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
696 #define OP_SET_DOCKED (0x0009 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Sushi
697 #define OP_SET_THRUSTERS (0x000a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
698 #define OP_TRIGGER_SUBMODEL_ANIMATION (0x000b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
699 #define OP_HUD_CLEAR_MESSAGES (0x000c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Swifty
700 #define OP_SET_PLAYER_ORDERS (0x000d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
701 #define OP_SUPERNOVA_STOP (0x000e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) //CommanderDJ
702 #define OP_SET_PLAYER_THROTTLE_SPEED (0x000f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) //CommanderDJ
703 
704 #define OP_SET_DEBRIEFING_TOGGLED (0x0010 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
705 #define OP_SET_SUBSPACE_DRIVE (0x0011 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
706 #define OP_SET_ARRIVAL_INFO (0x0012 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
707 #define OP_SET_DEPARTURE_INFO (0x0013 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
708 #define OP_SET_SKYBOX_ORIENT (0x0014 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
709 #define OP_DESTROY_INSTANTLY (0x0015 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Admiral MS
710 #define OP_DESTROY_SUBSYS_INSTANTLY (0x0016 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Admiral MS
711 #define OP_DEBUG (0x0017 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
712 #define OP_SET_MISSION_MOOD (0x0018 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
713 #define OP_NAV_SELECT (0x0019 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
714 #define OP_NAV_UNSELECT (0x001a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
715 #define OP_ALTER_SHIP_FLAG (0x001b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
716 #define OP_CHANGE_TEAM_COLOR (0x001c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
717 #define OP_NEBULA_CHANGE_PATTERN (0x001d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Axem
718 #define OP_PLAYER_IS_CHEATING_BASTARD (0x001e | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
719 #define OP_TECH_ADD_INTEL_XSTR (0x001f | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
720 
721 #define OP_COPY_VARIABLE_FROM_INDEX (0x0020 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
722 #define OP_COPY_VARIABLE_BETWEEN_INDEXES (0x0021 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
723 #define OP_GET_ETS_VALUE (0x0022 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan
724 #define OP_SET_ETS_VALUES (0x0023 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan
725 #define OP_CALL_SSM_STRIKE (0x0024 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // X3N0-Life-Form
726 #define OP_SET_MOTION_DEBRIS (0x0025 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
727 #define OP_HUD_SET_CUSTOM_GAUGE_ACTIVE (0x0026 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem
728 #define OP_HUD_SET_RETAIL_GAUGE_ACTIVE (0x0027 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem
729 #define OP_SCRIPT_EVAL_MULTI (0x0028 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
730 #define OP_PAUSE_SOUND_FROM_FILE (0x0029 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Goober5000
731 #define OP_SCRIPT_EVAL_BLOCK (0x002a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // niffiwan
732 #define OP_BEAM_FLOATING_FIRE (0x002b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // MageKing17
733 #define OP_TURRET_SET_PRIMARY_AMMO (0x002c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo changes
734 #define OP_TURRET_SET_SECONDARY_AMMO (0x002d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // DahBlount, part of the turret ammo changes
735 
736 // defined for AI goals
737 #define OP_AI_CHASE (0x0000 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
738 #define OP_AI_DOCK (0x0001 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
739 #define OP_AI_UNDOCK (0x0002 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
740 #define OP_AI_WARP_OUT (0x0003 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
741 #define OP_AI_WAYPOINTS (0x0004 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
742 #define OP_AI_WAYPOINTS_ONCE (0x0005 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
743 #define OP_AI_DESTROY_SUBSYS (0x0006 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
744 #define OP_AI_DISABLE_SHIP (0x0007 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
745 #define OP_AI_DISARM_SHIP (0x0008 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
746 #define OP_AI_GUARD (0x0009 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
747 #define OP_AI_CHASE_ANY (0x000a | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
748 #define OP_AI_EVADE_SHIP (0x000b | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
749 #define OP_AI_STAY_NEAR_SHIP (0x000c | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
750 #define OP_AI_KEEP_SAFE_DISTANCE (0x000d | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
751 #define OP_AI_IGNORE (0x000e | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
752 #define OP_AI_STAY_STILL (0x000f | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
753 #define OP_AI_PLAY_DEAD (0x0010 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
754 #define OP_AI_IGNORE_NEW (0x0011 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // Goober5000
755 #define OP_AI_FORM_ON_WING (0x0012 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG) // The E
756 
757 #define OP_GOALS_ID (0x0000 | OP_CATEGORY_UNLISTED)
758 #define OP_NEXT_MISSION (0x0001 | OP_CATEGORY_UNLISTED) // used in campaign files for branching
759 #define OP_IS_DESTROYED (0x0002 | OP_CATEGORY_UNLISTED)
760 #define OP_IS_SUBSYSTEM_DESTROYED (0x0003 | OP_CATEGORY_UNLISTED)
761 #define OP_IS_DISABLED (0x0004 | OP_CATEGORY_UNLISTED)
762 #define OP_IS_DISARMED (0x0005 | OP_CATEGORY_UNLISTED)
763 #define OP_HAS_DOCKED (0x0006 | OP_CATEGORY_UNLISTED)
764 #define OP_HAS_UNDOCKED (0x0007 | OP_CATEGORY_UNLISTED)
765 #define OP_HAS_ARRIVED (0x0008 | OP_CATEGORY_UNLISTED)
766 #define OP_HAS_DEPARTED (0x0009 | OP_CATEGORY_UNLISTED)
767 #define OP_WAYPOINTS_DONE (0x000a | OP_CATEGORY_UNLISTED)
768 #define OP_ADD_SHIP_GOAL (0x000b | OP_CATEGORY_UNLISTED)
769 #define OP_CLEAR_SHIP_GOALS (0x000c | OP_CATEGORY_UNLISTED)
770 #define OP_ADD_WING_GOAL (0x000d | OP_CATEGORY_UNLISTED)
771 #define OP_CLEAR_WING_GOALS (0x000e | OP_CATEGORY_UNLISTED)
772 #define OP_AI_CHASE_WING (0x000f | OP_CATEGORY_UNLISTED)
773 #define OP_AI_GUARD_WING (0x0010 | OP_CATEGORY_UNLISTED)
774 #define OP_EVENT_TRUE (0x0011 | OP_CATEGORY_UNLISTED)
775 #define OP_EVENT_FALSE (0x0012 | OP_CATEGORY_UNLISTED)
776 #define OP_PREVIOUS_GOAL_INCOMPLETE (0x0013 | OP_CATEGORY_UNLISTED)
777 #define OP_PREVIOUS_EVENT_INCOMPLETE (0x0014 | OP_CATEGORY_UNLISTED)
778 #define OP_AI_WARP (0x0015 | OP_CATEGORY_UNLISTED)
779 #define OP_IS_CARGO_KNOWN (0x0016 | OP_CATEGORY_UNLISTED)
780 #define OP_COND (0x0017 | OP_CATEGORY_UNLISTED)
781 #define OP_END_OF_CAMPAIGN (0x0018 | OP_CATEGORY_UNLISTED)
782 
783 // training sexps
784 #define OP_KEY_PRESSED (0x0000 | OP_CATEGORY_TRAINING)
785 #define OP_KEY_RESET (0x0001 | OP_CATEGORY_TRAINING)
786 #define OP_TARGETED (0x0002 | OP_CATEGORY_TRAINING)
787 #define OP_SPEED (0x0003 | OP_CATEGORY_TRAINING)
788 #define OP_FACING (0x0004 | OP_CATEGORY_TRAINING)
789 #define OP_ORDER (0x0005 | OP_CATEGORY_TRAINING)
790 #define OP_WAYPOINT_MISSED (0x0006 | OP_CATEGORY_TRAINING)
791 #define OP_PATH_FLOWN (0x0007 | OP_CATEGORY_TRAINING)
792 #define OP_WAYPOINT_TWICE (0x0008 | OP_CATEGORY_TRAINING)
793 #define OP_TRAINING_MSG (0x0009 | OP_CATEGORY_TRAINING)
794 #define OP_FLASH_HUD_GAUGE (0x000a | OP_CATEGORY_TRAINING)
795 #define OP_SPECIAL_CHECK (0x000b | OP_CATEGORY_TRAINING)
796 #define OP_SECONDARIES_DEPLETED (0x000c | OP_CATEGORY_TRAINING)
797 #define OP_FACING2 (0x000d | OP_CATEGORY_TRAINING)
798 #define OP_PRIMARIES_DEPLETED (0x000e | OP_CATEGORY_TRAINING) // Goober5000
799 #define OP_MISSILE_LOCKED (0x000f | OP_CATEGORY_TRAINING) // Sesquipedalian
800 #define OP_SET_TRAINING_CONTEXT_FLY_PATH (0x0010 | OP_CATEGORY_TRAINING)
801 #define OP_SET_TRAINING_CONTEXT_SPEED (0x0011 | OP_CATEGORY_TRAINING)
802 #define OP_KEY_RESET_MULTIPLE (0x0012 | OP_CATEGORY_TRAINING) // Goober5000
803 #define OP_RESET_ORDERS (0x0013 | OP_CATEGORY_TRAINING) // Karajorma
804 #define OP_QUERY_ORDERS (0x0014 | OP_CATEGORY_TRAINING) // Karajorma
805 #define OP_NODE_TARGETED (0x0015 | OP_CATEGORY_TRAINING) // FUBAR
806 #define OP_IGNORE_KEY (0x0016 | OP_CATEGORY_TRAINING) // Karajorma
807 
808 // defines for string constants
809 #define SEXP_HULL_STRING "Hull"
810 #define SEXP_SIM_HULL_STRING "Simulated Hull"
811 #define SEXP_SHIELD_STRING "Shields"
812 #define SEXP_ALL_ENGINES_STRING "<all engines>"
813 #define SEXP_ALL_TURRETS_STRING "<all turrets>"
814 #define SEXP_ARGUMENT_STRING "<argument>"
815 #define SEXP_NONE_STRING "<none>"
816 #define SEXP_ANY_STRING "<any string>"
817 #define SEXP_ALL_BANKS_STRING "<all weapon banks>"
818 
819 // macros for accessing sexpression atoms
820 #define CAR(n) ((n < 0) ? -1 : Sexp_nodes[n].first)
821 #define CDR(n) ((n < 0) ? -1 : Sexp_nodes[n].rest)
822 #define CADR(n) CAR(CDR(n))
823 // #define CTEXT(n) (Sexp_nodes[n].text)
824 char *CTEXT(int n);
825 
826 // added by Goober5000
827 #define CDDR(n) CDR(CDR(n))
828 #define CDDDR(n) CDR(CDDR(n))
829 #define CDDDDR(n) CDR(CDDDR(n))
830 #define CDDDDDR(n) CDR(CDDDDR(n))
831 #define CADDR(n) CAR(CDDR(n))
832 #define CADDDR(n) CAR(CDDDR(n))
833 #define CADDDDR(n) CAR(CDDDDR(n))
834 #define CADDDDDR(n) CAR(CDDDDDR(n))
835 
836 #define REF_TYPE_SHIP 1
837 #define REF_TYPE_WING 2
838 #define REF_TYPE_PLAYER 3
839 #define REF_TYPE_WAYPOINT 4
840 #define REF_TYPE_PATH 5 // waypoint path
841 
842 #define SRC_SHIP_ARRIVAL 0x10000
843 #define SRC_SHIP_DEPARTURE 0x20000
844 #define SRC_WING_ARRIVAL 0x30000
845 #define SRC_WING_DEPARTURE 0x40000
846 #define SRC_EVENT 0x50000
847 #define SRC_MISSION_GOAL 0x60000
848 #define SRC_SHIP_ORDER 0x70000
849 #define SRC_WING_ORDER 0x80000
850 #define SRC_DEBRIEFING 0x90000
851 #define SRC_BRIEFING 0xa0000
852 #define SRC_UNKNOWN 0xffff0000
853 #define SRC_MASK 0xffff0000
854 #define SRC_DATA_MASK 0xffff
855 
856 #define SEXP_MODE_GENERAL 0
857 #define SEXP_MODE_CAMPAIGN 1
858 
859 // defines for type field of sexp nodes. The actual type of the node will be stored in the lower
860 // two bytes of the field. The upper two bytes will be used for flags (bleah...)
861 // Be sure not to conflict with type field of sexp_variable
862 #define SEXP_NOT_USED 0
863 #define SEXP_LIST 1
864 #define SEXP_ATOM 2
865 
866 // flags for sexpressions -- masked onto the end of the type field
867 #define SEXP_FLAG_PERSISTENT (1<<31) // should this sexp node be persistant across missions
868 #define SEXP_FLAG_VARIABLE (1<<30)
869 
870 // sexp variable definitions
871 #define SEXP_VARIABLE_CHAR ('@')
872 // defines for type field of sexp_variable. Be sure not to conflict with type field of sexp_node
873 #define SEXP_VARIABLE_NUMBER (1<<4) // (0x0010)
874 #define SEXP_VARIABLE_STRING (1<<5) // (0x0020)
875 #define SEXP_VARIABLE_UNKNOWN (1<<6) // (0x0040)
876 #define SEXP_VARIABLE_NOT_USED (1<<7) // (0x0080)
877 
878 #define SEXP_VARIABLE_BLOCK (1<<0) // (0x0001)
879 /*
880 #define SEXP_VARIABLE_BLOCK_EXP (1<<1) // (0x0002)
881 #define SEXP_VARIABLE_BLOCK_HIT (1<<2) // (0x0004)
882 */
883 #define SEXP_VARIABLE_PLAYER_PERSISTENT (1<<3) // (0x0008)
884 
885 // Goober5000 - hopefully this should work and not conflict with anything
886 #define SEXP_VARIABLE_CAMPAIGN_PERSISTENT (1<<29) // (0x0100)
887 //Karajorma
888 #define SEXP_VARIABLE_NETWORK (1<<28)
889 
890 #define BLOCK_EXP_SIZE 6
891 #define INNER_RAD 0
892 #define OUTER_RAD 1
893 #define DAMAGE 2
894 #define BLAST 3
895 #define PROPAGATE 4
896 #define SHOCK_SPEED 5
897 
898 #define BLOCK_HIT_SIZE 2
899 #define SHIELD_STRENGTH 0
900 #define HULL_STRENGTH 1
901 
902 
903 #define SEXP_VARIABLE_SET (0x0100)
904 #define SEXP_VARIABLE_MODIFIED (0x0200)
905 
906 #define SEXP_TYPE_MASK(t) (t & 0x00ff)
907 #define SEXP_NODE_TYPE(n) (Sexp_nodes[n].type & 0x00ff)
908 
909 // defines for subtypes of atoms
910 #define SEXP_ATOM_LIST 0
911 #define SEXP_ATOM_OPERATOR 1
912 #define SEXP_ATOM_NUMBER 2
913 #define SEXP_ATOM_STRING 3
914 
915 // defines to short circuit evaluation when possible. Also used when goals can't
916 // be satisfied yet because ship (or wing) hasn't been created yet.
917 
918 #define SEXP_TRUE 1
919 #define SEXP_FALSE 0
920 // Goober5000: changed these to unlikely values, because now we have sexps using negative numbers
921 #define SEXP_KNOWN_FALSE -32767 //-1
922 #define SEXP_KNOWN_TRUE -32766 //-2
923 #define SEXP_UNKNOWN -32765 //-3
924 #define SEXP_NAN -32764 //-4 // not a number -- used when ships/wing part of boolean and haven't arrived yet
925 #define SEXP_NAN_FOREVER -32763 //-5 // not a number and will never change -- used to falsify boolean sexpressions
926 #define SEXP_CANT_EVAL -32762 //-6 // can't evaluate yet for whatever reason (acts like false)
927 #define SEXP_NUM_EVAL -32761 //-7 // already completed an arithmetic operation and result is stored
928 
929 // defines for check_sexp_syntax
930 #define SEXP_CHECK_NONOP_ARGS -1 // non-operator has arguments
931 #define SEXP_CHECK_OP_EXPECTED -2 // operator expected, but found data instead
932 #define SEXP_CHECK_UNKNOWN_OP -3 // unrecognized operator
933 #define SEXP_CHECK_TYPE_MISMATCH -4 // return type or data type mismatch
934 #define SEXP_CHECK_BAD_ARG_COUNT -5 // argument count in incorrect
935 #define SEXP_CHECK_UNKNOWN_TYPE -6 // unrecognized return type of data type
936 
937 #define SEXP_CHECK_INVALID_NUM -101 // number is not valid
938 #define SEXP_CHECK_INVALID_SHIP -102 // invalid ship name
939 #define SEXP_CHECK_INVALID_WING -103 // invalid wing name
940 #define SEXP_CHECK_INVALID_SUBSYS -104 // invalid subsystem
941 #define SEXP_CHECK_INVALID_IFF -105 // invalid iff string
942 #define SEXP_CHECK_INVALID_POINT -106 // invalid point
943 #define SEXP_CHECK_NEGATIVE_NUM -107 // negative number wasn't allowed
944 #define SEXP_CHECK_INVALID_SHIP_WING -108 // invalid ship/wing
945 #define SEXP_CHECK_INVALID_SHIP_TYPE -109 // invalid ship type
946 #define SEXP_CHECK_UNKNOWN_MESSAGE -110 // invalid message
947 #define SEXP_CHECK_INVALID_PRIORITY -111 // invalid priority for a message
948 #define SEXP_CHECK_INVALID_MISSION_NAME -112 // invalid mission name
949 #define SEXP_CHECK_INVALID_GOAL_NAME -113 // invalid goal name
950 #define SEXP_CHECK_INVALID_LEVEL -114 // mission level too high in campaign
951 #define SEXP_CHECK_INVALID_MSG_SOURCE -115 // invalid 'who-from' for a message being sent
952 #define SEXP_CHECK_INVALID_DOCKER_POINT -116
953 #define SEXP_CHECK_INVALID_DOCKEE_POINT -117
954 #define SEXP_CHECK_ORDER_NOT_ALLOWED -118 // ship goal (order) isn't allowed for given ship
955 #define SEXP_CHECK_DOCKING_NOT_ALLOWED -119
956 #define SEXP_CHECK_NUM_RANGE_INVALID -120
957 #define SEXP_CHECK_INVALID_EVENT_NAME -121
958 #define SEXP_CHECK_INVALID_SKILL_LEVEL -122
959 #define SEXP_CHECK_INVALID_MEDAL_NAME -123
960 #define SEXP_CHECK_INVALID_WEAPON_NAME -124
961 #define SEXP_CHECK_INVALID_SHIP_CLASS_NAME -125
962 #define SEXP_CHECK_INVALID_GAUGE_NAME -126
963 #define SEXP_CHECK_INVALID_JUMP_NODE -127
964 #define SEXP_CHECK_INVALID_VARIABLE -128
965 #define SEXP_CHECK_INVALID_AI_CLASS -129
966 #define SEXP_CHECK_UNKNOWN_ERROR -130
967 #define SEXP_CHECK_INVALID_SUPPORT_SHIP_CLASS -131
968 #define SEXP_CHECK_INVALID_SHIP_WITH_BAY -132
969 #define SEXP_CHECK_INVALID_ARRIVAL_LOCATION -133
970 #define SEXP_CHECK_INVALID_DEPARTURE_LOCATION -134
971 #define SEXP_CHECK_INVALID_ARRIVAL_ANCHOR_ALL -135
972 #define SEXP_CHECK_INVALID_SOUNDTRACK_NAME -136
973 #define SEXP_CHECK_INVALID_INTEL_NAME -137
974 #define SEXP_CHECK_INVALID_SKYBOX_NAME -138
975 #define SEXP_CHECK_INVALID_PERSONA_NAME -139
976 #define SEXP_CHECK_INVALID_VARIABLE_TYPE -140
977 #define SEXP_CHECK_INVALID_SUBSYS_TYPE -141
978 #define SEXP_CHECK_INVALID_FONT -142
979 #define SEXP_CHECK_INVALID_HUD_ELEMENT -143
980 #define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT -144
981 #define SEXP_CHECK_INVALID_SOUND_ENVIRONMENT_OPTION -145
982 #define SEXP_CHECK_INVALID_EXPLOSION_OPTION -146
983 #define SEXP_CHECK_INVALID_SHIP_EFFECT -147
984 #define SEXP_CHECK_INVALID_TURRET_TARGET_ORDER -148
985 #define SEXP_CHECK_INVALID_ARMOR_TYPE -149
986 #define SEXP_CHECK_INVALID_DAMAGE_TYPE -150
987 #define SEXP_CHECK_INVALID_TARGET_PRIORITIES -151
988 #define SEXP_CHECK_INVALID_AUDIO_VOLUME_OPTION -152
989 #define SEXP_CHECK_INVALID_HUD_GAUGE -153
990 #define SEXP_CHECK_INVALID_ANIMATION_TYPE -154
991 #define SEXP_CHECK_INVALID_MISSION_MOOD -155
992 #define SEXP_CHECK_INVALID_SHIP_FLAG -156
993 #define SEXP_CHECK_INVALID_TEAM_COLOR -157
994 #define SEXP_CHECK_INVALID_SKYBOX_FLAG -158
995 #define SEXP_CHECK_INVALID_GAME_SND -159
996 #define SEXP_CHECK_INVALID_SSM_CLASS -160
997 
998 #define TRAINING_CONTEXT_SPEED (1<<0)
999 #define TRAINING_CONTEXT_FLY_PATH (1<<1)
1000 
1001 // numbers used in special_training_check() function
1002 #define SPECIAL_CHECK_TRAINING_FAILURE 2000
1003 
1004 typedef struct sexp_ai_goal_link {
1005  int ai_goal;
1006  int op_code;
1008 
1009 #define SEXP_CONDITIONAL_OPERATOR (1<<0)
1010 #define SEXP_ARGUMENT_OPERATOR (1<<1)
1011 #define SEXP_ACTION_OPERATOR (1<<2)
1012 #define SEXP_ARITHMETIC_OPERATOR (1<<3)
1013 #define SEXP_BOOLEAN_OPERATOR (1<<4)
1014 #define SEXP_INTEGER_OPERATOR (1<<5)
1015 #define SEXP_GOAL_OPERATOR (1<<6)
1016 
1017 #define SEXP_TRIGGER_OPERATOR ( SEXP_ARITHMETIC_OPERATOR | SEXP_BOOLEAN_OPERATOR | SEXP_INTEGER_OPERATOR )
1018 
1019 typedef struct sexp_oper {
1020  char *text;
1021  int value;
1022  int min, max;
1023  int type;
1024 } sexp_oper;
1025 
1026 typedef struct sexp_node {
1028  int op_index; // the index in the Operators array for the operator at this node (or -1 if not an operator)
1029  int type; // atom, list, or not used
1030  int subtype; // type of atom or list?
1031  int first; // if first parameter is sexp, index into Sexp_nodes
1032  int rest; // index into Sexp_nodes of rest of parameters
1033  int value; // known to be true, known to be false, or not known
1034  int flags; // Goober5000
1035 } sexp_node;
1036 
1037 // Goober5000
1038 #define SNF_ARGUMENT_VALID (1<<0)
1039 #define SNF_ARGUMENT_SELECT (1<<1)
1040 #define SNF_DEFAULT_VALUE SNF_ARGUMENT_VALID
1041 
1042 typedef struct sexp_variable {
1043  int type;
1046 } sexp_variable;
1047 
1048 
1049 #define ARG_ITEM_F_DUP (1<<0)
1050 
1051 // Goober5000 - adapted from sexp_list_item in Sexp_tree.h
1053 {
1054  public:
1055  char *text;
1057  int flags;
1059 
1060  arg_item() : text(NULL), next(NULL), flags(0), nesting_level(0) {}
1061  void add_data(char *str);
1062  void add_data_dup(char *str);
1063  void add_data_set_dup(char *str);
1064  void expunge();
1065  int is_empty();
1066  arg_item *get_next();
1067  void clear_nesting_level();
1068 };
1069 
1070 
1071 // next define used to eventually mark a directive as satisfied even though there may be more
1072 // waves for a wing. bascially a hack for the directives display.
1073 #define DIRECTIVE_WING_ZERO -999
1074 
1075 // Goober5000 - it's dynamic now
1076 //extern sexp_node Sexp_nodes[MAX_SEXP_NODES];
1077 
1078 extern int Num_sexp_nodes;
1079 extern sexp_node *Sexp_nodes;
1080 
1083 
1084 extern sexp_oper Operators[];
1085 extern int Num_operators;
1087 extern int Directive_count;
1088 extern int Sexp_useful_number; // a variable to pass useful info in from external modules
1089 extern int Training_context;
1090 extern int Training_context_speed_min;
1091 extern int Training_context_speed_max;
1092 extern int Training_context_speed_set;
1096 extern int Training_context_at_waypoint;
1097 extern float Training_context_distance;
1098 extern int Players_target;
1099 extern int Players_mlocked;
1101 extern int Players_target_timestamp;
1102 extern int Players_mlocked_timestamp;
1103 extern int Sexp_clipboard; // used by Fred
1104 
1106 
1107 
1108 // event log stuff
1112 
1113 extern void init_sexp();
1114 extern int alloc_sexp(char *text, int type, int subtype, int first, int rest);
1115 extern int find_free_sexp();
1116 extern int free_one_sexp(int num);
1117 extern int free_sexp(int num);
1118 extern int free_sexp2(int num);
1119 extern int dup_sexp_chain(int node);
1120 extern int cmp_sexp_chains(int node1, int node2);
1121 extern int find_sexp_list(int num);
1122 extern int find_parent_operator(int num);
1123 extern int is_sexp_top_level( int node );
1124 
1125 // Goober5000 - renamed these to be more clear, to prevent bugs :p
1126 extern int get_operator_index(const char *token);
1127 extern int get_operator_const(const char *token);
1128 
1129 extern int check_sexp_syntax(int node, int return_type = OPR_BOOL, int recursive = 0, int *bad_node = 0 /*NULL*/, int mode = 0);
1130 extern int get_sexp_main(void); // Returns start node
1131 extern int run_sexp(const char* sexpression); // debug and lua sexps
1132 extern int stuff_sexp_variable_list();
1133 extern int eval_sexp(int cur_node, int referenced_node = -1);
1134 extern int is_sexp_true(int cur_node, int referenced_node = -1);
1135 extern int query_operator_return_type(int op);
1136 extern int query_operator_argument_type(int op, int argnum);
1137 extern void update_sexp_references(const char *old_name, const char *new_name);
1138 extern void update_sexp_references(const char *old_name, const char *new_name, int format);
1139 extern int query_referenced_in_sexp(int mode, char *name, int *node);
1140 extern int verify_vector(char *text);
1141 extern void skip_white(char **str);
1142 extern int validate_float(char **str);
1143 extern int build_sexp_string(SCP_string &accumulator, int cur_node, int level, int mode);
1144 extern int sexp_query_type_match(int opf, int opr);
1145 extern char *sexp_error_message(int num);
1146 extern int count_free_sexp_nodes();
1147 
1148 // Goober5000
1149 void do_action_for_each_special_argument(int cur_node);
1152 
1153 // functions to change the attributes of an sexpression tree to persistent or not persistent
1154 extern void sexp_unmark_persistent( int n );
1155 extern void sexp_mark_persistent( int n );
1156 extern int verify_sexp_tree(int node);
1157 extern int query_sexp_ai_goal_valid(int sexp_ai_goal, int ship);
1158 int query_node_in_sexp(int node, int sexp);
1159 void flush_sexp_tree(int node);
1160 
1161 // sexp_variable
1162 void sexp_modify_variable(char *text, int index, bool sexp_callback = true);
1163 int get_index_sexp_variable_from_node (int node);
1164 int get_index_sexp_variable_name(const char *text);
1165 int get_index_sexp_variable_name(SCP_string &text); // Goober5000
1166 int get_index_sexp_variable_name_special(const char *text); // Goober5000
1167 int get_index_sexp_variable_name_special(SCP_string &text, size_t startpos); // Goober5000
1168 bool sexp_replace_variable_names_with_values(char *text, int max_len); // Goober5000
1169 bool sexp_replace_variable_names_with_values(SCP_string &text); // Goober5000
1170 int get_nth_variable_index(int nth, int variable_type); // Karajorma
1171 int sexp_variable_count();
1172 int sexp_campaign_persistent_variable_count(); // Goober5000
1173 int sexp_variable_typed_count(int sexp_variables_index, int variable_type); // Karajorma
1174 void sexp_variable_delete(int index);
1175 void sexp_variable_sort();
1176 void sexp_fred_modify_variable(const char *text, const char *var_name, int index, int type);
1177 int sexp_add_variable(const char *text, const char *var_name, int type, int index=-1);
1179 int num_block_variables();
1181 
1182 // Karajorma
1183 void set_primary_ammo (int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1, bool update=true);
1184 void set_secondary_ammo (int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1, bool update=true);
1185 
1186 // DahBlount - Similar to Karajorma's functions, but for turrets
1187 void set_turret_primary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo, bool update = true);
1188 void set_turret_secondary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo, bool update = true);
1189 
1190 // menu and category stuff
1191 extern int get_sexp_id(char *sexp_name);
1192 extern int get_category(int sexp_id);
1193 extern int category_of_subcategory(int subcategory_id);
1194 extern int get_subcategory(int sexp_id);
1195 
1196 // Goober5000
1197 extern void sexp_music_close();
1198 
1199 // Goober5000
1200 extern int Knossos_warp_ani_used;
1201 
1202 //WMC - moved here from FRED
1203 typedef struct sexp_help_struct {
1204  int id;
1205  char *help;
1207 
1208 extern sexp_help_struct Sexp_help[];
1209 
1210 typedef struct op_menu_struct {
1211  char *name;
1212  int id;
1213 } op_menu_struct;
1214 
1215 extern op_menu_struct op_menu[];
1216 extern op_menu_struct op_submenu[];
1217 
1218 extern int Num_sexp_help;
1219 extern int Num_op_menus;
1220 extern int Num_submenus;
1221 
1222 //WMC
1223 //Outputs sexp.html file
1224 bool output_sexps(char *filepath);
1225 
1226 void multi_sexp_eval();
1227 
1228 // Goober5000/Taylor
1230 extern char *Sound_environment_option[];
1231 
1232 // Goober5000
1233 extern int Num_explosion_options;
1234 extern char *Explosion_option[];
1235 
1236 //The E
1237 extern int Num_adjust_audio_options;
1238 extern char *Adjust_audio_options[];
1239 
1240 extern int Num_skybox_flags;
1241 extern char *Skybox_flags[];
1242 
1252 extern int Sexp_hud_display_warpout;
1253 
1254 //Needed for scripting access to ship effects
1255 int get_effect_from_name(char* name);
1256 
1258 
1259 #endif
void add_data(char *str)
Definition: sexp.cpp:938
bool has_special_explosion_block_index(ship *shipp, int *index)
Definition: sexp.cpp:3703
GLenum GLsizei GLenum format
Definition: Gl.h:1509
int is_sexp_top_level(int node)
Definition: sexp.cpp:1515
SCP_string sexp
Definition: sexp.cpp:25556
int type
Definition: sexp.h:1023
GLuint64EXT * result
Definition: Glext.h:10775
int query_node_in_sexp(int node, int sexp)
Definition: sexp.cpp:1437
int build_sexp_string(SCP_string &accumulator, int cur_node, int level, int mode)
Definition: sexp.cpp:3839
void flush_sexp_tree(int node)
Definition: sexp.cpp:1342
bool sexp_replace_variable_names_with_values(char *text, int max_len)
Definition: sexp.cpp:29395
int verify_vector(char *text)
Definition: sexp.cpp:28455
int get_nth_variable_index(int nth, int variable_type)
Definition: sexp.cpp:29471
int is_empty()
Definition: sexp.cpp:1030
void sexp_modify_variable(char *text, int index, bool sexp_callback=true)
Definition: sexp.cpp:28972
char text[TOKEN_LENGTH]
Definition: sexp.h:1044
int max
Definition: sexp.h:1022
void set_secondary_ammo(int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1, bool update=true)
Definition: sexp.cpp:16131
int value
Definition: sexp.h:1021
int rest
Definition: sexp.h:1032
int sexp_campaign_persistent_variable_count()
Definition: sexp.cpp:29506
GLuint index
Definition: Glext.h:5608
int get_operator_const(const char *token)
Definition: sexp.cpp:1595
int Directive_count
Definition: sexp.cpp:826
char * Sound_environment_option[]
Definition: sexp.cpp:868
SCP_vector< SCP_string > * Current_event_log_variable_buffer
Definition: sexp.cpp:935
int Training_context_speed_set
Definition: sexp.cpp:833
arg_item * get_next()
Definition: sexp.cpp:985
int verify_sexp_tree(int node)
Definition: sexp.cpp:1353
int special_argument_appears_in_sexp_tree(int node)
Definition: sexp.cpp:8192
int Training_context_speed_timestamp
Definition: sexp.cpp:836
int Num_submenus
Definition: sexp.cpp:33852
int dup_sexp_chain(int node)
Definition: sexp.cpp:1379
int Training_context
Definition: sexp.cpp:832
char * name
Definition: sexp.h:1211
void update_sexp_references(const char *old_name, const char *new_name)
Definition: sexp.cpp:28300
int Sexp_useful_number
Definition: sexp.cpp:827
bool generate_special_explosion_block_variables()
Definition: sexp.cpp:3726
int Players_mlocked_timestamp
Definition: sexp.cpp:857
GLenum mode
Definition: Glext.h:5794
int sexp_variable_count()
Definition: sexp.cpp:29490
int Players_target_timestamp
Definition: sexp.cpp:856
int Players_mlocked
Definition: sexp.cpp:854
int get_subcategory(int sexp_id)
Definition: sexp.cpp:29635
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
Definition: vmallocator.h:21
int category_of_subcategory(int subcategory_id)
Definition: sexp.cpp:29623
ship * shipp
Definition: lua.cpp:9162
int Sexp_hud_display_warpout
Definition: sexp.cpp:9964
void set_primary_ammo(int ship_index, int requested_bank, int requested_ammo, int rearm_limit=-1, bool update=true)
Definition: sexp.cpp:15983
int check_sexp_syntax(int node, int return_type=OPR_BOOL, int recursive=0, int *bad_node=0, int mode=0)
Definition: sexp.cpp:1658
GLenum type
Definition: Gl.h:1492
char * text
Definition: sexp.h:1055
int query_referenced_in_sexp(int mode, char *name, int *node)
Definition: sexp.cpp:28382
int special_argument_appears_in_sexp_list(int node)
Definition: sexp.cpp:8214
int Num_op_menus
Definition: sexp.cpp:33851
char * Skybox_flags[]
Definition: sexp.cpp:817
op_menu_struct op_submenu[]
Definition: sexp.cpp:33815
int Num_explosion_options
Definition: sexp.cpp:887
void expunge()
Definition: sexp.cpp:996
int min
Definition: sexp.h:1022
int Knossos_warp_ani_used
Definition: fireballs.cpp:33
int Num_operators
Definition: sexp.cpp:829
int subtype
Definition: lua.cpp:9763
int get_operator_index(const char *token)
Definition: sexp.cpp:1561
char * CTEXT(int n)
Definition: sexp.cpp:28821
struct sexp_ai_goal_link sexp_ai_goal_link
void sexp_variable_sort()
Definition: sexp.cpp:29577
char * sexp_error_message(int num)
Definition: sexp.cpp:28570
int find_parent_operator(int num)
Definition: sexp.cpp:1476
struct sexp_help_struct sexp_help_struct
int subtype
Definition: sexp.h:1030
arg_item()
Definition: sexp.h:1060
int flags
Definition: sexp.h:1057
SCP_vector< SCP_string > * Current_event_log_argument_buffer
Definition: sexp.cpp:936
int Players_target
Definition: sexp.cpp:853
int find_free_sexp()
Definition: sexp.cpp:1200
int sexp_variable_typed_count(int sexp_variables_index, int variable_type)
Definition: sexp.cpp:29522
int op_index
Definition: sexp.h:1028
int free_sexp2(int num)
Definition: sexp.cpp:1321
op_menu_struct op_menu[]
Definition: sexp.cpp:33799
sexp_oper Operators[]
Definition: sexp.cpp:118
int get_index_sexp_variable_from_node(int node)
Definition: sexp.cpp:29303
int find_sexp_list(int num)
Definition: sexp.cpp:1459
Definition: ship.h:534
int get_index_sexp_variable_name(const char *text)
Definition: sexp.cpp:29324
void skip_white(char **str)
Definition: sexp.cpp:28504
int free_sexp(int num)
Definition: sexp.cpp:1281
int validate_float(char **str)
Definition: sexp.cpp:28511
int type
Definition: sexp.h:1043
GLclampd n
Definition: Glext.h:7286
waypoint_list * Training_context_path
Definition: sexp.cpp:837
int get_sexp_id(char *sexp_name)
Definition: sexp.cpp:29600
int Training_context_goal_waypoint
Definition: sexp.cpp:838
float Training_context_distance
Definition: sexp.cpp:840
int query_operator_return_type(int op)
Definition: sexp.cpp:25589
void do_action_for_each_special_argument(int cur_node)
Definition: sexp.cpp:8169
int get_sexp_main(void)
Definition: sexp.cpp:25494
SCP_vector< int > Current_sexp_operator
Definition: sexp.cpp:851
int Training_context_speed_min
Definition: sexp.cpp:834
int flags
Definition: sexp.h:1034
int sexp_add_variable(const char *text, const char *var_name, int type, int index=-1)
Definition: sexp.cpp:28929
GLuint const GLchar * name
Definition: Glext.h:5608
int cmp_sexp_chains(int node1, int node2)
Definition: sexp.cpp:1408
void set_turret_primary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo, bool update=true)
Definition: sexp.cpp:18141
int query_sexp_ai_goal_valid(int sexp_ai_goal, int ship)
Definition: sexp.cpp:28771
#define TOKEN_LENGTH
Definition: globals.h:41
void sexp_fred_modify_variable(const char *text, const char *var_name, int index, int type)
Definition: sexp.cpp:29289
ship_subsys * Players_targeted_subsys
Definition: sexp.cpp:855
sexp_variable Block_variables[MAX_SEXP_VARIABLES]
Definition: sexp.cpp:847
GLuint GLuint num
Definition: Glext.h:9089
void sexp_unmark_persistent(int n)
Definition: sexp.cpp:1242
int Locked_sexp_false
Definition: sexp.cpp:828
int stuff_sexp_variable_list()
Definition: sexp.cpp:3590
void clear_nesting_level()
Definition: sexp.cpp:1013
int Training_context_at_waypoint
Definition: sexp.cpp:839
struct sexp_oper sexp_oper
int sexp_query_type_match(int opf, int opr)
Definition: sexp.cpp:28538
int query_operator_argument_type(int op, int argnum)
Definition: sexp.cpp:26169
void add_data_set_dup(char *str)
Definition: sexp.cpp:969
int get_category(int sexp_id)
Definition: sexp.cpp:29611
struct op_menu_struct op_menu_struct
GLint first
Definition: Gl.h:1491
int type
Definition: sexp.h:1029
char * Explosion_option[]
Definition: sexp.cpp:886
int Num_skybox_flags
Definition: sexp.cpp:816
int Training_context_speed_max
Definition: sexp.cpp:835
arg_item * next
Definition: sexp.h:1056
void multi_sexp_eval()
Definition: sexp.cpp:25196
char * Adjust_audio_options[]
Definition: sexp.cpp:872
struct sexp_node sexp_node
int Locked_sexp_true
Definition: sexp.cpp:828
int first
Definition: sexp.h:1031
int free_one_sexp(int num)
Definition: sexp.cpp:1262
void set_turret_secondary_ammo(ship_subsys *turret, int requested_bank, int requested_ammo, bool update=true)
Definition: sexp.cpp:18290
int Num_sexp_nodes
Definition: sexp.cpp:843
sexp_help_struct Sexp_help[]
Definition: sexp.cpp:30083
int value
Definition: sexp.h:1033
char variable_name[TOKEN_LENGTH]
Definition: sexp.h:1045
void sexp_variable_delete(int index)
Definition: sexp.cpp:29545
SCP_vector< SCP_string > * Current_event_log_buffer
Definition: sexp.cpp:934
sexp_variable Sexp_variables[MAX_SEXP_VARIABLES]
Definition: sexp.cpp:846
int get_effect_from_name(char *name)
Definition: sexp.cpp:22454
int Num_sound_environment_options
Definition: sexp.cpp:869
int Sexp_clipboard
Definition: sexp.cpp:831
int num_block_variables()
Definition: sexp.cpp:3777
int is_sexp_true(int cur_node, int referenced_node=-1)
Definition: sexp.cpp:22665
int nesting_level
Definition: sexp.h:1058
int count_free_sexp_nodes()
Definition: sexp.cpp:1176
int alloc_sexp(char *text, int type, int subtype, int first, int rest)
Definition: sexp.cpp:1123
char * text
Definition: sexp.h:1020
GLint level
Definition: Glext.h:5180
sexp_node * Sexp_nodes
Definition: sexp.cpp:844
int get_index_sexp_variable_name_special(const char *text)
Definition: sexp.cpp:29359
void add_data_dup(char *str)
Definition: sexp.cpp:953
void maybe_write_to_event_log(int result)
Definition: sexp.cpp:22769
void sexp_mark_persistent(int n)
Definition: sexp.cpp:1220
char text[TOKEN_LENGTH]
Definition: sexp.h:1027
int run_sexp(const char *sexpression)
Definition: sexp.cpp:25528
struct sexp_variable sexp_variable
void init_sexp()
Definition: sexp.cpp:1090
char * help
Definition: sexp.h:1205
bool output_sexps(char *filepath)
Definition: sexp.cpp:33901
#define OPR_BOOL
Definition: sexp.h:119
int Num_sexp_help
Definition: sexp.cpp:33850
#define MAX_SEXP_VARIABLES
Definition: sexp.h:23
void sexp_music_close()
Definition: sexp.cpp:10183
int Num_adjust_audio_options
Definition: sexp.cpp:873
int eval_sexp(int cur_node, int referenced_node=-1)
Definition: sexp.cpp:22894