areaeditor/
/*
** 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
*/

// MobileAffectPage.cpp : implementation file
//

#include "stdafx.h"
#include "AreaEditor.h"
#include "AreaEditorDoc.h"
#include "MobileAffectPage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMobileAffectPage dialog


CMobileAffectPage::CMobileAffectPage(CWnd* pParent /*=NULL*/)
	: CDialog(CMobileAffectPage::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMobileAffectPage)
	m_bBlind = FALSE;
	m_bInvisible = FALSE;
	m_bAquaBreath = FALSE;
	m_bBerserk = FALSE;
	m_bCharm = FALSE;
	m_bCurse = FALSE;
	m_bDetectEvil = FALSE;
	m_bDetectHidden = FALSE;
	m_bDetectInvis = FALSE;
	m_bDetectMagic = FALSE;
	m_bDetectTraps = FALSE;
	m_bFaeireFire = FALSE;
	m_bFireShield = FALSE;
	m_bFlaming = FALSE;
	m_bFloating = FALSE;
	m_bFlying = FALSE;
	m_bHaus1 = FALSE;
	m_bHide = FALSE;
	m_bHold = FALSE;
	m_bIceShield = FALSE;
	m_bInfraRed = FALSE;
	m_bParalysis = FALSE;
	m_bPassDoor = FALSE;
	m_bPoison = FALSE;
	m_bPossess = FALSE;
	m_bProtect = FALSE;
	m_bSanctuary = FALSE;
	m_bScrying = FALSE;
	m_bShockShield = FALSE;
	m_bSleep = FALSE;
	m_bSneak = FALSE;
	m_bTrueSight = FALSE;
	//}}AFX_DATA_INIT

  m_mob = NULL;

}

#undef LOAD_FLAG
#define LOAD_FLAG(field, flag)  \
  field = IS_SET (m_mob->affected_by, flag);

#undef UNLOAD_FLAG
#define UNLOAD_FLAG(field, flag)  \
  if (field != IS_SET (m_mob->affected_by, flag)) bChanged = true; \
  if (field)                      \
    SET_BIT (m_mob->affected_by, flag);\
  else                            \
    REMOVE_BIT (m_mob->affected_by, flag)

