17 #include "FredRender.h"
27 #include "Management.h"
41 #include "MessageEditorDlg.h"
42 #include "EventEditor.h"
43 #include "MissionGoalsDlg.h"
44 #include "ShieldSysDlg.h"
46 #include "DebriefingEditorDlg.h"
71 #define MAX_DOCKS 1000
73 #define UNKNOWN_USER "Unknown"
147 if (strcmp(src, dest))
154 strncpy(dest, src, len);
161 if (strcmp(src, dest.c_str()))
172 dest.Replace(
"\n",
"\r\n");
180 dest.Replace(
"\n",
"\r\n");
187 memset(dest, 0, max_len);
188 strncpy(dest, (LPCTSTR) str, max_len - 1);
275 char palette_filename[1024];
278 MessageBox( NULL,
"Not enough memory to run Fred.\r\nTry closing down some other applications.\r\n",
"Not Enough Memory",
MB_OK );
282 srand( (
unsigned) time(NULL) );
299 #if FS_VERSION_REVIS == 0
370 sprintf(palette_filename,
"gamepalette%d-%02d", 1, 1);
371 mprintf((
"Loading palette %s\n", palette_filename));
486 }
else if (obj == -1)
487 Fred_main_wnd->MessageBox(
"Maximum ship limit reached. Can't add any more ships.");
510 float temp_max_hull_strength;
540 if (((z1 == 1) && z2) || (z2 == 1))
546 ship *temp_shipp = NULL;
559 if (temp_shipp == NULL || shipp->
team == temp_shipp->
team)
595 if ((i != ship) && (
Ships[i].objnum != -1))
610 int i, j,
n, inst,
obj = -1;
612 object *objp1, *objp2;
614 static int waypoint_instance(-1);
617 waypoint_instance = -1;
640 aip2 = &
Ai_info[Ships[inst].ai_index];
654 objp2 = &
Objects[Ships[inst].objnum];
660 subp1 =
GET_FIRST(&Ships[n].subsys_list);
661 subp2 =
GET_FIRST(&Ships[inst].subsys_list);
662 while (subp1 !=
END_OF_LIST(&Ships[n].subsys_list)) {
664 subp1 -> current_hits = subp2 -> current_hits;
672 j = Num_reinforcements++;
704 Fred_main_wnd->MessageBox(
"Unable to create new player start point.\n"
709 Fred_main_wnd->MessageBox(
"You can't have more than one player start in\n"
714 Fred_main_wnd->MessageBox(
"You can't have more than one player start in\n"
851 str =
reg_read_string(
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion",
"RegisteredOwner", NULL);
853 str =
reg_read_string(
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",
"RegisteredOwner", NULL);
855 str = getenv(
"USERNAME");
862 t = CTime::GetCurrentTime();
889 for ( j = 0; j < static_cast<int>(
Ship_info.size()); j++ ) {
959 Nmodel_instance_num = -1;
978 char palette_filename[1024];
979 strcpy_s(palette_filename,
"gamepalette1-01");
981 mprintf((
"Loading palette %s\n", palette_filename ));
1002 int obj_found =
FALSE;
1023 int obj_found =
FALSE;
1044 int obj_found =
FALSE;
1103 cur_waypoint_list = NULL;
1104 cur_waypoint = NULL;
1118 Assert(cur_waypoint != NULL);
1127 cur_waypoint_list = NULL;
1128 cur_waypoint = NULL;
1144 cur_waypoint_list = NULL;
1145 cur_waypoint = NULL;
1158 Assert(cur_waypoint != NULL);
1167 nprintf((
"Fred routing",
"updating dialog boxes\n"));
1172 nprintf((
"Fred routing",
"wing dialog save failed\n"));
1174 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
1181 nprintf((
"Fred routing",
"ship dialog save failed\n"));
1183 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
1190 nprintf((
"Fred routing",
"waypoint dialog save failed\n"));
1192 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
1233 char msg[255], *
name;
1242 Fred_main_wnd->MessageBox(
"Must have at least 1 player starting point!",
1250 sprintf(msg,
"Player %d", i + 1);
1256 if (
Ships[i].wingnum >= 0) {
1324 if (
Ships[z].wingnum >= 1) {
1330 }
else if (
Ships[z].wingnum >= 0) {
1414 Num_reinforcements--;
1426 if (
Wings[wing].wave_count == 1) {
1448 if (
Wings[wing].special_ship == i){
1450 }
else if (
Wings[wing].special_ship > i) {
1463 if (
Wings[wing].threshold >=
Wings[wing].wave_count){
1468 if (
Wings[wing].wave_count && (
Wings[wing].threshold >=
Wings[wing].wave_count)){
1518 if (ptr->
flags & OF_MARKED) {
1553 count = ptr->GetMenuItemCount();
1555 ptr->DeleteMenu(count, MF_BYPOSITION);
1561 int i,
z, columns, rows,
count;
1572 if (
Wings[i].wave_count) {
1573 z = state | MF_STRING;
1576 z |= MF_MENUBARBREAK;
1579 mptr->AppendMenu(z, first_id + i,
Wings[i].
name);
1588 int z,
ship, columns, rows,
count, num_ships;
1596 rows = num_ships / columns;
1611 z = state | MF_STRING;
1614 z |= MF_MENUBARBREAK;
1618 mptr->AppendMenu(z, first_id + ship,
Ships[ship].ship_name);
1635 for (i=0; i<max; i++) {
1636 Assert(strlen(strlist[i]));
1638 if (!
stricmp((LPCTSTR) str1, strlist[i])){
1651 i = base->GetMenuItemCount();
1653 if ((submenu = base->GetSubMenu(i))>0) {
1657 base->EnableMenuItem(i, MF_GRAYED | MF_BYPOSITION);
1661 z = base->GetMenuState(i, MF_BYPOSITION);
1662 if (z == MF_ENABLED){
1718 if (!state && (cur != -1)) {
1719 Num_reinforcements--;
1747 Num_reinforcements++;
1768 if ( state && (cur != -1) ) {
1828 sprintf(new_name,
"<%s>", name);
1851 if (
Wings[i].wave_count) {
1857 if (
Ships[i].objnum >= 0) {
1860 if (
Ships[i].ai_index < 0)
1879 else switch (ptr->
type) {
1909 int i,
z,
num, model;
1913 for (i=0; i<
num; i++)
1916 box->SetItemData(z, i);
1950 if (
Wings[i].wave_count)
1964 if (
Wings[i].wave_count)
1990 char msg[2048], text[128], type_name[128];
1995 sprintf(type_name,
"Ship \"%s\"", name);
1999 sprintf(type_name,
"Wing \"%s\"", name);
2007 sprintf(type_name,
"Waypoint \"%s\"", name);
2011 sprintf(type_name,
"Waypoint path \"%s\"", name);
2015 Error(
LOCATION,
"Type unknown for object \"%s\". Let Hoffos know now!", name);
2023 sprintf(text,
"the arrival cue of ship \"%s\"",
Ships[n].ship_name);
2027 sprintf(text,
"the departure cue of ship \"%s\"",
Ships[n].ship_name);
2031 sprintf(text,
"the arrival cue of wing \"%s\"",
Wings[n].name);
2035 sprintf(text,
"the departure cue of wing \"%s\"",
Wings[n].name);
2042 sprintf(text,
"event #%d", n);
2050 sprintf(text,
"mission goal #%d", n);
2055 sprintf(text,
"debriefing #%d", n);
2059 sprintf(text,
"briefing #%d", n);
2064 "Run for the hills and let Hoffoss know right now!", name);
2070 sprintf(msg,
"%s is referenced by %s (possibly more sexps).\n"
2071 "Do you want to delete it anyway?\n\n"
2072 "(click Cancel to go to the reference)", type_name, text);
2101 Error(
LOCATION,
"\"%s\" referenced by an unknown initial orders source! "
2102 "Run for the hills and let Hoffoss know right now!", name);
2105 sprintf(msg,
"%s is referenced by the initial orders of %s (possibly \n"
2106 "more initial orders). Do you want to delete it anyway?\n\n"
2107 "(click Cancel to go to the reference)", type_name, text);
2130 if (n < Num_reinforcements) {
2131 sprintf(msg,
"Ship \"%s\" is a reinforcement unit.\n"
2132 "Do you want to delete it anyway?", name);
2166 dlg_goals.DoModal();
2169 Fred_main_wnd->MessageBox(
"This ship's wing also has initial orders",
"Possible conflict");
2178 dlg_goals.DoModal();
2180 Fred_main_wnd->MessageBox(
"One or more ships of this wing also has initial orders",
"Possible conflict");
2210 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2224 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2234 Fred_main_wnd->MessageBox(
"You must close the message editor before the event editor can be opened");
2244 Event_editor_dlg->SetWindowPos(&CWnd::wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2271 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2287 static char text[80];
2306 return "Briefing icon";
2320 if (Ai_goal_list[i].def & order)
2321 return Ai_goal_list[
i].
name;
2352 if (!
Wings[wing].wave_count)
2365 if (count ==
Wings[wing].wave_count)
2445 int id,
i, restrict_to_players;
2447 box->ResetContent();
2452 for (restrict_to_players = 0; restrict_to_players < 2; restrict_to_players++)
2459 id = box->AddString(tmp);
2493 DWORD dwType, dwLen;
2495 static char tmp_string_data[1024];
2500 lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
2506 if ( lResult != ERROR_SUCCESS ) {
2507 mprintf((
"Error opening registry key '%s'\n", keyname ));
2512 mprintf((
"No variable name passed\n" ));
2517 lResult = RegQueryValueEx( hKey,
2521 (
ubyte *)&tmp_string_data,
2524 if ( lResult != ERROR_SUCCESS ) {
2525 mprintf((
"Error reading registry key '%s'\n", name ));
2529 default_value = tmp_string_data;
2535 return default_value;
2595 if (retail_format && !
stricmp(iff_name,
"hostile") && !restrict_to_players)
2598 if (restrict_to_players)
2599 sprintf(buf,
"<any %s player>", iff_name);
2601 sprintf(buf,
"<any %s>", iff_name);
2610 int iff_index = anchor_num;
2626 if (!
stricmp(ii->ship_name, old_name))
matrix skybox_orientation
int dup_sexp_chain(int node)
char Voice_abbrev_command_briefing[NAME_LENGTH]
char Starting_wing_names[MAX_STARTING_WINGS][NAME_LENGTH]
char Neb2_texture_name[MAX_FILENAME_LEN]
void wing_bash_ship_name(char *ship_name, const char *wing_name, int index)
int primary_bank_weapons[MAX_SHIP_PRIMARY_BANKS]
int Id_select_type_waypoint
bool gr_init(int d_mode, int d_width, int d_height, int d_depth)
int create_waypoint(vec3d *pos, int waypoint_instance)
bool weapon_required[MAX_WEAPON_TYPES]
void init_pending_messages(void)
void generate_weaponry_usage_list(int *arr, int wing)
void ai_update_goal_references(int type, const char *old_name, const char *new_name)
CMessageEditorDlg * Message_editor_dlg
#define SEXP_ATOM_OPERATOR
int create_object(vec3d *pos, int waypoint_instance)
int update_dialog_boxes()
CShipEditorDlg Ship_editor_dialog
void initialize_data(int full_update)
void gamesnd_parse_soundstbl()
polymodel * model_get(int model_num)
weapon_info Weapon_info[MAX_WEAPON_TYPES]
void nebula_init(const char *filename, int pitch, int bank, int heading)
void update_custom_wing_indexes()
void mission_campaign_clear()
#define AI_GOAL_CHASE_WING
char * model_get_dock_name(int modelnum, int index)
void waypoint_parse_init()
#define AI_GOAL_WAYPOINTS
char * object_name(int obj)
void object_moved(object *objp)
int model_get_dock_index_type(int modelnum, int index)
void generate_ship_popup_menu(CMenu *mptr, int first_id, int state, int filter)
int replace_all(char *str, char *oldstr, char *newstr, uint max_len, int range)
#define DEFAULT_NMODEL_FLAGS
int rename_ship(int ship, char *name)
#define SHIPS_2_COMBO_DOCKING_BAY_ONLY
waypoint_list * find_waypoint_list_with_instance(int waypoint_instance, int *waypoint_index)
int delete_object(int obj)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
int generic_anim_load(generic_anim *ga)
#define FS2_OPEN_DEFAULT_LANGUAGE
int Id_select_type_jump_node
void stuff_special_arrival_anchor_name(char *buf, int iff_index, int restrict_to_players, int retail_format)
char Fred_alt_names[MAX_SHIPS][NAME_LENGTH+1]
#define AI_GOAL_STAY_NEAR_SHIP
char wing_squad_filename[MAX_FILENAME_LEN]
#define AI_GOAL_CHASE_ANY
void stars_pre_level_init(bool clear_backgrounds)
void write_ini_file(int degree=0)
void set_cur_wing(int wing)
struct vec3d::@225::@227 xyz
char * reg_read_string(char *section, char *name, char *default_value)
int update_data(int redraw=1)
void set_cur_indices(int obj)
void update_sexp_references(const char *old_name, const char *new_name, int format, int node)
void delete_icon(int num)
void os_init_registry_stuff(const char *company, const char *app, const char *version)
void fiction_viewer_reset()
ai_info Ai_info[MAX_AI_INFO]
void lcl_init(int lang_init)
int query_referenced_in_sexp(int mode, char *name, int *node)
#define END_OF_LIST(head)
#define AI_GOAL_DISARM_SHIP
CMainFrame * Fred_main_wnd
int alloc_sexp(char *text, int type, int subtype, int first, int rest)
int wing_insignia_texture
waypoint_list * cur_waypoint_list
int model_get_num_dock_points(int modelnum)
#define MAX_SHIPS_PER_WING
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
void obj_merge_created_list(void)
int delete_ship_from_wing(int ship)
void dock_move_docked_objects(object *objp)
int invalidate_references(char *name, int type)
void deconvert_multiline_string(char *dest, const CString &str, int max_len)
int orders_reference_handler(int code, char *msg)
#define MAX_SQUADRON_WINGS
int get_default_player_ship_index()
Returns the index of the default player ship.
void parse_init(bool basic=false)
GLenum GLuint GLenum GLsizei const GLchar * buf
#define MAX_REINFORCEMENT_MESSAGES
int get_docking_list(int model_index)
mission_goal Mission_goals[MAX_GOALS]
#define CONTRAIL_THRESHOLD_DEFAULT
void fix_ship_name(int ship)
#define SPECIAL_ARRIVAL_ANCHOR_FLAG
void mission_event_shutdown()
SCP_list< CJumpNode > Jump_nodes
const char * Osreg_app_name
void create_new_mission()
void fred_preload_all_briefing_icons()
iff_info Iff_info[MAX_IFFS]
int ship_count[MAX_SHIP_CLASSES]
reinforcements Reinforcements[MAX_REINFORCEMENTS]
SCP_vector< waypoint > & get_waypoints()
int num_initial_asteroids
int query_valid_object(int index)
int Squadron_wings[MAX_SQUADRON_WINGS]
sound_env sound_environment
waypoint_list * get_parent_list()
int object_is_docked(object *objp)
void convert_multiline_string(CString &dest, const SCP_string &src)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
bool use_special_explosion
#define MISSION_TYPE_SINGLE
int create_object_on_grid(int waypoint_instance)
char squad_filename[MAX_FILENAME_LEN]
void mission_parse_reset_alt()
GLdouble GLdouble GLdouble r
int update_data(int redraw=1)
#define SHIP_FILTER_FLYABLE
struct matrix::@228::@230 vec
char created[DATE_TIME_LENGTH]
void resolve_parse_flags(object *objp, int parse_flags, int parse_flags2)
int query_object_in_wing(int obj)
char Voice_abbrev_briefing[NAME_LENGTH]
int create_player(int num, vec3d *pos, matrix *orient, int type, int init)
void stars_post_level_init()
void set_cur_object_index(int obj)
SCP_vector< briefing_icon_info > Briefing_icon_info
int query_valid_ship(int index)
int secondary_bank_capacity[MAX_SHIP_SECONDARY_BANKS]
event_editor * Event_editor_dlg
int vm_init(int min_heap_size)
char * Nebula_filenames[NUM_NEBULAS]
void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom)
ai_profile_t * ai_profile
int gray_menu_tree(CMenu *base)
char Squadron_wing_names[MAX_SQUADRON_WINGS][NAME_LENGTH]
float max_hull_repair_val
#define MAX_STARTING_WINGS
ai_goal goals[MAX_AI_GOALS]
mission_event Mission_events[MAX_MISSION_EVENTS]
void cmdline_debug_print_cmdline()
ai_profile_t Ai_profiles[MAX_AI_PROFILES]
int dup_object(object *objp)
#define SHIPS_2_COMBO_SPECIAL
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void vm_set_identity(matrix *m)
#define SHIP_FILTER_PLAYERS
void event_music_reset_choices()
void set_physics_controls()
int weaponry_pool[MAX_WEAPON_TYPES]
int update_data(int redraw=1)
char Voice_script_entry_format[NOTES_LENGTH]
void delete_reinforcement(int num)
void set_valid_dock_points(int ship, int type, CComboBox *box)
char squad_name[NAME_LENGTH]
int Shield_sys_types[MAX_SHIP_CLASSES]
int sexp_reference_handler(int node, int code, char *msg)
char Voice_abbrev_debriefing[NAME_LENGTH]
void physics_init(physics_info *pi)
#define AI_GOAL_STAY_STILL
int secondary_bank_weapons[MAX_SHIP_SECONDARY_BANKS]
int query_whole_wing_marked(int wing)
object * dock_get_first_docked_object(object *objp)
int wing_objects[MAX_WINGS][MAX_SHIPS_PER_WING]
char skybox_model[MAX_FILENAME_LEN]
int Voice_export_selection
int waypoint_add(vec3d *pos, int waypoint_instance)
int wing_is_player_wing(int wing)
#define SRC_WING_DEPARTURE
#define REF_TYPE_WAYPOINT
char Mission_filename[80]
char Voice_abbrev_message[NAME_LENGTH]
#define AI_GOAL_EVADE_SHIP
int cfile_chdir(const char *dir)
Change to the specified directory.
#define SIF_DEFAULT_PLAYER_SHIP
int secondary_bank_ammo[MAX_SHIP_SECONDARY_BANKS]
void allocate_mission_text(int size)
int query_valid_waypoint(int index)
int delete_ship(int ship)
char loading_screen[GR_NUM_RESOLUTIONS][MAX_FILENAME_LEN]
#define AI_GOAL_IGNORE_NEW
object Objects[MAX_OBJECTS]
ai_goal_list Ai_goal_list[]
#define AI_GOAL_PLAY_DEAD
#define SPECIAL_ARRIVAL_ANCHOR_PLAYER_FLAG
bool Voice_no_replace_filenames
void string_copy(char *dest, const CString &src, int max_len, int modify)
int ship_create(matrix *orient, vec3d *pos, int ship_type, char *ship_name)
SCP_vector< mission_cutscene > cutscenes
#define AI_GOAL_WAYPOINTS_ONCE
#define vm_vec_make(v, _x, _y, _z)
char modified[DATE_TIME_LENGTH]
void mission_brief_common_init()
void hud_init_comm_orders()
int TVT_wings[MAX_TVT_WINGS]
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
waypoint * find_waypoint_with_instance(int waypoint_instance)
wing_editor Wing_editor_dialog
#define AI_GOAL_GUARD_WING
physics_info view_physics
void jumpnode_level_close()
int wing_name_lookup(const char *name, int ignore_count)
int Starting_wings[MAX_STARTING_WINGS]
void set_modified(BOOL arg)
GLuint const GLchar * name
int weaponry_count[MAX_WEAPON_TYPES]
int get_special_anchor(char *name)
char command_sender[NAME_LENGTH]
#define MISSION_TYPE_TRAINING
int create_ship(matrix *orient, vec3d *pos, int ship_type)
char * get_order_name(int order)
const char * Osreg_company_name
int query_referenced_in_ai_goals(int type, const char *name)
int string_lookup(const CString &str1, char *strlist[], int max)
CJumpNode * jumpnode_get_by_name(const CString &name)
int Shield_sys_teams[MAX_IFFS]
typedef float(SCP_EXT_CALLCONV *SCPTRACKIR_PFFLOATVOID)()
#define WIF_PLAYER_ALLOWED
void obj_delete(int objnum)
#define MB_ICONEXCLAMATION
#define AI_GOAL_KEEP_SAFE_DISTANCE
int field_debris_type[MAX_ACTIVE_DEBRIS_TYPES]
int delete_wing(int wing_num, int bypass)
#define AI_GOAL_DISABLE_SHIP
char Mission_parse_storm_name[NAME_LENGTH]
void waypoint_level_close()
int common_object_delete(int obj)
int fred2_parse_cmdline(int argc, char *argv[])
void mark_object(int obj)
int set_reinforcement(char *name, int state)
int query_initial_orders_empty(ai_goal *ai_goals)
void generate_wing_popup_menu(CMenu *mptr, int first_id, int state)
#define SHIPS_2_COMBO_ALL_SHIPS
void copy_bits(int *dest, int src, int mask)
char * Docking_bay_list[MAX_DOCKS]
#define MAX_REINFORCEMENTS
int verify_sexp_tree(int node)
waypoint_path_dlg Waypoint_editor_dialog
SCP_vector< ship_info > Ship_info
void ai_do_objects_undocked_stuff(object *docker, object *dockee)
int MessageBox(HWND h, const char *s1, const char *s2, int i)
char TVT_wing_names[MAX_TVT_WINGS][NAME_LENGTH]
int hud_anim_load(hud_anim *ha)
Load a hud_anim.
SCP_vector< float > shield_quadrant
SCP_vector< species_info > Species_info
char mission_desc[MISSION_DESC_LENGTH]
int ship_get_default_orders_accepted(ship_info *sip)
#define MAX_TVT_WINGS_PER_TEAM
GLsizei GLsizei GLuint * obj
int ENVMAP
References a map that is for environment mapping -Bobboau.
CCriticalSection CS_cur_object_index
void unmark_object(int obj)
debris_genre_t debris_genre
int internal_integrity_check()
int query_initial_orders_conflict(int wing)
team_data Team_data[MAX_TVT_TEAMS]
int Default_command_persona
GLuint GLdouble GLdouble GLint GLint order
int ship_index[MAX_SHIPS_PER_WING]
void mission_parse_reset_callsign()
float fvi_ray_plane(vec3d *new_pnt, const vec3d *plane_pnt, const vec3d *plane_norm, const vec3d *ray_origin, const vec3d *ray_direction, float rad)
int reference_handler(char *name, int type, int obj)
asteroid_field Asteroid_field
char Voice_abbrev_mission[NAME_LENGTH]
SCP_vector< texture_replace > Fred_texture_replacements
briefing_editor_dlg * Briefing_dialog
int ship_name_lookup(const char *name, int inc_players)
char envmap_name[MAX_FILENAME_LEN]
void clear_menu(CMenu *ptr)
void generate_ship_usage_list(int *arr, int wing)
int get_ship_from_obj(int obj)
void brief_parse_icon_tbl()
char Fred_callsigns[MAX_SHIPS][NAME_LENGTH+1]
#define AI_GOAL_DESTROY_SUBSYSTEM
support_ship_info support_ships
#define SRC_SHIP_DEPARTURE
char Voice_abbrev_campaign[NAME_LENGTH]
void waypoint_remove(waypoint *wpt)
int query_ship_name_duplicate(int ship)
char iff_name[NAME_LENGTH]
void management_add_ships_to_combo(CComboBox *box, int flags)
matrix vmd_identity_matrix
void g3_point_to_vec_delayed(vec3d *v, int sx, int sy)
float max_subsys_repair_val
void update_texture_replacements(const char *old_name, const char *new_name)
char ship_name[NAME_LENGTH]
void focus_sexp(int select_sexp_node)
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
#define OF_DOCKED_ALREADY_HANDLED
void clear_texture_replacements()
void load_filter_info(void)
int advanced_stricmp(char *one, char *two)
#define MISSION_TEXT_SIZE
int calc_waypoint_list_index(int waypoint_instance)
int cfile_init(const char *exe_dir, const char *cdrom_dir)
Initialize the cfile system. Called once at application start.
#define g3_start_frame(zbuffer_flag)
int ship_list[MAX_SHIP_CLASSES]
#define MISSION_TYPE_MULTI_TEAMS
void palette_load_table(const char *filename)