FS2_Open
Open source remastering of the Freespace 2 engine
shipflagsdlg.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 // ShipFlagsDlg.cpp : implementation file
11 //
12 
13 #include "stdafx.h"
14 #include "FRED.h"
15 #include "ShipFlagsDlg.h"
16 #include "globalincs/linklist.h"
17 
18 #ifdef _DEBUG
19 #undef THIS_FILE
20 static char THIS_FILE[] = __FILE__;
21 #endif
22 
24 // ship_flags_dlg dialog
25 
26 ship_flags_dlg::ship_flags_dlg(CWnd* pParent /*=NULL*/)
27  : CDialog(ship_flags_dlg::IDD, pParent)
28 {
29  //{{AFX_DATA_INIT(ship_flags_dlg)
30  //}}AFX_DATA_INIT
31 }
32 
33 void ship_flags_dlg::DoDataExchange(CDataExchange* pDX)
34 {
35  int n;
36  CString str;
37 
38  CDialog::DoDataExchange(pDX);
39  //{{AFX_DATA_MAP(ship_flags_dlg)
41  DDX_Control(pDX, IDC_REDALERTCARRY, m_red_alert_carry);
42  DDX_Control(pDX, IDC_SCANNABLE, m_scannable);
43  DDX_Control(pDX, IDC_REINFORCEMENT, m_reinforcement);
44  DDX_Control(pDX, IDC_PROTECT_SHIP, m_protect_ship);
45  DDX_Control(pDX, IDC_BEAM_PROTECT_SHIP, m_beam_protect_ship);
46  DDX_Control(pDX, IDC_FLAK_PROTECT_SHIP, m_flak_protect_ship);
49  DDX_Control(pDX, IDC_NO_DYNAMIC, m_no_dynamic);
50  DDX_Control(pDX, IDC_NO_ARRIVAL_MUSIC, m_no_arrival_music);
51  DDX_Control(pDX, IDC_KAMIKAZE, m_kamikaze);
52  DDX_Control(pDX, IDC_INVULNERABLE, m_invulnerable);
54  DDX_Control(pDX, IDC_IMMOBILE, m_immobile);
55  DDX_Control(pDX, IDC_IGNORE_COUNT, m_ignore_count);
56  DDX_Control(pDX, IDC_HIDDEN_FROM_SENSORS, m_hidden);
57  DDX_Control(pDX, IDC_PRIMITIVE_SENSORS, m_primitive_sensors);
58  DDX_Control(pDX, IDC_NO_SUBSPACE_DRIVE, m_no_subspace_drive);
60  DDX_Control(pDX, IDC_ESCORT, m_escort);
61  DDX_Control(pDX, IDC_DESTROY_CHECK, m_destroy);
62  DDX_Control(pDX, IDC_CARGO_KNOWN, m_cargo_known);
63  DDX_Control(pDX, IDC_SPECIAL_WARPIN, m_special_warpin);
64  DDX_Control(pDX, IDC_DESTROY_SPIN, m_destroy_spin);
66  DDX_Control(pDX, IDC_NO_DEATH_SCREAM, m_no_death_scream);
68  DDX_Control(pDX, IDC_GUARDIAN, m_guardian);
69  DDX_Control(pDX, IDC_VAPORIZE, m_vaporize);
70  DDX_Control(pDX, IDC_STEALTH, m_stealth);
72  DDX_Control(pDX, IDC_NAV_CARRY, m_nav_carry);
73  DDX_Control(pDX, IDC_NAV_NEEDSLINK, m_nav_needslink);
74  DDX_Control(pDX, IDC_HIDE_SHIP_NAME, m_hide_ship_name);
75  DDX_Control(pDX, IDC_DISABLE_ETS, m_disable_ets);
76  DDX_Control(pDX, IDC_CLOAKED, m_cloaked);
78  DDX_Control(pDX, IDC_SCRAMBLE_MESSAGES, m_scramble_messages);
79  DDX_Control(pDX, IDC_NO_COLLIDE, m_no_collide);
81  //}}AFX_DATA_MAP
82 
83  if (pDX->m_bSaveAndValidate) { // get dialog control values
84  GetDlgItem(IDC_DESTROY_VALUE)->GetWindowText(str);
85  n = atoi(str);
86  if (n < 0)
87  n = 0;
88 
90 
91  GetDlgItem(IDC_KDAMAGE)->GetWindowText(str);
92  m_kdamage.init(atoi(str));
93 
94  // get escort priority
95  GetDlgItem(IDC_ESCORT_PRIORITY)->GetWindowText(str);
96  m_escort_value.init(atoi(str));
97 
98  // get respawn priority
100  GetDlgItem(IDC_RESPAWN_PRIORITY)->GetWindowText(str);
101  m_respawn_priority.init(atoi(str));
102  }
103  }
104 }
105 
106 BEGIN_MESSAGE_MAP(ship_flags_dlg, CDialog)
107  //{{AFX_MSG_MAP(ship_flags_dlg)
108  ON_BN_CLICKED(IDC_CARGO_KNOWN, OnCargoKnown)
109  ON_BN_CLICKED(IDC_DESTROY_CHECK, OnDestroyCheck)
110  ON_BN_CLICKED(IDC_ESCORT, OnEscort)
111  ON_BN_CLICKED(IDC_HIDDEN_FROM_SENSORS, OnHiddenFromSensors)
112  ON_BN_CLICKED(IDC_PRIMITIVE_SENSORS, OnPrimitiveSensors)
113  ON_BN_CLICKED(IDC_NO_SUBSPACE_DRIVE, OnNoSubspaceDrive)
114  ON_BN_CLICKED(IDC_AFFECTED_BY_GRAVITY, OnAffectedByGravity)
115  ON_BN_CLICKED(IDC_IGNORE_COUNT, OnIgnoreCount)
116  ON_BN_CLICKED(IDC_INVULNERABLE, OnInvulnerable)
117  ON_BN_CLICKED(IDC_TARGETABLE_AS_BOMB, OnTargetableAsBomb)
118  ON_BN_CLICKED(IDC_IMMOBILE, OnImmobile)
119  ON_BN_CLICKED(IDC_KAMIKAZE, OnKamikaze)
120  ON_BN_CLICKED(IDC_NO_ARRIVAL_MUSIC, OnNoArrivalMusic)
121  ON_BN_CLICKED(IDC_NO_DYNAMIC, OnNoDynamic)
122  ON_BN_CLICKED(IDC_PROTECT_SHIP, OnProtectShip)
123  ON_BN_CLICKED(IDC_BEAM_PROTECT_SHIP, OnBeamProtectShip)
124  ON_BN_CLICKED(IDC_FLAK_PROTECT_SHIP, OnFlakProtectShip)
125  ON_BN_CLICKED(IDC_LASER_PROTECT_SHIP, OnLaserProtectShip)
126  ON_BN_CLICKED(IDC_MISSILE_PROTECT_SHIP, OnMissileProtectShip)
127  ON_BN_CLICKED(IDC_REINFORCEMENT, OnReinforcement)
128  ON_BN_CLICKED(IDC_SCANNABLE, OnScannable)
129  ON_BN_CLICKED(IDC_REDALERTCARRY, OnRedalertcarry)
130  ON_BN_CLICKED(IDC_TOGGLE_SUBSYSTEM_SCANNING, OnToggleSubsystemScanning)
131  ON_BN_CLICKED(IDC_DISABLE_BUILTIN_SHIP, OnDisableBuiltinShip)
132  ON_BN_CLICKED(IDC_NO_DEATH_SCREAM, OnNoDeathScream)
133  ON_BN_CLICKED(IDC_ALWAYS_DEATH_SCREAM, OnAlwaysDeathScream)
134  ON_BN_CLICKED(IDC_GUARDIAN, OnGuardian)
135  ON_BN_CLICKED(IDC_VAPORIZE, OnVaporize)
136  ON_BN_CLICKED(IDC_STEALTH, OnStealth)
137  ON_BN_CLICKED(IDC_FRIENDLY_STEALTH_INVISIBLE, OnFriendlyStealthInvisible)
138  ON_BN_CLICKED(IDC_NAV_CARRY, OnNavCarry)
139  ON_BN_CLICKED(IDC_NAV_NEEDSLINK, OnNavNeedslink)
140  ON_BN_CLICKED(IDC_HIDE_SHIP_NAME, OnHideShipName)
141  ON_BN_CLICKED(IDC_SET_CLASS_DYNAMICALLY, OnSetClassDynamically)
142  ON_BN_CLICKED(IDC_DISABLE_ETS, OnDisableETS)
143  ON_BN_CLICKED(IDC_CLOAKED, OnCloaked)
144  ON_BN_CLICKED(IDC_SCRAMBLE_MESSAGES, OnScrambleMessages)
145  ON_BN_CLICKED(IDC_NO_COLLIDE, OnNoCollide)
146  ON_BN_CLICKED(IDC_NO_DISABLED_SELF_DESTRUCT, OnNoDisabledSelfDestruct)
147  //}}AFX_MSG_MAP
148 END_MESSAGE_MAP()
149 
151 // ship_flags_dlg message handlers
152 
153 void ship_flags_dlg::setup(int n)
154 {
155  p_enable = n;
156 }
157 
159 {
160  int j, first;
161  int protect_ship = 0, beam_protect_ship = 0, flak_protect_ship = 0, laser_protect_ship = 0, missile_protect_ship = 0;
162  int ignore_count = 0, reinforcement = 0, cargo_known = 0, immobile = 0;
163  int destroy_before_mission = 0, no_arrival_music = 0, escort = 0, invulnerable = 0, targetable_as_bomb = 0;
164  int hidden_from_sensors = 0, primitive_sensors = 0, no_subspace_drive = 0, affected_by_gravity = 0;
165  int toggle_subsystem_scanning = 0, scannable = 0, kamikaze = 0, no_dynamic = 0, red_alert_carry = 0;
166  int special_warpin = 0, disable_messages = 0, guardian = 0, vaporize = 0, stealth = 0, friendly_stealth_invisible = 0;
167  int no_death_scream = 0, always_death_scream = 0, scramble_messages = 0, no_disabled_self_destruct = 0;
168  int nav_carry = 0, nav_needslink = 0, hide_ship_name = 0, set_class_dynamically = 0, no_ets = 0, cloaked = 0, no_collide = 0;
169 
170  object *objp;
171  ship *shipp;
172  bool ship_in_wing = false;
173 
174  first = 1;
175  objp = GET_FIRST(&obj_used_list);
176  while (objp != END_OF_LIST(&obj_used_list)) {
177  if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) {
178  if (objp->flags & OF_MARKED) {
179  shipp = &Ships[objp->instance];
180 
181  if (first) {
182  first = 0;
183  scannable = (shipp->flags & SF_SCANNABLE) ? 1 : 0;
184  red_alert_carry = (shipp->flags & SF_RED_ALERT_STORE_STATUS) ? 1 : 0;
185  special_warpin = (objp->flags & OF_SPECIAL_WARPIN) ? 1 : 0;
186  protect_ship = (objp->flags & OF_PROTECTED) ? 1 : 0;
187  beam_protect_ship = (objp->flags & OF_BEAM_PROTECTED) ? 1 : 0;
188  flak_protect_ship = (objp->flags & OF_FLAK_PROTECTED) ? 1 : 0;
189  laser_protect_ship = (objp->flags & OF_LASER_PROTECTED) ? 1 : 0;
190  missile_protect_ship = (objp->flags & OF_MISSILE_PROTECTED) ? 1 : 0;
191  invulnerable = (objp->flags & OF_INVULNERABLE) ? 1 : 0;
192  targetable_as_bomb = (objp->flags & OF_TARGETABLE_AS_BOMB) ? 1 : 0;
193  immobile = (objp->flags & OF_IMMOBILE) ? 1 : 0;
194  hidden_from_sensors = (shipp->flags & SF_HIDDEN_FROM_SENSORS) ? 1 : 0;
195  primitive_sensors = (shipp->flags2 & SF2_PRIMITIVE_SENSORS) ? 1 : 0;
196  no_subspace_drive = (shipp->flags2 & SF2_NO_SUBSPACE_DRIVE) ? 1 : 0;
197  affected_by_gravity = (shipp->flags2 & SF2_AFFECTED_BY_GRAVITY) ? 1 : 0;
198  toggle_subsystem_scanning = (shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING) ? 1 : 0;
199  ignore_count = (shipp->flags & SF_IGNORE_COUNT) ? 1 : 0;
200  no_arrival_music = (shipp->flags & SF_NO_ARRIVAL_MUSIC) ? 1 : 0;
201  cargo_known = (shipp->flags & SF_CARGO_REVEALED) ? 1 : 0;
202  no_dynamic = (Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC) ? 1 : 0;
203  disable_messages = (shipp->flags2 & SF2_NO_BUILTIN_MESSAGES) ? 1 : 0;
204  set_class_dynamically = (shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY) ? 1 : 0;
205  no_death_scream = (shipp->flags2 & SF2_NO_DEATH_SCREAM) ? 1 : 0;
206  always_death_scream = (shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM) ? 1 : 0;
207  guardian = (shipp->ship_guardian_threshold) ? 1 : 0;
208  vaporize = (shipp->flags & SF_VAPORIZE) ? 1 : 0;
209  stealth = (shipp->flags2 & SF2_STEALTH) ? 1 : 0;
210  friendly_stealth_invisible = (shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS) ? 1 : 0;
211  nav_carry = (shipp->flags2 & SF2_NAVPOINT_CARRY) ? 1 : 0;
212  nav_needslink = (shipp->flags2 & SF2_NAVPOINT_NEEDSLINK) ? 1 : 0;
213  hide_ship_name = (shipp->flags2 & SF2_HIDE_SHIP_NAME) ? 1 : 0;
214  no_ets = (shipp->flags2 & SF2_NO_ETS) ? 1 : 0;
215  cloaked = (shipp->flags2 & SF2_CLOAKED) ? 1 : 0;
216  scramble_messages = (shipp->flags2 & SF2_SCRAMBLE_MESSAGES) ? 1 : 0;
217  no_collide = (objp->flags & OF_COLLIDES) ? 0 : 1;
218  no_disabled_self_destruct = (shipp->flags2 & SF2_NO_DISABLED_SELF_DESTRUCT) ? 1 : 0;
219 
220  destroy_before_mission = (shipp->flags & SF_KILL_BEFORE_MISSION) ? 1 : 0;
222 
223  kamikaze = (Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE) ? 1 : 0;
225 
226  escort = (shipp->flags & SF_ESCORT) ? 1 : 0;
228 
231  }
232 
233  for (j=0; j<Num_reinforcements; j++) {
234  if (!stricmp(Reinforcements[j].name, shipp->ship_name)) {
235  break;
236  }
237  }
238 
239  reinforcement = (j < Num_reinforcements) ? 1 : 0;
240 
241  // check if ship in wing
242  ship_in_wing = (shipp->wingnum != -1);;
243  } else {
244 
245  scannable = tristate_set( shipp->flags & SF_SCANNABLE, scannable );
246  red_alert_carry = tristate_set( shipp->flags & SF_RED_ALERT_STORE_STATUS, red_alert_carry );
247  special_warpin = tristate_set( objp->flags & OF_SPECIAL_WARPIN, special_warpin );
248  protect_ship = tristate_set(objp->flags & OF_PROTECTED, protect_ship);
249  beam_protect_ship = tristate_set(objp->flags & OF_BEAM_PROTECTED, beam_protect_ship);
250  flak_protect_ship = tristate_set(objp->flags & OF_FLAK_PROTECTED, flak_protect_ship);
251  laser_protect_ship = tristate_set(objp->flags & OF_LASER_PROTECTED, laser_protect_ship);
252  missile_protect_ship = tristate_set(objp->flags & OF_MISSILE_PROTECTED, missile_protect_ship);
253  invulnerable = tristate_set(objp->flags & OF_INVULNERABLE, invulnerable);
254  targetable_as_bomb = tristate_set(objp->flags & OF_TARGETABLE_AS_BOMB, targetable_as_bomb);
255  immobile = tristate_set(objp->flags & OF_IMMOBILE, immobile);
256  hidden_from_sensors = tristate_set(shipp->flags & SF_HIDDEN_FROM_SENSORS, hidden_from_sensors);
257  primitive_sensors = tristate_set(shipp->flags2 & SF2_PRIMITIVE_SENSORS, primitive_sensors);
258  no_subspace_drive = tristate_set(shipp->flags2 & SF2_NO_SUBSPACE_DRIVE, no_subspace_drive);
259  affected_by_gravity = tristate_set(shipp->flags2 & SF2_AFFECTED_BY_GRAVITY, affected_by_gravity);
260  toggle_subsystem_scanning = tristate_set(shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING, toggle_subsystem_scanning);
261  ignore_count = tristate_set(shipp->flags & SF_IGNORE_COUNT, ignore_count);
262  no_arrival_music = tristate_set(shipp->flags & SF_NO_ARRIVAL_MUSIC, no_arrival_music);
263  cargo_known = tristate_set(shipp->flags & SF_CARGO_REVEALED, cargo_known);
264  no_dynamic = tristate_set( Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC, no_dynamic );
265  disable_messages = tristate_set(shipp->flags2 & SF2_NO_BUILTIN_MESSAGES, disable_messages);
266  set_class_dynamically = tristate_set(shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY, set_class_dynamically);
267  no_death_scream = tristate_set(shipp->flags2 & SF2_NO_DEATH_SCREAM, no_death_scream);
268  always_death_scream = tristate_set(shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM, always_death_scream);
269  guardian = tristate_set(shipp->ship_guardian_threshold, guardian);
270  vaporize = tristate_set(shipp->flags & SF_VAPORIZE, vaporize);
271  stealth = tristate_set(shipp->flags2 & SF2_STEALTH, stealth);
272  friendly_stealth_invisible = tristate_set(shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS, friendly_stealth_invisible);
273  nav_carry = tristate_set(shipp->flags2 & SF2_NAVPOINT_CARRY, nav_carry);
274  nav_needslink = tristate_set(shipp->flags2 & SF2_NAVPOINT_NEEDSLINK, nav_needslink);
275  hide_ship_name = tristate_set(shipp->flags2 & SF2_HIDE_SHIP_NAME, hide_ship_name);
276  no_ets = tristate_set(shipp->flags2 & SF2_NO_ETS, no_ets);
277  cloaked = tristate_set(shipp->flags2 & SF2_CLOAKED, cloaked);
278  scramble_messages = tristate_set(shipp->flags2 & SF2_SCRAMBLE_MESSAGES, scramble_messages);
279  no_collide = tristate_set(!(objp->flags & OF_COLLIDES), no_collide);
280  no_disabled_self_destruct = tristate_set(shipp->flags2 & SF2_NO_DISABLED_SELF_DESTRUCT, no_disabled_self_destruct);
281 
282  // check the final death time and set the internal variable according to whether or not
283  // the final_death_time is set. Also, the value in the edit box must be set if all the
284  // values are the same, and cleared if the values are not the same.
285  destroy_before_mission = tristate_set(shipp->flags & SF_KILL_BEFORE_MISSION, destroy_before_mission);
287 
288  kamikaze = tristate_set( Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE, kamikaze );
290 
291  escort = tristate_set(shipp->flags & SF_ESCORT, escort);
293 
296  }
297 
298  for (j=0; j<Num_reinforcements; j++) {
299  if (!stricmp(Reinforcements[j].name, shipp->ship_name)) {
300  break;
301  }
302  }
303  reinforcement = tristate_set(j < Num_reinforcements, reinforcement);
304 
305  // check if ship in wing
306  ship_in_wing = (shipp->wingnum != -1);;
307  }
308 
309  }
310  }
311 
312  objp = GET_NEXT(objp);
313  }
314 
315  CDialog::OnInitDialog();
316 
317  m_protect_ship.SetCheck(protect_ship);
318  m_beam_protect_ship.SetCheck(beam_protect_ship);
319  m_flak_protect_ship.SetCheck(flak_protect_ship);
320  m_laser_protect_ship.SetCheck(laser_protect_ship);
321  m_missile_protect_ship.SetCheck(missile_protect_ship);
322  m_ignore_count.SetCheck(ignore_count);
323  m_reinforcement.SetCheck(reinforcement);
324  m_cargo_known.SetCheck(cargo_known);
325  m_destroy.SetCheck(destroy_before_mission);
326  m_no_arrival_music.SetCheck(no_arrival_music);
327  m_escort.SetCheck(escort);
328  m_invulnerable.SetCheck(invulnerable);
329  m_targetable_as_bomb.SetCheck(targetable_as_bomb);
330  m_immobile.SetCheck(immobile);
331  m_hidden.SetCheck(hidden_from_sensors);
332  m_primitive_sensors.SetCheck(primitive_sensors);
333  m_no_subspace_drive.SetCheck(no_subspace_drive);
334  m_affected_by_gravity.SetCheck(affected_by_gravity);
335  m_toggle_subsystem_scanning.SetCheck(toggle_subsystem_scanning);
336  m_scannable.SetCheck(scannable);
337  m_kamikaze.SetCheck(kamikaze);
338  m_no_dynamic.SetCheck(no_dynamic);
339  m_red_alert_carry.SetCheck(red_alert_carry);
340  m_special_warpin.SetCheck(special_warpin);
341  m_disable_messages.SetCheck(disable_messages);
342  m_set_class_dynamically.SetCheck(set_class_dynamically);
343  m_no_death_scream.SetCheck(no_death_scream);
344  m_always_death_scream.SetCheck(always_death_scream);
345  m_guardian.SetCheck(guardian);
346  m_vaporize.SetCheck(vaporize);
347  m_stealth.SetCheck(stealth);
348  m_friendly_stealth_invisible.SetCheck(friendly_stealth_invisible);
349  m_nav_carry.SetCheck(nav_carry);
350  m_nav_needslink.SetCheck(nav_needslink);
351  m_hide_ship_name.SetCheck(hide_ship_name);
352  m_disable_ets.SetCheck(no_ets);
353  m_cloaked.SetCheck(cloaked);
354  m_scramble_messages.SetCheck(scramble_messages);
355  m_no_collide.SetCheck(no_collide);
356  m_no_disabled_self_destruct.SetCheck(no_disabled_self_destruct);
357 
358  m_kdamage.setup(IDC_KDAMAGE, this);
361 
364  }
365  m_destroy_spin.SetRange(0, UD_MAXVAL);
366 
368  m_kdamage.display();
370 
373  } else {
374  GetDlgItem(IDC_RESPAWN_PRIORITY)->EnableWindow(FALSE);
375  }
376 
377  // flags that enable/disable according to whether this isn't a player
378  GetDlgItem(IDC_REINFORCEMENT)->EnableWindow(p_enable && !ship_in_wing);
379  GetDlgItem(IDC_CARGO_KNOWN)->EnableWindow(p_enable);
380  GetDlgItem(IDC_DESTROY_CHECK)->EnableWindow(p_enable);
381  GetDlgItem(IDC_DESTROY_VALUE)->EnableWindow(p_enable);
382  GetDlgItem(IDC_DESTROY_SPIN)->EnableWindow(p_enable);
383  GetDlgItem(IDC_SCANNABLE)->EnableWindow(p_enable);
384 
385  // disable the spinner and edit window if the corrsponding check box
386  // is not checked!
387  if (m_destroy.GetCheck() != 1) {
388  GetDlgItem(IDC_DESTROY_VALUE)->EnableWindow(FALSE);
389  GetDlgItem(IDC_DESTROY_SPIN)->EnableWindow(FALSE);
390  }
391 
392  // disable destroy option for ship in wing
393  if (ship_in_wing) {
394  GetDlgItem(IDC_DESTROY_CHECK)->EnableWindow(FALSE);
395  GetDlgItem(IDC_DESTROY_VALUE)->EnableWindow(FALSE);
396  GetDlgItem(IDC_DESTROY_SPIN)->EnableWindow(FALSE);
397  }
398 
399  // maybe disable escort priority window
400  if (m_escort.GetCheck() == 1)
401  GetDlgItem(IDC_ESCORT_PRIORITY)->EnableWindow(TRUE);
402  else
403  GetDlgItem(IDC_ESCORT_PRIORITY)->EnableWindow(FALSE);
404 
405  // maybe disable kamikaze damage window
406  if (m_kamikaze.GetCheck() == 1)
407  GetDlgItem(IDC_KDAMAGE)->EnableWindow(TRUE);
408  else
409  GetDlgItem(IDC_KDAMAGE)->EnableWindow(FALSE);
410 
411  return TRUE;
412 }
413 
415 {
416  object *objp;
417 
418  objp = GET_FIRST(&obj_used_list);
419  while (objp != END_OF_LIST(&obj_used_list)) {
420  if ((objp->type == OBJ_START) || (objp->type == OBJ_SHIP)) {
421  if (objp->flags & OF_MARKED)
422  update_ship(objp->instance);
423  }
424 
425  objp = GET_NEXT(objp);
426  }
427 
428  CDialog::OnOK();
429 }
430 
432 {
433  ship *shipp = &Ships[shipnum];
434  object *objp = &Objects[shipp->objnum];
435 
436  if (m_reinforcement.GetCheck() != 2)
437  {
438  //Check if we're trying to add more and we've got too many.
439  if( (Num_reinforcements >= MAX_REINFORCEMENTS) && (m_reinforcement.GetCheck() == 1))
440  {
441  char error_message[256];
442  sprintf(error_message, "Too many reinforcements; could not add ship '%s' to reinforcement list!", shipp->ship_name);
443  MessageBox(error_message);
444  }
445  //Otherwise, just update as normal.
446  else
447  {
448  set_reinforcement(shipp->ship_name, m_reinforcement.GetCheck());
449  }
450  }
451 
452  switch (m_cargo_known.GetCheck()) {
453  case 1:
454  if ( !(shipp->flags & SF_CARGO_REVEALED) )
455  set_modified();
456 
457  shipp->flags |= SF_CARGO_REVEALED;
458  break;
459 
460  case 0:
461  if ( shipp->flags & SF_CARGO_REVEALED )
462  set_modified();
463 
464  shipp->flags &= ~SF_CARGO_REVEALED;
465  break;
466  }
467 
468  // update the flags for IGNORE_COUNT and PROTECT_SHIP
469  switch (m_protect_ship.GetCheck()) {
470  case 1:
471  if (!(objp->flags & OF_PROTECTED) )
472  set_modified();
473 
474  objp->flags |= OF_PROTECTED;
475  break;
476 
477  case 0:
478  if ( objp->flags & OF_PROTECTED )
479  set_modified();
480 
481  objp->flags &= ~OF_PROTECTED;
482  break;
483  }
484 
485  switch (m_beam_protect_ship.GetCheck()) {
486  case 1:
487  if (!(objp->flags & OF_BEAM_PROTECTED) )
488  set_modified();
489 
490  objp->flags |= OF_BEAM_PROTECTED;
491  break;
492 
493  case 0:
494  if ( objp->flags & OF_BEAM_PROTECTED )
495  set_modified();
496 
497  objp->flags &= ~OF_BEAM_PROTECTED;
498  break;
499  }
500 
501  switch (m_flak_protect_ship.GetCheck()) {
502  case 1:
503  if (!(objp->flags & OF_FLAK_PROTECTED) )
504  set_modified();
505 
506  objp->flags |= OF_FLAK_PROTECTED;
507  break;
508 
509  case 0:
510  if ( objp->flags & OF_FLAK_PROTECTED )
511  set_modified();
512 
513  objp->flags &= ~OF_FLAK_PROTECTED;
514  break;
515  }
516 
517  switch (m_laser_protect_ship.GetCheck()) {
518  case 1:
519  if (!(objp->flags & OF_LASER_PROTECTED) )
520  set_modified();
521 
522  objp->flags |= OF_LASER_PROTECTED;
523  break;
524 
525  case 0:
526  if ( objp->flags & OF_LASER_PROTECTED )
527  set_modified();
528 
529  objp->flags &= ~OF_LASER_PROTECTED;
530  break;
531  }
532 
533  switch (m_missile_protect_ship.GetCheck()) {
534  case 1:
535  if (!(objp->flags & OF_MISSILE_PROTECTED) )
536  set_modified();
537 
538  objp->flags |= OF_MISSILE_PROTECTED;
539  break;
540 
541  case 0:
542  if ( objp->flags & OF_MISSILE_PROTECTED )
543  set_modified();
544 
545  objp->flags &= ~OF_MISSILE_PROTECTED;
546  break;
547  }
548 
549  switch (m_invulnerable.GetCheck()) {
550  case 1:
551  if ( !(objp->flags & OF_INVULNERABLE) )
552  set_modified();
553 
554  objp->flags |= OF_INVULNERABLE;
555  break;
556 
557  case 0:
558  if ( objp->flags & OF_INVULNERABLE )
559  set_modified();
560 
561  objp->flags &= ~OF_INVULNERABLE;
562  break;
563  }
564 
565  switch (m_targetable_as_bomb.GetCheck()) {
566  case 1:
567  if ( !(objp->flags & OF_TARGETABLE_AS_BOMB) )
568  set_modified();
569 
570  objp->flags |= OF_TARGETABLE_AS_BOMB;
571  break;
572 
573  case 0:
574  if ( objp->flags & OF_TARGETABLE_AS_BOMB )
575  set_modified();
576 
577  objp->flags &= ~OF_TARGETABLE_AS_BOMB;
578  break;
579  }
580 
581  switch (m_immobile.GetCheck()) {
582  case 1:
583  if ( !(objp->flags & OF_IMMOBILE) )
584  set_modified();
585 
586  objp->flags |= OF_IMMOBILE;
587  break;
588 
589  case 0:
590  if ( objp->flags & OF_IMMOBILE )
591  set_modified();
592 
593  objp->flags &= ~OF_IMMOBILE;
594  break;
595  }
596 
597  switch (m_hidden.GetCheck()) {
598  case 1:
599  if ( !(shipp->flags & SF_HIDDEN_FROM_SENSORS) )
600  set_modified();
601 
602  shipp->flags |= SF_HIDDEN_FROM_SENSORS;
603  break;
604 
605  case 0:
606  if ( shipp->flags & SF_HIDDEN_FROM_SENSORS )
607  set_modified();
608 
609  shipp->flags &= ~SF_HIDDEN_FROM_SENSORS;
610  break;
611  }
612 
613  switch (m_primitive_sensors.GetCheck()) {
614  case 1:
615  if ( !(shipp->flags2 & SF2_PRIMITIVE_SENSORS) )
616  set_modified();
617 
618  shipp->flags2 |= SF2_PRIMITIVE_SENSORS;
619  break;
620 
621  case 0:
622  if ( shipp->flags2 & SF2_PRIMITIVE_SENSORS )
623  set_modified();
624 
625  shipp->flags2 &= ~SF2_PRIMITIVE_SENSORS;
626  break;
627  }
628 
629  switch (m_no_subspace_drive.GetCheck()) {
630  case 1:
631  if ( !(shipp->flags2 & SF2_NO_SUBSPACE_DRIVE) )
632  set_modified();
633 
634  shipp->flags2 |= SF2_NO_SUBSPACE_DRIVE;
635  break;
636 
637  case 0:
638  if ( shipp->flags2 & SF2_NO_SUBSPACE_DRIVE )
639  set_modified();
640 
641  shipp->flags2 &= ~SF2_NO_SUBSPACE_DRIVE;
642  break;
643  }
644 
645  switch (m_affected_by_gravity.GetCheck()) {
646  case 1:
647  if ( !(shipp->flags2 & SF2_AFFECTED_BY_GRAVITY) )
648  set_modified();
649 
651  break;
652 
653  case 0:
654  if ( shipp->flags2 & SF2_AFFECTED_BY_GRAVITY )
655  set_modified();
656 
657  shipp->flags2 &= ~SF2_AFFECTED_BY_GRAVITY;
658  break;
659  }
660 
661  switch (m_toggle_subsystem_scanning.GetCheck()) {
662  case 1:
663  if ( !(shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING) )
664  set_modified();
665 
667  break;
668 
669  case 0:
670  if ( shipp->flags2 & SF2_TOGGLE_SUBSYSTEM_SCANNING )
671  set_modified();
672 
674  break;
675  }
676 
677  switch (m_ignore_count.GetCheck()) {
678  case 1:
679  if ( !(shipp->flags & SF_IGNORE_COUNT) )
680  set_modified();
681 
682  shipp->flags |= SF_IGNORE_COUNT;
683  break;
684 
685  case 0:
686  if (shipp->flags & SF_IGNORE_COUNT)
687  set_modified();
688 
689  shipp->flags &= ~SF_IGNORE_COUNT;
690  break;
691  }
692 
693  switch (m_escort.GetCheck()) {
694  case 1:
695  if (!(shipp->flags & SF_ESCORT))
696  set_modified();
697 
698  shipp->flags |= SF_ESCORT;
700  break;
701 
702  case 0:
703  if (shipp->flags & SF_ESCORT)
704  set_modified();
705 
706  shipp->flags &= ~SF_ESCORT;
707  break;
708  }
709 
710  // deal with updating the "destroy before the mission" stuff
711  switch (m_destroy.GetCheck()) {
712  case 0: // this means no check in checkbox
713  if ( shipp->flags & SF_KILL_BEFORE_MISSION )
714  set_modified();
715 
716  shipp->flags &= ~SF_KILL_BEFORE_MISSION;
717  break;
718 
719  case 1: // this means checkbox is checked
720  if ( !(shipp->flags & SF_KILL_BEFORE_MISSION) )
721  set_modified();
722 
723  shipp->flags |= SF_KILL_BEFORE_MISSION;
725  break;
726  } // a mixed state is 2, and since it's not handled, it doesn't change
727 
728  switch (m_no_arrival_music.GetCheck()) {
729  case 0:
730  if (shipp->flags & SF_NO_ARRIVAL_MUSIC)
731  set_modified();
732 
733  shipp->flags &= ~SF_NO_ARRIVAL_MUSIC;
734  break;
735 
736  case 1:
737  if (!(shipp->flags & SF_NO_ARRIVAL_MUSIC))
738  set_modified();
739 
740  shipp->flags |= SF_NO_ARRIVAL_MUSIC;
741  break;
742  }
743 
744  switch (m_scannable.GetCheck()) {
745  case 1:
746  if ( !(shipp->flags & SF_SCANNABLE) )
747  set_modified();
748 
749  shipp->flags |= SF_SCANNABLE;
750  break;
751 
752  case 0:
753  if ( shipp->flags & SF_SCANNABLE )
754  set_modified();
755 
756  shipp->flags &= ~SF_SCANNABLE;
757  break;
758  }
759 
760  switch (m_red_alert_carry.GetCheck()) {
761  case 1:
762  if ( !(shipp->flags & SF_RED_ALERT_STORE_STATUS) )
763  set_modified();
764 
766  break;
767 
768  case 0:
769  if ( shipp->flags & SF_RED_ALERT_STORE_STATUS )
770  set_modified();
771 
772  shipp->flags &= ~SF_RED_ALERT_STORE_STATUS;
773  break;
774  }
775 
776  switch (m_special_warpin.GetCheck()) {
777  case 1:
778  if ( !(objp->flags & OF_SPECIAL_WARPIN) )
779  set_modified();
780 
781  objp->flags |= OF_SPECIAL_WARPIN;
782  break;
783 
784  case 0:
785  if ( (objp->flags & OF_SPECIAL_WARPIN) )
786  set_modified();
787 
788  objp->flags &= (~OF_SPECIAL_WARPIN);
789  break;
790  }
791 
792  switch (m_no_dynamic.GetCheck()) {
793  case 1:
794  if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC) )
795  set_modified();
796 
798  break;
799 
800  case 0:
801  if ( Ai_info[shipp->ai_index].ai_flags & AIF_NO_DYNAMIC )
802  set_modified();
803 
804  Ai_info[shipp->ai_index].ai_flags &= ~AIF_NO_DYNAMIC;
805  break;
806  }
807 
808  switch (m_kamikaze.GetCheck()) {
809  case 1: {
810  int damage;
811 
812  if ( !(Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE) )
813  set_modified();
814 
816  m_kdamage.save(&damage);
817  Ai_info[shipp->ai_index].kamikaze_damage = damage;
818  break;
819  }
820 
821  case 0:
822  if ( Ai_info[shipp->ai_index].ai_flags & AIF_KAMIKAZE )
823  set_modified();
824 
825  Ai_info[shipp->ai_index].ai_flags &= ~AIF_KAMIKAZE;
826  Ai_info[shipp->ai_index].kamikaze_damage = 0;
827  break;
828  }
829 
830  switch (m_disable_messages.GetCheck()) {
831  case 1:
832  if ( !(shipp->flags2 & SF2_NO_BUILTIN_MESSAGES) )
833  set_modified();
834 
836  break;
837 
838  case 0:
839  if ( shipp->flags2 & SF2_NO_BUILTIN_MESSAGES )
840  set_modified();
841 
842  shipp->flags2 &= ~SF2_NO_BUILTIN_MESSAGES;
843  break;
844  }
845 
846  switch (m_set_class_dynamically.GetCheck()) {
847  case 1:
848  if ( !(shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY) )
849  set_modified();
850 
852  break;
853 
854  case 0:
855  if ( shipp->flags2 & SF2_SET_CLASS_DYNAMICALLY )
856  set_modified();
857 
859  break;
860  }
861 
862  switch (m_no_death_scream.GetCheck()) {
863  case 1:
864  if ( !(shipp->flags2 & SF2_NO_DEATH_SCREAM) )
865  set_modified();
866 
867  shipp->flags2 |= SF2_NO_DEATH_SCREAM;
868  break;
869 
870  case 0:
871  if ( shipp->flags2 & SF2_NO_DEATH_SCREAM )
872  set_modified();
873 
874  shipp->flags2 &= ~SF2_NO_DEATH_SCREAM;
875  break;
876  }
877 
878  switch (m_always_death_scream.GetCheck()) {
879  case 1:
880  if ( !(shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM) )
881  set_modified();
882 
884  break;
885 
886  case 0:
887  if ( shipp->flags2 & SF2_ALWAYS_DEATH_SCREAM )
888  set_modified();
889 
890  shipp->flags2 &= ~SF2_ALWAYS_DEATH_SCREAM;
891  break;
892  }
893 
894  switch (m_nav_carry.GetCheck()) {
895  case 1:
896  if ( !(shipp->flags2 & SF2_NAVPOINT_CARRY) )
897  set_modified();
898 
899  shipp->flags2 |= SF2_NAVPOINT_CARRY;
900  break;
901 
902  case 0:
903  if ( shipp->flags2 & SF2_NAVPOINT_CARRY )
904  set_modified();
905 
906  shipp->flags2 &= ~SF2_NAVPOINT_CARRY;
907  break;
908  }
909 
910  switch (m_nav_needslink.GetCheck()) {
911  case 1:
912  if ( !(shipp->flags2 & SF2_NAVPOINT_NEEDSLINK) )
913  set_modified();
914 
915  shipp->flags2 |= SF2_NAVPOINT_NEEDSLINK;
916  break;
917 
918  case 0:
919  if ( shipp->flags2 & SF2_NAVPOINT_NEEDSLINK )
920  set_modified();
921 
922  shipp->flags2 &= ~SF2_NAVPOINT_NEEDSLINK;
923  break;
924  }
925 
926  switch (m_hide_ship_name.GetCheck()) {
927  case 1:
928  if ( !(shipp->flags2 & SF2_HIDE_SHIP_NAME) )
929  set_modified();
930 
931  shipp->flags2 |= SF2_HIDE_SHIP_NAME;
932  break;
933 
934  case 0:
935  if ( shipp->flags2 & SF2_HIDE_SHIP_NAME )
936  set_modified();
937 
938  shipp->flags2 &= ~SF2_HIDE_SHIP_NAME;
939  break;
940  }
941 
942  switch (m_disable_ets.GetCheck()) {
943  case 1:
944  if ( !(shipp->flags2 & SF2_NO_ETS) )
945  set_modified();
946 
947  shipp->flags2 |= SF2_NO_ETS;
948  break;
949 
950  case 0:
951  if ( shipp->flags2 & SF2_NO_ETS )
952  set_modified();
953 
954  shipp->flags2 &= ~SF2_NO_ETS;
955  break;
956  }
957 
958  switch (m_cloaked.GetCheck()) {
959  case 1:
960  if ( !(shipp->flags2 & SF2_CLOAKED) )
961  set_modified();
962 
963  shipp->flags2 |= SF2_CLOAKED;
964  break;
965 
966  case 0:
967  if ( shipp->flags2 & SF2_CLOAKED )
968  set_modified();
969 
970  shipp->flags2 &= ~SF2_CLOAKED;
971  break;
972  }
973 
974  switch (m_guardian.GetCheck()) {
975  case 1:
976  if ( !(shipp->ship_guardian_threshold) )
977  set_modified();
978 
980  break;
981 
982  case 0:
983  if ( shipp->ship_guardian_threshold )
984  set_modified();
985 
986  shipp->ship_guardian_threshold = 0;
987  break;
988  }
989 
990  switch (m_vaporize.GetCheck()) {
991  case 1:
992  if ( !(shipp->flags & SF_VAPORIZE) )
993  set_modified();
994 
995  shipp->flags |= SF_VAPORIZE;
996  break;
997 
998  case 0:
999  if ( shipp->flags & SF_VAPORIZE )
1000  set_modified();
1001 
1002  shipp->flags &= ~SF_VAPORIZE;
1003  break;
1004  }
1005 
1006  switch (m_stealth.GetCheck()) {
1007  case 1:
1008  if ( !(shipp->flags2 & SF2_STEALTH) )
1009  set_modified();
1010 
1011  shipp->flags2 |= SF2_STEALTH;
1012  break;
1013 
1014  case 0:
1015  if ( shipp->flags2 & SF2_STEALTH )
1016  set_modified();
1017 
1018  shipp->flags2 &= ~SF2_STEALTH;
1019  break;
1020  }
1021 
1022  switch (m_friendly_stealth_invisible.GetCheck()) {
1023  case 1:
1024  if ( !(shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS) )
1025  set_modified();
1026 
1028  break;
1029 
1030  case 0:
1031  if ( shipp->flags2 & SF2_FRIENDLY_STEALTH_INVIS )
1032  set_modified();
1033 
1035  break;
1036  }
1037 
1038  switch (m_scramble_messages.GetCheck()) {
1039  case 1:
1040  if ( !(shipp->flags2 & SF2_SCRAMBLE_MESSAGES) )
1041  set_modified();
1042 
1043  shipp->flags2 |= SF2_SCRAMBLE_MESSAGES;
1044  break;
1045 
1046  case 0:
1047  if ( shipp->flags2 & SF2_SCRAMBLE_MESSAGES )
1048  set_modified();
1049 
1050  shipp->flags2 &= ~SF2_SCRAMBLE_MESSAGES;
1051  break;
1052  }
1053 
1054  switch (m_no_collide.GetCheck()) {
1055  case 1:
1056  if (objp->flags & OF_COLLIDES)
1057  set_modified();
1058 
1059  objp->flags &= ~OF_COLLIDES;
1060  break;
1061 
1062  case 0:
1063  if (!(objp->flags & OF_COLLIDES))
1064  set_modified();
1065 
1066  objp->flags |= OF_COLLIDES;
1067  break;
1068  }
1069 
1070  switch (m_no_disabled_self_destruct.GetCheck()) {
1071  case 1:
1072  if (!(shipp->flags2 & SF2_NO_DISABLED_SELF_DESTRUCT))
1073  set_modified();
1074 
1076  break;
1077 
1078  case 0:
1080  set_modified();
1081 
1083  break;
1084  }
1085 
1086 
1087  shipp->respawn_priority = 0;
1090  }
1091 }
1092 
1093 int ship_flags_dlg::tristate_set(int val, int cur_state)
1094 {
1095  if (val) {
1096  if (!cur_state) {
1097  return 2;
1098  }
1099  } else {
1100  if (cur_state) {
1101  return 2;
1102  }
1103  }
1104 
1105  return cur_state;
1106 }
1107 
1108 // a stub for now, but might be useful later. Easier than ripping out the calls to this
1109 // everywhere at least.
1111 {
1112 }
1113 
1115 {
1116  if (m_cargo_known.GetCheck() == 1) {
1117  m_cargo_known.SetCheck(0);
1118  } else {
1119  m_cargo_known.SetCheck(1);
1120  }
1121 }
1122 
1124 {
1125  if (m_destroy.GetCheck() == 1) {
1126  m_destroy.SetCheck(0);
1127  GetDlgItem(IDC_DESTROY_VALUE)->EnableWindow(FALSE);
1128  GetDlgItem(IDC_DESTROY_SPIN)->EnableWindow(FALSE);
1129 
1130  } else {
1131  m_destroy.SetCheck(1);
1132  GetDlgItem(IDC_DESTROY_VALUE)->EnableWindow(TRUE);
1133  GetDlgItem(IDC_DESTROY_SPIN)->EnableWindow(TRUE);
1134  }
1135 }
1136 
1138 {
1139  if (m_escort.GetCheck() == 1) {
1140  m_escort.SetCheck(0);
1141  GetDlgItem(IDC_ESCORT_PRIORITY)->EnableWindow(FALSE);
1142  } else {
1143  m_escort.SetCheck(1);
1144  GetDlgItem(IDC_ESCORT_PRIORITY)->EnableWindow(TRUE);
1145  }
1146 }
1147 
1149 {
1150  if (m_hidden.GetCheck() == 1) {
1151  m_hidden.SetCheck(0);
1152  } else {
1153  m_hidden.SetCheck(1);
1154  }
1155 }
1156 
1158 {
1159  if (m_primitive_sensors.GetCheck() == 1) {
1160  m_primitive_sensors.SetCheck(0);
1161  } else {
1162  m_primitive_sensors.SetCheck(1);
1163  }
1164 }
1165 
1167 {
1168  if (m_no_subspace_drive.GetCheck() == 1) {
1169  m_no_subspace_drive.SetCheck(0);
1170  } else {
1171  m_no_subspace_drive.SetCheck(1);
1172  }
1173 }
1174 
1176 {
1177  if (m_affected_by_gravity.GetCheck() == 1) {
1178  m_affected_by_gravity.SetCheck(0);
1179  } else {
1180  m_affected_by_gravity.SetCheck(1);
1181  }
1182 }
1183 
1185 {
1186  if (m_toggle_subsystem_scanning.GetCheck() == 1) {
1187  m_toggle_subsystem_scanning.SetCheck(0);
1188  } else {
1189  m_toggle_subsystem_scanning.SetCheck(1);
1190  }
1191 }
1192 
1194 {
1195  if (m_ignore_count.GetCheck() == 1) {
1196  m_ignore_count.SetCheck(0);
1197  } else {
1198  m_ignore_count.SetCheck(1);
1199  }
1200 }
1201 
1203 {
1204  if (m_invulnerable.GetCheck() == 1) {
1205  m_invulnerable.SetCheck(0);
1206  } else {
1207  m_invulnerable.SetCheck(1);
1208  }
1209 }
1210 
1212 {
1213  if (m_targetable_as_bomb.GetCheck() == 1) {
1214  m_targetable_as_bomb.SetCheck(0);
1215  } else {
1216  m_targetable_as_bomb.SetCheck(1);
1217  }
1218 }
1219 
1221 {
1222  if (m_immobile.GetCheck() == 1) {
1223  m_immobile.SetCheck(0);
1224  } else {
1225  m_immobile.SetCheck(1);
1226  }
1227 }
1228 
1230 {
1231  if (m_kamikaze.GetCheck() == 1) {
1232  GetDlgItem(IDC_KDAMAGE)->EnableWindow(FALSE);
1233  m_kamikaze.SetCheck(0);
1234 
1235  } else {
1236  GetDlgItem(IDC_KDAMAGE)->EnableWindow(TRUE);
1237  m_kamikaze.SetCheck(1);
1238  }
1239 }
1240 
1242 {
1243  if (m_no_arrival_music.GetCheck() == 1) {
1244  m_no_arrival_music.SetCheck(0);
1245  } else {
1246  m_no_arrival_music.SetCheck(1);
1247  }
1248 }
1249 
1251 {
1252  if (m_no_dynamic.GetCheck() == 1) {
1253  m_no_dynamic.SetCheck(0);
1254  } else {
1255  m_no_dynamic.SetCheck(1);
1256  }
1257 }
1258 
1260 {
1261  if (m_protect_ship.GetCheck() == 1) {
1262  m_protect_ship.SetCheck(0);
1263  } else {
1264  m_protect_ship.SetCheck(1);
1265  }
1266 }
1267 
1269 {
1270  if (m_beam_protect_ship.GetCheck() == 1) {
1271  m_beam_protect_ship.SetCheck(0);
1272  } else {
1273  m_beam_protect_ship.SetCheck(1);
1274  }
1275 }
1276 
1278 {
1279  if (m_flak_protect_ship.GetCheck() == 1) {
1280  m_flak_protect_ship.SetCheck(0);
1281  } else {
1282  m_flak_protect_ship.SetCheck(1);
1283  }
1284 }
1285 
1287 {
1288  if (m_laser_protect_ship.GetCheck() == 1) {
1289  m_laser_protect_ship.SetCheck(0);
1290  } else {
1291  m_laser_protect_ship.SetCheck(1);
1292  }
1293 }
1294 
1296 {
1297  if (m_missile_protect_ship.GetCheck() == 1) {
1298  m_missile_protect_ship.SetCheck(0);
1299  } else {
1300  m_missile_protect_ship.SetCheck(1);
1301  }
1302 }
1303 
1305 {
1306  if (m_reinforcement.GetCheck() == 1) {
1307  m_reinforcement.SetCheck(0);
1308  } else {
1309  m_reinforcement.SetCheck(1);
1310  }
1311 }
1312 
1314 {
1315  if (m_scannable.GetCheck() == 1) {
1316  m_scannable.SetCheck(0);
1317  } else {
1318  m_scannable.SetCheck(1);
1319  }
1320 }
1321 
1323 {
1324  if (m_red_alert_carry.GetCheck() == 1) {
1325  m_red_alert_carry.SetCheck(0);
1326  } else {
1327  m_red_alert_carry.SetCheck(1);
1328  }
1329 }
1330 
1332 {
1333  if (m_disable_messages.GetCheck() == 1) {
1334  m_disable_messages.SetCheck(0);
1335  } else {
1336  m_disable_messages.SetCheck(1);
1337  }
1338 }
1339 
1341 {
1342  if (m_set_class_dynamically.GetCheck() == 1) {
1343  m_set_class_dynamically.SetCheck(0);
1344  } else {
1345  m_set_class_dynamically.SetCheck(1);
1346  }
1347 }
1349 {
1350  if (m_no_death_scream.GetCheck() == 1) {
1351  m_no_death_scream.SetCheck(0);
1352  } else {
1353  m_no_death_scream.SetCheck(1);
1354  }
1355 }
1356 
1358 {
1359  if (m_always_death_scream.GetCheck() == 1) {
1360  m_always_death_scream.SetCheck(0);
1361  } else {
1362  m_always_death_scream.SetCheck(1);
1363  }
1364 }
1365 
1367 {
1368  if (m_guardian.GetCheck() == 1) {
1369  m_guardian.SetCheck(0);
1370  } else {
1371  m_guardian.SetCheck(1);
1372  }
1373 }
1374 
1376 {
1377  if (m_vaporize.GetCheck() == 1) {
1378  m_vaporize.SetCheck(0);
1379  } else {
1380  m_vaporize.SetCheck(1);
1381  }
1382 }
1383 
1385 {
1386  if (m_stealth.GetCheck() == 1) {
1387  m_stealth.SetCheck(0);
1388  } else {
1389  m_stealth.SetCheck(1);
1390  }
1391 }
1392 
1394 {
1395  if (m_friendly_stealth_invisible.GetCheck() == 1) {
1396  m_friendly_stealth_invisible.SetCheck(0);
1397  } else {
1398  m_friendly_stealth_invisible.SetCheck(1);
1399  }
1400 }
1401 
1403 {
1404  if (m_nav_carry.GetCheck() == 1) {
1405  m_nav_carry.SetCheck(0);
1406  } else {
1407  m_nav_carry.SetCheck(1);
1408  }
1409 }
1410 
1412 {
1413  if (m_nav_needslink.GetCheck() == 1) {
1414  m_nav_needslink.SetCheck(0);
1415  } else {
1416  m_nav_needslink.SetCheck(1);
1417  }
1418 }
1419 
1421 {
1422  if (m_hide_ship_name.GetCheck() == 1) {
1423  m_hide_ship_name.SetCheck(0);
1424  } else {
1425  m_hide_ship_name.SetCheck(1);
1426  }
1427 }
1428 
1430 {
1431  if (m_disable_ets.GetCheck() == 1) {
1432  m_disable_ets.SetCheck(0);
1433  } else {
1434  m_disable_ets.SetCheck(1);
1435  }
1436 }
1437 
1439 {
1440  if (m_cloaked.GetCheck() == 1) {
1441  m_cloaked.SetCheck(0);
1442  } else {
1443  m_cloaked.SetCheck(1);
1444  }
1445 }
1446 
1448 {
1449  if (m_scramble_messages.GetCheck() == 1) {
1450  m_scramble_messages.SetCheck(0);
1451  } else {
1452  m_scramble_messages.SetCheck(1);
1453  }
1454 }
1455 
1457 {
1458  if (m_no_collide.GetCheck() == 1) {
1459  m_no_collide.SetCheck(0);
1460  } else {
1461  m_no_collide.SetCheck(1);
1462  }
1463 }
1464 
1466 {
1467  if (m_no_disabled_self_destruct.GetCheck() == 1) {
1468  m_no_disabled_self_destruct.SetCheck(0);
1469  } else {
1470  m_no_disabled_self_destruct.SetCheck(1);
1471  }
1472 }
#define SF2_TOGGLE_SUBSYSTEM_SCANNING
Definition: ship.h:490
#define OF_INVULNERABLE
Definition: object.h:107
#define IDC_NO_ARRIVAL_MUSIC
Definition: resource.h:909
virtual BOOL OnInitDialog()
#define IDC_REINFORCEMENT
Definition: resource.h:736
#define IDC_AFFECTED_BY_GRAVITY
Definition: resource.h:955
#define IDC_CLOAKED
Definition: resource.h:1170
CButton m_no_arrival_music
Definition: shipflagsdlg.h:41
#define IDC_FLAK_PROTECT_SHIP
Definition: resource.h:1019
numeric_edit_control m_escort_value
Definition: shipflagsdlg.h:76
#define SF2_CLOAKED
Definition: ship.h:504
CButton m_scannable
Definition: shipflagsdlg.h:33
CButton m_protect_ship
Definition: shipflagsdlg.h:35
afx_msg void OnNoDynamic()
#define IDC_SCRAMBLE_MESSAGES
Definition: resource.h:966
#define IDC_NO_COLLIDE
Definition: resource.h:1182
#define IDC_TOGGLE_SUBSYSTEM_SCANNING
Definition: resource.h:842
#define IDC_DESTROY_VALUE
Definition: resource.h:787
#define IDC_ESCORT_PRIORITY
Definition: resource.h:989
int objnum
Definition: ship.h:537
#define IDC_BEAM_PROTECT_SHIP
Definition: resource.h:1017
#define IDC_NO_DEATH_SCREAM
Definition: resource.h:957
int game_type
Definition: missionparse.h:138
#define OF_LASER_PROTECTED
Definition: object.h:120
afx_msg void OnBeamProtectShip()
CButton m_no_death_scream
Definition: shipflagsdlg.h:57
#define SF2_NO_DISABLED_SELF_DESTRUCT
Definition: ship.h:511
afx_msg void OnNavCarry()
CButton m_no_collide
Definition: shipflagsdlg.h:70
int escort_priority
Definition: ship.h:541
void update_ship(int ship)
#define SF2_NO_SUBSPACE_DRIVE
Definition: ship.h:487
afx_msg void OnCargoKnown()
#define SF_IGNORE_COUNT
Definition: ship.h:436
afx_msg void OnAlwaysDeathScream()
afx_msg void OnHideShipName()
numeric_edit_control m_respawn_priority
Definition: shipflagsdlg.h:77
#define IDC_NO_DISABLED_SELF_DESTRUCT
Definition: resource.h:1183
afx_msg void OnNoArrivalMusic()
int ai_index
Definition: ship.h:538
CButton m_beam_protect_ship
Definition: shipflagsdlg.h:36
afx_msg void OnNoDeathScream()
afx_msg void OnIgnoreCount()
#define IDC_VAPORIZE
Definition: resource.h:942
#define TRUE
Definition: pstypes.h:399
#define MISSION_TYPE_MULTI
Definition: missionparse.h:62
#define SF2_FRIENDLY_STEALTH_INVIS
Definition: ship.h:484
#define SF2_AFFECTED_BY_GRAVITY
Definition: ship.h:489
ai_info Ai_info[MAX_AI_INFO]
Definition: ai.cpp:23
CButton m_friendly_stealth_invisible
Definition: shipflagsdlg.h:62
#define IDC_MISSILE_PROTECT_SHIP
Definition: resource.h:1024
#define SF2_NAVPOINT_CARRY
Definition: ship.h:488
object obj_used_list
Definition: object.cpp:53
#define OF_SPECIAL_WARPIN
Definition: object.h:116
#define SF2_SET_CLASS_DYNAMICALLY
Definition: ship.h:500
CButton m_missile_protect_ship
Definition: shipflagsdlg.h:39
#define IDC_FRIENDLY_STEALTH_INVISIBLE
Definition: resource.h:944
CButton m_invulnerable
Definition: shipflagsdlg.h:43
#define IDC_NO_SUBSPACE_DRIVE
Definition: resource.h:937
CButton m_disable_ets
Definition: shipflagsdlg.h:66
#define OF_COLLIDES
Definition: object.h:104
uint flags
Definition: ship.h:644
object * objp
Definition: lua.cpp:3105
#define AIF_KAMIKAZE
Definition: ai.h:55
ship * shipp
Definition: lua.cpp:9162
#define IDC_NAV_CARRY
Definition: resource.h:962
int ai_flags
Definition: ai.h:330
afx_msg void OnCloaked()
#define SHIP_GUARDIAN_THRESHOLD_DEFAULT
Definition: ship.h:47
#define SF2_SCRAMBLE_MESSAGES
Definition: ship.h:509
reinforcements Reinforcements[MAX_REINFORCEMENTS]
Definition: ship.cpp:165
#define IDC_ESCORT
Definition: resource.h:900
#define OF_TARGETABLE_AS_BOMB
Definition: object.h:118
CButton m_affected_by_gravity
Definition: shipflagsdlg.h:50
int instance
Definition: object.h:150
afx_msg void OnStealth()
#define OBJ_START
Definition: object.h:35
CButton m_cargo_known
Definition: shipflagsdlg.h:54
#define OF_IMMOBILE
Definition: object.h:122
afx_msg void OnImmobile()
afx_msg void OnDestroyCheck()
afx_msg void OnLaserProtectShip()
#define IDC_NO_DYNAMIC
Definition: resource.h:947
#define IDC_PROTECT_SHIP
Definition: resource.h:862
afx_msg void OnInvulnerable()
#define SF2_NO_DEATH_SCREAM
Definition: ship.h:495
#define IDC_HIDDEN_FROM_SENSORS
Definition: resource.h:933
int wingnum
Definition: ship.h:623
#define IDC_DISABLE_ETS
Definition: resource.h:1167
afx_msg void OnGuardian()
#define IDC_IMMOBILE
Definition: resource.h:1168
CButton m_vaporize
Definition: shipflagsdlg.h:60
#define SF2_HIDE_SHIP_NAME
Definition: ship.h:498
#define IDC_KDAMAGE
Definition: resource.h:945
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
#define SF_HIDDEN_FROM_SENSORS
Definition: ship.h:464
#define OF_PROTECTED
Definition: object.h:108
#define IDC_REDALERTCARRY
Definition: resource.h:951
#define IDC_INVULNERABLE
Definition: resource.h:928
CButton m_hide_ship_name
Definition: shipflagsdlg.h:65
CButton m_immobile
Definition: shipflagsdlg.h:45
CButton m_escort
Definition: shipflagsdlg.h:52
CButton m_no_disabled_self_destruct
Definition: shipflagsdlg.h:71
afx_msg void OnTargetableAsBomb()
#define IDC_RESPAWN_PRIORITY
Definition: resource.h:996
afx_msg void OnDisableBuiltinShip()
afx_msg void OnVaporize()
CButton m_nav_carry
Definition: shipflagsdlg.h:63
CButton m_toggle_subsystem_scanning
Definition: shipflagsdlg.h:51
Definition: ship.h:534
#define IDC_DISABLE_BUILTIN_SHIP
Definition: resource.h:1115
CButton m_primitive_sensors
Definition: shipflagsdlg.h:48
afx_msg void OnMissileProtectShip()
#define IDC_DESTROY_CHECK
Definition: resource.h:187
object Objects[MAX_OBJECTS]
Definition: object.cpp:62
#define IDC_TARGETABLE_AS_BOMB
Definition: resource.h:931
GLclampd n
Definition: Glext.h:7286
CButton m_laser_protect_ship
Definition: shipflagsdlg.h:38
afx_msg void OnPrimitiveSensors()
CButton m_guardian
Definition: shipflagsdlg.h:59
#define OF_MARKED
Definition: object.h:125
#define IDC_LASER_PROTECT_SHIP
Definition: resource.h:1022
int ship_guardian_threshold
Definition: ship.h:601
#define IDC_PRIMITIVE_SENSORS
Definition: resource.h:936
#define IDC_STEALTH
Definition: resource.h:959
#define OBJ_SHIP
Definition: object.h:32
afx_msg void OnSetClassDynamically()
CButton m_scramble_messages
Definition: shipflagsdlg.h:69
#define IDC_DESTROY_SPIN
Definition: resource.h:876
CButton m_red_alert_carry
Definition: shipflagsdlg.h:32
#define IDC_HIDE_SHIP_NAME
Definition: resource.h:1135
#define IDC_KAMIKAZE
Definition: resource.h:949
#define SF2_NO_BUILTIN_MESSAGES
Definition: ship.h:491
#define OF_MISSILE_PROTECTED
Definition: object.h:121
GLuint const GLchar * name
Definition: Glext.h:5608
CButton m_ignore_count
Definition: shipflagsdlg.h:46
GLuint GLfloat * val
Definition: Glext.h:6741
int final_death_time
Definition: ship.h:569
#define SF_RED_ALERT_STORE_STATUS
Definition: ship.h:469
#define IDC_ALWAYS_DEATH_SCREAM
Definition: resource.h:960
int BOOL
Definition: config.h:80
#define SF_SCANNABLE
Definition: ship.h:465
#define SF_VAPORIZE
Definition: ship.h:470
afx_msg void OnScannable()
numeric_edit_control m_kdamage
Definition: shipflagsdlg.h:74
ship Ships[MAX_SHIPS]
Definition: ship.cpp:122
CButton m_no_subspace_drive
Definition: shipflagsdlg.h:49
CSpinButtonCtrl m_destroy_spin
Definition: shipflagsdlg.h:73
afx_msg void OnDisableETS()
#define SF_KILL_BEFORE_MISSION
Definition: ship.h:446
#define IDC_SET_CLASS_DYNAMICALLY
Definition: resource.h:1136
numeric_edit_control m_destroy_value
Definition: shipflagsdlg.h:75
#define SF2_NO_ETS
Definition: ship.h:503
int set_reinforcement(char *name, int state)
afx_msg void OnNoSubspaceDrive()
CButton m_special_warpin
Definition: shipflagsdlg.h:55
GLint first
Definition: Gl.h:1491
afx_msg void OnNavNeedslink()
afx_msg void OnNoDisabledSelfDestruct()
int tristate_set(int val, int cur_state)
CButton m_kamikaze
Definition: shipflagsdlg.h:42
#define MAX_REINFORCEMENTS
Definition: ship.h:58
afx_msg void OnHiddenFromSensors()
CButton m_nav_needslink
Definition: shipflagsdlg.h:64
#define OF_FLAK_PROTECTED
Definition: object.h:119
afx_msg void OnReinforcement()
#define SF_NO_ARRIVAL_MUSIC
Definition: ship.h:439
int MessageBox(HWND h, const char *s1, const char *s2, int i)
#define AIF_NO_DYNAMIC
Definition: ai.h:56
CButton m_hidden
Definition: shipflagsdlg.h:47
#define IDC_SPECIAL_WARPIN
Definition: resource.h:1036
#define SF2_ALWAYS_DEATH_SCREAM
Definition: ship.h:496
virtual void DoDataExchange(CDataExchange *pDX)
CButton m_flak_protect_ship
Definition: shipflagsdlg.h:37
#define IDC_NAV_NEEDSLINK
Definition: resource.h:964
#define SF_ESCORT
Definition: ship.h:438
afx_msg void OnEscort()
#define SF_CARGO_REVEALED
Definition: ship.h:456
int Num_reinforcements
Definition: ship.cpp:121
afx_msg void OnScrambleMessages()
uint flags2
Definition: ship.h:645
CButton m_set_class_dynamically
Definition: shipflagsdlg.h:68
int kamikaze_damage
Definition: ai.h:523
CButton m_cloaked
Definition: shipflagsdlg.h:67
#define SF2_PRIMITIVE_SENSORS
Definition: ship.h:483
int respawn_priority
Definition: ship.h:544
#define IDC_GUARDIAN
Definition: resource.h:939
#define SF2_STEALTH
Definition: ship.h:485
uint flags
Definition: object.h:151
mission The_mission
#define SF2_NAVPOINT_NEEDSLINK
Definition: ship.h:497
afx_msg void OnRedalertcarry()
char type
Definition: object.h:146
CButton m_stealth
Definition: shipflagsdlg.h:61
#define FALSE
Definition: pstypes.h:400
afx_msg void OnProtectShip()
#define IDC_SCANNABLE
Definition: resource.h:940
CButton m_no_dynamic
Definition: shipflagsdlg.h:40
#define IDC_IGNORE_COUNT
Definition: resource.h:427
CButton m_reinforcement
Definition: shipflagsdlg.h:34
CButton m_always_death_scream
Definition: shipflagsdlg.h:58
afx_msg void OnFriendlyStealthInvisible()
afx_msg void OnNoCollide()
#define stricmp(s1, s2)
Definition: config.h:271
afx_msg void OnAffectedByGravity()
char ship_name[NAME_LENGTH]
Definition: ship.h:604
CButton m_destroy
Definition: shipflagsdlg.h:53
afx_msg void OnFlakProtectShip()
#define IDC_CARGO_KNOWN
Definition: resource.h:840
ship_flags_dlg(CWnd *pParent=NULL)
#define OF_BEAM_PROTECTED
Definition: object.h:115
afx_msg void OnToggleSubsystemScanning()
void setup(int id, CWnd *wnd)
afx_msg void OnKamikaze()
CButton m_disable_messages
Definition: shipflagsdlg.h:56
CButton m_targetable_as_bomb
Definition: shipflagsdlg.h:44