17 #include "FredRender.h"
22 #include "Management.h"
33 #include "MissionGoalsDlg.h"
36 #include "PlayerStartEditor.h"
37 #include "OrientEditor.h"
38 #include "EventEditor.h"
39 #include "MessageEditorDlg.h"
41 #include "StarfieldEditor.h"
43 #include "ReinforcementEditorDlg.h"
44 #include "AsteroidEditorDlg.h"
45 #include "CampaignTreeWnd.h"
46 #include "DebriefingEditorDlg.h"
47 #include "AdjustGridDlg.h"
48 #include "ShieldSysDlg.h"
51 #include "DumpStats.h"
52 #include "SetGlobalShipFlags.h"
53 #include "VoiceActingManager.h"
67 static char THIS_FILE[] = __FILE__;
73 #define FRED_EXPIRE_TIME (7 * 1000)
77 #define EXPIRE_BAD_CHECKSUM 1
78 #define EXPIRE_BAD_TIME 2
80 #define SHIP_TYPES 8000
81 #define REDUCER 100.0f
82 #define DUP_DRAG_OF_WING 2
149 ON_UPDATE_COMMAND_UI(ID_VIEW_GRID, OnUpdateViewGrid)
151 ON_UPDATE_COMMAND_UI(ID_SHOW_WAYPOINTS, OnUpdateViewWaypoints)
164 ON_UPDATE_COMMAND_UI(ID_EDIT_POPUP_SHOW_SHIP_ICONS, OnUpdateEditPopupShowShipIcons)
166 ON_UPDATE_COMMAND_UI(ID_EDIT_POPUP_SHOW_SHIP_MODELS, OnUpdateEditPopupShowShipModels)
169 ON_UPDATE_COMMAND_UI(ID_EDIT_POPUP_SHOW_COMPASS, OnUpdateEditPopupShowCompass)
171 ON_COMMAND(ID_CHANGE_VIEWPOINT_EXTERNAL, OnChangeViewpointExternal)
173 ON_COMMAND(ID_CHANGE_VIEWPOINT_FOLLOW, OnChangeViewpointFollow)
179 ON_UPDATE_COMMAND_UI(ID_SPEED1, OnUpdateSpeed1)
187 ON_UPDATE_COMMAND_UI(ID_SPEED2, OnUpdateSpeed2)
188 ON_UPDATE_COMMAND_UI(ID_SPEED3, OnUpdateSpeed3)
189 ON_UPDATE_COMMAND_UI(ID_SPEED5, OnUpdateSpeed5)
190 ON_UPDATE_COMMAND_UI(ID_SPEED8, OnUpdateSpeed8)
191 ON_UPDATE_COMMAND_UI(ID_SPEED10, OnUpdateSpeed10)
192 ON_UPDATE_COMMAND_UI(ID_ROT1, OnUpdateRot1)
193 ON_UPDATE_COMMAND_UI(ID_ROT2, OnUpdateRot2)
194 ON_UPDATE_COMMAND_UI(ID_ROT3, OnUpdateRot3)
195 ON_UPDATE_COMMAND_UI(ID_ROT4, OnUpdateRot4)
196 ON_UPDATE_COMMAND_UI(ID_ROT5, OnUpdateRot5)
198 ON_UPDATE_COMMAND_UI(ID_CONTROL_MODE_CAMERA, OnUpdateControlModeCamera)
200 ON_UPDATE_COMMAND_UI(ID_CONTROL_MODE_SHIP, OnUpdateControlModeShip)
202 ON_UPDATE_COMMAND_UI(ID_SHOW_GRID_POSITIONS, OnUpdateShowGridPositions)
204 ON_UPDATE_COMMAND_UI(ID_SHOW_COORDINATES, OnUpdateShowCoordinates)
206 ON_UPDATE_COMMAND_UI(ID_SPEED50, OnUpdateSpeed50)
208 ON_UPDATE_COMMAND_UI(ID_SPEED100, OnUpdateSpeed100)
210 ON_UPDATE_COMMAND_UI(ID_SELECT, OnUpdateSelect)
212 ON_UPDATE_COMMAND_UI(ID_SELECT_AND_MOVE, OnUpdateSelectAndMove)
214 ON_UPDATE_COMMAND_UI(ID_SELECT_AND_ROTATE, OnUpdateSelectAndRotate)
216 ON_UPDATE_COMMAND_UI(ID_CONSTRAIN_X, OnUpdateConstrainX)
218 ON_UPDATE_COMMAND_UI(ID_CONSTRAIN_Y, OnUpdateConstrainY)
220 ON_UPDATE_COMMAND_UI(ID_CONSTRAIN_Z, OnUpdateConstrainZ)
222 ON_UPDATE_COMMAND_UI(ID_CONSTRAIN_XZ, OnUpdateConstrainXz)
224 ON_UPDATE_COMMAND_UI(ID_SELECTION_LOCK, OnUpdateSelectionLock)
225 ON_WM_LBUTTONDBLCLK()
227 ON_UPDATE_COMMAND_UI(ID_DOUBLE_FINE_GRIDLINES, OnUpdateDoubleFineGridlines)
229 ON_UPDATE_COMMAND_UI(ID_SHOW_DISTANCES, OnUpdateShowDistances)
231 ON_UPDATE_COMMAND_UI(ID_UNIVERSAL_HEADING, OnUpdateUniversalHeading)
233 ON_UPDATE_COMMAND_UI(ID_FLYING_CONTROLS, OnUpdateFlyingControls)
235 ON_UPDATE_COMMAND_UI(ID_ROTATE_LOCALLY, OnUpdateRotateLocally)
237 ON_UPDATE_COMMAND_UI(ID_CONSTRAIN_XY, OnUpdateConstrainXy)
239 ON_COMMAND(ID_CONSTRAIN_YZ, OnConstrainYz)
243 ON_UPDATE_COMMAND_UI(ID_ZOOM_SELECTED, OnUpdateZoomSelected)
245 ON_UPDATE_COMMAND_UI(ID_FORM_WING, OnUpdateFormWing)
247 ON_UPDATE_COMMAND_UI(ID_DISBAND_WING, OnUpdateDisbandWing)
249 ON_UPDATE_COMMAND_UI(ID_SHOW_HORIZON, OnUpdateShowHorizon)
254 ON_UPDATE_COMMAND_UI(ID_EDITORS_ORIENT, OnUpdateEditorsOrient)
262 ON_UPDATE_COMMAND_UI(ID_VIEW_OUTLINES, OnUpdateViewOutlines)
265 ON_UPDATE_COMMAND_UI(ID_SHOW_STARFIELD, OnUpdateShowStarfield)
270 ON_UPDATE_COMMAND_UI(ID_SHOW_SHIPS, OnUpdateShowShips)
272 ON_UPDATE_COMMAND_UI(ID_SHOW_STARTS, OnUpdateShowStarts)
274 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_0, OnUpdateShowIFF0)
276 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_1, OnUpdateShowIFF1)
278 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_2, OnUpdateShowIFF2)
280 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_3, OnUpdateShowIFF3)
282 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_4, OnUpdateShowIFF4)
284 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_5, OnUpdateShowIFF5)
286 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_6, OnUpdateShowIFF6)
288 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_7, OnUpdateShowIFF7)
290 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_8, OnUpdateShowIFF8)
292 ON_UPDATE_COMMAND_UI(ID_SHOW_IFF_9, OnUpdateShowIFF9)
295 ON_UPDATE_COMMAND_UI(ID_REVERT, OnUpdateRevert)
299 ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
300 ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
305 ON_UPDATE_COMMAND_UI(ID_RESTORE_CAMERA, OnUpdateRestoreCamera)
307 ON_UPDATE_COMMAND_UI(ID_SHOW_SEXP_HELP, OnUpdateShowSexpHelp)
309 ON_UPDATE_COMMAND_UI(ID_LOOKAT_OBJ, OnUpdateLookatObj)
319 ON_UPDATE_COMMAND_UI(ID_CONTROL_OBJ, OnUpdateControlObj)
322 ON_UPDATE_COMMAND_UI(ID_AA_GRIDLINES, OnUpdateAaGridlines)
325 ON_UPDATE_COMMAND_UI(ID_DISABLE_UNDO, OnUpdateDisableUndo)
326 ON_UPDATE_COMMAND_UI(ID_EDITORS_CMD_BRIEF, OnUpdateCmdBrief)
332 ON_UPDATE_COMMAND_UI(ID_SHOW_PATHS, OnUpdateShowPaths)
334 ON_UPDATE_COMMAND_UI(ID_SHOW_DOCK_POINTS, OnUpdateShowDockPoints)
336 ON_UPDATE_COMMAND_UI(ID_FORMAT_FS2_OPEN, OnUpdateFormatFs2Open)
338 ON_UPDATE_COMMAND_UI(ID_FORMAT_FS2_OPEN_COMP, OnUpdateFormatFs2OpenComp)
340 ON_UPDATE_COMMAND_UI(ID_FORMAT_FS2_RETAIL, OnUpdateFormatFs2Retail)
342 ON_UPDATE_COMMAND_UI(ID_FORMAT_FS1_RETAIL, OnUpdateFormatFs1Retail)
350 ON_UPDATE_COMMAND_UI(ID_VIEW_LIGHTING, OnUpdateViewLighting)
352 ON_UPDATE_COMMAND_UI(ID_VIEW_FULL_DETAIL, OnUpdateViewFullDetail)
354 ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
355 ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
356 ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
364 CFREDView::CFREDView()
387 m_pGDlg =
new CGrid(
this);
391 Fred_view_wnd =
this;
413 casperl = CView::PreCreateWindow(cs);
446 return DoPreparePrinting(pInfo);
463 void CFREDView::AssertValid()
const
465 CView::AssertValid();
468 void CFREDView::Dump(CDumpContext& dc)
const
475 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(
CFREDDoc)));
505 #define MAX_MOVE_DISTANCE 25.0f
513 int z, cobj, flag, rval = 1;
515 float distance_moved = 0.0f;
516 vec3d cursor_dir, int_pnt;
517 vec3d movement_vector;
620 obj = int_pnt = objp->
pos;
635 tmpAnticonstraint.
xyz.x = 0.0f;
670 if (distance_moved) {
728 matrix leader_orient, leader_transpose, tmp, newmat, rotmat;
729 object *leader, *
objp;
750 obj = int_pnt = objp->
pos;
752 memset(&a, 0,
sizeof(
angles));
775 leader_orient = leader->
orient;
854 vec3d movement_vector;
885 objp->
pos = rotation_backup[obj_index].
pos;
904 int waypoint_instance = -1;
907 CView::OnLButtonDown(nFlags, point);
917 marking_box.
x1 = point.x;
918 marking_box.
y1 = point.y;
926 if (nFlags & MK_CONTROL) {
952 if (!(nFlags & MK_SHIFT))
986 CView::OnLButtonDown(nFlags, point);
999 if (!(nFlags & MK_LBUTTON))
1011 if (abs(marking_box.
x1 - marking_box.
x2) > 1 || abs(marking_box.
y1 - marking_box.
y2) > 1)
1029 CView::OnMouseMove(nFlags, point);
1034 marking_box.
x2 = point.x;
1035 marking_box.
y2 = point.y;
1040 if (GetCapture() ==
this)
1044 if ((abs(marking_box.
x1 - marking_box.
x2) > 1) || (abs(marking_box.
y1 - marking_box.
y2) > 1))
1088 MessageBox(
"Max ships per wing limit reached");
1122 CView::OnLButtonUp(nFlags, point);
1148 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
1156 lKeyData = lParam & 255;
1157 if (lParam & 256) lKeyData += 0x80;
1160 CView::OnKeyDown(nChar, nRepCnt, lParam);
1167 lKeyData = lParam & 255;
1168 if (lParam & 256) lKeyData += 0x80;
1171 CView::OnKeyUp(nChar, nRepCnt, lParam);
1176 static int flag = 0;
1182 nprintf((
"Fred routing",
"OnSetFocus() called\n"));
1200 nprintf((
"Fred routing",
"OnSetFocus() returned (error occured)\n"));
1213 CView::OnSetFocus(pOldWnd);
1214 nprintf((
"Fred routing",
"Main window focus accepted\n"));
1223 Fred_main_wnd->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
1224 nprintf((
"Fred routing",
"OnSetFocus() had to put main window back on top\n"));
1232 nprintf((
"Fred routing",
"OnKillFocus() called\n"));
1235 CView::OnKillFocus(pNewWnd);
1242 CView::OnSize(nType, cx, cy);
1254 if (nFlags & MK_LBUTTON){
1257 if (nFlags & MK_RBUTTON){
1267 int x,
y, valid, icon_mode = 0;
1271 if (marking_box.
x1 > marking_box.
x2) {
1273 marking_box.
x1 = marking_box.
x2;
1277 if (marking_box.
y1 > marking_box.
y2) {
1279 marking_box.
y1 = marking_box.
y2;
1290 switch (ptr->
type) {
1349 point = * ((CPoint*) lParam);
1351 ClientToScreen(&point);
1354 menu.GetSubMenu(0)->TrackPopupMenu(
1355 TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
this);
1365 point = * ((CPoint*) lParam);
1367 ClientToScreen(&point);
1370 menu.GetSubMenu(0)->TrackPopupMenu(
1371 TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
this);
1381 if (g_Ships_as_icons == 0)
1382 g_Ships_as_icons = 1;
1384 g_Ships_as_icons = 0;
1395 CPoint
local = point;
1403 ScreenToClient(&local);
1410 CMenu* pPopup = menu.GetSubMenu(0);
1412 ASSERT(pPopup != NULL);
1419 str.Format(
"Edit %s",
Ships[
Objects[objnum].instance].ship_name);
1424 if(jnp->GetSCPObject() == &
Objects[objnum])
1427 str.Format(
"Edit %s", jnp->GetName());
1435 str.Format(
"Edit %s:%d", wp_list->
get_name(), idx + 1);
1442 str = _T(
"Unknown");
1448 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
1454 CMenu* pPopup = menu.GetSubMenu(0);
1455 CMenu shipPopup, player_submenu;
1456 CMenu *species_submenu =
new CMenu[
Species_info.size()];
1457 ASSERT(pPopup != NULL);
1460 shipPopup.CreatePopupMenu();
1465 species_submenu[
i].CreatePopupMenu();
1466 shipPopup.AppendMenu(MF_STRING | MF_POPUP | MF_ENABLED,
1471 species_submenu[it->species].AppendMenu(MF_STRING |
1474 pPopup->AppendMenu(MF_STRING | MF_POPUP | MF_ENABLED,
1475 (
UINT) shipPopup.m_hMenu,
"New Object Type");
1477 CWnd::DrawMenuBar();
1478 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd());
1522 CFrameWnd *pFrame = (CFrameWnd *) (AfxGetApp()->m_pMainWnd);
1524 CView *pView = pFrame->GetActiveView();
1532 if (! pView->IsKindOf(RUNTIME_CLASS(
CFREDView)))
1621 if (!pHandlerInfo) {
1623 if (nCode == CN_COMMAND) {
1627 }
else if (nCode == CN_UPDATE_COMMAND_UI) {
1630 ((CCmdUI*) pExtra)->Enable(
TRUE);
1637 return CView::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
1645 "Number of Objects: %d\n"
1646 "Number of Ships: %d\n"
1647 "Number of Wings: %d\n",
1984 CView::OnLButtonDblClk(nFlags, point);
2068 float dist, largest = 20.0f;
2089 if (center.
xyz.x < p1.
xyz.x)
2091 if (center.
xyz.x > p2.
xyz.x)
2093 if (center.
xyz.y < p1.
xyz.y)
2095 if (center.
xyz.y > p2.
xyz.y)
2097 if (center.
xyz.z < p1.
xyz.z)
2099 if (center.
xyz.z > p2.
xyz.z)
2122 dist =
fl_sqrt(largest) + 1.0f;
2211 int ok =
MessageBox(
"Some of the ships you selected to create a wing are marked as reinforcements. Press Ok to clear the flag on all selected ships. Press Cancel to not create the wing.",
"Reinforcement conflict",
MB_ICONEXCLAMATION |
MB_OKCANCEL);
2256 pCmdUI->Enable(count > 0);
2295 MessageBox(
"One and only one wing must be selected for this operation");
2327 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2348 MessageBox(
"You must close the message editor before opening the event editor");
2357 Event_editor_dlg->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2369 MessageBox(
"You must close the event editor before opening the message editor");
2378 Message_editor_dlg->SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2401 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
2418 MessageBox(
"No errors were detected in this mission",
"Woohoo!");
2429 char buf[256], *str;
2430 int bs,
i, j,
n,
s,
t,
z, ai,
count,
ship,
wing,
obj,
team, point, multi;
2433 int starting_orders;
2456 if ((z < 0) || (z >= static_cast<int>(
Ship_info.size()))){
2466 if (
error(
"Invalid ship type for a player. Ship has been reset to non-player ship.")){
2472 if (
Ships[i].weapons.primary_bank_weapons[n] >= 0){
2478 if (
error(
"Player \"%s\" has no primary weapons. Should have at least 1",
Ships[i].ship_name)){
2484 if (
Ships[i].weapons.secondary_bank_weapons[n] >= 0){
2521 if (strlen(
Wings[wing].wing_squad_filename) > 0)
2525 if (
error(
"Wing squad logos are not displayed in multiplayer games."))
2534 if (
error(
"A squad logo was assigned to the player's wing. The player's squad logo will be displayed instead of the wing squad logo on ships in this wing."))
2544 if (
error(
"Ship flagged as \"destroy before mission start\" has a hotkey assignment")){
2550 if (
error(
"Player start flagged as \"destroy before mission start\"")){
2558 if (wp_list == NULL) {
2559 return internal_error(
"Object references an illegal waypoint path number");
2562 if (waypoint_num < 0 || (
uint) waypoint_num >= wp_list->
get_waypoints().size()) {
2563 return internal_error(
"Object references an illegal waypoint number in path");
2572 return internal_error(
"Briefing icon detected when not in briefing edit mode");
2598 return internal_error(
"Total number of player ships is incorrect");
2607 if (
Ships[i].objnum >= 0) {
2627 if (
Ships[i].arrival_anchor < 0){
2628 if (
error(
"Ship \"%s\" requires a valid arrival target",
Ships[i].ship_name)){
2635 if (
Ships[i].departure_anchor < 0){
2636 if (
error(
"Ship \"%s\" requires a valid departure target",
Ships[i].ship_name)){
2647 if (
Ai_info[ai].shipnum != i){
2653 return internal_error(
"Initial orders error for ship \"%s\"\n\n%s",
Ships[i].ship_name, str + 1);
2654 else if (*str ==
'!')
2656 else if (
error(
"Initial orders error for ship \"%s\"\n\n%s",
Ships[i].ship_name, str))
2666 return internal_error(
"Ship \"%s\" initially docked with non-existant ship",
Ships[i].ship_name);
2670 return internal_error(
"Ship \"%s\" initially docked with non-ship object",
Ships[i].ship_name);
2675 return internal_error(
"Docking illegal between \"%s\" and \"%s\" (initially docked)",
Ships[i].ship_name,
Ships[ship].ship_name);
2679 point = dock_ptr->dockpoint_used;
2680 if (point < 0 || point >= z){
2681 internal_error(
"Invalid docker point (\"%s\" initially docked with \"%s\")",
Ships[i].ship_name,
Ships[ship].ship_name);
2686 if (point < 0 || point >= z){
2687 internal_error(
"Invalid dockee point (\"%s\" initially docked with \"%s\")",
Ships[i].ship_name,
Ships[ship].ship_name);
2693 if (!is_in_loadout_screen && wing >= 0) {
2698 is_in_loadout_screen =
true;
2705 is_in_loadout_screen =
true;
2711 if (is_in_loadout_screen) {
2726 if (illegal &&
error(
"%d illegal weapon(s) found on ship \"%s\"", illegal,
Ships[i].ship_name)) {
2750 return internal_error(
"Wing_objects has an illegal object index");
2754 return internal_error(
"Wing_objects references an unused object");
2765 return internal_error(
"Ship \"%s\" in wing should be called \"%s\"",
Ships[ship].ship_name, buf);
2771 if (
error(
"Ship \"%s\" is an illegal type to be in a wing",
Ships[ship].ship_name)){
2779 if (
Ships[ship].wingnum != i){
2783 if (ship !=
Wings[i].ship_index[j]){
2789 }
else if (team !=
Ships[ship].team && team < 999){
2790 if (
error(
"ship teams mixed within same wing (\"%s\")",
Wings[i].
name)){
2796 if ((
Wings[i].special_ship < 0) || (
Wings[i].special_ship >=
Wings[i].wave_count)){
2800 if (
Wings[i].num_waves < 0){
2804 if ((
Wings[i].threshold < 0) || (
Wings[i].threshold >=
Wings[i].wave_count)){
2808 if (
Wings[i].threshold +
Wings[i].wave_count > MAX_SHIPS_PER_WING) {
2810 if(
error(
"Threshold for wing \"%s\" is higher than allowed. Reset to %d",
Wings[i].
name,
Wings[i].threshold)){
2832 if (
Wings[i].arrival_anchor < 0)
2833 if (
error(
"Wing \"%s\" requires a valid arrival target",
Wings[i].name))
2838 if (
Wings[i].departure_anchor < 0)
2839 if (
error(
"Wing \"%s\" requires a valid departure target",
Wings[i].name))
2845 return internal_error(
"Initial orders error for wing \"%s\"\n\n%s",
Wings[i].name, str + 1);
2846 else if (*str ==
'!')
2848 else if (
error(
"Initial orders error for wing \"%s\"\n\n%s",
Wings[i].name, str))
2869 for (j = 0; (
uint) j < ii->get_waypoints().size(); j++) {
2870 sprintf(buf,
"%s:%d", ii->get_name(), j + 1);
2879 if (z == obj_count){
2880 return internal_error(
"Waypoint \"%s\" not linked to an object", buf);
2886 return internal_error(
"Number of player starts exceeds max limit");
2890 if (
error(
"Multiple player starts exist, but this is a single player mission")){
2896 return internal_error(
"Number of reinforcements exceeds max limit");
2916 return internal_error(
"Reinforcement name not found in ships or wings");
2937 i = global_error_check_player_wings(multi);
2958 for (i=0; i<t-1; i++){
2959 for (j=i+1; j<
t; j++) {
2961 if (
error(
"Duplicate icon IDs %d in briefing stage %d", sp->
icons[i].
id, s + 1)){
2980 starting_orders = -1;
2982 int default_orders, starting_wing;
2984 if ( !
Wings[i].wave_count ){
2993 if (
error(
"Starting Wing %s marked as reinforcement. This wing\nshould either be renamed, or unmarked as reinforcement.",
Wings[i].name) ){
3004 default_orders = orders;
3005 }
else if ( default_orders != orders ) {
3006 if (
error(
"%s and %s will accept different orders. All ships in a wing must accept the same Player Orders.",
Ships[
Wings[i].ship_index[j]].ship_name,
Ships[
Wings[i].ship_index[0]].ship_name ) ){
3041 int i,
s, species = -1, mixed = 0;
3052 if (
error(
"%s wing must all be of the same species",
Wings[w].
name))
3058 int CFREDView::global_error_check_player_wings(
int multi)
3065 CString starting_wing_list =
"";
3066 CString tvt_wing_list =
"";
3075 if (
error(
"%s wing is required for multiplayer team vs. team missions"))
3095 if (
error(
"%s wing must contain only 1 wave.\nThis change has been made for you.",
TVT_wing_names[i]))
3180 starting_wing_count[
i] = 0;
3182 if (i < MAX_STARTING_WINGS - 1)
3185 if (MAX_STARTING_WINGS > 2)
3186 starting_wing_list +=
",";
3187 starting_wing_list +=
" ";
3191 starting_wing_list +=
"or ";
3197 tvt_wing_count[
i] = 0;
3199 if (i < MAX_TVT_WINGS - 1)
3202 if (MAX_TVT_WINGS > 2)
3203 tvt_wing_list +=
",";
3204 tvt_wing_list +=
" ";
3208 tvt_wing_list +=
"or ";
3231 int in_starting_wing = 0;
3232 int in_tvt_wing = 0;
3239 in_starting_wing = 1;
3240 starting_wing_count[
i]++;
3248 tvt_wing_count[
i]++;
3262 if (!in_starting_wing)
3273 if (
error(
"Player %s should be part of %s wing",
Ships[ship_instance].ship_name, tvt_wing_list))
3278 if (
error(
"Player %s should be part of %s wing",
Ships[ship_instance].ship_name, starting_wing_list))
3292 if (!tvt_wing_count[i])
3308 va_start(args, msg);
3309 vsnprintf(buf,
sizeof(buf)-1, msg, args);
3311 buf[
sizeof(
buf)-1] =
'\0';
3325 va_start(args, msg);
3326 vsnprintf(buf,
sizeof(buf)-1, msg, args);
3328 buf[
sizeof(
buf)-1] =
'\0';
3335 sprintf(buf2,
"%s\n\nThis is an internal error. Please let Jason\n"
3336 "know about this so he can fix it. Click cancel to debug.", buf);
3351 int err = 0,
z, faulty_node;
3354 va_start(args, msg);
3375 if (
error(error_buf.c_str()))
3393 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
3400 int i, j,
num, flag, found, inst,
team, team2;
3408 if (Fred_view_wnd->
error(
"Order \"%s\" isn't allowed for ship \"%s\"",
get_order_name(goals[i].ai_mode), source))
3420 if (Fred_view_wnd->
error(
"Order \"%s\" isn't allowed for ship \"%s\"",
get_order_name(goals[i].ai_mode),
3427 switch (goals[i].ai_mode) {
3444 return "Wings can't dock";
3469 return "*Invalid goal type";
3474 if (*goals[i].target_name ==
'<')
3475 return "Invalid target";
3477 if (!
stricmp(goals[i].target_name, source))
3479 return "Target of ship's goal is itself";
3481 return "Target of wing's goal is itself";
3487 return "*Invalid target waypoint path name";
3489 }
else if (flag == 2) {
3494 if (!
stricmp(goals[i].target_name,
Ships[inst].ship_name)) {
3504 return "*Invalid target ship name";
3508 return "Target ship of wing's goal is within said wing";
3513 }
else if (flag == 3) {
3519 return "*Invalid target wing name";
3522 if (
Ships[ship].wingnum == j)
3523 return "Target wing of ship's goal is same wing said ship is part of";
3528 }
else if (flag == 4) {
3533 if (!
stricmp(goals[i].target_name,
Ships[inst].ship_name)) {
3549 return "*Invalid target ship or waypoint name";
3554 return "Target ship of wing's goal is within said wing";
3561 switch (goals[i].ai_mode) {
3563 Assert(flag == 2 && inst >= 0);
3565 return "Unknown subsystem type";
3570 int dock1 = -1, dock2 = -1, model1, model2;
3572 Assert(flag == 2 && inst >= 0);
3574 return "Docking illegal between given ship types";
3578 for (j=0; j<
num; j++) {
3588 for (j=0; j<
num; j++) {
3597 return "Invalid docker point";
3600 return "Invalid dockee point";
3602 if ((dock1 >= 0) && (dock2 >= 0)) {
3604 return "Dock points are incompatible";
3611 switch (goals[i].ai_mode) {
3614 if (team != team2) {
3616 return "Ship assigned to guard a different team";
3618 return "Wing assigned to guard a different team";
3628 if (team == team2) {
3630 return "Ship assigned to attack same team";
3632 return "Wings assigned to attack same team";
3759 bar = GetDlgItem(pCmdUI->m_nID);
3761 pCmdUI -> ContinueRouting();
3765 pCmdUI -> SetCheck((bar->GetStyle() & WS_VISIBLE) != 0);
3791 PROCESS_INFORMATION pi;
3798 si.lpReserved = NULL;
3799 si.lpDesktop = NULL;
3803 si.lpReserved2 = NULL;
3806 std::string processed_name(AfxGetApp()->m_pszExeName);
3807 std::string::size_type fred_index = processed_name.find(
"fred2_open", 0);
3809 if (fred_index == std::string::npos) {
3810 fred_index = processed_name.find(
"Fred2_Open", 0);
3813 if (fred_index != std::string::npos) {
3815 processed_name.erase(fred_index, 10);
3816 processed_name.insert(fred_index,
"FS2_Open");
3817 processed_name.append(
".exe");
3820 r = CreateProcess(processed_name.c_str(), NULL, NULL, NULL,
FALSE, 0, NULL,
"./", &si, &pi);
3826 r = CreateProcess(
"start_fs2.bat", NULL, NULL, NULL,
FALSE, 0, NULL,
"./", &si, &pi);
3829 r = CreateProcess(
"fs2_open.exe", NULL, NULL, NULL,
FALSE, 0, NULL,
"./", &si, &pi);
3833 r = CreateProcess(
"fs2_open_r.exe", NULL, NULL, NULL,
FALSE, 0, NULL,
"./", &si, &pi);
3838 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
3841 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
3851 LocalFree( lpMsgBuf );
3862 if (
Campaign_wnd->Create(NULL,
"Campaign Editor", WS_OVERLAPPEDWINDOW | WS_MAXIMIZE,
3863 CFrameWnd::rectDefault, NULL,
"IDR_MENU_CAMPAIGN")) {
3945 return CView::OnSetCursor(pWnd, nHitTest, message);
4003 SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
4119 Fred_main_wnd->MessageBox(
"Only ships can be in groups, and not players or waypoints, etc.\n"
4120 "These illegal objects you marked were not placed in the group");
4127 char *ptr, text[512];
4129 CView::OnInitialUpdate();
4135 int stamped_checksum, checksum;
4139 memcpy(&stamped_checksum, ptr,
sizeof(stamped_checksum) );
4144 if ( checksum != stamped_checksum ){
4152 int expire_time, current_time;
4155 memcpy( &expire_time, ptr,
sizeof(expire_time) );
4156 time( (time_t*)¤t_time );
4157 if ( current_time > expire_time )
4165 sprintf(text,
"This version of Fred has been compiled for %s", ptr);
4425 if (*next_subsys == NULL) {
4431 if ((*next_subsys)->system_info->subobj_num != -1) {
4439 if ((*next_subsys)->system_info->subobj_num != -1) {
4459 Assert(*prev_subsys != NULL);
4463 if ((*prev_subsys)->system_info->subobj_num != -1) {
4471 if ((*prev_subsys)->system_info->subobj_num != -1) {
4496 if (Render_subsys.
ship_obj == objp) {
4672 if (CView::OnCreate(lpCreateStruct) == -1)
4675 MoveWindow(0,0,200,300,1);
4713 return CView::DestroyWindow();
afx_msg void OnZoomExtents()
void key_mark(uint code, int state, uint latency)
afx_msg void OnUpdateFlyingControls(CCmdUI *pCmdUI)
afx_msg void OnUpdateUniversalHeading(CCmdUI *pCmdUI)
afx_msg void OnUpdateShowSexpHelp(CCmdUI *pCmdUI)
afx_msg void OnUpdateViewWaypoints(CCmdUI *pCmdUI)
afx_msg void OnEditorsPlayer()
int query_single_wing_marked()
char Starting_wing_names[MAX_STARTING_WINGS][NAME_LENGTH]
afx_msg void OnSelectList()
#define ID_EDITORS_ADJUST_GRID
struct screen3d::@234::@236 xyw
afx_msg void OnEditorsDebriefing()
void wing_bash_ship_name(char *ship_name, const char *wing_name, int index)
int fred_check_sexp(int sexp, int type, const char *msg,...)
#define ID_EDIT_POPUP_SHOW_SHIP_MODELS
virtual void OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo)
afx_msg void OnDisableUndo()
afx_msg void OnEditorsVoiceManager()
color_combo_box m_new_ship_type_combo_box
afx_msg void OnShowDistances()
model_subsystem * system_info
int primary_bank_weapons[MAX_SHIP_PRIMARY_BANKS]
int Id_select_type_waypoint
afx_msg void OnShowIFF2()
afx_msg void OnUpdateFormatFs2Open(CCmdUI *pCmdUI)
afx_msg void OnUpdateFormatFs2OpenComp(CCmdUI *pCmdUI)
afx_msg void OnShowStarts()
#define MAX_SHIP_PRIMARY_BANKS
afx_msg void OnEditorsReinforcement()
afx_msg void OnUpdateChangeViewpointFollow(CCmdUI *pCmdUI)
#define DEPART_AT_LOCATION
CMessageEditorDlg * Message_editor_dlg
matrix * vm_matrix_x_matrix(matrix *dest, const matrix *src0, const matrix *src1)
afx_msg void OnUpdateShowHorizon(CCmdUI *pCmdUI)
afx_msg void OnEditorCampaign()
afx_msg void OnEditorsShips()
void vm_vec_scale_add(vec3d *dest, const vec3d *src1, const vec3d *src2, float k)
#define DEFAULT_CHECKSUM_STRING
afx_msg void OnUpdateRestoreCamera(CCmdUI *pCmdUI)
#define ID_EDITORS_MESSAGE
afx_msg void OnUpdateCmdBrief(CCmdUI *pCmdUI)
#define ID_EDITORS_FICTION
afx_msg void OnUpdateFormatFs2Retail(CCmdUI *pCmdUI)
int update_dialog_boxes()
void view_universe(int just_marked=0)
CShipEditorDlg Ship_editor_dialog
virtual void OnDraw(CDC *pDC)
window_data Waypoint_wnd_data
afx_msg void OnGroup(UINT nID)
#define ID_FORMAT_FS2_RETAIL
afx_msg void OnUpdateSpeed50(CCmdUI *pCmdUI)
afx_msg void OnUpdateSelectAndMove(CCmdUI *pCmdUI)
#define SEXP_ERROR_CHECK_MODE
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName)
#define AI_GOAL_CHASE_WING
afx_msg void OnSaveCamera()
matrix * vm_angles_2_matrix(matrix *m, const angles *a)
#define AI_GOAL_WAYPOINTS
char * object_name(int obj)
void object_moved(object *objp)
int model_get_dock_index_type(int modelnum, int index)
int ship_starting_wing_lookup(const char *wing_name)
afx_msg void OnViewOutlines()
object_orient_pos rotation_backup[MAX_OBJECTS]
brief_stage stages[MAX_BRIEF_STAGES]
int error(const char *msg,...)
afx_msg void OnShowIFF7()
#define ID_EDIT_POPUP_SHOW_SHIP_ICONS
void remove_wing(int wing_num)
afx_msg void OnControlModeCamera()
waypoint_list * find_waypoint_list_with_instance(int waypoint_instance, int *waypoint_index)
int delete_object(int obj)
afx_msg void OnUpdateShowDistances(CCmdUI *pCmdUI)
afx_msg void OnConstrainXz()
afx_msg void OnConstrainXy()
afx_msg void OnSetFocus(CWnd *pOldWnd)
int Id_select_type_jump_node
int ship_tvt_wing_lookup(const char *wing_name)
afx_msg void OnShowPaths()
int init_window(window_data *wndd, CWnd *wnd, int adjust=0, int pre=0)
afx_msg void OnUpdateFormWing(CCmdUI *pCmdUI)
afx_msg void OnHideObjects()
#define AI_GOAL_STAY_NEAR_SHIP
afx_msg BOOL OnEraseBkgnd(CDC *pDC)
afx_msg void OnErrorChecker()
#define AI_GOAL_CHASE_ANY
afx_msg void OnShowGridPositions()
void write_ini_file(int degree=0)
afx_msg void OnUpdateControlModeCamera(CCmdUI *pCmdUI)
afx_msg void OnEditorsFiction()
void maybe_create_new_grid(grid *gridp, vec3d *pos, matrix *orient, int force)
afx_msg void OnUpdateConstrainY(CCmdUI *pCmdUI)
#define WM_MENU_POPUP_EDIT
afx_msg void OnSpeed100()
struct vec3d::@225::@227 xyz
#define ID_EDITORS_ORIENT
static CFREDView * GetView()
afx_msg void OnDoubleFineGridlines()
virtual void OnInitialUpdate()
afx_msg void OnShowIFF0()
#define MISSION_TYPE_MULTI
matrix * vm_copy_transpose(matrix *dest, const matrix *src)
ai_info Ai_info[MAX_AI_INFO]
vec3d * vm_vec_rotate(vec3d *dest, const vec3d *src, const matrix *m)
#define ID_EDITORS_PLAYER
#define ID_SHOW_SEXP_HELP
afx_msg void OnShowShips()
afx_msg void OnUpdateSpeed3(CCmdUI *pCmdUI)
int dock_find_dockpoint_used_by_object(object *objp, object *other_objp)
#define END_OF_LIST(head)
#define ID_FORMAT_FS1_RETAIL
int get_prev_visible_subsys(ship *shipp, ship_subsys **prev_subsys)
#define ID_SELECT_AND_ROTATE
afx_msg void OnUpdateEditPopupShowCompass(CCmdUI *pCmdUI)
#define AI_GOAL_DISARM_SHIP
CMainFrame * Fred_main_wnd
#define ID_UNIVERSAL_HEADING
afx_msg void OnRunFreeSpace()
afx_msg void OnUpdateRevert(CCmdUI *pCmdUI)
afx_msg void OnRotateLocally()
afx_msg void OnToggleViewpoint()
GLenum GLuint GLenum GLsizei const GLchar * message
UINT WPARAM LPARAM lParam
#define ID_SHOW_WAYPOINTS
waypoint_list * cur_waypoint_list
#define MAX_SHIPS_PER_WING
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
void obj_merge_created_list(void)
#define ID_SHOW_DISTANCES
afx_msg void OnUpdateViewOutlines(CCmdUI *pCmdUI)
void verticalize_controlled()
#define IDR_MENU_EDIT_POPUP
#define ID_SHOW_HIDDEN_OBJECTS
void CALLBACK expire_game_proc(HWND wnd, UINT uMsg, UINT idEvent, DWORD dwTime)
#define ID_EDITORS_WAYPOINT
afx_msg void OnEditDelete()
void convert_sexp_to_string(SCP_string &dest, int cur_node, int mode)
briefing Briefings[MAX_TVT_TEAMS]
char stamp[STAMP_STRING_LENGTH]
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
GLenum GLuint GLenum GLsizei const GLchar * buf
int get_docking_list(int model_index)
bg_bitmap_dlg * Bg_bitmap_dialog
mission_goal Mission_goals[MAX_GOALS]
afx_msg void OnUpdateLookatObj(CCmdUI *pCmdUI)
#define ID_VIEW_FULL_DETAIL
#define DEFAULT_TIME_STRING
SCP_list< waypoint_list > Waypoint_lists
afx_msg void OnShowHiddenObjects()
afx_msg void OnUpdateShowStarts(CCmdUI *pCmdUI)
#define ID_EDITORS_STARFIELD
afx_msg void OnUpdateRot3(CCmdUI *pCmdUI)
SCP_list< CJumpNode > Jump_nodes
int double_fine_gridlines
afx_msg void OnShowIFF3()
afx_msg void OnViewFullDetail()
#define EXPIRE_BAD_CHECKSUM
afx_msg void OnConstrainYz()
reinforcements Reinforcements[MAX_REINFORCEMENTS]
afx_msg void OnUpdateViewGrid(CCmdUI *pCmdUI)
SCP_vector< waypoint > & get_waypoints()
void do_trackball_stuff(int nFlags, CPoint point)
int query_valid_object(int index)
#define ID_SHOW_GRID_POSITIONS
LONG OnMenuPopupShips(UINT wParam, LONG lParam)
#define ID_EDITOR_CAMPAIGN
void OnUpdateShowIFF(int iff, CCmdUI *pCmdUI)
LONG OnGoodbye(UINT wParam, LONG lParam)
afx_msg void OnEditorsSetGlobalShipFlags()
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
#define MAX_SHIP_SECONDARY_BANKS
afx_msg void OnUpdateShowIFF8(CCmdUI *pCmdUI)
afx_msg void OnFlyingControls()
afx_msg void OnUpdateAaGridlines(CCmdUI *pCmdUI)
matrix * vm_vector_2_matrix(matrix *m, const vec3d *fvec, const vec3d *uvec, const vec3d *rvec)
int create_object_on_grid(int waypoint_instance)
afx_msg void OnUpdateSpeed5(CCmdUI *pCmdUI)
#define ID_EDITORS_EVENTS
GLdouble GLdouble GLdouble r
afx_msg void OnPrevSubsys()
#define ID_CONTROL_MODE_CAMERA
afx_msg void OnMouseMove(UINT nFlags, CPoint point)
afx_msg void OnEditorsGoals()
struct matrix::@228::@230 vec
afx_msg void OnSelectionLock()
afx_msg void OnUpdateFormatFs1Retail(CCmdUI *pCmdUI)
afx_msg void OnAaGridlines()
afx_msg void OnMarkWing()
afx_msg void OnUpdateConstrainXz(CCmdUI *pCmdUI)
void vsprintf(SCP_string &dest, const char *format, va_list ap)
virtual BOOL OnPreparePrinting(CPrintInfo *pInfo)
afx_msg void OnUpdateDisbandWing(CCmdUI *pCmdUI)
afx_msg void OnNextSubsys()
afx_msg void OnShowHorizon()
void set_cur_object_index(int obj)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)
GLboolean GLboolean GLboolean GLboolean a
afx_msg void OnUpdateNewShipType(CCmdUI *pCmdUI)
event_editor * Event_editor_dlg
int get_next_visible_subsys(ship *shipp, ship_subsys **next_subsys)
void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom)
virtual BOOL OnCmdMsg(UINT nID, int nCode, void *pExtra, AFX_CMDHANDLERINFO *pHandlerInfo)
#define ID_EDIT_POPUP_SHOW_COMPASS
afx_msg void OnUpdateShowStarfield(CCmdUI *pCmdUI)
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
afx_msg void OnUpdateEditPopupShowShipIcons(CCmdUI *pCmdUI)
#define MAX_STARTING_WINGS
mission_event Mission_events[MAX_MISSION_EVENTS]
afx_msg void OnUpdateShowIFF3(CCmdUI *pCmdUI)
#define ID_SHOW_STARFIELD
afx_msg void OnEditorsWaypoint()
int dup_object(object *objp)
afx_msg void OnSetGroup(UINT nID)
void vm_orthogonalize_matrix(matrix *m_src)
afx_msg void OnChangeViewpointFollow()
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
void set_physics_controls()
afx_msg void OnUpdateEditPopupShowShipModels(CCmdUI *pCmdUI)
#define ID_EDITORS_BRIEFING
afx_msg void OnUpdateShowPaths(CCmdUI *pCmdUI)
void drag_rotate_save_backup()
afx_msg void OnShowCoordinates()
int ID_SHOW_IFF[MAX_IFFS]
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
afx_msg void OnShowIFF5()
#define IDR_MENU_SHIP_POPUP
#define ID_EDITORS_SHIELD_SYS
virtual void OnEndPrinting(CDC *pDC, CPrintInfo *pInfo)
afx_msg void OnUpdateShowCoordinates(CCmdUI *pCmdUI)
#define AI_GOAL_STAY_STILL
afx_msg void OnMiscStatistics()
int secondary_bank_weapons[MAX_SHIP_SECONDARY_BANKS]
GLsizei const GLchar ** string
float vm_vec_dist(const vec3d *v0, const vec3d *v1)
int wing_objects[MAX_WINGS][MAX_SHIPS_PER_WING]
int get_visible_sub_system_count(ship *shipp)
int ai_query_goal_valid(int ship, int ai_goal_type)
void initialize_data(int full)
afx_msg void OnUpdateSelect(CCmdUI *pCmdUI)
#define ID_CHANGE_VIEWPOINT_EXTERNAL
afx_msg void OnUpdateShowIFF1(CCmdUI *pCmdUI)
afx_msg void OnUpdateSelectionLock(CCmdUI *pCmdUI)
virtual void DeleteContents()
afx_msg void OnShowIFF8()
int SetCurSelNEW(int model_index)
int Single_axis_constraint
char Mission_filename[80]
#define AI_GOAL_EVADE_SHIP
#define ID_DOUBLE_FINE_GRIDLINES
afx_msg void OnUpdateControlObj(CCmdUI *pCmdUI)
afx_msg void OnEditPopupShowShipIcons()
int cfile_chdir(const char *dir)
Change to the specified directory.
int g3_project_vertex(vertex *point)
#define ARRIVE_AT_LOCATION
int check_sexp_syntax(int node, int return_type, int recursive, int *bad_node, int mode)
#define ID_EDITORS_DEBRIEFING
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point)
#define CALCULATE_STAMP_CHECKSUM()
float vm_vec_dist_squared(const vec3d *v0, const vec3d *v1)
afx_msg void OnCmdBrief()
#define AI_GOAL_IGNORE_NEW
CFREDView * Fred_view_wnd
campaign_tree_wnd * Campaign_wnd
afx_msg void OnUpdateRot5(CCmdUI *pCmdUI)
afx_msg void OnEditUndo()
afx_msg void OnShowIFF4()
GLint GLint GLint GLint GLint x
object Objects[MAX_OBJECTS]
#define AI_GOAL_PLAY_DEAD
virtual BOOL PreCreateWindow(CREATESTRUCT &cs)
#define stars_get_num_bitmaps()
void truncate_message_lines(SCP_string &text, int num_allowed_lines)
#define ID_CONTROL_MODE_SHIP
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
afx_msg void OnUniversalHeading()
#define AI_GOAL_WAYPOINTS_ONCE
afx_msg void OnConstrainY()
#define vm_vec_make(v, _x, _y, _z)
int ship_query_general_type(int ship)
#define ID_ASTEROID_EDITOR
subsys_to_render Render_subsys
afx_msg void OnUpdateSpeed2(CCmdUI *pCmdUI)
afx_msg void OnLevelObj()
afx_msg void OnUpdateConstrainX(CCmdUI *pCmdUI)
void os_set_window(uint new_handle)
afx_msg void OnRestoreCamera()
#define WM_MENU_POPUP_SHIPS
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)
afx_msg void OnConstrainX()
wing_editor Wing_editor_dialog
#define AI_GOAL_GUARD_WING
int Starting_wings[MAX_STARTING_WINGS]
#define ID_EDIT_DELETE_WING
void set_modified(BOOL arg)
afx_msg void OnUpdateShowIFF9(CCmdUI *pCmdUI)
afx_msg void OnShowIFF1()
GLuint const GLchar * name
afx_msg void OnShowDockPoints()
void vm_vec_sub(vec3d *dest, const vec3d *src0, const vec3d *src1)
char * get_order_name(int order)
#define ID_SELECTION_LOCK
#define STI_AI_CAN_FORM_WING
afx_msg void OnShowStarfield()
afx_msg void OnUpdateShowIFF7(CCmdUI *pCmdUI)
#define MB_ICONEXCLAMATION
#define SF_KILL_BEFORE_MISSION
afx_msg void OnZoomSelected()
afx_msg void OnLookatObj()
#define ID_SELECT_AND_MOVE
waypoint_list * find_matching_waypoint_list(const char *name)
afx_msg void OnSize(UINT nType, int cx, int cy)
afx_msg void OnDumpStats()
#define ID_EDITORS_REINFORCEMENT
#define ID_SHOW_COORDINATES
#define ID_TOGGLE_VIEWPOINT
afx_msg void OnEditorsWing()
#define AI_GOAL_KEEP_SAFE_DISTANCE
void show_hide_sexp_help()
GLubyte GLubyte GLubyte GLubyte w
afx_msg void OnUpdateShowIFF0(CCmdUI *pCmdUI)
int delete_wing(int wing_num, int bypass)
#define AI_GOAL_DISABLE_SHIP
int ship_docking_valid(int docker, int dockee)
int internal_error(const char *msg,...)
afx_msg void OnShowIFF6()
afx_msg void OnUpdateRot4(CCmdUI *pCmdUI)
afx_msg void OnUpdateConstrainYz(CCmdUI *pCmdUI)
afx_msg void OnUpdateZoomSelected(CCmdUI *pCmdUI)
afx_msg void OnShowSexpHelp()
void mark_object(int obj)
afx_msg void OnEditPopupShowCompass()
int drag_rotate_objects()
int set_reinforcement(char *name, int state)
afx_msg void OnViewLighting()
afx_msg void OnUpdateShowIFF5(CCmdUI *pCmdUI)
afx_msg void OnUpdateControlModeShip(CCmdUI *pCmdUI)
afx_msg void OnViewWaypoints()
afx_msg void OnUpdateShowDockPoints(CCmdUI *pCmdUI)
afx_msg void OnUpdateSelectAndRotate(CCmdUI *pCmdUI)
afx_msg void OnEditorsShieldSys()
char * Docking_bay_list[MAX_DOCKS]
LONG OnMenuPopupEdit(UINT wParam, LONG lParam)
int select_object(int cx, int cy)
#define ID_ROTATE_LOCALLY
afx_msg void OnUpdateSpeed8(CCmdUI *pCmdUI)
#define ID_FLYING_CONTROLS
afx_msg void OnUpdateRotateLocally(CCmdUI *pCmdUI)
#define ID_MISC_STATISTICS
#define MAX_REINFORCEMENTS
#define ID_FORMAT_FS2_OPEN
waypoint_path_dlg Waypoint_editor_dialog
window_data Ship_wnd_data
SCP_vector< ship_info > Ship_info
vec3d * vm_vec_avg(vec3d *dest, const vec3d *src0, const vec3d *src1)
int MessageBox(HWND h, const char *s1, const char *s2, int i)
char TVT_wing_names[MAX_TVT_WINGS][NAME_LENGTH]
char * sexp_error_message(int num)
#define STAMP_STRING_LENGTH
afx_msg void OnKillFocus(CWnd *pNewWnd)
afx_msg void OnUpdateSpeed10(CCmdUI *pCmdUI)
SCP_vector< species_info > Species_info
afx_msg void OnEditPopupShowShipModels()
afx_msg void OnUpdateViewFullDetail(CCmdUI *pCmdUI)
#define ID_EDITORS_SET_GLOBAL_SHIP_FLAGS
afx_msg void OnCancelSubsys()
window_data Wing_wnd_data
afx_msg void OnUpdateShowGridPositions(CCmdUI *pCmdUI)
afx_msg void OnEditorsOrient()
afx_msg void OnDisbandWing()
afx_msg void OnUpdateShowIFF6(CCmdUI *pCmdUI)
afx_msg void OnUpdateRot1(CCmdUI *pCmdUI)
afx_msg void OnViewGrid()
GLsizei GLsizei GLuint * obj
afx_msg void OnEditorsAdjustGrid()
afx_msg void OnEditorsEvents()
afx_msg void OnMiscstuffShowshipsasicons()
#define ID_CHANGE_VIEWPOINT_FOLLOW
float vm_vec_dot(const vec3d *v0, const vec3d *v1)
debriefing Debriefings[MAX_TVT_TEAMS]
void icon_select(int num)
void move_mouse(int btn, int mdx, int mdy)
afx_msg void OnSelectAndMove()
void unmark_object(int obj)
void gr_screen_resize(int width, int height)
afx_msg void OnFormatFs2Retail()
GLsizei GLsizei GLchar * source
afx_msg void OnShowIFF9()
int global_error_check_mixed_player_wing(int w)
afx_msg void OnEditDeleteWing()
afx_msg void OnChangeViewpointExternal()
afx_msg void OnUpdateShowShips(CCmdUI *pCmdUI)
afx_msg void OnUpdateChangeViewpointExternal(CCmdUI *pCmdUI)
afx_msg void OnUpdateConstrainZ(CCmdUI *pCmdUI)
afx_msg void OnLButtonUp(UINT nFlags, CPoint point)
int ship_index[MAX_SHIPS_PER_WING]
void fred_check_message_personas()
#define ID_RESTORE_CAMERA
afx_msg void OnFormatFs2Open()
int ship_get_subsys_index(ship *sp, char *ss_name, int error_bypass)
afx_msg void OnUpdateEditorsOrient(CCmdUI *pCmdUI)
afx_msg void OnEditorsBriefing()
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)
afx_msg void OnConstrainZ()
briefing_editor_dlg * Briefing_dialog
afx_msg BOOL OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message)
afx_msg void OnUpdateRot2(CCmdUI *pCmdUI)
#define ID_EDITORS_BG_BITMAPS
void show_hide_sexp_help()
int get_ship_from_obj(int obj)
#define AI_GOAL_DESTROY_SUBSYSTEM
afx_msg void OnUpdateDoubleFineGridlines(CCmdUI *pCmdUI)
afx_msg void OnAlignObj()
afx_msg void OnEditorsBgBitmaps()
#define SEXP_HELP_BOX_SIZE
afx_msg void OnFormatFs1Retail()
afx_msg void OnAsteroidEditor()
afx_msg void OnUpdateEditUndo(CCmdUI *pCmdUI)
matrix bitmap_matrix_backup
void place_background_bitmap(vec3d v)
#define ID_MISCSTUFF_SHOWSHIPSASICONS
afx_msg void OnFormatFs2OpenComp()
#define ID_SHOW_DOCK_POINTS
afx_msg void OnContextMenu(CWnd *pWnd, CPoint point)
afx_msg void OnUpdateShowIFF2(CCmdUI *pCmdUI)
afx_msg void OnUpdateShowIFF4(CCmdUI *pCmdUI)
afx_msg void OnUpdateConstrainXy(CCmdUI *pCmdUI)
void vm_vec_add(vec3d *dest, const vec3d *src0, const vec3d *src1)
afx_msg void OnUpdateViewLighting(CCmdUI *pCmdUI)
afx_msg void OnEditorsMessage()
afx_msg void OnUpdateSpeed100(CCmdUI *pCmdUI)
void g3_point_to_vec_delayed(vec3d *v, int sx, int sy)
char ship_name[NAME_LENGTH]
afx_msg void OnEditorsStarfield()
afx_msg void OnControlObj()
#define ID_EDITORS_CMD_BRIEF
SCP_vector< ship_type_info > Ship_types
afx_msg void OnUpdateSpeed1(CCmdUI *pCmdUI)
#define ID_FORMAT_FS2_OPEN_COMP
afx_msg void OnUpdateDisableUndo(CCmdUI *pCmdUI)
void initialize_data(int full)
virtual BOOL DestroyWindow()
afx_msg void OnControlModeShip()
afx_msg void OnFormWing()
#define MISSION_TYPE_MULTI_TEAMS
char * error_check_initial_orders(ai_goal *goals, int ship, int wing)
afx_msg void OnSelectAndRotate()