Today on: Axem does tiny and trivial coding with sexps. (Some cleanup is probably needed since this patch was created before a few other sexps were added)
1:
Deprecates hud-set-active-gauge and hud-activate-gauge-type in favor of hud-set-custom-gauge-active and hud-set-retail-gauge active, which are clearer to understand and now accept INT_MAX number of gauges, instead of just 1.
Index: code/fred2/sexp_tree.cpp
===================================================================
--- code/fred2/sexp_tree.cpp (revision 9258)
+++ code/fred2/sexp_tree.cpp (working copy)
@@ -827,6 +827,8 @@
// unlike the above operators, these are deprecated
case OP_HITS_LEFT_SUBSYSTEM:
case OP_CUTSCENES_SHOW_SUBTITLE:
+ case OP_HUD_GAUGE_SET_ACTIVE:
+ case OP_HUD_ACTIVATE_GAUGE_TYPE:
j = Num_op_menus; // don't allow these operators to be visible
break;
}
@@ -865,6 +867,8 @@
// unlike the above operators, these are deprecated
case OP_HITS_LEFT_SUBSYSTEM:
case OP_CUTSCENES_SHOW_SUBTITLE:
+ case OP_HUD_GAUGE_SET_ACTIVE:
+ case OP_HUD_ACTIVATE_GAUGE_TYPE:
j = Num_submenus; // don't allow these operators to be visible
break;
}
Index: code/parse/sexp.cpp
===================================================================
--- code/parse/sexp.cpp (revision 9258)
+++ code/parse/sexp.cpp (working copy)
@@ -554,6 +554,8 @@
//HUD Sub-Category
{ "hud-disable", OP_HUD_DISABLE, 1, 1 }, // Goober5000
{ "hud-disable-except-messages", OP_HUD_DISABLE_EXCEPT_MESSAGES, 1, 1 }, // Goober5000
+ { "hud-set-custom-gauge-active", OP_HUD_SET_CUSTOM_GAUGE_ACTIVE, 2, INT_MAX },
+ { "hud-set-retail-gauge-active", OP_HUD_SET_RETAIL_GAUGE_ACTIVE, 2, INT_MAX},
{ "hud-set-text", OP_HUD_SET_TEXT, 2, 2 }, //WMCoolmon
{ "hud-set-text-num", OP_HUD_SET_TEXT_NUM, 2, 2 }, //WMCoolmon
{ "hud-set-message", OP_HUD_SET_MESSAGE, 2, 2 }, //The E
@@ -561,9 +563,9 @@
{ "hud-set-frame", OP_HUD_SET_FRAME, 2, 2 }, //WMCoolmon
{ "hud-set-coords", OP_HUD_SET_COORDS, 3, 3 }, //WMCoolmon
{ "hud-set-color", OP_HUD_SET_COLOR, 4, 4 }, //WMCoolmon
- { "hud-display-gauge", OP_HUD_DISPLAY_GAUGE, 2, 2 },
- { "hud-gauge-set-active", OP_HUD_GAUGE_SET_ACTIVE, 2, 2 },
- { "hud-activate-gauge-type", OP_HUD_ACTIVATE_GAUGE_TYPE, 2, 2},
+ { "hud-display-gauge", OP_HUD_DISPLAY_GAUGE, 2, 2 },
+ { "hud-gauge-set-active", OP_HUD_GAUGE_SET_ACTIVE, 2, 2 }, //Deprecated
+ { "hud-activate-gauge-type", OP_HUD_ACTIVATE_GAUGE_TYPE, 2, 2}, //Deprecated
{ "hud-clear-messages", OP_HUD_CLEAR_MESSAGES, 0, 0}, // swifty
{ "hud-set-max-targeting-range", OP_HUD_SET_MAX_TARGETING_RANGE, 1, 1 }, // Goober5000
@@ -9710,6 +9712,23 @@
}
}
+void sexp_hud_set_custom_gauge_active(int node) {
+ HudGauge* hg;
+ bool activate = (is_sexp_true(node) > 0);
+ node = CDR(node);
+ for(; node >= 0; node = CDR(node)) {
+
+ char* name = CTEXT(node);
+ hg = hud_get_gauge(name);
+
+ if (hg != NULL) {
+ hg->updateActive(activate);
+ }
+
+ }
+
+}
+
int hud_gauge_type_lookup(char* name) {
for(int i = 0; i < Num_hud_gauge_types; i++) {
if(!stricmp(name, Hud_gauge_types[i].name))
@@ -9741,6 +9760,37 @@
}
}
+void sexp_hud_set_retail_gauge_active(int node) {
+
+ bool activate = (is_sexp_true(node) > 0);
+ node = CDR(node);
+
+ for(; node >= 0; node = CDR(node)) {
+
+ int config_type = hud_gauge_type_lookup(CTEXT(node));
+
+ if (config_type != -1) {
+ if(Ship_info[Player_ship->ship_info_index].hud_gauges.size() > 0) {
+ size_t num_gauges = Ship_info[Player_ship->ship_info_index].hud_gauges.size();
+
+ for(size_t i = 0; i < num_gauges; i++) {
+ if (Ship_info[Player_ship->ship_info_index].hud_gauges[i]->getObjectType() == config_type)
+ Ship_info[Player_ship->ship_info_index].hud_gauges[i]->updateSexpOverride(!activate);
+ }
+ } else {
+ size_t num_gauges = default_hud_gauges.size();
+
+ for(size_t i = 0; i < num_gauges; i++) {
+ if (default_hud_gauges[i]->getObjectType() == config_type)
+ default_hud_gauges[i]->updateSexpOverride(!activate);
+ }
+ }
+ }
+
+ }
+
+}
+
void multi_sexp_hud_display_gauge()
{
int show_for;
@@ -22986,6 +23036,11 @@
sexp_hud_gauge_set_active(node);
break;
+ case OP_HUD_SET_CUSTOM_GAUGE_ACTIVE:
+ sexp_val = SEXP_TRUE;
+ sexp_hud_set_custom_gauge_active(node);
+ break;
+
case OP_HUD_CLEAR_MESSAGES:
sexp_val = SEXP_TRUE;
sexp_hud_clear_messages();
@@ -22996,6 +23051,11 @@
sexp_hud_activate_gauge_type(node);
break;
+ case OP_HUD_SET_RETAIL_GAUGE_ACTIVE:
+ sexp_val = SEXP_TRUE;
+ sexp_hud_set_retail_gauge_active(node);
+ break;
+
case OP_ADD_TO_COLGROUP:
sexp_val = SEXP_TRUE;
sexp_manipulate_colgroup(node, true);
@@ -23982,6 +24042,8 @@
case OP_SET_THRUSTERS:
case OP_SET_PLAYER_THROTTLE_SPEED:
case OP_DEBUG:
+ case OP_HUD_SET_CUSTOM_GAUGE_ACTIVE:
+ case OP_HUD_SET_RETAIL_GAUGE_ACTIVE:
return OPR_NULL;
case OP_AI_CHASE:
@@ -25944,6 +26006,18 @@
else
return OPF_BOOL;
+ case OP_HUD_SET_CUSTOM_GAUGE_ACTIVE:
+ if (argnum == 0)
+ return OPF_BOOL;
+ else
+ return OPF_HUD_GAUGE;
+
+ case OP_HUD_SET_RETAIL_GAUGE_ACTIVE:
+ if (argnum == 0)
+ return OPF_BOOL;
+ else
+ return OPF_HUD_GAUGE;
+
case OP_GET_COLGROUP_ID:
return OPF_SHIP;
@@ -27426,6 +27500,8 @@
case OP_HUD_DISABLE:
case OP_HUD_DISABLE_EXCEPT_MESSAGES:
+ case OP_HUD_SET_CUSTOM_GAUGE_ACTIVE:
+ case OP_HUD_SET_RETAIL_GAUGE_ACTIVE:
case OP_HUD_SET_TEXT:
case OP_HUD_SET_TEXT_NUM:
case OP_HUD_SET_MESSAGE:
@@ -31031,7 +31107,7 @@
"\t2:\tText that will be displayed. This text will be treated as directive text, meaning that references to mapped keys will be replaced with the user's preferences.\r\n"
},
- {OP_HUD_GAUGE_SET_ACTIVE, "hud-gauge-set-active\r\n"
+ {OP_HUD_GAUGE_SET_ACTIVE, "hud-gauge-set-active (deprecated)\r\n"
"\tActivates or deactivates a given custom gauge."
"Takes 2 Arguments...\r\n"
"\t1:\tHUD Gauge name\r\n"
@@ -31043,13 +31119,27 @@
"Takes no arguments\r\n"
},
- {OP_HUD_ACTIVATE_GAUGE_TYPE, "hud-activate-gauge-type\r\n"
+ {OP_HUD_ACTIVATE_GAUGE_TYPE, "hud-activate-gauge-type (deprecated)\r\n"
"\tActivates or deactivates all hud gauges of a given type."
"Takes 2 Arguments...\r\n"
"\t1:\tGauge Type\r\n"
"\t2:\tBoolean, whether or not to display this gauge\r\n"
},
+ {OP_HUD_SET_CUSTOM_GAUGE_ACTIVE, "hud-set-custom-gauge-active\r\n"
+ "\tActivates or deactivates a custom hud gauge defined in hud_gauges.tbl."
+ "Takes 2 Arguments...\r\n"
+ "\t1:\tBoolean, whether or not to display this gauge\r\n"
+ "\tRest:\tHUD Gauge name\r\n"
+ },
+
+ {OP_HUD_SET_RETAIL_GAUGE_ACTIVE, "hud-set-custom-gauge-active\r\n"
+ "\tActivates or deactivates a retail hud gauge grouping."
+ "Takes 2 Arguments...\r\n"
+ "\t1:\tBoolean, whether or not to display this gauge\r\n"
+ "\tRest:\tHUD Gauge Group name\r\n"
+ },
+
{OP_ADD_TO_COLGROUP, "add-to-collision-group\r\n"
"\tAdds a ship to the specified collision group(s). Note that there are 32 collision groups,\r"
"\tand that an object may be in several collision groups at the same time\r\n"
Index: code/parse/sexp.h
===================================================================
--- code/parse/sexp.h (revision 9258)
+++ code/parse/sexp.h (working copy)
@@ -643,8 +643,8 @@
#define OP_SHIP_SUBSYS_VANISHED (0x00e1 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
#define OP_SHIP_SUBSYS_IGNORE_IF_DEAD (0x00e2 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // FUBAR
#define OP_HUD_SET_DIRECTIVE (0x00e3 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
-#define OP_HUD_GAUGE_SET_ACTIVE (0x00e4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
-#define OP_HUD_ACTIVATE_GAUGE_TYPE (0x00e5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E
+#define OP_HUD_GAUGE_SET_ACTIVE (0x00e4 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated
+#define OP_HUD_ACTIVATE_GAUGE_TYPE (0x00e5 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // The E - slightly deprecated
#define OP_SET_OBJECT_ORIENTATION (0x00e6 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
#define OP_STRING_CONCATENATE (0x00e7 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
#define OP_INT_TO_STRING (0x00e8 | OP_CATEGORY_CHANGE | OP_NONCAMPAIGN_FLAG) // Goober5000
@@ -702,7 +702,9 @@
#define OP_DEBUG (0x0017 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
#define OP_SET_MISSION_MOOD (0x0018 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
#define OP_NAV_SELECT (0x0019 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
-#define OP_NAV_DESELECT (0x0020 | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
+#define OP_NAV_DESELECT (0x001A | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
+#define OP_HUD_SET_CUSTOM_GAUGE_ACTIVE (0x001B | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem
+#define OP_HUD_SET_RETAIL_GAUGE_ACTIVE (0x001C | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E, just revamped a bit by Axem
// defined for AI goals
#define OP_AI_CHASE (0x0000 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
2.
Adds show-subtitle-message, accepts an ingame message as a subtitle parameter, allowing the FREDder to break the 32 character limit and making his subtitling a lot easier.
Index: sexp.cpp
===================================================================
--- sexp.cpp (revision 9296)
+++ sexp.cpp (working copy)
@@ -609,6 +609,7 @@
{ "reset-camera", OP_CUTSCENES_RESET_CAMERA, 0, 1, },
{ "show-subtitle", OP_CUTSCENES_SHOW_SUBTITLE, 4, 13, },
{ "show-subtitle-text", OP_CUTSCENES_SHOW_SUBTITLE_TEXT, 6, 13, },
+ { "show-subtitle-message", OP_CUTSCENES_SHOW_SUBTITLE_MSG, 6, 13, },
{ "show-subtitle-image", OP_CUTSCENES_SHOW_SUBTITLE_IMAGE, 8, 10, },
{ "clear-subtitles", OP_CLEAR_SUBTITLES, 0, 0},
{ "lock-perspective", OP_CUTSCENES_FORCE_PERSPECTIVE, 1, 2, },
@@ -20598,6 +20599,179 @@
}
+void sexp_show_subtitle_msg(int node)
+{
+ int n = node;
+ char* text = CTEXT(n);
+ char message[MESSAGE_LENGTH];
+
+ for (int i = 0; i < Num_messages; i++) {
+ if ( !stricmp(text, Messages[i].name) ) {
+
+ strcpy_s(message, Messages[i].message);
+
+ sexp_replace_variable_names_with_values(message, MESSAGE_LENGTH);
+
+ break;
+ }
+
+ }
+
+ n = CDR(n);
+
+ int x_pct = eval_num(n);
+ n = CDR(n);
+
+ int y_pct = eval_num(n);
+ n = CDR(n);
+
+ bool center_x = is_sexp_true(n) != 0;
+ n = CDR(n);
+
+ bool center_y = is_sexp_true(n) != 0;
+ n = CDR(n);
+
+ float display_time = eval_num(n) / 1000.0f;
+ n = CDR(n);
+
+ float fade_time = 0.0f;
+ if (n >= 0)
+ {
+ fade_time = eval_num(n) / 1000.0f;
+ n = CDR(n);
+ }
+
+ int width_pct = 0;
+ if (n >= 0)
+ {
+ width_pct = eval_num(n);
+ n = CDR(n);
+ }
+
+ int red = 255;
+ if (n >= 0)
+ {
+ red = eval_num(n);
+ n = CDR(n);
+ }
+
+ int green = 255;
+ if (n >= 0)
+ {
+ green = eval_num(n);
+ n = CDR(n);
+ }
+
+ int blue = 255;
+ if (n >= 0)
+ {
+ blue = eval_num(n);
+ n = CDR(n);
+ }
+
+ int fontnum = -1;
+ if (n >= 0)
+ {
+ char *font = CTEXT(n);
+ n = CDR(n);
+
+ // perform font lookup
+ for (int i = 0; i < Num_fonts; i++)
+ {
+ if (!stricmp(font, Fonts[i].filename))
+ {
+ fontnum = i;
+ break;
+ }
+ }
+ }
+
+ bool post_shaded = false;
+ if (n >= 0)
+ {
+ post_shaded = is_sexp_true(n) != 0;
+ n = CDR(n);
+ }
+
+ // check bounds
+ if (x_pct < -100)
+ x_pct = -100;
+ if (x_pct > 100)
+ x_pct = 100;
+ if (y_pct < -100)
+ y_pct = -100;
+ if (y_pct > 100)
+ y_pct = 100;
+ if (width_pct > 100)
+ width_pct = 100;
+ if (red > 255)
+ red = 255;
+ if (green > 255)
+ green = 255;
+ if (blue > 255)
+ blue = 255;
+
+ color new_color;
+ gr_init_alphacolor(&new_color, red, green, blue, 255);
+
+ // calculate pixel positions
+ int x_pos = (int) (gr_screen.max_w * (x_pct / 100.0f));
+ int y_pos = (int) (gr_screen.max_h * (y_pct / 100.0f));
+ int width = (int) (gr_screen.max_w * (width_pct / 100.0f));
+
+ // add the subtitle
+ subtitle new_subtitle(x_pos, y_pos, message, NULL, display_time, fade_time, &new_color, fontnum, center_x, center_y, width, 0, post_shaded);
+ Subtitles.push_back(new_subtitle);
+
+ multi_start_callback();
+ multi_send_int(x_pos);
+ multi_send_int(y_pos);
+ multi_send_string(message);
+ multi_send_float(display_time);
+ multi_send_float(fade_time);
+ multi_send_int(red);
+ multi_send_int(green);
+ multi_send_int(blue);
+ multi_send_int(fontnum);
+ multi_send_bool(center_x);
+ multi_send_bool(center_y);
+ multi_send_int(width);
+ multi_send_bool(post_shaded);
+ multi_end_callback();
+}
+
+void multi_sexp_show_subtitle_msg()
+{
+ int x_pos, y_pos, width=0, fontnum;
+ char message[MESSAGE_LENGTH];
+ float display_time, fade_time=0.0f;
+ int red=255, green=255, blue=255;
+ bool center_x=false, center_y=false;
+ bool post_shaded = false;
+ color new_color;
+
+ multi_get_int(x_pos);
+ multi_get_int(y_pos);
+ multi_get_string(message);
+ multi_get_float(display_time);
+ multi_get_float(fade_time);
+ multi_get_int(red);
+ multi_get_int(green);
+ multi_get_int(blue);
+ multi_get_int(fontnum);
+ multi_get_bool(center_x);
+ multi_get_bool(center_y);
+ multi_get_int(width);
+ multi_get_bool(post_shaded);
+
+ gr_init_alphacolor(&new_color, red, green, blue, 255);
+
+ // add the subtitle
+ subtitle new_subtitle(x_pos, y_pos, message, NULL, display_time, fade_time, &new_color, fontnum, center_x, center_y, width, 0, post_shaded);
+ Subtitles.push_back(new_subtitle);
+
+}
+
void sexp_show_subtitle_image(int node)
{
int n = node;
@@ -23494,6 +23668,10 @@
sexp_val = SEXP_TRUE;
sexp_show_subtitle_text(node);
break;
+ case OP_CUTSCENES_SHOW_SUBTITLE_MSG:
+ sexp_val = SEXP_TRUE;
+ sexp_show_subtitle_msg(node);
+ break;
case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE:
sexp_val = SEXP_TRUE;
sexp_show_subtitle_image(node);
@@ -23837,6 +24015,10 @@
multi_sexp_show_subtitle_text();
break;
+ case OP_CUTSCENES_SHOW_SUBTITLE_MSG:
+ multi_sexp_show_subtitle_msg();
+ break;
+
case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE:
multi_sexp_show_subtitle_image();
break;
@@ -24515,6 +24697,7 @@
case OP_CUTSCENES_RESET_CAMERA:
case OP_CUTSCENES_SHOW_SUBTITLE:
case OP_CUTSCENES_SHOW_SUBTITLE_TEXT:
+ case OP_CUTSCENES_SHOW_SUBTITLE_MSG:
case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE:
case OP_CUTSCENES_SET_TIME_COMPRESSION:
case OP_CUTSCENES_RESET_TIME_COMPRESSION:
@@ -26449,6 +26632,20 @@
else if (argnum == 12)
return OPF_BOOL;
+ case OP_CUTSCENES_SHOW_SUBTITLE_MSG:
+ if (argnum == 0)
+ return OPF_MESSAGE;
+ else if (argnum == 1 || argnum == 2)
+ return OPF_NUMBER;
+ else if (argnum == 3 || argnum == 4)
+ return OPF_BOOL;
+ else if (argnum >= 5 && argnum <= 10)
+ return OPF_POSITIVE;
+ else if (argnum == 11)
+ return OPF_FONT;
+ else if (argnum == 12)
+ return OPF_BOOL;
+
case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE:
if (argnum == 0)
return OPF_STRING;
@@ -28101,6 +28298,7 @@
case OP_CUTSCENES_RESET_CAMERA:
case OP_CUTSCENES_SHOW_SUBTITLE:
case OP_CUTSCENES_SHOW_SUBTITLE_TEXT:
+ case OP_CUTSCENES_SHOW_SUBTITLE_MSG:
case OP_CUTSCENES_SHOW_SUBTITLE_IMAGE:
case OP_CLEAR_SUBTITLES:
case OP_CUTSCENES_FORCE_PERSPECTIVE:
@@ -31476,6 +31674,25 @@
"\t13:\tDrawn after shading? (optional)"
},
+
+ { OP_CUTSCENES_SHOW_SUBTITLE_MSG, "show-subtitle-message\r\n"
+ "\tDisplays a subtitle in the form of text taken from an ingame message.\r\n"
+ "Takes 6 to 13 arguments...\r\n"
+ "\t1:\tMessage to display\r\n"
+ "\t2:\tX position, from 0 to 100% (positive measures from the left; negative measures from the right)\r\n"
+ "\t3:\tY position, from 0 to 100% (positive measures from the top; negative measures from the bottom)\r\n"
+ "\t4:\tCenter horizontally? (if true, overrides argument #2)\r\n"
+ "\t5:\tCenter vertically? (if true, overrides argument #3)\r\n"
+ "\t6:\tTime (in milliseconds) to be displayed, not including fade-in/fade-out\r\n"
+ "\t7:\tFade time (in milliseconds) to be used for both fade-in and fade-out (optional)\r\n"
+ "\t8:\tParagraph width, from 1 to 100% (optional; 0 uses default 200 pixels)\r\n"
+ "\t9:\tText red component (0-255) (optional)\r\n"
+ "\t10:\tText green component (0-255) (optional)\r\n"
+ "\t11:\tText blue component (0-255) (optional)\r\n"
+ "\t12:\tText font (optional)\r\n"
+ "\t13:\tDrawn after shading? (optional)"
+ },
+
{ OP_CUTSCENES_SHOW_SUBTITLE_IMAGE, "show-subtitle-image\r\n"
"\tDisplays a subtitle in the form of an image.\r\n"
"Takes 8 to 10 arguments...\r\n"
Index: sexp.h
===================================================================
--- sexp.h (revision 9296)
+++ sexp.h (working copy)
@@ -707,6 +707,7 @@
#define OP_NAV_UNSELECT (0x001a | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Talon1024
#define OP_ALTER_SHIP_FLAG (0x001b | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Karajorma
#define OP_CHANGE_TEAM_COLOR (0x001c | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // The E
+#define OP_CUTSCENES_SHOW_SUBTITLE_MSG (0x001d | OP_CATEGORY_CHANGE2 | OP_NONCAMPAIGN_FLAG) // Axem
// defined for AI goals
#define OP_AI_CHASE (0x0000 | OP_CATEGORY_AI | OP_NONCAMPAIGN_FLAG)
3.
Extended help for alter-ship-flag. As mjn so helpfully pointed out, the help descriptions of the new ship flags aren't present because they're now part of a larger sexp. So this just adds brief descriptions of each flag. Kara said he has some ingenious plan for this, but said to post the patch anyway.
Index: sexp.cpp
===================================================================
--- sexp.cpp (revision 9296)
+++ sexp.cpp (working copy)
@@ -30070,7 +30070,27 @@
"\t1:\tShip flag name\r\n"
"\t2:\tTrue if turning on, false if turning off\r\n"
"\t3:\tTrue\\False - Apply this flag to future waves of this wing. Apply to ship if not present\r\n"
- "\tRest:\t (optional)Name of ships. If not supplied, will work on all ships in the mission" },
+ "\tRest:\t (optional)Name of ships. If not supplied, will work on all ships in the mission\r\n\r\n"
+ "Ship Flags:\r\n"
+ "invulnerable - Stops ship from taking any damage\r\n"
+ "protect-ship - Ship and Turret AI will ignore and not attack ship\r\n"
+ "beam-protect-ship - Turrets with beam weapons will ignore and not attack ship\r\n"
+ "no-shields - Ship will have no shields\r\n"
+ "targetable-as-bomb - Allows ship to be targetted with the bomb targetting key\r\n"
+ "flak-protect-ship - Turrets with flak weapons will ignore and not attack ship\r\n"
+ "laser-protect-ship - Turrets with laser weapons will ignore and not attack ship\r\n"
+ "missile-protect-ship - Turrets with missile weapons will ignore and not attack ship\r\n"
+ "immobile - Will not let a ship move or rotate in any fashion\r\n"
+ "vaporize - Causes a ship to vanish (no deathroll, no debris, no explosion) when destroyed\r\n"
+ "break-warp - Causes a ship's subspace drive to break. Can be repaired by a support ship\r\n"
+ "never-warp - Causes a ship's subspace drive to never work. Cannot be repaired by a support ship\r\n"
+ "afterburner-locked - Will stop a ship from firing their afterburner\r\n"
+ "primaries-locked - Will stop a ship from firing their primary weapons\r\n"
+ "secondaries-locked - Will stop a ship from firing their secondary weapons\r\n"
+ "no-subspace-drive - Will not allow a ship to jump into subspace\r\n"
+ "don't-collide-invisible - Will cause polygons with an invisible texture to stop colliding with objects\r\n"
+ "no-ets - Will not allow a ship to alter its ETS system\r\n"
+ "no-dynamic - Will stop allowing the AI to persue dynamic goals (eg: chasing ships it was not ordered to)\r\n"},
{ OP_SHIP_VISIBLE, "ship-visible\r\n"
"\tCauses the ships listed in this sexpression to be visible with player sensors.\r\n\r\n"
That's all for now, nerds!