Merge the argument list for OPF_HUD_GAUGE and OPF_HUD_GAUGE_NAME. Call it OPF_RETAIL_HUD_GAUGE.

This commit is contained in:
Goober5000 committed 2021-04-19 22:28:29 -04:00
1 parent 424c69d1e5
commit beeb18b46c
6 files changed
+131 -122

No files matched your search

+7 -1
View File
@@ -55,7 +55,13 @@
#define HUD_SUPPORT_GAUGE 37
#define HUD_LAG_GAUGE 38
extern const char *HUD_gauge_text[NUM_HUD_GAUGES]; // defined in sexp.cpp!!!!
struct Legacy_HUD_gauge_pair
{
const char *hud_gauge_text;
int hud_gauge_type;
};
extern Legacy_HUD_gauge_pair Legacy_HUD_gauges[NUM_HUD_GAUGES]; // defined in hudparse.cpp!!!!
#endif /* __HUD_COMMON_H__ */
+65 -23
View File
@@ -53,9 +53,9 @@ int Hud_font = -1;
bool Chase_view_only_ex = false;
//WARNING: If you add gauges to this array, make sure to bump num_default_gauges!
int num_default_gauges = 42;
static int retail_gauges[] = {
//WARNING: If you add gauges to this array, make sure to bump Num_default_gauges!
const int Num_retail_gauges = 42;
static int Retail_gauges[Num_retail_gauges] = {
HUD_OBJECT_MESSAGES,
HUD_OBJECT_TRAINING_MESSAGES,
HUD_OBJECT_SUPPORT,
@@ -100,9 +100,52 @@ static int retail_gauges[] = {
HUD_OBJECT_ETS_RETAIL
};
Legacy_HUD_gauge_pair Legacy_HUD_gauges[NUM_HUD_GAUGES] =
{
{ "LEAD_INDICATOR", HUD_OBJECT_LEAD },
{ "ORIENTATION_TEE", HUD_OBJECT_ORIENTATION_TEE },
{ "HOSTILE_TRIANGLE", HUD_OBJECT_HOSTILE_TRI },
{ "TARGET_TRIANGLE", HUD_OBJECT_TARGET_TRI },
{ "MISSION_TIME", HUD_OBJECT_MISSION_TIME },
{ "RETICLE_CIRCLE", -1 },
{ "THROTTLE_GAUGE", HUD_OBJECT_THROTTLE },
{ "RADAR", HUD_OBJECT_RADAR_STD },
{ "TARGET_MONITOR", HUD_OBJECT_TARGET_MONITOR },
{ "CENTER_RETICLE", HUD_OBJECT_CENTER_RETICLE },
{ "TARGET_MONITOR_EXTRA_DATA", HUD_OBJECT_EXTRA_TARGET_DATA },
{ "TARGET_SHIELD_ICON", HUD_OBJECT_TARGET_SHIELD },
{ "PLAYER_SHIELD_ICON", HUD_OBJECT_PLAYER_SHIELD },
{ "ETS_GAUGE", HUD_OBJECT_ETS_RETAIL },
{ "AUTO_TARGET", HUD_OBJECT_AUTO_TARGET },
{ "AUTO_SPEED", HUD_OBJECT_AUTO_SPEED },
{ "WEAPONS_GAUGE", HUD_OBJECT_WEAPONS },
{ "ESCORT_VIEW", HUD_OBJECT_ESCORT },
{ "DIRECTIVES_VIEW", HUD_OBJECT_DIRECTIVES },
{ "THREAT_GAUGE", HUD_OBJECT_THREAT },
{ "AFTERBURNER_ENERGY", HUD_OBJECT_AFTERBURNER },
{ "WEAPONS_ENERGY", HUD_OBJECT_WEAPON_ENERGY },
{ "WEAPON_LINKING_GAUGE", HUD_OBJECT_WEAPON_LINKING },
{ "TARGER_MINI_ICON", HUD_OBJECT_MINI_SHIELD },
{ "OFFSCREEN_INDICATOR", HUD_OBJECT_OFFSCREEN },
{ "TALKING_HEAD", HUD_OBJECT_TALKING_HEAD },
{ "DAMAGE_GAUGE", HUD_OBJECT_DAMAGE },
{ "MESSAGE_LINES", HUD_OBJECT_MESSAGES },
{ "MISSILE_WARNING_ARROW", HUD_OBJECT_MISSILE_TRI },
{ "CMEASURE_GAUGE", HUD_OBJECT_CMEASURES },
{ "OBJECTIVES_NOTIFY_GAUGE", HUD_OBJECT_OBJ_NOTIFY },
{ "WINGMEN_STATUS", HUD_OBJECT_WINGMAN_STATUS },
{ "OFFSCREEN RANGE", -1 },
{ "KILLS GAUGE", HUD_OBJECT_KILLS },
{ "ATTACKING TARGET COUNT", -1 },
{ "TEXT FLASH", HUD_OBJECT_TEXT_WARNINGS },
{ "MESSAGE BOX", HUD_OBJECT_SQUAD_MSG },
{ "SUPPORT GUAGE", HUD_OBJECT_SUPPORT },
{ "LAG GUAGE", HUD_OBJECT_LAG },
};
flag_def_list Hud_gauge_types[] = {
{ "Messages", HUD_OBJECT_MESSAGES, 0},
{ "Training messages", HUD_OBJECT_TRAINING_MESSAGES, 0},
{ "Training messages", HUD_OBJECT_TRAINING_MESSAGES, 0}, // Not in legacy list
{ "Support", HUD_OBJECT_SUPPORT, 0},
{ "Damage", HUD_OBJECT_DAMAGE, 0},
{ "Wingman status", HUD_OBJECT_WINGMAN_STATUS, 0},
@@ -120,14 +163,14 @@ flag_def_list Hud_gauge_types[] = {
{ "Target shield", HUD_OBJECT_TARGET_SHIELD, 0},
{ "Escort list", HUD_OBJECT_ESCORT, 0},
{ "Mission time", HUD_OBJECT_MISSION_TIME, 0},
{ "Ets weapons", HUD_OBJECT_ETS_WEAPONS, 0},
{ "Ets shields", HUD_OBJECT_ETS_SHIELDS, 0},
{ "Ets engines", HUD_OBJECT_ETS_ENGINES, 0},
{ "Ets weapons", HUD_OBJECT_ETS_WEAPONS, 0}, // Not in legacy list
{ "Ets shields", HUD_OBJECT_ETS_SHIELDS, 0}, // Not in legacy list
{ "Ets engines", HUD_OBJECT_ETS_ENGINES, 0}, // Not in legacy list
{ "Target monitor", HUD_OBJECT_TARGET_MONITOR, 0},
{ "Extra target data", HUD_OBJECT_EXTRA_TARGET_DATA, 0},
{ "Radar", HUD_OBJECT_RADAR_STD, 0},
{ "Radar orb", HUD_OBJECT_RADAR_ORB, 0},
{ "Radar BSG", HUD_OBJECT_RADAR_BSG, 0},
{ "Radar orb", HUD_OBJECT_RADAR_ORB, 0}, // Not in legacy list
{ "Radar BSG", HUD_OBJECT_RADAR_BSG, 0}, // Not in legacy list
{ "Afterburner energy", HUD_OBJECT_AFTERBURNER, 0},
{ "Weapon energy", HUD_OBJECT_WEAPON_ENERGY, 0},
{ "Text warnings", HUD_OBJECT_TEXT_WARNINGS, 0},
@@ -136,12 +179,12 @@ flag_def_list Hud_gauge_types[] = {
{ "Threat indicator", HUD_OBJECT_THREAT, 0},
{ "Lead indicator", HUD_OBJECT_LEAD, 0},
{ "Lead sight", HUD_OBJECT_LEAD_SIGHT, 0},
{ "Lock indicator", HUD_OBJECT_LOCK, 0},
{ "Lock indicator", HUD_OBJECT_LOCK, 0}, // Not in legacy list
{ "Weapon linking", HUD_OBJECT_WEAPON_LINKING, 0},
{ "Multiplayer messages", HUD_OBJECT_MULTI_MSG, 0},
{ "Voice status", HUD_OBJECT_VOICE_STATUS, 0},
{ "Ping", HUD_OBJECT_PING, 0},
{ "Supernova", HUD_OBJECT_SUPERNOVA, 0},
{ "Multiplayer messages", HUD_OBJECT_MULTI_MSG, 0}, // Not in legacy list
{ "Voice status", HUD_OBJECT_VOICE_STATUS, 0}, // Not in legacy list
{ "Ping", HUD_OBJECT_PING, 0}, // Not in legacy list
{ "Supernova", HUD_OBJECT_SUPERNOVA, 0}, // Not in legacy list
{ "Offscreen indicator", HUD_OBJECT_OFFSCREEN, 0},
{ "Targeting brackets", HUD_OBJECT_BRACKETS, 0},
{ "Orientation", HUD_OBJECT_ORIENTATION_TEE, 0},
@@ -149,10 +192,9 @@ flag_def_list Hud_gauge_types[] = {
{ "Target direction", HUD_OBJECT_TARGET_TRI, 0},
{ "Missile indicator", HUD_OBJECT_MISSILE_TRI, 0},
{ "Kills", HUD_OBJECT_KILLS, 0},
{ "Fixed messages", HUD_OBJECT_FIXED_MESSAGES, 0},
{ "Fixed messages", HUD_OBJECT_FIXED_MESSAGES, 0}, // Not in legacy list
{ "Ets retail", HUD_OBJECT_ETS_RETAIL, 0}
};
int Num_hud_gauge_types = sizeof(Hud_gauge_types)/sizeof(flag_def_list);
int parse_ship_start()
@@ -533,11 +575,11 @@ void load_missing_retail_gauges()
if(Hud_retail) {
int num_loaded_gauges = (int)default_hud_gauges.size();
for(int i = 0; i < num_default_gauges; i++) {
for(int i = 0; i < Num_retail_gauges; i++) {
retail_gauge_loaded = false;
for(int j = 0; j < num_loaded_gauges; j++) {
if(retail_gauges[i] == default_hud_gauges[j]->getObjectType()) {
if(Retail_gauges[i] == default_hud_gauges[j]->getObjectType()) {
retail_gauge_loaded = true;
break;
}
@@ -545,7 +587,7 @@ void load_missing_retail_gauges()
if(!retail_gauge_loaded) {
gauge_settings settings;
load_gauge(retail_gauges[i], &settings);
load_gauge(Retail_gauges[i], &settings);
}
}
@@ -589,9 +631,9 @@ void load_missing_retail_gauges()
if(it->hud_enabled && it->hud_retail) {
int num_loaded_gauges = (int)it->hud_gauges.size();
for(int i = 0; i < num_default_gauges; i++) {
for(int i = 0; i < Num_retail_gauges; i++) {
for(int j = 0; j < num_loaded_gauges; j++) {
if(retail_gauges[i] == it->hud_gauges[j]->getObjectType()) {
if(Retail_gauges[i] == it->hud_gauges[j]->getObjectType()) {
retail_gauge_loaded = true;
}
}
@@ -599,7 +641,7 @@ void load_missing_retail_gauges()
if(!retail_gauge_loaded) {
gauge_settings settings;
settings.ship_idx = &sindex;
load_gauge(retail_gauges[i], &settings);
load_gauge(Retail_gauges[i], &settings);
}
}
@@ -1452,7 +1494,7 @@ void load_gauge_custom(gauge_settings* settings)
stuff_string(gauge_string, F_NAME, MAX_FILENAME_LEN);
for(i = 0; i < NUM_HUD_GAUGES; i++) {
if(!strcmp(HUD_gauge_text[i], gauge_string)) {
if(!strcmp(Legacy_HUD_gauges[i].hud_gauge_text, gauge_string)) {
gauge_type = i;
break;
}
+49 -72
View File
@@ -813,50 +813,6 @@ sexp_ai_goal_link Sexp_ai_goal_links[] = {
{ AI_GOAL_FORM_ON_WING, OP_AI_FORM_ON_WING }
};
const char *HUD_gauge_text[NUM_HUD_GAUGES] =
{
"LEAD_INDICATOR",
"ORIENTATION_TEE",
"HOSTILE_TRIANGLE",
"TARGET_TRIANGLE",
"MISSION_TIME",
"RETICLE_CIRCLE",
"THROTTLE_GAUGE",
"RADAR",
"TARGET_MONITOR",
"CENTER_RETICLE",
"TARGET_MONITOR_EXTRA_DATA",
"TARGET_SHIELD_ICON",
"PLAYER_SHIELD_ICON",
"ETS_GAUGE",
"AUTO_TARGET",
"AUTO_SPEED",
"WEAPONS_GAUGE",
"ESCORT_VIEW",
"DIRECTIVES_VIEW",
"THREAT_GAUGE",
"AFTERBURNER_ENERGY",
"WEAPONS_ENERGY",
"WEAPON_LINKING_GAUGE",
"TARGER_MINI_ICON",
"OFFSCREEN_INDICATOR",
"TALKING_HEAD",
"DAMAGE_GAUGE",
"MESSAGE_LINES",
"MISSILE_WARNING_ARROW",
"CMEASURE_GAUGE",
"OBJECTIVES_NOTIFY_GAUGE",
"WINGMEN_STATUS",
"OFFSCREEN RANGE",
"KILLS GAUGE",
"ATTACKING TARGET COUNT",
"TEXT FLASH",
"MESSAGE BOX",
"SUPPORT GUAGE",
"LAG GUAGE"
};
void sexp_set_skybox_model_preload(const char *name); // taylor
int Num_skybox_flags = 6;
const char *Skybox_flags[] = {
@@ -2982,14 +2938,32 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, i
return SEXP_CHECK_INVALID_AUDIO_VOLUME_OPTION;
break;
case OPF_HUD_GAUGE:
case OPF_RETAIL_HUD_GAUGE:
{
if (type2 != SEXP_ATOM_STRING) {
return SEXP_CHECK_TYPE_MISMATCH;
}
auto gauge_name = CTEXT(node);
// for compatibility, since this operator now uses a different set of parameters
if (get_operator_const(op_node) == OP_FLASH_HUD_GAUGE) {
bool found = false;
for (int legacy_idx = 0; legacy_idx < NUM_HUD_GAUGES; legacy_idx++) {
if (stricmp(gauge_name, Legacy_HUD_gauges[legacy_idx].hud_gauge_text) == 0) {
found = true;
break;
}
}
if (found) {
break;
}
}
if (hud_gauge_type_lookup(gauge_name) == -1)
return SEXP_CHECK_INVALID_RETAIL_HUD_GAUGE;
if (hud_gauge_type_lookup(CTEXT(node)) == -1)
return SEXP_CHECK_INVALID_HUD_GAUGE;
break;
}
case OPF_SOUND_ENVIRONMENT_OPTION:
if (type2 != SEXP_ATOM_STRING) {
@@ -3162,21 +3136,6 @@ int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, i
break;
case OPF_HUD_GAUGE_NAME:
if ( type2 != SEXP_ATOM_STRING )
return SEXP_CHECK_TYPE_MISMATCH;
for ( i = 0; i < NUM_HUD_GAUGES; i++ ) {
if ( !stricmp(CTEXT(node), HUD_gauge_text[i]) )
break;
}
// if we reached the end of the list, then the name is invalid
if ( i == NUM_HUD_GAUGES )
return SEXP_CHECK_INVALID_GAUGE_NAME;
break;
case OPF_SKYBOX_MODEL_NAME:
if ( type2 != SEXP_ATOM_STRING )
return SEXP_CHECK_TYPE_MISMATCH;
@@ -21366,12 +21325,26 @@ int sexp_special_training_check(int node)
return rtn;
}
// sexpression to flash a hud gauge. gauge name is text valud of node
// sexpression to flash a hud gauge. gauge name is text value of node
void sexp_flash_hud_gauge( int node )
{
auto name = CTEXT(node);
bool match = false;
// see if this is specified the new way, according to the HUD type #define
int type = hud_gauge_type_lookup(name);
// now go through and find out which gauge (index i in the legacy list) to flash
for (int i = 0; i < NUM_HUD_GAUGES; ++i) {
if ( !stricmp(HUD_gauge_text[i], name) ) {
if (type < 0) {
if (stricmp(name, Legacy_HUD_gauges[i].hud_gauge_text) == 0) {
match = true;
}
} else if (type == Legacy_HUD_gauges[i].hud_gauge_type) {
match = true;
}
if (match) {
hud_gauge_start_flash(i); // call HUD function to flash gauge
Current_sexp_network_packet.start_callback();
@@ -21381,6 +21354,10 @@ void sexp_flash_hud_gauge( int node )
break;
}
}
if (!match && type >= 0) {
Warning(LOCATION, "HUD gauge '%s' is not a legacy gauge; flashing is not supported", name);
}
}
void multi_sexp_flash_hud_gauge()
@@ -28216,7 +28193,7 @@ int query_operator_argument_type(int op, int argnum)
return OPF_SHIP;
case OP_FLASH_HUD_GAUGE:
return OPF_HUD_GAUGE_NAME;
return OPF_RETAIL_HUD_GAUGE;
case OP_GOOD_SECONDARY_TIME:
if ( argnum == 0 )
@@ -29199,7 +29176,7 @@ int query_operator_argument_type(int op, int argnum)
case OP_HUD_ACTIVATE_GAUGE_TYPE:
if (argnum == 0)
return OPF_HUD_GAUGE;
return OPF_RETAIL_HUD_GAUGE;
else
return OPF_BOOL;
@@ -29213,7 +29190,7 @@ int query_operator_argument_type(int op, int argnum)
if (argnum == 0)
return OPF_BOOL;
else
return OPF_HUD_GAUGE;
return OPF_RETAIL_HUD_GAUGE;
case OP_GET_COLGROUP_ID:
return OPF_SHIP;
@@ -29647,9 +29624,6 @@ const char *sexp_error_message(int num)
case SEXP_CHECK_INVALID_SHIP_CLASS_NAME:
return "Invalid ship class name";
case SEXP_CHECK_INVALID_GAUGE_NAME:
return "Invalid builtin HUD gauge";
case SEXP_CHECK_INVALID_SKYBOX_NAME:
return "Invalid skybox name";
@@ -29719,8 +29693,11 @@ const char *sexp_error_message(int num)
case SEXP_CHECK_INVALID_DAMAGE_TYPE:
return "Invalid damage type";
case SEXP_CHECK_INVALID_HUD_GAUGE:
return "Invalid HUD gauge";
case SEXP_CHECK_INVALID_RETAIL_HUD_GAUGE:
return "Invalid retail HUD gauge";
case SEXP_CHECK_INVALID_CUSTOM_HUD_GAUGE:
return "Invalid custom HUD gauge";
case SEXP_CHECK_INVALID_TARGET_PRIORITIES:
return "Invalid target priorities";
+4 -4
View File
@@ -58,7 +58,7 @@ class waypoint_list;
#define OPF_MEDAL_NAME 31 // name of medals
#define OPF_WEAPON_NAME 32 // name of a weapon
#define OPF_SHIP_CLASS_NAME 33 // name of a ship class
#define OPF_HUD_GAUGE_NAME 34 // name of HUD gauge
#define OPF_CUSTOM_HUD_GAUGE 34 // name of custom HUD gauge
#define OPF_HUGE_WEAPON 35 // name of a secondary bomb type weapon
#define OPF_SHIP_NOT_PLAYER 36 // a ship, but not a player ship
#define OPF_JUMP_NODE_NAME 37 // name of a jump node
@@ -103,7 +103,7 @@ class waypoint_list;
#define OPF_AUDIO_VOLUME_OPTION 76 // The E
#define OPF_WEAPON_BANK_NUMBER 77 // Karajorma - The number of a primary/secondary/tertiary weapon bank or all of them
#define OPF_MESSAGE_OR_STRING 78 // Goober5000 - provides a list of messages like OPF_MESSAGE, but also allows entering arbitrary strings
#define OPF_HUD_GAUGE 79 // The E
#define OPF_RETAIL_HUD_GAUGE 79 // The E
#define OPF_DAMAGE_TYPE 80 // FUBAR - Damage type or <none>
#define OPF_SHIP_EFFECT 81 // The E - per-ship effects, as defined in post-processing.tbl
#define OPF_ANIMATION_TYPE 82 // Goober5000 - as defined in modelanim.h
@@ -1024,7 +1024,7 @@ const char *CTEXT(int n);
#define SEXP_CHECK_INVALID_MEDAL_NAME -123
#define SEXP_CHECK_INVALID_WEAPON_NAME -124
#define SEXP_CHECK_INVALID_SHIP_CLASS_NAME -125
#define SEXP_CHECK_INVALID_GAUGE_NAME -126
#define SEXP_CHECK_INVALID_CUSTOM_HUD_GAUGE -126
#define SEXP_CHECK_INVALID_JUMP_NODE -127
#define SEXP_CHECK_INVALID_VARIABLE -128
#define SEXP_CHECK_INVALID_AI_CLASS -129
@@ -1051,7 +1051,7 @@ const char *CTEXT(int n);
#define SEXP_CHECK_INVALID_DAMAGE_TYPE -150
#define SEXP_CHECK_INVALID_TARGET_PRIORITIES -151
#define SEXP_CHECK_INVALID_AUDIO_VOLUME_OPTION -152
#define SEXP_CHECK_INVALID_HUD_GAUGE -153
#define SEXP_CHECK_INVALID_RETAIL_HUD_GAUGE -153
#define SEXP_CHECK_INVALID_ANIMATION_TYPE -154
#define SEXP_CHECK_INVALID_MISSION_MOOD -155
#define SEXP_CHECK_INVALID_SHIP_FLAG -156
+5 -21
View File
@@ -2730,7 +2730,7 @@ int sexp_tree::get_default_value(sexp_list_item *item, char *text_buf, int op, i
str = "<Effect Name>";
break;
case OPF_HUD_GAUGE:
case OPF_RETAIL_HUD_GAUGE:
str = "Messages";
break;
@@ -2786,7 +2786,6 @@ int sexp_tree::query_default_argument_available(int op, int i)
case OPF_WEAPON_NAME:
case OPF_INTEL_NAME:
case OPF_SHIP_CLASS_NAME:
case OPF_HUD_GAUGE_NAME:
case OPF_HUGE_WEAPON:
case OPF_JUMP_NODE_NAME:
case OPF_AMBIGUOUS:
@@ -2823,7 +2822,7 @@ int sexp_tree::query_default_argument_available(int op, int i)
case OPF_AUDIO_VOLUME_OPTION:
case OPF_WEAPON_BANK_NUMBER:
case OPF_MESSAGE_OR_STRING:
case OPF_HUD_GAUGE:
case OPF_RETAIL_HUD_GAUGE:
case OPF_SHIP_EFFECT:
case OPF_ANIMATION_TYPE:
case OPF_SHIP_FLAG:
@@ -4491,10 +4490,6 @@ sexp_list_item *sexp_tree::get_listing_opf(int opf, int parent_node, int arg_ind
list = get_listing_opf_ship_class_name();
break;
case OPF_HUD_GAUGE_NAME:
list = get_listing_opf_hud_gauge_name();
break;
case OPF_HUGE_WEAPON:
list = get_listing_opf_huge_weapon();
break;
@@ -4615,8 +4610,8 @@ sexp_list_item *sexp_tree::get_listing_opf(int opf, int parent_node, int arg_ind
list = get_listing_opf_message();
break;
case OPF_HUD_GAUGE:
list = get_listing_opf_hud_gauge();
case OPF_RETAIL_HUD_GAUGE:
list = get_listing_opf_retail_hud_gauge();
break;
case OPF_SHIP_EFFECT:
@@ -5589,7 +5584,7 @@ sexp_list_item *sexp_tree::get_listing_opf_adjust_audio_volume()
return head.next;
}
sexp_list_item *sexp_tree::get_listing_opf_hud_gauge()
sexp_list_item *sexp_tree::get_listing_opf_retail_hud_gauge()
{
sexp_list_item head;
@@ -5914,17 +5909,6 @@ sexp_list_item *sexp_tree::get_listing_opf_ship_class_name()
return head.next;
}
sexp_list_item *sexp_tree::get_listing_opf_hud_gauge_name()
{
int i;
sexp_list_item head;
for (i=0; i<NUM_HUD_GAUGES; i++)
head.add_data(HUD_gauge_text[i]);
return head.next;
}
sexp_list_item *sexp_tree::get_listing_opf_huge_weapon()
{
sexp_list_item head;
+1 -1
View File
@@ -269,7 +269,7 @@ public:
sexp_list_item *get_listing_opf_explosion_option();
sexp_list_item *get_listing_opf_adjust_audio_volume();
sexp_list_item *get_listing_opf_weapon_banks();
sexp_list_item *get_listing_opf_hud_gauge();
sexp_list_item *get_listing_opf_retail_hud_gauge();
sexp_list_item *get_listing_opf_ship_effect();
sexp_list_item *get_listing_opf_animation_type();
sexp_list_item *get_listing_opf_mission_moods();