/* ** AreaEditor - a program for editing SMAUG and ROM area files. ** Author: Nick Gammon ** http://www.gammon.com.au/ ** See Copyright Notice at the end of AreaEditor.h */ // MobileResistantPage.cpp : implementation file // #include "stdafx.h" #include "AreaEditor.h" #include "AreaEditorDoc.h" #include "MobileResistantPage.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMobileResistantPage dialog CMobileResistantPage::CMobileResistantPage(CWnd* pParent /*=NULL*/) : CDialog(CMobileResistantPage::IDD, pParent) { //{{AFX_DATA_INIT(CMobileResistantPage) m_res_acid = FALSE; m_res_blunt = FALSE; m_res_charm = FALSE; m_res_cold = FALSE; m_res_drain = FALSE; m_res_electricity = FALSE; m_res_energy = FALSE; m_res_fire = FALSE; m_res_hold = FALSE; m_res_magic = FALSE; m_res_nonmagic = FALSE; m_res_paralysis = FALSE; m_res_pierce = FALSE; m_res_plus1 = FALSE; m_res_plus2 = FALSE; m_res_plus3 = FALSE; m_res_plus4 = FALSE; m_res_plus5 = FALSE; m_res_plus6 = FALSE; m_res_poison = FALSE; m_res_slash = FALSE; m_res_sleep = FALSE; m_imm_acid = FALSE; m_imm_blunt = FALSE; m_imm_charm = FALSE; m_imm_cold = FALSE; m_imm_drain = FALSE; m_imm_electricity = FALSE; m_imm_energy = FALSE; m_imm_fire = FALSE; m_imm_hold = FALSE; m_imm_magic = FALSE; m_imm_nonmagic = FALSE; m_imm_paralysis = FALSE; m_imm_pierce = FALSE; m_imm_plus1 = FALSE; m_imm_plus2 = FALSE; m_imm_plus3 = FALSE; m_imm_plus4 = FALSE; m_imm_plus5 = FALSE; m_imm_plus6 = FALSE; m_imm_poison = FALSE; m_imm_slash = FALSE; m_imm_sleep = FALSE; m_sus_acid = FALSE; m_sus_blunt = FALSE; m_sus_charm = FALSE; m_sus_cold = FALSE; m_sus_drain = FALSE; m_sus_electricity = FALSE; m_sus_energy = FALSE; m_sus_fire = FALSE; m_sus_hold = FALSE; m_sus_magic = FALSE; m_sus_nonmagic = FALSE; m_sus_paralysis = FALSE; m_sus_pierce = FALSE; m_sus_plus1 = FALSE; m_sus_plus2 = FALSE; m_sus_plus3 = FALSE; m_sus_plus4 = FALSE; m_sus_plus5 = FALSE; m_sus_plus6 = FALSE; m_sus_poison = FALSE; m_sus_slash = FALSE; m_sus_sleep = FALSE; //}}AFX_DATA_INIT m_mob = NULL; } #undef LOAD_RESISTANT_FLAG #define LOAD_RESISTANT_FLAG(field, flag) \ field = IS_SET (m_mob->resistant, flag); #undef LOAD_IMMUNE_FLAG #define LOAD_IMMUNE_FLAG(field, flag) \ field = IS_SET (m_mob->immune, flag); #undef LOAD_SUSCEPTIBLE_FLAG #define LOAD_SUSCEPTIBLE_FLAG(field, flag) \ field = IS_SET (m_mob->susceptible, flag); #undef UNLOAD_RESISTANT_FLAG #define UNLOAD_RESISTANT_FLAG(field, flag) \ if (field != IS_SET (m_mob->resistant, flag)) bChanged = true; \ if (field) \ SET_BIT (m_mob->resistant, flag);\ else \ REMOVE_BIT (m_mob->resistant, flag) #undef UNLOAD_IMMUNE_FLAG #define UNLOAD_IMMUNE_FLAG(field, flag) \ if (field != IS_SET (m_mob->immune, flag)) bChanged = true; \ if (field) \ SET_BIT (m_mob->immune, flag);\ else \ REMOVE_BIT (m_mob->immune, flag) #undef UNLOAD_SUSCEPTIBLE_FLAG #define UNLOAD_SUSCEPTIBLE_FLAG(field, flag) \ if (field != IS_SET (m_mob->susceptible, flag)) bChanged = true; \ if (field) \ SET_BIT (m_mob->susceptible, flag);\ else \ REMOVE_BIT (m_mob->susceptible, flag) void CMobileResistantPage::DoDataExchange(CDataExchange* pDX) { bool bChanged = false; if (!pDX->m_bSaveAndValidate) { LOAD_RESISTANT_FLAG (m_res_acid, RIS_ACID); LOAD_RESISTANT_FLAG (m_res_blunt, RIS_BLUNT); LOAD_RESISTANT_FLAG (m_res_charm, RIS_CHARM); LOAD_RESISTANT_FLAG (m_res_cold, RIS_COLD); LOAD_RESISTANT_FLAG (m_res_drain, RIS_DRAIN); LOAD_RESISTANT_FLAG (m_res_electricity, RIS_ELECTRICITY); LOAD_RESISTANT_FLAG (m_res_energy, RIS_ENERGY); LOAD_RESISTANT_FLAG (m_res_fire, RIS_FIRE); LOAD_RESISTANT_FLAG (m_res_hold, RIS_HOLD); LOAD_RESISTANT_FLAG (m_res_magic, RIS_MAGIC); LOAD_RESISTANT_FLAG (m_res_nonmagic, RIS_NONMAGIC); LOAD_RESISTANT_FLAG (m_res_paralysis, RIS_PARALYSIS); LOAD_RESISTANT_FLAG (m_res_pierce, RIS_PIERCE); LOAD_RESISTANT_FLAG (m_res_plus1, RIS_PLUS1); LOAD_RESISTANT_FLAG (m_res_plus2, RIS_PLUS2); LOAD_RESISTANT_FLAG (m_res_plus3, RIS_PLUS3); LOAD_RESISTANT_FLAG (m_res_plus4, RIS_PLUS4); LOAD_RESISTANT_FLAG (m_res_plus5, RIS_PLUS5); LOAD_RESISTANT_FLAG (m_res_plus6, RIS_PLUS6); LOAD_RESISTANT_FLAG (m_res_poison, RIS_POISON); LOAD_RESISTANT_FLAG (m_res_slash, RIS_SLASH); LOAD_RESISTANT_FLAG (m_res_sleep, RIS_SLEEP); LOAD_IMMUNE_FLAG (m_imm_acid, RIS_ACID); LOAD_IMMUNE_FLAG (m_imm_blunt, RIS_BLUNT); LOAD_IMMUNE_FLAG (m_imm_charm, RIS_CHARM); LOAD_IMMUNE_FLAG (m_imm_cold, RIS_COLD); LOAD_IMMUNE_FLAG (m_imm_drain, RIS_DRAIN); LOAD_IMMUNE_FLAG (m_imm_electricity, RIS_ELECTRICITY); LOAD_IMMUNE_FLAG (m_imm_energy, RIS_ENERGY); LOAD_IMMUNE_FLAG (m_imm_fire, RIS_FIRE); LOAD_IMMUNE_FLAG (m_imm_hold, RIS_HOLD); LOAD_IMMUNE_FLAG (m_imm_magic, RIS_MAGIC); LOAD_IMMUNE_FLAG (m_imm_nonmagic, RIS_NONMAGIC); LOAD_IMMUNE_FLAG (m_imm_paralysis, RIS_PARALYSIS); LOAD_IMMUNE_FLAG (m_imm_pierce, RIS_PIERCE); LOAD_IMMUNE_FLAG (m_imm_plus1, RIS_PLUS1); LOAD_IMMUNE_FLAG (m_imm_plus2, RIS_PLUS2); LOAD_IMMUNE_FLAG (m_imm_plus3, RIS_PLUS3); LOAD_IMMUNE_FLAG (m_imm_plus4, RIS_PLUS4); LOAD_IMMUNE_FLAG (m_imm_plus5, RIS_PLUS5); LOAD_IMMUNE_FLAG (m_imm_plus6, RIS_PLUS6); LOAD_IMMUNE_FLAG (m_imm_poison, RIS_POISON); LOAD_IMMUNE_FLAG (m_imm_slash, RIS_SLASH); LOAD_IMMUNE_FLAG (m_imm_sleep, RIS_SLEEP); LOAD_SUSCEPTIBLE_FLAG (m_sus_acid, RIS_ACID); LOAD_SUSCEPTIBLE_FLAG (m_sus_blunt, RIS_BLUNT); LOAD_SUSCEPTIBLE_FLAG (m_sus_charm, RIS_CHARM); LOAD_SUSCEPTIBLE_FLAG (m_sus_cold, RIS_COLD); LOAD_SUSCEPTIBLE_FLAG (m_sus_drain, RIS_DRAIN); LOAD_SUSCEPTIBLE_FLAG (m_sus_electricity, RIS_ELECTRICITY); LOAD_SUSCEPTIBLE_FLAG (m_sus_energy, RIS_ENERGY); LOAD_SUSCEPTIBLE_FLAG (m_sus_fire, RIS_FIRE); LOAD_SUSCEPTIBLE_FLAG (m_sus_hold, RIS_HOLD); LOAD_SUSCEPTIBLE_FLAG (m_sus_magic, RIS_MAGIC); LOAD_SUSCEPTIBLE_FLAG (m_sus_nonmagic, RIS_NONMAGIC); LOAD_SUSCEPTIBLE_FLAG (m_sus_paralysis, RIS_PARALYSIS); LOAD_SUSCEPTIBLE_FLAG (m_sus_pierce, RIS_PIERCE); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus1, RIS_PLUS1); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus2, RIS_PLUS2); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus3, RIS_PLUS3); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus4, RIS_PLUS4); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus5, RIS_PLUS5); LOAD_SUSCEPTIBLE_FLAG (m_sus_plus6, RIS_PLUS6); LOAD_SUSCEPTIBLE_FLAG (m_sus_poison, RIS_POISON); LOAD_SUSCEPTIBLE_FLAG (m_sus_slash, RIS_SLASH); LOAD_SUSCEPTIBLE_FLAG (m_sus_sleep, RIS_SLEEP); } CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMobileResistantPage) DDX_Check(pDX, IDC_ACID, m_res_acid); DDX_Check(pDX, IDC_BLUNT, m_res_blunt); DDX_Check(pDX, IDC_CHARM, m_res_charm); DDX_Check(pDX, IDC_COLD, m_res_cold); DDX_Check(pDX, IDC_DRAIN, m_res_drain); DDX_Check(pDX, IDC_ELECTRICITY, m_res_electricity); DDX_Check(pDX, IDC_ENERGY, m_res_energy); DDX_Check(pDX, IDC_FIRE, m_res_fire); DDX_Check(pDX, IDC_HOLD, m_res_hold); DDX_Check(pDX, IDC_MAGIC, m_res_magic); DDX_Check(pDX, IDC_NONMAGIC, m_res_nonmagic); DDX_Check(pDX, IDC_PARALYSIS, m_res_paralysis); DDX_Check(pDX, IDC_PIERCE, m_res_pierce); DDX_Check(pDX, IDC_PLUS1, m_res_plus1); DDX_Check(pDX, IDC_PLUS2, m_res_plus2); DDX_Check(pDX, IDC_PLUS3, m_res_plus3); DDX_Check(pDX, IDC_PLUS4, m_res_plus4); DDX_Check(pDX, IDC_PLUS5, m_res_plus5); DDX_Check(pDX, IDC_PLUS6, m_res_plus6); DDX_Check(pDX, IDC_POISON, m_res_poison); DDX_Check(pDX, IDC_SLASH, m_res_slash); DDX_Check(pDX, IDC_SLEEP, m_res_sleep); DDX_Check(pDX, IDC_ACID2, m_imm_acid); DDX_Check(pDX, IDC_BLUNT2, m_imm_blunt); DDX_Check(pDX, IDC_CHARM2, m_imm_charm); DDX_Check(pDX, IDC_COLD2, m_imm_cold); DDX_Check(pDX, IDC_DRAIN2, m_imm_drain); DDX_Check(pDX, IDC_ELECTRICITY2, m_imm_electricity); DDX_Check(pDX, IDC_ENERGY2, m_imm_energy); DDX_Check(pDX, IDC_FIRE2, m_imm_fire); DDX_Check(pDX, IDC_HOLD2, m_imm_hold); DDX_Check(pDX, IDC_MAGIC2, m_imm_magic); DDX_Check(pDX, IDC_NONMAGIC2, m_imm_nonmagic); DDX_Check(pDX, IDC_PARALYSIS2, m_imm_paralysis); DDX_Check(pDX, IDC_PIERCE2, m_imm_pierce); DDX_Check(pDX, IDC_PLUS7, m_imm_plus1); DDX_Check(pDX, IDC_PLUS8, m_imm_plus2); DDX_Check(pDX, IDC_PLUS9, m_imm_plus3); DDX_Check(pDX, IDC_PLUS10, m_imm_plus4); DDX_Check(pDX, IDC_PLUS11, m_imm_plus5); DDX_Check(pDX, IDC_PLUS12, m_imm_plus6); DDX_Check(pDX, IDC_POISON2, m_imm_poison); DDX_Check(pDX, IDC_SLASH2, m_imm_slash); DDX_Check(pDX, IDC_SLEEP2, m_imm_sleep); DDX_Check(pDX, IDC_ACID3, m_sus_acid); DDX_Check(pDX, IDC_BLUNT3, m_sus_blunt); DDX_Check(pDX, IDC_CHARM3, m_sus_charm); DDX_Check(pDX, IDC_COLD3, m_sus_cold); DDX_Check(pDX, IDC_DRAIN3, m_sus_drain); DDX_Check(pDX, IDC_ELECTRICITY3, m_sus_electricity); DDX_Check(pDX, IDC_ENERGY3, m_sus_energy); DDX_Check(pDX, IDC_FIRE3, m_sus_fire); DDX_Check(pDX, IDC_HOLD3, m_sus_hold); DDX_Check(pDX, IDC_MAGIC3, m_sus_magic); DDX_Check(pDX, IDC_NONMAGIC3, m_sus_nonmagic); DDX_Check(pDX, IDC_PARALYSIS3, m_sus_paralysis); DDX_Check(pDX, IDC_PIERCE3, m_sus_pierce); DDX_Check(pDX, IDC_PLUS13, m_sus_plus1); DDX_Check(pDX, IDC_PLUS14, m_sus_plus2); DDX_Check(pDX, IDC_PLUS15, m_sus_plus3); DDX_Check(pDX, IDC_PLUS16, m_sus_plus4); DDX_Check(pDX, IDC_PLUS17, m_sus_plus5); DDX_Check(pDX, IDC_PLUS18, m_sus_plus6); DDX_Check(pDX, IDC_POISON3, m_sus_poison); DDX_Check(pDX, IDC_SLASH3, m_sus_slash); DDX_Check(pDX, IDC_SLEEP3, m_sus_sleep); //}}AFX_DATA_MAP if (pDX->m_bSaveAndValidate) { UNLOAD_RESISTANT_FLAG (m_res_acid, RIS_ACID); UNLOAD_RESISTANT_FLAG (m_res_blunt, RIS_BLUNT); UNLOAD_RESISTANT_FLAG (m_res_charm, RIS_CHARM); UNLOAD_RESISTANT_FLAG (m_res_cold, RIS_COLD); UNLOAD_RESISTANT_FLAG (m_res_drain, RIS_DRAIN); UNLOAD_RESISTANT_FLAG (m_res_electricity, RIS_ELECTRICITY); UNLOAD_RESISTANT_FLAG (m_res_energy, RIS_ENERGY); UNLOAD_RESISTANT_FLAG (m_res_fire, RIS_FIRE); UNLOAD_RESISTANT_FLAG (m_res_hold, RIS_HOLD); UNLOAD_RESISTANT_FLAG (m_res_magic, RIS_MAGIC); UNLOAD_RESISTANT_FLAG (m_res_nonmagic, RIS_NONMAGIC); UNLOAD_RESISTANT_FLAG (m_res_paralysis, RIS_PARALYSIS); UNLOAD_RESISTANT_FLAG (m_res_pierce, RIS_PIERCE); UNLOAD_RESISTANT_FLAG (m_res_plus1, RIS_PLUS1); UNLOAD_RESISTANT_FLAG (m_res_plus2, RIS_PLUS2); UNLOAD_RESISTANT_FLAG (m_res_plus3, RIS_PLUS3); UNLOAD_RESISTANT_FLAG (m_res_plus4, RIS_PLUS4); UNLOAD_RESISTANT_FLAG (m_res_plus5, RIS_PLUS5); UNLOAD_RESISTANT_FLAG (m_res_plus6, RIS_PLUS6); UNLOAD_RESISTANT_FLAG (m_res_poison, RIS_POISON); UNLOAD_RESISTANT_FLAG (m_res_slash, RIS_SLASH); UNLOAD_RESISTANT_FLAG (m_res_sleep, RIS_SLEEP); UNLOAD_IMMUNE_FLAG (m_imm_acid, RIS_ACID); UNLOAD_IMMUNE_FLAG (m_imm_blunt, RIS_BLUNT); UNLOAD_IMMUNE_FLAG (m_imm_charm, RIS_CHARM); UNLOAD_IMMUNE_FLAG (m_imm_cold, RIS_COLD); UNLOAD_IMMUNE_FLAG (m_imm_drain, RIS_DRAIN); UNLOAD_IMMUNE_FLAG (m_imm_electricity, RIS_ELECTRICITY); UNLOAD_IMMUNE_FLAG (m_imm_energy, RIS_ENERGY); UNLOAD_IMMUNE_FLAG (m_imm_fire, RIS_FIRE); UNLOAD_IMMUNE_FLAG (m_imm_hold, RIS_HOLD); UNLOAD_IMMUNE_FLAG (m_imm_magic, RIS_MAGIC); UNLOAD_IMMUNE_FLAG (m_imm_nonmagic, RIS_NONMAGIC); UNLOAD_IMMUNE_FLAG (m_imm_paralysis, RIS_PARALYSIS); UNLOAD_IMMUNE_FLAG (m_imm_pierce, RIS_PIERCE); UNLOAD_IMMUNE_FLAG (m_imm_plus1, RIS_PLUS1); UNLOAD_IMMUNE_FLAG (m_imm_plus2, RIS_PLUS2); UNLOAD_IMMUNE_FLAG (m_imm_plus3, RIS_PLUS3); UNLOAD_IMMUNE_FLAG (m_imm_plus4, RIS_PLUS4); UNLOAD_IMMUNE_FLAG (m_imm_plus5, RIS_PLUS5); UNLOAD_IMMUNE_FLAG (m_imm_plus6, RIS_PLUS6); UNLOAD_IMMUNE_FLAG (m_imm_poison, RIS_POISON); UNLOAD_IMMUNE_FLAG (m_imm_slash, RIS_SLASH); UNLOAD_IMMUNE_FLAG (m_imm_sleep, RIS_SLEEP); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_acid, RIS_ACID); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_blunt, RIS_BLUNT); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_charm, RIS_CHARM); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_cold, RIS_COLD); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_drain, RIS_DRAIN); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_electricity, RIS_ELECTRICITY); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_energy, RIS_ENERGY); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_fire, RIS_FIRE); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_hold, RIS_HOLD); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_magic, RIS_MAGIC); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_nonmagic, RIS_NONMAGIC); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_paralysis, RIS_PARALYSIS); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_pierce, RIS_PIERCE); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus1, RIS_PLUS1); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus2, RIS_PLUS2); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus3, RIS_PLUS3); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus4, RIS_PLUS4); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus5, RIS_PLUS5); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_plus6, RIS_PLUS6); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_poison, RIS_POISON); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_slash, RIS_SLASH); UNLOAD_SUSCEPTIBLE_FLAG (m_sus_sleep, RIS_SLEEP); // put it in a try block, they can ignore these errors try { if (m_mob->resistant & m_mob->immune) { ::AfxMessageBox ("You cannot be resistant and immune to the same thing.", MB_ICONSTOP); pDX->Fail(); return; } if (m_mob->susceptible & m_mob->immune) { ::AfxMessageBox ("You cannot be susceptible and immune to the same thing.", MB_ICONSTOP); pDX->Fail(); return; } } // end of try block catch (CUserException * e) { if (App.m_bIgnoreValidationErrors && ::AfxMessageBox ("Ignore this error?", MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION) == IDYES) e->Delete (); else throw; } // end of catch if (bChanged) m_mob->m_pDoc->SetModifiedFlag (); } } BEGIN_MESSAGE_MAP(CMobileResistantPage, CDialog) //{{AFX_MSG_MAP(CMobileResistantPage) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMobileResistantPage message handlers