void CMobileAffectPage::DoDataExchange(CDataExchange* pDX)
{
bool bChanged = false;

  if (!pDX->m_bSaveAndValidate)
    {
	  LOAD_FLAG (m_bBlind, AFF_BLIND);
	  LOAD_FLAG (m_bInvisible, AFF_INVISIBLE);
	  LOAD_FLAG (m_bAquaBreath, AFF_AQUA_BREATH);
	  LOAD_FLAG (m_bBerserk, AFF_BERSERK);
	  LOAD_FLAG (m_bCharm, AFF_CHARM);
	  LOAD_FLAG (m_bCurse, AFF_CURSE);
	  LOAD_FLAG (m_bDetectEvil, AFF_DETECT_EVIL);
	  LOAD_FLAG (m_bDetectHidden, AFF_DETECT_HIDDEN);
	  LOAD_FLAG (m_bDetectInvis, AFF_DETECT_INVIS);
	  LOAD_FLAG (m_bDetectMagic, AFF_DETECT_MAGIC);
	  LOAD_FLAG (m_bDetectTraps, AFF_DETECTTRAPS);
	  LOAD_FLAG (m_bFaeireFire, AFF_FAERIE_FIRE);
	  LOAD_FLAG (m_bFireShield, AFF_FIRESHIELD);
	  LOAD_FLAG (m_bFlaming, AFF_FLAMING);
	  LOAD_FLAG (m_bFloating, AFF_FLOATING);
	  LOAD_FLAG (m_bFlying, AFF_FLYING);
	  LOAD_FLAG (m_bHaus1, AFF_HAUS1);
	  LOAD_FLAG (m_bHide, AFF_HIDE);
	  LOAD_FLAG (m_bHold, AFF_HOLD);
	  LOAD_FLAG (m_bIceShield, AFF_ICESHIELD);
	  LOAD_FLAG (m_bInfraRed, AFF_INFRARED);
	  LOAD_FLAG (m_bParalysis, AFF_PARALYSIS);
	  LOAD_FLAG (m_bPassDoor, AFF_PASS_DOOR);
	  LOAD_FLAG (m_bPoison, AFF_POISON);
	  LOAD_FLAG (m_bPossess, AFF_POSSESS);
	  LOAD_FLAG (m_bProtect, AFF_PROTECT);
	  LOAD_FLAG (m_bSanctuary, AFF_SANCTUARY);
	  LOAD_FLAG (m_bScrying, AFF_SCRYING);
	  LOAD_FLAG (m_bShockShield, AFF_SHOCKSHIELD);
	  LOAD_FLAG (m_bSleep, AFF_SLEEP);
	  LOAD_FLAG (m_bSneak, AFF_SNEAK);
	  LOAD_FLAG (m_bTrueSight, AFF_TRUESIGHT);

    }

	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMobileAffectPage)
	DDX_Check(pDX, IDC_AFF_BLIND, m_bBlind);
	DDX_Check(pDX, IDC_AFF_INVISIBLE, m_bInvisible);
	DDX_Check(pDX, IDC_AFF_AQUA_BREATH, m_bAquaBreath);
	DDX_Check(pDX, IDC_AFF_BERSERK, m_bBerserk);
	DDX_Check(pDX, IDC_AFF_CHARM, m_bCharm);
	DDX_Check(pDX, IDC_AFF_CURSE, m_bCurse);
	DDX_Check(pDX, IDC_AFF_DETECT_EVIL, m_bDetectEvil);
	DDX_Check(pDX, IDC_AFF_DETECT_HIDDEN, m_bDetectHidden);
	DDX_Check(pDX, IDC_AFF_DETECT_INVIS, m_bDetectInvis);
	DDX_Check(pDX, IDC_AFF_DETECT_MAGIC, m_bDetectMagic);
	DDX_Check(pDX, IDC_AFF_DETECTTRAPS, m_bDetectTraps);
	DDX_Check(pDX, IDC_AFF_FAERIE_FIRE, m_bFaeireFire);
	DDX_Check(pDX, IDC_AFF_FIRESHIELD, m_bFireShield);
	DDX_Check(pDX, IDC_AFF_FLAMING, m_bFlaming);
	DDX_Check(pDX, IDC_AFF_FLOATING, m_bFloating);
	DDX_Check(pDX, IDC_AFF_FLYING, m_bFlying);
	DDX_Check(pDX, IDC_AFF_HAUS1, m_bHaus1);
	DDX_Check(pDX, IDC_AFF_HIDE, m_bHide);
	DDX_Check(pDX, IDC_AFF_HOLD, m_bHold);
	DDX_Check(pDX, IDC_AFF_ICESHIELD, m_bIceShield);
	DDX_Check(pDX, IDC_AFF_INFRARED, m_bInfraRed);
	DDX_Check(pDX, IDC_AFF_PARALYSIS, m_bParalysis);
	DDX_Check(pDX, IDC_AFF_PASS_DOOR, m_bPassDoor);
	DDX_Check(pDX, IDC_AFF_POISON, m_bPoison);
	DDX_Check(pDX, IDC_AFF_POSSESS, m_bPossess);
	DDX_Check(pDX, IDC_AFF_PROTECT, m_bProtect);
	DDX_Check(pDX, IDC_AFF_SANCTUARY, m_bSanctuary);
	DDX_Check(pDX, IDC_AFF_SCRYING, m_bScrying);
	DDX_Check(pDX, IDC_AFF_SHOCKSHIELD, m_bShockShield);
	DDX_Check(pDX, IDC_AFF_SLEEP, m_bSleep);
	DDX_Check(pDX, IDC_AFF_SNEAK, m_bSneak);
	DDX_Check(pDX, IDC_AFF_TRUESIGHT, m_bTrueSight);
	//}}AFX_DATA_MAP

  if (pDX->m_bSaveAndValidate)
    {
	  UNLOAD_FLAG (m_bBlind, AFF_BLIND);
	  UNLOAD_FLAG (m_bInvisible, AFF_INVISIBLE);
	  UNLOAD_FLAG (m_bAquaBreath, AFF_AQUA_BREATH);
	  UNLOAD_FLAG (m_bBerserk, AFF_BERSERK);
	  UNLOAD_FLAG (m_bCharm, AFF_CHARM);
	  UNLOAD_FLAG (m_bCurse, AFF_CURSE);
	  UNLOAD_FLAG (m_bDetectEvil, AFF_DETECT_EVIL);
	  UNLOAD_FLAG (m_bDetectHidden, AFF_DETECT_HIDDEN);
	  UNLOAD_FLAG (m_bDetectInvis, AFF_DETECT_INVIS);
	  UNLOAD_FLAG (m_bDetectMagic, AFF_DETECT_MAGIC);
	  UNLOAD_FLAG (m_bDetectTraps, AFF_DETECTTRAPS);
	  UNLOAD_FLAG (m_bFaeireFire, AFF_FAERIE_FIRE);
	  UNLOAD_FLAG (m_bFireShield, AFF_FIRESHIELD);
	  UNLOAD_FLAG (m_bFlaming, AFF_FLAMING);
	  UNLOAD_FLAG (m_bFloating, AFF_FLOATING);
	  UNLOAD_FLAG (m_bFlying, AFF_FLYING);
	  UNLOAD_FLAG (m_bHaus1, AFF_HAUS1);
	  UNLOAD_FLAG (m_bHide, AFF_HIDE);
	  UNLOAD_FLAG (m_bHold, AFF_HOLD);
	  UNLOAD_FLAG (m_bIceShield, AFF_ICESHIELD);
	  UNLOAD_FLAG (m_bInfraRed, AFF_INFRARED);
	  UNLOAD_FLAG (m_bParalysis, AFF_PARALYSIS);
	  UNLOAD_FLAG (m_bPassDoor, AFF_PASS_DOOR);
	  UNLOAD_FLAG (m_bPoison, AFF_POISON);
	  UNLOAD_FLAG (m_bPossess, AFF_POSSESS);
	  UNLOAD_FLAG (m_bProtect, AFF_PROTECT);
	  UNLOAD_FLAG (m_bSanctuary, AFF_SANCTUARY);
	  UNLOAD_FLAG (m_bScrying, AFF_SCRYING);
	  UNLOAD_FLAG (m_bShockShield, AFF_SHOCKSHIELD);
	  UNLOAD_FLAG (m_bSleep, AFF_SLEEP);
	  UNLOAD_FLAG (m_bSneak, AFF_SNEAK);
	  UNLOAD_FLAG (m_bTrueSight, AFF_TRUESIGHT);

     if (bChanged)
       m_mob->m_pDoc->SetModifiedFlag ();

    }

}


BEGIN_MESSAGE_MAP(CMobileAffectPage, CDialog)
	//{{AFX_MSG_MAP(CMobileAffectPage)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMobileAffectPage message handlers