#include "The Forging.h"
#include "..\..\Functions.cpp"
#include "..\..\clientviews\NewPaintMapFuntions.cpp"
BOOL GameInitialize(HINSTANCE hInst)
{
	//Only initialize Game Engine stuff here...All other initialization is for GameStart()
	_pEngine = new Engine(hInst, TEXT("Phoenix"), TEXT("Phoenix"), NULL, NULL, _Style, 
		_EngineWidth, _EngineHeight, _EngineCommand);
	if(_pEngine == NULL) return FALSE; else { _pEngine->SetFrameRate(int(_FPS)); _pEngine->SetIsGame(true); }
	return TRUE;
}
void GameStart(HWND hWin)
{
	int x = 0, y = 0, RandNum = 0;			//Variables to be used in loops, number generation, tests, etc...
	int i = 0;								//iterator for loops - M. White 30 June, 2019

	string			variableFileName;
	string			tmpString;
	string			txtErrorMsg;			//For error messages during startup...

	Avatar			locAvatar;

	//TEMP ASSIGNMENT SYSTEM, MODIFY LATER - M. White 15 April, 2019
	_MaxPortraits	= 26;					// (Avatar portraits)

	//Flexible lines in a list, number to show control - M. White 17 May, 2019
	_NumLinesToList	= 16;
	_XMouse			= 0;//resetting the mouse variables...
	_YMouse			= 0;
	//Seed the random generator - M. White  April, 2019
	srand ((unsigned int)time(&_timer));

	GetClientRect(hWin, &_cliRect);			//Get the RECT info so we can test screen size
	_EngineWidth		= _cliRect.right;	//Assign the size to the global variable...
	_EngineHeight		= _cliRect.bottom;	//Assign the size to the global variable...
	int StartX = int(_EngineWidth  * 0.03);
	int StartY = int(_EngineHeight * 0.05);

	//Dimensions of the Play Window need to be set per game - M. White 23 March, 2019
	_PercentToUseWidth	= 0.75;
	_PercentToUseHeigh	= 0.89;

	//Test the variables to know which scale we will assign..
	if		(_EngineHeight >= 900)
	{
		_MonitorCat			= 2;		_bmpY				= 48;
		_TileW_Sqr			= 48;		_TileH_Sqr			= 48;
		_TileW_SqI			= 48;		_TileH_SqI			= 48;
		_TileW_Iso			= 48;		_TileH_Iso			= 24;
		_TileW_Hex01		= 74;		_TileH_Hex01		= 46;
		_TileW_Hex02		= 48;		_TileH_Hex02		= 46;
	}
	else if	(_EngineHeight >= 700)
	{
		_MonitorCat			= 1;		_bmpY				= 16;
		_TileW_Sqr			= 32;		_TileH_Sqr			= 32;
		_TileW_SqI			= 32;		_TileH_SqI			= 32;
		_TileW_Iso			= 32;		_TileH_Iso			= 16;
		_TileW_Hex01		= 50;		_TileH_Hex01		= 30;
		_TileW_Hex02		= 32;		_TileH_Hex02		= 32;
	}
	else if (_EngineHeight >= 599)	//Really Small Screens...and old!
	{
		_MonitorCat			= 0;		_bmpY				= 0;
		_TileW_Sqr			= 16;		_TileH_Sqr			= 16;
		_TileW_SqI			= 16;		_TileH_SqI			= 16;
		_TileW_Iso			= 16;		_TileH_Iso			= 8;
		_TileW_Hex01		= 26;		_TileH_Hex01		= 14;
		_TileW_Hex02		= 1;		_TileH_Hex02		= 1;
	}
	else
	{
		//Impossibly small...get rid of them!
		MessageBox(NULL, "Your monitor is too small.", "Error", MB_OK);
		GameEnd(); PostQuitMessage(0); return;//just in case there's lag...
	}
	//Setting up play screen map
	{
		//Instantiate an array of Play Windows - M. White 23 March, 2019
		_PlayWin = new NewPlayWindow[TOTAL_MAP_TYPES];
        {
			//Set up Square
			//Assign Type before setting up the Play Window - M. White 23 March, 2019
			_MAPVIEW = SQR_Map;
			//Find out what the maximum number of Columns and Rows the Client Rect can hold - M. White 23 March, 2019
			_MaxColsSQR_Map = int(_EngineWidth  / _TileW_Sqr);
			_MaxRowsSQR_Map = int(_EngineHeight / _TileH_Sqr);
			//Preset variables before Calculations get called - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetType(_MAPVIEW);
			_PlayWin[_MAPVIEW].SetTileW(_TileW_Sqr);
			_PlayWin[_MAPVIEW].SetTileH(_TileH_Sqr);
			//Set the Basics, and SetBasics() calls Calculations - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetBasics(StartX, StartY, int(_EngineWidth  * _PercentToUseWidth), 
				int(_EngineHeight * _PercentToUseHeigh), _MAPVIEW);
		}
		{
			//Set up SqrMetric
			_MAPVIEW = DIA_Map;
			_MaxColsDIA_Map = int(_EngineWidth  / _TileW_SqI);
			_MaxRowsDIA_Map = int(_EngineHeight / int(_TileH_SqI / 2));//Makes more by dividing - M. White 24 March, 2019
			//Preset variables before Calculations is called - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetType(_MAPVIEW);
			_PlayWin[_MAPVIEW].SetTileW(_TileW_SqI);
			_PlayWin[_MAPVIEW].SetTileH(_TileH_SqI);
			//Set the Basics, and SetBasics() calls Calculations - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetBasics(StartX, StartY, int(_EngineWidth  * _PercentToUseWidth), 
				int(_EngineHeight * _PercentToUseHeigh), _MAPVIEW);
		}
		{
			//Set up IsoMetric
			_MAPVIEW = RHO_Map;
			_MaxColsRHO_Map = int(_EngineWidth  / _TileW_Iso);
			_MaxRowsRHO_Map = int(_EngineHeight / int(_TileH_Iso / 2));//Makes more by dividing - M. White 24 March, 2019
			//Preset variables before Calculations is called - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetType(_MAPVIEW);
			_PlayWin[_MAPVIEW].SetTileW(_TileW_Iso);
			_PlayWin[_MAPVIEW].SetTileH(_TileH_Iso);
			//Set the Basics, and SetBasics() calls Calculations - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetBasics(StartX, StartY, int(_EngineWidth  * _PercentToUseWidth), 
				int(_EngineHeight * _PercentToUseHeigh),_MAPVIEW);
		}
		{
			//Set up HexMetric 01
			_MAPVIEW = HEX_Map01;
			_MaxColsHEX_Map01 = int(_EngineWidth  / _TileW_Hex01);
			_MaxRowsHEX_Map01 = int(_EngineHeight / int(_TileH_Hex01 / 2));//Makes more by dividing - M. White 24 March, 2019
			//Preset variables before Calculations is called - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetType(_MAPVIEW);
			_PlayWin[_MAPVIEW].SetTileW(_TileW_Hex01);
			_PlayWin[_MAPVIEW].SetTileH(_TileH_Hex01);
			//Set the Basics, and SetBasics() calls Calculations - M. White 23 March, 2019
			_PlayWin[_MAPVIEW].SetBasics(StartX, StartY, int(_EngineWidth  * _PercentToUseWidth), 
				int(_EngineHeight * _PercentToUseHeigh), _MAPVIEW);
		}
		{
			//Set up HexMetric 02 - FUTURE DEVELOPMENT
		//	_MAPVIEW = HEX_Map02;
		//	_MaxColsHEX_Map02 = int(_EngineWidth  / _TileW_Hex02);
		//	_MaxRowsHEX_Map02 = int(_EngineHeight / int(_TileH_Hex02 / 2));//Makes more by dividing - M. White 24 March, 2019
			//Preset variables before Calculations is called - M. White 23 March, 2019
		//	_PlayWin[_MAPVIEW].SetType(_MAPVIEW);
		//	_PlayWin[_MAPVIEW].SetTileW(_TileW_Hex02);
		//	_PlayWin[_MAPVIEW].SetTileH(_TileH_Hex02);
		}
		//Assign Avatar location from current Play Window version
		//before going into active game - M. White 23 March, 2019
		_MAPVIEW		= HEX_Map01;
		_TileWalkerX	= _PlayWin[_MAPVIEW].GetCentCol();
		_TileWalkerY	= _PlayWin[_MAPVIEW].GetCentRow();
	}
	//This Game is, or is-not a...
	_IsFloatingMap	= false;

	//Initial setup of test values - M. White 31 March, 2019
	_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
	_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
	_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
	_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();

	//Get Mouse Pixel-Perfect Test data to target tiles - M. White 25 March, 2019
	LoadCursorPixelTestData(_MAPVIEW, _PlayWin[_MAPVIEW].GetTileW());

	_WhatCommandCursor = 0;

	RandomTactMap();//Clear out map data so there's no garbage in RAM
	GetTacticalMapData(_MAPVIEW);

	//Create the initial button(s) - M. White 2 April, 2019
	_NumBtns = 0;
	CreateButtons(phSplashScrn);

	//Special Consisderation--------------------------------------------------------//
	_OffScrnDC	= CreateCompatibleDC(GetDC(hWin));									//
	_OffScrnBmp	= CreateCompatibleBitmap(GetDC(hWin), _EngineWidth, _EngineHeight);	//
	SelectObject(_OffScrnDC, _OffScrnBmp);											//
	//------------------------------------------------------------------------------//

	HDC tempDC = GetDC(hWin);
	//Assign game-specific graphics...
	_bmpRedShip			= new Bitmap(tempDC, "BMP\\ShipHex.bmp");
	_bmpSpcEff			= new Bitmap(tempDC, "BMP\\SpecialEffects.bmp");
	_bmpCompFace		= new Bitmap(tempDC, "BMP\\compassfacings.bmp");
	_bmpCursors			= new Bitmap(tempDC, "BMP\\coursors.bmp");
	_bmpBG				= new Bitmap(tempDC, "BMP\\BG0.bmp");
		_bgWidth = _bmpBG->GetWidth();
		_bgHeigh = _bmpBG->GetHeight();
	_bmpTrim	= new Bitmap[3];
		_bmpTrim[0].Create(tempDC, "BMP\\TrimCorner.bmp");
		_bmpTrim[1].Create(tempDC, "BMP\\TrimVertical.bmp");
		_bmpTrim[2].Create(tempDC, "BMP\\TrimHorizontal.bmp");
	//Creating the bmp for the Tiles...
	_bmpTiles			= new Bitmap[TOTAL_MAP_TYPES];
	_bmpCoastalImgs		= new Bitmap[TOTAL_MAP_TYPES];
	_bmpMobImages		= new Bitmap[MAXMONS];
	_bmpMobImagesMap	= new Bitmap[MAXMONS];

	locAvatar.Reset();
	//Picking which Tile set to use according to monitor size
	switch(_MonitorCat)
	{
	case 2:	_bmpTiles[SQR_Map].			Create(tempDC, "BMP\\sqr\\sqrtile48.bmp");
			_bmpTiles[DIA_Map].			Create(tempDC, "BMP\\dia\\sqrisotile48.bmp");
			_bmpTiles[RHO_Map].			Create(tempDC, "BMP\\iso\\isotile48.bmp");
			_bmpTiles[HEX_Map01].		Create(tempDC, "BMP\\hex\\hextile48.bmp");
			_bmpCoastalImgs[SQR_Map].	Create(tempDC, "BMP\\sqr\\sqrtile48coastal.bmp");
			_bmpCoastalImgs[DIA_Map].	Create(tempDC, "BMP\\dia\\sqrisotile48coastal.bmp");
			_bmpCoastalImgs[RHO_Map].	Create(tempDC, "BMP\\iso\\isotile48coastal.bmp");
			_bmpCoastalImgs[HEX_Map01].	Create(tempDC, "BMP\\hex\\hextile48coastal.bmp");
			_bmpMultiUse				= new Bitmap(tempDC, "BMP\\splash48.bmp");
			_bmpButtons					= new Bitmap(tempDC, "BMP\\buttons48.bmp");
			_bmpSQR						= new Bitmap(tempDC, "BMP\\backdrop48.bmp");
			_bmpTrimmed					= new Bitmap(tempDC, "BMP\\trimmedbox48.bmp");
			_bmpRiverRoads				= new Bitmap(tempDC, "BMP\\hex\\riversroad48.bmp");
			_walls002					= new Bitmap(tempDC, "BMP\\sqr\\sqrtile48walls002.bmp");
			_bmpPortraits				= new Bitmap(tempDC, "BMP\\port\\portraits48.bmp");
			_bmpPathLinks				= new Bitmap(tempDC, "BMP\\sqr\\pathsymbols48.bmp");
			_bmpFOW						= new Bitmap(tempDC, "BMP\\sqr\\dungeon48FOW.bmp");
			for(i = 0; i < MAXMONS; i++)
			{
				locAvatar.SetRace(i);

				variableFileName = "BMP\\mobs\\48\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += ".bmp"; 
				_bmpMobImages[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

				variableFileName = "BMP\\mobs\\48\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += "_map.bmp";
				_bmpMobImagesMap[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

			}
			/*
			Replaced the following code with the loop above this comment...

			_bmpMobImages[rBat_Common].					Create(tempDC, "BMP\\mobs\\48\\rBat_Common.bmp");
			_bmpMobImages[rBhut].						Create(tempDC, "BMP\\mobs\\48\\rBhut.bmp");
			_bmpMobImages[rBugbear_Normal].				Create(tempDC, "BMP\\mobs\\48\\rBugbear_Normal.bmp");
			_bmpMobImages[rBugbear_Young].				Create(tempDC, "BMP\\mobs\\48\\rBugbear_Young.bmp");
			_bmpMobImages[rBugbear_Guard].				Create(tempDC, "BMP\\mobs\\48\\rBugbear_Guard.bmp");
			_bmpMobImages[rBugbear_Shaman].				Create(tempDC, "BMP\\mobs\\48\\rBugbear_Shaman.bmp");
			_bmpMobImages[rBulette].					Create(tempDC, "BMP\\mobs\\48\\rBulette.bmp");
			_bmpMobImages[rHyena].						Create(tempDC, "BMP\\mobs\\48\\rHyena.bmp");
			_bmpMobImages[rFrog_Giant03].				Create(tempDC, "BMP\\mobs\\48\\rFrog_Giant03.bmp");
			_bmpMobImages[rFungus_Violet].				Create(tempDC, "BMP\\mobs\\48\\rFungus_Violet.bmp");
			_bmpMobImages[rFungus_Shrieker].			Create(tempDC, "BMP\\mobs\\48\\rFungus_Shrieker.bmp");
			_bmpMobImages[rFungus_GasSpore].			Create(tempDC, "BMP\\mobs\\48\\rFungus_GasSpore.bmp");
			_bmpMobImages[rGnoll_Normal].				Create(tempDC, "BMP\\mobs\\48\\rGnoll_Normal.bmp");
			_bmpMobImages[rGnoll_Guard].				Create(tempDC, "BMP\\mobs\\48\\rGnoll_Guard.bmp");
			_bmpMobImages[rGnoll_Flind].				Create(tempDC, "BMP\\mobs\\48\\rGnoll_Flind.bmp");
			_bmpMobImages[rGnome_Rock].					Create(tempDC, "BMP\\mobs\\48\\rGnome_Rock.bmp");
			_bmpMobImages[rGoblin_Normal].				Create(tempDC, "BMP\\mobs\\48\\rGoblin_Normal.bmp");
			_bmpMobImages[rGoblin_SubChief].			Create(tempDC, "BMP\\mobs\\48\\rGoblin_SubChief.bmp");
			_bmpMobImages[rGoblin_Chief].				Create(tempDC, "BMP\\mobs\\48\\rGoblin_Chief.bmp");
			_bmpMobImages[rHalfling_Hairfoot].			Create(tempDC, "BMP\\mobs\\48\\rHalfling_Hairfoot.bmp");
			_bmpMobImages[rHarpy].						Create(tempDC, "BMP\\mobs\\48\\rHarpy.bmp");
			_bmpMobImages[rHobgoblin_Normal].			Create(tempDC, "BMP\\mobs\\48\\rHobgoblin_Normal.bmp");
			_bmpMobImages[rHobgoblin_Stripling].		Create(tempDC, "BMP\\mobs\\48\\rHobgoblin_Stripling.bmp");
			_bmpMobImages[rHorse_Draft].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Draft.bmp");
			_bmpMobImages[rHorse_HeavyWar].				Create(tempDC, "BMP\\mobs\\48\\rHorse_HeavyWar.bmp");
			_bmpMobImages[rHorse_MediumWar].			Create(tempDC, "BMP\\mobs\\48\\rHorse_MediumWar.bmp");
			_bmpMobImages[rHorse_LightWar].				Create(tempDC, "BMP\\mobs\\48\\rHorse_LightWar.bmp");
			_bmpMobImages[rHorse_Pony].					Create(tempDC, "BMP\\mobs\\48\\rHorse_Pony.bmp");
			_bmpMobImages[rHorse_Wild].					Create(tempDC, "BMP\\mobs\\48\\rHorse_Wild.bmp");
			_bmpMobImages[rHorse_Riding].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Riding.bmp");
			_bmpMobImages[rHorse_Mule].					Create(tempDC, "BMP\\mobs\\48\\rHorse_Mule.bmp");
			_bmpMobImages[rHuman].						Create(tempDC, "BMP\\mobs\\48\\rHuman.bmp");
			_bmpMobImages[rKobold_Normal].				Create(tempDC, "BMP\\mobs\\48\\rKobold_Normal.bmp");
			_bmpMobImages[rKobold_Guard].				Create(tempDC, "BMP\\mobs\\48\\rKobold_Guard.bmp");
			_bmpMobImages[rKobold_Chief].				Create(tempDC, "BMP\\mobs\\48\\rKobold_Chief.bmp");
			_bmpMobImages[rLeucrotta].					Create(tempDC, "BMP\\mobs\\48\\rLeucrotta.bmp");
			_bmpMobImages[rLizardMan_Normal].			Create(tempDC, "BMP\\mobs\\48\\rLizardMan_Normal.bmp");
			_bmpMobImages[rLizardMan_Juve].				Create(tempDC, "BMP\\mobs\\48\\rLizardMan_Juve.bmp");
			_bmpMobImages[rLurker_Normal].				Create(tempDC, "BMP\\mobs\\48\\rLurker_Normal.bmp");
			_bmpMobImages[rLycanthrope_Wererat].		Create(tempDC, "BMP\\mobs\\48\\rLycanthrope_Wererat.bmp");
			_bmpMobImages[rMammalHerd_Cattle01].		Create(tempDC, "BMP\\mobs\\48\\rMammalHerd_Cattle01.bmp");
			_bmpMobImages[rMedusa_Normal].				Create(tempDC, "BMP\\mobs\\48\\rMedusa_Normal.bmp");
			_bmpMobImages[rMinotaur_Normal].			Create(tempDC, "BMP\\mobs\\48\\rMinotaur_Normal.bmp");
			_bmpMobImages[rMold_Yellow].				Create(tempDC, "BMP\\mobs\\48\\rMold_Yellow.bmp");
			_bmpMobImages[rMummy_Cat].					Create(tempDC, "BMP\\mobs\\48\\rMummy_Cat.bmp");
			_bmpMobImages[rOSJ_GelatinousCube].			Create(tempDC, "BMP\\mobs\\48\\rOSJ_GelatinousCube.bmp");
			_bmpMobImages[rOSJ_GreenSlime].				Create(tempDC, "BMP\\mobs\\48\\rOSJ_GreenSlime.bmp");
			_bmpMobImages[rOSJ_SlitheringTracker].		Create(tempDC, "BMP\\mobs\\48\\rOSJ_SlitheringTracker.bmp");
			_bmpMobImages[rOtyugh_Normal08].			Create(tempDC, "BMP\\mobs\\48\\rOtyugh_Normal08.bmp");
			_bmpMobImages[rOwlbear].					Create(tempDC, "BMP\\mobs\\48\\rOwlbear.bmp");
			_bmpMobImages[rPlantI_ShamblingMound08].	Create(tempDC, "BMP\\mobs\\48\\rPlantI_ShamblingMound08.bmp");
			_bmpMobImages[rRat_Normal].					Create(tempDC, "BMP\\mobs\\48\\rRat_Normal.bmp");
			_bmpMobImages[rRat_Giant].					Create(tempDC, "BMP\\mobs\\48\\rRat_Giant.bmp");
			_bmpMobImages[rRustMonster].				Create(tempDC, "BMP\\mobs\\48\\rRustMonster.bmp");
			_bmpMobImages[rShadow].						Create(tempDC, "BMP\\mobs\\48\\rShadow.bmp");
			_bmpMobImages[rSkeleton_Normal].			Create(tempDC, "BMP\\mobs\\48\\rSkeleton_Normal.bmp");
			_bmpMobImages[rStirge].						Create(tempDC, "BMP\\mobs\\48\\rStirge.bmp");
			_bmpMobImages[rSpider_Large].				Create(tempDC, "BMP\\mobs\\48\\rSpider_Large.bmp");
			_bmpMobImages[rSpider_Wolf].				Create(tempDC, "BMP\\mobs\\48\\rSpider_Wolf.bmp");
			_bmpMobImages[rTroll_Normal].				Create(tempDC, "BMP\\mobs\\32\\rTroll_Normal.bmp");
			_bmpMobImages[rWill_O_Wisp].				Create(tempDC, "BMP\\mobs\\48\\rWill_O_Wisp.bmp");
			_bmpMobImages[rWolf_Worg].					Create(tempDC, "BMP\\mobs\\48\\rWolf_Worg.bmp");
			_bmpMobImages[rWorm_RotGrub].				Create(tempDC, "BMP\\mobs\\48\\rWorm_RotGrub.bmp");
			_bmpMobImages[rZombie_Common].				Create(tempDC, "BMP\\mobs\\48\\rZombie_Common.bmp");

			_bmpMobImagesMap[rBat_Common].				Create(tempDC, "BMP\\mobs\\48\\rBat_Common_map.bmp");
			_bmpMobImagesMap[rBhut].					Create(tempDC, "BMP\\mobs\\48\\rBhut_map.bmp");
			_bmpMobImagesMap[rBugbear_Normal].			Create(tempDC, "BMP\\mobs\\48\\rBugbear_Normal_map.bmp");
			_bmpMobImagesMap[rBugbear_Young].			Create(tempDC, "BMP\\mobs\\48\\rBugbear_Young_map.bmp");
			_bmpMobImagesMap[rBugbear_Guard].			Create(tempDC, "BMP\\mobs\\48\\rBugbear_Guard_map.bmp");
			_bmpMobImagesMap[rBugbear_Shaman].			Create(tempDC, "BMP\\mobs\\48\\rBugbear_Shaman_map.bmp");
			_bmpMobImagesMap[rBulette].					Create(tempDC, "BMP\\mobs\\48\\rBulette_map.bmp");
			_bmpMobImagesMap[rHyena].					Create(tempDC, "BMP\\mobs\\48\\rHyena_map.bmp");
			_bmpMobImagesMap[rFrog_Giant03].			Create(tempDC, "BMP\\mobs\\48\\rFrog_Giant03_map.bmp");
			_bmpMobImagesMap[rFungus_Violet].			Create(tempDC, "BMP\\mobs\\48\\rFungus_Violet_map.bmp");
			_bmpMobImagesMap[rFungus_Shrieker].			Create(tempDC, "BMP\\mobs\\48\\rFungus_Shrieker_map.bmp");
			_bmpMobImagesMap[rFungus_GasSpore].			Create(tempDC, "BMP\\mobs\\48\\rFungus_GasSpore_map.bmp");
			_bmpMobImagesMap[rGnoll_Normal].			Create(tempDC, "BMP\\mobs\\48\\rGnoll_Normal_map.bmp");
			_bmpMobImagesMap[rGnoll_Guard].				Create(tempDC, "BMP\\mobs\\48\\rGnoll_Guard_map.bmp");
			_bmpMobImagesMap[rGnoll_Flind].				Create(tempDC, "BMP\\mobs\\48\\rGnoll_Flind_map.bmp");
			_bmpMobImagesMap[rGnome_Rock].				Create(tempDC, "BMP\\mobs\\48\\rGnome_Rock_map.bmp");
			_bmpMobImagesMap[rGoblin_Normal].			Create(tempDC, "BMP\\mobs\\48\\rGoblin_Normal_map.bmp");
			_bmpMobImagesMap[rGoblin_SubChief].			Create(tempDC, "BMP\\mobs\\48\\rGoblin_SubChief_map.bmp");
			_bmpMobImagesMap[rGoblin_Chief].			Create(tempDC, "BMP\\mobs\\48\\rGoblin_Chief_map.bmp");
			_bmpMobImagesMap[rHalfling_Hairfoot].		Create(tempDC, "BMP\\mobs\\48\\rHalfling_Hairfoot_map.bmp");
			_bmpMobImagesMap[rHarpy].					Create(tempDC, "BMP\\mobs\\48\\rHarpy_map.bmp");
			_bmpMobImagesMap[rHobgoblin_Normal].		Create(tempDC, "BMP\\mobs\\48\\rHobgoblin_Normal_map.bmp");
			_bmpMobImagesMap[rHobgoblin_Stripling].		Create(tempDC, "BMP\\mobs\\48\\rHobgoblin_Stripling_map.bmp");
			_bmpMobImagesMap[rHorse_Draft].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Draft_map.bmp");
			_bmpMobImagesMap[rHorse_HeavyWar].			Create(tempDC, "BMP\\mobs\\48\\rHorse_HeavyWar_map.bmp");
			_bmpMobImagesMap[rHorse_MediumWar].			Create(tempDC, "BMP\\mobs\\48\\rHorse_MediumWar_map.bmp");
			_bmpMobImagesMap[rHorse_LightWar].			Create(tempDC, "BMP\\mobs\\48\\rHorse_LightWar_map.bmp");
			_bmpMobImagesMap[rHorse_Pony].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Pony_map.bmp");
			_bmpMobImagesMap[rHorse_Wild].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Wild_map.bmp");
			_bmpMobImagesMap[rHorse_Riding].			Create(tempDC, "BMP\\mobs\\48\\rHorse_Riding_map.bmp");
			_bmpMobImagesMap[rHorse_Mule].				Create(tempDC, "BMP\\mobs\\48\\rHorse_Mule_map.bmp");
			_bmpMobImagesMap[rHuman].					Create(tempDC, "BMP\\mobs\\48\\rHuman_map.bmp");
			_bmpMobImagesMap[rKobold_Normal].			Create(tempDC, "BMP\\mobs\\48\\rKobold_Normal_map.bmp");
			_bmpMobImagesMap[rKobold_Guard].			Create(tempDC, "BMP\\mobs\\48\\rKobold_Guard_map.bmp");
			_bmpMobImagesMap[rKobold_Chief].			Create(tempDC, "BMP\\mobs\\48\\rKobold_Chief_map.bmp");
			_bmpMobImagesMap[rLeucrotta].				Create(tempDC, "BMP\\mobs\\48\\rLeucrotta_map.bmp");
			_bmpMobImagesMap[rLizardMan_Normal].		Create(tempDC, "BMP\\mobs\\48\\rLizardMan_Normal_map.bmp");
			_bmpMobImagesMap[rLizardMan_Juve].			Create(tempDC, "BMP\\mobs\\48\\rLizardMan_Juve_map.bmp");
			_bmpMobImagesMap[rLurker_Normal].			Create(tempDC, "BMP\\mobs\\48\\rLurker_Normal_map.bmp");
			_bmpMobImagesMap[rLycanthrope_Wererat].		Create(tempDC, "BMP\\mobs\\48\\rLycanthrope_Wererat_map.bmp");
			_bmpMobImagesMap[rMammalHerd_Cattle01].		Create(tempDC, "BMP\\mobs\\48\\rMammalHerd_Cattle01_map.bmp");
			_bmpMobImagesMap[rMedusa_Normal].			Create(tempDC, "BMP\\mobs\\48\\rMedusa_Normal_map.bmp");
			_bmpMobImagesMap[rMinotaur_Normal].			Create(tempDC, "BMP\\mobs\\48\\rMinotaur_Normal_map.bmp");
			_bmpMobImagesMap[rMold_Yellow].				Create(tempDC, "BMP\\mobs\\48\\rMold_Yellow_map.bmp");
			_bmpMobImagesMap[rMummy_Cat].				Create(tempDC, "BMP\\mobs\\48\\rMummy_Cat_map.bmp");
			_bmpMobImagesMap[rOSJ_GelatinousCube].		Create(tempDC, "BMP\\mobs\\48\\rOSJ_GelatinousCube_map.bmp");
			_bmpMobImagesMap[rOSJ_GreenSlime].			Create(tempDC, "BMP\\mobs\\48\\rOSJ_GreenSlime_map.bmp");
			_bmpMobImagesMap[rOSJ_SlitheringTracker].	Create(tempDC, "BMP\\mobs\\48\\rOSJ_SlitheringTracker_map.bmp");
			_bmpMobImagesMap[rOtyugh_Normal08].			Create(tempDC, "BMP\\mobs\\48\\rOtyugh_Normal08_map.bmp");
			_bmpMobImagesMap[rOwlbear].					Create(tempDC, "BMP\\mobs\\48\\rOwlbear_map.bmp");
			_bmpMobImagesMap[rPlantI_ShamblingMound08].	Create(tempDC, "BMP\\mobs\\48\\rPlantI_ShamblingMound08_map.bmp");
			_bmpMobImagesMap[rRat_Normal].				Create(tempDC, "BMP\\mobs\\48\\rRat_Normal_map.bmp");
			_bmpMobImagesMap[rRat_Giant].				Create(tempDC, "BMP\\mobs\\48\\rRat_Giant_map.bmp");
			_bmpMobImagesMap[rRustMonster].				Create(tempDC, "BMP\\mobs\\48\\rRustMonster_map.bmp");
			_bmpMobImagesMap[rShadow].					Create(tempDC, "BMP\\mobs\\48\\rShadow_map.bmp");
			_bmpMobImagesMap[rSkeleton_Normal].			Create(tempDC, "BMP\\mobs\\48\\rSkeleton_Normal_map.bmp");
			_bmpMobImagesMap[rStirge].					Create(tempDC, "BMP\\mobs\\48\\rStirge_map.bmp");
			_bmpMobImagesMap[rSpider_Large].			Create(tempDC, "BMP\\mobs\\48\\rSpider_Large_map.bmp");
			_bmpMobImagesMap[rSpider_Wolf].				Create(tempDC, "BMP\\mobs\\48\\rSpider_Wolf_map.bmp");
			_bmpMobImagesMap[rTroll_Normal].			Create(tempDC, "BMP\\mobs\\48\\rTroll_Normal_map.bmp");
			_bmpMobImagesMap[rWill_O_Wisp].				Create(tempDC, "BMP\\mobs\\48\\rWill_O_Wisp_map.bmp");
			_bmpMobImagesMap[rWolf_Worg].				Create(tempDC, "BMP\\mobs\\48\\rWolf_Worg_map.bmp");
			_bmpMobImagesMap[rWorm_RotGrub].			Create(tempDC, "BMP\\mobs\\48\\rWorm_RotGrub_map.bmp");
			_bmpMobImagesMap[rZombie_Common].			Create(tempDC, "BMP\\mobs\\48\\rZombie_Common_map.bmp");
			*/
		//	_bmpMobImages[].				Create(tempDC, "BMP\\mobs\\32\\");
			_bmpAlienSpeak				= new Bitmap(tempDC, "BMP\\mobs\\48\\nullspeak48.bmp");
			_bmpMiniMap					= new Bitmap(tempDC, "BMP\\MiniMap48.0.bmp");
			_PortraitsW = 120;
			_PortraitsH = 177;
			break;
	case 1:	_bmpTiles[SQR_Map].			Create(tempDC, "BMP\\sqr\\sqrtile32.bmp");
			_bmpTiles[DIA_Map].			Create(tempDC, "BMP\\dia\\sqrisotile32.bmp");
			_bmpTiles[RHO_Map].			Create(tempDC, "BMP\\iso\\isotile32.bmp");
			_bmpTiles[HEX_Map01].		Create(tempDC, "BMP\\hex\\hextile32.bmp");
			_bmpCoastalImgs[SQR_Map].	Create(tempDC, "BMP\\sqr\\sqrtile32coastal.bmp");
			_bmpCoastalImgs[DIA_Map].	Create(tempDC, "BMP\\dia\\sqrisotile32coastal.bmp");
			_bmpCoastalImgs[RHO_Map].	Create(tempDC, "BMP\\iso\\isotile32coastal.bmp");
			_bmpCoastalImgs[HEX_Map01].	Create(tempDC, "BMP\\hex\\hextile32coastal.bmp");
			_bmpMultiUse				= new Bitmap(tempDC, "BMP\\splash32.bmp");
			_bmpButtons					= new Bitmap(tempDC, "BMP\\buttons32.bmp");
			_bmpSQR						= new Bitmap(tempDC, "BMP\\backdrop32.bmp");
			_bmpTrimmed					= new Bitmap(tempDC, "BMP\\trimmedbox32.bmp");
			_bmpRiverRoads				= new Bitmap(tempDC, "BMP\\hex\\riversroad32.bmp");
			_walls002					= new Bitmap(tempDC, "BMP\\sqr\\sqrtile32walls002.bmp");
			_bmpPortraits				= new Bitmap(tempDC, "BMP\\port\\portraits32.bmp");
			_bmpPathLinks				= new Bitmap(tempDC, "BMP\\sqr\\pathsymbols32.bmp");
			_bmpFOW						= new Bitmap(tempDC, "BMP\\sqr\\dungeon32FOW.bmp");
			for(i = 0; i < MAXMONS; i++)
			{
				locAvatar.SetRace(i);

				variableFileName = "BMP\\mobs\\32\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += ".bmp"; 
				_bmpMobImages[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

				variableFileName = "BMP\\mobs\\32\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += "_map.bmp";
				_bmpMobImagesMap[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

			}
			_bmpAlienSpeak				= new Bitmap(tempDC, "BMP\\mobs\\32\\nullspeak32.bmp");
			_bmpMiniMap					= new Bitmap(tempDC, "BMP\\MiniMap32.0.bmp");
			_PortraitsW = 80;
			_PortraitsH = 118;
			break;
	case 0:	_bmpTiles[SQR_Map].			Create(tempDC, "BMP\\sqr\\sqrtile16.bmp");
			_bmpTiles[DIA_Map].			Create(tempDC, "BMP\\dia\\sqrisotile16.bmp");
			_bmpTiles[RHO_Map].			Create(tempDC, "BMP\\iso\\isotile16.bmp");
			_bmpTiles[HEX_Map01].		Create(tempDC, "BMP\\hex\\hextile16.bmp");
			_bmpCoastalImgs[SQR_Map].	Create(tempDC, "BMP\\sqr\\bob.bmp");
			_bmpCoastalImgs[DIA_Map].	Create(tempDC, "BMP\\dia\\bob.bmp");
			_bmpCoastalImgs[RHO_Map].	Create(tempDC, "BMP\\iso\\bob.bmp");
			_bmpCoastalImgs[HEX_Map01].	Create(tempDC, "BMP\\hex\\hextile16coastal.bmp");
			_bmpMultiUse				= new Bitmap(tempDC, "BMP\\splash16.bmp");
			_bmpButtons					= new Bitmap(tempDC, "BMP\\buttons16.bmp");
			_bmpSQR						= new Bitmap(tempDC, "BMP\\backdrop16.bmp");
			_bmpTrimmed					= new Bitmap(tempDC, "BMP\\trimmedbox16.bmp");
			_bmpRiverRoads				= new Bitmap(tempDC, "BMP\\hex\\riversroad16.bmp");
			_bmpPortraits				= new Bitmap(tempDC, "BMP\\port\\portraits16.bmp");
			_bmpFOW						= new Bitmap(tempDC, "BMP\\sqr\\dungeon16FOW.bmp");
			for(i = 0; i < MAXMONS; i++)
			{
				locAvatar.SetRace(i);

				variableFileName = "BMP\\mobs\\16\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += ".bmp"; 
				_bmpMobImages[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

				variableFileName = "BMP\\mobs\\16\\";
				tmpString = locAvatar.GetRaceEnumName();
				variableFileName += tmpString;
				variableFileName += "_map.bmp";
				_bmpMobImagesMap[i].Create(tempDC, LPTSTR(variableFileName.c_str()));

			}
			_bmpAlienSpeak				= new Bitmap(tempDC, "BMP\\mobs\\16\\nullspeak32.bmp");
			_bmpMiniMap					= new Bitmap(tempDC, "BMP\\MiniMap16.0.bmp");
			_PortraitsW = 40;
			_PortraitsH = 59;
			break;
	default: break;
	};
	
	_numWallTypes002	= int(_walls002->GetWidth() / _TileW_Sqr);
	_bmpBGParch			= new Bitmap(tempDC, "BMP\\parchbg.bmp");
	_bmpDispersionImg	= new Bitmap(tempDC, "BMP\\dispersions.bmp");
	ReleaseDC(hWin, tempDC);
	
	//These has to be after _bitMap creation - M. White 31 May, 2019
	//Measuring how many image frames there are in the .bmp...
	switch(_MAPVIEW)
	{
	case SQR_Map:
		_numRiverRoadsHori	= int(_bmpRiverRoads->GetWidth() / _TileW_Sqr);
		_numWallTypes002	= int(_walls002->GetWidth() / _TileW_Sqr);
		break;
	case DIA_Map:
		_numRiverRoadsHori	= int(_bmpRiverRoads->GetWidth() / _TileW_SqI);
		_numWallTypes002	= int(_walls002->GetWidth() / _TileW_SqI);
		break;
	case RHO_Map:
		_numRiverRoadsHori	= int(_bmpRiverRoads->GetWidth() / _TileW_Iso);
		_numWallTypes002	= int(_walls002->GetWidth() / _TileW_Iso);
		break;
	case HEX_Map01:
		_numRiverRoadsHori	= int(_bmpRiverRoads->GetWidth() / _TileW_Hex01);
		_numWallTypes002	= int(_walls002->GetWidth() / _TileW_Hex01);
		break;
	case HEX_Map02:
		_numRiverRoadsHori	= int(_bmpRiverRoads->GetWidth() / _TileW_Hex02);
		_numWallTypes002	= int(_walls002->GetWidth() / _TileW_Hex02);
		break;
	}
	_MapLink = new MapLinks(_PlayWin[_MAPVIEW].gRectL(), _PlayWin[_MAPVIEW].gRectT(),
		_PlayWin[_MAPVIEW].gRectR(), _PlayWin[_MAPVIEW].gRectB());

	//Wizard Stuff
	_tmpWizIndex = 0;
	_TheWizard = new Instruction();
	_TheWizard->LoadImages(hWin);
	_TheWizard->Move(0, 0);
	_TheWizard->SetActive(false);

	_ptCursor.x = 0;	//initialize cursor
	_ptCursor.y = 0;

	//Clean/Pre Struct - M. White 11 June, 2019
	ResetIntLinkStruct();

	//Fire this off at start to ensure things get modified...
	_WasMinimized = true;

	//Initializing Base Data - M. White 29 June, 2019
	//Class Basics
	_ClassBasics = new AvClassBasics[cMAX_CLASSES];
	for(i = 0; i < cMAX_CLASSES; i++)
	{
		_ClassBasics[i].ClassName = "";
		for(int y = 0; y < MAX_ClassLevel; y++) _ClassBasics[i].THAC0s[y] = -1;
	}
	{	//Warriors
		_ClassBasics[cFighter].ClassName		= "Fighter";	_ClassBasics[cFighter].THAC0s[0]		= 20;
		_ClassBasics[cFighter].THAC0s[1]		= 20;			_ClassBasics[cFighter].THAC0s[2]		= 19;
		_ClassBasics[cFighter].THAC0s[3]		= 18;			_ClassBasics[cFighter].THAC0s[4]		= 17;
		_ClassBasics[cFighter].THAC0s[5]		= 16;			_ClassBasics[cFighter].THAC0s[6]		= 15;
		_ClassBasics[cFighter].THAC0s[7]		= 14;			_ClassBasics[cFighter].THAC0s[8]		= 13;
		_ClassBasics[cFighter].THAC0s[9]		= 12;			_ClassBasics[cFighter].THAC0s[10]		= 11;
		_ClassBasics[cFighter].THAC0s[11]		= 10;			_ClassBasics[cFighter].THAC0s[12]		= 9;
		_ClassBasics[cFighter].THAC0s[13]		= 8;			_ClassBasics[cFighter].THAC0s[14]		= 7;
		_ClassBasics[cFighter].THAC0s[15]		= 6;			_ClassBasics[cFighter].THAC0s[16]		= 5;
		_ClassBasics[cFighter].THAC0s[17]		= 4;			_ClassBasics[cFighter].THAC0s[18]		= 3;
		_ClassBasics[cFighter].THAC0s[19]		= 2;			_ClassBasics[cFighter].THAC0s[20]		= 1;

		_ClassBasics[cPaladin].ClassName		= "Paladin";	_ClassBasics[cPaladin].THAC0s[0]		= 20;
		_ClassBasics[cPaladin].THAC0s[1]		= 20;			_ClassBasics[cPaladin].THAC0s[2]		= 19;
		_ClassBasics[cPaladin].THAC0s[3]		= 18;			_ClassBasics[cPaladin].THAC0s[4]		= 17;
		_ClassBasics[cPaladin].THAC0s[5]		= 16;			_ClassBasics[cPaladin].THAC0s[6]		= 15;
		_ClassBasics[cPaladin].THAC0s[7]		= 14;			_ClassBasics[cPaladin].THAC0s[8]		= 13;
		_ClassBasics[cPaladin].THAC0s[9]		= 12;			_ClassBasics[cPaladin].THAC0s[10]		= 11;
		_ClassBasics[cPaladin].THAC0s[11]		= 10;			_ClassBasics[cPaladin].THAC0s[12]		= 9;
		_ClassBasics[cPaladin].THAC0s[13]		= 8;			_ClassBasics[cPaladin].THAC0s[14]		= 7;
		_ClassBasics[cPaladin].THAC0s[15]		= 6;			_ClassBasics[cPaladin].THAC0s[16]		= 5;
		_ClassBasics[cPaladin].THAC0s[17]		= 4;			_ClassBasics[cPaladin].THAC0s[18]		= 3;
		_ClassBasics[cPaladin].THAC0s[19]		= 2;			_ClassBasics[cPaladin].THAC0s[20]		= 1;

		_ClassBasics[cRanger].ClassName			= "Ranger";		_ClassBasics[cRanger].THAC0s[0]			= 20;
		_ClassBasics[cRanger].THAC0s[1]			= 20;			_ClassBasics[cRanger].THAC0s[2]			= 19;
		_ClassBasics[cRanger].THAC0s[3]			= 18;			_ClassBasics[cRanger].THAC0s[4]			= 17;
		_ClassBasics[cRanger].THAC0s[5]			= 16;			_ClassBasics[cRanger].THAC0s[6]			= 15;
		_ClassBasics[cRanger].THAC0s[7]			= 14;			_ClassBasics[cRanger].THAC0s[8]			= 13;
		_ClassBasics[cRanger].THAC0s[9]			= 12;			_ClassBasics[cRanger].THAC0s[10]		= 11;
		_ClassBasics[cRanger].THAC0s[11]		= 10;			_ClassBasics[cRanger].THAC0s[12]		= 9;
		_ClassBasics[cRanger].THAC0s[13]		= 8;			_ClassBasics[cRanger].THAC0s[14]		= 7;
		_ClassBasics[cRanger].THAC0s[15]		= 6;			_ClassBasics[cRanger].THAC0s[16]		= 5;
		_ClassBasics[cRanger].THAC0s[17]		= 4;			_ClassBasics[cRanger].THAC0s[18]		= 3;
		_ClassBasics[cRanger].THAC0s[19]		= 2;			_ClassBasics[cRanger].THAC0s[20]		= 1;

		//0 is 0-level start...
		//1 is 1st-level...
		//2 is 2nd-level...
		XPCharts[cFighter][0] = -1000;
		XPCharts[cFighter][1] = 0;
		XPCharts[cFighter][2] = 2000;
		XPCharts[cFighter][3] = 4000;
		XPCharts[cFighter][4] = 8000;
		XPCharts[cFighter][5] = 16000;
		XPCharts[cFighter][6] = 32000;
		XPCharts[cFighter][7] = 64000;
		XPCharts[cFighter][8] = 125000;
		XPCharts[cFighter][9] = 250000;
		XPCharts[cFighter][10] = 500000;
		
		XPCharts[cPaladin][0] = -1125;
		XPCharts[cPaladin][1] = 0;
		XPCharts[cPaladin][2] = 2250;
		XPCharts[cPaladin][3] = 4500;
		XPCharts[cPaladin][4] = 9000;
		XPCharts[cPaladin][5] = 18000;
		XPCharts[cPaladin][6] = 36000;
		XPCharts[cPaladin][7] = 75000;
		XPCharts[cPaladin][8] = 150000;
		XPCharts[cPaladin][9] = 300000;
		XPCharts[cPaladin][10] = 600000;
		
		XPCharts[cRanger][0] = -1125;
		XPCharts[cRanger][1] = 0;
		XPCharts[cRanger][2] = 2250;
		XPCharts[cRanger][3] = 4500;
		XPCharts[cRanger][4] = 9000;
		XPCharts[cRanger][5] = 18000;
		XPCharts[cRanger][6] = 36000;
		XPCharts[cRanger][7] = 75000;
		XPCharts[cRanger][8] = 150000;
		XPCharts[cRanger][9] = 300000;
		XPCharts[cRanger][10] = 600000;
	}
	{	//Mages
		_ClassBasics[cWizard].ClassName			= "Mage";		_ClassBasics[cWizard].THAC0s[0]			= 20;
		_ClassBasics[cWizard].THAC0s[1]			= 20;			_ClassBasics[cWizard].THAC0s[2]			= 20;
		_ClassBasics[cWizard].THAC0s[3]			= 20;			_ClassBasics[cWizard].THAC0s[4]			= 19;
		_ClassBasics[cWizard].THAC0s[5]			= 19;			_ClassBasics[cWizard].THAC0s[6]			= 19;
		_ClassBasics[cWizard].THAC0s[7]			= 18;			_ClassBasics[cWizard].THAC0s[8]			= 18;
		_ClassBasics[cWizard].THAC0s[9]			= 18;			_ClassBasics[cWizard].THAC0s[10]		= 17;
		_ClassBasics[cWizard].THAC0s[11]		= 17;			_ClassBasics[cWizard].THAC0s[12]		= 17;
		_ClassBasics[cWizard].THAC0s[13]		= 16;			_ClassBasics[cWizard].THAC0s[14]		= 16;
		_ClassBasics[cWizard].THAC0s[15]		= 16;			_ClassBasics[cWizard].THAC0s[16]		= 15;
		_ClassBasics[cWizard].THAC0s[17]		= 15;			_ClassBasics[cWizard].THAC0s[18]		= 15;
		_ClassBasics[cWizard].THAC0s[19]		= 14;			_ClassBasics[cWizard].THAC0s[20]		= 14;

		XPCharts[cWizard][0] = -1250;
		XPCharts[cWizard][1] = 0;
		XPCharts[cWizard][2] = 2500;
		XPCharts[cWizard][3] = 5000;
		XPCharts[cWizard][4] = 20000;
		XPCharts[cWizard][5] = 40000;
		XPCharts[cWizard][6] = 60000;
		XPCharts[cWizard][7] = 90000;
		XPCharts[cWizard][8] = 135000;
		XPCharts[cWizard][9] = 250000;
		XPCharts[cWizard][10] = 375000;

		_ClassBasics[cAbjurer].ClassName		= "Abjurer";	_ClassBasics[cAbjurer].THAC0s[0]		= 20;
		_ClassBasics[cAbjurer].THAC0s[1]		= 20;			_ClassBasics[cAbjurer].THAC0s[2]		= 20;
		_ClassBasics[cAbjurer].THAC0s[3]		= 20;			_ClassBasics[cAbjurer].THAC0s[4]		= 19;
		_ClassBasics[cAbjurer].THAC0s[5]		= 19;			_ClassBasics[cAbjurer].THAC0s[6]		= 19;
		_ClassBasics[cAbjurer].THAC0s[7]		= 18;			_ClassBasics[cAbjurer].THAC0s[8]		= 18;
		_ClassBasics[cAbjurer].THAC0s[9]		= 18;			_ClassBasics[cAbjurer].THAC0s[10]		= 17;
		_ClassBasics[cAbjurer].THAC0s[11]		= 17;			_ClassBasics[cAbjurer].THAC0s[12]		= 17;
		_ClassBasics[cAbjurer].THAC0s[13]		= 16;			_ClassBasics[cAbjurer].THAC0s[14]		= 16;
		_ClassBasics[cAbjurer].THAC0s[15]		= 16;			_ClassBasics[cAbjurer].THAC0s[16]		= 15;
		_ClassBasics[cAbjurer].THAC0s[17]		= 15;			_ClassBasics[cAbjurer].THAC0s[18]		= 15;
		_ClassBasics[cAbjurer].THAC0s[19]		= 14;			_ClassBasics[cAbjurer].THAC0s[20]		= 14;

		XPCharts[cAbjurer][0] = -1250;
		XPCharts[cAbjurer][1] = 0;
		XPCharts[cAbjurer][2] = 2500;
		XPCharts[cAbjurer][3] = 5000;
		XPCharts[cAbjurer][4] = 20000;
		XPCharts[cAbjurer][5] = 40000;
		XPCharts[cAbjurer][6] = 60000;
		XPCharts[cAbjurer][7] = 90000;
		XPCharts[cAbjurer][8] = 135000;
		XPCharts[cAbjurer][9] = 250000;
		XPCharts[cAbjurer][10] = 375000;

		_ClassBasics[cTransmuter].ClassName		= "Transmuter";	_ClassBasics[cTransmuter].THAC0s[0]		= 20;
		_ClassBasics[cTransmuter].THAC0s[1]		= 20;			_ClassBasics[cTransmuter].THAC0s[2]		= 20;
		_ClassBasics[cTransmuter].THAC0s[3]		= 20;			_ClassBasics[cTransmuter].THAC0s[4]		= 19;
		_ClassBasics[cTransmuter].THAC0s[5]		= 19;			_ClassBasics[cTransmuter].THAC0s[6]		= 19;
		_ClassBasics[cTransmuter].THAC0s[7]		= 18;			_ClassBasics[cTransmuter].THAC0s[8]		= 18;
		_ClassBasics[cTransmuter].THAC0s[9]		= 18;			_ClassBasics[cTransmuter].THAC0s[10]	= 17;
		_ClassBasics[cTransmuter].THAC0s[11]	= 17;			_ClassBasics[cTransmuter].THAC0s[12]	= 17;
		_ClassBasics[cTransmuter].THAC0s[13]	= 16;			_ClassBasics[cTransmuter].THAC0s[14]	= 16;
		_ClassBasics[cTransmuter].THAC0s[15]	= 16;			_ClassBasics[cTransmuter].THAC0s[16]	= 15;
		_ClassBasics[cTransmuter].THAC0s[17]	= 15;			_ClassBasics[cTransmuter].THAC0s[18]	= 15;
		_ClassBasics[cTransmuter].THAC0s[19]	= 14;			_ClassBasics[cTransmuter].THAC0s[20]	= 14;

		XPCharts[cTransmuter][0] = -1250;
		XPCharts[cTransmuter][1] = 0;
		XPCharts[cTransmuter][2] = 2500;
		XPCharts[cTransmuter][3] = 5000;
		XPCharts[cTransmuter][4] = 20000;
		XPCharts[cTransmuter][5] = 40000;
		XPCharts[cTransmuter][6] = 60000;
		XPCharts[cTransmuter][7] = 90000;
		XPCharts[cTransmuter][8] = 135000;
		XPCharts[cTransmuter][9] = 250000;
		XPCharts[cTransmuter][10] = 375000;

		_ClassBasics[cConjurer].ClassName		= "Conjurer";	_ClassBasics[cConjurer].THAC0s[0]		= 20;
		_ClassBasics[cConjurer].THAC0s[1]		= 20;			_ClassBasics[cConjurer].THAC0s[2]		= 20;
		_ClassBasics[cConjurer].THAC0s[3]		= 20;			_ClassBasics[cConjurer].THAC0s[4]		= 19;
		_ClassBasics[cConjurer].THAC0s[5]		= 19;			_ClassBasics[cConjurer].THAC0s[6]		= 19;
		_ClassBasics[cConjurer].THAC0s[7]		= 18;			_ClassBasics[cConjurer].THAC0s[8]		= 18;
		_ClassBasics[cConjurer].THAC0s[9]		= 18;			_ClassBasics[cConjurer].THAC0s[10]		= 17;
		_ClassBasics[cConjurer].THAC0s[11]		= 17;			_ClassBasics[cConjurer].THAC0s[12]		= 17;
		_ClassBasics[cConjurer].THAC0s[13]		= 16;			_ClassBasics[cConjurer].THAC0s[14]		= 16;
		_ClassBasics[cConjurer].THAC0s[15]		= 16;			_ClassBasics[cConjurer].THAC0s[16]		= 15;
		_ClassBasics[cConjurer].THAC0s[17]		= 15;			_ClassBasics[cConjurer].THAC0s[18]		= 15;
		_ClassBasics[cConjurer].THAC0s[19]		= 14;			_ClassBasics[cConjurer].THAC0s[20]		= 14;

		XPCharts[cConjurer][0] = -1250;
		XPCharts[cConjurer][1] = 0;
		XPCharts[cConjurer][2] = 2500;
		XPCharts[cConjurer][3] = 5000;
		XPCharts[cConjurer][4] = 20000;
		XPCharts[cConjurer][5] = 40000;
		XPCharts[cConjurer][6] = 60000;
		XPCharts[cConjurer][7] = 90000;
		XPCharts[cConjurer][8] = 135000;
		XPCharts[cConjurer][9] = 250000;
		XPCharts[cConjurer][10] = 375000;

		_ClassBasics[cEnchanter].ClassName		= "Enchanter";	_ClassBasics[cEnchanter].THAC0s[0]		= 20;
		_ClassBasics[cEnchanter].THAC0s[1]		= 20;			_ClassBasics[cEnchanter].THAC0s[2]		= 20;
		_ClassBasics[cEnchanter].THAC0s[3]		= 20;			_ClassBasics[cEnchanter].THAC0s[4]		= 19;
		_ClassBasics[cEnchanter].THAC0s[5]		= 19;			_ClassBasics[cEnchanter].THAC0s[6]		= 19;
		_ClassBasics[cEnchanter].THAC0s[7]		= 18;			_ClassBasics[cEnchanter].THAC0s[8]		= 18;
		_ClassBasics[cEnchanter].THAC0s[9]		= 18;			_ClassBasics[cEnchanter].THAC0s[10]		= 17;
		_ClassBasics[cEnchanter].THAC0s[11]		= 17;			_ClassBasics[cEnchanter].THAC0s[12]		= 17;
		_ClassBasics[cEnchanter].THAC0s[13]		= 16;			_ClassBasics[cEnchanter].THAC0s[14]		= 16;
		_ClassBasics[cEnchanter].THAC0s[15]		= 16;			_ClassBasics[cEnchanter].THAC0s[16]		= 15;
		_ClassBasics[cEnchanter].THAC0s[17]		= 15;			_ClassBasics[cEnchanter].THAC0s[18]		= 15;
		_ClassBasics[cEnchanter].THAC0s[19]		= 14;			_ClassBasics[cEnchanter].THAC0s[20]		= 14;

		XPCharts[cEnchanter][0] = -1250;
		XPCharts[cEnchanter][1] = 0;
		XPCharts[cEnchanter][2] = 2500;
		XPCharts[cEnchanter][3] = 5000;
		XPCharts[cEnchanter][4] = 20000;
		XPCharts[cEnchanter][5] = 40000;
		XPCharts[cEnchanter][6] = 60000;
		XPCharts[cEnchanter][7] = 90000;
		XPCharts[cEnchanter][8] = 135000;
		XPCharts[cEnchanter][9] = 250000;
		XPCharts[cEnchanter][10] = 375000;

		_ClassBasics[cDiviner].ClassName		= "Diviner";	_ClassBasics[cDiviner].THAC0s[0]		= 20;
		_ClassBasics[cDiviner].THAC0s[1]		= 20;			_ClassBasics[cDiviner].THAC0s[2]		= 20;
		_ClassBasics[cDiviner].THAC0s[3]		= 20;			_ClassBasics[cDiviner].THAC0s[4]		= 19;
		_ClassBasics[cDiviner].THAC0s[5]		= 19;			_ClassBasics[cDiviner].THAC0s[6]		= 19;
		_ClassBasics[cDiviner].THAC0s[7]		= 18;			_ClassBasics[cDiviner].THAC0s[8]		= 18;
		_ClassBasics[cDiviner].THAC0s[9]		= 18;			_ClassBasics[cDiviner].THAC0s[10]		= 17;
		_ClassBasics[cDiviner].THAC0s[11]		= 17;			_ClassBasics[cDiviner].THAC0s[12]		= 17;
		_ClassBasics[cDiviner].THAC0s[13]		= 16;			_ClassBasics[cDiviner].THAC0s[14]		= 16;
		_ClassBasics[cDiviner].THAC0s[15]		= 16;			_ClassBasics[cDiviner].THAC0s[16]		= 15;
		_ClassBasics[cDiviner].THAC0s[17]		= 15;			_ClassBasics[cDiviner].THAC0s[18]		= 15;
		_ClassBasics[cDiviner].THAC0s[19]		= 14;			_ClassBasics[cDiviner].THAC0s[20]		= 14;

		XPCharts[cDiviner][0] = -1250;
		XPCharts[cDiviner][1] = 0;
		XPCharts[cDiviner][2] = 2500;
		XPCharts[cDiviner][3] = 5000;
		XPCharts[cDiviner][4] = 20000;
		XPCharts[cDiviner][5] = 40000;
		XPCharts[cDiviner][6] = 60000;
		XPCharts[cDiviner][7] = 90000;
		XPCharts[cDiviner][8] = 135000;
		XPCharts[cDiviner][9] = 250000;
		XPCharts[cDiviner][10] = 375000;

		_ClassBasics[cIllusionist].ClassName	= "Illusionist";_ClassBasics[cIllusionist].THAC0s[0]	= 20;
		_ClassBasics[cIllusionist].THAC0s[1]	= 20;			_ClassBasics[cIllusionist].THAC0s[2]	= 20;
		_ClassBasics[cIllusionist].THAC0s[3]	= 20;			_ClassBasics[cIllusionist].THAC0s[4]	= 19;
		_ClassBasics[cIllusionist].THAC0s[5]	= 19;			_ClassBasics[cIllusionist].THAC0s[6]	= 19;
		_ClassBasics[cIllusionist].THAC0s[7]	= 18;			_ClassBasics[cIllusionist].THAC0s[8]	= 18;
		_ClassBasics[cIllusionist].THAC0s[9]	= 18;			_ClassBasics[cIllusionist].THAC0s[10]	= 17;
		_ClassBasics[cIllusionist].THAC0s[11]	= 17;			_ClassBasics[cIllusionist].THAC0s[12]	= 17;
		_ClassBasics[cIllusionist].THAC0s[13]	= 16;			_ClassBasics[cIllusionist].THAC0s[14]	= 16;
		_ClassBasics[cIllusionist].THAC0s[15]	= 16;			_ClassBasics[cIllusionist].THAC0s[16]	= 15;
		_ClassBasics[cIllusionist].THAC0s[17]	= 15;			_ClassBasics[cIllusionist].THAC0s[18]	= 15;
		_ClassBasics[cIllusionist].THAC0s[19]	= 14;			_ClassBasics[cIllusionist].THAC0s[20]	= 14;

		XPCharts[cIllusionist][0] = -1250;
		XPCharts[cIllusionist][1] = 0;
		XPCharts[cIllusionist][2] = 2500;
		XPCharts[cIllusionist][3] = 5000;
		XPCharts[cIllusionist][4] = 20000;
		XPCharts[cIllusionist][5] = 40000;
		XPCharts[cIllusionist][6] = 60000;
		XPCharts[cIllusionist][7] = 90000;
		XPCharts[cIllusionist][8] = 135000;
		XPCharts[cIllusionist][9] = 250000;
		XPCharts[cIllusionist][10] = 375000;

		_ClassBasics[cInvoker].ClassName		= "Invoker";	_ClassBasics[cInvoker].THAC0s[0]		= 20;
		_ClassBasics[cInvoker].THAC0s[1]		= 20;			_ClassBasics[cInvoker].THAC0s[2]		= 20;
		_ClassBasics[cInvoker].THAC0s[3]		= 20;			_ClassBasics[cInvoker].THAC0s[4]		= 19;
		_ClassBasics[cInvoker].THAC0s[5]		= 19;			_ClassBasics[cInvoker].THAC0s[6]		= 19;
		_ClassBasics[cInvoker].THAC0s[7]		= 18;			_ClassBasics[cInvoker].THAC0s[8]		= 18;
		_ClassBasics[cInvoker].THAC0s[9]		= 18;			_ClassBasics[cInvoker].THAC0s[10]		= 17;
		_ClassBasics[cInvoker].THAC0s[11]		= 17;			_ClassBasics[cInvoker].THAC0s[12]		= 17;
		_ClassBasics[cInvoker].THAC0s[13]		= 16;			_ClassBasics[cInvoker].THAC0s[14]		= 16;
		_ClassBasics[cInvoker].THAC0s[15]		= 16;			_ClassBasics[cInvoker].THAC0s[16]		= 15;
		_ClassBasics[cInvoker].THAC0s[17]		= 15;			_ClassBasics[cInvoker].THAC0s[18]		= 15;
		_ClassBasics[cInvoker].THAC0s[19]		= 14;			_ClassBasics[cInvoker].THAC0s[20]		= 14;

		XPCharts[cInvoker][0] = -1250;
		XPCharts[cInvoker][1] = 0;
		XPCharts[cInvoker][2] = 2500;
		XPCharts[cInvoker][3] = 5000;
		XPCharts[cInvoker][4] = 20000;
		XPCharts[cInvoker][5] = 40000;
		XPCharts[cInvoker][6] = 60000;
		XPCharts[cInvoker][7] = 90000;
		XPCharts[cInvoker][8] = 135000;
		XPCharts[cInvoker][9] = 250000;
		XPCharts[cInvoker][10] = 375000;

		_ClassBasics[cNecromancer].ClassName	= "Necromancer";_ClassBasics[cNecromancer].THAC0s[0]	= 20;
		_ClassBasics[cNecromancer].THAC0s[1]	= 20;			_ClassBasics[cNecromancer].THAC0s[2]	= 20;
		_ClassBasics[cNecromancer].THAC0s[3]	= 20;			_ClassBasics[cNecromancer].THAC0s[4]	= 19;
		_ClassBasics[cNecromancer].THAC0s[5]	= 19;			_ClassBasics[cNecromancer].THAC0s[6]	= 19;
		_ClassBasics[cNecromancer].THAC0s[7]	= 18;			_ClassBasics[cNecromancer].THAC0s[8]	= 18;
		_ClassBasics[cNecromancer].THAC0s[9]	= 18;			_ClassBasics[cNecromancer].THAC0s[10]	= 17;
		_ClassBasics[cNecromancer].THAC0s[11]	= 17;			_ClassBasics[cNecromancer].THAC0s[12]	= 17;
		_ClassBasics[cNecromancer].THAC0s[13]	= 16;			_ClassBasics[cNecromancer].THAC0s[14]	= 16;
		_ClassBasics[cNecromancer].THAC0s[15]	= 16;			_ClassBasics[cNecromancer].THAC0s[16]	= 15;
		_ClassBasics[cNecromancer].THAC0s[17]	= 15;			_ClassBasics[cNecromancer].THAC0s[18]	= 15;
		_ClassBasics[cNecromancer].THAC0s[19]	= 14;			_ClassBasics[cNecromancer].THAC0s[20]	= 14;

		XPCharts[cNecromancer][0] = -1250;
		XPCharts[cNecromancer][1] = 0;
		XPCharts[cNecromancer][2] = 2500;
		XPCharts[cNecromancer][3] = 5000;
		XPCharts[cNecromancer][4] = 20000;
		XPCharts[cNecromancer][5] = 40000;
		XPCharts[cNecromancer][6] = 60000;
		XPCharts[cNecromancer][7] = 90000;
		XPCharts[cNecromancer][8] = 135000;
		XPCharts[cNecromancer][9] = 250000;
		XPCharts[cNecromancer][10] = 375000;
	}
	{	//Priests
		_ClassBasics[cCleric].ClassName			= "Cleric";		_ClassBasics[cCleric].THAC0s[0]			= 20;
		_ClassBasics[cCleric].THAC0s[1]			= 20;			_ClassBasics[cCleric].THAC0s[2]			= 20;
		_ClassBasics[cCleric].THAC0s[3]			= 20;			_ClassBasics[cCleric].THAC0s[4]			= 18;
		_ClassBasics[cCleric].THAC0s[5]			= 18;			_ClassBasics[cCleric].THAC0s[6]			= 18;
		_ClassBasics[cCleric].THAC0s[7]			= 16;			_ClassBasics[cCleric].THAC0s[8]			= 16;
		_ClassBasics[cCleric].THAC0s[9]			= 16;			_ClassBasics[cCleric].THAC0s[10]		= 14;
		_ClassBasics[cCleric].THAC0s[11]		= 14;			_ClassBasics[cCleric].THAC0s[12]		= 14;
		_ClassBasics[cCleric].THAC0s[13]		= 12;			_ClassBasics[cCleric].THAC0s[14]		= 12;
		_ClassBasics[cCleric].THAC0s[15]		= 12;			_ClassBasics[cCleric].THAC0s[16]		= 10;
		_ClassBasics[cCleric].THAC0s[17]		= 10;			_ClassBasics[cCleric].THAC0s[18]		= 10;
		_ClassBasics[cCleric].THAC0s[19]		= 8;			_ClassBasics[cCleric].THAC0s[20]		= 8;

		XPCharts[cCleric][0] = -750;
		XPCharts[cCleric][1] = 0;
		XPCharts[cCleric][2] = 1500;
		XPCharts[cCleric][3] = 3000;
		XPCharts[cCleric][4] = 6000;
		XPCharts[cCleric][5] = 13000;
		XPCharts[cCleric][6] = 27500;
		XPCharts[cCleric][7] = 55000;
		XPCharts[cCleric][8] = 110000;
		XPCharts[cCleric][9] = 225000;
		XPCharts[cCleric][10] = 450000;

		_ClassBasics[cDruid].ClassName			= "Druid";		_ClassBasics[cDruid].THAC0s[0]			= 20;
		_ClassBasics[cDruid].THAC0s[1]			= 20;			_ClassBasics[cDruid].THAC0s[2]			= 20;
		_ClassBasics[cDruid].THAC0s[3]			= 20;			_ClassBasics[cDruid].THAC0s[4]			= 18;
		_ClassBasics[cDruid].THAC0s[5]			= 18;			_ClassBasics[cDruid].THAC0s[6]			= 18;
		_ClassBasics[cDruid].THAC0s[7]			= 16;			_ClassBasics[cDruid].THAC0s[8]			= 16;
		_ClassBasics[cDruid].THAC0s[9]			= 16;			_ClassBasics[cDruid].THAC0s[10]			= 14;
		_ClassBasics[cDruid].THAC0s[11]			= 14;			_ClassBasics[cDruid].THAC0s[12]			= 14;
		_ClassBasics[cDruid].THAC0s[13]			= 12;			_ClassBasics[cDruid].THAC0s[14]			= 12;
		_ClassBasics[cDruid].THAC0s[15]			= 12;			_ClassBasics[cDruid].THAC0s[16]			= 10;
		_ClassBasics[cDruid].THAC0s[17]			= 10;			_ClassBasics[cDruid].THAC0s[18]			= 10;
		_ClassBasics[cDruid].THAC0s[19]			= 8;			_ClassBasics[cDruid].THAC0s[20]			= 8;

		XPCharts[cDruid][0] = -1000;
		XPCharts[cDruid][1] = 0;
		XPCharts[cDruid][2] = 2000;
		XPCharts[cDruid][3] = 4000;
		XPCharts[cDruid][4] = 7500;
		XPCharts[cDruid][5] = 12500;
		XPCharts[cDruid][6] = 20000;
		XPCharts[cDruid][7] = 35000;
		XPCharts[cDruid][8] = 60000;
		XPCharts[cDruid][9] = 90000;
		XPCharts[cDruid][10] = 125000;
	}
	{	//Rogues
		_ClassBasics[cThief].ClassName			= "Thief";		_ClassBasics[cThief].THAC0s[0]			= 20;
		_ClassBasics[cThief].THAC0s[1]			= 20;			_ClassBasics[cThief].THAC0s[2]			= 20;
		_ClassBasics[cThief].THAC0s[3]			= 19;			_ClassBasics[cThief].THAC0s[4]			= 19;
		_ClassBasics[cThief].THAC0s[5]			= 18;			_ClassBasics[cThief].THAC0s[6]			= 18;
		_ClassBasics[cThief].THAC0s[7]			= 17;			_ClassBasics[cThief].THAC0s[8]			= 17;
		_ClassBasics[cThief].THAC0s[9]			= 16;			_ClassBasics[cThief].THAC0s[10]			= 16;
		_ClassBasics[cThief].THAC0s[11]			= 15;			_ClassBasics[cThief].THAC0s[12]			= 15;
		_ClassBasics[cThief].THAC0s[13]			= 14;			_ClassBasics[cThief].THAC0s[14]			= 14;
		_ClassBasics[cThief].THAC0s[15]			= 13;			_ClassBasics[cThief].THAC0s[16]			= 13;
		_ClassBasics[cThief].THAC0s[17]			= 12;			_ClassBasics[cThief].THAC0s[18]			= 12;
		_ClassBasics[cThief].THAC0s[19]			= 11;			_ClassBasics[cThief].THAC0s[20]			= 11;

		XPCharts[cThief][0] = -625;
		XPCharts[cThief][1] = 0;
		XPCharts[cThief][2] = 1250;
		XPCharts[cThief][3] = 2500;
		XPCharts[cThief][4] = 5000;
		XPCharts[cThief][5] = 10000;
		XPCharts[cThief][6] = 20000;
		XPCharts[cThief][7] = 40000;
		XPCharts[cThief][8] = 70000;
		XPCharts[cThief][9] = 110000;
		XPCharts[cThief][10] = 160000;

		_ClassBasics[cBard].ClassName			= "Bard";		_ClassBasics[cBard].THAC0s[0]			= 20;
		_ClassBasics[cBard].THAC0s[1]			= 20;			_ClassBasics[cBard].THAC0s[2]			= 20;
		_ClassBasics[cBard].THAC0s[3]			= 19;			_ClassBasics[cBard].THAC0s[4]			= 19;
		_ClassBasics[cBard].THAC0s[5]			= 18;			_ClassBasics[cBard].THAC0s[6]			= 18;
		_ClassBasics[cBard].THAC0s[7]			= 17;			_ClassBasics[cBard].THAC0s[8]			= 17;
		_ClassBasics[cBard].THAC0s[9]			= 16;			_ClassBasics[cBard].THAC0s[10]			= 16;
		_ClassBasics[cBard].THAC0s[11]			= 15;			_ClassBasics[cBard].THAC0s[12]			= 15;
		_ClassBasics[cBard].THAC0s[13]			= 14;			_ClassBasics[cBard].THAC0s[14]			= 14;
		_ClassBasics[cBard].THAC0s[15]			= 13;			_ClassBasics[cBard].THAC0s[16]			= 13;
		_ClassBasics[cBard].THAC0s[17]			= 12;			_ClassBasics[cBard].THAC0s[18]			= 12;

		XPCharts[cBard][0] = -625;
		XPCharts[cBard][1] = 0;
		XPCharts[cBard][2] = 1250;
		XPCharts[cBard][3] = 2500;
		XPCharts[cBard][4] = 5000;
		XPCharts[cBard][5] = 10000;
		XPCharts[cBard][6] = 20000;
		XPCharts[cBard][7] = 40000;
		XPCharts[cBard][8] = 70000;
		XPCharts[cBard][9] = 110000;
		XPCharts[cBard][10] = 160000;

		_ClassBasics[cBard].THAC0s[19]			= 11;			_ClassBasics[cBard].THAC0s[20]			= 11;
		_ClassBasics[cNinja].ClassName			= "Ninja";		_ClassBasics[cNinja].THAC0s[0]			= 20;
		_ClassBasics[cNinja].THAC0s[1]			= 20;			_ClassBasics[cNinja].THAC0s[2]			= 20;
		_ClassBasics[cNinja].THAC0s[3]			= 19;			_ClassBasics[cNinja].THAC0s[4]			= 19;
		_ClassBasics[cNinja].THAC0s[5]			= 18;			_ClassBasics[cNinja].THAC0s[6]			= 18;
		_ClassBasics[cNinja].THAC0s[7]			= 17;			_ClassBasics[cNinja].THAC0s[8]			= 17;
		_ClassBasics[cNinja].THAC0s[9]			= 16;			_ClassBasics[cNinja].THAC0s[10]			= 16;
		_ClassBasics[cNinja].THAC0s[11]			= 15;			_ClassBasics[cNinja].THAC0s[12]			= 15;
		_ClassBasics[cNinja].THAC0s[13]			= 14;			_ClassBasics[cNinja].THAC0s[14]			= 14;
		_ClassBasics[cNinja].THAC0s[15]			= 13;			_ClassBasics[cNinja].THAC0s[16]			= 13;
		_ClassBasics[cNinja].THAC0s[17]			= 12;			_ClassBasics[cNinja].THAC0s[18]			= 12;
		_ClassBasics[cNinja].THAC0s[19]			= 11;			_ClassBasics[cNinja].THAC0s[20]			= 11;

		XPCharts[cNinja][0] = -625;
		XPCharts[cNinja][1] = 0;
		XPCharts[cNinja][2] = 1250;
		XPCharts[cNinja][3] = 2500;
		XPCharts[cNinja][4] = 5000;
		XPCharts[cNinja][5] = 10000;
		XPCharts[cNinja][6] = 20000;
		XPCharts[cNinja][7] = 40000;
		XPCharts[cNinja][8] = 70000;
		XPCharts[cNinja][9] = 110000;
		XPCharts[cNinja][10] = 160000;
	}
	{	//Multi-Classes
		_ClassBasics[cFM].ClassName				= "Fighter / Mage";
		_ClassBasics[cFM].THAC0s[0]				= 20;			_ClassBasics[cFM].THAC0s[1]				= 20;
		_ClassBasics[cFM].THAC0s[2]				= 19;			_ClassBasics[cFM].THAC0s[3]				= 18;
		_ClassBasics[cFM].THAC0s[4]				= 17;			_ClassBasics[cFM].THAC0s[5]				= 16;
		_ClassBasics[cFM].THAC0s[6]				= 15;			_ClassBasics[cFM].THAC0s[7]				= 14;
		_ClassBasics[cFM].THAC0s[8]				= 13;			_ClassBasics[cFM].THAC0s[9]				= 12;
		_ClassBasics[cFM].THAC0s[10]			= 11;			_ClassBasics[cFM].THAC0s[11]			= 10;
		_ClassBasics[cFM].THAC0s[12]			= 9;			_ClassBasics[cFM].THAC0s[13]			= 8;
		_ClassBasics[cFM].THAC0s[14]			= 7;			_ClassBasics[cFM].THAC0s[15]			= 6;
		_ClassBasics[cFM].THAC0s[16]			= 5;			_ClassBasics[cFM].THAC0s[17]			= 4;
		_ClassBasics[cFM].THAC0s[18]			= 3;			_ClassBasics[cFM].THAC0s[19]			= 2;
		_ClassBasics[cFM].THAC0s[20]			= 1;

		_ClassBasics[cFC].ClassName				= "Fighter / Cleric";
		_ClassBasics[cFC].THAC0s[0]				= 20;			_ClassBasics[cFC].THAC0s[1]				= 20;
		_ClassBasics[cFC].THAC0s[2]				= 19;			_ClassBasics[cFC].THAC0s[3]				= 18;
		_ClassBasics[cFC].THAC0s[4]				= 17;			_ClassBasics[cFC].THAC0s[5]				= 16;
		_ClassBasics[cFC].THAC0s[6]				= 15;			_ClassBasics[cFC].THAC0s[7]				= 14;
		_ClassBasics[cFC].THAC0s[8]				= 13;			_ClassBasics[cFC].THAC0s[9]				= 12;
		_ClassBasics[cFC].THAC0s[10]			= 11;			_ClassBasics[cFC].THAC0s[11]			= 10;
		_ClassBasics[cFC].THAC0s[12]			= 9;			_ClassBasics[cFC].THAC0s[13]			= 8;
		_ClassBasics[cFC].THAC0s[14]			= 7;			_ClassBasics[cFC].THAC0s[15]			= 6;
		_ClassBasics[cFC].THAC0s[16]			= 5;			_ClassBasics[cFC].THAC0s[17]			= 4;
		_ClassBasics[cFC].THAC0s[18]			= 3;			_ClassBasics[cFC].THAC0s[19]			= 2;
		_ClassBasics[cFC].THAC0s[20]			= 1;

		_ClassBasics[cFD].ClassName				= "Fighter / Druid";
		_ClassBasics[cFD].THAC0s[0]				= 20;			_ClassBasics[cFD].THAC0s[1]				= 20;
		_ClassBasics[cFD].THAC0s[2]				= 19;			_ClassBasics[cFD].THAC0s[3]				= 18;
		_ClassBasics[cFD].THAC0s[4]				= 17;			_ClassBasics[cFD].THAC0s[5]				= 16;
		_ClassBasics[cFD].THAC0s[6]				= 15;			_ClassBasics[cFD].THAC0s[7]				= 14;
		_ClassBasics[cFD].THAC0s[8]				= 13;			_ClassBasics[cFD].THAC0s[9]				= 12;
		_ClassBasics[cFD].THAC0s[10]			= 11;			_ClassBasics[cFD].THAC0s[11]			= 10;
		_ClassBasics[cFD].THAC0s[12]			= 9;			_ClassBasics[cFD].THAC0s[13]			= 8;
		_ClassBasics[cFD].THAC0s[14]			= 7;			_ClassBasics[cFD].THAC0s[15]			= 6;
		_ClassBasics[cFD].THAC0s[16]			= 5;			_ClassBasics[cFD].THAC0s[17]			= 4;
		_ClassBasics[cFD].THAC0s[18]			= 3;			_ClassBasics[cFD].THAC0s[19]			= 2;
		_ClassBasics[cFD].THAC0s[20]			= 1;

		_ClassBasics[cFT].ClassName				= "Fighter / Thief";
		_ClassBasics[cFT].THAC0s[0]				= 20;			_ClassBasics[cFT].THAC0s[1]				= 20;
		_ClassBasics[cFT].THAC0s[2]				= 19;			_ClassBasics[cFT].THAC0s[3]				= 18;
		_ClassBasics[cFT].THAC0s[4]				= 17;			_ClassBasics[cFT].THAC0s[5]				= 16;
		_ClassBasics[cFT].THAC0s[6]				= 15;			_ClassBasics[cFT].THAC0s[7]				= 14;
		_ClassBasics[cFT].THAC0s[8]				= 13;			_ClassBasics[cFT].THAC0s[9]				= 12;
		_ClassBasics[cFT].THAC0s[10]			= 11;			_ClassBasics[cFT].THAC0s[11]			= 10;
		_ClassBasics[cFT].THAC0s[12]			= 9;			_ClassBasics[cFT].THAC0s[13]			= 8;
		_ClassBasics[cFT].THAC0s[14]			= 7;			_ClassBasics[cFT].THAC0s[15]			= 6;
		_ClassBasics[cFT].THAC0s[16]			= 5;			_ClassBasics[cFT].THAC0s[17]			= 4;
		_ClassBasics[cFT].THAC0s[18]			= 3;			_ClassBasics[cFT].THAC0s[19]			= 2;
		_ClassBasics[cFT].THAC0s[20]			= 1;

		_ClassBasics[cRC].ClassName				= "Ranger / Cleric";
		_ClassBasics[cRC].THAC0s[0]				= 20;			_ClassBasics[cRC].THAC0s[1]				= 20;
		_ClassBasics[cRC].THAC0s[2]				= 19;			_ClassBasics[cRC].THAC0s[3]				= 18;
		_ClassBasics[cRC].THAC0s[4]				= 17;			_ClassBasics[cRC].THAC0s[5]				= 16;
		_ClassBasics[cRC].THAC0s[6]				= 15;			_ClassBasics[cRC].THAC0s[7]				= 14;
		_ClassBasics[cRC].THAC0s[8]				= 13;			_ClassBasics[cRC].THAC0s[9]				= 12;
		_ClassBasics[cRC].THAC0s[10]			= 11;			_ClassBasics[cRC].THAC0s[11]			= 10;
		_ClassBasics[cRC].THAC0s[12]			= 9;			_ClassBasics[cRC].THAC0s[13]			= 8;
		_ClassBasics[cRC].THAC0s[14]			= 7;			_ClassBasics[cRC].THAC0s[15]			= 6;
		_ClassBasics[cRC].THAC0s[16]			= 5;			_ClassBasics[cRC].THAC0s[17]			= 4;
		_ClassBasics[cRC].THAC0s[18]			= 3;			_ClassBasics[cRC].THAC0s[19]			= 2;
		_ClassBasics[cRC].THAC0s[20]			= 1;

		_ClassBasics[cRD].ClassName				= "Ranger / Druid";
		_ClassBasics[cRD].THAC0s[0]				= 20;			_ClassBasics[cRD].THAC0s[1]				= 20;
		_ClassBasics[cRD].THAC0s[2]				= 19;			_ClassBasics[cRD].THAC0s[3]				= 18;
		_ClassBasics[cRD].THAC0s[4]				= 17;			_ClassBasics[cRD].THAC0s[5]				= 16;
		_ClassBasics[cRD].THAC0s[6]				= 15;			_ClassBasics[cRD].THAC0s[7]				= 14;
		_ClassBasics[cRD].THAC0s[8]				= 13;			_ClassBasics[cRD].THAC0s[9]				= 12;
		_ClassBasics[cRD].THAC0s[10]			= 11;			_ClassBasics[cRD].THAC0s[11]			= 10;
		_ClassBasics[cRD].THAC0s[12]			= 9;			_ClassBasics[cRD].THAC0s[13]			= 8;
		_ClassBasics[cRD].THAC0s[14]			= 7;			_ClassBasics[cRD].THAC0s[15]			= 6;
		_ClassBasics[cRD].THAC0s[16]			= 5;			_ClassBasics[cRD].THAC0s[17]			= 4;
		_ClassBasics[cRD].THAC0s[18]			= 3;			_ClassBasics[cRD].THAC0s[19]			= 2;
		_ClassBasics[cRD].THAC0s[20]			= 1;

		_ClassBasics[cMC].ClassName				= "Mage / Cleric";
		_ClassBasics[cMC].THAC0s[0]				= 20;			_ClassBasics[cMC].THAC0s[1]				= 20;
		_ClassBasics[cMC].THAC0s[2]				= 20;			_ClassBasics[cMC].THAC0s[3]				= 20;
		_ClassBasics[cMC].THAC0s[4]				= 18;			_ClassBasics[cMC].THAC0s[5]				= 18;
		_ClassBasics[cMC].THAC0s[6]				= 18;			_ClassBasics[cMC].THAC0s[7]				= 16;
		_ClassBasics[cMC].THAC0s[8]				= 16;			_ClassBasics[cMC].THAC0s[9]				= 16;
		_ClassBasics[cMC].THAC0s[10]			= 14;			_ClassBasics[cMC].THAC0s[11]			= 14;
		_ClassBasics[cMC].THAC0s[12]			= 14;			_ClassBasics[cMC].THAC0s[13]			= 12;
		_ClassBasics[cMC].THAC0s[14]			= 12;			_ClassBasics[cMC].THAC0s[15]			= 12;
		_ClassBasics[cMC].THAC0s[16]			= 10;			_ClassBasics[cMC].THAC0s[17]			= 10;
		_ClassBasics[cMC].THAC0s[18]			= 10;			_ClassBasics[cMC].THAC0s[19]			= 8;
		_ClassBasics[cMC].THAC0s[20]			= 8;

		_ClassBasics[cMD].ClassName				= "Mage / Druid";
		_ClassBasics[cMD].THAC0s[0]				= 20;			_ClassBasics[cMD].THAC0s[1]				= 20;
		_ClassBasics[cMD].THAC0s[2]				= 20;			_ClassBasics[cMD].THAC0s[3]				= 20;
		_ClassBasics[cMD].THAC0s[4]				= 18;			_ClassBasics[cMD].THAC0s[5]				= 18;
		_ClassBasics[cMD].THAC0s[6]				= 18;			_ClassBasics[cMD].THAC0s[7]				= 16;
		_ClassBasics[cMD].THAC0s[8]				= 16;			_ClassBasics[cMD].THAC0s[9]				= 16;
		_ClassBasics[cMD].THAC0s[10]			= 14;			_ClassBasics[cMD].THAC0s[11]			= 14;
		_ClassBasics[cMD].THAC0s[12]			= 14;			_ClassBasics[cMD].THAC0s[13]			= 12;
		_ClassBasics[cMD].THAC0s[14]			= 12;			_ClassBasics[cMD].THAC0s[15]			= 12;
		_ClassBasics[cMD].THAC0s[16]			= 10;			_ClassBasics[cMD].THAC0s[17]			= 10;
		_ClassBasics[cMD].THAC0s[18]			= 10;			_ClassBasics[cMD].THAC0s[19]			= 8;
		_ClassBasics[cMD].THAC0s[20]			= 8;
			
		_ClassBasics[cMT].ClassName				= "Mage / Thief";
		_ClassBasics[cMT].THAC0s[0]				= 20;			_ClassBasics[cMT].THAC0s[1]				= 20;
		_ClassBasics[cMT].THAC0s[2]				= 20;			_ClassBasics[cMT].THAC0s[3]				= 19;
		_ClassBasics[cMT].THAC0s[4]				= 19;			_ClassBasics[cMT].THAC0s[5]				= 18;
		_ClassBasics[cMT].THAC0s[6]				= 18;			_ClassBasics[cMT].THAC0s[7]				= 17;
		_ClassBasics[cMT].THAC0s[8]				= 17;			_ClassBasics[cMT].THAC0s[9]				= 16;
		_ClassBasics[cMT].THAC0s[10]			= 16;			_ClassBasics[cMT].THAC0s[11]			= 15;
		_ClassBasics[cMT].THAC0s[12]			= 15;			_ClassBasics[cMT].THAC0s[13]			= 14;
		_ClassBasics[cMT].THAC0s[14]			= 14;			_ClassBasics[cMT].THAC0s[15]			= 13;
		_ClassBasics[cMT].THAC0s[16]			= 13;			_ClassBasics[cMT].THAC0s[17]			= 12;
		_ClassBasics[cMT].THAC0s[18]			= 12;			_ClassBasics[cMT].THAC0s[19]			= 11;
		_ClassBasics[cMT].THAC0s[20]			= 11;

		_ClassBasics[cTI].ClassName				= "Thief / Illusionist";
		_ClassBasics[cTI].THAC0s[0]				= 20;			_ClassBasics[cTI].THAC0s[1]				= 20;
		_ClassBasics[cTI].THAC0s[2]				= 20;			_ClassBasics[cTI].THAC0s[3]				= 19;
		_ClassBasics[cTI].THAC0s[4]				= 19;			_ClassBasics[cTI].THAC0s[5]				= 18;
		_ClassBasics[cTI].THAC0s[6]				= 18;			_ClassBasics[cTI].THAC0s[7]				= 17;
		_ClassBasics[cTI].THAC0s[8]				= 17;			_ClassBasics[cTI].THAC0s[9]				= 16;
		_ClassBasics[cTI].THAC0s[10]			= 16;			_ClassBasics[cTI].THAC0s[11]			= 15;
		_ClassBasics[cTI].THAC0s[12]			= 15;			_ClassBasics[cTI].THAC0s[13]			= 14;
		_ClassBasics[cTI].THAC0s[14]			= 14;			_ClassBasics[cTI].THAC0s[15]			= 13;
		_ClassBasics[cTI].THAC0s[16]			= 13;			_ClassBasics[cTI].THAC0s[17]			= 12;
		_ClassBasics[cTI].THAC0s[18]			= 12;			_ClassBasics[cTI].THAC0s[19]			= 11;
		_ClassBasics[cTI].THAC0s[20]			= 11;

		_ClassBasics[cFMC].ClassName			= "Fighter / Mage / Cleric";
		_ClassBasics[cFMC].THAC0s[0]			= 20;			_ClassBasics[cFMC].THAC0s[1]			= 20;
		_ClassBasics[cFMC].THAC0s[2]			= 19;			_ClassBasics[cFMC].THAC0s[3]			= 18;
		_ClassBasics[cFMC].THAC0s[4]			= 17;			_ClassBasics[cFMC].THAC0s[5]			= 16;
		_ClassBasics[cFMC].THAC0s[6]			= 15;			_ClassBasics[cFMC].THAC0s[7]			= 14;
		_ClassBasics[cFMC].THAC0s[8]			= 13;			_ClassBasics[cFMC].THAC0s[9]			= 12;
		_ClassBasics[cFMC].THAC0s[10]			= 11;			_ClassBasics[cFMC].THAC0s[11]			= 10;
		_ClassBasics[cFMC].THAC0s[12]			= 9;			_ClassBasics[cFMC].THAC0s[13]			= 8;
		_ClassBasics[cFMC].THAC0s[14]			= 7;			_ClassBasics[cFMC].THAC0s[15]			= 6;
		_ClassBasics[cFMC].THAC0s[16]			= 5;			_ClassBasics[cFMC].THAC0s[17]			= 4;
		_ClassBasics[cFMC].THAC0s[18]			= 3;			_ClassBasics[cFMC].THAC0s[19]			= 2;
		_ClassBasics[cFMC].THAC0s[20]			= 1;

		_ClassBasics[cFMD].ClassName			= "Fighter / Mage / Druid";
		_ClassBasics[cFMD].THAC0s[0]			= 20;			_ClassBasics[cFMD].THAC0s[1]			= 20;
		_ClassBasics[cFMD].THAC0s[2]			= 19;			_ClassBasics[cFMD].THAC0s[3]			= 18;
		_ClassBasics[cFMD].THAC0s[4]			= 17;			_ClassBasics[cFMD].THAC0s[5]			= 16;
		_ClassBasics[cFMD].THAC0s[6]			= 15;			_ClassBasics[cFMD].THAC0s[7]			= 14;
		_ClassBasics[cFMD].THAC0s[8]			= 13;			_ClassBasics[cFMD].THAC0s[9]			= 12;
		_ClassBasics[cFMD].THAC0s[10]			= 11;			_ClassBasics[cFMD].THAC0s[11]			= 10;
		_ClassBasics[cFMD].THAC0s[12]			= 9;			_ClassBasics[cFMD].THAC0s[13]			= 8;
		_ClassBasics[cFMD].THAC0s[14]			= 7;			_ClassBasics[cFMD].THAC0s[15]			= 6;
		_ClassBasics[cFMD].THAC0s[16]			= 5;			_ClassBasics[cFMD].THAC0s[17]			= 4;
		_ClassBasics[cFMD].THAC0s[18]			= 3;			_ClassBasics[cFMD].THAC0s[19]			= 2;
		_ClassBasics[cFMD].THAC0s[20]			= 1;

		_ClassBasics[cFMT].ClassName			= "Fighter / Mage / Thief";
		_ClassBasics[cFMT].THAC0s[0]			= 20;			_ClassBasics[cFMT].THAC0s[1]			= 20;
		_ClassBasics[cFMT].THAC0s[2]			= 19;			_ClassBasics[cFMT].THAC0s[3]			= 18;
		_ClassBasics[cFMT].THAC0s[4]			= 17;			_ClassBasics[cFMT].THAC0s[5]			= 16;
		_ClassBasics[cFMT].THAC0s[6]			= 15;			_ClassBasics[cFMT].THAC0s[7]			= 14;
		_ClassBasics[cFMT].THAC0s[8]			= 13;			_ClassBasics[cFMT].THAC0s[9]			= 12;
		_ClassBasics[cFMT].THAC0s[10]			= 11;			_ClassBasics[cFMT].THAC0s[11]			= 10;
		_ClassBasics[cFMT].THAC0s[12]			= 9;			_ClassBasics[cFMT].THAC0s[13]			= 8;
		_ClassBasics[cFMT].THAC0s[14]			= 7;			_ClassBasics[cFMT].THAC0s[15]			= 6;
		_ClassBasics[cFMT].THAC0s[16]			= 5;			_ClassBasics[cFMT].THAC0s[17]			= 4;
		_ClassBasics[cFMT].THAC0s[18]			= 3;			_ClassBasics[cFMT].THAC0s[19]			= 2;
		_ClassBasics[cFMT].THAC0s[20]			= 1;
	}
	{	//Monster
		_MonsterTHACOs[MonThacoHalf]			= 20;			_MonsterTHACOs[MonThacoOneMinus]		= 20;
		_MonsterTHACOs[MonThacoOne]				= 19;			_MonsterTHACOs[MonThacoTwo]				= 19;
		_MonsterTHACOs[MonThacoThree]			= 17;			_MonsterTHACOs[MonThacoFour]			= 17;
		_MonsterTHACOs[MonThacoFive]			= 15;			_MonsterTHACOs[MonThacoSix]				= 15;
		_MonsterTHACOs[MonThacoSeven]			= 13;			_MonsterTHACOs[MonThacoEight]			= 13;
		_MonsterTHACOs[MonThacoNine]			= 11;			_MonsterTHACOs[MonThacoTen]				= 11;
		_MonsterTHACOs[MonThacoEleven]			= 9;			_MonsterTHACOs[MonThacoTwelve]			= 9;
		_MonsterTHACOs[MonThacoThirteen]		= 7;			_MonsterTHACOs[MonThacoFourteen]		= 7;
		_MonsterTHACOs[MonThacoFifteen]			= 5;			_MonsterTHACOs[MonThacoSixteen]			= 5;
	}
	{	//Attribute Base Data inits - M. White 29 June, 2019
		_STRData[StrAA_][0]  = -5; _STRData[StrDA_][0]  = -4; _STRData[StrWA_][0]  =    1; _STRData[StrMP_][0]  =    3; _STRData[StrOD_][0]  =  1; _STRData[StrBB_][0]  =  0;
		_STRData[StrAA_][1]  = -3; _STRData[StrDA_][1]  = -2; _STRData[StrWA_][1]  =    1; _STRData[StrMP_][1]  =    5; _STRData[StrOD_][1]  =  1; _STRData[StrBB_][1]  =  0;
		_STRData[StrAA_][2]  = -3; _STRData[StrDA_][2]  = -1; _STRData[StrWA_][2]  =    5; _STRData[StrMP_][2]  =   10; _STRData[StrOD_][2]  =  2; _STRData[StrBB_][2]  =  0;
		_STRData[StrAA_][3]  = -2; _STRData[StrDA_][3]  = -1; _STRData[StrWA_][3]  =   10; _STRData[StrMP_][3]  =   25; _STRData[StrOD_][3]  =  3; _STRData[StrBB_][3]  =  0;
		_STRData[StrAA_][4]  = -2; _STRData[StrDA_][4]  = -1; _STRData[StrWA_][4]  =   10; _STRData[StrMP_][4]  =   25; _STRData[StrOD_][4]  =  3; _STRData[StrBB_][4]  =  0;
		_STRData[StrAA_][5]  = -1; _STRData[StrDA_][5]  =  0; _STRData[StrWA_][5]  =   20; _STRData[StrMP_][5]  =   55; _STRData[StrOD_][5]  =  4; _STRData[StrBB_][5]  =  0;
		_STRData[StrAA_][6]  = -1; _STRData[StrDA_][6]  =  0; _STRData[StrWA_][6]  =   20; _STRData[StrMP_][6]  =   55; _STRData[StrOD_][6]  =  4; _STRData[StrBB_][6]  =  0;
		_STRData[StrAA_][7]  =  0; _STRData[StrDA_][7]  =  0; _STRData[StrWA_][7]  =   35; _STRData[StrMP_][7]  =   90; _STRData[StrOD_][7]  =  5; _STRData[StrBB_][7]  =  1;
		_STRData[StrAA_][8]  =  0; _STRData[StrDA_][8]  =  0; _STRData[StrWA_][8]  =   35; _STRData[StrMP_][8]  =   90; _STRData[StrOD_][8]  =  5; _STRData[StrBB_][8]  =  1;
		_STRData[StrAA_][9]  =  0; _STRData[StrDA_][9]  =  0; _STRData[StrWA_][9]  =   40; _STRData[StrMP_][9]  =  115; _STRData[StrOD_][9]  =  6; _STRData[StrBB_][9]  =  2;
		_STRData[StrAA_][10] =  0; _STRData[StrDA_][10] =  0; _STRData[StrWA_][10] =   40; _STRData[StrMP_][10] =  115; _STRData[StrOD_][10] =  6; _STRData[StrBB_][10] =  2;
		_STRData[StrAA_][11] =  0; _STRData[StrDA_][11] =  0; _STRData[StrWA_][11] =   45; _STRData[StrMP_][11] =  140; _STRData[StrOD_][11] =  7; _STRData[StrBB_][11] =  4;
		_STRData[StrAA_][12] =  0; _STRData[StrDA_][12] =  0; _STRData[StrWA_][12] =   45; _STRData[StrMP_][12] =  140; _STRData[StrOD_][12] =  7; _STRData[StrBB_][12] =  4;
		_STRData[StrAA_][13] =  0; _STRData[StrDA_][13] =  0; _STRData[StrWA_][13] =   55; _STRData[StrMP_][13] =  170; _STRData[StrOD_][13] =  8; _STRData[StrBB_][13] =  7;
		_STRData[StrAA_][14] =  0; _STRData[StrDA_][14] =  0; _STRData[StrWA_][14] =   55; _STRData[StrMP_][14] =  170; _STRData[StrOD_][14] =  8; _STRData[StrBB_][14] =  7;
		_STRData[StrAA_][15] =  0; _STRData[StrDA_][15] =  1; _STRData[StrWA_][15] =   70; _STRData[StrMP_][15] =  195; _STRData[StrOD_][15] =  9; _STRData[StrBB_][15] = 10;
		_STRData[StrAA_][16] =  1; _STRData[StrDA_][16] =  1; _STRData[StrWA_][16] =   85; _STRData[StrMP_][16] =  220; _STRData[StrOD_][16] = 10; _STRData[StrBB_][16] = 13;
		_STRData[StrAA_][17] =  1; _STRData[StrDA_][17] =  2; _STRData[StrWA_][17] =  110; _STRData[StrMP_][17] =  255; _STRData[StrOD_][17] = 11; _STRData[StrBB_][17] = 16;
		_STRData[StrAA_][18] =  3; _STRData[StrDA_][18] =  7; _STRData[StrWA_][18] =  485; _STRData[StrMP_][18] =  640; _STRData[StrOD_][18] = 16; _STRData[StrBB_][18] = 50;
		_STRData[StrAA_][19] =  3; _STRData[StrDA_][19] =  8; _STRData[StrWA_][19] =  535; _STRData[StrMP_][19] =  700; _STRData[StrOD_][19] = 17; _STRData[StrBB_][19] = 60;
		_STRData[StrAA_][20] =  4; _STRData[StrDA_][20] =  9; _STRData[StrWA_][20] =  635; _STRData[StrMP_][20] =  810; _STRData[StrOD_][20] = 17; _STRData[StrBB_][20] = 70;
		_STRData[StrAA_][21] =  4; _STRData[StrDA_][21] = 10; _STRData[StrWA_][21] =  785; _STRData[StrMP_][21] =  970; _STRData[StrOD_][21] = 18; _STRData[StrBB_][21] = 80;
		_STRData[StrAA_][22] =  5; _STRData[StrDA_][22] = 11; _STRData[StrWA_][22] =  935; _STRData[StrMP_][22] = 1130; _STRData[StrOD_][22] = 18; _STRData[StrBB_][22] = 90;
		_STRData[StrAA_][23] =  6; _STRData[StrDA_][23] = 12; _STRData[StrWA_][23] = 1235; _STRData[StrMP_][23] = 1440; _STRData[StrOD_][23] = 19; _STRData[StrBB_][23] = 95;
		_STRData[StrAA_][24] =  7; _STRData[StrDA_][24] = 14; _STRData[StrWA_][24] = 1535; _STRData[StrMP_][24] = 1750; _STRData[StrOD_][24] = 19; _STRData[StrBB_][24] = 99;

		_ESRData[StrAA_][0]  =  1; _ESRData[StrDA_][0]  =  3; _ESRData[StrWA_][0]  =  135; _ESRData[StrMP_][0]  =  280; _ESRData[StrOD_][0]  = 12; _ESRData[StrBB_][0]  = 20;
		_ESRData[StrAA_][1]  =  2; _ESRData[StrDA_][1]  =  3; _ESRData[StrWA_][1]  =  160; _ESRData[StrMP_][1]  =  305; _ESRData[StrOD_][1]  = 13; _ESRData[StrBB_][1]  = 25;
		_ESRData[StrAA_][2]  =  2; _ESRData[StrDA_][2]  =  4; _ESRData[StrWA_][2]  =  185; _ESRData[StrMP_][2]  =  330; _ESRData[StrOD_][2]  = 14; _ESRData[StrBB_][2]  = 30;
		_ESRData[StrAA_][3]  =  2; _ESRData[StrDA_][3]  =  5; _ESRData[StrWA_][3]  =  235; _ESRData[StrMP_][3]  =  380; _ESRData[StrOD_][3]  = 15; _ESRData[StrBB_][3]  = 35;
		_ESRData[StrAA_][4]  =  3; _ESRData[StrDA_][4]  =  6; _ESRData[StrWA_][4]  =  335; _ESRData[StrMP_][4]  =  480; _ESRData[StrOD_][4]  = 16; _ESRData[StrBB_][4]  = 40;

		_DEXData[DexRA_][0]  = -6; _DEXData[DexMAA][0]  = -6; _DEXData[DexDA_][0]  = 5;
		_DEXData[DexRA_][1]  = -4; _DEXData[DexMAA][1]  = -4; _DEXData[DexDA_][1]  = 5;
		_DEXData[DexRA_][2]  = -3; _DEXData[DexMAA][2]  = -3; _DEXData[DexDA_][2]  = 4;
		_DEXData[DexRA_][3]  = -2; _DEXData[DexMAA][3]  = -2; _DEXData[DexDA_][3]  = 3;
		_DEXData[DexRA_][4]  = -1; _DEXData[DexMAA][4]  = -1; _DEXData[DexDA_][4]  = 2;
		_DEXData[DexRA_][5]  =  0; _DEXData[DexMAA][5]  =  0; _DEXData[DexDA_][5]  = 1;
		_DEXData[DexRA_][6]  =  0; _DEXData[DexMAA][6]  =  0; _DEXData[DexDA_][6]  = 0;
		_DEXData[DexRA_][7]  =  0; _DEXData[DexMAA][7]  =  0; _DEXData[DexDA_][7]  = 0;
		_DEXData[DexRA_][8]  =  0; _DEXData[DexMAA][8]  =  0; _DEXData[DexDA_][8]  = 0;
		_DEXData[DexRA_][9]  =  0; _DEXData[DexMAA][9]  =  0; _DEXData[DexDA_][9]  = 0;
		_DEXData[DexRA_][10] =  0; _DEXData[DexMAA][10] =  0; _DEXData[DexDA_][10] = 0;
		_DEXData[DexRA_][11] =  0; _DEXData[DexMAA][11] =  0; _DEXData[DexDA_][11] = 0;
		_DEXData[DexRA_][12] =  0; _DEXData[DexMAA][12] =  0; _DEXData[DexDA_][12] = 0;
		_DEXData[DexRA_][13] =  0; _DEXData[DexMAA][13] =  0; _DEXData[DexDA_][13] = 0;
		_DEXData[DexRA_][14] =  0; _DEXData[DexMAA][14] =  0; _DEXData[DexDA_][14] = -1;
		_DEXData[DexRA_][15] =  1; _DEXData[DexMAA][15] =  1; _DEXData[DexDA_][15] = -2;
		_DEXData[DexRA_][16] =  2; _DEXData[DexMAA][16] =  2; _DEXData[DexDA_][16] = -3;
		_DEXData[DexRA_][17] =  2; _DEXData[DexMAA][17] =  2; _DEXData[DexDA_][17] = -4;
		_DEXData[DexRA_][18] =  3; _DEXData[DexMAA][18] =  3; _DEXData[DexDA_][18] = -4;
		_DEXData[DexRA_][19] =  3; _DEXData[DexMAA][19] =  3; _DEXData[DexDA_][19] = -4;
		_DEXData[DexRA_][20] =  4; _DEXData[DexMAA][20] =  4; _DEXData[DexDA_][20] = -5;
		_DEXData[DexRA_][21] =  4; _DEXData[DexMAA][21] =  4; _DEXData[DexDA_][21] = -5;
		_DEXData[DexRA_][22] =  4; _DEXData[DexMAA][22] =  4; _DEXData[DexDA_][22] = -5;
		_DEXData[DexRA_][23] =  5; _DEXData[DexMAA][23] =  5; _DEXData[DexDA_][23] = -6;
		_DEXData[DexRA_][24] =  5; _DEXData[DexMAA][24] =  5; _DEXData[DexDA_][24] = -6;

		_CONData[ConHpA][0]  = -3; _CONData[ConSS_][0]  =  25; _CONData[ConRS_][0]  =  30; _CONData[ConPS_][0]  = -2; _CONData[ConReg][0]  = 0; 
		_CONData[ConHpA][1]  = -2; _CONData[ConSS_][1]  =  30; _CONData[ConRS_][1]  =  35; _CONData[ConPS_][1]  = -1; _CONData[ConReg][1]  = 0; 
		_CONData[ConHpA][2]  = -2; _CONData[ConSS_][2]  =  35; _CONData[ConRS_][2]  =  40; _CONData[ConPS_][2]  =  0; _CONData[ConReg][2]  = 0; 
		_CONData[ConHpA][3]  = -1; _CONData[ConSS_][3]  =  40; _CONData[ConRS_][3]  =  45; _CONData[ConPS_][3]  =  0; _CONData[ConReg][3]  = 0; 
		_CONData[ConHpA][4]  = -1; _CONData[ConSS_][4]  =  45; _CONData[ConRS_][4]  =  50; _CONData[ConPS_][4]  =  0; _CONData[ConReg][4]  = 0; 
		_CONData[ConHpA][5]  = -1; _CONData[ConSS_][5]  =  50; _CONData[ConRS_][5]  =  55; _CONData[ConPS_][5]  =  0; _CONData[ConReg][5]  = 0; 
		_CONData[ConHpA][6]  =  0; _CONData[ConSS_][6]  =  55; _CONData[ConRS_][6]  =  60; _CONData[ConPS_][6]  =  0; _CONData[ConReg][6]  = 0; 
		_CONData[ConHpA][7]  =  0; _CONData[ConSS_][7]  =  60; _CONData[ConRS_][7]  =  65; _CONData[ConPS_][7]  =  0; _CONData[ConReg][7]  = 0; 
		_CONData[ConHpA][8]  =  0; _CONData[ConSS_][8]  =  65; _CONData[ConRS_][8]  =  70; _CONData[ConPS_][8]  =  0; _CONData[ConReg][8]  = 0; 
		_CONData[ConHpA][9]  =  0; _CONData[ConSS_][9]  =  70; _CONData[ConRS_][9]  =  75; _CONData[ConPS_][9]  =  0; _CONData[ConReg][9]  = 0; 
		_CONData[ConHpA][10] =  0; _CONData[ConSS_][10] =  75; _CONData[ConRS_][10] =  80; _CONData[ConPS_][10] =  0; _CONData[ConReg][10] = 0; 
		_CONData[ConHpA][11] =  0; _CONData[ConSS_][11] =  80; _CONData[ConRS_][11] =  85; _CONData[ConPS_][11] =  0; _CONData[ConReg][11] = 0; 
		_CONData[ConHpA][12] =  0; _CONData[ConSS_][12] =  85; _CONData[ConRS_][12] =  90; _CONData[ConPS_][12] =  0; _CONData[ConReg][12] = 0; 
		_CONData[ConHpA][13] =  0; _CONData[ConSS_][13] =  88; _CONData[ConRS_][13] =  92; _CONData[ConPS_][13] =  0; _CONData[ConReg][13] = 0; 
		_CONData[ConHpA][14] =  1; _CONData[ConSS_][14] =  90; _CONData[ConRS_][14] =  94; _CONData[ConPS_][14] =  0; _CONData[ConReg][14] = 0; 
		_CONData[ConHpA][15] =  2; _CONData[ConSS_][15] =  95; _CONData[ConRS_][15] =  96; _CONData[ConPS_][15] =  0; _CONData[ConReg][15] = 0; 
		_CONData[ConHpA][16] =  3; _CONData[ConSS_][16] =  97; _CONData[ConRS_][16] =  98; _CONData[ConPS_][16] =  0; _CONData[ConReg][16] = 0; 
		_CONData[ConHpA][17] =  4; _CONData[ConSS_][17] =  99; _CONData[ConRS_][17] = 100; _CONData[ConPS_][17] =  0; _CONData[ConReg][17] = 0; 
		_CONData[ConHpA][18] =  5; _CONData[ConSS_][18] =  99; _CONData[ConRS_][18] = 100; _CONData[ConPS_][18] =  1; _CONData[ConReg][18] = 0; 
		_CONData[ConHpA][19] =  5; _CONData[ConSS_][19] =  99; _CONData[ConRS_][19] = 100; _CONData[ConPS_][19] =  1; _CONData[ConReg][19] = 6; 
		_CONData[ConHpA][20] =  6; _CONData[ConSS_][20] =  99; _CONData[ConRS_][20] = 100; _CONData[ConPS_][20] =  2; _CONData[ConReg][20] = 5; 
		_CONData[ConHpA][21] =  6; _CONData[ConSS_][21] =  99; _CONData[ConRS_][21] = 100; _CONData[ConPS_][21] =  2; _CONData[ConReg][21] = 4; 
		_CONData[ConHpA][22] =  6; _CONData[ConSS_][22] =  99; _CONData[ConRS_][22] = 100; _CONData[ConPS_][22] =  3; _CONData[ConReg][22] = 3; 
		_CONData[ConHpA][23] =  7; _CONData[ConSS_][23] =  99; _CONData[ConRS_][23] = 100; _CONData[ConPS_][23] =  3; _CONData[ConReg][23] = 2; 
		_CONData[ConHpA][24] =  7; _CONData[ConSS_][24] = 100; _CONData[ConRS_][24] = 100; _CONData[ConPS_][24] =  4; _CONData[ConReg][24] = 1;

		_INTData[IntNoL][0]  =  0; _INTData[IntSL_][0]  =  0; _INTData[Int_TL][0]  =   0; _INTData[Int_SL][0]  =  0;
		_INTData[IntNoL][1]  =  1; _INTData[IntSL_][1]  =  0; _INTData[Int_TL][1]  =   0; _INTData[Int_SL][1]  =  0;
		_INTData[IntNoL][2]  =  1; _INTData[IntSL_][2]  =  0; _INTData[Int_TL][2]  =   0; _INTData[Int_SL][2]  =  0;
		_INTData[IntNoL][3]  =  1; _INTData[IntSL_][3]  =  0; _INTData[Int_TL][3]  =   0; _INTData[Int_SL][3]  =  0;
		_INTData[IntNoL][4]  =  1; _INTData[IntSL_][4]  =  0; _INTData[Int_TL][4]  =   0; _INTData[Int_SL][4]  =  0;
		_INTData[IntNoL][5]  =  1; _INTData[IntSL_][5]  =  0; _INTData[Int_TL][5]  =   0; _INTData[Int_SL][5]  =  0;
		_INTData[IntNoL][6]  =  1; _INTData[IntSL_][6]  =  0; _INTData[Int_TL][6]  =   0; _INTData[Int_SL][6]  =  0;
		_INTData[IntNoL][7]  =  1; _INTData[IntSL_][7]  =  0; _INTData[Int_TL][7]  =   0; _INTData[Int_SL][7]  =  0;
		_INTData[IntNoL][8]  =  2; _INTData[IntSL_][8]  =  4; _INTData[Int_TL][8]  =  35; _INTData[Int_SL][8]  =  6;
		_INTData[IntNoL][9]  =  2; _INTData[IntSL_][9]  =  5; _INTData[Int_TL][9]  =  40; _INTData[Int_SL][9]  =  7;
		_INTData[IntNoL][10] =  2; _INTData[IntSL_][10] =  5; _INTData[Int_TL][10] =  45; _INTData[Int_SL][10] =  7;
		_INTData[IntNoL][11] =  3; _INTData[IntSL_][11] =  6; _INTData[Int_TL][11] =  50; _INTData[Int_SL][11] =  7;
		_INTData[IntNoL][12] =  3; _INTData[IntSL_][12] =  6; _INTData[Int_TL][12] =  55; _INTData[Int_SL][12] =  9;
		_INTData[IntNoL][13] =  4; _INTData[IntSL_][13] =  7; _INTData[Int_TL][13] =  60; _INTData[Int_SL][13] =  9;
		_INTData[IntNoL][14] =  4; _INTData[IntSL_][14] =  7; _INTData[Int_TL][14] =  65; _INTData[Int_SL][14] = 11;
		_INTData[IntNoL][15] =  5; _INTData[IntSL_][15] =  8; _INTData[Int_TL][15] =  70; _INTData[Int_SL][15] = 11;
		_INTData[IntNoL][16] =  6; _INTData[IntSL_][16] =  8; _INTData[Int_TL][16] =  75; _INTData[Int_SL][16] = 14;
		_INTData[IntNoL][17] =  7; _INTData[IntSL_][17] =  9; _INTData[Int_TL][17] =  85; _INTData[Int_SL][17] = 18;
		_INTData[IntNoL][18] =  8; _INTData[IntSL_][18] =  9; _INTData[Int_TL][18] =  95; _INTData[Int_SL][18] = -1;
		_INTData[IntNoL][19] =  9; _INTData[IntSL_][19] =  9; _INTData[Int_TL][19] =  96; _INTData[Int_SL][19] = -1;
		_INTData[IntNoL][20] = 10; _INTData[IntSL_][20] =  9; _INTData[Int_TL][20] =  97; _INTData[Int_SL][20] = -1;
		_INTData[IntNoL][21] = 11; _INTData[IntSL_][21] =  9; _INTData[Int_TL][21] =  98; _INTData[Int_SL][21] = -1;
		_INTData[IntNoL][22] = 12; _INTData[IntSL_][22] =  9; _INTData[Int_TL][22] =  99; _INTData[Int_SL][22] = -1;
		_INTData[IntNoL][23] = 15; _INTData[IntSL_][23] =  9; _INTData[Int_TL][23] = 100; _INTData[Int_SL][23] = -1;
		_INTData[IntNoL][24] = 20; _INTData[IntSL_][24] =  9; _INTData[Int_TL][24] = 100; _INTData[Int_SL][24] = -1;

		_WISData[WisMDA][0]  = -6; _WISData[WisSF_][0]  =  80; _WISData[Wis1st][0]  = 0; _WISData[Wis2nd][0]  = 0; _WISData[Wis3rd][0]  = 0; _WISData[Wis4th][0]  = 0; _WISData[Wis5th][0]  = 0; _WISData[Wis6th][0]  = 0; _WISData[Wis7th][0]  = 0;
		_WISData[WisMDA][1]  = -4; _WISData[WisSF_][1]  =  60; _WISData[Wis1st][1]  = 0; _WISData[Wis2nd][1]  = 0; _WISData[Wis3rd][1]  = 0; _WISData[Wis4th][1]  = 0; _WISData[Wis5th][1]  = 0; _WISData[Wis6th][1]  = 0; _WISData[Wis7th][1]  = 0;
		_WISData[WisMDA][2]  = -3; _WISData[WisSF_][2]  =  50; _WISData[Wis1st][2]  = 0; _WISData[Wis2nd][2]  = 0; _WISData[Wis3rd][2]  = 0; _WISData[Wis4th][2]  = 0; _WISData[Wis5th][2]  = 0; _WISData[Wis6th][2]  = 0; _WISData[Wis7th][2]  = 0;
		_WISData[WisMDA][3]  = -2; _WISData[WisSF_][3]  =  45; _WISData[Wis1st][3]  = 0; _WISData[Wis2nd][3]  = 0; _WISData[Wis3rd][3]  = 0; _WISData[Wis4th][3]  = 0; _WISData[Wis5th][3]  = 0; _WISData[Wis6th][3]  = 0; _WISData[Wis7th][3]  = 0;
		_WISData[WisMDA][4]  = -1; _WISData[WisSF_][4]  =  40; _WISData[Wis1st][4]  = 0; _WISData[Wis2nd][4]  = 0; _WISData[Wis3rd][4]  = 0; _WISData[Wis4th][4]  = 0; _WISData[Wis5th][4]  = 0; _WISData[Wis6th][4]  = 0; _WISData[Wis7th][4]  = 0; 
		_WISData[WisMDA][5]  = -1; _WISData[WisSF_][5]  =  35; _WISData[Wis1st][5]  = 0; _WISData[Wis2nd][5]  = 0; _WISData[Wis3rd][5]  = 0; _WISData[Wis4th][5]  = 0; _WISData[Wis5th][5]  = 0; _WISData[Wis6th][5]  = 0; _WISData[Wis7th][5]  = 0; 
		_WISData[WisMDA][6]  = -1; _WISData[WisSF_][6]  =  30; _WISData[Wis1st][6]  = 0; _WISData[Wis2nd][6]  = 0; _WISData[Wis3rd][6]  = 0; _WISData[Wis4th][6]  = 0; _WISData[Wis5th][6]  = 0; _WISData[Wis6th][6]  = 0; _WISData[Wis7th][6]  = 0;
		_WISData[WisMDA][7]  =  0; _WISData[WisSF_][7]  =  25; _WISData[Wis1st][7]  = 0; _WISData[Wis2nd][7]  = 0; _WISData[Wis3rd][7]  = 0; _WISData[Wis4th][7]  = 0; _WISData[Wis5th][7]  = 0; _WISData[Wis6th][7]  = 0; _WISData[Wis7th][7]  = 0;
		_WISData[WisMDA][8]  =  0; _WISData[WisSF_][8]  =  20; _WISData[Wis1st][8]  = 0; _WISData[Wis2nd][8]  = 0; _WISData[Wis3rd][8]  = 0; _WISData[Wis4th][8]  = 0; _WISData[Wis5th][8]  = 0; _WISData[Wis6th][8]  = 0; _WISData[Wis7th][8]  = 0;  
		_WISData[WisMDA][9]  =  0; _WISData[WisSF_][9]  =  15; _WISData[Wis1st][9]  = 0; _WISData[Wis2nd][9]  = 0; _WISData[Wis3rd][9]  = 0; _WISData[Wis4th][9]  = 0; _WISData[Wis5th][9]  = 0; _WISData[Wis6th][9]  = 0; _WISData[Wis7th][9]  = 0;
		_WISData[WisMDA][10] =  0; _WISData[WisSF_][10] =  10; _WISData[Wis1st][10] = 0; _WISData[Wis2nd][10] = 0; _WISData[Wis3rd][10] = 0; _WISData[Wis4th][10] = 0; _WISData[Wis5th][10] = 0; _WISData[Wis6th][10] = 0; _WISData[Wis7th][10] = 0; 
		_WISData[WisMDA][11] =  0; _WISData[WisSF_][11] =   5; _WISData[Wis1st][11] = 0; _WISData[Wis2nd][11] = 0; _WISData[Wis3rd][11] = 0; _WISData[Wis4th][11] = 0; _WISData[Wis5th][11] = 0; _WISData[Wis6th][11] = 0; _WISData[Wis7th][11] = 0;
		_WISData[WisMDA][12] =  0; _WISData[WisSF_][12] =   0; _WISData[Wis1st][12] = 1; _WISData[Wis2nd][12] = 0; _WISData[Wis3rd][12] = 0; _WISData[Wis4th][12] = 0; _WISData[Wis5th][12] = 0; _WISData[Wis6th][12] = 0; _WISData[Wis7th][12] = 0;
		_WISData[WisMDA][13] =  0; _WISData[WisSF_][13] =   0; _WISData[Wis1st][13] = 2; _WISData[Wis2nd][13] = 0; _WISData[Wis3rd][13] = 0; _WISData[Wis4th][13] = 0; _WISData[Wis5th][13] = 0; _WISData[Wis6th][13] = 0; _WISData[Wis7th][13] = 0; 
		_WISData[WisMDA][14] =  1; _WISData[WisSF_][14] =   0; _WISData[Wis1st][14] = 2; _WISData[Wis2nd][14] = 1; _WISData[Wis3rd][14] = 0; _WISData[Wis4th][14] = 0; _WISData[Wis5th][14] = 0; _WISData[Wis6th][14] = 0; _WISData[Wis7th][14] = 0; 
		_WISData[WisMDA][15] =  2; _WISData[WisSF_][15] =   0; _WISData[Wis1st][15] = 2; _WISData[Wis2nd][15] = 2; _WISData[Wis3rd][15] = 0; _WISData[Wis4th][15] = 0; _WISData[Wis5th][15] = 0; _WISData[Wis6th][15] = 0; _WISData[Wis7th][15] = 0;
		_WISData[WisMDA][16] =  3; _WISData[WisSF_][16] =   0; _WISData[Wis1st][16] = 2; _WISData[Wis2nd][16] = 2; _WISData[Wis3rd][16] = 1; _WISData[Wis4th][16] = 0; _WISData[Wis5th][16] = 0; _WISData[Wis6th][16] = 0; _WISData[Wis7th][16] = 0;
		_WISData[WisMDA][17] =  4; _WISData[WisSF_][17] =   0; _WISData[Wis1st][17] = 2; _WISData[Wis2nd][17] = 2; _WISData[Wis3rd][17] = 1; _WISData[Wis4th][17] = 1; _WISData[Wis5th][17] = 0; _WISData[Wis6th][17] = 0; _WISData[Wis7th][17] = 0;
		_WISData[WisMDA][18] =  4; _WISData[WisSF_][18] =   0; _WISData[Wis1st][18] = 3; _WISData[Wis2nd][18] = 2; _WISData[Wis3rd][18] = 2; _WISData[Wis4th][18] = 1; _WISData[Wis5th][18] = 0; _WISData[Wis6th][18] = 0; _WISData[Wis7th][18] = 0; 
		_WISData[WisMDA][19] =  4; _WISData[WisSF_][19] =   0; _WISData[Wis1st][19] = 3; _WISData[Wis2nd][19] = 3; _WISData[Wis3rd][19] = 2; _WISData[Wis4th][19] = 2; _WISData[Wis5th][19] = 0; _WISData[Wis6th][19] = 0; _WISData[Wis7th][19] = 0; 
		_WISData[WisMDA][20] =  4; _WISData[WisSF_][20] =   0; _WISData[Wis1st][20] = 3; _WISData[Wis2nd][20] = 3; _WISData[Wis3rd][20] = 3; _WISData[Wis4th][20] = 2; _WISData[Wis5th][20] = 1; _WISData[Wis6th][20] = 0; _WISData[Wis7th][20] = 0; 
		_WISData[WisMDA][21] =  4; _WISData[WisSF_][21] =   0; _WISData[Wis1st][21] = 3; _WISData[Wis2nd][21] = 3; _WISData[Wis3rd][21] = 3; _WISData[Wis4th][21] = 3; _WISData[Wis5th][21] = 2; _WISData[Wis6th][21] = 0; _WISData[Wis7th][21] = 0;
		_WISData[WisMDA][22] =  4; _WISData[WisSF_][22] =   0; _WISData[Wis1st][22] = 4; _WISData[Wis2nd][22] = 3; _WISData[Wis3rd][22] = 3; _WISData[Wis4th][22] = 3; _WISData[Wis5th][22] = 2; _WISData[Wis6th][22] = 1; _WISData[Wis7th][22] = 0;
		_WISData[WisMDA][23] =  4; _WISData[WisSF_][23] =   0; _WISData[Wis1st][23] = 4; _WISData[Wis2nd][23] = 3; _WISData[Wis3rd][23] = 3; _WISData[Wis4th][23] = 3; _WISData[Wis5th][23] = 3; _WISData[Wis6th][23] = 2; _WISData[Wis7th][23] = 0; 
		_WISData[WisMDA][24] =  4; _WISData[WisSF_][24] =   0; _WISData[Wis1st][24] = 4; _WISData[Wis2nd][24] = 3; _WISData[Wis3rd][24] = 3; _WISData[Wis4th][24] = 3; _WISData[Wis5th][24] = 3; _WISData[Wis6th][24] = 3; _WISData[Wis7th][24] = 1;

		_CHAData[ChaMnH][0]  =  0; _CHAData[ChaLB_][0]  = -8; _CHAData[ChaRA_][0]  = -7; _CHAData[ChaCA_][0]  = -8;
		_CHAData[ChaMnH][1]  =  1; _CHAData[ChaLB_][1]  = -7; _CHAData[ChaRA_][1]  = -6; _CHAData[ChaCA_][1]  = -8;
		_CHAData[ChaMnH][2]  =  1; _CHAData[ChaLB_][2]  = -6; _CHAData[ChaRA_][2]  = -5; _CHAData[ChaCA_][2]  = -5;
		_CHAData[ChaMnH][3]  =  1; _CHAData[ChaLB_][3]  = -5; _CHAData[ChaRA_][3]  = -4; _CHAData[ChaCA_][3]  = -3;
		_CHAData[ChaMnH][4]  =  2; _CHAData[ChaLB_][4]  = -4; _CHAData[ChaRA_][4]  = -3; _CHAData[ChaCA_][4]  = -3;
		_CHAData[ChaMnH][5]  =  2; _CHAData[ChaLB_][5]  = -3; _CHAData[ChaRA_][5]  = -2; _CHAData[ChaCA_][5]  = -1;
		_CHAData[ChaMnH][6]  =  3; _CHAData[ChaLB_][6]  = -2; _CHAData[ChaRA_][6]  = -1; _CHAData[ChaCA_][6]  = -1;
		_CHAData[ChaMnH][7]  =  3; _CHAData[ChaLB_][7]  = -1; _CHAData[ChaRA_][7]  =  0; _CHAData[ChaCA_][7]  = -1;
		_CHAData[ChaMnH][8]  =  4; _CHAData[ChaLB_][8]  =  0; _CHAData[ChaRA_][8]  =  0; _CHAData[ChaCA_][8]  =  0;
		_CHAData[ChaMnH][9]  =  4; _CHAData[ChaLB_][9]  =  0; _CHAData[ChaRA_][9]  =  0; _CHAData[ChaCA_][9]  =  0;
		_CHAData[ChaMnH][10] =  4; _CHAData[ChaLB_][10] =  0; _CHAData[ChaRA_][10] =  0; _CHAData[ChaCA_][10] =  0;
		_CHAData[ChaMnH][11] =  5; _CHAData[ChaLB_][11] =  0; _CHAData[ChaRA_][11] =  0; _CHAData[ChaCA_][11] =  0;
		_CHAData[ChaMnH][12] =  5; _CHAData[ChaLB_][12] =  0; _CHAData[ChaRA_][12] =  1; _CHAData[ChaCA_][12] =  1;
		_CHAData[ChaMnH][13] =  6; _CHAData[ChaLB_][13] =  1; _CHAData[ChaRA_][13] =  2; _CHAData[ChaCA_][13] =  1;
		_CHAData[ChaMnH][14] =  7; _CHAData[ChaLB_][14] =  3; _CHAData[ChaRA_][14] =  3; _CHAData[ChaCA_][14] =  1;
		_CHAData[ChaMnH][15] =  8; _CHAData[ChaLB_][15] =  4; _CHAData[ChaRA_][15] =  5; _CHAData[ChaCA_][15] =  2;
		_CHAData[ChaMnH][16] = 10; _CHAData[ChaLB_][16] =  6; _CHAData[ChaRA_][16] =  6; _CHAData[ChaCA_][16] =  2;
		_CHAData[ChaMnH][17] = 15; _CHAData[ChaLB_][17] =  8; _CHAData[ChaRA_][17] =  7; _CHAData[ChaCA_][17] =  3;
		_CHAData[ChaMnH][18] = 20; _CHAData[ChaLB_][18] = 10; _CHAData[ChaRA_][18] =  8; _CHAData[ChaCA_][18] =  5;
		_CHAData[ChaMnH][19] = 25; _CHAData[ChaLB_][19] = 12; _CHAData[ChaRA_][19] =  9; _CHAData[ChaCA_][19] =  5;
		_CHAData[ChaMnH][20] = 30; _CHAData[ChaLB_][20] = 14; _CHAData[ChaRA_][20] = 10; _CHAData[ChaCA_][20] =  5;
		_CHAData[ChaMnH][21] = 35; _CHAData[ChaLB_][21] = 16; _CHAData[ChaRA_][21] = 11; _CHAData[ChaCA_][21] =  5;
		_CHAData[ChaMnH][22] = 40; _CHAData[ChaLB_][22] = 18; _CHAData[ChaRA_][22] = 12; _CHAData[ChaCA_][22] =  5;
		_CHAData[ChaMnH][23] = 45; _CHAData[ChaLB_][23] = 20; _CHAData[ChaRA_][23] = 13; _CHAData[ChaCA_][23] =  5;
		_CHAData[ChaMnH][24] = 50; _CHAData[ChaLB_][24] = 20; _CHAData[ChaRA_][24] = 14; _CHAData[ChaCA_][24] =  5;

		//ComApp_ enumeration is still under consideration. Included
		//to hold in place, but not used - M. White 29 June, 2019
		_COMData[ComIR_][0]	 = -4;	_COMData[ComApp_][0]  = 0;
		_COMData[ComIR_][1]	 = -4;	_COMData[ComApp_][1]  = 0;
		_COMData[ComIR_][2]	 = -3;	_COMData[ComApp_][2]  = 0;
		_COMData[ComIR_][3]	 = -3;	_COMData[ComApp_][3]  = 0;
		_COMData[ComIR_][4]	 = -2;	_COMData[ComApp_][4]  = 0;
		_COMData[ComIR_][5]	 = -2;	_COMData[ComApp_][5]  = 0;
		_COMData[ComIR_][6]	 = -1;	_COMData[ComApp_][6]  = 0;
		_COMData[ComIR_][7]	 = -1;	_COMData[ComApp_][7]  = 0;
		_COMData[ComIR_][8]	 = -1;	_COMData[ComApp_][8]  = 0;
		_COMData[ComIR_][9]	 = 0;	_COMData[ComApp_][9]  = 0;
		_COMData[ComIR_][10] = 0;	_COMData[ComApp_][10] = 0;
		_COMData[ComIR_][11] = 0;	_COMData[ComApp_][11] = 0;
		_COMData[ComIR_][12] = 0;	_COMData[ComApp_][12] = 0;
		_COMData[ComIR_][13] = 1;	_COMData[ComApp_][13] = 0;
		_COMData[ComIR_][14] = 1;	_COMData[ComApp_][14] = 0;
		_COMData[ComIR_][15] = 2;	_COMData[ComApp_][15] = 0;
		_COMData[ComIR_][16] = 2;	_COMData[ComApp_][16] = 0;
		_COMData[ComIR_][17] = 3;	_COMData[ComApp_][17] = 0;
		_COMData[ComIR_][18] = 3;	_COMData[ComApp_][18] = 0;
		_COMData[ComIR_][19] = 4;	_COMData[ComApp_][19] = 0;
		_COMData[ComIR_][20] = 4;	_COMData[ComApp_][20] = 0;
		_COMData[ComIR_][21] = 5;	_COMData[ComApp_][21] = 0;
		_COMData[ComIR_][22] = 5;	_COMData[ComApp_][22] = 0;
		_COMData[ComIR_][23] = 6;	_COMData[ComApp_][23] = 0;
		_COMData[ComIR_][24] = 6;	_COMData[ComApp_][24] = 0;
	}
	_MonData = new MonsterDataStruct[MAXMONS];
	//Initiate data - M. White 30 June, 2019
	for(i = 0; i < MAXMONS; i++)
	{
		_MonData[i].MonName = "";
		for(int j = 0; j < MonDataMAX; j++) _MonData[i].data[j] = 0;
	}
	/*
		A0  B1  C2  D3  E4  F5  G6  H7  I8  J9  K10 L11 M12 
		N13 O14 P15 Q16 R17 S18 T19	U20 V21 W22 X23 Y24 Z25
		
		alignLG = 0, alignLN, alignLE, alignNG, alignNN, alignNE, alignCG, alignCN, alignCE
	*/
	//This variable is used as a search parameter in the game Editor so that Users 
	//can jump to the first instance of a creature with it as the first letter in
	//their listing...
	//Initialize value to represent first letter of the first monster's name
	//Change this as more monsters are added - M. White 23 August, 2019
	//NOTE: Any data assigned a value of -1, represents a "don't develop yet, but 
	//have in place for future use"
	_SingleChar = 'B';
	{
	{
		_MonData[rBat_Common].MonName						= "Bat, Common";
		_MonData[rBat_Common].data[MonClimate1]				= -1;
		_MonData[rBat_Common].data[MonClimate2]				= -1;
		_MonData[rBat_Common].data[MonTerrain1]				= -1;
		_MonData[rBat_Common].data[MonTerrain2]				= -1;
		_MonData[rBat_Common].data[MonFrequency]			= -1;
		_MonData[rBat_Common].data[MonOrganization]			= -1;
		_MonData[rBat_Common].data[MonCycle]				= -1;
		_MonData[rBat_Common].data[MonDiet]					= -1;
		_MonData[rBat_Common].data[MonBaseInt]				= 1;
		_MonData[rBat_Common].data[MonIntMod]				= 0;
		_MonData[rBat_Common].data[MonTreasureC]			= -1;
		_MonData[rBat_Common].data[MonTreasureL]			= -1;
		_MonData[rBat_Common].data[MonAlign]				= alignNN;
		_MonData[rBat_Common].data[MonNumAppN]				= 100;
		_MonData[rBat_Common].data[MonNumAppO]				= 0;
		_MonData[rBat_Common].data[MonAC]					= 8;
		_MonData[rBat_Common].data[MonMvW]					= 1;
		_MonData[rBat_Common].data[MonMvS]					= 0;
		_MonData[rBat_Common].data[MonMvF]					= 24;
		_MonData[rBat_Common].data[MonMvB]					= 0;
		_MonData[rBat_Common].data[MonMvFC]					= 1;/*B*/
		_MonData[rBat_Common].data[MonNumHD]				= 1;
		_MonData[rBat_Common].data[MonHDMod]				= -6;
		_MonData[rBat_Common].data[MonTHAC0]				= 20;
		_MonData[rBat_Common].data[MonNumAttN]				= 1;
		_MonData[rBat_Common].data[MonNumAttW]				= 0;
		_MonData[rBat_Common].data[MonDmgN01]				= 1;
		_MonData[rBat_Common].data[MonDmgN02]				= 0;
		_MonData[rBat_Common].data[MonDmgN03]				= 0;
		_MonData[rBat_Common].data[MonDmgW_base]			= 0;
		_MonData[rBat_Common].data[MonDmgW_mult]			= 0;
		_MonData[rBat_Common].data[MonMR]					= 0;
		_MonData[rBat_Common].data[MonSize]					= -1;
		_MonData[rBat_Common].data[MonMorale]				= 4;
		_MonData[rBat_Common].data[MonXP]					= 15;
	}
	{
		_MonData[rBhut].MonName							= "Bhut";
		_MonData[rBhut].data[MonClimate1]				= -1;
		_MonData[rBhut].data[MonClimate2]				= -1;
		_MonData[rBhut].data[MonTerrain1]				= -1;
		_MonData[rBhut].data[MonTerrain2]				= -1;
		_MonData[rBhut].data[MonFrequency]				= -1;
		_MonData[rBhut].data[MonOrganization]			= -1;
		_MonData[rBhut].data[MonCycle]					= -1;
		_MonData[rBhut].data[MonDiet]					= -1;
		_MonData[rBhut].data[MonBaseInt]				= 12;
		_MonData[rBhut].data[MonIntMod]					= 0;
		_MonData[rBhut].data[MonTreasureC]				= -1;
		_MonData[rBhut].data[MonTreasureL]				= -1;
		_MonData[rBhut].data[MonAlign]					= alignLE;	
		_MonData[rBhut].data[MonNumAppN]				= 1;
		_MonData[rBhut].data[MonNumAppO]				= 0;	
		_MonData[rBhut].data[MonAC]						= 4;
		_MonData[rBhut].data[MonMvW]					= 12;
		_MonData[rBhut].data[MonMvS]					= 0;
		_MonData[rBhut].data[MonMvF]					= 0;
		_MonData[rBhut].data[MonMvB]					= 0;
		_MonData[rBhut].data[MonMvFC]					= -1;
		_MonData[rBhut].data[MonNumHD]					= 7;
		_MonData[rBhut].data[MonHDMod]					= 2;
		_MonData[rBhut].data[MonTHAC0]					= 13;
		_MonData[rBhut].data[MonNumAttN]				= 3;
		_MonData[rBhut].data[MonNumAttW]				= 0;
		_MonData[rBhut].data[MonDmgN01]					= 4;
		_MonData[rBhut].data[MonDmgN02]					= 4;
		_MonData[rBhut].data[MonDmgN03]					= 6;
		_MonData[rBhut].data[MonDmgW_base]				= 0;
		_MonData[rBhut].data[MonDmgW_mult]				= 0;
		_MonData[rBhut].data[MonMR]						= 0;
		_MonData[rBhut].data[MonSize]					= -1;
		_MonData[rBhut].data[MonMorale]					= 7;
		_MonData[rBhut].data[MonXP]						= 1400;
	}
	{
		_MonData[rBird_Chicken].MonName					= "Bird, Chicken";
		_MonData[rBird_Chicken].data[MonClimate1]		= -1;
		_MonData[rBird_Chicken].data[MonClimate2]		= -1;
		_MonData[rBird_Chicken].data[MonTerrain1]		= -1;
		_MonData[rBird_Chicken].data[MonTerrain2]		= -1;
		_MonData[rBird_Chicken].data[MonFrequency]		= -1;
		_MonData[rBird_Chicken].data[MonOrganization]	= -1;
		_MonData[rBird_Chicken].data[MonCycle]			= -1;
		_MonData[rBird_Chicken].data[MonDiet]			= -1;
		_MonData[rBird_Chicken].data[MonBaseInt]		= 1;
		_MonData[rBird_Chicken].data[MonIntMod]			= 0;
		_MonData[rBird_Chicken].data[MonTreasureC]		= -1;
		_MonData[rBird_Chicken].data[MonTreasureL]		= -1;
		_MonData[rBird_Chicken].data[MonAlign]			= alignNN;
		_MonData[rBird_Chicken].data[MonNumAppN]		= 1;
		_MonData[rBird_Chicken].data[MonNumAppO]		= 0;
		_MonData[rBird_Chicken].data[MonAC]				= 10;
		_MonData[rBird_Chicken].data[MonMvW]			= 14;
		_MonData[rBird_Chicken].data[MonMvS]			= 0;
		_MonData[rBird_Chicken].data[MonMvF]			= 24;
		_MonData[rBird_Chicken].data[MonMvB]			= 0;
		_MonData[rBird_Chicken].data[MonMvFC]			= 0;/*A*/
		_MonData[rBird_Chicken].data[MonNumHD]			= 1;
		_MonData[rBird_Chicken].data[MonHDMod]			= -7;
		_MonData[rBird_Chicken].data[MonTHAC0]			= 20;
		_MonData[rBird_Chicken].data[MonNumAttN]		= 1;
		_MonData[rBird_Chicken].data[MonNumAttW]		= 0;
		_MonData[rBird_Chicken].data[MonDmgN01]			= 1;
		_MonData[rBird_Chicken].data[MonDmgN02]			= 0;
		_MonData[rBird_Chicken].data[MonDmgN03]			= 0;
		_MonData[rBird_Chicken].data[MonDmgW_base]		= 0;
		_MonData[rBird_Chicken].data[MonDmgW_mult]		= 0;
		_MonData[rBird_Chicken].data[MonMR]				= 0;
		_MonData[rBird_Chicken].data[MonSize]			= -1;
		_MonData[rBird_Chicken].data[MonMorale]			= 3;
		_MonData[rBird_Chicken].data[MonXP]				= 1;
	}
	{
		_MonData[rBird_ChickenSuper].MonName			= "Bird, Chicken (Super)";
		_MonData[rBird_ChickenSuper].data[MonClimate1]	= -1;
		_MonData[rBird_ChickenSuper].data[MonClimate2]	= -1;
		_MonData[rBird_ChickenSuper].data[MonTerrain1]	= -1;
		_MonData[rBird_ChickenSuper].data[MonTerrain2]	= -1;
		_MonData[rBird_ChickenSuper].data[MonFrequency]	= -1;
		_MonData[rBird_ChickenSuper].data[MonOrganization]= -1;
		_MonData[rBird_ChickenSuper].data[MonCycle]		= -1;
		_MonData[rBird_ChickenSuper].data[MonDiet]		= -1;
		_MonData[rBird_ChickenSuper].data[MonBaseInt]	= 25;
		_MonData[rBird_ChickenSuper].data[MonIntMod]	= 0;
		_MonData[rBird_ChickenSuper].data[MonTreasureC]	= -1;
		_MonData[rBird_ChickenSuper].data[MonTreasureL]	= -1;
		_MonData[rBird_ChickenSuper].data[MonAlign]		= alignNN;
		_MonData[rBird_ChickenSuper].data[MonNumAppN]	= 1;
		_MonData[rBird_ChickenSuper].data[MonNumAppO]	= 0;
		_MonData[rBird_ChickenSuper].data[MonAC]		= -10;
		_MonData[rBird_ChickenSuper].data[MonMvW]		= 20;
		_MonData[rBird_ChickenSuper].data[MonMvS]		= 0;
		_MonData[rBird_ChickenSuper].data[MonMvF]		= 48;
		_MonData[rBird_ChickenSuper].data[MonMvB]		= 0;
		_MonData[rBird_ChickenSuper].data[MonMvFC]		= 0;/*A*/
		_MonData[rBird_ChickenSuper].data[MonNumHD]		= 30;
		_MonData[rBird_ChickenSuper].data[MonHDMod]		= 0;
		_MonData[rBird_ChickenSuper].data[MonTHAC0]		= -20;
		_MonData[rBird_ChickenSuper].data[MonNumAttN]	= 1;
		_MonData[rBird_ChickenSuper].data[MonNumAttW]	= 0;
		_MonData[rBird_ChickenSuper].data[MonDmgN01]	= 30;
		_MonData[rBird_ChickenSuper].data[MonDmgN02]	= 0;
		_MonData[rBird_ChickenSuper].data[MonDmgN03]	= 0;
		_MonData[rBird_ChickenSuper].data[MonDmgW_base]	= 0;
		_MonData[rBird_ChickenSuper].data[MonDmgW_mult]	= 0;
		_MonData[rBird_ChickenSuper].data[MonMR]		= 100;
		_MonData[rBird_ChickenSuper].data[MonSize]		= -1;
		_MonData[rBird_ChickenSuper].data[MonMorale]	= 20;
		_MonData[rBird_ChickenSuper].data[MonXP]		= 400000;
	}
	{
		_MonData[rBugbear_Normal].MonName				= "Bugbear";
		_MonData[rBugbear_Normal].data[MonClimate1]		= -1;
		_MonData[rBugbear_Normal].data[MonClimate2]		= -1;
		_MonData[rBugbear_Normal].data[MonTerrain1]		= -1;
		_MonData[rBugbear_Normal].data[MonTerrain2]		= -1;
		_MonData[rBugbear_Normal].data[MonFrequency]	= -1;
		_MonData[rBugbear_Normal].data[MonOrganization]	= -1;
		_MonData[rBugbear_Normal].data[MonCycle]		= -1;
		_MonData[rBugbear_Normal].data[MonDiet]			= -1;
		_MonData[rBugbear_Normal].data[MonBaseInt]		= 5;
		_MonData[rBugbear_Normal].data[MonIntMod]		= 6;
		_MonData[rBugbear_Normal].data[MonTreasureC]	= 10;/*K*/
		_MonData[rBugbear_Normal].data[MonTreasureL]	= 1;//B
		_MonData[rBugbear_Normal].data[MonAlign]		= alignCE;
		_MonData[rBugbear_Normal].data[MonNumAppN]		= 8;
		_MonData[rBugbear_Normal].data[MonNumAppO]		= -1;	
		_MonData[rBugbear_Normal].data[MonAC]			= 5;
		_MonData[rBugbear_Normal].data[MonMvW]			= 9;
		_MonData[rBugbear_Normal].data[MonMvS]			= 0;
		_MonData[rBugbear_Normal].data[MonMvF]			= 0;
		_MonData[rBugbear_Normal].data[MonMvB]			= 0;
		_MonData[rBugbear_Normal].data[MonMvFC]			= -1;
		_MonData[rBugbear_Normal].data[MonNumHD]		= 3;
		_MonData[rBugbear_Normal].data[MonHDMod]		= 1;
		_MonData[rBugbear_Normal].data[MonTHAC0]		= 17;
		_MonData[rBugbear_Normal].data[MonNumAttN]		= 0;
		_MonData[rBugbear_Normal].data[MonNumAttW]		= 1;
		_MonData[rBugbear_Normal].data[MonDmgN01]		= 0;
		_MonData[rBugbear_Normal].data[MonDmgN02]		= 0;
		_MonData[rBugbear_Normal].data[MonDmgN03]		= 0;
		_MonData[rBugbear_Normal].data[MonDmgW_base]	= 8;
		_MonData[rBugbear_Normal].data[MonDmgW_mult]	= 1;
		_MonData[rBugbear_Normal].data[MonMR]			= 0;
		_MonData[rBugbear_Normal].data[MonSize]			= -1;
		_MonData[rBugbear_Normal].data[MonMorale]		= 12;
		_MonData[rBugbear_Normal].data[MonXP]			= 120;
	}
	{
		_MonData[rBugbear_Young].MonName				= "Bugbear, Young";
		_MonData[rBugbear_Young].data[MonClimate1]		= -1;
		_MonData[rBugbear_Young].data[MonClimate2]		= -1;
		_MonData[rBugbear_Young].data[MonTerrain1]		= -1;
		_MonData[rBugbear_Young].data[MonTerrain2]		= -1;
		_MonData[rBugbear_Young].data[MonFrequency]		= -1;
		_MonData[rBugbear_Young].data[MonOrganization]	= -1;
		_MonData[rBugbear_Young].data[MonCycle]			= -1;
		_MonData[rBugbear_Young].data[MonDiet]			= -1;
		_MonData[rBugbear_Young].data[MonBaseInt]		= 5;
		_MonData[rBugbear_Young].data[MonIntMod]		= 6;
		_MonData[rBugbear_Young].data[MonTreasureC]		= 10;/*K*/
		_MonData[rBugbear_Young].data[MonTreasureL]		= 1;//B
		_MonData[rBugbear_Young].data[MonAlign]			= alignCE;
		_MonData[rBugbear_Young].data[MonNumAppN]		= 8;
		_MonData[rBugbear_Young].data[MonNumAppO]		= -1;
		_MonData[rBugbear_Young].data[MonAC]			= 5;
		_MonData[rBugbear_Young].data[MonMvW]			= 9;
		_MonData[rBugbear_Young].data[MonMvS]			= 0;
		_MonData[rBugbear_Young].data[MonMvF]			= 0;
		_MonData[rBugbear_Young].data[MonMvB]			= 0;
		_MonData[rBugbear_Young].data[MonMvFC]			= -1;
		_MonData[rBugbear_Young].data[MonNumHD]			= 1;
		_MonData[rBugbear_Young].data[MonHDMod]			= 1;
		_MonData[rBugbear_Young].data[MonTHAC0]			= 19;
		_MonData[rBugbear_Young].data[MonNumAttN]		= 0;
		_MonData[rBugbear_Young].data[MonNumAttW]		= 1;
		_MonData[rBugbear_Young].data[MonDmgN01]		= 0;
		_MonData[rBugbear_Young].data[MonDmgN02]		= 0;
		_MonData[rBugbear_Young].data[MonDmgN03]		= 0;
		_MonData[rBugbear_Young].data[MonDmgW_base]		= 8;
		_MonData[rBugbear_Young].data[MonDmgW_mult]		= 1;
		_MonData[rBugbear_Young].data[MonMR]			= 0;
		_MonData[rBugbear_Young].data[MonSize]			= -1;
		_MonData[rBugbear_Young].data[MonMorale]		= 12;
		_MonData[rBugbear_Young].data[MonXP]			= 60;
	}
	{
		_MonData[rBugbear_Guard].MonName				= "Bugbear, Guard";
		_MonData[rBugbear_Guard].data[MonClimate1]		= -1;
		_MonData[rBugbear_Guard].data[MonClimate2]		= -1;
		_MonData[rBugbear_Guard].data[MonTerrain1]		= -1;
		_MonData[rBugbear_Guard].data[MonTerrain2]		= -1;
		_MonData[rBugbear_Guard].data[MonFrequency]		= -1;
		_MonData[rBugbear_Guard].data[MonOrganization]	= -1;
		_MonData[rBugbear_Guard].data[MonCycle]			= -1;
		_MonData[rBugbear_Guard].data[MonDiet]			= -1;
		_MonData[rBugbear_Guard].data[MonBaseInt]		= 5;
		_MonData[rBugbear_Guard].data[MonIntMod]		= 6;
		_MonData[rBugbear_Guard].data[MonTreasureC]		= 10;/*K*/
		_MonData[rBugbear_Guard].data[MonTreasureL]		= 1;//B
		_MonData[rBugbear_Guard].data[MonAlign]			= alignCE;
		_MonData[rBugbear_Guard].data[MonNumAppN]		= 8;
		_MonData[rBugbear_Guard].data[MonNumAppO]		= -1;
		_MonData[rBugbear_Guard].data[MonAC]			= 5;
		_MonData[rBugbear_Guard].data[MonMvW]			= 9;
		_MonData[rBugbear_Guard].data[MonMvS]			= 0;
		_MonData[rBugbear_Guard].data[MonMvF]			= 0;
		_MonData[rBugbear_Guard].data[MonMvB]			= 0;
		_MonData[rBugbear_Guard].data[MonMvFC]			= -1;
		_MonData[rBugbear_Guard].data[MonNumHD]			= 4;
		_MonData[rBugbear_Guard].data[MonHDMod]			= 1;
		_MonData[rBugbear_Guard].data[MonTHAC0]			= 17;
		_MonData[rBugbear_Guard].data[MonNumAttN]		= 0;
		_MonData[rBugbear_Guard].data[MonNumAttW]		= 1;
		_MonData[rBugbear_Guard].data[MonDmgN01]		= 0;
		_MonData[rBugbear_Guard].data[MonDmgN02]		= 0;
		_MonData[rBugbear_Guard].data[MonDmgN03]		= 0;
		_MonData[rBugbear_Guard].data[MonDmgW_base]		= 8;
		_MonData[rBugbear_Guard].data[MonDmgW_mult]		= 1;
		_MonData[rBugbear_Guard].data[MonMR]			= 0;
		_MonData[rBugbear_Guard].data[MonSize]			= -1;
		_MonData[rBugbear_Guard].data[MonMorale]		= 12;
		_MonData[rBugbear_Guard].data[MonXP]			= 175;
	}
	{
		_MonData[rBugbear_Shaman].MonName				= "Bugbear, Shaman";
		_MonData[rBugbear_Shaman].data[MonClimate1]		= -1;
		_MonData[rBugbear_Shaman].data[MonClimate2]		= -1;
		_MonData[rBugbear_Shaman].data[MonTerrain1]		= -1;
		_MonData[rBugbear_Shaman].data[MonTerrain2]		= -1;
		_MonData[rBugbear_Shaman].data[MonFrequency]	= -1;
		_MonData[rBugbear_Shaman].data[MonOrganization]	= -1;
		_MonData[rBugbear_Shaman].data[MonCycle]		= -1;
		_MonData[rBugbear_Shaman].data[MonDiet]			= -1;
		_MonData[rBugbear_Shaman].data[MonBaseInt]		= 5;
		_MonData[rBugbear_Shaman].data[MonIntMod]		= 6;
		_MonData[rBugbear_Shaman].data[MonTreasureC]	= 10;/*K*/
		_MonData[rBugbear_Shaman].data[MonTreasureL]	= 1;//B
		_MonData[rBugbear_Shaman].data[MonAlign]		= alignCE;
		_MonData[rBugbear_Shaman].data[MonNumAppN]		= 8;
		_MonData[rBugbear_Shaman].data[MonNumAppO]		= -1;
		_MonData[rBugbear_Shaman].data[MonAC]			= 5;
		_MonData[rBugbear_Shaman].data[MonMvW]			= 9;
		_MonData[rBugbear_Shaman].data[MonMvS]			= 0;
		_MonData[rBugbear_Shaman].data[MonMvF]			= 0;
		_MonData[rBugbear_Shaman].data[MonMvB]			= 0;
		_MonData[rBugbear_Shaman].data[MonMvFC]			= -1;
		_MonData[rBugbear_Shaman].data[MonNumHD]		= 3;
		_MonData[rBugbear_Shaman].data[MonHDMod]		= 1;
		_MonData[rBugbear_Shaman].data[MonTHAC0]		= 17;
		_MonData[rBugbear_Shaman].data[MonNumAttN]		= 0;
		_MonData[rBugbear_Shaman].data[MonNumAttW]		= 1;
		_MonData[rBugbear_Shaman].data[MonDmgN01]		= 0;
		_MonData[rBugbear_Shaman].data[MonDmgN02]		= 0;
		_MonData[rBugbear_Shaman].data[MonDmgN03]		= 0;
		_MonData[rBugbear_Shaman].data[MonDmgW_base]	= 8;
		_MonData[rBugbear_Shaman].data[MonDmgW_mult]	= 1;
		_MonData[rBugbear_Shaman].data[MonMR]			= 0;
		_MonData[rBugbear_Shaman].data[MonSize]			= -1;
		_MonData[rBugbear_Shaman].data[MonMorale]		= 12;
		_MonData[rBugbear_Shaman].data[MonXP]			= 175;
	}
	{
		_MonData[rBulette].MonName						= "Bulette";
		_MonData[rBulette].data[MonClimate1]			= -1;
		_MonData[rBulette].data[MonClimate2]			= -1;
		_MonData[rBulette].data[MonTerrain1]			= -1;
		_MonData[rBulette].data[MonTerrain2]			= -1;
		_MonData[rBulette].data[MonFrequency]			= -1;
		_MonData[rBulette].data[MonOrganization]		= -1;
		_MonData[rBulette].data[MonCycle]				= -1;
		_MonData[rBulette].data[MonDiet]				= -1;
		_MonData[rBulette].data[MonBaseInt]				= 1;
		_MonData[rBulette].data[MonIntMod]				= 0;
		_MonData[rBulette].data[MonTreasureC]			= -1;
		_MonData[rBulette].data[MonTreasureL]			= -1;
		_MonData[rBulette].data[MonAlign]				= alignNN;
		_MonData[rBulette].data[MonNumAppN]				= 2;
		_MonData[rBulette].data[MonNumAppO]				= 0;
		_MonData[rBulette].data[MonAC]					= -2;
		_MonData[rBulette].data[MonMvW]					= 14;
		_MonData[rBulette].data[MonMvS]					= 0;
		_MonData[rBulette].data[MonMvF]					= 0;
		_MonData[rBulette].data[MonMvB]					= 3;
		_MonData[rBulette].data[MonMvFC]				= -1;
		_MonData[rBulette].data[MonNumHD]				= 9;
		_MonData[rBulette].data[MonHDMod]				= 0;
		_MonData[rBulette].data[MonTHAC0]				= 11;
		_MonData[rBulette].data[MonNumAttN]				= 3;
		_MonData[rBulette].data[MonNumAttW]				= 0;
		_MonData[rBulette].data[MonDmgN01]				= 18;
		_MonData[rBulette].data[MonDmgN02]				= 18;
		_MonData[rBulette].data[MonDmgN03]				= 10;
		_MonData[rBulette].data[MonDmgW_base]			= 0;
		_MonData[rBulette].data[MonDmgW_mult]			= 0;
		_MonData[rBulette].data[MonMR]					= 0;
		_MonData[rBulette].data[MonSize]				= -1;
		_MonData[rBulette].data[MonMorale]				= 11;
		_MonData[rBulette].data[MonXP]					= 4000;
	}
	{
		_MonData[rFrog_Giant03].MonName					= "Frog, Giant";
		_MonData[rFrog_Giant03].data[MonClimate1]		= -1;
		_MonData[rFrog_Giant03].data[MonClimate2]		= -1;
		_MonData[rFrog_Giant03].data[MonTerrain1]		= -1;
		_MonData[rFrog_Giant03].data[MonTerrain2]		= -1;
		_MonData[rFrog_Giant03].data[MonFrequency]		= -1;
		_MonData[rFrog_Giant03].data[MonOrganization]	= -1;
		_MonData[rFrog_Giant03].data[MonCycle]			= -1;
		_MonData[rFrog_Giant03].data[MonDiet]			= -1;
		_MonData[rFrog_Giant03].data[MonBaseInt]		= 0;
		_MonData[rFrog_Giant03].data[MonIntMod]			= 0;
		_MonData[rFrog_Giant03].data[MonTreasureC]		= -1;
		_MonData[rFrog_Giant03].data[MonTreasureL]		= -1;
		_MonData[rFrog_Giant03].data[MonAlign]			= alignNN;	
		_MonData[rFrog_Giant03].data[MonNumAppN]		= 40;
		_MonData[rFrog_Giant03].data[MonNumAppO]		= 0;
		_MonData[rFrog_Giant03].data[MonAC]				= 7;
		_MonData[rFrog_Giant03].data[MonMvW]			= 3;
		_MonData[rFrog_Giant03].data[MonMvS]			= 9;
		_MonData[rFrog_Giant03].data[MonMvF]			= 0;
		_MonData[rFrog_Giant03].data[MonMvB]			= 0;
		_MonData[rFrog_Giant03].data[MonMvFC]			= -1;
		_MonData[rFrog_Giant03].data[MonNumHD]			= 3;
		_MonData[rFrog_Giant03].data[MonHDMod]			= 0;
		_MonData[rFrog_Giant03].data[MonTHAC0]			= 16;
		_MonData[rFrog_Giant03].data[MonNumAttN]		= 1;
		_MonData[rFrog_Giant03].data[MonNumAttW]		= 0;
		_MonData[rFrog_Giant03].data[MonDmgN01]			= 8;
		_MonData[rFrog_Giant03].data[MonDmgN02]			= 0;
		_MonData[rFrog_Giant03].data[MonDmgN03]			= 0;
		_MonData[rFrog_Giant03].data[MonDmgW_base]		= 0;
		_MonData[rFrog_Giant03].data[MonDmgW_mult]		= 0;
		_MonData[rFrog_Giant03].data[MonMR]				= 0;
		_MonData[rFrog_Giant03].data[MonSize]			= -1;
		_MonData[rFrog_Giant03].data[MonMorale]			= 8;
		_MonData[rFrog_Giant03].data[MonXP]				= 270;
	}
	{
		_MonData[rFungus_Violet].MonName				= "Fungus, Violet";
		_MonData[rFungus_Violet].data[MonClimate1]		= -1;
		_MonData[rFungus_Violet].data[MonClimate2]		= -1;
		_MonData[rFungus_Violet].data[MonTerrain1]		= -1;
		_MonData[rFungus_Violet].data[MonTerrain2]		= -1;
		_MonData[rFungus_Violet].data[MonFrequency]		= -1;
		_MonData[rFungus_Violet].data[MonOrganization]	= -1;
		_MonData[rFungus_Violet].data[MonCycle]			= -1;
		_MonData[rFungus_Violet].data[MonDiet]			= -1;
		_MonData[rFungus_Violet].data[MonBaseInt]		= 0;
		_MonData[rFungus_Violet].data[MonIntMod]		= 0;
		_MonData[rFungus_Violet].data[MonTreasureC]		= -1;
		_MonData[rFungus_Violet].data[MonTreasureL]		= -1;
		_MonData[rFungus_Violet].data[MonAlign]			= alignNN;
		_MonData[rFungus_Violet].data[MonNumAppN]		= 4;
		_MonData[rFungus_Violet].data[MonNumAppO]		= 0;
		_MonData[rFungus_Violet].data[MonAC]			= 7;
		_MonData[rFungus_Violet].data[MonMvW]			= 1;
		_MonData[rFungus_Violet].data[MonMvS]			= 0;
		_MonData[rFungus_Violet].data[MonMvF]			= 0;
		_MonData[rFungus_Violet].data[MonMvB]			= 0;
		_MonData[rFungus_Violet].data[MonMvFC]			= -1;
		_MonData[rFungus_Violet].data[MonNumHD]			= 3;
		_MonData[rFungus_Violet].data[MonHDMod]			= 0;
		_MonData[rFungus_Violet].data[MonTHAC0]			= 17;
		_MonData[rFungus_Violet].data[MonNumAttN]		= 3;
		_MonData[rFungus_Violet].data[MonNumAttW]		= 0;
		_MonData[rFungus_Violet].data[MonDmgN01]		= 0;
		_MonData[rFungus_Violet].data[MonDmgN02]		= 0;
		_MonData[rFungus_Violet].data[MonDmgN03]		= 0;
		_MonData[rFungus_Violet].data[MonDmgW_base]		= 0;
		_MonData[rFungus_Violet].data[MonDmgW_mult]		= 0;
		_MonData[rFungus_Violet].data[MonMR]			= 0;
		_MonData[rFungus_Violet].data[MonSize]			= -1;
		_MonData[rFungus_Violet].data[MonMorale]		= 12;
		_MonData[rFungus_Violet].data[MonXP]			= 175;
	}
	{
		_MonData[rFungus_Shrieker].MonName				= "Fungus, Shrieker";
		_MonData[rFungus_Shrieker].data[MonClimate1]	= -1;
		_MonData[rFungus_Shrieker].data[MonClimate2]	= -1;
		_MonData[rFungus_Shrieker].data[MonTerrain1]	= -1;
		_MonData[rFungus_Shrieker].data[MonTerrain2]	= -1;
		_MonData[rFungus_Shrieker].data[MonFrequency]	= -1;
		_MonData[rFungus_Shrieker].data[MonOrganization]= -1;
		_MonData[rFungus_Shrieker].data[MonCycle]		= -1;
		_MonData[rFungus_Shrieker].data[MonDiet]		= -1;
		_MonData[rFungus_Shrieker].data[MonBaseInt]		= 0;
		_MonData[rFungus_Shrieker].data[MonIntMod]		= 0;
		_MonData[rFungus_Shrieker].data[MonTreasureC]	= -1;
		_MonData[rFungus_Shrieker].data[MonTreasureL]	= -1;
		_MonData[rFungus_Shrieker].data[MonAlign]		= alignNN;
		_MonData[rFungus_Shrieker].data[MonNumAppN]		= 8;
		_MonData[rFungus_Shrieker].data[MonNumAppO]		= 0;
		_MonData[rFungus_Shrieker].data[MonAC]			= 7;
		_MonData[rFungus_Shrieker].data[MonMvW]			= 1;
		_MonData[rFungus_Shrieker].data[MonMvS]			= 0;
		_MonData[rFungus_Shrieker].data[MonMvF]			= 0;
		_MonData[rFungus_Shrieker].data[MonMvB]			= 0;
		_MonData[rFungus_Shrieker].data[MonMvFC]		= -1;
		_MonData[rFungus_Shrieker].data[MonNumHD]		= 3;
		_MonData[rFungus_Shrieker].data[MonHDMod]		= 0;
		_MonData[rFungus_Shrieker].data[MonTHAC0]		= 17;
		_MonData[rFungus_Shrieker].data[MonNumAttN]		= 1;
		_MonData[rFungus_Shrieker].data[MonNumAttW]		= 0;
		_MonData[rFungus_Shrieker].data[MonDmgN01]		= 8;
		_MonData[rFungus_Shrieker].data[MonDmgN02]		= 0;
		_MonData[rFungus_Shrieker].data[MonDmgN03]		= 0;
		_MonData[rFungus_Shrieker].data[MonDmgW_base]	= 0;
		_MonData[rFungus_Shrieker].data[MonDmgW_mult]	= 0;
		_MonData[rFungus_Shrieker].data[MonMR]			= 0;
		_MonData[rFungus_Shrieker].data[MonSize]		= -1;
		_MonData[rFungus_Shrieker].data[MonMorale]		= 12;
		_MonData[rFungus_Shrieker].data[MonXP]			= 120;
	}
	{
		_MonData[rFungus_GasSpore].MonName				= "Fungus, GasSpore";
		_MonData[rFungus_GasSpore].data[MonClimate1]	= -1;
		_MonData[rFungus_GasSpore].data[MonClimate2]	= -1;
		_MonData[rFungus_GasSpore].data[MonTerrain1]	= -1;
		_MonData[rFungus_GasSpore].data[MonTerrain2]	= -1;
		_MonData[rFungus_GasSpore].data[MonFrequency]	= -1;
		_MonData[rFungus_GasSpore].data[MonOrganization]= -1;
		_MonData[rFungus_GasSpore].data[MonCycle]		= -1;
		_MonData[rFungus_GasSpore].data[MonDiet]		= -1;
		_MonData[rFungus_GasSpore].data[MonBaseInt]		= 0;
		_MonData[rFungus_GasSpore].data[MonIntMod]		= 0;
		_MonData[rFungus_GasSpore].data[MonTreasureC]	= -1;
		_MonData[rFungus_GasSpore].data[MonTreasureL]	= -1;
		_MonData[rFungus_GasSpore].data[MonAlign]		= alignNN;
		_MonData[rFungus_GasSpore].data[MonNumAppN]		= 3;
		_MonData[rFungus_GasSpore].data[MonNumAppO]		= 0;
		_MonData[rFungus_GasSpore].data[MonAC]			= 9;
		_MonData[rFungus_GasSpore].data[MonMvW]			= 0;
		_MonData[rFungus_GasSpore].data[MonMvS]			= 0;
		_MonData[rFungus_GasSpore].data[MonMvF]			= 3;
		_MonData[rFungus_GasSpore].data[MonMvB]			= 0;
		_MonData[rFungus_GasSpore].data[MonMvFC]		= 0;/*A*/
		_MonData[rFungus_GasSpore].data[MonNumHD]		= 1;
		_MonData[rFungus_GasSpore].data[MonHDMod]		= -7;
		_MonData[rFungus_GasSpore].data[MonTHAC0]		= 20;
		_MonData[rFungus_GasSpore].data[MonNumAttN]		= 0;
		_MonData[rFungus_GasSpore].data[MonNumAttW]		= 0;
		_MonData[rFungus_GasSpore].data[MonDmgN01]		= 0;
		_MonData[rFungus_GasSpore].data[MonDmgN02]		= 0;
		_MonData[rFungus_GasSpore].data[MonDmgN03]		= 0;
		_MonData[rFungus_GasSpore].data[MonDmgW_base]	= 0;
		_MonData[rFungus_GasSpore].data[MonDmgW_mult]	= 0;
		_MonData[rFungus_GasSpore].data[MonMR]			= 0;
		_MonData[rFungus_GasSpore].data[MonSize]		= -1;
		_MonData[rFungus_GasSpore].data[MonMorale]		= 8;
		_MonData[rFungus_GasSpore].data[MonXP]			= 120;
	}
	{
		_MonData[rGnoll_Normal].MonName					= "Gnoll";
		_MonData[rGnoll_Normal].data[MonClimate1]		= -1;
		_MonData[rGnoll_Normal].data[MonClimate2]		= -1;
		_MonData[rGnoll_Normal].data[MonTerrain1]		= -1;
		_MonData[rGnoll_Normal].data[MonTerrain2]		= -1;
		_MonData[rGnoll_Normal].data[MonFrequency]		= -1;
		_MonData[rGnoll_Normal].data[MonOrganization]	= -1;
		_MonData[rGnoll_Normal].data[MonCycle]			= -1;
		_MonData[rGnoll_Normal].data[MonDiet]			= -1;
		_MonData[rGnoll_Normal].data[MonBaseInt]		= 5;
		_MonData[rGnoll_Normal].data[MonIntMod]			= 3;
		_MonData[rGnoll_Normal].data[MonTreasureC]		= 16;/*Q*/
		_MonData[rGnoll_Normal].data[MonTreasureL]		= 3;//D
		_MonData[rGnoll_Normal].data[MonAlign]			= alignCE;
		_MonData[rGnoll_Normal].data[MonNumAppN]		= 12;
		_MonData[rGnoll_Normal].data[MonNumAppO]		= 0;
		_MonData[rGnoll_Normal].data[MonAC]				= 5;
		_MonData[rGnoll_Normal].data[MonMvW]			= 9;
		_MonData[rGnoll_Normal].data[MonMvS]			= 0;
		_MonData[rGnoll_Normal].data[MonMvF]			= 0;
		_MonData[rGnoll_Normal].data[MonMvB]			= 0;
		_MonData[rGnoll_Normal].data[MonMvFC]			= -1;
		_MonData[rGnoll_Normal].data[MonNumHD]			= 2;
		_MonData[rGnoll_Normal].data[MonHDMod]			= 0;
		_MonData[rGnoll_Normal].data[MonTHAC0]			= 19;
		_MonData[rGnoll_Normal].data[MonNumAttN]		= 1;
		_MonData[rGnoll_Normal].data[MonNumAttW]		= 0;
		_MonData[rGnoll_Normal].data[MonDmgN01]			= 8;
		_MonData[rGnoll_Normal].data[MonDmgN02]			= 0;
		_MonData[rGnoll_Normal].data[MonDmgN03]			= 0;
		_MonData[rGnoll_Normal].data[MonDmgW_base]		= 0;
		_MonData[rGnoll_Normal].data[MonDmgW_mult]		= 0;
		_MonData[rGnoll_Normal].data[MonMR]				= 0;
		_MonData[rGnoll_Normal].data[MonSize]			= -1;
		_MonData[rGnoll_Normal].data[MonMorale]			= 11;
		_MonData[rGnoll_Normal].data[MonXP]				= 35;
	}
	{
		_MonData[rGnoll_Guard].MonName					= "Gnoll, Guard";
		_MonData[rGnoll_Guard].data[MonClimate1]		= -1;
		_MonData[rGnoll_Guard].data[MonClimate2]		= -1;
		_MonData[rGnoll_Guard].data[MonTerrain1]		= -1;
		_MonData[rGnoll_Guard].data[MonTerrain2]		= -1;
		_MonData[rGnoll_Guard].data[MonFrequency]		= -1;
		_MonData[rGnoll_Guard].data[MonOrganization]	= -1;
		_MonData[rGnoll_Guard].data[MonCycle]			= -1;
		_MonData[rGnoll_Guard].data[MonDiet]			= -1;
		_MonData[rGnoll_Guard].data[MonBaseInt]			= 5;
		_MonData[rGnoll_Guard].data[MonIntMod]			= 3;
		_MonData[rGnoll_Guard].data[MonTreasureC]		= 16;/*Q*/
		_MonData[rGnoll_Guard].data[MonTreasureL]		= 3;//D
		_MonData[rGnoll_Guard].data[MonAlign]			= alignCE;
		_MonData[rGnoll_Guard].data[MonNumAppN]			= 12;
		_MonData[rGnoll_Guard].data[MonNumAppO]			= 0;
		_MonData[rGnoll_Guard].data[MonAC]				= 5;
		_MonData[rGnoll_Guard].data[MonMvW]				= 9;
		_MonData[rGnoll_Guard].data[MonMvS]				= 0;
		_MonData[rGnoll_Guard].data[MonMvF]				= 0;
		_MonData[rGnoll_Guard].data[MonMvB]				= 0;
		_MonData[rGnoll_Guard].data[MonMvFC]			= -1;
		_MonData[rGnoll_Guard].data[MonNumHD]			= 3;
		_MonData[rGnoll_Guard].data[MonHDMod]			= 0;
		_MonData[rGnoll_Guard].data[MonTHAC0]			= 17;
		_MonData[rGnoll_Guard].data[MonNumAttN]			= 1;
		_MonData[rGnoll_Guard].data[MonNumAttW]			= 0;
		_MonData[rGnoll_Guard].data[MonDmgN01]			= 10;
		_MonData[rGnoll_Guard].data[MonDmgN02]			= 0;
		_MonData[rGnoll_Guard].data[MonDmgN03]			= 0;
		_MonData[rGnoll_Guard].data[MonDmgW_base]		= 0;
		_MonData[rGnoll_Guard].data[MonDmgW_mult]		= 0;
		_MonData[rGnoll_Guard].data[MonMR]				= 0;
		_MonData[rGnoll_Guard].data[MonSize]			= -1;
		_MonData[rGnoll_Guard].data[MonMorale]			= 11;
		_MonData[rGnoll_Guard].data[MonXP]				= 65;
	}
	{
		_MonData[rGnoll_Flind].MonName					= "Gnoll, Flind";
		_MonData[rGnoll_Flind].data[MonClimate1]		= -1;
		_MonData[rGnoll_Flind].data[MonClimate2]		= -1;
		_MonData[rGnoll_Flind].data[MonTerrain1]		= -1;
		_MonData[rGnoll_Flind].data[MonTerrain2]		= -1;
		_MonData[rGnoll_Flind].data[MonFrequency]		= -1;
		_MonData[rGnoll_Flind].data[MonOrganization]	= -1;
		_MonData[rGnoll_Flind].data[MonCycle]			= -1;
		_MonData[rGnoll_Flind].data[MonDiet]			= -1;
		_MonData[rGnoll_Flind].data[MonBaseInt]			= 8;
		_MonData[rGnoll_Flind].data[MonIntMod]			= 3;
		_MonData[rGnoll_Flind].data[MonTreasureC]		= -1;
		_MonData[rGnoll_Flind].data[MonTreasureL]		= 0;//A
		_MonData[rGnoll_Flind].data[MonAlign]			= alignLE;
		_MonData[rGnoll_Flind].data[MonNumAppN]			= 4;
		_MonData[rGnoll_Flind].data[MonNumAppO]			= 0;
		_MonData[rGnoll_Flind].data[MonAC]				= 5;
		_MonData[rGnoll_Flind].data[MonMvW]				= 12;
		_MonData[rGnoll_Flind].data[MonMvS]				= 0;
		_MonData[rGnoll_Flind].data[MonMvF]				= 0;
		_MonData[rGnoll_Flind].data[MonMvB]				= 0;
		_MonData[rGnoll_Flind].data[MonMvFC]			= -1;
		_MonData[rGnoll_Flind].data[MonNumHD]			= 2;
		_MonData[rGnoll_Flind].data[MonHDMod]			= 3;
		_MonData[rGnoll_Flind].data[MonTHAC0]			= 17;
		_MonData[rGnoll_Flind].data[MonNumAttN]			= 2;
		_MonData[rGnoll_Flind].data[MonNumAttW]			= 1;
		_MonData[rGnoll_Flind].data[MonDmgN01]			= 4;
		_MonData[rGnoll_Flind].data[MonDmgN02]			= 4;
		_MonData[rGnoll_Flind].data[MonDmgN03]			= 0;
		_MonData[rGnoll_Flind].data[MonDmgW_base]		= 8;
		_MonData[rGnoll_Flind].data[MonDmgW_mult]		= 1;
		_MonData[rGnoll_Flind].data[MonMR]				= 0;
		_MonData[rGnoll_Flind].data[MonSize]			= -1;
		_MonData[rGnoll_Flind].data[MonMorale]			= 12;
		_MonData[rGnoll_Flind].data[MonXP]				= 120;
	}
	{
		_MonData[rGnome_Rock].MonName					= "Gnome, Rock";
		_MonData[rGnome_Rock].data[MonClimate1]			= -1;
		_MonData[rGnome_Rock].data[MonClimate2]			= -1;
		_MonData[rGnome_Rock].data[MonTerrain1]			= -1;
		_MonData[rGnome_Rock].data[MonTerrain2]			= -1;
		_MonData[rGnome_Rock].data[MonFrequency]		= -1;
		_MonData[rGnome_Rock].data[MonOrganization]		= -1;
		_MonData[rGnome_Rock].data[MonCycle]			= -1;
		_MonData[rGnome_Rock].data[MonDiet]				= -1;
		_MonData[rGnome_Rock].data[MonBaseInt]			= 7;
		_MonData[rGnome_Rock].data[MonIntMod]			= 13;
		_MonData[rGnome_Rock].data[MonTreasureC]		= 12;/*M*/
		_MonData[rGnome_Rock].data[MonTreasureL]		= 2;//C
		_MonData[rGnome_Rock].data[MonAlign]			= alignNG;
		_MonData[rGnome_Rock].data[MonNumAppN]			= 12;
		_MonData[rGnome_Rock].data[MonNumAppO]			= 0;
		_MonData[rGnome_Rock].data[MonAC]				= 6;
		_MonData[rGnome_Rock].data[MonMvW]				= 6;
		_MonData[rGnome_Rock].data[MonMvS]				= 0;
		_MonData[rGnome_Rock].data[MonMvF]				= 0;
		_MonData[rGnome_Rock].data[MonMvB]				= 0;
		_MonData[rGnome_Rock].data[MonMvFC]				= -1;
		_MonData[rGnome_Rock].data[MonNumHD]			= 1;
		_MonData[rGnome_Rock].data[MonHDMod]			= 0;
		_MonData[rGnome_Rock].data[MonTHAC0]			= 19;
		_MonData[rGnome_Rock].data[MonNumAttN]			= 0;
		_MonData[rGnome_Rock].data[MonNumAttW]			= 1;
		_MonData[rGnome_Rock].data[MonDmgN01]			= 0;
		_MonData[rGnome_Rock].data[MonDmgN02]			= 0;
		_MonData[rGnome_Rock].data[MonDmgN03]			= 0;
		_MonData[rGnome_Rock].data[MonDmgW_base]		= 6;
		_MonData[rGnome_Rock].data[MonDmgW_mult]		= 1;
		_MonData[rGnome_Rock].data[MonMR]				= 0;
		_MonData[rGnome_Rock].data[MonSize]				= -1;
		_MonData[rGnome_Rock].data[MonMorale]			= 12;
		_MonData[rGnome_Rock].data[MonXP]				= 65;
	}
	{
		_MonData[rGoblin_Normal].MonName				= "Goblin";
		_MonData[rGoblin_Normal].data[MonClimate1]		= -1;
		_MonData[rGoblin_Normal].data[MonClimate2]		= -1;
		_MonData[rGoblin_Normal].data[MonTerrain1]		= -1;
		_MonData[rGoblin_Normal].data[MonTerrain2]		= -1;
		_MonData[rGoblin_Normal].data[MonFrequency]		= -1;
		_MonData[rGoblin_Normal].data[MonOrganization]	= -1;
		_MonData[rGoblin_Normal].data[MonCycle]			= -1;
		_MonData[rGoblin_Normal].data[MonDiet]			= -1;
		_MonData[rGoblin_Normal].data[MonBaseInt]		= 5;
		_MonData[rGoblin_Normal].data[MonIntMod]		= 6;
		_MonData[rGoblin_Normal].data[MonTreasureC]		= 10;/*K*/
		_MonData[rGoblin_Normal].data[MonTreasureL]		= 2;//C
		_MonData[rGoblin_Normal].data[MonAlign]			= alignLE;
		_MonData[rGoblin_Normal].data[MonNumAppN]		= 24;
		_MonData[rGoblin_Normal].data[MonNumAppO]		= 0;
		_MonData[rGoblin_Normal].data[MonAC]			= 6;
		_MonData[rGoblin_Normal].data[MonMvW]			= 6;
		_MonData[rGoblin_Normal].data[MonMvS]			= 0;
		_MonData[rGoblin_Normal].data[MonMvF]			= 0;
		_MonData[rGoblin_Normal].data[MonMvB]			= 0;
		_MonData[rGoblin_Normal].data[MonMvFC]			= -1;
		_MonData[rGoblin_Normal].data[MonNumHD]			= 1;
		_MonData[rGoblin_Normal].data[MonHDMod]			= -1;
		_MonData[rGoblin_Normal].data[MonTHAC0]			= 20;
		_MonData[rGoblin_Normal].data[MonNumAttN]		= 0;
		_MonData[rGoblin_Normal].data[MonNumAttW]		= 1;
		_MonData[rGoblin_Normal].data[MonDmgN01]		= 0;
		_MonData[rGoblin_Normal].data[MonDmgN02]		= 0;
		_MonData[rGoblin_Normal].data[MonDmgN03]		= 0;
		_MonData[rGoblin_Normal].data[MonDmgW_base]		= 6;
		_MonData[rGoblin_Normal].data[MonDmgW_mult]		= 1;
		_MonData[rGoblin_Normal].data[MonMR]			= 0;
		_MonData[rGoblin_Normal].data[MonSize]			= -1;
		_MonData[rGoblin_Normal].data[MonMorale]		= 10;
		_MonData[rGoblin_Normal].data[MonXP]			= 15;
	}
	{
		_MonData[rGoblin_SubChief].MonName				= "Goblin, SubChief";
		_MonData[rGoblin_SubChief].data[MonClimate1]	= -1;
		_MonData[rGoblin_SubChief].data[MonClimate2]	= -1;
		_MonData[rGoblin_SubChief].data[MonTerrain1]	= -1;
		_MonData[rGoblin_SubChief].data[MonTerrain2]	= -1;
		_MonData[rGoblin_SubChief].data[MonFrequency]	= -1;
		_MonData[rGoblin_SubChief].data[MonOrganization]= -1;
		_MonData[rGoblin_SubChief].data[MonCycle]		= -1;
		_MonData[rGoblin_SubChief].data[MonDiet]		= -1;
		_MonData[rGoblin_SubChief].data[MonBaseInt]		= 5;
		_MonData[rGoblin_SubChief].data[MonIntMod]		= 6;
		_MonData[rGoblin_SubChief].data[MonTreasureC]	= 10;/*K*/
		_MonData[rGoblin_SubChief].data[MonTreasureL]	= 2;//C
		_MonData[rGoblin_SubChief].data[MonAlign]		= alignLE;
		_MonData[rGoblin_SubChief].data[MonNumAppN]		= 24;
		_MonData[rGoblin_SubChief].data[MonNumAppO]		= 0;
		_MonData[rGoblin_SubChief].data[MonAC]			= 6;
		_MonData[rGoblin_SubChief].data[MonMvW]			= 6;
		_MonData[rGoblin_SubChief].data[MonMvS]			= 0;
		_MonData[rGoblin_SubChief].data[MonMvF]			= 0;
		_MonData[rGoblin_SubChief].data[MonMvB]			= 0;
		_MonData[rGoblin_SubChief].data[MonMvFC]		= -1;
		_MonData[rGoblin_SubChief].data[MonNumHD]		= 1;
		_MonData[rGoblin_SubChief].data[MonHDMod]		= 1;
		_MonData[rGoblin_SubChief].data[MonTHAC0]		= 19;
		_MonData[rGoblin_SubChief].data[MonNumAttN]		= 0;
		_MonData[rGoblin_SubChief].data[MonNumAttW]		= 1;
		_MonData[rGoblin_SubChief].data[MonDmgN01]		= 0;
		_MonData[rGoblin_SubChief].data[MonDmgN02]		= 0;
		_MonData[rGoblin_SubChief].data[MonDmgN03]		= 0;
		_MonData[rGoblin_SubChief].data[MonDmgW_base]	= 1;
		_MonData[rGoblin_SubChief].data[MonDmgW_mult]	= 6;
		_MonData[rGoblin_SubChief].data[MonMR]			= 0;
		_MonData[rGoblin_SubChief].data[MonSize]		= -1;
		_MonData[rGoblin_SubChief].data[MonMorale]		= 10;
		_MonData[rGoblin_SubChief].data[MonXP]			= 35;
	}
	{
		_MonData[rGoblin_Chief].MonName					= "Goblin, Chief";
		_MonData[rGoblin_Chief].data[MonClimate1]		= -1;
		_MonData[rGoblin_Chief].data[MonClimate2]		= -1;
		_MonData[rGoblin_Chief].data[MonTerrain1]		= -1;
		_MonData[rGoblin_Chief].data[MonTerrain2]		= -1;
		_MonData[rGoblin_Chief].data[MonFrequency]		= -1;
		_MonData[rGoblin_Chief].data[MonOrganization]	= -1;
		_MonData[rGoblin_Chief].data[MonCycle]			= -1;
		_MonData[rGoblin_Chief].data[MonDiet]			= -1;
		_MonData[rGoblin_Chief].data[MonBaseInt]		= 5;
		_MonData[rGoblin_Chief].data[MonIntMod]			= 6;
		_MonData[rGoblin_Chief].data[MonTreasureC]		= 10;/*K*/
		_MonData[rGoblin_Chief].data[MonTreasureL]		= 2;//C
		_MonData[rGoblin_Chief].data[MonAlign]			= alignLE;
		_MonData[rGoblin_Chief].data[MonNumAppN]		= 24;
		_MonData[rGoblin_Chief].data[MonNumAppO]		= 0;
		_MonData[rGoblin_Chief].data[MonAC]				= 6;
		_MonData[rGoblin_Chief].data[MonMvW]			= 6;
		_MonData[rGoblin_Chief].data[MonMvS]			= 0;
		_MonData[rGoblin_Chief].data[MonMvF]			= 0;
		_MonData[rGoblin_Chief].data[MonMvB]			= 0;
		_MonData[rGoblin_Chief].data[MonMvFC]			= -1;
		_MonData[rGoblin_Chief].data[MonNumHD]			= 1;
		_MonData[rGoblin_Chief].data[MonHDMod]			= 1;
		_MonData[rGoblin_Chief].data[MonTHAC0]			= 19;
		_MonData[rGoblin_Chief].data[MonNumAttN]		= 0;
		_MonData[rGoblin_Chief].data[MonNumAttW]		= 1;
		_MonData[rGoblin_Chief].data[MonDmgN01]			= 0;
		_MonData[rGoblin_Chief].data[MonDmgN02]			= 0;
		_MonData[rGoblin_Chief].data[MonDmgN03]			= 0;
		_MonData[rGoblin_Chief].data[MonDmgW_base]		= 1;
		_MonData[rGoblin_Chief].data[MonDmgW_mult]		= 6;
		_MonData[rGoblin_Chief].data[MonMR]				= 0;
		_MonData[rGoblin_Chief].data[MonSize]			= -1;
		_MonData[rGoblin_Chief].data[MonMorale]			= 10;
		_MonData[rGoblin_Chief].data[MonXP]				= 35;
	}
	{
		_MonData[rHalfling_Hairfoot].MonName			= "Halfling, Hairfoot";
		_MonData[rHalfling_Hairfoot].data[MonClimate1]	= -1;
		_MonData[rHalfling_Hairfoot].data[MonClimate2]	= -1;
		_MonData[rHalfling_Hairfoot].data[MonTerrain1]	= -1;
		_MonData[rHalfling_Hairfoot].data[MonTerrain2]	= -1;
		_MonData[rHalfling_Hairfoot].data[MonFrequency]	= -1;
		_MonData[rHalfling_Hairfoot].data[MonOrganization]= -1;
		_MonData[rHalfling_Hairfoot].data[MonCycle]		= -1;
		_MonData[rHalfling_Hairfoot].data[MonDiet]		= -1;
		_MonData[rHalfling_Hairfoot].data[MonBaseInt]	= 11;
		_MonData[rHalfling_Hairfoot].data[MonIntMod]	= 2;
		_MonData[rHalfling_Hairfoot].data[MonTreasureC]	= 10;/*K*/
		_MonData[rHalfling_Hairfoot].data[MonTreasureL]	= 1;//B
		_MonData[rHalfling_Hairfoot].data[MonAlign]		= alignLG;
		_MonData[rHalfling_Hairfoot].data[MonNumAppN]	= 12;
		_MonData[rHalfling_Hairfoot].data[MonNumAppO]	= 0;
		_MonData[rHalfling_Hairfoot].data[MonAC]		= 7;
		_MonData[rHalfling_Hairfoot].data[MonMvW]		= 6;
		_MonData[rHalfling_Hairfoot].data[MonMvS]		= 0;
		_MonData[rHalfling_Hairfoot].data[MonMvF]		= 0;
		_MonData[rHalfling_Hairfoot].data[MonMvB]		= 0;
		_MonData[rHalfling_Hairfoot].data[MonMvFC]		= -1;
		_MonData[rHalfling_Hairfoot].data[MonNumHD]		= 1;
		_MonData[rHalfling_Hairfoot].data[MonHDMod]		= -2;
		_MonData[rHalfling_Hairfoot].data[MonTHAC0]		= 20;
		_MonData[rHalfling_Hairfoot].data[MonNumAttN]	= 0;
		_MonData[rHalfling_Hairfoot].data[MonNumAttW]	= 1;
		_MonData[rHalfling_Hairfoot].data[MonDmgN01]	= 0;
		_MonData[rHalfling_Hairfoot].data[MonDmgN02]	= 0;
		_MonData[rHalfling_Hairfoot].data[MonDmgN03]	= 0;
		_MonData[rHalfling_Hairfoot].data[MonDmgW_base]	= 6;
		_MonData[rHalfling_Hairfoot].data[MonDmgW_mult]	= 1;
		_MonData[rHalfling_Hairfoot].data[MonMR]		= 0;
		_MonData[rHalfling_Hairfoot].data[MonSize]		= -1;
		_MonData[rHalfling_Hairfoot].data[MonMorale]	= 12;
		_MonData[rHalfling_Hairfoot].data[MonXP]		= 35;
	}
	{
		_MonData[rHarpy].MonName							= "Harpy";
		_MonData[rHarpy].data[MonClimate1]					= -1;
		_MonData[rHarpy].data[MonClimate2]					= -1;
		_MonData[rHarpy].data[MonTerrain1]					= -1;
		_MonData[rHarpy].data[MonTerrain2]					= -1;
		_MonData[rHarpy].data[MonFrequency]					= -1;
		_MonData[rHarpy].data[MonOrganization]				= -1;
		_MonData[rHarpy].data[MonCycle]						= -1;
		_MonData[rHarpy].data[MonDiet]						= -1;
		_MonData[rHarpy].data[MonBaseInt]					= 5;
		_MonData[rHarpy].data[MonIntMod]					= 3;
		_MonData[rHarpy].data[MonTreasureC]					= 17;/*R*/
		_MonData[rHarpy].data[MonTreasureL]					= 2;//C
		_MonData[rHarpy].data[MonAlign]						= alignCE;
		_MonData[rHarpy].data[MonNumAppN]					= 12;
		_MonData[rHarpy].data[MonNumAppO]					= 0;
		_MonData[rHarpy].data[MonAC]						= 7;
		_MonData[rHarpy].data[MonMvW]						= 6;
		_MonData[rHarpy].data[MonMvS]						= 0;
		_MonData[rHarpy].data[MonMvF]						= 15;
		_MonData[rHarpy].data[MonMvB]						= 0;
		_MonData[rHarpy].data[MonMvFC]						= 2;/*C*/
		_MonData[rHarpy].data[MonNumHD]						= 7;
		_MonData[rHarpy].data[MonHDMod]						= 0;
		_MonData[rHarpy].data[MonTHAC0]						= 13;
		_MonData[rHarpy].data[MonNumAttN]					= 3;
		_MonData[rHarpy].data[MonNumAttW]					= 0;
		_MonData[rHarpy].data[MonDmgN01]					= 3;
		_MonData[rHarpy].data[MonDmgN02]					= 3;
		_MonData[rHarpy].data[MonDmgN03]					= 6;
		_MonData[rHarpy].data[MonDmgW_base]					= 0;
		_MonData[rHarpy].data[MonDmgW_mult]					= 0;
		_MonData[rHarpy].data[MonMR]						= 0;
		_MonData[rHarpy].data[MonSize]						= -1;
		_MonData[rHarpy].data[MonMorale]					= 14;
		_MonData[rHarpy].data[MonXP]						= 975;
	}
	{
		_MonData[rHobgoblin_Normal].MonName					= "Hobgoblin";
		_MonData[rHobgoblin_Normal].data[MonClimate1]		= -1;
		_MonData[rHobgoblin_Normal].data[MonClimate2]		= -1;
		_MonData[rHobgoblin_Normal].data[MonTerrain1]		= -1;
		_MonData[rHobgoblin_Normal].data[MonTerrain2]		= -1;
		_MonData[rHobgoblin_Normal].data[MonFrequency]		= -1;
		_MonData[rHobgoblin_Normal].data[MonOrganization]	= -1;
		_MonData[rHobgoblin_Normal].data[MonCycle]			= -1;
		_MonData[rHobgoblin_Normal].data[MonDiet]			= -1;
		_MonData[rHobgoblin_Normal].data[MonBaseInt]		= 9;
		_MonData[rHobgoblin_Normal].data[MonIntMod]			= 0;
		_MonData[rHobgoblin_Normal].data[MonTreasureC]		= 9;/*J*/
		_MonData[rHobgoblin_Normal].data[MonTreasureL]		= 3;//D
		_MonData[rHobgoblin_Normal].data[MonAlign]			= alignLE;
		_MonData[rHobgoblin_Normal].data[MonNumAppN]		= 20;
		_MonData[rHobgoblin_Normal].data[MonNumAppO]		= 0;
		_MonData[rHobgoblin_Normal].data[MonAC]				= 8;
		_MonData[rHobgoblin_Normal].data[MonMvW]			= 9;
		_MonData[rHobgoblin_Normal].data[MonMvS]			= 0;
		_MonData[rHobgoblin_Normal].data[MonMvF]			= 0;
		_MonData[rHobgoblin_Normal].data[MonMvB]			= 0;
		_MonData[rHobgoblin_Normal].data[MonMvFC]			= -1;
		_MonData[rHobgoblin_Normal].data[MonNumHD]			= 1;
		_MonData[rHobgoblin_Normal].data[MonHDMod]			= -1;
		_MonData[rHobgoblin_Normal].data[MonTHAC0]			= 20;
		_MonData[rHobgoblin_Normal].data[MonNumAttN]		= 0;
		_MonData[rHobgoblin_Normal].data[MonNumAttW]		= 1;
		_MonData[rHobgoblin_Normal].data[MonDmgN01]			= 0;
		_MonData[rHobgoblin_Normal].data[MonDmgN02]			= 0;
		_MonData[rHobgoblin_Normal].data[MonDmgN03]			= 0;
		_MonData[rHobgoblin_Normal].data[MonDmgW_base]		= 8;
		_MonData[rHobgoblin_Normal].data[MonDmgW_mult]		= 1;
		_MonData[rHobgoblin_Normal].data[MonMR]				= 0;
		_MonData[rHobgoblin_Normal].data[MonSize]			= -1;
		_MonData[rHobgoblin_Normal].data[MonMorale]			= 13;
		_MonData[rHobgoblin_Normal].data[MonXP]				= 15;
	}
	{
		_MonData[rHobgoblin_Stripling].MonName				= "Hobgoblin, Stripling";
		_MonData[rHobgoblin_Stripling].data[MonClimate1]	= -1;
		_MonData[rHobgoblin_Stripling].data[MonClimate2]	= -1;
		_MonData[rHobgoblin_Stripling].data[MonTerrain1]	= -1;
		_MonData[rHobgoblin_Stripling].data[MonTerrain2]	= -1;
		_MonData[rHobgoblin_Stripling].data[MonFrequency]	= -1;
		_MonData[rHobgoblin_Stripling].data[MonOrganization]= -1;
		_MonData[rHobgoblin_Stripling].data[MonCycle]		= -1;
		_MonData[rHobgoblin_Stripling].data[MonDiet]		= -1;
		_MonData[rHobgoblin_Stripling].data[MonBaseInt]		= 8;
		_MonData[rHobgoblin_Stripling].data[MonIntMod]		= 3;
		_MonData[rHobgoblin_Stripling].data[MonTreasureC]	= 9;/*J*/
		_MonData[rHobgoblin_Stripling].data[MonTreasureL]	= 3;//D
		_MonData[rHobgoblin_Stripling].data[MonAlign]		= alignLE;
		_MonData[rHobgoblin_Stripling].data[MonNumAppN]		= 20;
		_MonData[rHobgoblin_Stripling].data[MonNumAppO]		= 0;
		_MonData[rHobgoblin_Stripling].data[MonAC]			= 5;
		_MonData[rHobgoblin_Stripling].data[MonMvW]			= 9;
		_MonData[rHobgoblin_Stripling].data[MonMvS]			= 0;
		_MonData[rHobgoblin_Stripling].data[MonMvF]			= 0;
		_MonData[rHobgoblin_Stripling].data[MonMvB]			= 0;
		_MonData[rHobgoblin_Stripling].data[MonMvFC]		= -1;
		_MonData[rHobgoblin_Stripling].data[MonNumHD]		= 1;
		_MonData[rHobgoblin_Stripling].data[MonHDMod]		= 1;
		_MonData[rHobgoblin_Stripling].data[MonTHAC0]		= 19;
		_MonData[rHobgoblin_Stripling].data[MonNumAttN]		= 0;
		_MonData[rHobgoblin_Stripling].data[MonNumAttW]		= 1;
		_MonData[rHobgoblin_Stripling].data[MonDmgN01]		= 0;
		_MonData[rHobgoblin_Stripling].data[MonDmgN02]		= 0;
		_MonData[rHobgoblin_Stripling].data[MonDmgN03]		= 0;
		_MonData[rHobgoblin_Stripling].data[MonDmgW_base]	= 4;
		_MonData[rHobgoblin_Stripling].data[MonDmgW_mult]	= 1;
		_MonData[rHobgoblin_Stripling].data[MonMR]			= 0;
		_MonData[rHobgoblin_Stripling].data[MonSize]		= -1;
		_MonData[rHobgoblin_Stripling].data[MonMorale]		= 12;
		_MonData[rHobgoblin_Stripling].data[MonXP]			= 15;
	}
	{
		_MonData[rHorse_Draft].MonName						= "Horse, Draft";
		_MonData[rHorse_Draft].data[MonClimate1]			= -1;
		_MonData[rHorse_Draft].data[MonClimate2]			= -1;
		_MonData[rHorse_Draft].data[MonTerrain1]			= -1;
		_MonData[rHorse_Draft].data[MonTerrain2]			= -1;
		_MonData[rHorse_Draft].data[MonFrequency]			= -1;
		_MonData[rHorse_Draft].data[MonOrganization]		= -1;
		_MonData[rHorse_Draft].data[MonCycle]				= -1;
		_MonData[rHorse_Draft].data[MonDiet]				= -1;
		_MonData[rHorse_Draft].data[MonBaseInt]				= 1;
		_MonData[rHorse_Draft].data[MonIntMod]				= 0;
		_MonData[rHorse_Draft].data[MonTreasureC]			= -1;
		_MonData[rHorse_Draft].data[MonTreasureL]			= -1;
		_MonData[rHorse_Draft].data[MonAlign]				= alignNN;
		_MonData[rHorse_Draft].data[MonNumAppN]				= 1;
		_MonData[rHorse_Draft].data[MonNumAppO]				= 0;
		_MonData[rHorse_Draft].data[MonAC]					= 7;
		_MonData[rHorse_Draft].data[MonMvW]					= 12;
		_MonData[rHorse_Draft].data[MonMvS]					= 0;
		_MonData[rHorse_Draft].data[MonMvF]					= 0;
		_MonData[rHorse_Draft].data[MonMvB]					= 0;
		_MonData[rHorse_Draft].data[MonMvFC]				= -1;
		_MonData[rHorse_Draft].data[MonNumHD]				= 3;
		_MonData[rHorse_Draft].data[MonHDMod]				= 0;
		_MonData[rHorse_Draft].data[MonTHAC0]				= 17;
		_MonData[rHorse_Draft].data[MonNumAttN]				= 1;
		_MonData[rHorse_Draft].data[MonNumAttW]				= 0;
		_MonData[rHorse_Draft].data[MonDmgN01]				= 0;
		_MonData[rHorse_Draft].data[MonDmgN02]				= 0;
		_MonData[rHorse_Draft].data[MonDmgN03]				= 3;
		_MonData[rHorse_Draft].data[MonDmgW_base]			= 0;
		_MonData[rHorse_Draft].data[MonDmgW_mult]			= 0;
		_MonData[rHorse_Draft].data[MonMR]					= 0;
		_MonData[rHorse_Draft].data[MonSize]				= -1;
		_MonData[rHorse_Draft].data[MonMorale]				= 6;
		_MonData[rHorse_Draft].data[MonXP]					= 65;
	}
	{
		_MonData[rHorse_HeavyWar].MonName					= "Horse, Hvy War";
		_MonData[rHorse_HeavyWar].data[MonClimate1]			= -1;
		_MonData[rHorse_HeavyWar].data[MonClimate2]			= -1;
		_MonData[rHorse_HeavyWar].data[MonTerrain1]			= -1;
		_MonData[rHorse_HeavyWar].data[MonTerrain2]			= -1;
		_MonData[rHorse_HeavyWar].data[MonFrequency]		= -1;
		_MonData[rHorse_HeavyWar].data[MonOrganization]		= -1;
		_MonData[rHorse_HeavyWar].data[MonCycle]			= -1;
		_MonData[rHorse_HeavyWar].data[MonDiet]				= -1;
		_MonData[rHorse_HeavyWar].data[MonBaseInt]			= 1;
		_MonData[rHorse_HeavyWar].data[MonIntMod]			= 0;
		_MonData[rHorse_HeavyWar].data[MonTreasureC]		= -1;
		_MonData[rHorse_HeavyWar].data[MonTreasureL]		= -1;
		_MonData[rHorse_HeavyWar].data[MonAlign]			= alignNN;
		_MonData[rHorse_HeavyWar].data[MonNumAppN]			= 1;
		_MonData[rHorse_HeavyWar].data[MonNumAppO]			= 0;
		_MonData[rHorse_HeavyWar].data[MonAC]				= 7;
		_MonData[rHorse_HeavyWar].data[MonMvW]				= 15;
		_MonData[rHorse_HeavyWar].data[MonMvS]				= 0;
		_MonData[rHorse_HeavyWar].data[MonMvF]				= 0;
		_MonData[rHorse_HeavyWar].data[MonMvB]				= 0;
		_MonData[rHorse_HeavyWar].data[MonMvFC]				= -1;
		_MonData[rHorse_HeavyWar].data[MonNumHD]			= 3;
		_MonData[rHorse_HeavyWar].data[MonHDMod]			= 3;
		_MonData[rHorse_HeavyWar].data[MonTHAC0]			= 17;
		_MonData[rHorse_HeavyWar].data[MonNumAttN]			= 2;
		_MonData[rHorse_HeavyWar].data[MonNumAttW]			= 0;
		_MonData[rHorse_HeavyWar].data[MonDmgN01]			= 8;
		_MonData[rHorse_HeavyWar].data[MonDmgN02]			= 8;
		_MonData[rHorse_HeavyWar].data[MonDmgN03]			= 3;
		_MonData[rHorse_HeavyWar].data[MonDmgW_base]		= 0;
		_MonData[rHorse_HeavyWar].data[MonDmgW_mult]		= 0;
		_MonData[rHorse_HeavyWar].data[MonMR]				= 0;
		_MonData[rHorse_HeavyWar].data[MonSize]				= -1;
		_MonData[rHorse_HeavyWar].data[MonMorale]			= 6;
		_MonData[rHorse_HeavyWar].data[MonXP]				= 120;
	}
	{
		_MonData[rHorse_MediumWar].MonName					= "Horse, Med War";
		_MonData[rHorse_MediumWar].data[MonClimate1]		= -1;
		_MonData[rHorse_MediumWar].data[MonClimate2]		= -1;
		_MonData[rHorse_MediumWar].data[MonTerrain1]		= -1;
		_MonData[rHorse_MediumWar].data[MonTerrain2]		= -1;
		_MonData[rHorse_MediumWar].data[MonFrequency]		= -1;
		_MonData[rHorse_MediumWar].data[MonOrganization]	= -1;
		_MonData[rHorse_MediumWar].data[MonCycle]			= -1;
		_MonData[rHorse_MediumWar].data[MonDiet]			= -1;
		_MonData[rHorse_MediumWar].data[MonBaseInt]			= 1;
		_MonData[rHorse_MediumWar].data[MonIntMod]			= 0;
		_MonData[rHorse_MediumWar].data[MonTreasureC]		= -1;
		_MonData[rHorse_MediumWar].data[MonTreasureL]		= -1;
		_MonData[rHorse_MediumWar].data[MonAlign]			= alignNN;
		_MonData[rHorse_MediumWar].data[MonNumAppN]			= 1;
		_MonData[rHorse_MediumWar].data[MonNumAppO]			= 0;
		_MonData[rHorse_MediumWar].data[MonAC]				= 7;
		_MonData[rHorse_MediumWar].data[MonMvW]				= 18;
		_MonData[rHorse_MediumWar].data[MonMvS]				= 0;
		_MonData[rHorse_MediumWar].data[MonMvF]				= 0;
		_MonData[rHorse_MediumWar].data[MonMvB]				= 0;
		_MonData[rHorse_MediumWar].data[MonMvFC]			= -1;
		_MonData[rHorse_MediumWar].data[MonNumHD]			= 2;
		_MonData[rHorse_MediumWar].data[MonHDMod]			= 2;
		_MonData[rHorse_MediumWar].data[MonTHAC0]			= 19;
		_MonData[rHorse_MediumWar].data[MonNumAttN]			= 3;
		_MonData[rHorse_MediumWar].data[MonNumAttW]			= 0;
		_MonData[rHorse_MediumWar].data[MonDmgN01]			= 6;
		_MonData[rHorse_MediumWar].data[MonDmgN02]			= 6;
		_MonData[rHorse_MediumWar].data[MonDmgN03]			= 4;
		_MonData[rHorse_MediumWar].data[MonDmgW_base]		= 0;
		_MonData[rHorse_MediumWar].data[MonDmgW_mult]		= 0;
		_MonData[rHorse_MediumWar].data[MonMR]				= 0;
		_MonData[rHorse_MediumWar].data[MonSize]			= -1;
		_MonData[rHorse_MediumWar].data[MonMorale]			= 6;
		_MonData[rHorse_MediumWar].data[MonXP]				= 65;
	}
	{
		_MonData[rHorse_LightWar].MonName					= "Horse, Lgt War";
		_MonData[rHorse_LightWar].data[MonClimate1]			= -1;
		_MonData[rHorse_LightWar].data[MonClimate2]			= -1;
		_MonData[rHorse_LightWar].data[MonTerrain1]			= -1;
		_MonData[rHorse_LightWar].data[MonTerrain2]			= -1;
		_MonData[rHorse_LightWar].data[MonFrequency]		= -1;
		_MonData[rHorse_LightWar].data[MonOrganization]		= -1;
		_MonData[rHorse_LightWar].data[MonCycle]			= -1;
		_MonData[rHorse_LightWar].data[MonDiet]				= -1;
		_MonData[rHorse_LightWar].data[MonBaseInt]			= 1;
		_MonData[rHorse_LightWar].data[MonIntMod]			= 0;
		_MonData[rHorse_LightWar].data[MonTreasureC]		= -1;
		_MonData[rHorse_LightWar].data[MonTreasureL]		= -1;
		_MonData[rHorse_LightWar].data[MonAlign]			= alignNN;
		_MonData[rHorse_LightWar].data[MonNumAppN]			= 1;
		_MonData[rHorse_LightWar].data[MonNumAppO]			= 0;
		_MonData[rHorse_LightWar].data[MonAC]				= 7;
		_MonData[rHorse_LightWar].data[MonMvW]				= 24;
		_MonData[rHorse_LightWar].data[MonMvS]				= 0;
		_MonData[rHorse_LightWar].data[MonMvF]				= 0;
		_MonData[rHorse_LightWar].data[MonMvB]				= 0;
		_MonData[rHorse_LightWar].data[MonMvFC]				= -1;
		_MonData[rHorse_LightWar].data[MonNumHD]			= 2;
		_MonData[rHorse_LightWar].data[MonHDMod]			= 0;
		_MonData[rHorse_LightWar].data[MonTHAC0]			= 19;
		_MonData[rHorse_LightWar].data[MonNumAttN]			= 2;
		_MonData[rHorse_LightWar].data[MonNumAttW]			= 0;
		_MonData[rHorse_LightWar].data[MonDmgN01]			= 4;
		_MonData[rHorse_LightWar].data[MonDmgN02]			= 4;
		_MonData[rHorse_LightWar].data[MonDmgN03]			= 0;
		_MonData[rHorse_LightWar].data[MonDmgW_base]		= 0;
		_MonData[rHorse_LightWar].data[MonDmgW_mult]		= 0;
		_MonData[rHorse_LightWar].data[MonMR]				= 0;
		_MonData[rHorse_LightWar].data[MonSize]				= -1;
		_MonData[rHorse_LightWar].data[MonMorale]			= 6;
		_MonData[rHorse_LightWar].data[MonXP]				= 35;
	}
	{
		_MonData[rHorse_Pony].MonName						= "Horse, Pony";
		_MonData[rHorse_Pony].data[MonClimate1]				= -1;
		_MonData[rHorse_Pony].data[MonClimate2]				= -1;
		_MonData[rHorse_Pony].data[MonTerrain1]				= -1;
		_MonData[rHorse_Pony].data[MonTerrain2]				= -1;
		_MonData[rHorse_Pony].data[MonFrequency]			= -1;
		_MonData[rHorse_Pony].data[MonOrganization]			= -1;
		_MonData[rHorse_Pony].data[MonCycle]				= -1;
		_MonData[rHorse_Pony].data[MonDiet]					= -1;
		_MonData[rHorse_Pony].data[MonBaseInt]				= 1;
		_MonData[rHorse_Pony].data[MonIntMod]				= 0;
		_MonData[rHorse_Pony].data[MonTreasureC]			= -1;
		_MonData[rHorse_Pony].data[MonTreasureL]			= -1;
		_MonData[rHorse_Pony].data[MonAlign]				= alignNN;
		_MonData[rHorse_Pony].data[MonNumAppN]				= 1;
		_MonData[rHorse_Pony].data[MonNumAppO]				= 0;
		_MonData[rHorse_Pony].data[MonAC]					= 7;
		_MonData[rHorse_Pony].data[MonMvW]					= 12;
		_MonData[rHorse_Pony].data[MonMvS]					= 0;
		_MonData[rHorse_Pony].data[MonMvF]					= 0;
		_MonData[rHorse_Pony].data[MonMvB]					= 0;
		_MonData[rHorse_Pony].data[MonMvFC]					= -1;
		_MonData[rHorse_Pony].data[MonNumHD]				= 1;
		_MonData[rHorse_Pony].data[MonHDMod]				= 1;
		_MonData[rHorse_Pony].data[MonTHAC0]				= 19;
		_MonData[rHorse_Pony].data[MonNumAttN]				= 1;
		_MonData[rHorse_Pony].data[MonNumAttW]				= 0;
		_MonData[rHorse_Pony].data[MonDmgN01]				= 0;
		_MonData[rHorse_Pony].data[MonDmgN02]				= 0;
		_MonData[rHorse_Pony].data[MonDmgN03]				= 2;
		_MonData[rHorse_Pony].data[MonDmgW_base]			= 0;
		_MonData[rHorse_Pony].data[MonDmgW_mult]			= 0;
		_MonData[rHorse_Pony].data[MonMR]					= 0;
		_MonData[rHorse_Pony].data[MonSize]					= -1;
		_MonData[rHorse_Pony].data[MonMorale]				= 6;
		_MonData[rHorse_Pony].data[MonXP]					= 35;
	}
	{
		_MonData[rHorse_Wild].MonName						= "Horse, Wild";
		_MonData[rHorse_Wild].data[MonClimate1]				= -1;
		_MonData[rHorse_Wild].data[MonClimate2]				= -1;
		_MonData[rHorse_Wild].data[MonTerrain1]				= -1;
		_MonData[rHorse_Wild].data[MonTerrain2]				= -1;
		_MonData[rHorse_Wild].data[MonFrequency]			= -1;
		_MonData[rHorse_Wild].data[MonOrganization]			= -1;
		_MonData[rHorse_Wild].data[MonCycle]				= -1;
		_MonData[rHorse_Wild].data[MonDiet]					= -1;
		_MonData[rHorse_Wild].data[MonBaseInt]				= 1;
		_MonData[rHorse_Wild].data[MonIntMod]				= 0;
		_MonData[rHorse_Wild].data[MonTreasureC]			= -1;
		_MonData[rHorse_Wild].data[MonTreasureL]			= -1;
		_MonData[rHorse_Wild].data[MonAlign]				= alignNN;
		_MonData[rHorse_Wild].data[MonNumAppN]				= 30;
		_MonData[rHorse_Wild].data[MonNumAppO]				= 0;
		_MonData[rHorse_Wild].data[MonAC]					= 7;
		_MonData[rHorse_Wild].data[MonMvW]					= 24;
		_MonData[rHorse_Wild].data[MonMvS]					= 0;
		_MonData[rHorse_Wild].data[MonMvF]					= 0;
		_MonData[rHorse_Wild].data[MonMvB]					= 0;
		_MonData[rHorse_Wild].data[MonMvFC]					= -1;
		_MonData[rHorse_Wild].data[MonNumHD]				= 2;
		_MonData[rHorse_Wild].data[MonHDMod]				= 0;
		_MonData[rHorse_Wild].data[MonTHAC0]				= 19;
		_MonData[rHorse_Wild].data[MonNumAttN]				= 1;
		_MonData[rHorse_Wild].data[MonNumAttW]				= 0;
		_MonData[rHorse_Wild].data[MonDmgN01]				= 0;
		_MonData[rHorse_Wild].data[MonDmgN02]				= 0;
		_MonData[rHorse_Wild].data[MonDmgN03]				= 3;
		_MonData[rHorse_Wild].data[MonDmgW_base]			= 0;
		_MonData[rHorse_Wild].data[MonDmgW_mult]			= 0;
		_MonData[rHorse_Wild].data[MonMR]					= 0;
		_MonData[rHorse_Wild].data[MonSize]					= -1;
		_MonData[rHorse_Wild].data[MonMorale]				= 6;
		_MonData[rHorse_Wild].data[MonXP]					= 35;
	}
	{
		_MonData[rHorse_Riding].MonName						= "Horse, Riding";
		_MonData[rHorse_Riding].data[MonClimate1]			= -1;
		_MonData[rHorse_Riding].data[MonClimate2]			= -1;
		_MonData[rHorse_Riding].data[MonTerrain1]			= -1;
		_MonData[rHorse_Riding].data[MonTerrain2]			= -1;
		_MonData[rHorse_Riding].data[MonFrequency]			= -1;
		_MonData[rHorse_Riding].data[MonOrganization]		= -1;
		_MonData[rHorse_Riding].data[MonCycle]				= -1;
		_MonData[rHorse_Riding].data[MonDiet]				= -1;
		_MonData[rHorse_Riding].data[MonBaseInt]			= 1;
		_MonData[rHorse_Riding].data[MonIntMod]				= 0;
		_MonData[rHorse_Riding].data[MonTreasureC]			= -1;
		_MonData[rHorse_Riding].data[MonTreasureL]			= -1;
		_MonData[rHorse_Riding].data[MonAlign]				= alignNN;
		_MonData[rHorse_Riding].data[MonNumAppN]			= 50;
		_MonData[rHorse_Riding].data[MonNumAppO]			= 0;
		_MonData[rHorse_Riding].data[MonAC]					= 7;
		_MonData[rHorse_Riding].data[MonMvW]				= 24;
		_MonData[rHorse_Riding].data[MonMvS]				= 0;
		_MonData[rHorse_Riding].data[MonMvF]				= 0;
		_MonData[rHorse_Riding].data[MonMvB]				= 0;
		_MonData[rHorse_Riding].data[MonMvFC]				= -1;
		_MonData[rHorse_Riding].data[MonNumHD]				= 3;
		_MonData[rHorse_Riding].data[MonHDMod]				= 0;
		_MonData[rHorse_Riding].data[MonTHAC0]				= 17;
		_MonData[rHorse_Riding].data[MonNumAttN]			= 2;
		_MonData[rHorse_Riding].data[MonNumAttW]			= 0;
		_MonData[rHorse_Riding].data[MonDmgN01]				= 2;
		_MonData[rHorse_Riding].data[MonDmgN02]				= 2;
		_MonData[rHorse_Riding].data[MonDmgN03]				= 0;
		_MonData[rHorse_Riding].data[MonDmgW_base]			= 0;
		_MonData[rHorse_Riding].data[MonDmgW_mult]			= 0;
		_MonData[rHorse_Riding].data[MonMR]					= 0;
		_MonData[rHorse_Riding].data[MonSize]				= -1;
		_MonData[rHorse_Riding].data[MonMorale]				= 6;
		_MonData[rHorse_Riding].data[MonXP]					= 65;
	}
	{
		_MonData[rHorse_Mule].MonName						= "Horse, Mule";
		_MonData[rHorse_Mule].data[MonClimate1]				= -1;
		_MonData[rHorse_Mule].data[MonClimate2]				= -1;
		_MonData[rHorse_Mule].data[MonTerrain1]				= -1;
		_MonData[rHorse_Mule].data[MonTerrain2]				= -1;
		_MonData[rHorse_Mule].data[MonFrequency]			= -1;
		_MonData[rHorse_Mule].data[MonOrganization]			= -1;
		_MonData[rHorse_Mule].data[MonCycle]				= -1;
		_MonData[rHorse_Mule].data[MonDiet]					= -1;
		_MonData[rHorse_Mule].data[MonBaseInt]				= 1;
		_MonData[rHorse_Mule].data[MonIntMod]				= 0;
		_MonData[rHorse_Mule].data[MonTreasureC]			= -1;
		_MonData[rHorse_Mule].data[MonTreasureL]			= -1;
		_MonData[rHorse_Mule].data[MonAlign]				= alignNN;
		_MonData[rHorse_Mule].data[MonNumAppN]				= 50;
		_MonData[rHorse_Mule].data[MonNumAppO]				= 0;
		_MonData[rHorse_Mule].data[MonAC]					= 7;
		_MonData[rHorse_Mule].data[MonMvW]					= 12;
		_MonData[rHorse_Mule].data[MonMvS]					= 0;
		_MonData[rHorse_Mule].data[MonMvF]					= 0;
		_MonData[rHorse_Mule].data[MonMvB]					= 0;
		_MonData[rHorse_Mule].data[MonMvFC]					= -1;
		_MonData[rHorse_Mule].data[MonNumHD]				= 3;
		_MonData[rHorse_Mule].data[MonHDMod]				= 0;
		_MonData[rHorse_Mule].data[MonTHAC0]				= 17;
		_MonData[rHorse_Mule].data[MonNumAttN]				= 3;
		_MonData[rHorse_Mule].data[MonNumAttW]				= 0;
		_MonData[rHorse_Mule].data[MonDmgN01]				= 2;
		_MonData[rHorse_Mule].data[MonDmgN02]				= 2;
		_MonData[rHorse_Mule].data[MonDmgN03]				= 6;
		_MonData[rHorse_Mule].data[MonDmgW_base]			= 0;
		_MonData[rHorse_Mule].data[MonDmgW_mult]			= 0;
		_MonData[rHorse_Mule].data[MonMR]					= 0;
		_MonData[rHorse_Mule].data[MonSize]					= -1;
		_MonData[rHorse_Mule].data[MonMorale]				= 6;
		_MonData[rHorse_Mule].data[MonXP]					= 65;
	}
	{
		_MonData[rHuman].MonName							= "Human";
		_MonData[rHuman].data[MonClimate1]					= -1;
		_MonData[rHuman].data[MonClimate2]					= -1;
		_MonData[rHuman].data[MonTerrain1]					= -1;
		_MonData[rHuman].data[MonTerrain2]					= -1;
		_MonData[rHuman].data[MonFrequency]					= -1;
		_MonData[rHuman].data[MonOrganization]				= -1;
		_MonData[rHuman].data[MonCycle]						= -1;
		_MonData[rHuman].data[MonDiet]						= -1;
		_MonData[rHuman].data[MonBaseInt]					= 3;
		_MonData[rHuman].data[MonIntMod]					= 16;
		_MonData[rHuman].data[MonTreasureC]					= -1;
		_MonData[rHuman].data[MonTreasureL]					= -1;
		_MonData[rHuman].data[MonAlign]						= alignNN;
		_MonData[rHuman].data[MonNumAppN]					= 10;
		_MonData[rHuman].data[MonNumAppO]					= 0;
		_MonData[rHuman].data[MonAC]						= 10;
		_MonData[rHuman].data[MonMvW]						= 12;
		_MonData[rHuman].data[MonMvS]						= 0;
		_MonData[rHuman].data[MonMvF]						= 0;
		_MonData[rHuman].data[MonMvB]						= 0;
		_MonData[rHuman].data[MonMvFC]						= -1;
		_MonData[rHuman].data[MonNumHD]						= 1;
		_MonData[rHuman].data[MonHDMod]						= -1;
		_MonData[rHuman].data[MonTHAC0]						= 20;
		_MonData[rHuman].data[MonNumAttN]					= 0;
		_MonData[rHuman].data[MonNumAttW]					= 1;
		_MonData[rHuman].data[MonDmgN01]					= 0;
		_MonData[rHuman].data[MonDmgN02]					= 0;
		_MonData[rHuman].data[MonDmgN03]					= 0;
		_MonData[rHuman].data[MonDmgW_base]					= 4;
		_MonData[rHuman].data[MonDmgW_mult]					= 1;
		_MonData[rHuman].data[MonMR]						= 0;
		_MonData[rHuman].data[MonSize]						= -1;
		_MonData[rHuman].data[MonMorale]					= 9;
		_MonData[rHuman].data[MonXP]						= 15;
	}
	{
		_MonData[rHyena].MonName							= "Hyena";
		_MonData[rHyena].data[MonClimate1]					= -1;
		_MonData[rHyena].data[MonClimate2]					= -1;
		_MonData[rHyena].data[MonTerrain1]					= -1;
		_MonData[rHyena].data[MonTerrain2]					= -1;
		_MonData[rHyena].data[MonFrequency]					= -1;
		_MonData[rHyena].data[MonOrganization]				= -1;
		_MonData[rHyena].data[MonCycle]						= -1;
		_MonData[rHyena].data[MonDiet]						= -1;
		_MonData[rHyena].data[MonBaseInt]					= 0;
		_MonData[rHyena].data[MonIntMod]					= 0;
		_MonData[rHyena].data[MonTreasureC]					= -1;
		_MonData[rHyena].data[MonTreasureL]					= -1;
		_MonData[rHyena].data[MonAlign]						= alignNN;
		_MonData[rHyena].data[MonNumAppN]					= 12;
		_MonData[rHyena].data[MonNumAppO]					= 0;
		_MonData[rHyena].data[MonAC]						= 7;
		_MonData[rHyena].data[MonMvW]						= 12;
		_MonData[rHyena].data[MonMvS]						= 0;
		_MonData[rHyena].data[MonMvF]						= 0;
		_MonData[rHyena].data[MonMvB]						= 0;
		_MonData[rHyena].data[MonMvFC]						= -1;
		_MonData[rHyena].data[MonNumHD]						= 3;
		_MonData[rHyena].data[MonHDMod]						= 0;
		_MonData[rHyena].data[MonTHAC0]						= 17;
		_MonData[rHyena].data[MonNumAttN]					= 1;
		_MonData[rHyena].data[MonNumAttW]					= 0;
		_MonData[rHyena].data[MonDmgN01]					= 8;
		_MonData[rHyena].data[MonDmgN02]					= 0;
		_MonData[rHyena].data[MonDmgN03]					= 0;
		_MonData[rHyena].data[MonDmgW_base]					= 0;
		_MonData[rHyena].data[MonDmgW_mult]					= 0;
		_MonData[rHyena].data[MonMR]						= 0;
		_MonData[rHyena].data[MonSize]						= -1;
		_MonData[rHyena].data[MonMorale]					= 6;
		_MonData[rHyena].data[MonXP]						= 65;
	}
	{
		_MonData[rKobold_Normal].MonName					= "Kobold";
		_MonData[rKobold_Normal].data[MonClimate1]			= -1;
		_MonData[rKobold_Normal].data[MonClimate2]			= -1;
		_MonData[rKobold_Normal].data[MonTerrain1]			= -1;
		_MonData[rKobold_Normal].data[MonTerrain2]			= -1;
		_MonData[rKobold_Normal].data[MonFrequency]			= -1;
		_MonData[rKobold_Normal].data[MonOrganization]		= -1;
		_MonData[rKobold_Normal].data[MonCycle]				= -1;
		_MonData[rKobold_Normal].data[MonDiet]				= -1;
		_MonData[rKobold_Normal].data[MonBaseInt]			= 8;
		_MonData[rKobold_Normal].data[MonIntMod]			= 3;
		_MonData[rKobold_Normal].data[MonTreasureC]			= 9;/*J*/
		_MonData[rKobold_Normal].data[MonTreasureL]			= 14;//O
		_MonData[rKobold_Normal].data[MonAlign]				= alignLE;
		_MonData[rKobold_Normal].data[MonNumAppN]			= 20;
		_MonData[rKobold_Normal].data[MonNumAppO]			= 0;
		_MonData[rKobold_Normal].data[MonAC]				= 7;
		_MonData[rKobold_Normal].data[MonMvW]				= 6;
		_MonData[rKobold_Normal].data[MonMvS]				= 0;
		_MonData[rKobold_Normal].data[MonMvF]				= 0;
		_MonData[rKobold_Normal].data[MonMvB]				= 0;
		_MonData[rKobold_Normal].data[MonMvFC]				= -1;
		_MonData[rKobold_Normal].data[MonNumHD]				= 1;
		_MonData[rKobold_Normal].data[MonHDMod]				= -4;
		_MonData[rKobold_Normal].data[MonTHAC0]				= 20;
		_MonData[rKobold_Normal].data[MonNumAttN]			= 1;
		_MonData[rKobold_Normal].data[MonNumAttW]			= 0;
		_MonData[rKobold_Normal].data[MonDmgN01]			= 4;
		_MonData[rKobold_Normal].data[MonDmgN02]			= 0;
		_MonData[rKobold_Normal].data[MonDmgN03]			= 0;
		_MonData[rKobold_Normal].data[MonDmgW_base]			= 0;
		_MonData[rKobold_Normal].data[MonDmgW_mult]			= 0;
		_MonData[rKobold_Normal].data[MonMR]				= 0;
		_MonData[rKobold_Normal].data[MonSize]				= -1;
		_MonData[rKobold_Normal].data[MonMorale]			= 9;
		_MonData[rKobold_Normal].data[MonXP]				= 7;
	}
	{
		_MonData[rKobold_Guard].MonName						= "Kobold, Guard";
		_MonData[rKobold_Guard].data[MonClimate1]			= -1;
		_MonData[rKobold_Guard].data[MonClimate2]			= -1;
		_MonData[rKobold_Guard].data[MonTerrain1]			= -1;
		_MonData[rKobold_Guard].data[MonTerrain2]			= -1;
		_MonData[rKobold_Guard].data[MonFrequency]			= -1;
		_MonData[rKobold_Guard].data[MonOrganization]		= -1;
		_MonData[rKobold_Guard].data[MonCycle]				= -1;
		_MonData[rKobold_Guard].data[MonDiet]				= -1;
		_MonData[rKobold_Guard].data[MonBaseInt]			= 8;
		_MonData[rKobold_Guard].data[MonIntMod]				= 3;
		_MonData[rKobold_Guard].data[MonTreasureC]			= 9;/*J*/
		_MonData[rKobold_Guard].data[MonTreasureL]			= 14;//O
		_MonData[rKobold_Guard].data[MonAlign]				= alignLE;
		_MonData[rKobold_Guard].data[MonNumAppN]			= 20;
		_MonData[rKobold_Guard].data[MonNumAppO]			= 0;
		_MonData[rKobold_Guard].data[MonAC]					= 7;
		_MonData[rKobold_Guard].data[MonMvW]				= 6;
		_MonData[rKobold_Guard].data[MonMvS]				= 0;
		_MonData[rKobold_Guard].data[MonMvF]				= 0;
		_MonData[rKobold_Guard].data[MonMvB]				= 0;
		_MonData[rKobold_Guard].data[MonMvFC]				= -1;
		_MonData[rKobold_Guard].data[MonNumHD]				= 1;
		_MonData[rKobold_Guard].data[MonHDMod]				= 1;
		_MonData[rKobold_Guard].data[MonTHAC0]				= 19;
		_MonData[rKobold_Guard].data[MonNumAttN]			= 1;
		_MonData[rKobold_Guard].data[MonNumAttW]			= 0;
		_MonData[rKobold_Guard].data[MonDmgN01]				= 4;
		_MonData[rKobold_Guard].data[MonDmgN02]				= 0;
		_MonData[rKobold_Guard].data[MonDmgN03]				= 0;
		_MonData[rKobold_Guard].data[MonDmgW_base]			= 0;
		_MonData[rKobold_Guard].data[MonDmgW_mult]			= 0;
		_MonData[rKobold_Guard].data[MonMR]					= 0;
		_MonData[rKobold_Guard].data[MonSize]				= -1;
		_MonData[rKobold_Guard].data[MonMorale]				= 9;
		_MonData[rKobold_Guard].data[MonXP]					= 15;
	}
	{
		_MonData[rKobold_Chief].MonName						= "Kobold, Chief";
		_MonData[rKobold_Chief].data[MonClimate1]			= -1;
		_MonData[rKobold_Chief].data[MonClimate2]			= -1;
		_MonData[rKobold_Chief].data[MonTerrain1]			= -1;
		_MonData[rKobold_Chief].data[MonTerrain2]			= -1;
		_MonData[rKobold_Chief].data[MonFrequency]			= -1;
		_MonData[rKobold_Chief].data[MonOrganization]		= -1;
		_MonData[rKobold_Chief].data[MonCycle]				= -1;
		_MonData[rKobold_Chief].data[MonDiet]				= -1;
		_MonData[rKobold_Chief].data[MonBaseInt]			= 8;
		_MonData[rKobold_Chief].data[MonIntMod]				= 3;
		_MonData[rKobold_Chief].data[MonTreasureC]			= 9;/*J*/
		_MonData[rKobold_Chief].data[MonTreasureL]			= 14;//O
		_MonData[rKobold_Chief].data[MonAlign]				= alignLE;
		_MonData[rKobold_Chief].data[MonNumAppN]			= 20;
		_MonData[rKobold_Chief].data[MonNumAppO]			= 0;
		_MonData[rKobold_Chief].data[MonAC]					= 7;
		_MonData[rKobold_Chief].data[MonMvW]				= 6;
		_MonData[rKobold_Chief].data[MonMvS]				= 0;
		_MonData[rKobold_Chief].data[MonMvF]				= 0;
		_MonData[rKobold_Chief].data[MonMvB]				= 0;
		_MonData[rKobold_Chief].data[MonMvFC]				= -1;
		_MonData[rKobold_Chief].data[MonNumHD]				= 1;
		_MonData[rKobold_Chief].data[MonHDMod]				= 1;
		_MonData[rKobold_Chief].data[MonTHAC0]				= 20;
		_MonData[rKobold_Chief].data[MonNumAttN]			= 1;
		_MonData[rKobold_Chief].data[MonNumAttW]			= 0;
		_MonData[rKobold_Chief].data[MonDmgN01]				= 4;
		_MonData[rKobold_Chief].data[MonDmgN02]				= 0;
		_MonData[rKobold_Chief].data[MonDmgN03]				= 0;
		_MonData[rKobold_Chief].data[MonDmgW_base]			= 0;
		_MonData[rKobold_Chief].data[MonDmgW_mult]			= 0;
		_MonData[rKobold_Chief].data[MonMR]					= 0;
		_MonData[rKobold_Chief].data[MonSize]				= -1;
		_MonData[rKobold_Chief].data[MonMorale]				= 9;
		_MonData[rKobold_Chief].data[MonXP]					= 15;
	}
	{
		_MonData[rLeucrotta].MonName						= "Leucrotta";
		_MonData[rLeucrotta].data[MonClimate1]				= -1;
		_MonData[rLeucrotta].data[MonClimate2]				= -1;
		_MonData[rLeucrotta].data[MonTerrain1]				= -1;
		_MonData[rLeucrotta].data[MonTerrain2]				= -1;
		_MonData[rLeucrotta].data[MonFrequency]				= -1;
		_MonData[rLeucrotta].data[MonOrganization]			= -1;
		_MonData[rLeucrotta].data[MonCycle]					= -1;
		_MonData[rLeucrotta].data[MonDiet]					= -1;
		_MonData[rLeucrotta].data[MonBaseInt]				= 8;
		_MonData[rLeucrotta].data[MonIntMod]				= 3;
		_MonData[rLeucrotta].data[MonTreasureC]				= -1;
		_MonData[rLeucrotta].data[MonTreasureL]				= 3;//D
		_MonData[rLeucrotta].data[MonAlign]					= alignCE;
		_MonData[rLeucrotta].data[MonNumAppN]				= 4;
		_MonData[rLeucrotta].data[MonNumAppO]				= 0;
		_MonData[rLeucrotta].data[MonAC]					= 4;
		_MonData[rLeucrotta].data[MonMvW]					= 18;
		_MonData[rLeucrotta].data[MonMvS]					= 0;
		_MonData[rLeucrotta].data[MonMvF]					= 0;
		_MonData[rLeucrotta].data[MonMvB]					= 0;
		_MonData[rLeucrotta].data[MonMvFC]					= -1;
		_MonData[rLeucrotta].data[MonNumHD]					= 6;
		_MonData[rLeucrotta].data[MonHDMod]					= 1;
		_MonData[rLeucrotta].data[MonTHAC0]					= 15;
		_MonData[rLeucrotta].data[MonNumAttN]				= 1;
		_MonData[rLeucrotta].data[MonNumAttW]				= 0;
		_MonData[rLeucrotta].data[MonDmgN01]				= 18;
		_MonData[rLeucrotta].data[MonDmgN02]				= 0;
		_MonData[rLeucrotta].data[MonDmgN03]				= 0;
		_MonData[rLeucrotta].data[MonDmgW_base]				= 0;
		_MonData[rLeucrotta].data[MonDmgW_mult]				= 0;
		_MonData[rLeucrotta].data[MonMR]					= 0;
		_MonData[rLeucrotta].data[MonSize]					= -1;
		_MonData[rLeucrotta].data[MonMorale]				= 14;
		_MonData[rLeucrotta].data[MonXP]					= 975;
	}
	{
		_MonData[rLizardMan_Normal].MonName					= "Lizardman";
		_MonData[rLizardMan_Normal].data[MonClimate1]		= -1;
		_MonData[rLizardMan_Normal].data[MonClimate2]		= -1;
		_MonData[rLizardMan_Normal].data[MonTerrain1]		= -1;
		_MonData[rLizardMan_Normal].data[MonTerrain2]		= -1;
		_MonData[rLizardMan_Normal].data[MonFrequency]		= -1;
		_MonData[rLizardMan_Normal].data[MonOrganization]	= -1;
		_MonData[rLizardMan_Normal].data[MonCycle]			= -1;
		_MonData[rLizardMan_Normal].data[MonDiet]			= -1;
		_MonData[rLizardMan_Normal].data[MonBaseInt]		= 5;
		_MonData[rLizardMan_Normal].data[MonIntMod]			= 3;
		_MonData[rLizardMan_Normal].data[MonTreasureC]		= -1;
		_MonData[rLizardMan_Normal].data[MonTreasureL]		= 3;//D
		_MonData[rLizardMan_Normal].data[MonAlign]			= alignNN;
		_MonData[rLizardMan_Normal].data[MonNumAppN]		= 15;
		_MonData[rLizardMan_Normal].data[MonNumAppO]		= 0;
		_MonData[rLizardMan_Normal].data[MonAC]				= 5;
		_MonData[rLizardMan_Normal].data[MonMvW]			= 6;
		_MonData[rLizardMan_Normal].data[MonMvS]			= 12;
		_MonData[rLizardMan_Normal].data[MonMvF]			= 0;
		_MonData[rLizardMan_Normal].data[MonMvB]			= 0;
		_MonData[rLizardMan_Normal].data[MonMvFC]			= -1;
		_MonData[rLizardMan_Normal].data[MonNumHD]			= 2;
		_MonData[rLizardMan_Normal].data[MonHDMod]			= 1;
		_MonData[rLizardMan_Normal].data[MonTHAC0]			= 19;
		_MonData[rLizardMan_Normal].data[MonNumAttN]		= 3;
		_MonData[rLizardMan_Normal].data[MonNumAttW]		= 0;
		_MonData[rLizardMan_Normal].data[MonDmgN01]			= 2;
		_MonData[rLizardMan_Normal].data[MonDmgN02]			= 2;
		_MonData[rLizardMan_Normal].data[MonDmgN03]			= 6;
		_MonData[rLizardMan_Normal].data[MonDmgW_base]		= 0;
		_MonData[rLizardMan_Normal].data[MonDmgW_mult]		= 0;
		_MonData[rLizardMan_Normal].data[MonMR]				= 0;
		_MonData[rLizardMan_Normal].data[MonSize]			= -1;
		_MonData[rLizardMan_Normal].data[MonMorale]			= 14;
		_MonData[rLizardMan_Normal].data[MonXP]				= 65;
	}
	{
		_MonData[rLizardMan_Juve].MonName					= "LizardMan, Juvenile";
		_MonData[rLizardMan_Juve].data[MonClimate1]			= -1;
		_MonData[rLizardMan_Juve].data[MonClimate2]			= -1;
		_MonData[rLizardMan_Juve].data[MonTerrain1]			= -1;
		_MonData[rLizardMan_Juve].data[MonTerrain2]			= -1;
		_MonData[rLizardMan_Juve].data[MonFrequency]		= -1;
		_MonData[rLizardMan_Juve].data[MonOrganization]		= -1;
		_MonData[rLizardMan_Juve].data[MonCycle]			= -1;
		_MonData[rLizardMan_Juve].data[MonDiet]				= -1;
		_MonData[rLizardMan_Juve].data[MonBaseInt]			= 7;
		_MonData[rLizardMan_Juve].data[MonIntMod]			= 0;
		_MonData[rLizardMan_Juve].data[MonTreasureC]		= -1;
		_MonData[rLizardMan_Juve].data[MonTreasureL]		= -1;
		_MonData[rLizardMan_Juve].data[MonAlign]			= alignCE;
		_MonData[rLizardMan_Juve].data[MonNumAppN]			= 4;
		_MonData[rLizardMan_Juve].data[MonNumAppO]			= 0;
		_MonData[rLizardMan_Juve].data[MonAC]				= 5;
		_MonData[rLizardMan_Juve].data[MonMvW]				= 12;
		_MonData[rLizardMan_Juve].data[MonMvS]				= 12;
		_MonData[rLizardMan_Juve].data[MonMvF]				= 0;
		_MonData[rLizardMan_Juve].data[MonMvB]				= 0;
		_MonData[rLizardMan_Juve].data[MonMvFC]				= -1;
		_MonData[rLizardMan_Juve].data[MonNumHD]			= 1;
		_MonData[rLizardMan_Juve].data[MonHDMod]			= 0;
		_MonData[rLizardMan_Juve].data[MonTHAC0]			= 20;
		_MonData[rLizardMan_Juve].data[MonNumAttN]			= 3;
		_MonData[rLizardMan_Juve].data[MonNumAttW]			= 0;
		_MonData[rLizardMan_Juve].data[MonDmgN01]			= 1;
		_MonData[rLizardMan_Juve].data[MonDmgN02]			= 1;
		_MonData[rLizardMan_Juve].data[MonDmgN03]			= 3;
		_MonData[rLizardMan_Juve].data[MonDmgW_base]		= 0;
		_MonData[rLizardMan_Juve].data[MonDmgW_mult]		= 0;
		_MonData[rLizardMan_Juve].data[MonMR]				= 0;
		_MonData[rLizardMan_Juve].data[MonSize]				= -1;
		_MonData[rLizardMan_Juve].data[MonMorale]			= 8;
		_MonData[rLizardMan_Juve].data[MonXP]				= 15;
	}
	{
		_MonData[rLurker_Normal].MonName					= "Lurker";
		_MonData[rLurker_Normal].data[MonClimate1]			= -1;
		_MonData[rLurker_Normal].data[MonClimate2]			= -1;
		_MonData[rLurker_Normal].data[MonTerrain1]			= -1;
		_MonData[rLurker_Normal].data[MonTerrain2]			= -1;
		_MonData[rLurker_Normal].data[MonFrequency]			= -1;
		_MonData[rLurker_Normal].data[MonOrganization]		= -1;
		_MonData[rLurker_Normal].data[MonCycle]				= -1;
		_MonData[rLurker_Normal].data[MonDiet]				= -1;
		_MonData[rLurker_Normal].data[MonBaseInt]			= 0;
		_MonData[rLurker_Normal].data[MonIntMod]			= 0;
		_MonData[rLurker_Normal].data[MonTreasureC]			= 24;/*Y*/
		_MonData[rLurker_Normal].data[MonTreasureL]			= 2;//C
		_MonData[rLurker_Normal].data[MonAlign]				= alignNN;
		_MonData[rLurker_Normal].data[MonNumAppN]			= 1;
		_MonData[rLurker_Normal].data[MonNumAppO]			= 4;
		_MonData[rLurker_Normal].data[MonAC]				= 6;
		_MonData[rLurker_Normal].data[MonMvW]				= 1;
		_MonData[rLurker_Normal].data[MonMvS]				= 0;
		_MonData[rLurker_Normal].data[MonMvF]				= 9;
		_MonData[rLurker_Normal].data[MonMvB]				= 0;
		_MonData[rLurker_Normal].data[MonMvFC]				= 1;/*B*/
		_MonData[rLurker_Normal].data[MonNumHD]				= 10;
		_MonData[rLurker_Normal].data[MonHDMod]				= 0;
		_MonData[rLurker_Normal].data[MonTHAC0]				= 11;
		_MonData[rLurker_Normal].data[MonNumAttN]			= 1;
		_MonData[rLurker_Normal].data[MonNumAttW]			= 0;
		_MonData[rLurker_Normal].data[MonDmgN01]			= 6;
		_MonData[rLurker_Normal].data[MonDmgN02]			= 0;
		_MonData[rLurker_Normal].data[MonDmgN03]			= 0;
		_MonData[rLurker_Normal].data[MonDmgW_base]			= 0;
		_MonData[rLurker_Normal].data[MonDmgW_mult]			= 0;
		_MonData[rLurker_Normal].data[MonMR]				= 0;
		_MonData[rLurker_Normal].data[MonSize]				= -1;
		_MonData[rLurker_Normal].data[MonMorale]			= 11;
		_MonData[rLurker_Normal].data[MonXP]				= 2000;
	}
	{
		_MonData[rLycanthrope_Wererat].MonName				= "Lycanthrope, Wererat";
		_MonData[rLycanthrope_Wererat].data[MonClimate1]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonClimate2]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonTerrain1]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonTerrain2]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonFrequency]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonOrganization]= -1;
		_MonData[rLycanthrope_Wererat].data[MonCycle]		= -1;
		_MonData[rLycanthrope_Wererat].data[MonDiet]		= -1;
		_MonData[rLycanthrope_Wererat].data[MonBaseInt]		= 11;
		_MonData[rLycanthrope_Wererat].data[MonIntMod]		= 2;
		_MonData[rLycanthrope_Wererat].data[MonTreasureC]	= -1;
		_MonData[rLycanthrope_Wererat].data[MonTreasureL]	= 2;//C
		_MonData[rLycanthrope_Wererat].data[MonAlign]		= alignNE;
		_MonData[rLycanthrope_Wererat].data[MonNumAppN]		= 24;
		_MonData[rLycanthrope_Wererat].data[MonNumAppO]		= 0;
		_MonData[rLycanthrope_Wererat].data[MonAC]			= 6;
		_MonData[rLycanthrope_Wererat].data[MonMvW]			= 12;
		_MonData[rLycanthrope_Wererat].data[MonMvS]			= 0;
		_MonData[rLycanthrope_Wererat].data[MonMvF]			= 0;
		_MonData[rLycanthrope_Wererat].data[MonMvB]			= 0;
		_MonData[rLycanthrope_Wererat].data[MonMvFC]		= -1;
		_MonData[rLycanthrope_Wererat].data[MonNumHD]		= 3;
		_MonData[rLycanthrope_Wererat].data[MonHDMod]		= 1;
		_MonData[rLycanthrope_Wererat].data[MonTHAC0]		= 17;
		_MonData[rLycanthrope_Wererat].data[MonNumAttN]		= 0;
		_MonData[rLycanthrope_Wererat].data[MonNumAttW]		= 1;
		_MonData[rLycanthrope_Wererat].data[MonDmgN01]		= 0;
		_MonData[rLycanthrope_Wererat].data[MonDmgN02]		= 0;
		_MonData[rLycanthrope_Wererat].data[MonDmgN03]		= 0;
		_MonData[rLycanthrope_Wererat].data[MonDmgW_base]	= 6;
		_MonData[rLycanthrope_Wererat].data[MonDmgW_mult]	= 1;
		_MonData[rLycanthrope_Wererat].data[MonMR]			= 0;
		_MonData[rLycanthrope_Wererat].data[MonSize]		= -1;
		_MonData[rLycanthrope_Wererat].data[MonMorale]		= 12;
		_MonData[rLycanthrope_Wererat].data[MonXP]			= 270;
	}
	{
		_MonData[rMammalHerd_Cattle01].MonName				= "Mammal, Cow";
		_MonData[rMammalHerd_Cattle01].data[MonClimate1]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonClimate2]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonTerrain1]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonTerrain2]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonFrequency]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonOrganization]= -1;
		_MonData[rMammalHerd_Cattle01].data[MonCycle]		= -1;
		_MonData[rMammalHerd_Cattle01].data[MonDiet]		= -1;
		_MonData[rMammalHerd_Cattle01].data[MonBaseInt]		= 2;
		_MonData[rMammalHerd_Cattle01].data[MonIntMod]		= 3;
		_MonData[rMammalHerd_Cattle01].data[MonTreasureC]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonTreasureL]	= -1;
		_MonData[rMammalHerd_Cattle01].data[MonAlign]		= alignNN;
		_MonData[rMammalHerd_Cattle01].data[MonNumAppN]		= 200;
		_MonData[rMammalHerd_Cattle01].data[MonNumAppO]		= 0;
		_MonData[rMammalHerd_Cattle01].data[MonAC]			= 7;
		_MonData[rMammalHerd_Cattle01].data[MonMvW]			= 15;
		_MonData[rMammalHerd_Cattle01].data[MonMvS]			= 0;
		_MonData[rMammalHerd_Cattle01].data[MonMvF]			= 0;
		_MonData[rMammalHerd_Cattle01].data[MonMvB]			= 0;
		_MonData[rMammalHerd_Cattle01].data[MonMvFC]		= -1;
		_MonData[rMammalHerd_Cattle01].data[MonNumHD]		= 1;
		_MonData[rMammalHerd_Cattle01].data[MonHDMod]		= 0;
		_MonData[rMammalHerd_Cattle01].data[MonTHAC0]		= 17;
		_MonData[rMammalHerd_Cattle01].data[MonNumAttN]		= 1;
		_MonData[rMammalHerd_Cattle01].data[MonNumAttW]		= 0;
		_MonData[rMammalHerd_Cattle01].data[MonDmgN01]		= 4;
		_MonData[rMammalHerd_Cattle01].data[MonDmgN02]		= 0;
		_MonData[rMammalHerd_Cattle01].data[MonDmgN03]		= 0;
		_MonData[rMammalHerd_Cattle01].data[MonDmgW_base]	= 0;
		_MonData[rMammalHerd_Cattle01].data[MonDmgW_mult]	= 0;
		_MonData[rMammalHerd_Cattle01].data[MonMR]			= 0;
		_MonData[rMammalHerd_Cattle01].data[MonSize]		= -1;
		_MonData[rMammalHerd_Cattle01].data[MonMorale]		= 3;
		_MonData[rMammalHerd_Cattle01].data[MonXP]			= 15;
	}
	{
		_MonData[rMedusa_Normal].MonName					= "Medusa";
		_MonData[rMedusa_Normal].data[MonClimate1]			= -1;
		_MonData[rMedusa_Normal].data[MonClimate2]			= -1;
		_MonData[rMedusa_Normal].data[MonTerrain1]			= -1;
		_MonData[rMedusa_Normal].data[MonTerrain2]			= -1;
		_MonData[rMedusa_Normal].data[MonFrequency]			= -1;
		_MonData[rMedusa_Normal].data[MonOrganization]		= -1;
		_MonData[rMedusa_Normal].data[MonCycle]				= -1;
		_MonData[rMedusa_Normal].data[MonDiet]				= -1;
		_MonData[rMedusa_Normal].data[MonBaseInt]			= 11;	
		_MonData[rMedusa_Normal].data[MonIntMod]			= 2;
		_MonData[rMedusa_Normal].data[MonTreasureC]			= 15;/*P*/
		_MonData[rMedusa_Normal].data[MonTreasureL]			= -1;
		_MonData[rMedusa_Normal].data[MonAlign]				= alignLE;
		_MonData[rMedusa_Normal].data[MonNumAppN]			= 3;
		_MonData[rMedusa_Normal].data[MonNumAppO]			= 0;
		_MonData[rMedusa_Normal].data[MonAC]				= 5;
		_MonData[rMedusa_Normal].data[MonMvW]				= 9;
		_MonData[rMedusa_Normal].data[MonMvS]				= 0;
		_MonData[rMedusa_Normal].data[MonMvF]				= 0;
		_MonData[rMedusa_Normal].data[MonMvB]				= 0;
		_MonData[rMedusa_Normal].data[MonMvFC]				= -1;
		_MonData[rMedusa_Normal].data[MonNumHD]				= 6;
		_MonData[rMedusa_Normal].data[MonHDMod]				= 0;
		_MonData[rMedusa_Normal].data[MonTHAC0]				= 15;
		_MonData[rMedusa_Normal].data[MonNumAttN]			= 1;
		_MonData[rMedusa_Normal].data[MonNumAttW]			= 0;
		_MonData[rMedusa_Normal].data[MonDmgN01]			= 4;
		_MonData[rMedusa_Normal].data[MonDmgN02]			= 0;
		_MonData[rMedusa_Normal].data[MonDmgN03]			= 0;
		_MonData[rMedusa_Normal].data[MonDmgW_base]			= 0;
		_MonData[rMedusa_Normal].data[MonDmgW_mult]			= 0;
		_MonData[rMedusa_Normal].data[MonMR]				= 0;
		_MonData[rMedusa_Normal].data[MonSize]				= -1;
		_MonData[rMedusa_Normal].data[MonMorale]			= 14;
		_MonData[rMedusa_Normal].data[MonXP]				= 2000;
	}
	{
		_MonData[rMinotaur_Normal].MonName					= "Minotaur";
		_MonData[rMinotaur_Normal].data[MonClimate1]		= -1;
		_MonData[rMinotaur_Normal].data[MonClimate2]		= -1;
		_MonData[rMinotaur_Normal].data[MonTerrain1]		= -1;
		_MonData[rMinotaur_Normal].data[MonTerrain2]		= -1;
		_MonData[rMinotaur_Normal].data[MonFrequency]		= -1;
		_MonData[rMinotaur_Normal].data[MonOrganization]	= -1;
		_MonData[rMinotaur_Normal].data[MonCycle]			= -1;
		_MonData[rMinotaur_Normal].data[MonDiet]			= -1;
		_MonData[rMinotaur_Normal].data[MonBaseInt]			= 5;
		_MonData[rMinotaur_Normal].data[MonIntMod]			= 3;
		_MonData[rMinotaur_Normal].data[MonTreasureC]		= -1;	
		_MonData[rMinotaur_Normal].data[MonTreasureL]		= 2;//C
		_MonData[rMinotaur_Normal].data[MonAlign]			= alignCE;
		_MonData[rMinotaur_Normal].data[MonNumAppN]			= 8;
		_MonData[rMinotaur_Normal].data[MonNumAppO]			= 0;
		_MonData[rMinotaur_Normal].data[MonAC]				= 6;
		_MonData[rMinotaur_Normal].data[MonMvW]				= 12;
		_MonData[rMinotaur_Normal].data[MonMvS]				= 0;
		_MonData[rMinotaur_Normal].data[MonMvF]				= 0;
		_MonData[rMinotaur_Normal].data[MonMvB]				= 0;
		_MonData[rMinotaur_Normal].data[MonMvFC]			= -1;
		_MonData[rMinotaur_Normal].data[MonNumHD]			= 6;
		_MonData[rMinotaur_Normal].data[MonHDMod]			= 3;
		_MonData[rMinotaur_Normal].data[MonTHAC0]			= 13;
		_MonData[rMinotaur_Normal].data[MonNumAttN]			= 2;
		_MonData[rMinotaur_Normal].data[MonNumAttW]			= 0;
		_MonData[rMinotaur_Normal].data[MonDmgN01]			= 8;
		_MonData[rMinotaur_Normal].data[MonDmgN02]			= 8;
		_MonData[rMinotaur_Normal].data[MonDmgN03]			= 0;
		_MonData[rMinotaur_Normal].data[MonDmgW_base]		= 0;
		_MonData[rMinotaur_Normal].data[MonDmgW_mult]		= 0;
		_MonData[rMinotaur_Normal].data[MonMR]				= 0;
		_MonData[rMinotaur_Normal].data[MonSize]			= -1;
		_MonData[rMinotaur_Normal].data[MonMorale]			= 13;
		_MonData[rMinotaur_Normal].data[MonXP]				= 1400;
	}
	{
		_MonData[rMold_Yellow].MonName						= "Mold, Yellow";
		_MonData[rMold_Yellow].data[MonClimate1]			= -1;
		_MonData[rMold_Yellow].data[MonClimate2]			= -1;
		_MonData[rMold_Yellow].data[MonTerrain1]			= -1;
		_MonData[rMold_Yellow].data[MonTerrain2]			= -1;
		_MonData[rMold_Yellow].data[MonFrequency]			= -1;
		_MonData[rMold_Yellow].data[MonOrganization]		= -1;
		_MonData[rMold_Yellow].data[MonCycle]				= -1;
		_MonData[rMold_Yellow].data[MonDiet]				= -1;
		_MonData[rMold_Yellow].data[MonBaseInt]				= 0;
		_MonData[rMold_Yellow].data[MonIntMod]				= 0;
		_MonData[rMold_Yellow].data[MonTreasureC]			= -1;
		_MonData[rMold_Yellow].data[MonTreasureL]			= -1;
		_MonData[rMold_Yellow].data[MonAlign]				= alignNN;
		_MonData[rMold_Yellow].data[MonNumAppN]				= 1;
		_MonData[rMold_Yellow].data[MonNumAppO]				= 0;
		_MonData[rMold_Yellow].data[MonAC]					= 9;
		_MonData[rMold_Yellow].data[MonMvW]					= 0;
		_MonData[rMold_Yellow].data[MonMvS]					= 0;
		_MonData[rMold_Yellow].data[MonMvF]					= 0;
		_MonData[rMold_Yellow].data[MonMvB]					= 0;
		_MonData[rMold_Yellow].data[MonMvFC]				= -1;
		_MonData[rMold_Yellow].data[MonNumHD]				= 0;
		_MonData[rMold_Yellow].data[MonHDMod]				= 0;
		_MonData[rMold_Yellow].data[MonTHAC0]				= 20;
		_MonData[rMold_Yellow].data[MonNumAttN]				= 1;
		_MonData[rMold_Yellow].data[MonNumAttW]				= 0;
		_MonData[rMold_Yellow].data[MonDmgN01]				= 1;
		_MonData[rMold_Yellow].data[MonDmgN02]				= 0;
		_MonData[rMold_Yellow].data[MonDmgN03]				= 0;
		_MonData[rMold_Yellow].data[MonDmgW_base]			= 0;
		_MonData[rMold_Yellow].data[MonDmgW_mult]			= 0;
		_MonData[rMold_Yellow].data[MonMR]					= 20;
		_MonData[rMold_Yellow].data[MonSize]				= -1;
		_MonData[rMold_Yellow].data[MonMorale]				= 20;
		_MonData[rMold_Yellow].data[MonXP]					= 65;
	}
	{
		_MonData[rMummy_Cat].MonName						= "Mummy, Cat";
		_MonData[rMummy_Cat].data[MonClimate1]				= -1;
		_MonData[rMummy_Cat].data[MonClimate2]				= -1;
		_MonData[rMummy_Cat].data[MonTerrain1]				= -1;
		_MonData[rMummy_Cat].data[MonTerrain2]				= -1;
		_MonData[rMummy_Cat].data[MonFrequency]				= -1;
		_MonData[rMummy_Cat].data[MonOrganization]			= -1;
		_MonData[rMummy_Cat].data[MonCycle]					= -1;
		_MonData[rMummy_Cat].data[MonDiet]					= -1;
		_MonData[rMummy_Cat].data[MonBaseInt]				= 7;
		_MonData[rMummy_Cat].data[MonIntMod]				= 0;
		_MonData[rMummy_Cat].data[MonTreasureC]				= -1;
		_MonData[rMummy_Cat].data[MonTreasureL]				= -1;
		_MonData[rMummy_Cat].data[MonAlign]					= alignCE;
		_MonData[rMummy_Cat].data[MonNumAppN]				= 1;
		_MonData[rMummy_Cat].data[MonNumAppO]				= 0;
		_MonData[rMummy_Cat].data[MonAC]					= 3;
		_MonData[rMummy_Cat].data[MonMvW]					= 18;
		_MonData[rMummy_Cat].data[MonMvS]					= 0;
		_MonData[rMummy_Cat].data[MonMvF]					= 0;
		_MonData[rMummy_Cat].data[MonMvB]					= 0;
		_MonData[rMummy_Cat].data[MonMvFC]					= -1;
		_MonData[rMummy_Cat].data[MonNumHD]					= 3;
		_MonData[rMummy_Cat].data[MonHDMod]					= 3;
		_MonData[rMummy_Cat].data[MonTHAC0]					= 17;
		_MonData[rMummy_Cat].data[MonNumAttN]				= 3;
		_MonData[rMummy_Cat].data[MonNumAttW]				= 0;
		_MonData[rMummy_Cat].data[MonDmgN01]				= 6;
		_MonData[rMummy_Cat].data[MonDmgN02]				= 6;
		_MonData[rMummy_Cat].data[MonDmgN03]				= 6;
		_MonData[rMummy_Cat].data[MonDmgW_base]				= 0;
		_MonData[rMummy_Cat].data[MonDmgW_mult]				= 0;
		_MonData[rMummy_Cat].data[MonMR]					= 0;
		_MonData[rMummy_Cat].data[MonSize]					= -1;
		_MonData[rMummy_Cat].data[MonMorale]				= 18;
		_MonData[rMummy_Cat].data[MonXP]					= 975;
	}
	{
		_MonData[rOSJ_GelatinousCube].MonName				= "OSJ, Gelatinous Cube";
		_MonData[rOSJ_GelatinousCube].data[MonClimate1]		= -1;
		_MonData[rOSJ_GelatinousCube].data[MonClimate2]		= -1;
		_MonData[rOSJ_GelatinousCube].data[MonTerrain1]		= -1;
		_MonData[rOSJ_GelatinousCube].data[MonTerrain2]		= -1;
		_MonData[rOSJ_GelatinousCube].data[MonFrequency]	= -1;
		_MonData[rOSJ_GelatinousCube].data[MonOrganization]	= -1;
		_MonData[rOSJ_GelatinousCube].data[MonCycle]		= -1;
		_MonData[rOSJ_GelatinousCube].data[MonDiet]			= -1;
		_MonData[rOSJ_GelatinousCube].data[MonBaseInt]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonIntMod]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonTreasureC]	= -1;
		_MonData[rOSJ_GelatinousCube].data[MonTreasureL]	= -1;
		_MonData[rOSJ_GelatinousCube].data[MonAlign]		= alignNN;
		_MonData[rOSJ_GelatinousCube].data[MonNumAppN]		= 1;
		_MonData[rOSJ_GelatinousCube].data[MonNumAppO]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonAC]			= 8;
		_MonData[rOSJ_GelatinousCube].data[MonMvW]			= 8;
		_MonData[rOSJ_GelatinousCube].data[MonMvS]			= 0;
		_MonData[rOSJ_GelatinousCube].data[MonMvF]			= 0;
		_MonData[rOSJ_GelatinousCube].data[MonMvB]			= 0;
		_MonData[rOSJ_GelatinousCube].data[MonMvFC]			= -1;
		_MonData[rOSJ_GelatinousCube].data[MonNumHD]		= 4;
		_MonData[rOSJ_GelatinousCube].data[MonHDMod]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonTHAC0]		= 17;
		_MonData[rOSJ_GelatinousCube].data[MonNumAttN]		= 1;
		_MonData[rOSJ_GelatinousCube].data[MonNumAttW]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonDmgN01]		= 8;
		_MonData[rOSJ_GelatinousCube].data[MonDmgN02]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonDmgN03]		= 0;
		_MonData[rOSJ_GelatinousCube].data[MonDmgW_base]	= 0;
		_MonData[rOSJ_GelatinousCube].data[MonDmgW_mult]	= 0;
		_MonData[rOSJ_GelatinousCube].data[MonMR]			= 0;
		_MonData[rOSJ_GelatinousCube].data[MonSize]			= -1;
		_MonData[rOSJ_GelatinousCube].data[MonMorale]		= 10;
		_MonData[rOSJ_GelatinousCube].data[MonXP]			= 650;
	}
	{
		_MonData[rOSJ_GreenSlime].MonName					= "OSJ, Green Slime";
		_MonData[rOSJ_GreenSlime].data[MonClimate1]			= -1;
		_MonData[rOSJ_GreenSlime].data[MonClimate2]			= -1;
		_MonData[rOSJ_GreenSlime].data[MonTerrain1]			= -1;
		_MonData[rOSJ_GreenSlime].data[MonTerrain2]			= -1;
		_MonData[rOSJ_GreenSlime].data[MonFrequency]		= -1;
		_MonData[rOSJ_GreenSlime].data[MonOrganization]		= -1;
		_MonData[rOSJ_GreenSlime].data[MonCycle]			= -1;
		_MonData[rOSJ_GreenSlime].data[MonDiet]				= -1;
		_MonData[rOSJ_GreenSlime].data[MonBaseInt]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonIntMod]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonTreasureC]		= -1;
		_MonData[rOSJ_GreenSlime].data[MonTreasureL]		= -1;
		_MonData[rOSJ_GreenSlime].data[MonAlign]			= alignNN;
		_MonData[rOSJ_GreenSlime].data[MonNumAppN]			= 6;
		_MonData[rOSJ_GreenSlime].data[MonNumAppO]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonAC]				= 9;
		_MonData[rOSJ_GreenSlime].data[MonMvW]				= 0;
		_MonData[rOSJ_GreenSlime].data[MonMvS]				= 0;
		_MonData[rOSJ_GreenSlime].data[MonMvF]				= 0;
		_MonData[rOSJ_GreenSlime].data[MonMvB]				= 0;
		_MonData[rOSJ_GreenSlime].data[MonMvFC]				= -1;
		_MonData[rOSJ_GreenSlime].data[MonNumHD]			= 2;
		_MonData[rOSJ_GreenSlime].data[MonHDMod]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonTHAC0]			= 19;
		_MonData[rOSJ_GreenSlime].data[MonNumAttN]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonNumAttW]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonDmgN01]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonDmgN02]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonDmgN03]			= 0;
		_MonData[rOSJ_GreenSlime].data[MonDmgW_base]		= 0;
		_MonData[rOSJ_GreenSlime].data[MonDmgW_mult]		= 0;
		_MonData[rOSJ_GreenSlime].data[MonMR]				= 0;
		_MonData[rOSJ_GreenSlime].data[MonSize]				= -1;
		_MonData[rOSJ_GreenSlime].data[MonMorale]			= 10;
		_MonData[rOSJ_GreenSlime].data[MonXP]				= 65;
	}
	{
		_MonData[rOSJ_SlitheringTracker].MonName			= "OSJ, Slithering Tracker";
		_MonData[rOSJ_SlitheringTracker].data[MonClimate1]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonClimate2]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonTerrain1]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonTerrain2]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonFrequency]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonOrganization]= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonCycle]		= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonDiet]		= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonBaseInt]	= 8;
		_MonData[rOSJ_SlitheringTracker].data[MonIntMod]	= 3;
		_MonData[rOSJ_SlitheringTracker].data[MonTreasureC]	= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonTreasureL]	= 2;//C
		_MonData[rOSJ_SlitheringTracker].data[MonAlign]		= alignNN;
		_MonData[rOSJ_SlitheringTracker].data[MonNumAppN]	= 1;
		_MonData[rOSJ_SlitheringTracker].data[MonNumAppO]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonAC]		= 5;
		_MonData[rOSJ_SlitheringTracker].data[MonMvW]		= 12;
		_MonData[rOSJ_SlitheringTracker].data[MonMvS]		= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonMvF]		= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonMvB]		= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonMvFC]		= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonNumHD]		= 5;
		_MonData[rOSJ_SlitheringTracker].data[MonHDMod]		= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonTHAC0]		= 15;
		_MonData[rOSJ_SlitheringTracker].data[MonNumAttN]	= 1;
		_MonData[rOSJ_SlitheringTracker].data[MonNumAttW]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonDmgN01]	= 1;
		_MonData[rOSJ_SlitheringTracker].data[MonDmgN02]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonDmgN03]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonDmgW_base]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonDmgW_mult]	= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonMR]		= 0;
		_MonData[rOSJ_SlitheringTracker].data[MonSize]		= -1;
		_MonData[rOSJ_SlitheringTracker].data[MonMorale]	= 15;
		_MonData[rOSJ_SlitheringTracker].data[MonXP]		= 975;
	}
	{
		_MonData[rOtyugh_Normal08].MonName					= "Otyugh";
		_MonData[rOtyugh_Normal08].data[MonClimate1]		= -1;
		_MonData[rOtyugh_Normal08].data[MonClimate2]		= -1;
		_MonData[rOtyugh_Normal08].data[MonTerrain1]		= -1;
		_MonData[rOtyugh_Normal08].data[MonTerrain2]		= -1;
		_MonData[rOtyugh_Normal08].data[MonFrequency]		= -1;
		_MonData[rOtyugh_Normal08].data[MonOrganization]	= -1;
		_MonData[rOtyugh_Normal08].data[MonCycle]			= -1;
		_MonData[rOtyugh_Normal08].data[MonDiet]			= -1;
		_MonData[rOtyugh_Normal08].data[MonBaseInt]			= 5;
		_MonData[rOtyugh_Normal08].data[MonIntMod]			= 6;
		_MonData[rOtyugh_Normal08].data[MonTreasureC]		= -1;
		_MonData[rOtyugh_Normal08].data[MonTreasureL]		= -1;
		_MonData[rOtyugh_Normal08].data[MonAlign]			= alignNN;
		_MonData[rOtyugh_Normal08].data[MonNumAppN]			= 1;
		_MonData[rOtyugh_Normal08].data[MonNumAppO]			= 2;
		_MonData[rOtyugh_Normal08].data[MonAC]				= 3;
		_MonData[rOtyugh_Normal08].data[MonMvW]				= 6;
		_MonData[rOtyugh_Normal08].data[MonMvS]				= 0;
		_MonData[rOtyugh_Normal08].data[MonMvF]				= 0;
		_MonData[rOtyugh_Normal08].data[MonMvB]				= 0;
		_MonData[rOtyugh_Normal08].data[MonMvFC]			= -1;
		_MonData[rOtyugh_Normal08].data[MonNumHD]			= 8;
		_MonData[rOtyugh_Normal08].data[MonHDMod]			= 0;
		_MonData[rOtyugh_Normal08].data[MonTHAC0]			= 13;
		_MonData[rOtyugh_Normal08].data[MonNumAttN]			= 3;
		_MonData[rOtyugh_Normal08].data[MonNumAttW]			= 0;
		_MonData[rOtyugh_Normal08].data[MonDmgN01]			= 8;
		_MonData[rOtyugh_Normal08].data[MonDmgN02]			= 8;
		_MonData[rOtyugh_Normal08].data[MonDmgN03]			= 5;
		_MonData[rOtyugh_Normal08].data[MonDmgW_base]		= 0;
		_MonData[rOtyugh_Normal08].data[MonDmgW_mult]		= 0;
		_MonData[rOtyugh_Normal08].data[MonMR]				= 0;
		_MonData[rOtyugh_Normal08].data[MonSize]			= -1;
		_MonData[rOtyugh_Normal08].data[MonMorale]			= 14;
		_MonData[rOtyugh_Normal08].data[MonXP]				= 1400;
	}
	{
		_MonData[rOwlbear].MonName							= "Owlbear";
		_MonData[rOwlbear].data[MonClimate1]				= -1;
		_MonData[rOwlbear].data[MonClimate2]				= -1;
		_MonData[rOwlbear].data[MonTerrain1]				= -1;
		_MonData[rOwlbear].data[MonTerrain2]				= -1;
		_MonData[rOwlbear].data[MonFrequency]				= -1;
		_MonData[rOwlbear].data[MonOrganization]			= -1;
		_MonData[rOwlbear].data[MonCycle]					= -1;
		_MonData[rOwlbear].data[MonDiet]					= -1;
		_MonData[rOwlbear].data[MonBaseInt]					= 5;
		_MonData[rOwlbear].data[MonIntMod]					= 3;
		_MonData[rOwlbear].data[MonTreasureC]				= -1;
		_MonData[rOwlbear].data[MonTreasureL]				= 2;//C
		_MonData[rOwlbear].data[MonAlign]					= alignNN;
		_MonData[rOwlbear].data[MonNumAppN]					= 1;
		_MonData[rOwlbear].data[MonNumAppO]					= 8;
		_MonData[rOwlbear].data[MonAC]						= 5;
		_MonData[rOwlbear].data[MonMvW]						= 12;
		_MonData[rOwlbear].data[MonMvS]						= 0;
		_MonData[rOwlbear].data[MonMvF]						= 0;
		_MonData[rOwlbear].data[MonMvB]						= 0;
		_MonData[rOwlbear].data[MonMvFC]					= -1;
		_MonData[rOwlbear].data[MonNumHD]					= 5;
		_MonData[rOwlbear].data[MonHDMod]					= 2;
		_MonData[rOwlbear].data[MonTHAC0]					= 15;
		_MonData[rOwlbear].data[MonNumAttN]					= 3;
		_MonData[rOwlbear].data[MonNumAttW]					= 0;
		_MonData[rOwlbear].data[MonDmgN01]					= 6;
		_MonData[rOwlbear].data[MonDmgN02]					= 6;
		_MonData[rOwlbear].data[MonDmgN03]					= 12;
		_MonData[rOwlbear].data[MonDmgW_base]				= 0;
		_MonData[rOwlbear].data[MonDmgW_mult]				= 0;
		_MonData[rOwlbear].data[MonMR]						= 0;
		_MonData[rOwlbear].data[MonSize]					= -1;
		_MonData[rOwlbear].data[MonMorale]					= 12;
		_MonData[rOwlbear].data[MonXP]						= 420;
	}
	{
		_MonData[rPlantI_ShamblingMound08].MonName			= "Plant, Shambling Mound";
		_MonData[rPlantI_ShamblingMound08].data[MonClimate1]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonClimate2]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonTerrain1]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonTerrain2]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonFrequency]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonOrganization]= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonCycle]	= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonDiet]	= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonBaseInt]	= 5;
		_MonData[rPlantI_ShamblingMound08].data[MonIntMod]	= 3;
		_MonData[rPlantI_ShamblingMound08].data[MonTreasureC]= 23;/*X*/
		_MonData[rPlantI_ShamblingMound08].data[MonTreasureL]= 1;//B
		_MonData[rPlantI_ShamblingMound08].data[MonAlign]	= alignNN;
		_MonData[rPlantI_ShamblingMound08].data[MonNumAppN]	= 3;
		_MonData[rPlantI_ShamblingMound08].data[MonNumAppO]	= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonAC]		= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonMvW]		= 6;
		_MonData[rPlantI_ShamblingMound08].data[MonMvS]		= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonMvF]		= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonMvB]		= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonMvFC]	= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonNumHD]	= 8;
		_MonData[rPlantI_ShamblingMound08].data[MonHDMod]	= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonTHAC0]	= 13;
		_MonData[rPlantI_ShamblingMound08].data[MonNumAttN]	= 2;
		_MonData[rPlantI_ShamblingMound08].data[MonNumAttW]	= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonDmgN01]	= 16;
		_MonData[rPlantI_ShamblingMound08].data[MonDmgN02]	= 16;
		_MonData[rPlantI_ShamblingMound08].data[MonDmgN03]	= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonDmgW_base]= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonDmgW_mult]= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonMR]		= 0;
		_MonData[rPlantI_ShamblingMound08].data[MonSize]	= -1;
		_MonData[rPlantI_ShamblingMound08].data[MonMorale]	= 18;
		_MonData[rPlantI_ShamblingMound08].data[MonXP]		= 6000;
	}
	{
		_MonData[rRat_Normal].MonName						= "Rat";
		_MonData[rRat_Normal].data[MonClimate1]				= -1;
		_MonData[rRat_Normal].data[MonClimate2]				= -1;
		_MonData[rRat_Normal].data[MonTerrain1]				= -1;
		_MonData[rRat_Normal].data[MonTerrain2]				= -1;
		_MonData[rRat_Normal].data[MonFrequency]			= -1;
		_MonData[rRat_Normal].data[MonOrganization]			= -1;
		_MonData[rRat_Normal].data[MonCycle]				= -1;
		_MonData[rRat_Normal].data[MonDiet]					= -1;
		_MonData[rRat_Normal].data[MonBaseInt]				= 1;
		_MonData[rRat_Normal].data[MonIntMod]				= 0;
		_MonData[rRat_Normal].data[MonTreasureC]			= -1;
		_MonData[rRat_Normal].data[MonTreasureL]			= -1;
		_MonData[rRat_Normal].data[MonAlign]				= alignNN;
		_MonData[rRat_Normal].data[MonNumAppN]				= 100;
		_MonData[rRat_Normal].data[MonNumAppO]				= 0;
		_MonData[rRat_Normal].data[MonAC]					= 7;
		_MonData[rRat_Normal].data[MonMvW]					= 15;
		_MonData[rRat_Normal].data[MonMvS]					= 0;
		_MonData[rRat_Normal].data[MonMvF]					= 0;
		_MonData[rRat_Normal].data[MonMvB]					= 0;
		_MonData[rRat_Normal].data[MonMvFC]					= -1;
		_MonData[rRat_Normal].data[MonNumHD]				= 1;
		_MonData[rRat_Normal].data[MonHDMod]				= -6;
		_MonData[rRat_Normal].data[MonTHAC0]				= 20;
		_MonData[rRat_Normal].data[MonNumAttN]				= 1;
		_MonData[rRat_Normal].data[MonNumAttW]				= 0;
		_MonData[rRat_Normal].data[MonDmgN01]				= 1;
		_MonData[rRat_Normal].data[MonDmgN02]				= 0;
		_MonData[rRat_Normal].data[MonDmgN03]				= 0;
		_MonData[rRat_Normal].data[MonDmgW_base]			= 0;
		_MonData[rRat_Normal].data[MonDmgW_mult]			= 0;
		_MonData[rRat_Normal].data[MonMR]					= 0;
		_MonData[rRat_Normal].data[MonSize]					= -1;
		_MonData[rRat_Normal].data[MonMorale]				= 3;
		_MonData[rRat_Normal].data[MonXP]					= 7;
	}
	{
		_MonData[rRat_Giant].MonName						= "Rat, Giant";
		_MonData[rRat_Giant].data[MonClimate1]				= -1;
		_MonData[rRat_Giant].data[MonClimate2]				= -1;
		_MonData[rRat_Giant].data[MonTerrain1]				= -1;
		_MonData[rRat_Giant].data[MonTerrain2]				= -1;
		_MonData[rRat_Giant].data[MonFrequency]				= -1;
		_MonData[rRat_Giant].data[MonOrganization]			= -1;
		_MonData[rRat_Giant].data[MonCycle]					= -1;
		_MonData[rRat_Giant].data[MonDiet]					= -1;
		_MonData[rRat_Giant].data[MonBaseInt]				= 2;
		_MonData[rRat_Giant].data[MonIntMod]				= 3;
		_MonData[rRat_Giant].data[MonTreasureC]				= -1;
		_MonData[rRat_Giant].data[MonTreasureL]				= 2;//C
		_MonData[rRat_Giant].data[MonAlign]					= alignNE;
		_MonData[rRat_Giant].data[MonNumAppN]				= 50;
		_MonData[rRat_Giant].data[MonNumAppO]				= 0;
		_MonData[rRat_Giant].data[MonAC]					= 7;
		_MonData[rRat_Giant].data[MonMvW]					= 12;
		_MonData[rRat_Giant].data[MonMvS]					= 6;
		_MonData[rRat_Giant].data[MonMvF]					= 0;
		_MonData[rRat_Giant].data[MonMvB]					= 0;
		_MonData[rRat_Giant].data[MonMvFC]					= -1;
		_MonData[rRat_Giant].data[MonNumHD]					= 1;
		_MonData[rRat_Giant].data[MonHDMod]					= -4;
		_MonData[rRat_Giant].data[MonTHAC0]					= 20;
		_MonData[rRat_Giant].data[MonNumAttN]				= 1;
		_MonData[rRat_Giant].data[MonNumAttW]				= 0;
		_MonData[rRat_Giant].data[MonDmgN01]				= 3;
		_MonData[rRat_Giant].data[MonDmgN02]				= 0;
		_MonData[rRat_Giant].data[MonDmgN03]				= 0;
		_MonData[rRat_Giant].data[MonDmgW_base]				= 0;
		_MonData[rRat_Giant].data[MonDmgW_mult]				= 0;
		_MonData[rRat_Giant].data[MonMR]					= 0;
		_MonData[rRat_Giant].data[MonSize]					= -1;
		_MonData[rRat_Giant].data[MonMorale]				= 6;
		_MonData[rRat_Giant].data[MonXP]					= 15;
	}
	{
		_MonData[rRustMonster].MonName						= "Rust Monster";
		_MonData[rRustMonster].data[MonClimate1]			= -1;
		_MonData[rRustMonster].data[MonClimate2]			= -1;
		_MonData[rRustMonster].data[MonTerrain1]			= -1;
		_MonData[rRustMonster].data[MonTerrain2]			= -1;
		_MonData[rRustMonster].data[MonFrequency]			= -1;
		_MonData[rRustMonster].data[MonOrganization]		= -1;
		_MonData[rRustMonster].data[MonCycle]				= -1;
		_MonData[rRustMonster].data[MonDiet]				= -1;
		_MonData[rRustMonster].data[MonBaseInt]				= 1;
		_MonData[rRustMonster].data[MonIntMod]				= 0;
		_MonData[rRustMonster].data[MonTreasureC]			= -1;
		_MonData[rRustMonster].data[MonTreasureL]			= 16;//Q
		_MonData[rRustMonster].data[MonAlign]				= alignNN;
		_MonData[rRustMonster].data[MonNumAppN]				= 2;
		_MonData[rRustMonster].data[MonNumAppO]				= 0;
		_MonData[rRustMonster].data[MonAC]					= 2;
		_MonData[rRustMonster].data[MonMvW]					= 18;
		_MonData[rRustMonster].data[MonMvS]					= 0;
		_MonData[rRustMonster].data[MonMvF]					= 0;
		_MonData[rRustMonster].data[MonMvB]					= 0;
		_MonData[rRustMonster].data[MonMvFC]				= -1;
		_MonData[rRustMonster].data[MonNumHD]				= 5;
		_MonData[rRustMonster].data[MonHDMod]				= 0;
		_MonData[rRustMonster].data[MonTHAC0]				= 15;
		_MonData[rRustMonster].data[MonNumAttN]				= 2;
		_MonData[rRustMonster].data[MonNumAttW]				= 0;
		_MonData[rRustMonster].data[MonDmgN01]				= 4;
		_MonData[rRustMonster].data[MonDmgN02]				= 4;
		_MonData[rRustMonster].data[MonDmgN03]				= 0;
		_MonData[rRustMonster].data[MonDmgW_base]			= 0;
		_MonData[rRustMonster].data[MonDmgW_mult]			= 0;
		_MonData[rRustMonster].data[MonMR]					= 0;
		_MonData[rRustMonster].data[MonSize]				= -1;
		_MonData[rRustMonster].data[MonMorale]				= 9;
		_MonData[rRustMonster].data[MonXP]					= 270;
	}
	{
		_MonData[rShadow].MonName							= "Shadow";
		_MonData[rShadow].data[MonClimate1]					= -1;
		_MonData[rShadow].data[MonClimate2]					= -1;
		_MonData[rShadow].data[MonTerrain1]					= -1;
		_MonData[rShadow].data[MonTerrain2]					= -1;
		_MonData[rShadow].data[MonFrequency]				= -1;
		_MonData[rShadow].data[MonOrganization]				= -1;
		_MonData[rShadow].data[MonCycle]					= -1;
		_MonData[rShadow].data[MonDiet]						= -1;
		_MonData[rShadow].data[MonBaseInt]					= 5;
		_MonData[rShadow].data[MonIntMod]					= 3;
		_MonData[rShadow].data[MonTreasureC]				= -1;
		_MonData[rShadow].data[MonTreasureL]				= 5;//F
		_MonData[rShadow].data[MonAlign]					= alignCE;
		_MonData[rShadow].data[MonNumAppN]					= 20;
		_MonData[rShadow].data[MonNumAppO]					= 0;
		_MonData[rShadow].data[MonAC]						= 7;
		_MonData[rShadow].data[MonMvW]						= 12;
		_MonData[rShadow].data[MonMvS]						= 0;
		_MonData[rShadow].data[MonMvF]						= 0;
		_MonData[rShadow].data[MonMvB]						= 0;
		_MonData[rShadow].data[MonMvFC]						= -1;
		_MonData[rShadow].data[MonNumHD]					= 3;
		_MonData[rShadow].data[MonHDMod]					= 3;
		_MonData[rShadow].data[MonTHAC0]					= 17;
		_MonData[rShadow].data[MonNumAttN]					= 1;
		_MonData[rShadow].data[MonNumAttW]					= 0;
		_MonData[rShadow].data[MonDmgN01]					= 5;
		_MonData[rShadow].data[MonDmgN02]					= 0;
		_MonData[rShadow].data[MonDmgN03]					= 0;
		_MonData[rShadow].data[MonDmgW_base]				= 0;
		_MonData[rShadow].data[MonDmgW_mult]				= 0;
		_MonData[rShadow].data[MonMR]						= 0;
		_MonData[rShadow].data[MonSize]						= -1;
		_MonData[rShadow].data[MonMorale]					= 20;
		_MonData[rShadow].data[MonXP]						= 420;
	}
	{
		_MonData[rSkeleton_Normal].MonName					= "Skeleton";
		_MonData[rSkeleton_Normal].data[MonClimate1]		= -1;
		_MonData[rSkeleton_Normal].data[MonClimate2]		= -1;
		_MonData[rSkeleton_Normal].data[MonTerrain1]		= -1;
		_MonData[rSkeleton_Normal].data[MonTerrain2]		= -1;
		_MonData[rSkeleton_Normal].data[MonFrequency]		= -1;
		_MonData[rSkeleton_Normal].data[MonOrganization]	= -1;
		_MonData[rSkeleton_Normal].data[MonCycle]			= -1;
		_MonData[rSkeleton_Normal].data[MonDiet]			= -1;
		_MonData[rSkeleton_Normal].data[MonBaseInt]			= 0;
		_MonData[rSkeleton_Normal].data[MonIntMod]			= 0;
		_MonData[rSkeleton_Normal].data[MonTreasureC]		= -1;
		_MonData[rSkeleton_Normal].data[MonTreasureL]		= -1;
		_MonData[rSkeleton_Normal].data[MonAlign]			= alignNN;
		_MonData[rSkeleton_Normal].data[MonNumAppN]			= 30;
		_MonData[rSkeleton_Normal].data[MonNumAppO]			= 0;
		_MonData[rSkeleton_Normal].data[MonAC]				= 7;
		_MonData[rSkeleton_Normal].data[MonMvW]				= 12;
		_MonData[rSkeleton_Normal].data[MonMvS]				= 0;
		_MonData[rSkeleton_Normal].data[MonMvF]				= 0;
		_MonData[rSkeleton_Normal].data[MonMvB]				= 0;
		_MonData[rSkeleton_Normal].data[MonMvFC]			= -1;
		_MonData[rSkeleton_Normal].data[MonNumHD]			= 1;
		_MonData[rSkeleton_Normal].data[MonHDMod]			= 0;
		_MonData[rSkeleton_Normal].data[MonTHAC0]			= 19;
		_MonData[rSkeleton_Normal].data[MonNumAttN]			= 0;
		_MonData[rSkeleton_Normal].data[MonNumAttW]			= 1;
		_MonData[rSkeleton_Normal].data[MonDmgN01]			= 0;
		_MonData[rSkeleton_Normal].data[MonDmgN02]			= 0;
		_MonData[rSkeleton_Normal].data[MonDmgN03]			= 0;
		_MonData[rSkeleton_Normal].data[MonDmgW_base]		= 6;
		_MonData[rSkeleton_Normal].data[MonDmgW_mult]		= 1;
		_MonData[rSkeleton_Normal].data[MonMR]				= 0;
		_MonData[rSkeleton_Normal].data[MonSize]			= -1;
		_MonData[rSkeleton_Normal].data[MonMorale]			= 20;
		_MonData[rSkeleton_Normal].data[MonXP]				= 65;
	}
	{
		_MonData[rSpider_Large].MonName						= "Spider, Large";
		_MonData[rSpider_Large].data[MonClimate1]			= -1;
		_MonData[rSpider_Large].data[MonClimate2]			= -1;
		_MonData[rSpider_Large].data[MonTerrain1]			= -1;
		_MonData[rSpider_Large].data[MonTerrain2]			= -1;
		_MonData[rSpider_Large].data[MonFrequency]			= -1;
		_MonData[rSpider_Large].data[MonOrganization]		= -1;
		_MonData[rSpider_Large].data[MonCycle]				= -1;
		_MonData[rSpider_Large].data[MonDiet]				= -1;
		_MonData[rSpider_Large].data[MonBaseInt]			= 0;
		_MonData[rSpider_Large].data[MonIntMod]				= 0;
		_MonData[rSpider_Large].data[MonTreasureC]			= -1;
		_MonData[rSpider_Large].data[MonTreasureL]			= 9;//J
		_MonData[rSpider_Large].data[MonAlign]				= alignNN;
		_MonData[rSpider_Large].data[MonNumAppN]			= 20;
		_MonData[rSpider_Large].data[MonNumAppO]			= 0;
		_MonData[rSpider_Large].data[MonAC]					= 8;
		_MonData[rSpider_Large].data[MonMvW]				= 15;
		_MonData[rSpider_Large].data[MonMvS]				= 0;
		_MonData[rSpider_Large].data[MonMvF]				= 0;
		_MonData[rSpider_Large].data[MonMvB]				= 0;
		_MonData[rSpider_Large].data[MonMvFC]				= -1;
		_MonData[rSpider_Large].data[MonNumHD]				= 1;
		_MonData[rSpider_Large].data[MonHDMod]				= 1;
		_MonData[rSpider_Large].data[MonTHAC0]				= 19;
		_MonData[rSpider_Large].data[MonNumAttN]			= 1;
		_MonData[rSpider_Large].data[MonNumAttW]			= 0;
		_MonData[rSpider_Large].data[MonDmgN01]				= 1;
		_MonData[rSpider_Large].data[MonDmgN02]				= 0;
		_MonData[rSpider_Large].data[MonDmgN03]				= 0;
		_MonData[rSpider_Large].data[MonDmgW_base]			= 0;
		_MonData[rSpider_Large].data[MonDmgW_mult]			= 0;
		_MonData[rSpider_Large].data[MonMR]					= 0;
		_MonData[rSpider_Large].data[MonSize]				= -1;
		_MonData[rSpider_Large].data[MonMorale]				= 7;
		_MonData[rSpider_Large].data[MonXP]					= 175;
	}
	{
		_MonData[rSpider_Wolf].MonName						= "Spider, Wolf";
		_MonData[rSpider_Wolf].data[MonClimate1]			= -1;
		_MonData[rSpider_Wolf].data[MonClimate2]			= -1;
		_MonData[rSpider_Wolf].data[MonTerrain1]			= -1;
		_MonData[rSpider_Wolf].data[MonTerrain2]			= -1;
		_MonData[rSpider_Wolf].data[MonFrequency]			= -1;
		_MonData[rSpider_Wolf].data[MonOrganization]		= -1;
		_MonData[rSpider_Wolf].data[MonCycle]				= -1;
		_MonData[rSpider_Wolf].data[MonDiet]				= -1;
		_MonData[rSpider_Wolf].data[MonBaseInt]				= 1;
		_MonData[rSpider_Wolf].data[MonIntMod]				= 0;
		_MonData[rSpider_Wolf].data[MonTreasureC]			= -1;
		_MonData[rSpider_Wolf].data[MonTreasureL]			= -1;
		_MonData[rSpider_Wolf].data[MonAlign]				= alignNN;
		_MonData[rSpider_Wolf].data[MonNumAppN]				= 4;
		_MonData[rSpider_Wolf].data[MonNumAppO]				= 0;
		_MonData[rSpider_Wolf].data[MonAC]					= 8;
		_MonData[rSpider_Wolf].data[MonMvW]					= 12;
		_MonData[rSpider_Wolf].data[MonMvS]					= 0;
		_MonData[rSpider_Wolf].data[MonMvF]					= 0;
		_MonData[rSpider_Wolf].data[MonMvB]					= 0;
		_MonData[rSpider_Wolf].data[MonMvFC]				= -1;
		_MonData[rSpider_Wolf].data[MonNumHD]				= 2;
		_MonData[rSpider_Wolf].data[MonHDMod]				= 0;
		_MonData[rSpider_Wolf].data[MonTHAC0]				= 19;
		_MonData[rSpider_Wolf].data[MonNumAttN]				= 1;
		_MonData[rSpider_Wolf].data[MonNumAttW]				= 0;
		_MonData[rSpider_Wolf].data[MonDmgN01]				= 6;
		_MonData[rSpider_Wolf].data[MonDmgN02]				= 0;
		_MonData[rSpider_Wolf].data[MonDmgN03]				= 0;
		_MonData[rSpider_Wolf].data[MonDmgW_base]			= 0;
		_MonData[rSpider_Wolf].data[MonDmgW_mult]			= 0;
		_MonData[rSpider_Wolf].data[MonMR]					= 0;
		_MonData[rSpider_Wolf].data[MonSize]				= -1;
		_MonData[rSpider_Wolf].data[MonMorale]				= 15;
		_MonData[rSpider_Wolf].data[MonXP]					= 35;
	}
	{
		_MonData[rStirge].MonName							= "Stirge";
		_MonData[rStirge].data[MonClimate1]					= -1;
		_MonData[rStirge].data[MonClimate2]					= -1;
		_MonData[rStirge].data[MonTerrain1]					= -1;
		_MonData[rStirge].data[MonTerrain2]					= -1;
		_MonData[rStirge].data[MonFrequency]				= -1;
		_MonData[rStirge].data[MonOrganization]				= -1;
		_MonData[rStirge].data[MonCycle]					= -1;
		_MonData[rStirge].data[MonDiet]						= -1;
		_MonData[rStirge].data[MonBaseInt]					= 1;
		_MonData[rStirge].data[MonIntMod]					= 0;
		_MonData[rStirge].data[MonTreasureC]				= -1;
		_MonData[rStirge].data[MonTreasureL]				= 3;//D
		_MonData[rStirge].data[MonAlign]					= alignNN;
		_MonData[rStirge].data[MonNumAppN]					= 30;
		_MonData[rStirge].data[MonNumAppO]					= 0;
		_MonData[rStirge].data[MonAC]						= 8;
		_MonData[rStirge].data[MonMvW]						= 3;
		_MonData[rStirge].data[MonMvS]						= 0;
		_MonData[rStirge].data[MonMvF]						= 18;
		_MonData[rStirge].data[MonMvB]						= 0;
		_MonData[rStirge].data[MonMvFC]						= 2;/*C*/
		_MonData[rStirge].data[MonNumHD]					= 1;
		_MonData[rStirge].data[MonHDMod]					= 1;
		_MonData[rStirge].data[MonTHAC0]					= 17;
		_MonData[rStirge].data[MonNumAttN]					= 1;
		_MonData[rStirge].data[MonNumAttW]					= 0;
		_MonData[rStirge].data[MonDmgN01]					= 3;
		_MonData[rStirge].data[MonDmgN02]					= 0;
		_MonData[rStirge].data[MonDmgN03]					= 0;
		_MonData[rStirge].data[MonDmgW_base]				= 0;
		_MonData[rStirge].data[MonDmgW_mult]				= 0;
		_MonData[rStirge].data[MonMR]						= 0;
		_MonData[rStirge].data[MonSize]						= -1;
		_MonData[rStirge].data[MonMorale]					= 8;
		_MonData[rStirge].data[MonXP]						= 175;
	}
	{
		_MonData[rTroll_Normal].MonName						= "Troll";
		_MonData[rTroll_Normal].data[MonClimate1]			= -1;
		_MonData[rTroll_Normal].data[MonClimate2]			= -1;
		_MonData[rTroll_Normal].data[MonTerrain1]			= -1;
		_MonData[rTroll_Normal].data[MonTerrain2]			= -1;
		_MonData[rTroll_Normal].data[MonFrequency]			= -1;
		_MonData[rTroll_Normal].data[MonOrganization]		= -1;
		_MonData[rTroll_Normal].data[MonCycle]				= -1;
		_MonData[rTroll_Normal].data[MonDiet]				= -1;
		_MonData[rTroll_Normal].data[MonBaseInt]			= 5;
		_MonData[rTroll_Normal].data[MonIntMod]				= 3;
		_MonData[rTroll_Normal].data[MonTreasureC]			= 16;/*Q*/
		_MonData[rTroll_Normal].data[MonTreasureL]			= 3;//D
		_MonData[rTroll_Normal].data[MonAlign]				= alignCE;
		_MonData[rTroll_Normal].data[MonNumAppN]			= 12;
		_MonData[rTroll_Normal].data[MonNumAppO]			= 0;
		_MonData[rTroll_Normal].data[MonAC]					= 4;
		_MonData[rTroll_Normal].data[MonMvW]				= 12;
		_MonData[rTroll_Normal].data[MonMvS]				= 0;
		_MonData[rTroll_Normal].data[MonMvF]				= 0;
		_MonData[rTroll_Normal].data[MonMvB]				= 0;
		_MonData[rTroll_Normal].data[MonMvFC]				= -1;
		_MonData[rTroll_Normal].data[MonNumHD]				= 6;
		_MonData[rTroll_Normal].data[MonHDMod]				= 6;
		_MonData[rTroll_Normal].data[MonTHAC0]				= 13;
		_MonData[rTroll_Normal].data[MonNumAttN]			= 3;
		_MonData[rTroll_Normal].data[MonNumAttW]			= 0;
		_MonData[rTroll_Normal].data[MonDmgN01]				= 8;
		_MonData[rTroll_Normal].data[MonDmgN02]				= 8;
		_MonData[rTroll_Normal].data[MonDmgN03]				= 12;
		_MonData[rTroll_Normal].data[MonDmgW_base]			= 0;
		_MonData[rTroll_Normal].data[MonDmgW_mult]			= 0;
		_MonData[rTroll_Normal].data[MonMR]					= 0;
		_MonData[rTroll_Normal].data[MonSize]				= -1;
		_MonData[rTroll_Normal].data[MonMorale]				= 14;
		_MonData[rTroll_Normal].data[MonXP]					= 1400;
	}
	{
		_MonData[rWill_O_Wisp].MonName						= "Will O' Wisp";
		_MonData[rWill_O_Wisp].data[MonClimate1]			= -1;
		_MonData[rWill_O_Wisp].data[MonClimate2]			= -1;
		_MonData[rWill_O_Wisp].data[MonTerrain1]			= -1;
		_MonData[rWill_O_Wisp].data[MonTerrain2]			= -1;
		_MonData[rWill_O_Wisp].data[MonFrequency]			= -1;
		_MonData[rWill_O_Wisp].data[MonOrganization]		= -1;
		_MonData[rWill_O_Wisp].data[MonCycle]				= -1;
		_MonData[rWill_O_Wisp].data[MonDiet]				= -1;
		_MonData[rWill_O_Wisp].data[MonBaseInt]				= 15;
		_MonData[rWill_O_Wisp].data[MonIntMod]				= 2;
		_MonData[rWill_O_Wisp].data[MonTreasureC]			= -1;	
		_MonData[rWill_O_Wisp].data[MonTreasureL]			= 25;//Z
		_MonData[rWill_O_Wisp].data[MonAlign]				= alignCE;
		_MonData[rWill_O_Wisp].data[MonNumAppN]				= 1;
		_MonData[rWill_O_Wisp].data[MonNumAppO]				= 3;
		_MonData[rWill_O_Wisp].data[MonAC]					= -8;
		_MonData[rWill_O_Wisp].data[MonMvW]					= 0;
		_MonData[rWill_O_Wisp].data[MonMvS]					= 0;
		_MonData[rWill_O_Wisp].data[MonMvF]					= 18;
		_MonData[rWill_O_Wisp].data[MonMvB]					= 0;
		_MonData[rWill_O_Wisp].data[MonMvFC]				= 0;/*A*/
		_MonData[rWill_O_Wisp].data[MonNumHD]				= 9;
		_MonData[rWill_O_Wisp].data[MonHDMod]				= 0;
		_MonData[rWill_O_Wisp].data[MonTHAC0]				= 11;
		_MonData[rWill_O_Wisp].data[MonNumAttN]				= 1;
		_MonData[rWill_O_Wisp].data[MonNumAttW]				= 0;
		_MonData[rWill_O_Wisp].data[MonDmgN01]				= 16;
		_MonData[rWill_O_Wisp].data[MonDmgN02]				= 0;
		_MonData[rWill_O_Wisp].data[MonDmgN03]				= 0;
		_MonData[rWill_O_Wisp].data[MonDmgW_base]			= 0;
		_MonData[rWill_O_Wisp].data[MonDmgW_mult]			= 0;
		_MonData[rWill_O_Wisp].data[MonMR]					= 0;
		_MonData[rWill_O_Wisp].data[MonSize]				= -1;
		_MonData[rWill_O_Wisp].data[MonMorale]				= 17;
		_MonData[rWill_O_Wisp].data[MonXP]					= 3000;
	}
	{
		_MonData[rWolf_Worg].MonName						= "Worg";
		_MonData[rWolf_Worg].data[MonClimate1]				= -1;
		_MonData[rWolf_Worg].data[MonClimate2]				= -1;
		_MonData[rWolf_Worg].data[MonTerrain1]				= -1;
		_MonData[rWolf_Worg].data[MonTerrain2]				= -1;
		_MonData[rWolf_Worg].data[MonFrequency]				= -1;
		_MonData[rWolf_Worg].data[MonOrganization]			= -1;
		_MonData[rWolf_Worg].data[MonCycle]					= -1;
		_MonData[rWolf_Worg].data[MonDiet]					= -1;
		_MonData[rWolf_Worg].data[MonBaseInt]				= 5;
		_MonData[rWolf_Worg].data[MonIntMod]				= 3;
		_MonData[rWolf_Worg].data[MonTreasureC]				= -1;	
		_MonData[rWolf_Worg].data[MonTreasureL]				= -1;
		_MonData[rWolf_Worg].data[MonAlign]					= alignNE;
		_MonData[rWolf_Worg].data[MonNumAppN]				= 12;
		_MonData[rWolf_Worg].data[MonNumAppO]				= 0;
		_MonData[rWolf_Worg].data[MonAC]					= 6;
		_MonData[rWolf_Worg].data[MonMvW]					= 18;
		_MonData[rWolf_Worg].data[MonMvS]					= 0;
		_MonData[rWolf_Worg].data[MonMvF]					= 0;
		_MonData[rWolf_Worg].data[MonMvB]					= 0;
		_MonData[rWolf_Worg].data[MonMvFC]					= -1;
		_MonData[rWolf_Worg].data[MonNumHD]					= 3;
		_MonData[rWolf_Worg].data[MonHDMod]					= 3;
		_MonData[rWolf_Worg].data[MonTHAC0]					= 17;
		_MonData[rWolf_Worg].data[MonNumAttN]				= 1;
		_MonData[rWolf_Worg].data[MonNumAttW]				= 0;
		_MonData[rWolf_Worg].data[MonDmgN01]				= 8;
		_MonData[rWolf_Worg].data[MonDmgN02]				= 0;
		_MonData[rWolf_Worg].data[MonDmgN03]				= 0;
		_MonData[rWolf_Worg].data[MonDmgW_base]				= 0;
		_MonData[rWolf_Worg].data[MonDmgW_mult]				= 0;
		_MonData[rWolf_Worg].data[MonMR]					= 0;
		_MonData[rWolf_Worg].data[MonSize]					= -1;
		_MonData[rWolf_Worg].data[MonMorale]				= 11;
		_MonData[rWolf_Worg].data[MonXP]					= 120;
	}
	{
		_MonData[rWorm_RotGrub].MonName						= "Worm, Rot Grub";
		_MonData[rWorm_RotGrub].data[MonClimate1]			= -1;
		_MonData[rWorm_RotGrub].data[MonClimate2]			= -1;
		_MonData[rWorm_RotGrub].data[MonTerrain1]			= -1;
		_MonData[rWorm_RotGrub].data[MonTerrain2]			= -1;
		_MonData[rWorm_RotGrub].data[MonFrequency]			= -1;
		_MonData[rWorm_RotGrub].data[MonOrganization]		= -1;
		_MonData[rWorm_RotGrub].data[MonCycle]				= -1;
		_MonData[rWorm_RotGrub].data[MonDiet]				= -1;
		_MonData[rWorm_RotGrub].data[MonBaseInt]			= 0;
		_MonData[rWorm_RotGrub].data[MonIntMod]				= 0;
		_MonData[rWorm_RotGrub].data[MonTreasureC]			= -1;
		_MonData[rWorm_RotGrub].data[MonTreasureL]			= -1;
		_MonData[rWorm_RotGrub].data[MonAlign]				= alignNN;
		_MonData[rWorm_RotGrub].data[MonNumAppN]			= 20;
		_MonData[rWorm_RotGrub].data[MonNumAppO]			= 0;
		_MonData[rWorm_RotGrub].data[MonAC]					= 9;
		_MonData[rWorm_RotGrub].data[MonMvW]				= 1;
		_MonData[rWorm_RotGrub].data[MonMvS]				= 0;
		_MonData[rWorm_RotGrub].data[MonMvF]				= 0;
		_MonData[rWorm_RotGrub].data[MonMvB]				= 1;
		_MonData[rWorm_RotGrub].data[MonMvFC]				= -1;
		_MonData[rWorm_RotGrub].data[MonNumHD]				= 1;
		_MonData[rWorm_RotGrub].data[MonHDMod]				= -7;
		_MonData[rWorm_RotGrub].data[MonTHAC0]				= 1;//Giving the Rot Grub a THAC0 of 1 because Monster Manual lists "NIL"...
		_MonData[rWorm_RotGrub].data[MonNumAttN]			= 1;
		_MonData[rWorm_RotGrub].data[MonNumAttW]			= 0;
		_MonData[rWorm_RotGrub].data[MonDmgN01]				= 1;
		_MonData[rWorm_RotGrub].data[MonDmgN02]				= 0;
		_MonData[rWorm_RotGrub].data[MonDmgN03]				= 0;
		_MonData[rWorm_RotGrub].data[MonDmgW_base]			= 0;
		_MonData[rWorm_RotGrub].data[MonDmgW_mult]			= 0;
		_MonData[rWorm_RotGrub].data[MonMR]					= 0;
		_MonData[rWorm_RotGrub].data[MonSize]				= -1;
		_MonData[rWorm_RotGrub].data[MonMorale]				= 5;
		_MonData[rWorm_RotGrub].data[MonXP]					= 15;
	}
	{
		_MonData[rZombie_Common].MonName					= "Zombie";
		_MonData[rZombie_Common].data[MonClimate1]			= -1;		_MonData[rZombie_Common].data[MonClimate2]			= -1;
		_MonData[rZombie_Common].data[MonTerrain1]			= -1;		_MonData[rZombie_Common].data[MonTerrain2]			= -1;
		_MonData[rZombie_Common].data[MonFrequency]			= -1;		_MonData[rZombie_Common].data[MonOrganization]		= -1;
		_MonData[rZombie_Common].data[MonCycle]				= -1;		_MonData[rZombie_Common].data[MonDiet]				= -1;
		_MonData[rZombie_Common].data[MonBaseInt]			= 0;		_MonData[rZombie_Common].data[MonIntMod]			= 0;
		_MonData[rZombie_Common].data[MonTreasureC]			= -1;		_MonData[rZombie_Common].data[MonTreasureL]			= -1;
		_MonData[rZombie_Common].data[MonAlign]				= alignNN;	_MonData[rZombie_Common].data[MonNumAppN]			= 24;
		_MonData[rZombie_Common].data[MonNumAppO]			= 0;		_MonData[rZombie_Common].data[MonAC]				= 8;
		_MonData[rZombie_Common].data[MonMvW]				= 6;		_MonData[rZombie_Common].data[MonMvS]				= 0;
		_MonData[rZombie_Common].data[MonMvF]				= 0;		_MonData[rZombie_Common].data[MonMvB]				= 0;
		_MonData[rZombie_Common].data[MonMvFC]				= -1;		_MonData[rZombie_Common].data[MonNumHD]				= 2;
		_MonData[rZombie_Common].data[MonHDMod]				= 0;		_MonData[rZombie_Common].data[MonTHAC0]				= 19;
		_MonData[rZombie_Common].data[MonNumAttN]			= 1;		_MonData[rZombie_Common].data[MonNumAttW]			= 0;
		_MonData[rZombie_Common].data[MonDmgN01]			= 8;		_MonData[rZombie_Common].data[MonDmgN02]			= 0;
		_MonData[rZombie_Common].data[MonDmgN03]			= 0;		_MonData[rZombie_Common].data[MonDmgW_base]			= 0;
		_MonData[rZombie_Common].data[MonDmgW_mult]			= 0;		_MonData[rZombie_Common].data[MonMR]				= 0;
		_MonData[rZombie_Common].data[MonSize]				= -1;		_MonData[rZombie_Common].data[MonMorale]			= 20;
		_MonData[rZombie_Common].data[MonXP]				= 65;
	}
/*
	Dropped a template of the above code so that it can be copy/paste for any new additions...
	{
		_MonData[].MonName									= "";
		_MonData[].data[MonClimate1]						= -1;
		_MonData[].data[MonClimate2]						= -1;
		_MonData[].data[MonTerrain1]						= -1;
		_MonData[].data[MonTerrain2]						= -1;
		_MonData[].data[MonFrequency]						= -1;
		_MonData[].data[MonOrganization]					= -1;
		_MonData[].data[MonCycle]							= -1;
		_MonData[].data[MonDiet]							= -1;
		_MonData[].data[MonBaseInt]							= 0;
		_MonData[].data[MonIntMod]							= 0;
		_MonData[].data[MonTreasureC]						= A;
		_MonData[].data[MonTreasureL]						= A;
		_MonData[].data[MonAlign]							= ;	
		_MonData[].data[MonNumAppN]							= ;
		_MonData[].data[MonNumAppO]							= ;	
		_MonData[].data[MonAC]								= ;
		_MonData[].data[MonMvW]								= ;	
		_MonData[].data[MonMvS]								= 0;
		_MonData[].data[MonMvF]								= 0;
		_MonData[].data[MonMvB]								= 0;
		_MonData[].data[MonMvFC]							= -1;
		_MonData[].data[MonNumHD]							= ;
		_MonData[].data[MonHDMod]							= ;	
		_MonData[].data[MonTHAC0]							= ;
		_MonData[].data[MonNumAttN]							= ;
		_MonData[].data[MonNumAttW]							= 0;
		_MonData[].data[MonDmgN01]							= ;
		_MonData[].data[MonDmgN02]							= ;
		_MonData[].data[MonDmgN03]							= ;	
		_MonData[].data[MonDmgW_base]						= 0;
		_MonData[].data[MonDmgW_mult]						= 0;
		_MonData[].data[MonMR]								= ;
		_MonData[].data[MonSize]							= -1;
		_MonData[].data[MonMorale]							= ;
		_MonData[].data[MonXP]								= ;
	} */
	}
	//Loading Names and ID-Numbers of previously created Avatars (no game time newbies)
	LoadBaseAvatarList();
	LoadCampaignList();
	_pickAvScrollIndex = 0;
}
void GameEnd()
{
	if(_bmpBG			!= NULL)	delete _bmpBG;
	if(_bmpSpcEff		!= NULL)	delete _bmpSpcEff;
	if(_bmpCompFace		!= NULL)	delete _bmpCompFace;
	if(_bmpCursors		!= NULL)	delete _bmpCursors;
	if(_bmpRedShip		!= NULL)	delete _bmpRedShip;
	if(_bmpMultiUse		!= NULL)	delete _bmpMultiUse;
	if(_bmpButtons		!= NULL)	delete _bmpButtons;
	if(_bmpSQR			!= NULL)	delete _bmpSQR;
	if(_bmpTrimmed		!= NULL)	delete _bmpTrimmed;
	if(_bmpRiverRoads	!= NULL)	delete _bmpRiverRoads;
	if(_bmpMiniMap		!= NULL)	delete _bmpMiniMap;
	if(_walls002		!= NULL)	delete _walls002;
	if(_bmpPortraits	!= NULL)	delete _bmpPortraits;
	if(_bmpPathLinks	!= NULL)	delete _bmpPathLinks;
	if(_bmpFOW			!= NULL)	delete _bmpFOW;
	if(_bmpTiles		!= NULL)	delete [] _bmpTiles;
	if(_bmpTrim			!= NULL)	delete [] _bmpTrim;
	if(_bmpMobImages	!= NULL)	delete [] _bmpMobImages;
	if(_TheWizard		!= NULL)	delete _TheWizard;
	if(_MapLink			!= NULL)	delete _MapLink;
	if(_ListWorldScenes.isEmpty()	== false) while(_ListWorldScenes.isEmpty()	== false) _ListWorldScenes.popFront();
	if(_ListMobAssigns.isEmpty()	== false) while(_ListMobAssigns.isEmpty()	== false) _ListMobAssigns.popFront();
	if(_startPoints.isEmpty()		== false) while(_startPoints.isEmpty()		== false) _startPoints.popFront();
	if(_MSG				!= NULL)	delete _MSG;
	if(_AvatarRef		!= NULL)	{ if(_numAvatarRef > 1)	delete [] _AvatarRef; else delete _AvatarRef; }
	if(_AvRefSwap		!= NULL)	delete _AvRefSwap;
	if(_Buttons			!= NULL)	{ if(_NumBtns > 1)		delete [] _Buttons; else delete _Buttons; }
	if(_tmpSingleBtn	!= NULL)	{ if(_NumTmpSingBtn > 1) delete [] _tmpSingleBtn; else delete _tmpSingleBtn; }
	if(_tmpSubBtn		!= NULL)	{ if(_NumTmpSubBtn > 1)	delete [] _tmpSubBtn; else delete _tmpSubBtn; }
	if(_MenuScrUpDwn	!= NULL)	delete [] _MenuScrUpDwn;
	if(_WorldSceneUpDwn	!= NULL)	delete [] _WorldSceneUpDwn;
	if(_CampaignsAvail	!= NULL)	{ if(_NumCampaigns > 1)	delete [] _CampaignsAvail; else delete _CampaignsAvail; }
	if(_ActiveCampaign	!= NULL)	delete _ActiveCampaign;

	//SPECIAL CONSIDERATIONS...Leave at bottom of GameEnd()

	//This should be 2nd to last - M. White 2 April, 2019
	delete [] _PlayWin;

	//Keep these last - M. White 2 April, 2019
	DeleteObject(_OffScrnBmp);
	DeleteDC(_OffScrnDC);
	delete _pEngine;
}
void GameCycle()
{
	int i, iWork1 = 0, iWork2 = 0, iWork3 = 0, iWork4 = 0, XMod = 0, YMod = 0; HWND win; HDC tempDC;
	_XMouse = _pEngine->GetMouseX();
	_YMouse = _pEngine->GetMouseY();
	static int FrameFriend = 0;
	RECT rct;
	//Using _GameStartCount as a timer to allow time for the window to maximize
	//...which, allows GameStart() time to calculate values
	if		(_GameStartCount < 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			{
				if(_WasMinimized == true)
				{
					//Get the User's View sizes
					GetClientRect(_pEngine->GetWindow(), &_cliRect);
					_EngineWidth	= _cliRect.right;
					_EngineHeight	= _cliRect.bottom;

					//Clean out the old background...
					DeleteObject(_OffScrnBmp);
					DeleteDC(_OffScrnDC);

					//...in with the new background.
					_OffScrnDC	= CreateCompatibleDC(GetDC(_pEngine->GetWindow()));
					_OffScrnBmp	= CreateCompatibleBitmap(GetDC(_pEngine->GetWindow()), _EngineWidth, _EngineHeight);
					SelectObject(_OffScrnDC, _OffScrnBmp);

					//Tell the game to repaint to show changes...
					_paintSomething	= true;
					_paintWholeScrn	= true;
					_WasMinimized	= false;
				}
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					++_MouseDelay;
				}
				else
				{
					if(_Buttons != NULL)
					{
						if(_NumBtns > 1)
						{
							for(i = 0; i < _NumBtns; i++)
								if		(_Buttons[i].DidItHit(_XMouse, _YMouse) == true)
								{
									_Buttons[i].SetHover(1); 
									_paintSomething = true; _paintWholeScrn = true;
									break;//break out of the loop to increase response time
								}
								else if	(_Buttons[i].GetHover() > 0)
								{
									_Buttons[i].SetHover(_Buttons[i].GetHover() - 1);
									_paintSomething = true; _paintWholeScrn = true;
									break;//break out of the loop to increase response time
								}
						}
						else
						{
							if		(_Buttons->DidItHit(_XMouse, _YMouse) == true)
							{
								_Buttons->SetHover(1);
								_paintSomething = true; _paintWholeScrn = true; 
								break;//break out of the loop to increase response time
							}
							else if	(_Buttons->GetHover() > 0)
							{
								_Buttons->SetHover(_Buttons->GetHover() - 1);
								_paintSomething = true; _paintWholeScrn = true;
								break;//break out of the loop to increase response time
							}
						}
					}
					_MouseDelay = 0;
				}
				//Must text the cursor outside of any actions - M. White 21 April, 2019
				TestMapCursor();
				//Go through mob list to determine their actions/moves. Distance from User is not
				//evaluated for visual purposes. Things happen off map while the User is moving about...
				MobAI();
				if(_intStatReserve > 0)
				{
					_intStatReserve--;
					_paintSomething = true;
				}
				if(_MSG != NULL)
				{
					if(_MSG->GetTimer() == 0)
					{
						_paintSomething = true;
						_paintWholeScrn	= true;
					}
				}
				if(_bFakeLoad == true)
				{
					if(_intFake > 0) _intFake -= 1;
					else
					{
						_bFakeLoad = false;
						_paintSomething		= true;
						_paintWholeScrn		= true;
					}
				}
				//Force a Refresh of the Map Screen
				if(FrameFriend < (_FPS * 2)) FrameFriend++;
				else
				{
					FrameFriend = 0;
					if(_IsLoading == false && _IsLoadingFOW == false)
					{
						if(_bHiddenMap == true)
						{
							for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
							{
								for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
								{
									if(_VisLightArray[x][y] == 2)
									{
										XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
										YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
										_TactMap[XMod][YMod].SetVisited(true);
										_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
									}
								}
							}
						}
						GetTacticalMapData(_MAPVIEW);
						_paintMainMap	= true;
						_paintSomething	= true;
					}
				}
			}
			break;
		case phLoadGame:	//Fall through
		case phDeleteGame:
			{
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					++_MouseDelay;
				}
				else _MouseDelay = 0;
				_paintSomething = true;
				_paintWholeScrn	= true;
			}
			break;
		case phNewGameScrn:
			{
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					++_MouseDelay;
				}
				else _MouseDelay = 0;
				_paintSomething = true;
				_paintButtons	= true;
			}
			break;
		case phEditor:
			{
				if(_WasMinimized == true)
				{
					//Get the User's View sizes
					GetClientRect(_pEngine->GetWindow(), &_cliRect);
					_EngineWidth	= _cliRect.right;
					_EngineHeight	= _cliRect.bottom;

					//Clean out the old background...
					DeleteObject(_OffScrnBmp);
					DeleteDC(_OffScrnDC);

					//...in with the new background.
					_OffScrnDC	= CreateCompatibleDC(GetDC(_pEngine->GetWindow()));
					_OffScrnBmp	= CreateCompatibleBitmap(GetDC(_pEngine->GetWindow()), _EngineWidth, _EngineHeight);
					SelectObject(_OffScrnDC, _OffScrnBmp);

					//Tell the game to repaint to show changes...
					_paintSomething	= true;
					_paintWholeScrn	= true;
					_WasMinimized	= false;
				}
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					_MouseDelay++;
				}
				else
				{
					if		(_XMouse >= _SideBarBackGrnd.left && _XMouse <= _SideBarBackGrnd.right &&
						     _YMouse >= _SideBarBackGrnd.top  && _YMouse <= _SideBarBackGrnd.bottom)
					{
						_PaintSideBar	= true;
						_paintSomething	= true;
					}
					if(_edPathAssignmens == true)
					{
						SetRect(&rct,
							_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.04), 
							_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06), 
							_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.96), 
							_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06) + 
							(_bmpTrimmed->GetHeight() * 11));
						if(!(_XMouse >= rct.left && _XMouse < rct.right && _YMouse >= rct.top && _YMouse < rct.bottom))
						{
							_PaintSideBar	= true;
							_paintSomething	= true;
						}
					}
					if(_NumBtns > 0)
					{
						if(_NumBtns > 1)
						{
							for(iWork1 = 0; iWork1 < _NumBtns; iWork1++)
								if		(_Buttons[iWork1].DidItHit(_XMouse, _YMouse) == true)
								{ 
									_paintSomething	= true; _paintButtons = true; _Buttons[iWork1].SetHover(2); break;
								}
								else if	(_Buttons[iWork1].GetHover() > 0)
								{
									_Buttons[iWork1].SetHover(_Buttons[iWork1].GetHover() - 1);
									_paintSomething	= true; _paintButtons	= true;
								}
						}
						else
						{
							if		(_Buttons->DidItHit(_XMouse, _YMouse) == true)
							{
								_paintSomething = true; _paintButtons = true; _Buttons->SetHover(2);
							}
							else if	(_Buttons->GetHover() > 0)
							{
								_Buttons->SetHover(_Buttons->GetHover() - 1);
								_paintSomething = true; _paintButtons = true;
							}
						}
					}
					if(_NumTmpSingBtn > 0)
					{
						if(_NumTmpSingBtn > 1)
						{
							for(i = 0; i < _NumTmpSingBtn; i++)	
							{
								if		(_tmpSingleBtn[i].DidItHit(_XMouse, _YMouse) == true)
								{
									_paintSomething = true; _paintButtons = true; _tmpSingleBtn[i].SetHover(2);
								}
								else if	(_tmpSingleBtn[i].GetHover() > 0)
								{
									_tmpSingleBtn[i].SetHover(_tmpSingleBtn[i].GetHover() - 1);
									_paintSomething = true; _paintButtons = true;
								}
							}
						}
						else
						{
							if		(_tmpSingleBtn->DidItHit(_XMouse, _YMouse) == true)
							{
								_paintSomething = true; _paintButtons = true; _tmpSingleBtn->SetHover(2);
							}
							else if	(_tmpSingleBtn->GetHover() > 0)
							{
								_tmpSingleBtn->SetHover(_tmpSingleBtn->GetHover() - 1);
								_paintSomething = true; _paintButtons = true;
							}
						}
					}
					_MouseDelay = 0;
				}
				//Must test the cursor outside of any actions - M. White 21 April, 2019
				TestMapCursor(); 
				if(_TheWizard->GetActive() == true)
				{
					_paintSomething = true;
					_PaintTheWizard = true;
				}
				else
				{
					if(_TheWizard->intActionIndex > -1)
					{
						//The wizard was active up until this point...we need to clear
						//out any left over images from the screen - M. White 06 August, 2019
						_TheWizard->intActionIndex = -1;
						_paintSomething = true;
						_paintWholeScrn	= true;
					}
					_PaintTheWizard = false;
				}
			}
			break;
		case phMenuScrn:
			{
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					++_MouseDelay;
				}
				else _MouseDelay = 0;
				_paintSomething = true;
				_paintWholeScrn	= true;
			}
			break;
		case phSplashScrn:
			{
				//Dragging Mouse is true when the User is actively in a click - M. White 28 Jan, 2019
				if(_pEngine->GetMouseDrag() == true)
				{
					if(_pEngine->GetMouseLeft() == true)	LMouse(_XMouse, _YMouse);
					else									RMouse(_XMouse, _YMouse);
					++_MouseDelay;
				}
				_paintSomething = true;
				_paintWholeScrn	= true;
			}
			break;
		};
		if(_paintSomething == true)
		{
			//Paint everything (last action per game cycle)
			win = _pEngine->GetWindow(); tempDC = GetDC(win);
			GamePaint(_OffScrnDC); 
			BitBlt(tempDC, 0, 0, _EngineWidth, _EngineHeight, _OffScrnDC, 0, 0, SRCCOPY);
			ReleaseDC(win, tempDC);
			_paintSomething = false;
		}
	}
	else if	(_GameStartCount == 0)
	{
		//We gave enough time for the Window to maximize...
		//Call GameStart() to set variables - M. White 13 March, 2019
		GameStart(_pEngine->GetWindow());
		_GameStartCount--;//Decrement one last time so that the first if-test is true - M. White 13 March, 2019
	}
	//Decrement until we reach zero, so that the above else-if-test is true - M. White 13 March, 2019
	else _GameStartCount--;
}
int HandleKeys()
{
	int tmpLength = 0;
	int tmpNew = 0;
	int XMod = 0, YMod = 0;	
	int x, y;
	char	numVal[16];
	string Variable;
	string Converter;
	InternalMapLink linkTest;

	/*
	if	(GetAsyncKeyState(VK_CANCEL	 )	< 0)	{ }//(03)	Control-break processing 
	else (this else belongs to the following if, if the first if is activated - don't forget to put back in place)
	*/
	if		(GetAsyncKeyState(VK_BACK	)	< 0)
	{
		if(_KBoardDelay == 0)
		{
			switch(_GAMEPHASE)
			{
			case phEditor:
				{
					if		(_MapLink->ShowUserInput == true)
					{
						Variable	= _tmpLS.NickName;
						tmpLength	= int(Variable.length());
						if(tmpLength > 0)
						{
							Converter = "";
							if(tmpLength > 2) for(int i = 0; i < tmpLength - 1; i++) Converter += Variable[i];
							else Converter = "";
							_tmpLS.NickName = Converter;
							_paintSomething	= true; 
							_paintWholeScrn = true;
							_KBoardDelay++; return 1;
						}
						//Painting main map because a mini-window pops open to show data - M. White 9 May, 2019
						_paintSomething		= true;
						_paintWholeScrn		= true;
					}
					else if	(_edNewWorldTrue == true || _edNewSceneTrue == true)
					{
						if(_EditorFocusIndex == 0)	Variable = _EditorStr3letters;
						else						Variable = _Editor_W_S_Name;
						tmpLength = int(Variable.length());
						if(tmpLength > 0)
						{
							if(_EditorFocusIndex == 0) _EditorStr3letters = "";
							else
							{
								Converter = "";
								if(tmpLength > 2)
									for(int i = 0; i < tmpLength - 1; i++) Converter += Variable[i];
								else Converter = "";
							}
							_Editor_W_S_Name = Converter;
							_KBoardDelay++;
							return 1;
						}
					}
				}
				break;
			case phNewGameScrn:
				{
					Variable = _TempAvatar->GetFName();
					tmpLength = int(Variable.length());
					if(tmpLength > 0)
					{
						if(Variable == "Type to Create a Name") { _TempAvatar->SetFName(""); Converter = ""; }
						else
						{
							Converter = "";
							if(tmpLength > 2) for(int i = 0; i < tmpLength - 1; i++) Converter += Variable[i];
							else Converter = "";
						}
						_TempAvatar->SetFName(Converter);
						_KBoardDelay++; return 1;
					}
				}
				break;
			};
		}
	}//(08)	BACKSPACE key 
	else if	(GetAsyncKeyState(VK_TAB	)	< 0)
	{
		if(_KBoardDelay == 0)
		{
			switch(_GAMEPHASE)
			{
			case phPlayScrn:
				{
				//	TabFlipMapType(-1);//-1 causes an increment to fire - M. White 21 April, 2019
					_paintWholeScrn = true;
					_paintSomething = true;
				}
				break;
			case phEditor:
				if		(_edNewWorldTrue == true || _edNewSceneTrue == true)
				{
					if(_EditorFocusIndex < 1)	_EditorFocusIndex++;
					else						_EditorFocusIndex	= 0;
					if(_EditorFocusIndex == 0)	_EditorStr3letters	= "";
					else						_Editor_W_S_Name	= "";
				}
				break;
			};
		}
		++_KBoardDelay;
		return 1;
	}//(09)	TAB key
	/*
	else if (GetAsyncKeyState(VK_DELETE	 )  < 0)	{ }//
	else if (GetAsyncKeyState(VK_CLEAR	 )	< 0)	{ }//(0C)	CLEAR key 
	else if (GetAsyncKeyState(VK_RETURN)	< 0)	{ }//(0D)	ENTER key 
	else if (GetAsyncKeyState(VK_SHIFT	 )	< 0)	{ }//(10)	SHIFT key 
	else if (GetAsyncKeyState(VK_CONTROL )	< 0)	{ }//(11)	CTRL key 
	else if (GetAsyncKeyState(VK_MENU	 )	< 0)	{ }//(12)	ALT key 
	else if (GetAsyncKeyState(VK_PAUSE	 )	< 0)	{ }//(13)	PAUSE key 
	else if (GetAsyncKeyState(VK_CAPITAL )	< 0)	{ }//(14)	CAPS LOCK key 
	*/
	else if	(GetAsyncKeyState(VK_ESCAPE)	< 0)
	{
		if(_KBoardDelay == 0) PostQuitMessage(0);
		++_KBoardDelay;
		return 1;
	}
	else if (GetAsyncKeyState(VK_CONTROL )	< 0)
	{
		if(_KBoardDelay == 0)
		{
			switch(_GAMEPHASE)
			{
			case phPlayScrn:
				{
					if(_BckGrndIndex < (NUM_BGs - 1)) ++_BckGrndIndex; else _BckGrndIndex = 0;
					delete _bmpBG;
					delete _bmpMiniMap;
					HDC tempDC = GetDC(_pEngine->GetWindow());
					switch(_BckGrndIndex)
					{
					case 0:
						_bmpBG		= new Bitmap(tempDC, "BMP\\BG0.bmp");
						switch(_MonitorCat)
						{
						case 2:	Bitmap(tempDC, "BMP\\MiniMap48.0.bmp"); break;
						case 1: Bitmap(tempDC, "BMP\\MiniMap32.0.bmp"); break;
						case 0: Bitmap(tempDC, "BMP\\MiniMap16.0.bmp");	break;
						};
						break;
					case 1:
						_bmpBG = new Bitmap(tempDC, "BMP\\BG1.bmp");
						switch(_MonitorCat)
						{
						case 2:	Bitmap(tempDC, "BMP\\MiniMap48.1.bmp"); break;
						case 1: Bitmap(tempDC, "BMP\\MiniMap32.1.bmp"); break;
						case 0: Bitmap(tempDC, "BMP\\MiniMap16.1.bmp");	break;
						};
						break;
					case 2:
						_bmpBG = new Bitmap(tempDC, "BMP\\BG2.bmp");
						switch(_MonitorCat)
						{
						case 2:	Bitmap(tempDC, "BMP\\MiniMap48.2.bmp"); break;
						case 1: Bitmap(tempDC, "BMP\\MiniMap32.2.bmp"); break;
						case 0: Bitmap(tempDC, "BMP\\MiniMap16.2.bmp");	break;
						};
						break;
					case 3:
						_bmpBG = new Bitmap(tempDC, "BMP\\BG3.bmp");
						switch(_MonitorCat)
						{
						case 2:	Bitmap(tempDC, "BMP\\MiniMap48.3.bmp"); break;
						case 1: Bitmap(tempDC, "BMP\\MiniMap32.3.bmp"); break;
						case 0: Bitmap(tempDC, "BMP\\MiniMap16.3.bmp");	break;
						};
						break;
					case 4:
						_bmpBG = new Bitmap(tempDC, "BMP\\BG4.bmp");
						switch(_MonitorCat)
						{
						case 2:	Bitmap(tempDC, "BMP\\MiniMap48.4.bmp"); break;
						case 1: Bitmap(tempDC, "BMP\\MiniMap32.4.bmp"); break;
						case 0: Bitmap(tempDC, "BMP\\MiniMap16.4.bmp");	break;
						};
						break;
					};
					ReleaseDC(_pEngine->GetWindow(), tempDC);
					_bgHeigh = _bmpBG->GetHeight();
					_bgWidth = _bmpBG->GetWidth();
					_paintWholeScrn = true;
					_paintSomething	= true;
					return 1;
				}
				break;
			case phEditor:
				{
					if(_BckGrndIndex < (NUM_BGs - 1)) ++_BckGrndIndex; else _BckGrndIndex = 0;
					delete _bmpBG;
					HDC tempDC = GetDC(_pEngine->GetWindow());
					switch(_BckGrndIndex)
					{
					case 0: _bmpBG = new Bitmap(tempDC, "BMP\\BG0.bmp"); break;
					case 1: _bmpBG = new Bitmap(tempDC, "BMP\\BG1.bmp"); break;
					case 2: _bmpBG = new Bitmap(tempDC, "BMP\\BG2.bmp"); break;
					case 3: _bmpBG = new Bitmap(tempDC, "BMP\\BG3.bmp"); break;
					case 4: _bmpBG = new Bitmap(tempDC, "BMP\\BG4.bmp"); break;
					};
					ReleaseDC(_pEngine->GetWindow(), tempDC);
					_bgHeigh = _bmpBG->GetHeight();
					_bgWidth = _bmpBG->GetWidth();
					_paintWholeScrn = true;
					_paintSomething	= true;
					return 1;
				}
				break;
			case phLoadGame:					break;
			case phNewGameScrn:					break;
			case phMenuScrn:					break;
			case phSplashScrn:					break;
			};
		}
		++_KBoardDelay;
		return 1;
	}//(11)	CTRL key 
	else if (GetAsyncKeyState(VK_SPACE	 )	< 0)
	{
		if(_KBoardDelay == 0)
		{
			switch(_GAMEPHASE)
			{
			case phPlayScrn:
				{
				//Test Data is temporary and will be removed at end of the project - M. White 9 April, 2019
				if(_ShowTestData == true)	_ShowTestData = false;
				else						_ShowTestData = true;
				_paintSomething = true;
				_paintWholeScrn = true;
				_KBoardDelay++;
				return 1;
				}
			break;
			}
		}
	}//(20)	SPACEBAR
	else if (GetAsyncKeyState(VK_PRIOR	 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			_MSG->IncExpand();
			_KBoardDelay++;
			break;
		}
		return 1;
	}//(21)	PAGE UP key 
	else if (GetAsyncKeyState(VK_NEXT	 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			_MSG->DecExpand();
			_KBoardDelay++;
			break;
		}
		return 1;
	}//(22)	PAGE DOWN key 
	/*
	else if (GetAsyncKeyState(VK_END	 )	< 0)	{ }//(23)	END key
	*/
	else if (GetAsyncKeyState(VK_HOME	 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			break;
		case phEditor:
			for(y = 0; y < _TactMapH; y++)
				for(x = 0; x < _TactMapW; x++)
				{
					_TactMap[x][y].SetVisited(false);
					_TactMapBack[x][y].SetVisited(false);
				}
			break;
		};
	}//(24)	HOME key
	else if	(GetAsyncKeyState(VK_LEFT	 )	< 0 && GetAsyncKeyState(VK_UP		 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(_KBoardDelay == 0 || _KBoardDelay > 4)
			{
				if(_TempAvatar->GetCurHP() < (0 - _TempAvatar->GetSCon()))
				{
					Variable = "Oh So Sorry! You dead mate! Start a new game!";
					_MSG->AddMessage(Variable);
				}
				else
				{
					switch(_PlayWin[_MAPVIEW].GetType())
					{
					case SQR_Map:
						switch(_TileWalkFacing)
						{
						case ISO_N:
							if(_TileWalkerY > _MapLimitT)
							{
								if(_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 0			&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 1			&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 2			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 5			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].AvatarIndex < 0			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetBG() < 12)
									--_TileWalkerY;
							}
							break;
						case ISO_NE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetBG() < 12))
								{
									++_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						case ISO_E:
							if(_TileWalkerX < _MapLimitR)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY].GetBG() < 12))
									++_TileWalkerX;
							}
							break;
						case ISO_SE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetBG() < 12))
								{
									++_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_S:
							if(_TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 0			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 1			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 2			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 5			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX][_TileWalkerY + 1].GetBG() < 12))
									++_TileWalkerY;
							}
							break;
						case ISO_SW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetBG() < 12))
								{
									--_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_W:
							if(_TileWalkerX > _MapLimitL)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY].GetBG() < 12))
									--_TileWalkerX;
							}
							break;
						case ISO_NW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetBG() < 12))
								{
									--_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						}
						for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
						{
							for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
							{
								if(_VisLightArray[x][y] == 2)
								{
									XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
									YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
									_TactMap[XMod][YMod].SetVisited(true);
								}
							}
						}
						break;
					case DIA_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
							};
						}
						break;
					case RHO_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;												break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }					break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }					break;
							};
						}
						break;
					case HEX_Map01:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
							case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }			break;
							case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }			break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;														break;
							case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
							case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
							case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
							case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
							case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;													break;
							case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }						break;
							case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }						break;
							};
						}
						break;
					};
				}
				GetTacticalMapData(_MAPVIEW);
			}
			break;
		case phEditor:
			if(_KBoardDelay == 0 || _KBoardDelay > 4)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case SQR_Map:
					switch(_TileWalkFacing)
					{
					case ISO_N:
						if(_TileWalkerY > _MapLimitT)
						{
								--_TileWalkerY;
						}
						break;
					case ISO_NE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
						{
								++_TileWalkerX;
								--_TileWalkerY;
						}
						break;
					case ISO_E:
						if(_TileWalkerX < _MapLimitR)
						{
								++_TileWalkerX;
						}
						break;
					case ISO_SE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
						{
								++_TileWalkerX;
								++_TileWalkerY;
						}
						break;
					case ISO_S:
						if(_TileWalkerY < _MapLimitB)
						{
								++_TileWalkerY;
						}
						break;
					case ISO_SW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
						{
								--_TileWalkerX;
								++_TileWalkerY;
						}
						break;
					case ISO_W:
						if(_TileWalkerX > _MapLimitL)
						{
								--_TileWalkerX;
						}
						break;
					case ISO_NW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
						{
								--_TileWalkerX;
								--_TileWalkerY;
						}
						break;
					};
					break;
				case DIA_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
						};
					}
					break;
				case RHO_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;														break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;												break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }					break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;														break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }					break;
						};
					}
					break;
				case HEX_Map01:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
						case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }			break;
						case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }			break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;														break;
						case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
						case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
						case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
						case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
						case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;													break;
						case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }						break;
						case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }						break;
						};
					}
					break;
				};
				GetTacticalMapData(_MAPVIEW);
			}
			break;
		};
		//Then turn...
		if(_KBoardDelay % 3 == 0)
		{
			//Spinning in place
			switch(_PlayWin[_MAPVIEW].GetType())
			{
			case RHO_Map://Fall through series - M. White 31 May, 2019
			case DIA_Map:
			case SQR_Map:
				if(_TileWalkFacing > ISO_N)	--_TileWalkFacing;
				else						_TileWalkFacing = ISO_NW;
				break;
			case HEX_Map01:
				if(_TileWalkFacing > 0)		--_TileWalkFacing;
				else						_TileWalkFacing = 5;
				break;
			};
		}
		_paintMainMap	= true;
		_paintSomething	= true;
		++_KBoardDelay;
		return 1;
	}
	else if	(GetAsyncKeyState(VK_RIGHT	 )	< 0 && GetAsyncKeyState(VK_UP		 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				if(_TempAvatar->GetCurHP() < (0 - _TempAvatar->GetSCon()))
				{
					Variable = "Oh So Sorry! You dead mate! Start a new game!";
					_MSG->AddMessage(Variable);
				}
				else
				{
					switch(_PlayWin[_MAPVIEW].GetType())
					{
					case SQR_Map:
						switch(_TileWalkFacing)
						{
						case ISO_N:
							if(_TileWalkerY > _MapLimitT)
							{
								if(_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 0			&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 1			&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 2			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 5			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].AvatarIndex < 0			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetBG() < 12)
									--_TileWalkerY;
							}
							break;
						case ISO_NE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetBG() < 12))
								{
									++_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						case ISO_E:
							if(_TileWalkerX < _MapLimitR)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY].GetBG() < 12))
									++_TileWalkerX;
							}
							break;
						case ISO_SE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetBG() < 12))
								{
									++_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_S:
							if(_TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 0			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 1			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 2			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 5			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX][_TileWalkerY + 1].GetBG() < 12))
									++_TileWalkerY;
							}
							break;
						case ISO_SW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetBG() < 12))
								{
									--_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_W:
							if(_TileWalkerX > _MapLimitL)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY].GetBG() < 12))
									--_TileWalkerX;
							}
							break;
						case ISO_NW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetBG() < 12))
								{
									--_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						}
						for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
						{
							for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
							{
								if(_VisLightArray[x][y] == 2)
								{
									XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
									YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
									_TactMap[XMod][YMod].SetVisited(true);
								}
							}
						}
						break;
					case DIA_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;												break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
							};
						}
						break;
					case RHO_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
							};
						}
						break;
					case HEX_Map01:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
							case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
							case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
							//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
							case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
							case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							};
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
							case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
							case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
							case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;													break;
							case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }						break;
							case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }						break;
							};
						}
						break;
					};
				}
				GetTacticalMapData(_MAPVIEW);
			}
			break;
		case phEditor:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case SQR_Map:
					switch(_TileWalkFacing)
					{
					case ISO_N:
						if(_TileWalkerY > _MapLimitT)
						{
								--_TileWalkerY;
						}
						break;
					case ISO_NE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
						{
								++_TileWalkerX;
								--_TileWalkerY;
						}
						break;
					case ISO_E:
						if(_TileWalkerX < _MapLimitR)
						{
								++_TileWalkerX;
						}
						break;
					case ISO_SE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
						{
								++_TileWalkerX;
								++_TileWalkerY;
						}
						break;
					case ISO_S:
						if(_TileWalkerY < _MapLimitB)
						{
								++_TileWalkerY;
						}
						break;
					case ISO_SW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
						{
								--_TileWalkerX;
								++_TileWalkerY;
						}
						break;
					case ISO_W:
						if(_TileWalkerX > _MapLimitL)
						{
								--_TileWalkerX;
						}
						break;
					case ISO_NW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
						{
								--_TileWalkerX;
								--_TileWalkerY;
						}
						break;
					};
					GetSqrMapData();
					break;
				case DIA_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;												break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
						};
					}
					GetSqrIsoMapData();
					break;
				case RHO_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
						};
					}
					GetIsoMapData();
					break;
				case HEX_Map01:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
						case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
						case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
						//-3 on this test because the Map is an even, and we're using Odd for the Play Screen - M. White 31 May, 2019
						case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
						case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						};
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;														break;
						case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;															break;
						case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;															break;
						case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;													break;
						case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }						break;
						case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }						break;
						};
					}
					GetHex01MapData();
					break;
				}
			}
			break;
		};
		if(_KBoardDelay % 3 == 0)
		{
			//Spinning in place - M. White 31 May, 2019
			switch(_PlayWin[_MAPVIEW].GetType())
			{
			case RHO_Map://Fall through series - M. White 31 May, 2019
			case DIA_Map:
			case SQR_Map:
				if(_TileWalkFacing < ISO_NW)	++_TileWalkFacing;
				else							_TileWalkFacing = ISO_N;
				break;
			case HEX_Map01:
				if(_TileWalkFacing < 5)			++_TileWalkFacing;
				else							_TileWalkFacing = 0;
				break;
			};
		}
		GetTacticalMapData(_MAPVIEW);
		_paintMainMap	= true;
		_paintSomething	= true;
		++_KBoardDelay;
		return 1;
	}
	else if (GetAsyncKeyState(VK_LEFT	 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case RHO_Map:
				case DIA_Map:
				case SQR_Map:
					if(_TileWalkFacing > ISO_N)	--_TileWalkFacing;
					else					_TileWalkFacing = ISO_NW;
					if(_bHiddenMap == true)
					{
						for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
						{
							for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
							{
								if(_VisLightArray[x][y] == 2)
								{
									XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
									YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
									_TactMap[XMod][YMod].SetVisited(true);
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
								}
							}
						}
					}
					break;
				case HEX_Map01:
					if(_TileWalkFacing > 0)		--_TileWalkFacing;
					else					_TileWalkFacing = 5;
					break;
				}
				_paintMainMap	= true;
				_paintSomething = true;
			}
			break;
		case phEditor:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case RHO_Map:
				case DIA_Map:
				case SQR_Map:
					if(_TileWalkFacing > ISO_N)	--_TileWalkFacing;
					else					_TileWalkFacing = ISO_NW;
					break;
				case HEX_Map01:
					if(_TileWalkFacing > 0)		--_TileWalkFacing;
					else					_TileWalkFacing = 5;
					break;
				}
				_paintMainMap	= true;
				_paintSomething = true;
			}
			break;
		};
		GetTacticalMapData(_MAPVIEW);
		_paintSomething		= true;
		_paintWholeScrn		= true;
		++_KBoardDelay;
		return 1;
	}//(25)	LEFT ARROW key 
	else if (GetAsyncKeyState(VK_RIGHT	 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case RHO_Map:
				case DIA_Map:
				case SQR_Map:
					if(_TileWalkFacing < ISO_NW)	++_TileWalkFacing;
					else							_TileWalkFacing = ISO_N;
					if(_bHiddenMap == true)
					{
						for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
						{
							for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
							{
								if(_VisLightArray[x][y] == 2)
								{
									XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
									YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
									_TactMap[XMod][YMod].SetVisited(true);
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
								}
							}
						}
					}
					break;
				case HEX_Map01:
					if(_TileWalkFacing < 5)			++_TileWalkFacing;
					else							_TileWalkFacing = 0;
					break;
				}
				_paintMainMap	= true;
				_paintSomething = true;
			}
			break;
		case phEditor:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case RHO_Map:
				case DIA_Map:
				case SQR_Map:
					if(_TileWalkFacing < ISO_NW)	++_TileWalkFacing;
					else						_TileWalkFacing = ISO_N;
					break;
				case HEX_Map01:
					if(_TileWalkFacing < 5)			++_TileWalkFacing;
					else						_TileWalkFacing = 0;
					break;
				}
				_paintMainMap	= true;
				_paintSomething = true;
			}
			break;
		}
		GetTacticalMapData(_MAPVIEW);
        _paintSomething		= true;
		_paintWholeScrn		= true;
		++_KBoardDelay;
		return 1;
	}//(27)	RIGHT ARROW key 
	else if (GetAsyncKeyState(VK_UP		 )	< 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				if(_TempAvatar->GetCurHP() <= (0 - _TempAvatar->GetSCon()))
				{
					Variable = "Oh... So Sorry! You dead mate! Start a new game!";
					_MSG->AddMessage(Variable);
				}
				else
				{
					switch(_PlayWin[_MAPVIEW].GetType())
					{
					case SQR_Map:
						switch(_TileWalkFacing)
						{
						case ISO_N:
							if(_TileWalkerY > _MapLimitT)
							{
								if(_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 0			&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 1				&& 
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 2				&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetWall() != 5				&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].AvatarIndex < 0			&&
								_TactMap[_TileWalkerX][_TileWalkerY - 1].GetBG() < 12)
								{
									--_TileWalkerY;
								}
							}
							break;
						case ISO_NE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY - 1].GetBG() < 12))
								{
									++_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						case ISO_E:
							if(_TileWalkerX < _MapLimitR)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY].GetBG() < 12))
								{
									++_TileWalkerX;
								}
							}
							break;
						case ISO_SE:
							if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX + 1][_TileWalkerY + 1].GetBG() < 12))
								{
									++_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_S:
							if(_TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 0			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 1			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 2			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].GetWall() != 5			&&
									_TactMap[_TileWalkerX][_TileWalkerY + 1].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX][_TileWalkerY + 1].GetBG() < 12))
								{
									++_TileWalkerY;
								}
							}
							break;
						case ISO_SW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY + 1].GetBG() < 12))
								{
									--_TileWalkerX;
									++_TileWalkerY;
								}
							}
							break;
						case ISO_W:
							if(_TileWalkerX > _MapLimitL)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 0			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 1			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 2			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].GetWall() != 5			&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY].AvatarIndex < 0)		&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY].GetBG() < 12))
								{
									--_TileWalkerX;
								}
							}
							break;
						case ISO_NW:
							if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
							{
								if((_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 0		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 1		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 2		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetWall() != 5		&&
									_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].AvatarIndex < 0)	&&
								(_TactMap[_TileWalkerX - 1][_TileWalkerY - 1].GetBG() < 12))
								{
									--_TileWalkerX;
									--_TileWalkerY;
								}
							}
							break;
						}
						linkTest = _MapLink->GetActiveLink(_TileWalkerX, _TileWalkerY);
						if(linkTest.exitX >= 0)
						{
							//Call up the data for which map the Avatar is currently on to use as a test...
							Converter = _TempAvatar->GetStartMapName();

							//They're already on the map, so we just modify the Avatar's X and Y
							if(linkTest.DestinationMapName == Converter)
							{
								if(MessageBox(NULL, "Do you want to go through?", "Map Link", MB_YESNO) == IDYES)
								{
									_TempAvatar->SetDungeonX(linkTest.destX);
									_TempAvatar->SetDungeonY(linkTest.destY);
									_TileWalkerX = linkTest.destX;
									_TileWalkerY = linkTest.destY;
								}
							}
							//They're about to go to a different map...
							else
							{
								//Verify that they really want to do it...
								if(MessageBox(NULL, "Do you want to go through?", "Map Link", MB_YESNO) == IDYES)
								{
									//Start the process of saving current data (before leaving map)...
									sprintf(numVal, "%d", _ActiveCampaign->GetCampaignID());
									//Save the FOW if the current map has it...
									if(_bHiddenMap == true)
									{
										_FileNameFOW = "save\\";
										_FileNameFOW += numVal;
										_FileNameFOW += ".";
										_FileNameFOW += _TempAvatar->GetStartMapName();
										_FileNameFOW += "_fow.dat";
										//Don't use a Thread - Lock it up so that it does
										//not interfere with loading of new maps...
										SaveFOW(0);
									}
									//The SaveMobList() outputs '0' if there's no mobs left
									_FileNameMobs = "save\\";
									_FileNameMobs += numVal;
									_FileNameMobs += ".";
									_FileNameMobs += _TempAvatar->GetStartMapName();
									_FileNameMobs += "_mob.dat";
									//Don't use a Thread - Lock it up so that it does
									//not interfere with loading of new maps...
									SaveMobList(0);

									//Modify _bHiddenMap for the map that is about to be loaded...
									if(linkTest.IsHidden == 1)	_bHiddenMap = true;
									else						_bHiddenMap = false;

									//'Base' maps are held in the Data foldier...
									_FileNameMap = "data\\";
									//Determine if the destination is in one of sub two folders...
									if(linkTest.DestMapType == mapWORLD)	{ _FileNameMap += "w\\"; _MAPVIEW = HEX_Map01;	}
									else									{ _FileNameMap += "s\\"; _MAPVIEW = SQR_Map;	}
									_MapLimitL		= _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitT		= _PlayWin[_MAPVIEW].GetCentRow();
									_MapLimitR		= _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitB		= _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
									//Orientate the Avatar to destination map x-y
									_TempAvatar->SetDungeonX(linkTest.destX);
									_TempAvatar->SetDungeonY(linkTest.destY);
									_TileWalkerX	= linkTest.destX;
									_TileWalkerY	= linkTest.destY;

									//Assign the actual map name...
									_FileNameMap	+= linkTest.DestinationMapName;
									_FileNameMap	+= ".dat";
									//Start this one so that it triggers it's boolean...
									_myHandleOne	= CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);
									Sleep(500); //take a nap to allow that three to open the file and start...

									//Load Links
									_FileNameLinks = "data\\";
									if(linkTest.DestMapType == mapWORLD)	_FileNameLinks += "w\\"; 
									else									_FileNameLinks += "s\\";
									_FileNameLinks += linkTest.DestinationMapName;
									_FileNameLinks += "_Links.dat";
									_myHandleTwo	= CreateThread(0, 0, LoadLinks,	0, 0, &_myThreadIDTwo);

									//Check to see if the Campaign has been on the new map previously...
									//...false indicates they've been there before.
									if(_TempAvatar->HaveVisitedBefore(linkTest.DestinationMapName) == true)
									{
										//If it has, load mobs from Campaign folder...
										_FileNameMobs = "save\\";
										_FileNameMobs += numVal;
										_FileNameMobs += ".";
										_FileNameMobs += linkTest.DestinationMapName;
										_FileNameMobs += "_mob.dat";
									}
									else
									{
										//...else, load from source Data file
										_FileNameMobs = "data\\";
										if(linkTest.DestMapType == mapWORLD)	_FileNameMobs += "w\\";
										else									_FileNameMobs += "s\\";
										_FileNameMobs += linkTest.DestinationMapName;
										_FileNameMobs += "_mob.dat";
									}
									//Lock it up to avoid crashes due to array over-run...
									LoadMobList(0);
								//	_myHandleThr	= CreateThread(0, 0, LoadMobList,	0, 0, &_myThreadIDThr);

									//Map paths are also in the Data foldier...
									_FileNamePaths	= "data\\";
									//...and sub foldier...
									if(linkTest.DestMapType == mapWORLD)	{ _FileNamePaths += "w\\"; }
									else									{ _FileNamePaths += "s\\"; }
									_FileNamePaths	+= linkTest.DestinationMapName;
									_FileNamePaths	+= "_paths.dat";
									//Trigger this one also so that there's more time for the previous to finish...
									_myHandleFou	= CreateThread(0, 0, LoadSavePaths,	0, 0, &_myThreadIDFou);
									if(linkTest.IsHidden == 1)	_bHiddenMap = true;
									else						_bHiddenMap = false;
									if(_bHiddenMap == true)
									{
										//These two have to get tested before picking which folder to load from
										_FileNameFOW	= "";
										//They've been there before...select some files from Save Folder
										//false indicates having been there before
										sprintf(numVal, "%d", _ActiveCampaign->GetCampaignID());
										_FileNameFOW	 = "save\\";
										_FileNameFOW	+= numVal;
										_FileNameFOW	+= ".";
										_FileNameFOW	+= linkTest.DestinationMapName;
										_FileNameFOW	+= "_fow.dat";
										//This one requires itself to wait on LoadWorldScene() to set its boolean
										LoadFOW(0);
										//Get the map data now to show to the player as soon as possible...
									//	GetTacticalMapData(_MAPVIEW);
									//	_myHandleFiv	= CreateThread(0, 0, LoadFOW,	0, 0, &_myThreadIDFiv);
									}
									//Set the new map to the Avatar
									_ActiveCampaign->AddMapVisited(linkTest.DestinationMapName);
									_TempAvatar->SetStartTown("Visited", linkTest.DestinationMapName);
									
									//Do this before progressing to reflect the new map in the .dat file
									//Save the Current Map data before migrating to new map...
									//Also saves the current map name that the Avatar is on...
									SaveGame(_ActiveCampaign->GetCampaignID());

									_paintSomething	= true;
									_paintWholeScrn	= true;
								}
							}
						}
						if(_bHiddenMap == true)
						{
							for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
							{
								for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
								{
									if(_VisLightArray[x][y] == 2)
									{
										XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
										YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
										_TactMap[XMod][YMod].SetVisited(true);
										_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
									}
								}
							}
						}
						break;
					case DIA_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							}
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
							}
						}
						break;
					case RHO_Map:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
							case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							}
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;												break;
							case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
							case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
							case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
							case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;											break;
							case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
							case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
							case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
							}
						}
						break;
					case HEX_Map01:
						if(_TileWalkerY & 1)
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
							case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
							case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
							case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
							case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							}
						}
						else
						{
							switch(_TileWalkFacing)
							{
							case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
							case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
							case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
							case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;												break;
							case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }		break;
							case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }		break;
							}
						}
						break;
					};
				}
			}
			break;
		case phEditor:
			if(_KBoardDelay == 0 || _KBoardDelay > 3)
			{
				switch(_PlayWin[_MAPVIEW].GetType())
				{
				case SQR_Map:
					//Note: Directions that are either North, East, South, or West will jump at
					//higher speed if the mouse is pressed
					switch(_TileWalkFacing)
					{
					case ISO_N:
						if(_TileWalkerY > _MapLimitT)
						{
							if((_MouseDelay > 3 && _Dispersion == true) && _TileWalkerY > _MapLimitT + 3)
								_TileWalkerY -= 3;
							else --_TileWalkerY;
						}
						break;
					case ISO_NE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT)
						{
							++_TileWalkerX; --_TileWalkerY;
						}
						break;
					case ISO_E:
						if(_TileWalkerX < _MapLimitR)
						{
							if((_MouseDelay > 3 && _Dispersion == true) && _TileWalkerX < _MapLimitR - 3)
								_TileWalkerX += 3;
							else ++_TileWalkerX;
						}
						break;
					case ISO_SE:
						if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB)
						{
							++_TileWalkerX; ++_TileWalkerY;
						}
						break;
					case ISO_S:
						if(_TileWalkerY < _MapLimitB)
						{
							if((_MouseDelay > 3 && _Dispersion == true) && _TileWalkerY < _MapLimitB - 3)
								_TileWalkerY += 3;
							else ++_TileWalkerY;
						}
						break;
					case ISO_SW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB)
						{
							--_TileWalkerX; ++_TileWalkerY;
						}
						break;
					case ISO_W:
						if(_TileWalkerX > _MapLimitL)
						{
							if((_MouseDelay > 3 && _Dispersion == true) && _TileWalkerX > _MapLimitL + 3)
								_TileWalkerX -= 3;
							else				--_TileWalkerX;
						}
						break;
					case ISO_NW:
						if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT)
						{
							--_TileWalkerX; --_TileWalkerY;
						}
						break;
					}
					GetSqrMapData();
					break;
				case DIA_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						}
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;												break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;												break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;												break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;										break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;												break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
						}
					}
					GetSqrIsoMapData();
					break;
				case RHO_Map:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;											break;
						case ISO_NE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }	break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						}
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case ISO_N:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;												break;
						case ISO_NE:	if(_TileWalkerY > _MapLimitT) --_TileWalkerY;													break;
						case ISO_E:		if(_TileWalkerX < _MapLimitR) ++_TileWalkerX;													break;
						case ISO_SE:	if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;													break;
						case ISO_S:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;											break;
						case ISO_SW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }	break;
						case ISO_W:		if(_TileWalkerX > _MapLimitL) --_TileWalkerX;													break;
						case ISO_NW:	if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }	break;
						}
					}
					GetIsoMapData();
					break;
				case HEX_Map01:
					if(_TileWalkerY & 1)
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT + 2) _TileWalkerY -= 2;												break;
						case 1:		if(_TileWalkerX < _MapLimitR && _TileWalkerY > _MapLimitT) { ++_TileWalkerX; --_TileWalkerY; }		break;
						case 2:		if(_TileWalkerX < _MapLimitR && _TileWalkerY < _MapLimitB) { ++_TileWalkerX; ++_TileWalkerY; }		break;
						case 3:		if(_TileWalkerY < _MapLimitB - 2) _TileWalkerY += 2;												break;
						case 4:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case 5:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						}
					}
					else
					{
						switch(_TileWalkFacing)
						{
						case 0:		if(_TileWalkerY > _MapLimitT) _TileWalkerY -= 2;													break;
						case 1:		if(_TileWalkerY > _MapLimitT) --_TileWalkerY;														break;
						case 2:		if(_TileWalkerY < _MapLimitB) ++_TileWalkerY;														break;
						case 3:		if(_TileWalkerY < _MapLimitB - 1) _TileWalkerY += 2;												break;
						case 4:		if(_TileWalkerX > _MapLimitL && _TileWalkerY < _MapLimitB) { --_TileWalkerX; ++_TileWalkerY; }		break;
						case 5:		if(_TileWalkerX > _MapLimitL && _TileWalkerY > _MapLimitT) { --_TileWalkerX; --_TileWalkerY; }		break;
						}
					}
					GetHex01MapData();
					break;
				}
				//Cleans up slide bars - M. White 9 May, 2019
				_paintSomething	= true;
				_paintWholeScrn	= true;
			}
			break;
		};
		GetTacticalMapData(_MAPVIEW);
		_paintMainMap	= true;
		_paintSomething	= true;
		++_KBoardDelay;
		return 1;
	}//(26)	UP ARROW key  
	/*
	else if (GetAsyncKeyState(VK_DOWN	 )	< 0)	{ }//(28)	DOWN ARROW key 
	else if (GetAsyncKeyState(VK_SELECT	 )	< 0)	{ }//(29)	SELECT key 
	else if (GetAsyncKeyState(VK_EXECUTE )	< 0)	{ }//(2B)	EXECUTE key 
	else if (GetAsyncKeyState(VK_SNAPSHOT)	< 0)	{ }//(2C)	PRINT SCREEN key 
	else if	(GetAsyncKeyState((30))			< 0)	{ HandleTyping('0'); }//0 
	else if (GetAsyncKeyState((31))			< 0)	{ HandleTyping('1'); }//1 	
	else if (GetAsyncKeyState((32))			< 0)	{ HandleTyping('2'); }//2 
	else if (GetAsyncKeyState((33))			< 0)	{ HandleTyping('3'); }//3 	
	else if (GetAsyncKeyState((34))			< 0)	{ HandleTyping('4'); }//4 
	else if (GetAsyncKeyState((35))			< 0)	{ HandleTyping('5'); }//5 	
	else if (GetAsyncKeyState((36))			< 0)	{ HandleTyping('6'); }//6 
	else if (GetAsyncKeyState((37))			< 0)	{ HandleTyping('7'); }//7 	
	else if (GetAsyncKeyState((38))			< 0)	{ HandleTyping('8'); }//8 
	else if (GetAsyncKeyState((39))			< 0)	{ HandleTyping('9'); }//9 	
	else if (GetAsyncKeyState((41))			< 0)	{ HandleTyping('a'); }//A 
	else if (GetAsyncKeyState((42))			< 0)	{ HandleTyping('b'); }//B 	
	else if (GetAsyncKeyState((43))			< 0)	{ HandleTyping('c'); }//C 
	else if (GetAsyncKeyState((44))			< 0)	{ HandleTyping('d'); }//D 
	else if (GetAsyncKeyState((45))			< 0)	{ HandleTyping('e'); }//E 
	else if (GetAsyncKeyState((46))			< 0)	{ HandleTyping('f'); }//F 	
	else if (GetAsyncKeyState((47))			< 0)	{ HandleTyping('g'); }//G 
	else if (GetAsyncKeyState((48))			< 0)	{ HandleTyping('h'); }//H 	
	else if (GetAsyncKeyState((49))			< 0)	{ HandleTyping('i'); }//I 
	else if (GetAsyncKeyState((4A))			< 0)	{ HandleTyping('j'); }//J 	
	else if (GetAsyncKeyState((4B))			< 0)	{ HandleTyping('k'); }//K 
	else if (GetAsyncKeyState((4C))			< 0)	{ HandleTyping('l'); }//L 	
	else if (GetAsyncKeyState((4D))			< 0)	{ HandleTyping('m'); }//M 
	else if (GetAsyncKeyState((4E))			< 0)	{ HandleTyping('n'); }//N 	
	else if (GetAsyncKeyState((4F))			< 0)	{ HandleTyping('o'); }//O 
	else if (GetAsyncKeyState((50))			< 0)	{ HandleTyping('p'); }//P 		
	else if (GetAsyncKeyState((51))			< 0)	{ HandleTyping('q'); }//Q 
	else if (GetAsyncKeyState((52))			< 0)	{ HandleTyping('r'); }//R 	
	else if (GetAsyncKeyState((53))			< 0)	{ HandleTyping('s'); }//S 
	else if (GetAsyncKeyState((54))			< 0)	{ HandleTyping('t'); }//T 	
	else if (GetAsyncKeyState((55))			< 0)	{ HandleTyping('u'); }//U 
	else if (GetAsyncKeyState((56))			< 0)	{ HandleTyping('v'); }//V 	
	else if (GetAsyncKeyState((57))			< 0)	{ HandleTyping('w'); }//W 
	else if (GetAsyncKeyState((58))			< 0)	{ HandleTyping('x'); }//X 	
	else if (GetAsyncKeyState((59))			< 0)	{ HandleTyping('y'); }//Y 
	else if (GetAsyncKeyState((5A))			< 0)	{ HandleTyping('z'); }//Z 
	else if (GetAsyncKeyState(VK_NUMPAD0)	< 0)	{ }//(60)	Numeric keypad 0 key 
	else if (GetAsyncKeyState(VK_NUMPAD1)	< 0)	{ }//(61)	Numeric keypad 1 key 
	else if (GetAsyncKeyState(VK_NUMPAD2)	< 0)	{ }//(62)	Numeric keypad 2 key 
	else if (GetAsyncKeyState(VK_NUMPAD3)	< 0)	{ }//(63)	Numeric keypad 3 key 
	else if (GetAsyncKeyState(VK_NUMPAD4)	< 0)	{ }//(64)	Numeric keypad 4 key 
	else if (GetAsyncKeyState(VK_NUMPAD5)	< 0)	{ }//(65)	Numeric keypad 5 key 
	else if (GetAsyncKeyState(VK_NUMPAD6)	< 0)	{ }//(66)	Numeric keypad 6 key	
	else if (GetAsyncKeyState(VK_NUMPAD7)	< 0)	{ }//(67)	Numeric keypad 7 key 
	else if (GetAsyncKeyState(VK_NUMPAD8)	< 0)	{ }//(68)	Numeric keypad 8 key 
	else if (GetAsyncKeyState(VK_NUMPAD9)	< 0)	{ }//(69)	Numeric keypad 9 key 
	else if (GetAsyncKeyState(VK_F1)		< 0)	{ }//(70)	F1 key 
	else if (GetAsyncKeyState(VK_F2)		< 0)	{ }//(71)	F2 key 
	else if (GetAsyncKeyState(VK_F3	)		< 0)	{ }//(72)	F3 key 
	else if (GetAsyncKeyState(VK_F4	)		< 0)	{ }//(73)	F4 key 
	else if (GetAsyncKeyState(VK_F5	)		< 0)	{ }//(74)	F5 key 
	else if (GetAsyncKeyState(VK_F6	)		< 0)	{ }//(75)	F6 key 
	else if (GetAsyncKeyState(VK_F7	)		< 0)	{ }//(76)	F7 key 
	else if (GetAsyncKeyState(VK_F8	)		< 0)	{ }//(77)	F8 key 
	else if (GetAsyncKeyState(VK_F9	)		< 0)	{ }//(78)	F9 key 
	else if (GetAsyncKeyState(VK_F10)		< 0)	{ }//(79)	F10 key 
	else if (GetAsyncKeyState(VK_F11)		< 0)	{ }//(7A)	F11 key 
	else if (GetAsyncKeyState(VK_F12)		< 0)	{ }//(7B)	F12 key 
	else if (GetAsyncKeyState(VK_NUMLOCK)	< 0)	{ }//(90)	NUM LOCK key 
	else if (GetAsyncKeyState(VK_SCROLL	)	< 0)	{ }//(91)	SCROLL LOCK key 
	else if (GetAsyncKeyState(VK_LSHIFT	)	< 0)	{ }//(A0)	Left SHIFT key 
	else if (GetAsyncKeyState(VK_RSHIFT	)	< 0)	{ }//(A1)	Right SHIFT key 
	else if (GetAsyncKeyState(VK_LCONTROL)	< 0)	{ }//(A2)	Left CONTROL key 
	else if (GetAsyncKeyState(VK_RCONTROL)	< 0)	{ }//(A3)	Right CONTROL key 
	else if (GetAsyncKeyState(VK_LMENU)		< 0)	{ }//(A4)	Left MENU key 
	else if (GetAsyncKeyState(VK_RMENU)		< 0)	{ }//(A5)	Right MENU key 	
	--------------------------------------------------------------------------*/
	else
	{
		_KBoardDelay = 0;
		return 0;
	}
	return 0;
}
void HandleTyping(char Letter)
{
	string temp;
	double Percent;
	int i; //iterator
	if(_KBoardDelay == 0)
	{
		switch(_GAMEPHASE)
		{
		case phNewGameScrn:
			temp = Letter;
			if((int(Letter) >= 65 && int(Letter) <= 90) || (int(Letter) == 32) || (int(Letter) >= 96 && int(Letter) <= 122))
			{
				temp = _TempAvatar->GetFName();
				if(temp == "Type to Create a Name")	{ _TempAvatar->SetFName(""); temp = Letter; }
				else
				{
					temp += Letter;
				}
				_TempAvatar->SetFName(temp);
			}
			break;
		case phEditor:
			temp = Letter;
			if((int(Letter) >= 48 && int(Letter) <= 57) || (int(Letter) >= 65 && int(Letter) <= 90) ||
			   (int(Letter) == 32)						|| (int(Letter) >= 96 && int(Letter) <= 122))
			{
				if		(_MapLink->ShowUserInput == true)//_MapLink->ShowUserInput == true && _edAssignStartPnt == false
				{
					if(_tmpLS.NickName.length() < 32)
						_tmpLS.NickName += Letter;
					else MessageBox(NULL, "Names are limited to\n32 characters", "Limitation", MB_OK);
					//Painting main map because a mini-window pops open to show data - M. White 9 May, 2019
				}
				else if	(_SideBarMenuIndex == edMC_Monsters)
				{
					//toupper was not functioning as expected...
					//Created a work-around - M. White 23 August, 2019
					switch(Letter)
					{
					case 'a': case 'A': _SingleChar = 'A'; break;		case 'b': case 'B': _SingleChar = 'B'; break;
					case 'c': case 'C': _SingleChar = 'C'; break;		case 'd': case 'D': _SingleChar = 'D'; break;
					case 'e': case 'E': _SingleChar = 'E'; break;		case 'f': case 'F': _SingleChar = 'F'; break;
					case 'g': case 'G': _SingleChar = 'G'; break;		case 'h': case 'H': _SingleChar = 'H'; break;
					case 'i': case 'I': _SingleChar = 'I'; break;		case 'j': case 'J': _SingleChar = 'J'; break;
					case 'k': case 'K': _SingleChar = 'K'; break;		case 'l': case 'L': _SingleChar = 'L'; break;
					case 'm': case 'M': _SingleChar = 'M'; break;		case 'n': case 'N': _SingleChar = 'N'; break;
					case 'o': case 'O': _SingleChar = 'O'; break;		case 'p': case 'P': _SingleChar = 'P'; break;
					case 'q': case 'Q': _SingleChar = 'Q'; break;		case 'r': case 'R': _SingleChar = 'R'; break;
					case 's': case 'S': _SingleChar = 'S'; break;		case 't': case 'T': _SingleChar = 'T'; break;
					case 'u': case 'U': _SingleChar = 'U'; break;		case 'v': case 'V': _SingleChar = 'V'; break;
					case 'w': case 'W': _SingleChar = 'W'; break;		case 'x': case 'X': _SingleChar = 'X'; break;
					case 'y': case 'Y': _SingleChar = 'Y'; break;		case 'z': case 'Z': _SingleChar = 'Z'; break;
					};
					for(i = 0; i < MAXMONS; i++)
					{
						if(_MonData[i].MonName[0] == _SingleChar)
						{
							_EditingTarget1 = i;
							Percent = double(_EditingTarget1 / double(MAXMONS));
							_intHorSlideLocation = _RectHorSlidePer.left + 
								int((_RectHorSlidePer.right - _RectHorSlidePer.left) * Percent);
							break;
						}
					}
					if(i == MAXMONS)
					{
						_SingleChar		= '-';
						_EditingTarget1	= 0;
						_intHorSlideLocation = _RectHorSlidePer.left;
					}
				}
				else
				{
					if(_EditorFocusIndex == mapWORLD)
					{
						_EditorStr3letters += Letter;
						//Force a move to the next edit window - M. White 1 May, 2019
						if(_EditorStr3letters.length() >= 3) _EditorFocusIndex++;
					}
					else
					{
						if(_Editor_W_S_Name.length() < 32)
							_Editor_W_S_Name += Letter;
						else MessageBox(NULL, "Names are limited to\n32 characters", "Limitation", MB_OK);
					}
				}
				//Painting main map because a mini-window pops open to show data - M. White 9 May, 2019
				_paintSomething		= true;
				_paintWholeScrn		= true;
			}
			break;
		};
		_KBoardDelay++;
	}
	else _KBoardDelay = 0;
}
void TabFlipMapType(int index)
{
	//The purpose of this function is to switch out which map version is being presented
	//and recalculate parameters of the map

	//If the calling method has a particular view it wants, assign it - M. White 17 May, 2019
	if(index > -1)
	{
		if(index >= SQR_Map && index < TOTAL_MAP_TYPES)
			_MAPVIEW = index;
	}
	//By passing -1 or less, the tab will increment by +1 - M. White 17 May, 2019
	else
	{
		//Temporarily limited to Hexagon01 maps until we develop Hexagon02) - M. White 2 April, 2019
		if(_MAPVIEW < (TOTAL_MAP_TYPES - 2))	_MAPVIEW++;
		//Zero is current the same as SQR_Map - M. White 21 March, 2019
		else									_MAPVIEW = 0;
	}
	switch(_MAPVIEW)
	{
	case SQR_Map:		_numRiverRoadsHori = int(_bmpRiverRoads->GetWidth() / _TileW_Sqr);		break;
	case DIA_Map:		_numRiverRoadsHori = int(_bmpRiverRoads->GetWidth() / _TileW_SqI);		break;
	case RHO_Map:		_numRiverRoadsHori = int(_bmpRiverRoads->GetWidth() / _TileW_Iso);		break;
	case HEX_Map01:		_numRiverRoadsHori = int(_bmpRiverRoads->GetWidth() / _TileW_Hex01);	break;
	case HEX_Map02:		_numRiverRoadsHori = int(_bmpRiverRoads->GetWidth() / _TileW_Hex02);	break;
	}
	_PlayWin->SetType(_MAPVIEW);
	_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
	_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
	_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
	_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
	//Reassign data to match size of new location - M. White 25 March, 2019
	//NOTE: Take this out when done testing...
	RandomTactMap(); GetTacticalMapData(_MAPVIEW);
	//Reassign data every time the map is switched - M. White 20 March, 2019
	LoadCursorPixelTestData(_PlayWin[_MAPVIEW].GetType(), _PlayWin[_MAPVIEW].GetTileW());
}
void LMouse(int X, int Y)
{
	/*
		There is a lot of repeating code in this function that gets applied to different scenarios 
		where the program flow needs to have its own block to make it easier to test against, or 
		apply different data to those tests.

		There use to be a great deal less reapting, but testing for variables became clunky in the 
		architecture and spaghetti-like. The re-write separates blocks of code into difinitive 
		conditions that in the end is much easier to debug - M. White 24 June, 2019
	*/
	int					i, x, y;
	double				Percent = 0.0, testDbl;
	int					XMod = 0, YMod = 0, testInt;
	char				tmpTxt[1024];
	bool				Found;
	string				strMsg;
	string				disposable;
	string				strTemp;
	ofstream			DataOutput;
	ifstream			DataInput;
	HANDLE				hFile;		//used to open files and test they are there - M. White 16 May, 2019
	RECT				rct;
	RECT				rctTwo;
	InternalMapLink		tmpMP;
	Avatar				tmpAvatar;
	AvFileRef			tmpLocalRef;
	StartLocation		tmpStart;
	InternalMapLink		tmpLS;
	PathNode			tmpPathNode;
	ifstream			LoadCampaign;

	switch(_GAMEPHASE)
	{
	case phPlayScrn:
		if		(_MouseDelay == 0)
		{
			if(_ShowAnAvatar == true)
			{
				if(X >= _PlayScrnAvatar.left && X <= _PlayScrnAvatar.right && Y >= _PlayScrnAvatar.top && Y <= _PlayScrnAvatar.bottom)
				{
					_ShowAnAvatar = false;
					SetRect(&_PlayScrnAvatar,
						_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_PortraitsW * 0.50),
						(8 + _bmpMiniMap->GetHeight() + 8), //8 from top of client, below minimap, allow 8 for rect trim
						_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_PortraitsW * 0.50) + _PortraitsW,
						(8 + _bmpMiniMap->GetHeight() + 8) + _PortraitsH);//...plus portrait height
					_paintSomething = true;
					//Have to do the whole screen to refresh the background
					_paintWholeScrn	= true;
				}
			}
			if		(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
					 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
			{
				TestMapCursor();
				XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
				YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
				if(XMod >= _MapLimitL && XMod < _MapLimitR && YMod >= _MapLimitT && YMod < _MapLimitB)
				{
					if		(_TactMap[XMod][YMod].AvatarIndex > -1 && _MobArray[_TactMap[XMod][YMod].AvatarIndex].GetAggress() == true)
					{
						if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
						{
							if(_bPlayersTurn == true)
							{
								if(_TempAvatar->GetCurHP() <= (0 - _TempAvatar->GetSCon()))
								{
									strMsg = "You're dead, you can't do anything. Please start a new game.";
									_MSG->AddMessage(strMsg);
									return;
								}
								//Roll random dice for to use as comparison to detect secret door - M. White 25 August, 2019
								//This is not a secret door, but we have to make the User think that there might
								//be one here by allowing a die roll to appear...
								y = int(rand() % 20) + 1; 

								//Final calc's before using to determine a hit
								if(_TempAvatar->GetClass(0) == cFighter || _TempAvatar->GetClass(0) == cPaladin || _TempAvatar->GetClass(0) == cRanger)
								{
									if(_TempAvatar->GetSStr() == 18)
									{
										if		(_TempAvatar->GetStrE() >= 100)	y += _ESRData[StrAA_][4];
										else if	(_TempAvatar->GetStrE() >= 91)	y += _ESRData[StrAA_][3];
										else if	(_TempAvatar->GetStrE() >= 76)	y += _ESRData[StrAA_][2];
										else if	(_TempAvatar->GetStrE() >= 51)	y += _ESRData[StrAA_][1];
										else									y += _ESRData[StrAA_][0];
									}
									else y += _STRData[StrAA_][_TempAvatar->GetSStr() - 1];
								}
								else y += _STRData[StrAA_][_TempAvatar->GetSStr() - 1];

								y += NegativeToHit;//This is a negative number being applied...

								sprintf(tmpTxt, "%d", y);
								strMsg = "You attack (d20: "; strMsg += tmpTxt;
								if(NegativeToHit < 0)
								{
									sprintf(tmpTxt, " (%d)", NegativeToHit);
									strMsg += tmpTxt;
								}
								strMsg += ") THACO (";
								sprintf(tmpTxt, "%d", _ClassBasics[_TempAvatar->GetClass(0)].THAC0s[_TempAvatar->GetClassLvl(0)]);
								strMsg += tmpTxt;
								strMsg += ") ";
								strMsg += _MonData[_MobArray[_TactMap[XMod][YMod].AvatarIndex].GetRace()].MonName;
								strMsg += ", hitting AC: ";														//Neg, neg to hit as it adds then...
								sprintf(tmpTxt, "%d", _ClassBasics[_TempAvatar->GetClass(0)].THAC0s[_TempAvatar->GetClassLvl(0)] - y);
								strMsg += tmpTxt;
								_MSG->AddMessage(strMsg);
								
								//Calc damage according to class...
								if((_ClassBasics[_TempAvatar->GetClass(0)].THAC0s[_TempAvatar->GetClassLvl(0)] - y) <= 
									_MobArray[_TactMap[XMod][YMod].AvatarIndex].GetAC())
								{
									switch(_TempAvatar->GetClass(0))
									{
										//Using several fall through cases...watch out
									case cFighter: case cPaladin: case cRanger: 
										y = int(rand() % 8) + 1;
										break;
									case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
									case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
										y = int(rand() % 4) + 1;
										break;
									case cCleric: case cDruid:
										y = int(rand() % 6) + 1;
										y += 1;//Footman's mace
										break;
									case cThief: case cBard: case cNinja:
										y = int(rand() % 6) + 1;
										break;
									};
									if(_TempAvatar->GetClass(0) == cFighter || _TempAvatar->GetClass(0) == cPaladin ||
									   _TempAvatar->GetClass(0) == cRanger)
									{
										if(_TempAvatar->GetSStr() == 18)
										{
											if		(_TempAvatar->GetStrE() >= 100)	y += _ESRData[StrDA_][4];
											else if	(_TempAvatar->GetStrE() >= 91)	y += _ESRData[StrDA_][3];
											else if	(_TempAvatar->GetStrE() >= 76)	y += _ESRData[StrDA_][2];
											else if	(_TempAvatar->GetStrE() >= 51)	y += _ESRData[StrDA_][1];
											else									y += _ESRData[StrDA_][0];
										}
										else
										{
											//-1 index because 0-index mod
											y += _STRData[StrAA_][_TempAvatar->GetSStr() - 1] - NegativeToHit;
										}
									}
									else
									{
										//-1 index because 0-index mod
										y += _STRData[StrDA_][_TempAvatar->GetSStr() - 1] - NegativeToHit;
									}
									sprintf(tmpTxt, "Doing %d", y);
									strMsg = tmpTxt;									
									_MSG->AddMessage(strMsg);
									if(_MobArray != NULL)
									{
										if(_intNumMobsAssigned > 1)
										{
											_MobArray[_TactMap[XMod][YMod].AvatarIndex].SetHP(
												_MobArray[_TactMap[XMod][YMod].AvatarIndex].GetHP() - y);
											sprintf(tmpTxt, "Mob HP: %d", _MobArray[_TactMap[XMod][YMod].AvatarIndex].GetHP());
										}
										else
										{
											_MobArray->SetHP(_MobArray->GetHP() - y);
											sprintf(tmpTxt, "Mob HP: %d", _MobArray->GetHP());
										}
										strMsg = tmpTxt;
										_MSG->AddMessage(strMsg);
									}
									//Refresh the screen to show xp changes
									if(_ShowAnAvatar == true) { _paintSomething	= true; _PaintSideBar = true; }
								}
								else { strMsg = "You missed."; _MSG->AddMessage(strMsg); }
								_bPlayersTurn = false;
							}
							else { strMsg = "Wait your turn!"; _MSG->AddMessage(strMsg); }
						}
						else { strMsg = "You must be closer to your target to get hit it."; _MSG->AddMessage(strMsg); }
					}
					else if	(_TactMap[XMod][YMod].AvatarIndex > -1 && _MobArray[_TactMap[XMod][YMod].AvatarIndex].GetAggress() == false)
					{
						switch(_MobArray[_TactMap[XMod][YMod].AvatarIndex].GetRace())
						{
						case rMammalHerd_Cattle01:	plySnd("sound\\CowMoo.wav"); break;
						case rHuman:
							if(_TempAvatar->GetCurHP() < _TempAvatar->GetHP())
							{
								disposable = "Oh look! ";
								strMsg += _TempAvatar->GetFName();
								for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
								disposable += strMsg;
								disposable += " is hurting! I've got an extra healing potion I can lend you.";
								_MSG->AddMessage(disposable); _TempAvatar->SetCurHP(_TempAvatar->GetHP());
								NegativeToHit = 0;
								_paintSomething = true; _paintWholeScrn	= true;
								plySnd("sound\\potionsound.wav");
								Sleep(250);//Sleep a 1/4 second to give the hard drive a chace to play...
							}
							break;
						case rBird_ChickenSuper:
							if(_ClickedSuperChicken == false)
							{
								strMsg = "You better not touch me again! I'M only warning you *ONCE*";
								_MSG->AddMessage(strMsg);
								_ClickedSuperChicken = true;
								plySnd("sound\\RoosterCrow.wav");
								Sleep(250);
							}
							else
							{
								plySnd("sound\\foghorn.wav");
								Sleep(250);
								_MobArray[_TactMap[XMod][YMod].AvatarIndex].SetAggress(true);
							}
							break;
						case rBird_Chicken:
								plySnd("sound\\Hen.wav");
							break;
						}
					}
					else
					{
						if		(_TactMap[XMod][YMod].GetWall() == 0)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								//Roll random dice for to use as comparison to detect secret door - M. White 25 August, 2019
								//This is not a secret door, but we have to make the User think that there might
								//be one here by allowing a die roll to appear...
								y = int(rand() % 100) + 1;
								sprintf(tmpTxt, "Searching (d100 Roll): %d", y);
								strMsg = tmpTxt;
								_MSG->AddMessage(strMsg);
							}
							else 
							{
								strMsg = "You must be closer to the wall to search it.";
								_MSG->AddMessage(strMsg);
							}
						}
						else if	(_TactMap[XMod][YMod].GetWall() == 1)//Closed Door (horizontal)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								_TactMap[XMod][YMod].SetWall(3);
								plySnd("sound\\EnterDoor.wav");
								_paintSomething = true;
								_paintMainMap	= true;
							}
							else 
							{
								strMsg = "You must be closer to the door to open it.";
								_MSG->AddMessage(strMsg);
							}
						}
						else if	(_TactMap[XMod][YMod].GetWall() == 2)//Closed Door (verticle)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								_TactMap[XMod][YMod].SetWall(4);
								plySnd("sound\\EnterDoor.wav");
								_paintSomething = true;
								_paintMainMap	= true;
							}
							else 
							{
								strMsg = "You must be closer to the door to open it.";
								_MSG->AddMessage(strMsg);
							}
						}
						else if	(_TactMap[XMod][YMod].GetWall() == 3)//Open Door (horizontal)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								_TactMap[XMod][YMod].SetWall(1);
								plySnd("sound\\EnterDoor.wav");
								Sleep(250);//Sleep a 1/4 second to give the hard drive a chace to play...
								_paintSomething = true;
								_paintMainMap	= true;
							}
							else 
							{
								strMsg = "You must be closer to the door to close it.";
								_MSG->AddMessage(strMsg);
							}
						}
						else if	(_TactMap[XMod][YMod].GetWall() == 4)//Open Door (verticle)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								_TactMap[XMod][YMod].SetWall(2);
								plySnd("sound\\EnterDoor.wav");
								Sleep(250);//Sleep a 1/4 second to give the hard drive a chace to play...
								_paintSomething = true;
								_paintMainMap	= true;
							}
							else 
							{
								strMsg = "You must be closer to the door to close it.";
								_MSG->AddMessage(strMsg);
							}
						}
						else if	(_TactMap[XMod][YMod].GetWall() == 5)//Secret Door (Hidden)
						{
							if(XMod >= _TileWalkerX - 1 && XMod <= _TileWalkerX + 1 && YMod >= _TileWalkerY - 1 && YMod <= _TileWalkerY + 1)
							{
								//Roll random dice for to use as comparison to detect secret door - M. White 25 August, 2019
								y = int(rand() % 100) + 1;
								sprintf(tmpTxt, "Searching (d100 Roll): %d", y);
								strMsg = tmpTxt;
								_MSG->AddMessage(strMsg);
								if(y <= (_TempAvatar->GetSInt() + (_TempAvatar->GetClassLvl(0) * 4)))
								{
									_TactMap[XMod][YMod].SetWall(6);
									plySnd("sound\\EnterDoor.wav");
									Sleep(250);//Sleep a 1/4 second to give the hard drive a chace to play...
									_paintSomething = true;
									_paintMainMap	= true;
								}
							}
							else
							{
								strMsg = "You must be closer to the wall to search it.";
								_MSG->AddMessage(strMsg);
							}
						}
					}
					GetTacticalMapData(_MAPVIEW);
				}
			}
			if(_NumBtns > 0)
			{
				if(_Buttons != NULL)
				{
					for(i = 0; i < _NumBtns; i++)
						if		(_Buttons[i].DidItHit(_XMouse, _YMouse) == true)
						{
							switch(i)
							{
							case gpQuit:
								//reset this in case they log back in
								_ShowAnAvatar = false;

								//Save Campaign Data
								_TempAvatar->SetDungeonX(_TileWalkerX);
								_TempAvatar->SetDungeonY(_TileWalkerY);
								//SaveGame does not save FOW
								SaveGame(_ActiveCampaign->GetCampaignID());

								//Save Mobs
								sprintf(tmpTxt, "%d", _ActiveCampaign->GetCampaignID());
								_FileNameMobs = "save\\";
								_FileNameMobs += tmpTxt;
								_FileNameMobs += ".";
								_FileNameMobs += _TempAvatar->GetStartMapName();
								_FileNameMobs += "_mob.dat";
								for(i = 0; i < int(_FileNameMobs.length()); i++)
									if(_FileNameMobs[i] == ' ') _FileNameMobs[i] = '_';
								SaveMobList(0);

								//Save FOW if it's needed...
								if(_bHiddenMap == true)
								{
									sprintf(tmpTxt, "%d", _ActiveCampaign->GetCampaignID());
									_FileNameFOW = "save\\";
									_FileNameFOW += tmpTxt;
									_FileNameFOW += ".";
									_FileNameFOW += _TempAvatar->GetStartMapName();
									_FileNameFOW += "_fow.dat";
									//Don't use a Thread - Lock it up so that it does
									//not interfere with loading of new maps...
									_myHandleFiv	= CreateThread(0, 0, SaveFOW, 0, 0, &_myThreadIDFiv);
									while(_IsLoadingFOW == true) Sleep(1);
								}
								_GAMEPHASE = phMenuScrn;
								CreateButtons(_GAMEPHASE);
								break;
							case gpExpandMsg:
								_MSG->SetExpandAmnt(MaxExpandedView);
								_paintSomething = true; _paintMainMap = true;
								break;
							case gpShrinkMsg:
								_MSG->SetExpandAmnt(1);
								_paintSomething = true; _paintMainMap = true;
								break;
							};
						}
				}
			}
		}
		break;
	case phLoadGame:
		if		(_MouseDelay == 0)
		{
			//Clicking in the main window to get index ref to a campaign index
			if		(X >= _MiniWindow.left && X < _MiniWindow.right && Y >= _MiniWindow.top && Y < _MiniWindow.bottom)
			{
				_EditingTarget1 = VRD(_MiniWindow.top, Y, _bmpTrimmed->GetHeight()) + _ScrollIndex;
				if(_EditingTarget1 >= _NumCampaigns) _EditingTarget1 = -1;
			}
			//Clicking the slide bar on the right...
			else if	(X >= _MapSliderVert.left && X <= _MapSliderVert.right && Y >= _MapSliderVert.top && Y <= _MapSliderVert.bottom)
			{
				if(_NumCampaigns > _showNumCampaigns)
				{
					y = _NumCampaigns - _showNumCampaigns;
					if		(y == 1)
					{
						if(_intHorSlideLocation == _MapSliderVert.top - 6)
						{
							_intHorSlideLocation = _MapSliderVert.bottom - 6; _ScrollIndex = 1;
						}
						else
						{
							_intHorSlideLocation = _MapSliderVert.top - 6; _ScrollIndex = 0;
						}
					}
					else if	(y == 2)
					{
						y = VRD(_MapSliderVert.top, Y, 1);
						Percent = (y / double(_MapSliderVert.bottom - _MapSliderVert.top)) * 100;
						if		(Percent > 65)
						{
							_intHorSlideLocation = _MapSliderVert.bottom - 6; _ScrollIndex = 2;
						}
						else if	(Percent > 33)
						{
							_intHorSlideLocation = int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6; _ScrollIndex = 1;
						}
						else
						{
							_intHorSlideLocation = _MapSliderVert.top - 6; _ScrollIndex = 0;
						}
					}
					else
					{
					}					
				}
			}
			//Iterating through the buttons to see if there was a click
			for(i = 0; i < _NumTmpSubBtn; i++)
			{
				if(_tmpSingleBtn[i].DidItHit(X, Y) == true)
				{
					switch(i)
					{
					case lgQuit:
						//Recycle variable
						_edOpenTrue = false;
						_GAMEPHASE = phMenuScrn;//Search for it above....
						CreateButtons(_GAMEPHASE);
						break;
					case lgContinue:
						if(_NumCampaigns > 0)
						{
							if(_EditingTarget1 >= 0 && _EditingTarget1 < _NumCampaigns)
							{
								//Active Campaign is the one that the player is currently playing, or is about 
								//to load. If they had been playing a campaign, and we get to this point, we 
								//have to make sure that the old one is removed (even though it might be the 
								//same one they're going back into).
								if(_ActiveCampaign != NULL) { delete _ActiveCampaign; _ActiveCampaign = NULL; }
								_ActiveCampaign = new Campaign();
								if		(_NumCampaigns > 1)
								{
									//Access by index...
									_ActiveCampaign->SetCampaignID	(_CampaignsAvail[_EditingTarget1].GetCampaignID());
									_ActiveCampaign->SetAvatarID	(_CampaignsAvail[_EditingTarget1].GetAvatarID());
									_ActiveCampaign->SetNickName	(_CampaignsAvail[_EditingTarget1].GetNickName());
								}
								else
								{
									//Access by pointer...
									_ActiveCampaign->SetCampaignID	(_CampaignsAvail->GetCampaignID());
									_ActiveCampaign->SetAvatarID	(_CampaignsAvail->GetAvatarID());
									_ActiveCampaign->SetNickName	(_CampaignsAvail->GetNickName());
								}
								_GAMEPHASE = phPlayScrn; CreateButtons(_GAMEPHASE); _MAPVIEW = SQR_Map;
								_MapLimitL		= _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitT		= _PlayWin[_MAPVIEW].GetCentRow();
								_MapLimitR		= _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitB		= _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();

								_edOpenTrue		= false;

								//Load game assumes that the player has been on a map already and attempts
								//to load FOW from the save-file.
								LoadGame(_ActiveCampaign->GetCampaignID());

								//Setting up Fog Of War (FOW) in play view - M. White 04 Sep, 2019
								//Initialize this here because somewhere the math is important...
								switch(_TempAvatar->GetRace())
								{
								case startHuman:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.45); break;
								case startHalfElf:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.55); break;
								case startHalfling: testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.65); break;
								case startElf:		testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.75); break;
								case startGnome:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.85); break;
								case startDwarf:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.95); break;
								};
								for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
									for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
									{
										testInt =
											int(getRange(x, y, _PlayWin[_MAPVIEW].GetCentCol(), _PlayWin[_MAPVIEW].GetCentRow()));
										if		(testInt >= testDbl)				_VisLightArray[x][y] = 0;
										else if	(testInt > testDbl - 1)				_VisLightArray[x][y] = 1;
										else										_VisLightArray[x][y] = 2;
									}
								//reset where the avatar is standing...
								for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
									for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
										if(_VisLightArray[x][y] == 2)
										{
											XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
											YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
											_TactMap[XMod][YMod].SetVisited(true);
										}
								for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
									for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
										_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
								
								if(_MSG != NULL) { delete _MSG; _MSG = NULL; }
								//Message Box for in game messages
								_MSG = new InScreenMsg();
								_MSG->SetStartRect(
									_PlayWin[_MAPVIEW].gRectL() + _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].gRectB() - int(_bmpTrimmed->GetHeight() * 0.50),
									_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].gRectB() + int(_bmpTrimmed->GetHeight() * 0.50));
								_MSG->SetExpandBy(_bmpTrimmed->GetHeight());

								//Put a timer in to fire a refresh of game screen
								_paintSomething		= true;
								_paintWholeScrn		= true;
							}
						}
						else MessageBox(NULL, "There are no campaigns saved. Please start a New Game", "Required", MB_OK);
						break;
					case lgScrollUp:
						if(_NumCampaigns > _showNumCampaigns)
						{
							y = _NumCampaigns - _showNumCampaigns;
							if		(y == 1)
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									_intHorSlideLocation = _MapSliderVert.top - 6; 
								}
							}
							else if	(y == 2)
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									switch(_ScrollIndex)
									{
									case 2:	_intHorSlideLocation = _MapSliderVert.bottom - 6; 										break;
									case 1:	_intHorSlideLocation = _MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6;	break;
									case 0:	_intHorSlideLocation = _MapSliderVert.top - 6;											break;
									}
								}
							}
							else
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									if(_ScrollIndex == 0) _intHorSlideLocation = _MapSliderVert.top - 6;
									else
									{
										Percent = (_ScrollIndex) / double(y);
										_intHorSlideLocation = 
											_MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * double(Percent));
									}
								}
							}
						}
						break;
					case lgScrollDn:
						if(_NumCampaigns > _showNumCampaigns)
						{
							y = _NumCampaigns - _showNumCampaigns;
							if		(y == 1)
							{
								if(_ScrollIndex < 1)
								{
									_ScrollIndex++;
									_intHorSlideLocation = _MapSliderVert.bottom - 6; 
								}
							}
							else if	(y == 2)
							{
								if(_ScrollIndex < y)
								{
									_ScrollIndex++;
									switch(_ScrollIndex)
									{
									case 2:	_intHorSlideLocation = _MapSliderVert.bottom - 6; 										break;
									case 1:	_intHorSlideLocation = _MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6;	break;
									case 0:	_intHorSlideLocation = _MapSliderVert.top - 6;											break;
									}
								}
							}
							else
							{
								if(_ScrollIndex < y)
								{
									_ScrollIndex++;
									if(_ScrollIndex == y) _intHorSlideLocation = _MapSliderVert.bottom - 6;
									else
									{
										Percent = (_ScrollIndex) / double(y);
										_intHorSlideLocation = 
											_MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * double(Percent));
									}
								}
							}					
						}
						break;
						//_ScrollIndex
					};
				}
			}
		}
		else if	(_MouseDelay > 3)
		{
		}
		break;
	case phDeleteGame:
		if		(_MouseDelay == 0)
		{
			//Clicking in the main window to get index ref to a campaign index
			if		(X >= _MiniWindow.left && X < _MiniWindow.right && Y >= _MiniWindow.top && Y < _MiniWindow.bottom)
			{
				_EditingTarget1 = VRD(_MiniWindow.top, Y, _bmpTrimmed->GetHeight()) + _ScrollIndex;
				if(_EditingTarget1 >= _NumCampaigns) _EditingTarget1 = -1;
			}
			//Clicking the slide bar on the right...
			else if	(X >= _MapSliderVert.left && X <= _MapSliderVert.right && Y >= _MapSliderVert.top && Y <= _MapSliderVert.bottom)
			{
				if(_NumCampaigns > _showNumCampaigns)
				{
					y = _NumCampaigns - _showNumCampaigns;
					if		(y == 1)
					{
						if(_intHorSlideLocation == _MapSliderVert.top - 6)
						{
							_intHorSlideLocation = _MapSliderVert.bottom - 6; _ScrollIndex = 1;
						}
						else
						{
							_intHorSlideLocation = _MapSliderVert.top - 6; _ScrollIndex = 0;
						}
					}
					else if	(y == 2)
					{
						y = VRD(_MapSliderVert.top, Y, 1);
						Percent = (y / double(_MapSliderVert.bottom - _MapSliderVert.top)) * 100;
						if		(Percent > 65)
						{
							_intHorSlideLocation = _MapSliderVert.bottom - 6; _ScrollIndex = 2;
						}
						else if	(Percent > 33)
						{
							_intHorSlideLocation = int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6; _ScrollIndex = 1;
						}
						else
						{
							_intHorSlideLocation = _MapSliderVert.top - 6; _ScrollIndex = 0;
						}
					}
					else
					{
					}					
				}
			}
			//Iterating through the buttons to see if there was a click
			for(i = 0; i < _NumTmpSubBtn; i++)
			{
				if(_tmpSingleBtn[i].DidItHit(X, Y) == true)
				{
					switch(i)
					{
					case lgQuit:
						//Recycle variable
						_edDeleteTrue	= false;
						_GAMEPHASE		= phMenuScrn;//Search for it above....
						CreateButtons(_GAMEPHASE);
						break;
					case lgContinue://Is actually the "delete" button in this use...
						if(_NumCampaigns > 0)
						{
							if(_EditingTarget1 >= 0 && _EditingTarget1 < _NumCampaigns)
							{
								if(MessageBox(NULL, "Do you want to delete this game?", "Verify", MB_YESNO) == IDYES)
								{
									//Active Campaign is the one that the player is currently playing, or is about 
									//to load. If they had been playing a campaign, and we get to this point, we 
									//have to make sure that the old one is removed (even though it might be the 
									//same one they're going back into).
									if(_ActiveCampaign != NULL) { delete _ActiveCampaign; _ActiveCampaign = NULL; }
									_ActiveCampaign = new Campaign();
									if		(_NumCampaigns > 1)
									{
										//Access by index...
										_ActiveCampaign->SetCampaignID	(_CampaignsAvail[_EditingTarget1].GetCampaignID());
										_ActiveCampaign->SetAvatarID	(_CampaignsAvail[_EditingTarget1].GetAvatarID());
										_ActiveCampaign->SetNickName	(_CampaignsAvail[_EditingTarget1].GetNickName());
									}
									else
									{
										//Access by pointer...
										_ActiveCampaign->SetCampaignID	(_CampaignsAvail->GetCampaignID());
										_ActiveCampaign->SetAvatarID	(_CampaignsAvail->GetAvatarID());
										_ActiveCampaign->SetNickName	(_CampaignsAvail->GetNickName());
									}
									//We have to load the data from the base file for the particular campaign to
									//get the name of the maps visited by the Avatar so we know which ones need 
									//to be deleted...
									LoadCampaignToDelete(_ActiveCampaign->GetCampaignID());

									//First Remove the base file...
									sprintf(tmpTxt, "%d", _ActiveCampaign->GetCampaignID());
									disposable = "save\\";
									disposable += tmpTxt;
									disposable += ".dat";
									sprintf(tmpTxt, "%s", disposable.c_str());
									remove(tmpTxt);
									//Then remove the invidual maps (mobs and FOW) visited
									while(_ListWorldScenes.isEmpty() == false)
									{
										//In sequence...
										//FOW...
										sprintf(tmpTxt, "%d", _ActiveCampaign->GetCampaignID());
										disposable = "save\\";
										disposable += tmpTxt;
										disposable += ".";
										//Grab the name from the first node...
										_ListWorldScenes.getNodes(0, strTemp);
										disposable += strTemp;
										disposable += "_fow.dat";
                                        sprintf(tmpTxt, "%s", disposable.c_str());
										remove(tmpTxt);
										//Mobs
										sprintf(tmpTxt, "%d", _ActiveCampaign->GetCampaignID());
										disposable = "save\\";
										disposable += tmpTxt;
										disposable += ".";
										//Grab the name from the first node...
										_ListWorldScenes.getNodes(0, strTemp);
										disposable += strTemp;
										disposable += "_mob.dat";
                                        sprintf(tmpTxt, "%s", disposable.c_str());
										remove(tmpTxt);
										//Remove the first node...
										_ListWorldScenes.popFront();
									}
									if		(_NumCampaigns > 1)
									{
										//Shift the campaigns "up"
										for(i = _EditingTarget1; i < _NumCampaigns - 1; i++)
										{
											_CampaignsAvail[i] = _CampaignsAvail[i + 1];
										}
										_CampaignsAvail[_NumCampaigns - 1].Reset();
										//Decrement the number of available compaigns...
										_NumCampaigns--;
									}
									else
									{
										//Access by pointer...
										_ActiveCampaign->SetCampaignID	(_CampaignsAvail->GetCampaignID());
										_ActiveCampaign->SetAvatarID	(_CampaignsAvail->GetAvatarID());
										_ActiveCampaign->SetNickName	(_CampaignsAvail->GetNickName());
										delete _CampaignsAvail; _CampaignsAvail = NULL;
										delete _ActiveCampaign; _ActiveCampaign = NULL;
										_NumCampaigns = 0;
									}
									//Localized the saving of the new campaign list so that there's no
									//problems with a pointer
									strTemp = "save\\CampaignList.dat";
									DataOutput.open(strTemp.c_str());
									if(_NumCampaigns > 0)
									{
										if(DataOutput.is_open() == true)
										{
											DataOutput << _NumCampaigns << "\n";
											if(_CampaignsAvail != NULL)
											{
												for(i = 0; i < _NumCampaigns; i++)
												{
													DataOutput << _CampaignsAvail[i].GetCampaignID() << " " << _CampaignsAvail[i].GetAvatarID() << " "
														<< _CampaignsAvail[i].GetNickName();
													if(i < _NumCampaigns - 1) DataOutput << "\n";
												}
											}
										}
									}
									else
									{
										//A simple output of '0' for later if the program attempts to open
										//the file and read in data...
										DataOutput << 0;
									}
									DataOutput.close();

									_GAMEPHASE = phMenuScrn; CreateButtons(_GAMEPHASE);
									_edDeleteTrue		= false;
									_paintSomething		= true;
									_paintWholeScrn		= true;
								}
							}
						}
						else MessageBox(NULL, "There are no campaigns to delete\n\nDo...you...want...\nto...play...a...game?", "No Games", MB_OK);
						break;
					case lgScrollUp:
						if(_NumCampaigns > _showNumCampaigns)
						{
							y = _NumCampaigns - _showNumCampaigns;
							if		(y == 1)
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									_intHorSlideLocation = _MapSliderVert.top - 6; 
								}
							}
							else if	(y == 2)
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									switch(_ScrollIndex)
									{
									case 2:	_intHorSlideLocation = _MapSliderVert.bottom - 6; 										break;
									case 1:	_intHorSlideLocation = _MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6;	break;
									case 0:	_intHorSlideLocation = _MapSliderVert.top - 6;											break;
									}
								}
							}
							else
							{
								if(_ScrollIndex > 0)
								{
									_ScrollIndex--;
									if(_ScrollIndex == 0) _intHorSlideLocation = _MapSliderVert.top - 6;
									else
									{
										Percent = (_ScrollIndex) / double(y);
										_intHorSlideLocation = 
											_MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * double(Percent));
									}
								}
							}
						}
						break;
					case lgScrollDn:
						if(_NumCampaigns > _showNumCampaigns)
						{
							y = _NumCampaigns - _showNumCampaigns;
							if		(y == 1)
							{
								if(_ScrollIndex < 1)
								{
									_ScrollIndex++;
									_intHorSlideLocation = _MapSliderVert.bottom - 6; 
								}
							}
							else if	(y == 2)
							{
								if(_ScrollIndex < y)
								{
									_ScrollIndex++;
									switch(_ScrollIndex)
									{
									case 2:	_intHorSlideLocation = _MapSliderVert.bottom - 6; 										break;
									case 1:	_intHorSlideLocation = _MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * 0.50) - 6;	break;
									case 0:	_intHorSlideLocation = _MapSliderVert.top - 6;											break;
									}
								}
							}
							else
							{
								if(_ScrollIndex < y)
								{
									_ScrollIndex++;
									if(_ScrollIndex == y) _intHorSlideLocation = _MapSliderVert.bottom - 6;
									else
									{
										Percent = (_ScrollIndex) / double(y);
										_intHorSlideLocation = 
											_MapSliderVert.top + int((_MapSliderVert.bottom - _MapSliderVert.top) * double(Percent));
									}
								}
							}					
						}
						break;
						//_ScrollIndex
					};
				}
			}
		}
		break;
	case phEditor:
		/*
		In this case, we have entered the "Editor" GAMEPHASE (GP)...

		Within the Editor-GP we will iterate through several steps to accomplish tasks,
		controlled by _GAMEsubPHASE. This will allow for division of task for simplificaton
		with each phase having its own special instructions for Mouse Hits
			0) Sit idle in Entry Point of Editor		edStart
			1) Create a New World Map					edNewWorldMenu
			2) Create a New Scene Map					edNewSceneMenu
			3) Create a Map's links						edLinkMaps
			4) Open either a World or Scene Map			edOpen
			5) Delete a Map and its Links				edDelete
			6) Save a Map and its Links					edSave
			7) Quit the Editor-GP						edQuit
		*/
		//Single-click actions - M. White 5 June, 2019
		if		(_MouseDelay == 0)
		{
			switch(_GAMEsubPHASE)
			{
			case edStart:
				if		(_tmpSingleBtn		!= NULL)//Menu buttons - M. White 5 June, 2019
				{
					//Loop through menu options _tmpSingleBtn[] - M. White 9 May, 2019
					for(i = 0; i < _NumTmpSingBtn; i++)
						if(_tmpSingleBtn[i].DidItHit(X, Y) == true)
							switch(i)
							{
							case edNewWorldMenu:
								{
								_GAMEsubPHASE = edNewWorldMenu;
								SetRect(&_RectSubMenu,
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15), 
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.20), 
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15),
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.70));
								//Set up the "Continue" and "Cancel" buttons - M. White 18 June, 2019
								_NumTmpSubBtn	= MAX_edNewSubMenu;
								_tmpSubBtn		= new myButton[_NumTmpSubBtn];
								_tmpSubBtn[edNewSubCancel].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.50) + 26, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
								_tmpSubBtn[edNewSubContinue].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.50) + 61, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Continue");
								_Buttons[edMapSqr1].SetIsActive(false);
								_Buttons[edMapDiam].SetIsActive(false);
								_Buttons[edMapRhom].SetIsActive(false);
								_Buttons[edMapHex1].SetIsActive(false);
								_tmpSingleBtn[edNewWorldMenu].SetIsActive(false);
								_tmpSingleBtn[edNewSceneMenu].SetIsActive(false);
								_tmpSingleBtn[edOpen].SetIsActive(false);
								_tmpSingleBtn[edSave].SetIsActive(false);
								_tmpSingleBtn[edDelete].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetDisplayText("Quit Editing");
								_tmpSingleBtn[edLinkMaps].SetIsActive(false);
								_tmpSingleBtn[edStartLoc].SetIsActive(false);
								_edNewWorldTrue		= true;
								_EditorFocusIndex	= 0;	//Set focus to 3-letter abbreviation - M. White 10 May, 2019
								_EditorStr3letters	= "";	//reset the string - M. White 10 May, 2019
								_Editor_W_S_Name	= "";	//reset the string - M. White 10 May, 2019
								//Set to default Hex-Map - M. White 10 May, 2019
								TabFlipMapType(HEX_Map01);
								_paintSomething		= true;
								_paintMainMap		= true;
								}
								break;
							case edNewSceneMenu:
								{
								_GAMEsubPHASE = edNewSceneMenu;
								_edNewSceneTrue = true;
								SetRect(&_RectSubMenu,
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
									int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15), 
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.20), 
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15),
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.70));
								_NumTmpSubBtn = MAX_edNewSubMenu;
								_tmpSubBtn = new myButton[_NumTmpSubBtn];
								_tmpSubBtn[edNewSubCancel].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.50) + 26, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
								_tmpSubBtn[edNewSubContinue].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.50) + 61, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Continue");
								//Disable the Map-Type buttons at the top of the Map - M. White 4 May, 2019
								_Buttons[edMapSqr1].SetIsActive(false);
								_Buttons[edMapDiam].SetIsActive(false);
								_Buttons[edMapRhom].SetIsActive(false);
								_Buttons[edMapHex1].SetIsActive(false);
								_tmpSingleBtn[edNewWorldMenu].SetIsActive(false);
								_tmpSingleBtn[edNewSceneMenu].SetIsActive(false);
								_tmpSingleBtn[edOpen].SetIsActive(false);
								_tmpSingleBtn[edSave].SetIsActive(false);
								_tmpSingleBtn[edDelete].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetDisplayText("Quit Editing");
								_tmpSingleBtn[edLinkMaps].SetIsActive(false);
								_EditorFocusIndex	= 0;
								_EditorStr3letters	= "";
								_Editor_W_S_Name	= "";
								TabFlipMapType(SQR_Map);
								_paintSomething		= true;
								_paintMainMap		= true;
								_edNewSceneTrue		= true;
								}
								break;
							case edOpen:
								{
								_GAMEsubPHASE = edOpen;
								//_ListWorldScenes by default - M. White 19 June, 2019
								SetRect(&_RectSubMenu,
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15), 
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.20), 
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15),
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.70));
								_NumTmpSubBtn = 3;
								_tmpSubBtn = new myButton[_NumTmpSubBtn];
								_tmpSubBtn[0].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.25) + 26, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "World");
								_tmpSubBtn[1].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.25) + 61, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Scene");
								_tmpSubBtn[2].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.50) + 96, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
								//Set Against Use...
								//Disable the Map-Type buttons at the top of the Map - M. White 4 May, 2019
								_Buttons[edMapSqr1].SetIsActive(false);
								_Buttons[edMapDiam].SetIsActive(false);
								_Buttons[edMapRhom].SetIsActive(false);
								_Buttons[edMapHex1].SetIsActive(false);
								_tmpSingleBtn[edNewWorldMenu].SetIsActive(false);
								_tmpSingleBtn[edNewSceneMenu].SetIsActive(false);
								_tmpSingleBtn[edOpen].SetIsActive(false);
								_tmpSingleBtn[edSave].SetIsActive(false);
								_tmpSingleBtn[edDelete].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetIsActive(false);
								_tmpSingleBtn[edLinkMaps].SetIsActive(false);
								//Using _EditorFocusIndex in a test...so long as it does not equal 0 or 1, the dialog 
								//box will stay open and asking the User to pick between "World" and "Scene". Once it 
								//is set to 1 or 0, the screen will morph into a list showing available "World" or 
								//"Scene" files that the User can then select. If they cancel at any time the program 
								//will return to a default. If the User selects a listed file, then  the program will 
								//go into opening that particular file - M. White 14 May, 2019
								_EditorFocusIndex	= -1;//Used as a special case when we go to "save" area - M. White 26 June, 2019
								//Reset these to restore default - M. White 26 July, 2019
								_EditorStr3letters	= "";
								_Editor_W_S_Name	= "";
								_StillEditing		= false;
								_edOpenTrue			= true;
								_paintSomething		= true;
								_paintMainMap		= true;
								}
								break;
							case edSave:
								{
									strMsg = "Save is only active once you've opened a map.";
									MessageBox(NULL, strMsg.c_str(), "Sorry", MB_OK);
									//Necessary to keep buttons from blinking after closing the MsgBox();
									_XMouse = -1; _YMouse = -1;
								}
								break;
							case edDelete:
								{
								_GAMEsubPHASE = edDelete;
								//_ListWorldScenes by default - M. White 19 June, 2019
								SetRect(&_RectSubMenu,
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15), 
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.20), 
									_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
										int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.15),
									_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.70));
								_NumTmpSubBtn = 3;
								_tmpSubBtn = new myButton[_NumTmpSubBtn];
								_tmpSubBtn[0].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.25) + 26, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "World");
								_tmpSubBtn[1].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.25) + 61, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Scene");
								_tmpSubBtn[2].SetProperties(
									_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.50) - 60,
									_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.50) + 96, 
									119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
								//Set Against Use...
								//Disable the Map-Type buttons at the top of the Map - M. White 4 May, 2019
								_Buttons[edMapSqr1].SetIsActive(false);
								_Buttons[edMapDiam].SetIsActive(false);
								_Buttons[edMapRhom].SetIsActive(false);
								_Buttons[edMapHex1].SetIsActive(false);
								_tmpSingleBtn[edNewWorldMenu].SetIsActive(false);
								_tmpSingleBtn[edNewSceneMenu].SetIsActive(false);
								_tmpSingleBtn[edOpen].SetIsActive(false);
								_tmpSingleBtn[edSave].SetIsActive(false);
								_tmpSingleBtn[edDelete].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetIsActive(false);
								_tmpSingleBtn[edLinkMaps].SetIsActive(false);
								//Using _EditorFocusIndex in a test...so long as it does not equal 0 or 1, the dialog 
								//box will stay open and asking the User to pick between "World" and "Scene". Once it 
								//is set to 1 or 0, the screen will morph into a list showing available "World" or 
								//"Scene" files that the User can then select. If they cancel at any time the program 
								//will return to a default. If the User selects a listed file, then  the program will 
								//go into opening that particular file - M. White 14 May, 2019
								_EditorFocusIndex	= -1;//Used as a special case when we go to "save" area - M. White 26 June, 2019
								//Reset these to restore default - M. White 26 July, 2019
								_EditorStr3letters	= "";
								_Editor_W_S_Name	= "";
								_StillEditing		= false;
								_edDeleteTrue		= true;
								_paintSomething		= true;
								_paintMainMap		= true;
								}
								break;
							case edLinkMaps:
								{
								_GAMEsubPHASE		= edLinkMaps;
								_edLinkingMaps		= true;
								_Editor_W_S_Name	= ""; //Important to reset these - M. White 24 June, 2019
								_EditingTarget1		= -1;
								_EditorFocusIndex	= mapWORLD;
								_MapLink->WhichMapBeingPicked = -1;
								if(_MapLink != NULL)
								{
									//Set up the buttons for use - M. White 10 June, 2019
									CopyRect(&_ShadowRect, &_MapLink->GetRectPickName());
									switch(_MonitorCat)
									{
									case 2:
										{
										_MapLink->buttons[lcWorld].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "World");
										_MapLink->buttons[lcScene].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Scene");
										_MapLink->buttons[lcContinue].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Continue");
										_MapLink->buttons[lcCancel].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Cancel");
										_MapLink->buttons[lcSave].SetProperties(
											_ShadowRect.right - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Save");
										_MapLink->buttons[lcInternalLinks].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Intern Links");
										_MapLink->buttons[lcOpen].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Open");
										CopyRect(&_ShadowRect, &_MapLink->GetRectUserInputScrn());
										_MapLink->buttons[lcContinueTwo].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right  - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top)  * 0.75) - int( 26 * 0.50),
											178, 39, 0, 0, 178, 0, 0, 0, true, "", "Continue");
										}
										break;
									case 1:
										{
										_MapLink->buttons[lcWorld].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "World");
										_MapLink->buttons[lcScene].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Scene");
										_MapLink->buttons[lcContinue].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Continue");
										_MapLink->buttons[lcCancel].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Cancel");
										_MapLink->buttons[lcSave].SetProperties(
											_ShadowRect.right - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Save");
										_MapLink->buttons[lcInternalLinks].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Intern Links");
										_MapLink->buttons[lcOpen].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Open");
										CopyRect(&_ShadowRect, &_MapLink->GetRectUserInputScrn());
										_MapLink->buttons[lcContinueTwo].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right  - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top)  * 0.75) - int( 26 * 0.50),
											119, 26, 0, 0, 119, 0, 0, 0, true, "", "Continue");
										}
										break;
									case 0:
										{
										_MapLink->buttons[lcWorld].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "World");
										_MapLink->buttons[lcScene].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.02),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Scene");
										_MapLink->buttons[lcContinue].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Continue");
										_MapLink->buttons[lcCancel].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Cancel");
										_MapLink->buttons[lcSave].SetProperties(
											_ShadowRect.right - int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Save");
										_MapLink->buttons[lcInternalLinks].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Intern Links");
										_MapLink->buttons[lcOpen].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right - _ShadowRect.left) * 0.50) + int(119 * 1.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top) * 0.93),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Open");
										CopyRect(&_ShadowRect, &_MapLink->GetRectUserInputScrn());
										_MapLink->buttons[lcContinueTwo].SetProperties(
											_ShadowRect.left + int((_ShadowRect.right  - _ShadowRect.left) * 0.50) - int(119 * 0.50),
											_ShadowRect.top  + int((_ShadowRect.bottom - _ShadowRect.top)  * 0.75) - int( 26 * 0.50),
											60, 12, 0, 0, 60, 0, 0, 0, true, "", "Continue");
										}
										break;
									}
								}
								//Set up scroll buttons in case there's more names to list than
								//can be seen in the list. These are separated from the above switch()
								//because RECT-data gets changed - M. White 16 May, 2019
								SetRect(&rct,
									_ShadowRect.left	+ int((_ShadowRect.right	- _ShadowRect.left) * 0.05),
									_ShadowRect.top		+ int((_ShadowRect.bottom	- _ShadowRect.top)  * 0.15),
									_ShadowRect.right	- int((_ShadowRect.right	- _ShadowRect.left) * 0.05),
									_ShadowRect.top		+ int((_ShadowRect.bottom	- _ShadowRect.top)  * 0.15) + (_bmpTrimmed->GetHeight() * _NumLinesToList));
								if(_WorldSceneUpDwn != NULL) { delete [] _WorldSceneUpDwn; _WorldSceneUpDwn = NULL; }
								_WorldSceneUpDwn = new myButton[2];	
								//Set up the up-down arrows that scroll the map names - M. White 10 June, 2019
								switch(_MonitorCat)
								{
								case 2:
									//-8 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_WorldSceneUpDwn[0].SetProperties(rct.right - 8, rct.top    - 8, 15, 15, 155, 78, 155, 78);
									_WorldSceneUpDwn[1].SetProperties(rct.right - 8, rct.bottom - 8, 15, 15, 155, 78, 155, 78);
									break;
								case 1:
									//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_WorldSceneUpDwn[0].SetProperties(rct.right - 6, rct.top    - 6, 12, 12, 120, 52, 120, 64);
									_WorldSceneUpDwn[1].SetProperties(rct.right - 6, rct.bottom - 6, 12, 12, 120, 52, 120, 64);
									break;
								case 0:
									//-3 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_WorldSceneUpDwn[0].SetProperties(rct.right - 3, rct.top    - 3,  7,  7,  63, 24,  63, 24);
									_WorldSceneUpDwn[1].SetProperties(rct.right - 3, rct.bottom - 3,  7,  7,  63, 24,  63, 24);
									break;
								};
								//load the World Map Names - M. White 9 June, 2019
								LoadData(mapWORLD);
								//Reset the list index
								_ListIndex = 0;
								_tmpSingleBtn[edQuit].SetIsActive(false);
								ResetIntLinkStruct();
								_EditorFocusIndex	= 0; //Default setting - M. White 22 June, 2019
								_Buttons[edMapSqr1].SetIsActive(false);
								_Buttons[edMapDiam].SetIsActive(false);
								_Buttons[edMapRhom].SetIsActive(false);
								_Buttons[edMapHex1].SetIsActive(false);
								_tmpSingleBtn[edNewWorldMenu].SetIsActive(false);
								_tmpSingleBtn[edNewSceneMenu].SetIsActive(false);
								_tmpSingleBtn[edOpen].SetIsActive(false);
								_tmpSingleBtn[edSave].SetIsActive(false);
								_tmpSingleBtn[edDelete].SetIsActive(false);
								_tmpSingleBtn[edQuit].SetIsActive(false);
								_tmpSingleBtn[edLinkMaps].SetIsActive(false);
								_paintSomething = true;
								_paintWholeScrn	= true;
								}
								break;
							case edStartLoc:
								{
								//We want to respond even if the button is not active...
								//The User will at least under stand they need to be in a 
								//particular mode of operation - M. White 08, 2019
								strMsg  = "To use this function, You\n";
								strMsg += "must be in Internal Links";
								MessageBox(NULL, strMsg.c_str(), "Required", MB_OK);
								}
								break;
							case edQuit:
								{
								//Default setting is edStart, for when User comes 
								//back to do more editing - M. White 18 June, 2019
								_GAMEsubPHASE = edStart;
								ResetIntLinkStruct();
								_MapLink->ResetLinks();
								delete [] _SideBarMenuStr;
								_GAMEPHASE = phMenuScrn;
								CreateButtons(_GAMEPHASE);
								}
								break;
							case edHidden:
								if(_bHiddenMap == false)
								{
									_bHiddenMap = true;
									_tmpSingleBtn[edHidden].SetDisplayText("Hidden Map");
								}
								else
								{
									_bHiddenMap = false;
									_tmpSingleBtn[edHidden].SetDisplayText("Open Map");
								}
								break;
							};//End: switch()
				}//End: if(_tmpSingleBtn != NULL)
				break;
			case edNewWorldMenu:
				//There are two subphases to edNewWorldMenu
				if		(_edNewWorldTrue	== true)
				{
					if(_tmpSubBtn != NULL)
					{
						for(i = 0; i < _NumTmpSubBtn; i++)
							if(_tmpSubBtn[i].DidItHit(X, Y) == true)
							{
								switch(i)
								{
								case edNewSubCancel: 
									{
									//Default setting is edStart, for when User comes 
									//back to do more editing - M. White 18 June, 2019
									_GAMEsubPHASE = edStart;
									delete [] _tmpSubBtn; _tmpSubBtn = NULL;
									_edNewWorldTrue = false; 
									_StillEditing	= false;
									//Actuvate the Map-Type buttons at the top of the Map - M. White 4 May, 2019
									_Buttons[edMapSqr1].SetIsActive(true);
									_Buttons[edMapDiam].SetIsActive(true);
									_Buttons[edMapRhom].SetIsActive(true);
									_Buttons[edMapHex1].SetIsActive(true);
									_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
									_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
									_tmpSingleBtn[edOpen].SetIsActive(true);
									_tmpSingleBtn[edSave].SetIsActive(false);
									_tmpSingleBtn[edDelete].SetIsActive(true);
									_tmpSingleBtn[edQuit].SetIsActive(true);
									_tmpSingleBtn[edQuit].SetDisplayText("Quit");
									_tmpSingleBtn[edLinkMaps].SetIsActive(true);
									_EditorStr3letters	= "";
									_Editor_W_S_Name	= "";
									_EditingTarget1		= -1;
									_MapLink->ResetLinks();
									//Reset the map to make it apparent that they are no longer editing - M. White 17 May, 2019
									TabFlipMapType(int(rand() % (TOTAL_MAP_TYPES - 1)));

									//Complete the loop for early break out, while continuing 
									//the rest of program flow in the function - M. White 19 June, 2019
									i = _NumTmpSubBtn; 
									//-----------------------------------------------------------------
									}
									break;
								case edNewSubContinue:
									{
									//Check to make sure that the User entered the required info - M. White 2 May, 2019
									if(_EditorStr3letters.length()	!= 3)
									{
										MessageBox(NULL, "You must enter a\n3-letter designator", "Required", MB_OK);
										return;
									}
									if(_Editor_W_S_Name.length()	<= 0)
									{
										MessageBox(NULL, "You must enter a\nWorld Map Name", "Required", MB_OK);
										return;
									}
									//Load a map, and upon success do some work - M. White 17 August, 2019
									if(LoadData(mapWORLD) == true)
									{
										//Search list, checking for a name match - M. White 18 May, 2019
										Found = false;//default, tested later for TRUE
										for(i = 0; i < int(_ListWorldScenes.length()); i++)
										{
											_ListWorldScenes.getNodes(i, strMsg);
											if		(strMsg == "No Maps Created")
											{
												//"No Maps Created" is a default file allocation. If it is 
												//present, then the number of Maps is default '1'. Pop it 
												//from the list and insert the new map name as there's 
												//nothing to test against - M. White 18 May, 2019
												_ListWorldScenes.popFront();

												//New name added in the later in (Found == false)
											}
											else if	(strMsg == _Editor_W_S_Name)
											{
												//There was a matching name, inform the User that the they
												//have already created a map by that name - M. White 18 May, 2019
												MessageBox(NULL, "You assigned that name already\n\nPick another name", "Required", MB_OK);
												Found = true;
												_EditorStr3letters	= "";
												_Editor_W_S_Name	= "";
												break;//...out of the for-loop
											}
										}
										if(Found == false)
										{
											_ListWorldScenes.insertBack(_Editor_W_S_Name);
											_NumWSs = _ListWorldScenes.length();
											//Save back the edited list - M. White 18 May, 2019
											DataOutput.open("data\\w\\wd.dat", ios_base::trunc);
											if(DataOutput.is_open())
											{
												DataOutput << _NumWSs << "\n";
												for(i = 0; i < _NumWSs; i++)
												{
													_ListWorldScenes.getNodes(i, strMsg);
													for(y = 0; y < int(strMsg.length()); y++) if(strMsg[y] == ' ') strMsg[y] = '_';
													DataOutput << strMsg;
													if(i < _NumWSs - 1) DataOutput << "\n"; 
												}
											}
											else MessageBox(NULL, "Did not open World List for re-saving", "File Error", MB_OK);
											DataOutput.close();
											//Force creating the new map file in case the User attempts to "Open Map" 
											//without saving it first themselves - M. White 22 June, 2019
											if(_Editor_W_S_Name.length() > 0)
											{
												//Assign the three-letter designator...
												strMsg = "data\\w\\";
												strMsg += _Editor_W_S_Name;
												strMsg += ".dat";
												//Replace spaces with underscores
												for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
												_FileNameMap = strMsg;
												_myHandleOne = CreateThread(0, 0, SaveWorldScene, 0, 0, &_myThreadIDOne);
											}
											_edOpenMCNum	= 1;
											_edNewWorldTrue	= false;
											_edEditingWorld	= true;
											_tmpSingleBtn[edSave].SetIsActive(true);
											_tmpSingleBtn[edQuit].SetIsActive(true);
											_tmpSingleBtn[edQuit].SetDisplayText("Quit Editing");
											_MAPVIEW		= HEX_Map01;
											_StillEditing	= false;
										}
									}
									else MessageBox(NULL, "Data files need replacing\n\nContact the developer", "Error: LMouse New World", MB_OK);
									}
									break;
								};
								_paintSomething = true;
								_paintWholeScrn	= true;
							}
					}
				}//End: if(_edNewWorldTrue == true)
				else if (_edEditingWorld	== true)
				{
					//User has to deal with an open drop-box list before anything else - M. White 18 June, 2019
					if(_edOpenMapCategory == true)
					{
						//Reduces the textbox back to normal size - M. White 04 May, 2019
						if(X >= _SideBarMenu.left && X <= _SideBarMenu.right && Y >= _SideBarMenu.top && Y <= _SideBarMenu.bottom)
						{
							//Reset number of lines that the menu is showing - M. White 10 May, 2019
							_edOpenMCNum = 1;
							//Assign the value that the User picked - M. White 10 May, 2019
							_SideBarMenuIndex = int((Y - (_SideBarMenu.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
							//Set _SideBarMenu back down to a single-line after we've taken a measurement in the mouse click - M. White 9 May, 2019
							SetRect(&_SideBarMenu,
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 1));_EditingTarget1 = -1;
							_EditingTarget2		= -1;
							_ScrollIndex		= 0;
							_Dispersion			= false; //Reset each time to avoid accidents - M. White 13 July, 2019
							_edOpenMapCategory	= false;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}//End: if()
					}
					else
					{
						//Expands the textbox to show a list - M. White 04 May, 2019
						if		(X >= _SideBarMenu.left && X <= _SideBarMenu.right && Y >= _SideBarMenu.top && Y <= _SideBarMenu.bottom)
						{
							//+1 to account for the category already chosen - M. White 04 May, 2019
							//...and modifying in case they're editing a World or not...
							_edOpenMCNum = edMC_MAXCats + 1 - ((_edEditingWorld == true) ? 1 : 0);
							SetRect(&_SideBarMenu,
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * _edOpenMCNum));
							_edOpenMapCategory	= true;
							_paintSomething		= true;
							_PaintSideBar		= true;
						}
						//Clicking in the sidebar selection area - M. White 18 June, 2019
						else if	(X >= _SideBarBackGrnd.left && X <= _SideBarBackGrnd.right && Y >= _SideBarBackGrnd.top && Y <= _SideBarBackGrnd.bottom)
						{
							//Clicking the small window at the bottom of the Side Bar background will 
							//clear out the seletected terrain/coastal types - M. White 05 May, 2019
							if		(X >= _MiniWindow.left && X <= _MiniWindow.right && Y >= _MiniWindow.top && Y <= _MiniWindow.bottom)
							{
								_EditingTarget1 = -1;
								_EditingTarget2	= -1;
							}
							//If the didn't hit the mini-window in the same region, then we will go
							//to the following action to manipulate the "dispersion" option - M. White 8 May, 2019
							else if (X >= _SideBarBackGrnd.left && X <= _SideBarBackGrnd.right && Y >= _MiniWindow.top && Y <= _MiniWindow.bottom)
							{
								if(_Dispersion == false)	_Dispersion = true;
								else						_Dispersion = false;
							}
							//Selecting an icon from the available view - M. White 9 May, 2019
							else if	(Y >= _SideBarBackGrnd.top	&& Y <= _MiniWindow.bottom)
							{
								switch(_SideBarMenuIndex)
								{
								case edMC_Cities:
									if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
										_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
									break;
								case edMC_Coastal:
									if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
									{
										i = int((X - _SideBarBackGrnd.left) / int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.33));
										switch(i)
										{
										case 0:		_EditingTarget2 = 0;		break;
										case 1:		_EditingTarget2 = 1;		break;
										case 2:		_EditingTarget2 = 2;		break;
										}
										_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) + _ScrollIndex;
									}
									break;
								case edMC_Forests:
									if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
										_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
									break;
								case edMC_RiverRoads:
									if(VRD(_SideBarBackGrnd.top + 5,  Y, _PlayWin[_MAPVIEW].GetTileH()) < 10)
									{
										_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) + _ScrollIndex;
										i = int((X - _SideBarBackGrnd.left) / int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50));
										//TODO - Make sure this gets converted over to an integer that gets assigned
										//at start up. More of this down in GamePaintEditor() - M. White 24 May, 2019
										if(i > 0) _EditingTarget1 += _numRiverRoadsHori;
										else
										{
											if(_EditingTarget1 > _numRiverRoadsHori) _EditingTarget1 = _numRiverRoadsHori;
										}
									}
									break;
								case edMC_Terrain:
									_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
									//Setting this here as it will be used as a text when assigning in
									//_PlayWin targetting - M. White 04 May, 2019
									_EditingTarget2 = -1;
									break;
								case edMC_walls001:
									_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) + _ScrollIndex;
									if(_EditingTarget1 >= MAX_WallTypes) _EditingTarget1 = -1;
									break;
								}
							}
							_paintSomething = true;
							_PaintSideBar	= true;
						}
						//Clicking in the Play Map - M. White 05 May, 2019
						else if	(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
								 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
						{
							//The Play Window has multiple windows that might be open...we have to test 
							//to see which one is open and act upon it only - M. White 18 June, 2019

							//User Input has highest functionality
							if		(_MapLink->ShowUserInput	== true)
							{
							}//End: if(_ShowUserInput == true)
							else if	(_MapLink->ShowIntLink		== true)
							{
							}//End: if(_edIntLinking == true)
							//Else represents that no other windows are open and this 
							//is "normal" activity - M. White 18 June, 2019
							else
							{
								//Set this so that any changes to the map the User makes flags that
								//something has changed and protects against loss of work - M. White 13 May, 2019
								_StillEditing = true;
								_tmpSingleBtn[edSave].SetIsActive(true);
								XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
								YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
								switch(_SideBarMenuIndex)
								{
								case edMC_Cities:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetCity(_EditingTarget1);	break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetCity(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetCity(_EditingTarget1);
										break;
									};
									break;
								case edMC_Coastal:
									switch(_MAPVIEW)
									{
									case SQR_Map:
										_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
										break;
									case HEX_Map01:
										//Targetting has to be reversed calculated from cursor so that data
										//will point to the correct array index - M. White 9 May, 2019
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))
										{
											_TactMap[XMod + 1][YMod].SetCoastX(_EditingTarget1);
											_TactMap[XMod + 1][YMod].SetCoastY(_EditingTarget2);
										}
										else
										{
											_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
											_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
										}
										break;
									}
									break;
								case edMC_Forests:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetForest(_EditingTarget1);		break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetForest(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetForest(_EditingTarget1);
										break;
									};
									break;
								case edMC_RiverRoads:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);		break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetRoadRiver(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);
										break;
									};
									break;
								case edMC_Terrain://Terrain
									//Temporaily setting value to match desired graphic in _bmp - M. White 25 May, 2019
									if(_EditingTarget1 == -1) _EditingTarget1 = 11;
									switch(_MAPVIEW)
									{
									case SQR_Map:
										if(_Dispersion == true)
										{
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);	//Center
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Right
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);		//Right
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Right
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Left
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod - 1][YMod + 0].SetBG(_EditingTarget1);		//Left
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Left
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Top
										}
										else
										{
											if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
												_TactMap[XMod][YMod].SetBG(_EditingTarget1);
										}
										break;
									case HEX_Map01:
										if(_ptCursor.y & 1)
										{
											if(_Dispersion == true)
											{
												if(_TileWalkerY & 1)
												{
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);	//Center Tile
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 2].SetBG(_EditingTarget1);	//Down
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 2].SetBG(_EditingTarget1);	//Up
												}
												else
												{
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);		//Down
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
												}
											}
											else
											{
												if(_TileWalkerY & 1)
												{
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);
												}
												else
												{
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
												}
											}
										}
										else
										{
											if(_Dispersion == true)
											{
												if(_TileWalkerY & 1)
												{
													if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
														_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) < _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
												}
												else
												{
													if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
														_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
													if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-left
													if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Up-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);	//Up
												}
											}
											else
											{
												//Test limits before assigning - M. White 9 May, 2019
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
											}
										}
										break;
										//Evaluate why this is here - M. White 13 Sep, 2019
									case edMC_walls001:
										switch(_MAPVIEW)
										{
										case SQR_Map:	_TactMap[XMod][YMod].SetWall(_EditingTarget1);	break;
									//	case HEX_Map01:
									//		if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetWall(_EditingTarget1);
									//		else										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
									//		break;
										};
										break;
									}
									if(_EditingTarget1 == 11) _EditingTarget1 = -1;//Reset to the test value - M. White 5 June, 2019
									break;
								}//End: switch()
								GetTacticalMapData(_MAPVIEW);//Reload map data so it can be rendered - M. White 19 June
								_paintSomething = true;
								_paintWholeScrn	= true;
							}//End: else
						}//End: if(_edIntLinking == false)
						//Interact with the active buttons available to User - M. White 18 June, 2019
						if		(_tmpSingleBtn[edSave].DidItHit(X, Y) == true)
						{
							if(_Editor_W_S_Name.length() > 0)
							{
								strMsg = "Clicking Save will over write\nany file with the same name.\n\nProceed?";
								if(MessageBox(NULL, strMsg.c_str(), "Caution!", MB_YESNO) == IDYES)
								{
									//Assign the three-letter designator...
									strMsg	= "data\\w\\";
									strMsg += _Editor_W_S_Name;
									strMsg += ".dat";
									//Replace spaces with underscores
									for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
									_FileNameMap = strMsg;
									_myHandleOne = CreateThread(0, 0, SaveWorldScene, 0, 0, &_myThreadIDOne);
									_tmpSingleBtn[edSave].SetIsActive(false);
								}
							}
							else
							{
								strMsg  = "There is no file name locked in.\n\n";
								strMsg += "You must load a file first, or start\n";
								strMsg += "editing a map.";
								MessageBox(NULL, strMsg.c_str(), "File Name", MB_OK);
							}
							//Reset Data as a cue to User - M. White 4 May, 2019
							_tmpSingleBtn[edDelete].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_StillEditing	= false;
							_paintSomething	= true;
							_paintMainMap	= true;
							X = 0; Y = 0;
						}
						else if	(_tmpSingleBtn[edQuit].DidItHit(X, Y) == true)
						{
							if(_StillEditing == true)
							{
								//Asking in the negative - M. White 5 June, 2019
								if(MessageBox(NULL, "Do you want to proceed without saving?", "Save your work?", MB_YESNO)
									== IDYES) _StillEditing = false;
								else return;
							}
							//Default setting is edStart, for when User comes 
							//back to do more editing - M. White 18 June, 2019
							_GAMEsubPHASE = edStart;
							_Buttons[edMapSqr1].SetIsActive(true);
							_Buttons[edMapDiam].SetIsActive(true);
							_Buttons[edMapRhom].SetIsActive(true);
							_Buttons[edMapHex1].SetIsActive(true);
							_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
							_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
							_tmpSingleBtn[edOpen].SetIsActive(true);
							_tmpSingleBtn[edSave].SetIsActive(true);
							_tmpSingleBtn[edDelete].SetIsActive(true);
							_tmpSingleBtn[edLinkMaps].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetDisplayText("Quit");
							//Clean up buttons...
							delete [] _tmpSubBtn;
							_tmpSubBtn = NULL;
							_EditorStr3letters	= "";
							_Editor_W_S_Name	= "";
							TabFlipMapType(_MAPVIEW);
							_edEditingWorld		= false;
							_edEditingScene		= false;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
					}//End: else
				}//End: else if (_edEditingWorld == true)
				break;
			case edNewSceneMenu:
				//There are two subphases to edNewSceneMenu
				if		(_edNewSceneTrue	== true)
				{
					if(_tmpSubBtn != NULL)
					{
						for(i = 0; i < _NumTmpSubBtn; i++)
							if(_tmpSubBtn[i].DidItHit(X, Y) == true)
							{
								switch(i)
								{
								case edNewSubCancel: 
									{
									//Default setting is edStart, for when User comes 
									//back to do more editing - M. White 18 June, 2019
									_GAMEsubPHASE = edStart;
									delete [] _tmpSubBtn; _tmpSubBtn = NULL;
									//Actuvate the Map-Type buttons at the top of the Map - M. White 4 May, 2019
									_Buttons[edMapSqr1].SetIsActive(true);
									_Buttons[edMapDiam].SetIsActive(true);
									_Buttons[edMapRhom].SetIsActive(true);
									_Buttons[edMapHex1].SetIsActive(true);
									_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
									_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
									_tmpSingleBtn[edOpen].SetIsActive(true);
									_tmpSingleBtn[edSave].SetIsActive(true);
									_tmpSingleBtn[edDelete].SetIsActive(true);
									_tmpSingleBtn[edQuit].SetIsActive(true);
									_tmpSingleBtn[edQuit].SetDisplayText("Quit");
									_tmpSingleBtn[edLinkMaps].SetIsActive(true);
									_edNewSceneTrue		= false;
									_StillEditing		= false;
									_EditorStr3letters	= "";
									_Editor_W_S_Name	= "";
									_EditingTarget1		= -1;
									_MapLink->ResetLinks();
									//Reset the map to make it apparent that they are no longer editing - M. White 17 May, 2019
									TabFlipMapType(int(rand() % (TOTAL_MAP_TYPES - 1)));
									//Completes the loop for early break out, while continuing 
									//the rest of program flow in the function - M. White 19 June, 2019
									i = _NumTmpSubBtn; 
									}
									break;
								case edNewSubContinue:
									{
									//Check to make sure that the User entered the required info - M. White 2 May, 2019
									if(_EditorStr3letters.length()	!= 3)
									{
										MessageBox(NULL, "You must enter a\n3-letter designator", "Required", MB_OK);
										return;
									}
									if(_Editor_W_S_Name.length()	<= 0)
									{
										MessageBox(NULL, "You must enter a\nScene Map Name", "Required", MB_OK);
										return;
									}
									if(LoadData(mapSCENE) == true)
									{
										//Search the list to see if there is already a map of the 
										//same name - M. White 18 May, 2019
										Found = false;
										//Open and add to the list of Worlds...
										//Call Function to Open List of "World" Maps - M. White 14 May, 2019
										for(i = 0; i < int(_ListWorldScenes.length()); i++)
										{
											_ListWorldScenes.getNodes(i, strMsg);
											if		(strMsg == "No Maps Created")
											{
												//"No Maps Created" is a default file allocation. If it is 
												//present, then the number of Maps is default '1'. Pop it 
												//from the list and insert the new map name as there's 
												//nothing to test against - M. White 18 May, 2019
												_ListWorldScenes.popFront();

												//New name added later in (Found == false)
											}
											else if	(strMsg == _Editor_W_S_Name)
											{
												//There was a matching name, inform the User that the they
												//have already created a map by that name - M. White 18 May, 2019
												MessageBox(NULL, "You assigned that name already\n\nPick another name", "Required", MB_OK);
												Found = true;
												_EditorStr3letters	= "";
												_Editor_W_S_Name	= "";
												break;//...out of the for-loop
											}
										}
										if(Found == false)
										{
											_ListWorldScenes.insertBack(_Editor_W_S_Name);
											_NumWSs = _ListWorldScenes.length();
											//Save back the edited list - M. White 18 May, 2019
											DataOutput.open("data\\s\\sd.dat", ios_base::trunc);
											if(DataOutput.is_open())
											{
												DataOutput << _NumWSs << "\n";
												for(i = 0; i < _NumWSs; i++)
												{
													_ListWorldScenes.getNodes(i, strMsg);
													for(y = 0; y < int(strMsg.length()); y++) if(strMsg[y] == ' ') strMsg[y] = '_';
													DataOutput << strMsg;
													if(i < _NumWSs - 1) DataOutput << "\n"; 
												}
											}
											else MessageBox(NULL, "Did not open Scene List", "File Error", MB_OK);
											DataOutput.close();
											//Force creating the new map file in case the User attempts to "Open Map" 
											//without saving it first themselves - M. White 22 June, 2019
											if(_Editor_W_S_Name.length() > 0)
											{
												//Assign the three-letter designator...
												strMsg	= "data\\s\\";
												strMsg += _Editor_W_S_Name;
												strMsg += ".dat";
												//Replace spaces with underscores
												for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
												_FileNameMap = strMsg;
												_myHandleOne = CreateThread(0, 0, SaveWorldScene, 0, 0, &_myThreadIDOne);
											}
											_edOpenMCNum	= 1;
											_edNewSceneTrue	= false;
											_edEditingScene	= true;
											_tmpSingleBtn[edSave].SetIsActive(true);
											_tmpSingleBtn[edQuit].SetIsActive(true);
											_tmpSingleBtn[edQuit].SetDisplayText("Quit Editing");
											_MAPVIEW		= SQR_Map;
											_StillEditing	= false;
										}
									}
									else MessageBox(NULL, "Data files need replacing\n\nContact the developer", "Error: LMouse New World", MB_OK);
									}
									break;
								};//End: Switch()
								_paintSomething = true;
								_paintWholeScrn	= true;
							}//End: if(_tmpSubBtn[i].DidItHit(X, Y) == true)
					}//End: if(_tmpSubBtn != NULL)
				}//End: if(_edNewSceneTrue == true)
				else if	(_edEditingScene	== true)
				{
					if(_edOpenMapCategory == true)
					{
						if(X >= _SideBarMenu.left && X <= _SideBarMenu.right && Y >= _SideBarMenu.top  && Y <= _SideBarMenu.bottom)
						{
							_edOpenMCNum = 1;//Reset number of lines that the menu is showing - M. White 10 May, 2019	
							SetRect(&_SideBarMenu,//Set _SideBarMenu back down to a single-line - M. White 9 May, 2019
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 1));
							//Assign the value that the User picked - M. White 10 May, 2019
							_SideBarMenuIndex = 
								int((Y - (_SideBarMenu.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
							if(_SideBarMenuIndex == edMC_Monsters)
							{
								_ResetMobs = new myButton;
								switch(_MonitorCat)
								{
								case 2:
									_MenuScrUpDwn[0].SetProperties(
										_SideBarBackGrnd.left  +  5, _SideBarBackGrnd.bottom - 21, 
										14, 78, 0, 78, 14, 78, 0, 0, true);
									_MenuScrUpDwn[1].SetProperties(
										_SideBarBackGrnd.right - 20, _SideBarBackGrnd.bottom - 21, 
										14, 78, 0, 103, 14, 103, 0, 0, true);
									_ResetMobs->SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.10),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.65),
										178, 39, 0, 0, 178, 0, 356, 0, true, "", "Reset Mobs");
									break;
								case 1:
									_MenuScrUpDwn[0].SetProperties(
										_SideBarBackGrnd.left  +  5, _SideBarBackGrnd.bottom - 21, 
										15, 16, 0, 52, 15, 52, 0, 0, true);
									_MenuScrUpDwn[1].SetProperties(
										_SideBarBackGrnd.right - 20, _SideBarBackGrnd.bottom - 21, 
										15, 16, 0, 68, 15, 68, 0, 0, true);
									_ResetMobs->SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.10),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.65),
										119, 26, 0, 0, 119, 0, 238, 0, true, "", "Reset Mobs");
									break;
								case 0:
									_MenuScrUpDwn[0].SetProperties(
										_SideBarBackGrnd.left  +  5, _SideBarBackGrnd.bottom - 21, 
										 8,  8, 0, 24,  8, 24, 0, 0, true);
									_MenuScrUpDwn[1].SetProperties(
										_SideBarBackGrnd.right - 20, _SideBarBackGrnd.bottom - 21, 
										 8,  8, 0, 32,  8, 32, 0, 0, true);
									_ResetMobs->SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.10),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.65),
										60, 12, 0, 0, 60, 0, 120, 0, true, "", "Reset Mobs");
									break;
								};
							}
							else
							{
								switch(_MonitorCat)
								{
								case 2:
									{
									//-8 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 8, _SideBarBackGrnd.top    - 8, 15, 15, 140, 78, 140, 93);
									_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 8, _SideBarBackGrnd.bottom - 8, 15, 15, 140, 78, 140, 93);
									}
									break;
								case 1:
									{
									//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top    - 6, 12, 12, 108, 52, 108, 64);
									_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
									}
									break;
								case 0:
									{
									//-4 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
									_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 4, _SideBarBackGrnd.top    - 4,  7,  7,  56, 24,  56, 31);\
									_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 4, _SideBarBackGrnd.bottom - 4,  7,  7,  56, 24,  56, 31);
									}
									break;
								};
							}
							SetRect(&_RectHorSlidePer, 
								_MenuScrUpDwn[0].GetX() + _MenuScrUpDwn[0].GetWidth() + int(_MenuScrUpDwn[0].GetWidth() * 0.50),
								_SideBarBackGrnd.bottom - 17,
								_MenuScrUpDwn[1].GetX() - int(_MenuScrUpDwn[1].GetWidth() * 0.50),
								_SideBarBackGrnd.bottom - 9);
							//Set icon to match - M. White 18 July, 2019
							_intHorSlideLocation = _RectHorSlidePer.left;
							if(_SideBarMenuIndex == edMC_Monsters)	_EditingTarget1 = 0;
							else									_EditingTarget1 = -1;
							_EditingTarget2 = -1;
							_ScrollIndex	= 0;
							_edOpenMapCategory = false;
							_Dispersion		= false;
							_paintSomething = true;
							_paintWholeScrn	= true;
						}//End: if()
					}//End: if(_edOpenMapCategory == true)
					else
					{
						//Expands the textbox to show a list - M. White 04 May, 2019
						if		(X >= _SideBarMenu.left	&& X <= _SideBarMenu.right && Y >= _SideBarMenu.top && Y <= _SideBarMenu.bottom)
						{
							//+1 to account for the category already chosen - M. White 04 May, 2019
							//...and modifying in case they're editing a World or not...
							_edOpenMCNum = edMC_MAXCats + 1 - ((_edEditingWorld == true) ? 1 : 0);
							SetRect(&_SideBarMenu,
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
								_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
								_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * _edOpenMCNum));
							_edOpenMapCategory	= true;
							_paintSomething		= true;
							_PaintSideBar		= true;
						}
						//Clicking in the sidebar selection area - M. White 18 June, 2019
						else if	(X >= _SideBarBackGrnd.left && X <= _SideBarBackGrnd.right && Y >= _SideBarBackGrnd.top && Y <= _SideBarBackGrnd.bottom)
						{
							if(_SideBarMenuIndex == edMC_Monsters)
							{
								//Used for Mob aggressive button...
								switch(_MonitorCat)
								{
								case 2:
									SetRect(&rctTwo,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 3,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65) + 22,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 25);
									break;
								case 1:
									SetRect(&rctTwo,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 3,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65) + 15,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 18);
									break;
								case 0:
									SetRect(&rctTwo,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65),
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 3,
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.65) + 8,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 11);
									break;
								};
								if		(_MenuScrUpDwn[0].DidItHit(X, Y) == true)
								{
									if(_EditingTarget1 > 0)				_EditingTarget1--;
									else								_EditingTarget1 = (MAXMONS - 1);
									Percent = (_EditingTarget1 / double(MAXMONS - 1));
									_intHorSlideLocation = _RectHorSlidePer.left + 
										int((_RectHorSlidePer.right - _RectHorSlidePer.left) * double(Percent));
								}
								else if	(_MenuScrUpDwn[1].DidItHit(X, Y) == true)
								{
									if(_EditingTarget1 < (MAXMONS - 1)) _EditingTarget1++;
									else								_EditingTarget1 = 0;
									Percent = (_EditingTarget1 / double(MAXMONS - 1));
									_intHorSlideLocation = _RectHorSlidePer.left + 
										int((_RectHorSlidePer.right - _RectHorSlidePer.left) * double(Percent));
								}
								else if (_ResetMobs->DidItHit(X, Y) == true)
								{
									if(_intNumMobsAssigned > 0)
									{
										if(MessageBox(NULL, "Remove All Monsters?", "Caution", MB_YESNO) == IDYES)
										{
											if(_ListMobAssigns.isEmpty() == false)
											{
												tmpAvatar.SetRace(-1);
												tmpAvatar.SetDungeonX(-1);
												tmpAvatar.SetDungeonY(-1);
												//reset the data of each node
												while(_ListMobAssigns.isEmpty() == false)	_ListMobAssigns.popFront();
												for(int y = 0; y < _TactMapH; y++)
													for(int x = 0; x < _TactMapW; x++)
														_TactMap[x][y].AvatarIndex = -1;
												for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
													for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
														_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;
												_intNumMobsAssigned		= 0;
												_intTotalXP_Assigned	= 0;
											}
										}
									}
								}
								else if	(X >= rctTwo.left && X <= rctTwo.right && Y >= rctTwo.top && Y <= rctTwo.bottom)
								{
									if(_bMonstersMad == true)	_bMonstersMad = false;
									else						_bMonstersMad = true;
								}
								else if (X >= _RectHorSlidePer.left && X <= _RectHorSlidePer.right &&
										 Y >= _RectHorSlidePer.top  && Y <= _RectHorSlidePer.bottom)
								{
									Percent = 
										((X - _RectHorSlidePer.left) / double(_RectHorSlidePer.right - _RectHorSlidePer.left));
									_intHorSlideLocation = _RectHorSlidePer.left + 
										int((_RectHorSlidePer.right - _RectHorSlidePer.left) * Percent);
									_EditingTarget1 = int((MAXMONS - 1) * double(Percent));
								}
							}
							else
							{
								//Clicking the mini-window at the bottom of the Side Bar background will 
								//clear out the seletected terrain/coastal types - M. White 05 May, 2019
								if		(X >= _MiniWindow.left && X <= _MiniWindow.right && Y >= _MiniWindow.top && Y <= _MiniWindow.bottom)
								{
									_EditingTarget1 = -1; _EditingTarget2 = -1;
								}
								//If the didn't hit the mini-window in the same region, then we will go
								//to the following action to manipulate the "dispersion" option - M. White 8 May, 2019
								else if (X >= _SideBarBackGrnd.left		&& X <= _SideBarBackGrnd.right && 
										 Y >= _MiniWindow.top			&& Y <= _MiniWindow.bottom)
								{
									if(_Dispersion == false)	_Dispersion = true;
									else						_Dispersion = false;
								}
								//Selecting an icon from the available view - M. White 9 May, 2019
								else if	(Y >= _SideBarBackGrnd.top	&& Y <= _SideBarBackGrnd.bottom)
								{
									switch(_SideBarMenuIndex)
									{
									case edMC_Cities:
										if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
											_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
										break;
									case edMC_Coastal:
										if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
										{
											i = int((X - _SideBarBackGrnd.left) / int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.33));
											switch(i)
											{
											case 0:		_EditingTarget2 = 0;		break;
											case 1:		_EditingTarget2 = 1;		break;
											case 2:		_EditingTarget2 = 2;		break;
											}
											_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) + _ScrollIndex;
										}
										break;
									case edMC_Forests:
										if(VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) < 9)
											_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
										break;
									case edMC_RiverRoads:
										if(VRD(_SideBarBackGrnd.top + 5,  Y, _PlayWin[_MAPVIEW].GetTileH()) < 10)
										{
											_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH()) + _ScrollIndex;
											i = int((X - _SideBarBackGrnd.left) / int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50));
											//TODO - Make sure this gets converted over to an integer that gets assigned
											//at start up. More of this down in GamePaintEditor() - M. White 24 May, 2019
											if(i > 0) _EditingTarget1 += _numRiverRoadsHori;
											else
											{
												if(_EditingTarget1 > _numRiverRoadsHori) _EditingTarget1 = _numRiverRoadsHori;
											}
										}
										break;
									case edMC_Terrain:
										_EditingTarget1 = VRD(_SideBarBackGrnd.top + 5, Y, _PlayWin[_MAPVIEW].GetTileH());
										//Setting this here as it will be used as a text when assigning in
										//_PlayWin targetting - M. White 04 May, 2019
										_EditingTarget2 = -1;
										break;
									case edMC_walls001:
										_EditingTarget1 = 
											VRD(_SideBarBackGrnd.top + 5, Y, int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/)) + _ScrollIndex;
									//	if(_EditingTarget1 >= MAX_WallTypes) _EditingTarget1 = -1;

										//0 == Solid Wall
										//1 == Verticle Door (Closed)
										//2 == Horizontal Door (Closed)
										//3 == Verticle Door (Open)
										//4 == Horizontal Door (Open)
										//5 == Secret Door
										//6 == Secret Door Found
										if(_EditingTarget1 > 2)
										{
											_EditingTarget1 = 5;
										}
										break;
									case edMC_Monsters:
										break;
									}
								}
							}
							_paintSomething = true;
							_PaintSideBar	= true;
						}
						//Clicking in the Play Map - M. White 05 May, 2019
						else if	(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
								 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
						{
							//The Play Window has multiple windows that might be open...we have to test 
							//to see which one is open and act upon it only - M. White 18 June, 2019

							//User Input has highest functionality
							if		(_MapLink->ShowUserInput	== true)
							{
							}//End: if(_ShowUserInput == true)
							else if	(_MapLink->ShowIntLink		== true)
							{
							}//End: if(_edIntLinking == true)
							else if	(_SideBarMenuIndex			== edMC_Monsters)
							{
								_StillEditing = true;
								_tmpSingleBtn[edSave].SetIsActive(true);
								TestMapCursor();
								XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
								YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
								//Verify is the User is clicking on a previous monster, which will
								//remove it from the list - M. White 27 July, 2019
								if(_intNumMobsAssigned > 0)
								{
									for(i = 0; i < int(_ListMobAssigns.length()); i++)
									{
										_ListMobAssigns.getNodes(i, tmpAvatar);
										if(tmpAvatar.GetDungeonX() == XMod && tmpAvatar.GetDungeonY() == YMod)
										{
											tmpAvatar.Reset();
											tmpAvatar.SetRace(-1);
											tmpAvatar.SetDungeonX(-1);
											tmpAvatar.SetDungeonY(-1);
											_TactMap[XMod][YMod].AvatarIndex = -1;
											_ListMobAssigns.changeData(i, tmpAvatar);
											_ListMobAssigns.deleteNodeByRef(i);

											for(int y = 0; y < _TactMapH; y++)
												for(int x = 0; x < _TactMapW; x++)
													_TactMap[x][y].AvatarIndex = -1;

											for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
												for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
													_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;

											//Recount the mobs...
											_intNumMobsAssigned		= 0;
											_intTotalXP_Assigned	= 0;

											for(int z = 0; z < int(_ListMobAssigns.length()); z++)
											{
												_ListMobAssigns.getNodes(z, tmpAvatar);
												//...and assign them to the map
												_TactMap[tmpAvatar.GetDungeonX()][tmpAvatar.GetDungeonY()].AvatarIndex = z;
												_intNumMobsAssigned++;
												_intTotalXP_Assigned += _MonData[tmpAvatar.GetRace()].data[MonXP];
											}
											GetTacticalMapData(_MAPVIEW);
											_paintSomething = true;
											_PaintSideBar	= true;
											return;
										}
									}
								}
								//The above for-loop didn't find the mob, so we will insert the mob...
								tmpAvatar.Reset();
								tmpAvatar.SetFName(_MonData[_EditingTarget1].MonName);
								tmpAvatar.SetRace(_EditingTarget1);
								tmpAvatar.SetRaceIsMonster(true);
								tmpAvatar.SetDungeonX(XMod);
								tmpAvatar.SetDungeonY(YMod);
								tmpAvatar.SetRaceIsMonster(true);
								_ListMobAssigns.insertBack(tmpAvatar);
								_intNumMobsAssigned++;
								_intTotalXP_Assigned += _MonData[tmpAvatar.GetRace()].data[MonXP];
								//Clearing monster assignments and then reasserting their data - M. White 27 July, 2019
								for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
									for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
										_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;
								for(i = 0; i < _intNumMobsAssigned; i++)
								{
									_ListMobAssigns.getNodes(i, tmpAvatar);
									_TactMap[tmpAvatar.GetDungeonX()][tmpAvatar.GetDungeonY()].AvatarIndex = i;
								}
								GetTacticalMapData(_MAPVIEW);
								_paintSomething = true;
								_PaintSideBar	= true;
							}
							//Else represents that no other windows are open and this is "normal"
							//activity within the map - M. White 18 June, 2019
							else
							{
								//Set this so that any changes to the map the User makes flags that
								//something has changed and protects against loss of work - M. White 13 May, 2019
								_StillEditing = true;
								_tmpSingleBtn[edSave].SetIsActive(true);
								XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
								YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
								switch(_SideBarMenuIndex)
								{
								case edMC_Cities:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetCity(_EditingTarget1);	break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetCity(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetCity(_EditingTarget1);
										break;
									};
									break;
								case edMC_Coastal:
									switch(_MAPVIEW)
									{
									case SQR_Map:
										_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
										break;
									case HEX_Map01:
										//Targetting has to be reversed calculated from cursor so that data
										//will point to the correct array index - M. White 9 May, 2019
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))
										{
											_TactMap[XMod + 1][YMod].SetCoastX(_EditingTarget1);
											_TactMap[XMod + 1][YMod].SetCoastY(_EditingTarget2);
										}
										else
										{
											_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
											_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
										}
										break;
									}
									break;
								case edMC_Forests:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetForest(_EditingTarget1);		break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetForest(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetForest(_EditingTarget1);
										break;
									};
									break;
								case edMC_RiverRoads:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);		break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetRoadRiver(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);
										break;
									};
									break;
								case edMC_Terrain://Terrain
									//Temporaily setting value to match desired graphic in _bmp - M. White 25 May, 2019
									if(_EditingTarget1 == -1) _EditingTarget1 = 11;
									switch(_MAPVIEW)
									{
									case SQR_Map:
										if(_Dispersion == true)
										{
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);	//Center
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Right
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);		//Right
											if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Right
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
												_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Left
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod - 1][YMod + 0].SetBG(_EditingTarget1);		//Left
											if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Left
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
												_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Top
										}
										else
										{
											if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
												_TactMap[XMod][YMod].SetBG(_EditingTarget1);
										}
										break;
									case HEX_Map01:
										if(_ptCursor.y & 1)
										{
											if(_Dispersion == true)
											{
												if(_TileWalkerY & 1)
												{
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);	//Center Tile
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 2].SetBG(_EditingTarget1);	//Down
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 2].SetBG(_EditingTarget1);	//Up
												}
												else
												{
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);		//Down
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
												}
											}
											else
											{
												if(_TileWalkerY & 1)
												{
													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);
												}
												else
												{
													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
												}
											}
										}
										else
										{
											if(_Dispersion == true)
											{
												if(_TileWalkerY & 1)
												{
													if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
														_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...

													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right

													if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-left

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-left

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) < _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
												}
												else
												{
													if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
														_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-right

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-right

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down

													if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
														_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-left

													if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
														_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Up-left

													if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
														_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);	//Up
												}
											}
											else
											{
												//Test limits before assigning - M. White 9 May, 2019
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
											}
										}
										break;
									}
									if(_EditingTarget1 == 11) _EditingTarget1 = -1;//Reset to the test value - M. White 5 June, 2019
									break;
								case edMC_walls001:
									switch(_MAPVIEW)
									{
									case SQR_Map:
										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
										break;
								//	case HEX_Map01:
								//		if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetWall(_EditingTarget1);
								//		else										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
								//		break;
									};
									break;
								};//End: switch()
								GetTacticalMapData(_MAPVIEW);//Reload map data so it can be rendered - M. White 19 June
								_paintSomething = true;
								_paintWholeScrn	= true;
							}//End: else
						}//End: if(_edIntLinking == false)
						//Interact with the active buttons available to User - M. White 18 June, 2019
						if		(_tmpSingleBtn[edSave].DidItHit(X, Y) == true)
						{
							if(_Editor_W_S_Name.length() > 0)
							{
								strMsg = "Clicking Save will over write\nany file with the same name.\n\nProceed?";
								if(MessageBox(NULL, strMsg.c_str(), "Caution!", MB_YESNO) == IDYES)
								{
									//Set Visibility before saving...
									for(y = 0; y < _TactMapH; y++)
										for(x = 0; x < _TactMapW; x++)
										{
											if(_bHiddenMap == true)
											{
												_TactMap[x][y].SetVisited(false);
												_TactMapBack[x][y].SetVisited(false); 
											}
											else
											{
												_TactMap[x][y].SetVisited(true);
												_TactMapBack[x][y].SetVisited(true);
											}
										}
									//Assign the three-letter designator...
									_FileNameMap	= "data\\s\\";
									_FileNameMobs	= "data\\s\\";
									strMsg = _Editor_W_S_Name;
									//Replace spaces with underscores
									for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
									_FileNameMap	+= strMsg;
									_FileNameMobs	+= strMsg;
									_FileNameMap	+= ".dat";
									_FileNameMobs	+= "_mob.dat";
									_myHandleOne = CreateThread(0, 0, SaveWorldScene, 0, 0, &_myThreadIDOne);
									//Saving a mob file even without mobs in list...
									//Force creates a file so it will be found later - M. White 17 August, 2019
									_myHandleTwo = CreateThread(0, 0, SaveMobsEditor, 0, 0, &_myThreadIDTwo);
									_tmpSingleBtn[edSave].SetIsActive(false);
								}
							}
							else
							{
								strMsg  = "There is no file name locked in.\n\n";
								strMsg += "You must load a file first, or start\n";
								strMsg += "editing a map.";
								MessageBox(NULL, strMsg.c_str(), "File Name", MB_OK);
							}
							//Reset Data as a cue to User - M. White 4 May, 2019
							_tmpSingleBtn[edDelete].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_StillEditing	= false;
							_paintSomething	= true;
							_paintMainMap	= true;
							X = 0; Y = 0;
						}
						else if	(_tmpSingleBtn[edQuit].DidItHit(X, Y) == true)
						{
							if(_StillEditing == true)
							{
								//Asking in the negative - M. White 5 June, 2019
								if(MessageBox(NULL, "Do you want to proceed without saving?", "Save your work?", MB_YESNO)
									== IDYES) _StillEditing = false;
								else return;
							}
							//Clear out the mob list...
							if(_ListMobAssigns.length() > 0)
								while(_ListMobAssigns.isEmpty() == false) _ListMobAssigns.popFront();
							//Default setting is edStart, for when User comes 
							//back to do more editing - M. White 18 June, 2019
							_GAMEsubPHASE = edStart;
							_StillEditing		= false;
							switch(_MonitorCat)
							{
							case 2:
								_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top    - 6, 15, 15, 140, 78, 140, 93);
								_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 15, 15, 140, 78, 140, 93);
								break;
							case 1:
								_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top    - 6, 12, 12, 108, 52, 108, 64);
								_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
								break;
							case 0:
								_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top    - 6, 12, 12, 108, 52, 108, 64);
								_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
								break;
							};
							_Buttons[edMapSqr1].SetIsActive(true);
							_Buttons[edMapDiam].SetIsActive(true);
							_Buttons[edMapRhom].SetIsActive(true);
							_Buttons[edMapHex1].SetIsActive(true);
							_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
							_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
							_tmpSingleBtn[edOpen].SetIsActive(true);
							_tmpSingleBtn[edSave].SetIsActive(true);
							_tmpSingleBtn[edDelete].SetIsActive(true);
							_tmpSingleBtn[edLinkMaps].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetDisplayText("Quit");
							//Clean up buttons...
							delete [] _tmpSubBtn;
							_tmpSubBtn = NULL;
							_edEditingWorld		= false;
							_edEditingScene		= false;
							_EditorStr3letters	= "";
							_Editor_W_S_Name	= "";
							_SideBarMenuIndex	= 0;
							TabFlipMapType(_MAPVIEW);
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
					}//End: else
				}//End: else if	(_edEditingScene	== true)
				break;
			case edOpen:
				if		(_edOpenTrue		== true)
				{
					//User is thinking about their choice of "World" or "Scene" - M. White 14 May, 2019
					if(_EditorFocusIndex == -1)
					{
						if(_tmpSubBtn != NULL)
						{
							//Remember that _NumButtons might change - M. White 14 May, 2019
							for(i = 0; i < _NumTmpSubBtn; i++)
								if(_tmpSubBtn[i].DidItHit(X, Y) == true)
									switch(i)
									{
									case mapWORLD://Choosing World map - M. White 15 May, 2019
										_NumTmpSubBtn		= 2;
										_EditorFocusIndex	= mapWORLD;//Focus Index of '0' is for "World" maps - M. White 15 May, 2019
										//Recalculating the Dialog to accomodate more - M. White 14 May, 2019
										//_ListWorldScenes
										SetRect(&_RectSubMenu,
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25), 
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.10), 
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25),
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.90));
										SetRect(&_MenuBackGrnd,
											_RectSubMenu.left   + int(_bmpTrimmed->GetWidth() * 0.50),
											_RectSubMenu.top    + int(_bmpTrimmed->GetHeight() * 2),
											_RectSubMenu.right  - int(_bmpTrimmed->GetWidth() * 0.50),
										//We're doing a +1 because we need the bottom of the listed line
										//Also need to offset for the top of the background - M. White 17 May, 2019
										_RectSubMenu.top	+ 
											int(_bmpTrimmed->GetHeight() * 2) + 
											int(_bmpTrimmed->GetHeight() * _NumLinesToList));
										//Windows version of reading a file does not work with the intended file reading
										//capabilities of the program. But, the file detection is valid and can be used 
										//to ensure that the file exists. We will temporarily open and close the file to
										//verify that it's there and if present, open it using iostream methods - M. White 15 May, 2019

										//Call Function to Open List of "World" Maps - M. White 14 May, 2019
										hFile = CreateFile("data\\w\\wd.dat",							// file to open
														GENERIC_READ,									// open for reading
														FILE_SHARE_READ,								// share for reading
														NULL,											// default security
														OPEN_EXISTING,									// existing file only
														FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,	// normal file
														NULL); 
										if(hFile == INVALID_HANDLE_VALUE)
										{
											//The file is missing...
											//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
											strMsg  = "There was a file missing.\n";
											strMsg += "Make sure the following file is located in\n";
											strMsg += "the data folder under the subfolder data/w\n\n";
											strMsg += "wd.dat";
											MessageBox(NULL, strMsg.c_str(), "World Map List Load Error", MB_OK);

											//reset everything to cover our bases - M. White 15 May, 2019
											_edNewWorldTrue		= false;
											_edEditingWorld		= false;
											_edNewSceneTrue		= false;
											_edEditingScene		= false;
											_StillEditing		= false;
											_edOpenTrue			= false;
											_edSaveTrue			= false;
											_edDeleteTrue		= false;
											//Reactivate all buttons - M. White 15 May, 2019
											if(_tmpSingleBtn != NULL)
												for(i = 0; i < MAX_edMenuOptions; i++) _tmpSingleBtn[i].SetIsActive(true);
											//Clean up - M. White 15 May, 2019
											CloseHandle(hFile);
										}
										else
										{
											//Clear out the list in case there was something there already - M. White 16 May, 2019
											if(_ListWorldScenes.length() > 0)
												while(_ListWorldScenes.length() > 0) _ListWorldScenes.popFront();
											_ListIndex = 0;
											//Clean up first to free the resource - M. White 15 May, 2019
											CloseHandle(hFile);
											DataInput.open("data\\w\\wd.dat");
											//Start by getting the integer value of how many entries to expect - M. White 15 May, 2019
											DataInput >> _NumWSs;
											//Case the variable as an integer to make sure that someone hasn't message with
											//the data in the file. Even if the list is 'empty', there should still be a message
											//in the file "No_World_Maps_Created" - M. White 15 May, 2019
											if(_NumWSs >= 1)
											{
												while(!DataInput.eof())
												{
													DataInput >> strMsg;
													for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
													_ListWorldScenes.insertBack(strMsg);
												}
												//If there's more data to be listed than allowed, create buttons to scroll
												//up and down the list - M. White 16 MAy, 2019
												if(_NumWSs > _NumLinesToList)
												{
													//Reset this button array in case missed somewhere else - M. White 26 June, 2019
													if(_WorldSceneUpDwn != NULL)
													{
														delete [] _WorldSceneUpDwn;
														_WorldSceneUpDwn = NULL;
													}
													_WorldSceneUpDwn = new myButton[2];
													switch(_MonitorCat)
													{
													case 2:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															15, 15, 155, 78, 155, 93);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															15, 15, 155, 78, 155, 93);
														break;
													case 1:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															12, 12, 120, 52, 120, 64);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															12, 12, 120, 52, 120, 64);
														break;
													case 0:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															 7,  7, 63, 24, 63, 31);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															 7,  7, 63, 24, 63, 31);
														break;
													};
												}
											}
											else
											{
												//The file is missing...
												//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
												strMsg  = "The wd.dat file is corrupt";
												MessageBox(NULL, strMsg.c_str(), "World Map Read Error", MB_OK);
											}
											DataInput.close();
											//Clear out the old buttons, make new - M. White 15 May, 2019
											delete [] _tmpSubBtn;
											_tmpSubBtn = new myButton[_NumTmpSubBtn];
											_tmpSubBtn[0].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.33) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Open");
											_tmpSubBtn[1].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.66) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
											TabFlipMapType(HEX_Map01);
										}
										break;
									case mapSCENE: //Choose Scene Map - M. White 15 May, 2019
										_NumTmpSubBtn		= 2;
										_EditorFocusIndex	= mapSCENE;//Focus Index of '1' is for "Scene" maps - M. White 15 May, 2019
										//Recalculate the Dialog to accomodate more - M. White 14 May, 2019
										//_ListWorldScenes
										SetRect(&_RectSubMenu,
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25), 
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.10), 
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25),
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.90));
										SetRect(&_MenuBackGrnd,
											_RectSubMenu.left   + int(_bmpTrimmed->GetWidth()  * 0.50),
											_RectSubMenu.top    + int(_bmpTrimmed->GetHeight() * 2),
											_RectSubMenu.right  - int(_bmpTrimmed->GetWidth()  * 0.50),
											_RectSubMenu.top	+ int(_bmpTrimmed->GetHeight() * 2) + int(_bmpTrimmed->GetHeight() * _NumLinesToList));
										//Windows version of reading a file does not work with the intended file reading
										//capabilities of the program. But, the file detection is valid and can be used 
										//to ensure that the file exists. We will temporarily open and close the file to
										//verify that it's there and if present, open it using iostream methods - M. White 15 May, 2019

										//Call Function to Open List of "World" Maps - M. White 14 May, 2019
										hFile = CreateFile("data\\s\\sd.dat",							// file to open
														GENERIC_READ,									// open for reading
														FILE_SHARE_READ,								// share for reading
														NULL,											// default security
														OPEN_EXISTING,									// existing file only
														FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,	// normal file
														NULL); 
										if(hFile == INVALID_HANDLE_VALUE)
										{
											//The file is missing...
											//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
											strMsg  = "There was a file missing.\n";
											strMsg += "Make sure the following file is located in\n";
											strMsg += "the data folder under the subfolder data/s\n\n";
											strMsg += "sd.dat";
											MessageBox(NULL, strMsg.c_str(), "Scene Map List Load Error", MB_OK);

											//reset everything to cover our bases - M. White 15 May, 2019
											_edNewWorldTrue		= false;
											_edEditingWorld		= false;
											_edNewSceneTrue		= false;
											_edEditingScene		= false;
											_StillEditing		= false;
											_edOpenTrue			= false;
											_edSaveTrue			= false;
											_edDeleteTrue		= false;
											//Reactivate all buttons - M. White 15 May, 2019
											if(_tmpSingleBtn != NULL)
												for(i = 0; i < MAX_edMenuOptions; i++) _tmpSingleBtn[i].SetIsActive(true);											
											//Clean up - M. White 15 May, 2019
											CloseHandle(hFile);
										}
										else
										{
											//Clear out the list in case there was something there already - M. White 16 May, 2019
											if(_ListWorldScenes.length() > 0)
												while(_ListWorldScenes.length() > 0) _ListWorldScenes.popFront();
											_ListIndex = 0;
											//Clean up first to free the resource - M. White 15 May, 2019
											CloseHandle(hFile);
											DataInput.open("data\\s\\sd.dat");
											//Start by getting the integer value of how many entries to expect - M. White 15 May, 2019
											DataInput >> _NumWSs;
											//Case the variable as an integer to make sure that someone hasn't message with
											//the data in the file. Even if the list is 'empty', there should still be a message
											//in the file "No_Scene_Maps_Created" - M. White 15 May, 2019
											if(_NumWSs >= 1)
											{
												while(!DataInput.eof())
												{
													DataInput >> strMsg;
													for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
													_ListWorldScenes.insertBack(strMsg);
												}
												//If there's more data to be listed than allowed, create buttons to scroll
												//up and down the list - M. White 16 MAy, 2019
												if(_NumWSs > _NumLinesToList)
												{
													if(_WorldSceneUpDwn != NULL)
													{
														delete [] _WorldSceneUpDwn;
														_WorldSceneUpDwn = NULL;
													}
													_WorldSceneUpDwn = new myButton[2];
													switch(_MonitorCat)
													{
													case 2:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															15, 15, 155, 78, 155, 93);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															15, 15, 155, 78, 155, 93);
														break;
													case 1:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															12, 12, 120, 52, 120, 64);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															12, 12, 120, 52, 120, 64);
														break;
													case 0:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															 7,  7, 63, 24, 63, 31);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															 7,  7, 63, 24, 63, 31);
														break;
													};
												}
											}
											else
											{
												//The file is missing...
												//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
												strMsg  = "The sd.dat file is corrupt";
												MessageBox(NULL, strMsg.c_str(), "World Map Read Error", MB_OK);
											}
											DataInput.close();
											//Clear out the old buttons, make new - M. White 15 May, 2019
											delete [] _tmpSubBtn;
											_tmpSubBtn = new myButton[_NumTmpSubBtn];
											_tmpSubBtn[0].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.33) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Open");
											_tmpSubBtn[1].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.66) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
											TabFlipMapType(SQR_Map);
										}
										break;
									case 2: //Cancel Button - M. White 15 May, 2019
										//Passing control back to subPhase edStart - M. White 19 June, 2019
										_GAMEsubPHASE	= edStart;
										_edOpenTrue		= false;
										_NumTmpSubBtn	= 0;
										delete [] _tmpSubBtn;
										_tmpSubBtn = NULL;
										if(_WorldSceneUpDwn != NULL) delete [] _WorldSceneUpDwn;
										_Buttons[edMapSqr1].SetIsActive(true);
										_Buttons[edMapDiam].SetIsActive(true);
										_Buttons[edMapRhom].SetIsActive(true);
										_Buttons[edMapHex1].SetIsActive(true);
										_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
										_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
										_tmpSingleBtn[edOpen].SetIsActive(true);
										_tmpSingleBtn[edSave].SetIsActive(true);
										_tmpSingleBtn[edDelete].SetIsActive(true);
										_tmpSingleBtn[edQuit].SetIsActive(true);
										_tmpSingleBtn[edLinkMaps].SetIsActive(true);
										break;
									};
						}
					}
					else
					{
						//Targetting an item in the list on the screen
						//Subtracting width of button to make sure something is not selected under 
						//one of the buttons - M. White 17 May, 2019
						if(X >= _MenuBackGrnd.left && X <= _MenuBackGrnd.right - int((_MenuBackGrnd.right - _MenuBackGrnd.left) * 0.03) && 
						   Y >= _MenuBackGrnd.top  && Y <= _MenuBackGrnd.bottom)
						{
							//Recycling _EditingTarget1 to get an index value - M. White 17 May, 2019
							_EditingTarget1 = VRD(_MenuBackGrnd.top, Y) + _ListIndex;
							if(_EditingTarget1 > _NumWSs) _EditingTarget1 = -1;
						}
						//We will be using the _EditingTarget1 variable in tests done by these buttons - M. White 26 June, 2019
						if(_tmpSubBtn		!= NULL)
						{
							//Remember that _NumButtons might change - M. White 14 May, 2019
							for(i = 0; i < _NumTmpSubBtn; i++)
								if(_tmpSubBtn[i].DidItHit(X, Y) == true)
								{
									switch(i)
									{
									case 0://Continue button - M. White 15 May, 2019
										if(_EditingTarget1 > -1 && _EditingTarget1 < _NumWSs)
										{
											//test to make sure there are files created already - M. White 18 May, 2019
											_ListWorldScenes.getNodes(0, strMsg);
											if(strMsg != "No Maps Created")
											{
												//recompile the file name according to User's choice of World or Scene - M. White 19 June, 2019
												//Also, pass control to either editor subPhase and set "editing" - M. White 19 June, 2019
												if(_EditorFocusIndex == mapWORLD)
												{
													_FileNameMap	= "data\\w\\";
													_edEditingWorld = true;
													_edEditingScene = false;
													_GAMEsubPHASE	= edNewWorldMenu;
												}
												else
												{
													_FileNameMap	= "data\\s\\";
													//Only load mobs on Scene Maps - M. White 26 July, 2019
													_FileNameMobs	= _FileNameMap;
													_edEditingScene = true;
													_edEditingWorld = false;
													_GAMEsubPHASE	= edNewSceneMenu;
												}
												_ListWorldScenes.getNodes(_EditingTarget1, strMsg);
												//Assigning visible name...
												_Editor_W_S_Name = strMsg;
												//Creating file name...
												for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
												_EditingTarget1 = -1;
												_EditingTarget2 = -2;
												_FileNameMap	+= strMsg;
												_FileNameMap	+= ".dat";
												//Open the files...
												_myHandleOne = CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);
												if(_EditorFocusIndex == mapSCENE)//Scene Maps only - M. White 26 July, 2019
												{
													//The LoadMobList() function clears out old data before loading - M. White 26 July, 2019
													_FileNameMobs += strMsg; _FileNameMobs += "_mob.dat";
													_myHandleTwo = CreateThread(0, 0, LoadMobsEditor, 0, 0, &_myThreadIDTwo);
												}
												_Buttons[edMapSqr1].SetIsActive(false);
												_Buttons[edMapDiam].SetIsActive(false);
												_Buttons[edMapRhom].SetIsActive(false);
												_Buttons[edMapHex1].SetIsActive(false);
												_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
												_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
												_tmpSingleBtn[edOpen].SetIsActive(true);
												_tmpSingleBtn[edSave].SetIsActive(true);
												_tmpSingleBtn[edDelete].SetIsActive(true);
												_tmpSingleBtn[edQuit].SetIsActive(true);
												_tmpSingleBtn[edQuit].SetDisplayText("Quit Editing");
												//Tell the paint-engine to react - M. White 10 May, 2019
												_paintSomething = true;
												_paintMainMap	= true;
												_edNewWorldTrue = true;
												_edOpenTrue		= false;
												_edNewWorldTrue	= false;
												_edNewSceneTrue	= false;
												//Set to default Hex-Map - M. White 10 May, 2019
												switch(_EditorFocusIndex)
												{
												case 1:		GetTacticalMapData(SQR_Map);		break;
												default:	GetTacticalMapData(HEX_Map01);		break;
												}
												_EditorFocusIndex	= 0;	//Set focus to 3-letter abbreviation - M. White 10 May, 2019
											}
											else
											{
												strMsg = "No Maps have been created.";
												MessageBox(NULL, strMsg.c_str(), "File Error", MB_OK);
											}
										}
										else
										{
											if(_EditingTarget1 == -1)	strMsg = "You must select a name to open.";
											else						strMsg = "File Target out of range.";
											MessageBox(NULL, strMsg.c_str(), "Required", MB_OK);
										}
										break;
									case 1://Cancel button - M. White 15 May, 2019
										//Pass Control back to subPhase edStart
										_GAMEsubPHASE		= edStart;
										_EditorFocusIndex	= -1;
										_EditingTarget1		= -1;
										_edOpenTrue			= false;
										_edEditingWorld		= false;
										_edEditingScene		= false;
										delete [] _tmpSubBtn;
										_tmpSubBtn			= NULL;
										_NumTmpSubBtn		= 0;
										if(_WorldSceneUpDwn != NULL) { delete [] _WorldSceneUpDwn; _WorldSceneUpDwn = NULL; }
										_tmpSingleBtn[edQuit].SetDisplayText("Quit");
										_Buttons[edMapSqr1].SetIsActive(true);
										_Buttons[edMapDiam].SetIsActive(true);
										_Buttons[edMapRhom].SetIsActive(true);
										_Buttons[edMapHex1].SetIsActive(true);
										_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
										_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
										_tmpSingleBtn[edOpen].SetIsActive(true);
										_tmpSingleBtn[edSave].SetIsActive(true);
										_tmpSingleBtn[edDelete].SetIsActive(true);
										_tmpSingleBtn[edQuit].SetIsActive(true);
										_tmpSingleBtn[edLinkMaps].SetIsActive(true);
										break;
									};
									break;//Break out of the loop - M. White 19 June, 2019
								}
						}
						if(_WorldSceneUpDwn != NULL)
						{
							for(i = 0; i < 2; i++)
								if(_WorldSceneUpDwn[i].DidItHit(X, Y) == true)
								{
									switch(i)
									{
									case 0:		if(_ListIndex > 0) _ListIndex--;	break;
									case 1:		_ListIndex++;						break;
									};
									break;//Break out of the loop - M. White 19 June, 2019
								}
						}
					}
					_paintSomething = true;
					_paintMainMap	= true;
					_paintButtons	= true;
				}
				break;
			case edLinkMaps:
				//_edLinkingMaps is linking the maps along the edge of the map of interest - M. White 19 June, 2019
				if		(_edLinkingMaps		== true)
				{
					//Copy the rect to be used in various options below - M. White 11 June, 2019
					CopyRect(&rct, &_MapLink->GetRectPickName());
					if(_MapLink->WhichMapBeingPicked > -1)
					{
						for(i = 0; i < _MapLink->NumButtons; i++)
							if(_MapLink->buttons[i].DidItHit(X, Y) == true)
							{
								switch(i)
								{
								case lcWorld://World Map - M. White 9 June, 2019
									{
										//Reset in case the User switches - M. White 9 June, 2019
										_EditingTarget1		= -1;
										_EditorFocusIndex	= mapWORLD;

										switch(_MapLink->WhichMapBeingPicked)
										{
										case lmFocus:		_MapLink->SetTypeWorld(true);		break;
										case lmWest:		_MapLink->SetTypeWest(true);		break;
										case lmNorth:		_MapLink->SetTypeNorth(true);		break;
										case lmEast:		_MapLink->SetTypeEast(true);		break;
										case lmSouth:		_MapLink->SetTypeSouth(true);		break;
										};
										if(LoadData(_EditorFocusIndex) == true)
										{
											_ListIndex = 0;
											//These values have to switch with the change of type of map - M. White 25 June, 2019
											_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
											_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
											_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
											_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
										}
									}
									break;
								case lcScene://Scene Map - M. White 9 June, 2019
									{
										//Reset in case the User switches - M. White 9 June, 2019
										_EditingTarget1		= -1;
										_EditorFocusIndex	= mapSCENE;
										switch(_MapLink->WhichMapBeingPicked)
										{
										case lmFocus:		_MapLink->SetTypeWorld(false);		break;
										case lmWest:		_MapLink->SetTypeWest(false);		break;
										case lmNorth:		_MapLink->SetTypeNorth(false);		break;
										case lmEast:		_MapLink->SetTypeEast(false);		break;
										case lmSouth:		_MapLink->SetTypeSouth(false);		break;
										};
										if(LoadData(_EditorFocusIndex) == true)
										{
											_ListIndex = 0;
											//These values have to switch with the change of type of map - M. White 25 June, 2019
											_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
											_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
											_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
											_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
										}
									}
									break;
								case lcContinue://Localized Continue button - M. White 8 June, 2019
									if(_EditingTarget1 >= 0)
									{
										disposable = "";
										_ListWorldScenes.getNodes(_EditingTarget1, disposable);
										for(i = 0; i < int(disposable.length()); i++) if(disposable[i] == ' ') disposable[i] = '_';
										if(disposable != "No_Maps_Created")
										{
											switch(_MapLink->WhichMapBeingPicked)
											{
											case lmFocus:	_MapLink->SetStrMOI(disposable);			break;
											case lmWest:	_MapLink->SetStrMapWest(disposable);		break;
											case lmNorth:	_MapLink->SetStrMapNorth(disposable);		break;
											case lmEast:	_MapLink->SetStrMapEast(disposable);		break;
											case lmSouth:	_MapLink->SetStrMapSouth(disposable);		break;
											};
											if(_MapLink->WhichMapBeingPicked == 0)
											{
												if(_MapLink->GetTypeInterWorld() == true)
												{
													_FileNameLinks = "data\\w\\";
													_MAPVIEW = HEX_Map01;
												}
												else
												{
													_FileNameLinks = "data\\s\\";
													_MAPVIEW = SQR_Map;
												}
												_FileNameLinks += _MapLink->GetStrMOI();
												_FileNameLinks += "_Links.dat";				
												_myHandleTwo = CreateThread(0, 0, LoadLinks, 0, 0, &_myThreadIDTwo);
												_myHandleThr = CreateThread(0, 0, LoadStartPoints, 0, 0, &_myThreadIDThr);
											}
											_MapLink->WhichMapBeingPicked = -1;
											//Copy the larger rect to be used in various options below - M. White 11 June, 2019
											CopyRect(&rct, &_MapLink->GetRectScreen());
											//Reset Cancel, Save and Interal Link buttons to make a 
											//list on the right - M. White 11 June, 2019
											switch(_MonitorCat)
											{
											case 2:
												_MapLink->buttons[lcCancel].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 0.00),
													178, 39, 0, 0, 178, 0, 0, 0, true, "", "Cancel");
												_MapLink->buttons[lcSave].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 1.25),
													178, 39, 0, 0, 178, 0, 0, 0, true, "", "Save");
												_MapLink->buttons[lcInternalLinks].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 2.50),
													178, 39, 0, 0, 178, 0, 0, 0, true, "", "Intern Links");
												break;
											case 1:
												_MapLink->buttons[lcCancel].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 0.00),
													119, 26, 0, 0, 119, 0, 0, 0, true, "", "Cancel");
												_MapLink->buttons[lcSave].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 1.25),
													119, 26, 0, 0, 119, 0, 0, 0, true, "", "Save");
												_MapLink->buttons[lcInternalLinks].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 2.50),
													119, 26, 0, 0, 119, 0, 0, 0, true, "", "Intern Links");
												break;
											case 0:
												_MapLink->buttons[lcCancel].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(12 * 0.00),
													 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Cancel");
												_MapLink->buttons[lcSave].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(12 * 1.25),
													 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Save");
												_MapLink->buttons[lcInternalLinks].SetProperties(
													rct.left + int((rct.right - rct.left) * 0.85),
													rct.top  + int((rct.bottom - rct.top) * 0.85) + int(12 * 2.50),
													 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Intern Links");
												break;
											}
										}
										else MessageBox(NULL, "You need to create a map first.", "Required", MB_OK);
									}
									else MessageBox(NULL, "You must pick a map name\nbefore proceeding.", "Required", MB_OK);
									break;
								case lcCancel://Localized Cancel button - M. White 8 June, 2019
									{
										_MapLink->WhichMapBeingPicked = -1;
										ResetIntLinkStruct();
										//These buttons get assigned to give User options - M. White
										//Button indexes: 0 == World, 1 == Scene, 2 == Continue, 3 == Cancel
										switch(_MonitorCat)
										{
										case 2:
											_MapLink->buttons[lcCancel].SetProperties(
												rct.left + int((rct.right - rct.left) * 0.50) - int(178 * 0.50),
												rct.top  + int((rct.bottom - rct.top) * 0.93),
												178, 39, 0, 0, 178, 0, 0, 0, true, "", "Cancel");
											break;
										case 1:
											_MapLink->buttons[lcCancel].SetProperties(
												rct.left + int((rct.right - rct.left) * 0.50) - int(119 * 0.50),
												rct.top  + int((rct.bottom - rct.top) * 0.93),
												119, 26, 0, 0, 119, 0, 0, 0, true, "", "Cancel");
											break;
										case 0:
											break;
										}
										//Clean up these Buttons - M. White 9 June, 2019
										if(_WorldSceneUpDwn != NULL) { delete [] _WorldSceneUpDwn; _WorldSceneUpDwn = NULL; }
									}
									break;
								};
								break;
							}
						//Setting up a test-field of where the names of files appear for when the User 
						//clicks within, we will know - M. White 11 June, 2019
						//Modify from "rct", to a smaller rect represented in "_ShadowRect" without 
						//altering "rct" in case we want to use rct's data later - M. White 11 June, 2019
						SetRect(&_ShadowRect, 
							rct.left	+ int((rct.right  - rct.left) * 0.05),
							rct.top		+ int((rct.bottom - rct.top)  * 0.15),
							rct.right	- int((rct.right  - rct.left) * 0.05),
							rct.top		+ int((rct.bottom - rct.top)  * 0.15) + (_bmpTrimmed->GetHeight() * _NumLinesToList));
						//Targetting a file name, minus a little from the right so it
						//doesn't mistake a name selection instead of a button hit. If you change it here,
						//find the matching value in GamePaintEditor - M. White 10, June, 2019
						if((X >= _ShadowRect.left && X <= _ShadowRect.right - int((_ShadowRect.right - _ShadowRect.left) * 0.03)) &&
						   (Y >= _ShadowRect.top  && Y <= _ShadowRect.bottom))
						{
							_EditingTarget1 = VRD(_ShadowRect.top, Y, _bmpTrimmed->GetHeight()) + _ListIndex;
							if(_EditingTarget1 >= _NumWSs)//array-index sensitive, stay one-less - M. White 10 June, 2019
							{
								//Resetting the values so that if the User decides to click the 
								//other map-fields, the test (_MapLink->WhichMapBeingPicked > -1) 
								//will take them to the else-statment - M. White 11 June, 2019
								_EditingTarget1		= -1;
								_Editor_W_S_Name	= "";
							}
						}
						if(_WorldSceneUpDwn != NULL)
						{
							if		(_WorldSceneUpDwn[0].DidItHit(X, Y) == true)	{ if(_ListIndex > 0) --_ListIndex; }
							else if	(_WorldSceneUpDwn[1].DidItHit(X, Y) == true)	{ _ListIndex++; }
						}
					}
					else
					{
						CopyRect(&rctTwo, &_MapLink->GetRectHorClickRegion());
						//Here we're going to make a Links.dat file based upon the Map of Interest.
						//Step 1: Get the map's name for display
						strMsg = _MapLink->GetStrMOI();
						if		(_MapLink->HitMapOfInterest(X, Y)	== true)
						{
							//Reset the Whole linking process in case the User 
							//is switching maps - M. White 24 June, 2019
							_MapLink->ReuseCleanUp();
							_MapLink->WhichMapBeingPicked = 0;
							switch(_EditorFocusIndex)
							{
							case mapSCENE:	_MapLink->SetTypeWorld(false);		break;
							default:		_MapLink->SetTypeWorld(true);		break;
							}
							//Modify the properties of the Cancel button as it will
							//appear in a new location - M. White 11 June, 2019
							switch(_MonitorCat)
							{
							case 2:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.50) + int(178 * 0.50),
									rct.top  + int((rct.bottom - rct.top) * 0.93),
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Cancel");
								break;
							case 1:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.50) + int(119 * 0.50),
									rct.top  + int((rct.bottom - rct.top) * 0.93),
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Cancel");
								break;
							case 0:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.50) + int(60 * 0.50),
									rct.top  + int((rct.bottom - rct.top) * 0.93),
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Cancel");
								break;
							};
						}
						else if	(_MapLink->HitWestMap(X, Y)			== true)
						{
							if(strMsg != "No_Map_Selected")
							{
								strMsg = _MapLink->GetStrMapWest();
								if(strMsg == "No_Map_Selected")
								{
									_MapLink->WhichMapBeingPicked = 1;
									switch(_EditorFocusIndex)
									{
									case mapSCENE:	_MapLink->SetTypeWest(false);		break;
									default:		_MapLink->SetTypeWest(true);		break;
									}
								}
								else _MapLink->SetStrMapWest("No_Map_Selected");
							}
							else { MessageBox(NULL, "You must first select the\n\nPrimary Map", "Requirement", MB_OK); return; }
						}
						else if	(_MapLink->HitNorthMap(X, Y)		== true)
						{
							if(strMsg != "No_Map_Selected")
							{
								strMsg = _MapLink->GetStrMapNorth();
								if(strMsg == "No_Map_Selected")
								{
									_MapLink->WhichMapBeingPicked = 2;
									switch(_EditorFocusIndex)
									{
									case mapSCENE:	_MapLink->SetTypeNorth(false);		break;
									default:		_MapLink->SetTypeNorth(true);		break;
									}
								}
								else _MapLink->SetStrMapNorth("No_Map_Selected");
							}
							else { MessageBox(NULL, "You must first select the\n\nPrimary Map", "Requirement", MB_OK); return; }
						}
						else if	(_MapLink->HitEastMap(X, Y)			== true)
						{
							if(strMsg != "No_Map_Selected")
							{
								strMsg = _MapLink->GetStrMapEast();
								if(strMsg == "No_Map_Selected")
								{
									_MapLink->WhichMapBeingPicked = 3;
									switch(_EditorFocusIndex)
									{
									case mapSCENE:	_MapLink->SetTypeEast(false);		break;
									default:		_MapLink->SetTypeEast(true);		break;
									}
								}
								else _MapLink->SetStrMapEast("No_Map_Selected");
							}
							else { MessageBox(NULL, "You must first select the\n\nPrimary Map", "Requirement", MB_OK); return; }
						}
						else if	(_MapLink->HitSouthMap(X, Y)		== true)
						{
							if(strMsg != "No_Map_Selected")
							{
								strMsg = _MapLink->GetStrMapSouth();
								if(strMsg == "No_Map_Selected")
								{
									_MapLink->WhichMapBeingPicked = 4;
									switch(_EditorFocusIndex)
									{
									case 1:		_MapLink->SetTypeSouth(false);		break;
									default:	_MapLink->SetTypeSouth(true);		break;
									}
								}
								else _MapLink->SetStrMapSouth("No_Map_Selected");
							}
							else { MessageBox(NULL, "You must first select the\n\nPrimary Map", "Requirement", MB_OK); return; }
						}
						//There has to be a default action with assigning the map's file path so that the program
						//flow is not interrupted - M. White 22 June, 2019
						if(LoadData(_EditorFocusIndex) == true)
						{
							//Set Default values, as User might not click either World or Scene buttons...
							_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
							_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
							_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
							_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
						}
						//lc = Linking Commands, found in MapLinks.h
						//lcWorld = 0, lcScene, lcContinue, lcCancel, lcSave, lcInternalLinks, lcOpen, MAX_LCs
						if		(_MapLink->buttons[lcCancel].DidItHit(X, Y)			== true)//Cancel
						{
							_GAMEsubPHASE		= edStart;//return control...
							_edLinkingMaps		= false;
							_Editor_W_S_Name	= "";
							_EditingTarget1		= -1;
							_EditorFocusIndex	= 0;
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_MapLink->ResetLinks();
							_Buttons[edMapSqr1].SetIsActive(true);
							_Buttons[edMapDiam].SetIsActive(true);
							_Buttons[edMapRhom].SetIsActive(true);
							_Buttons[edMapHex1].SetIsActive(true);
							_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
							_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
							_tmpSingleBtn[edOpen].SetIsActive(true);
							_tmpSingleBtn[edSave].SetIsActive(false);
							_tmpSingleBtn[edDelete].SetIsActive(true);
							_tmpSingleBtn[edQuit].SetIsActive(true);
							_tmpSingleBtn[edLinkMaps].SetIsActive(true);
							//Reset screen to prompt User - M. White 26 June, 2019
							TabFlipMapType(_MAPVIEW);
						}
						else if	(_MapLink->buttons[lcSave].DidItHit(X, Y)			== true)
						{
							//This version of "save" will save both edge-links and 
							//internal-links as a whole - M. White 19 June, 2019
							//Verify that all of the fields have been filled out properly - M. White 15 June, 2019
							if(strMsg != "No_Map_Selected")
							{
								if(_MapLink->GetTypeInterWorld() == true)	strTemp = "data\\w\\";
								else										strTemp = "data\\s\\";
								strTemp += strMsg;
								strTemp += "_Links.dat";
								for(i = 0; i < int(strTemp.length()); i++) if(strTemp[i] == ' ') strTemp[i] = '_';
								_FileNameLinks = strTemp;
								_myHandleOne = CreateThread(0, 0, SaveStartPoints, 0, 0, &_myThreadIDOne);
								_myHandleTwo = CreateThread(0, 0, SaveLinks, 0, 0, &_myThreadIDTwo);
							}
							else MessageBox(NULL, "You must select a map.", "Required", MB_OK);
						}
						else if	(_MapLink->buttons[lcInternalLinks].DidItHit(X, Y)	== true)//Internal linking
						{
							if(strMsg != "No_Map_Selected")
							{
								//Force a cleaning of dynamic memory in case there is any left from a 
								//previous editing done with a different map - M. White 24 Nune, 2019
								while(_MapLink->inLinks.isEmpty() == false) _MapLink->inLinks.popFront();
								_MapLink->NumInternalLinks	= 0;
								_tmpLS.DestMapType			= 0;//This comes into play picking destination maps - M. White 25 June, 2019
								//We'll change the User Interface, this commands - M. White 11 June, 2019
								_MapLink->ShowIntLink	= true;
								_edIntLinking			= true;
								_edLinkingMaps			= false;
								//Assign for display when screen switches - M. White 24 June, 2019
								_Editor_W_S_Name		= strMsg;
								for(i = 0; i < int(_Editor_W_S_Name.length()); i++)
									if(_Editor_W_S_Name[i] == '_') _Editor_W_S_Name[i] = ' ';
								//Working with loading two different files, the Map and the Linker Data...
								//Both files have to know what the directory is, so according to the 
								//type of World or Scene, we assign the directory...
								if(_MapLink->GetTypeInterWorld() == true)
								{ disposable = "data\\w\\"; _EditorFocusIndex = mapWORLD; _MAPVIEW = HEX_Map01; }
								else
								{ disposable = "data\\s\\"; _EditorFocusIndex = mapSCENE; _MAPVIEW = SQR_Map; }
								//Reset these in case _MAPVIEW is new value - M. White 24 June, 2019
								_TileWalkerX	= _PlayWin[_MAPVIEW].GetCentCol();
								_TileWalkerY	= _PlayWin[_MAPVIEW].GetCentRow();
								//These values have to switch with the change of type of map - M. White 25 June, 2019
								_MapLimitL		= _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitT		= _PlayWin[_MAPVIEW].GetCentRow();
								_MapLimitR		= _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitB		= _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
								_FileNameMap	= disposable;	//_FileName copies the same directory
								_FileNameMap	+= strMsg;
								_FileNameMap	+= ".dat";		//FileName is almost complete, add the extension...
								_FileNameLinks	= disposable;
								_FileNameLinks	+= strMsg;		//Both files copy Map_of_Interest Name
								_FileNameLinks	+= "_links.dat";
								//Make sure there's no blank spaces...
								for(i = 0; i < int(_FileNameMap.length());   i++) if(_FileNameMap[i]   == ' ')	_FileNameMap[i]		= '_';
								for(i = 0; i < int(_FileNameLinks.length()); i++) if(_FileNameLinks[i] == ' ')	_FileNameLinks[i]	= '_';

								_myHandleOne = CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);	//Start the thread to load the Map of Interest...
								_myHandleTwo = CreateThread(0, 0, LoadLinks, 0, 0, &_myThreadIDTwo);		//Start the thread to load the Linker file...

								//Repurposed two of these buttons the Save button to "Add Link Points"
								switch(_MonitorCat)
								{
								case 2:
									_MapLink->buttons[lcSave].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
										178, 39, 0, 0, 178, 0, 0, 0, true, "", "Add Link");
									_MapLink->buttons[lcPaths].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 47, 
										178, 39, 0, 0, 178, 0, 0, 0, true, "", "Assign Paths");
									_MapLink->buttons[lcCancel].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 94, 
										178, 39, 0, 0, 178, 0, 0, 0, true, "", "Finish");

									_MapLink->buttons[lcLinksLeft].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
										14, 25, 0,  78, 15,  78);
									_MapLink->buttons[lcLinksRight].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
										14, 25, 0, 103, 15, 103);
									break;
								case 1:
									_MapLink->buttons[lcSave].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
										119, 26, 0, 0, 119, 0, 0, 0, true, "", "Add Link");
									_MapLink->buttons[lcPaths].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 32, 
										119, 26, 0, 0, 119, 0, 0, 0, true, "", "Assign Paths");
									_MapLink->buttons[lcCancel].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 64, 
										119, 26, 0, 0, 119, 0, 0, 0, true, "", "Finish");

									_MapLink->buttons[lcLinksLeft].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
										15, 16, 0, 52, 15, 52);
									_MapLink->buttons[lcLinksRight].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
										15, 16, 0, 68, 15, 68);
									break;
								case 0:
									_MapLink->buttons[lcSave].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
										 60, 12, 0, 0, 60, 0, 0, 0, true, "", "Add Link");
									_MapLink->buttons[lcPaths].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 16, 
										 60, 12, 0, 0, 60, 0, 0, 0, true, "", "Assign Paths");
									_MapLink->buttons[lcCancel].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 32, 
										 60, 12, 0, 0, 60, 0, 0, 0, true, "", "Finish");

									_MapLink->buttons[lcLinksLeft].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
										 8,  8, 0, 24,  8, 24);
									_MapLink->buttons[lcLinksRight].SetProperties(
										_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
										_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
										 8,  8, 0, 32,  8, 32);
									break;
								};

								//Activating button to show User they can use this...
								_tmpSingleBtn[edStartLoc].SetIsActive(true);
							}
							else MessageBox(NULL, "You must select a map before proceeding.", "Required", MB_OK);
						}
						else if	(_tmpSingleBtn[edStartLoc].DidItHit(X, Y)			== true)
						{
							//We want to respond even if the button is not active...
							//The User will at least under stand they need to be in a 
							//particular mode of operation - M. White 08, 2019
							strMsg  = "To use this function,\n";
							strMsg += "You must be in Internal Links";
							MessageBox(NULL, strMsg.c_str(), "Required", MB_OK);
							_XMouse = -1; _YMouse = -1;
						}
					}
				}
				//_edIntLinking is linking locations within the map to other internal points of other maps...
				//perhaps even 'teleport' locations within the same map? - M. White 19 June, 2019
				else if	(_edIntLinking		== true)
				{
					SetRect(&rct, _SideBarBackGrnd.left, _SideBarBackGrnd.top, _SideBarBackGrnd.right, _SideBarBackGrnd.bottom);
					SetRect(&rctTwo, 
						rct.left + int((rct.right - rct.left)	* 0.50) - int((rct.right - rct.left) * 0.45),
						rct.top  + int(_bmpTrimmed->GetHeight() * 7.00),
						rct.left + int((rct.right - rct.left)	* 0.50) + int((rct.right - rct.left) * 0.45),
						rct.top  + int(_bmpTrimmed->GetHeight() * 7.00) + _bmpTrimmed->GetHeight());
					if(_MapLink->ShowUserInput == true)
					{
						if(_MapLink->buttons[lcContinueTwo].DidItHit(X, Y))
						{
							if(int(_tmpLS.NickName.length()) < 1)
								MessageBox(NULL, "You must type at least one character", "Required", MB_OK);
							else _MapLink->ShowUserInput = false;
						}
					}
					else
					{
						//Clicking in the Play Map - M. White 11 June, 2019
						if		(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
								 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
						{
							if(_edLoadScrnDestMap == false)
							{
								//This series of if-else tests check to ensure that the User hadn't 
								//recently clicked on one of the index buttons or slide ruler that 
								//would have triggered an assignment of data that would then be tested 
								//within the if-test. This keeps the program flow running properly when 
								//the User clicks the screen - M. White 25 June, 2019
								if(_edJustClickedIndex == false)
								{
									XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
									YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
									//Compensating for situations where being odd/even
									//has a play in the math - M. White 26 June, 2019
									if((_ptCursor.y % 2 != 0) && (_MAPVIEW != SQR_Map)) XMod++;
									//Shifting by +/- 1 because the map edges are reserved for travel to other maps 
									//on the same 'level' as the primary map - M. White 16 June, 2019
									if(XMod < _MapLimitL + 1 || XMod > _MapLimitR - 1 || YMod < _MapLimitT + 2 || YMod > _MapLimitB - 2)
									{
										MessageBox(NULL, "You're not allow to assign\nInternal Links near the edges of the map.", "Required", MB_OK);
										return;
									}
									//So long as the User has not moved onto the Destination map, when they click the 
									//PlayWin, the execution will assign X-/Y-coordinates to the exit Point, otherwise, 
									//the data will get assigned to the entry point of the destination - M. White 11 June, 2019
									if(_tmpLS.DestinationMapName == "No_Map_Selected")
									{
										if(XMod == _TileWalkerX && YMod == _TileWalkerY)
										{
											MessageBox(NULL, "You can not edit a link where\nyou're standing. Clearing Data.", "Sorry", MB_OK);
											ResetIntLinkStruct();
											_paintSomething		= true;
											_paintWholeScrn		= true;
										}
										else
										{
											//If there are other links already assigned, search them to see 
											//if any of them match...
											if(_MapLink->NumInternalLinks > 0)
											{
												for(i = 0; i < _MapLink->NumInternalLinks; i++)
												{
													_MapLink->inLinks.getNodes(i, tmpMP);
													//...if it does, then delete that link - M. White 16 June, 2019
													if(tmpMP.exitX == XMod && tmpMP.exitY == YMod)
													{
														if(MessageBox(NULL, "Delete this Link?", "Matching Link Exit", MB_YESNO) == IDYES)
														{
															_MapLink->inLinks.deleteNodeByRef(i);
															_MapLink->NumInternalLinks--;
															ResetIntLinkStruct();
															return;
														}
													}
												}
											}
											//Else, there were either no points to check, or none mathced...
											//...in either case we still assign since the above test did 
											//a 'return' to stop this program flow - M. White 19 August, 2019
											_tmpLS.exitX = XMod; _tmpLS.exitY = YMod;
										}
									}
									else
									{
										if(XMod == _TileWalkerX && YMod == _TileWalkerY)
										{
											MessageBox(NULL, "You can not edit a link where\nyou're standing. Clearing Data.", "Sorry", MB_OK);
											ResetIntLinkStruct();
											_paintSomething		= true;
											_paintWholeScrn		= true;
										}
										//The destination map name has been assigned, so now the User's target point
										//can be assigned without concern, and multiple locations can deposite the
										//Avatar at this location - M. White 19 June, 2019
										_tmpLS.destX = XMod; _tmpLS.destY = YMod; 
									}
								}
								else
								{
									_edJustClickedIndex = false;
									ResetIntLinkStruct();
								}
							}
							else
							{
								//Creating the test region to pick a filename out of the list - M. White 12 June, 2019
								CopyRect(&rct, &_MapLink->GetRectPickName());
								SetRect(&rctTwo,
									rct.left	+ int((rct.right  - rct.left) * 0.05),
									rct.top		+ int((rct.bottom - rct.top)  * 0.15),
									rct.right	- int((rct.right  - rct.left) * 0.05),
									rct.top		+ int((rct.bottom - rct.top)  * 0.15) + (_bmpTrimmed->GetHeight() * _NumLinesToList));
								//Targetting an item in the list on the screen
								//Subtracting width of button to make sure something is not selected under 
								//one of the buttons on right side - M. White 17 May, 2019
								if((X >= rctTwo.left && X <= rctTwo.right - int((rctTwo.right - rctTwo.left) * 0.03)) && 
								   (Y >= rctTwo.top  && Y <= rctTwo.bottom))
								{
									//Recycling _EditingTarget1 to get an index value - M. White 17 May, 2019
									_EditingTarget1 = VRD(rctTwo.top, Y) + _ListIndex;
									if(_EditingTarget1 > _NumWSs) _EditingTarget1 = -1;
								}
								if		(_MapLink->buttons[lcWorld].DidItHit(X, Y) == true)
								{
									_EditingTarget1		= -1;
									_EditorFocusIndex	= mapWORLD;
									_tmpLS.DestMapType	= mapWORLD;
									_edDestMapWorld		= true;//True that it is a "World" map...
									//These values have to switch with the change of type of map - M. White 25 June, 2019
									_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
									_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
									LoadData(mapWORLD);
								}
								else if	(_MapLink->buttons[lcScene].DidItHit(X, Y) == true)
								{
									_EditingTarget1		= -1;
									_EditorFocusIndex	= 1;
									_tmpLS.DestMapType	= mapSCENE;
									_edDestMapWorld		= false;//False that it is a "World" map...
									//User may have switched to Scene, need to reload - M. White 9 June, 2019
									hFile = CreateFile("data\\s\\sd.dat",							// file to open
													GENERIC_READ,									// open for reading
													FILE_SHARE_READ,								// share for reading
													NULL,											// default security
													OPEN_EXISTING,									// existing file only
													FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,	// normal file
													NULL); 
									if(hFile == INVALID_HANDLE_VALUE)
									{
										//The file is missing...
										//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
										strMsg  = "There was a file missing.\n";
										strMsg += "Make sure the following file is located in\n";
										strMsg += "the data folder under the subfolder data/s\n\n";
										strMsg += "sd.dat";
										MessageBox(NULL, strMsg.c_str(), "Scene Map List Load Error", MB_OK);
										//Clean up - M. White 15 May, 2019
										CloseHandle(hFile);
									}
									else
									{
										while(!_ListWorldScenes.isEmpty()) _ListWorldScenes.popFront();
										_ListIndex = 0;
										//Clean up first to free the resource - M. White 15 May, 2019
										CloseHandle(hFile);
										DataInput.open("data\\s\\sd.dat");
										//Start by getting the integer value of how many entries to expect - M. White 15 May, 2019
										DataInput >> _NumWSs;
										//Case the variable as an integer to make sure that someone hasn't message with
										//the data in the file. Even if the list is 'empty', there should still be a message
										//in the file "No_World_Maps_Created" - M. White 15 May, 2019
										if(_NumWSs >= 1)
										{
											while(!DataInput.eof())
											{
												DataInput >> strMsg;
												for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
												_ListWorldScenes.insertBack(strMsg);
											}
										}
										else
										{
											//The file is missing...
											//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
											strMsg  = "The sd.dat file is corrupt";
											MessageBox(NULL, strMsg.c_str(), "Scene Map Read Error", MB_OK);
										}
										DataInput.close();
										//These values have to switch with the change of type of map - M. White 25 June, 2019
										_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
										_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
										_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
										_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
									}
								}
								else if	(_MapLink->buttons[lcContinue].DidItHit(X, Y) == true)
								{
									if(_EditingTarget1 < 0) MessageBox(NULL, "You must select a map before proceeding", "Required", MB_OK);
									else
									{
										_ListWorldScenes.getNodes(_EditingTarget1, disposable);
										for(i = 0; i < int(disposable.length()); i++) if(disposable[i] == ' ') disposable[i] = '_';
										_tmpLS.DestinationMapName	= disposable;
										_Editor_W_S_Name			= disposable;//Assigning for display purposes - M. White 13 June, 2019
										_edLoadScrnDestMap			= false;
										if(_tmpLS.DestMapType == mapWORLD)	{ _FileNameMap = "data\\w\\"; _MAPVIEW = HEX_Map01;	}
										else								{ _FileNameMap = "data\\s\\"; _MAPVIEW = SQR_Map;	}
										_TileWalkerX	= _PlayWin[_MAPVIEW].GetCentCol();
										_TileWalkerY	= _PlayWin[_MAPVIEW].GetCentRow();
										//These values have to switch with the change of type of map - M. White 25 June, 2019
										_MapLimitL		= _PlayWin[_MAPVIEW].GetCentCol();
										_MapLimitT		= _PlayWin[_MAPVIEW].GetCentRow();
										_MapLimitR		= _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
										_MapLimitB		= _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
										_FileNameMap	+= _tmpLS.DestinationMapName;
										_FileNameMap	+= ".dat";

										_myHandleOne = CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);

									//	GetTacticalMapData(_MAPVIEW);
										_paintSomething = true;
										_paintMainMap	= true;
									}
								}
							}
							_paintSomething	= true; 
							_paintWholeScrn = true;
						}
						//Opening Destination Map - M. White 11 June, 2019
						else if (_MapLink->HitRectIO_DestMapName(X, Y) == true)
						{
							if(_tmpLS.exitX < 0 || _tmpLS.exitY < 0)
								MessageBox(NULL, "You must first select the\n\nExit Point\n\nby clicking on the map.", "Required", MB_OK);
							else
							{
								_EditingTarget1				= -1;
								_edLoadScrnDestMap			= true;
								_edDestMapWorld				= true;	//Default to present World Map list - M. White 11 June, 2019
								_edShowMapOfInt				= false;
								_Editor_W_S_Name			= "";
								_tmpLS.DestinationMapName	= "";
								_EditorFocusIndex			= mapWORLD;
								_tmpLS.DestMapType			= mapWORLD;	//Zero represents "World Map"
								//These values have to switch with the change of type of map - M. White 25 June, 2019
								_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
								_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
								_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
								LoadData(mapWORLD);
							}
							_paintSomething	= true; 
							_paintWholeScrn = true;
						}
						//Opening Nick Name - M. White 11 June, 2019
						else if (_MapLink->HitRectIO_DestNickName(X, Y) == true)
						{
							//Data is not completely filled out - M. White 14 June, 2019
							if(_tmpLS.exitX < 0 || _tmpLS.exitY < 0 || _tmpLS.destX < 0 || _tmpLS.destY < 0 || int(_tmpLS.DestinationMapName.length() < 1))
								MessageBox(NULL, "You must first select the\n\nEntry Point\n\nby clicking on the map.", "Required", MB_OK);
							else
							{
								_MapLink->ShowUserInput	= true;
								_paintSomething			= true; 
								_paintWholeScrn			= true;
							}
						}
						//Checking buttons - M. White 19 June, 2019
						if		(_MapLink->buttons[lcCancel].DidItHit(X, Y)			== true)//Cancel
						{
							//At this stage, the "cancel" button has a label of "Finish" and is located in the 
							//right side bar of the screen - M. White 19 June, 2019
							//Check all of the variables to see if they are not at "default" values - M. White 19 June, 2019
							if(_tmpLS.exitX != -1 ||  _tmpLS.exitY != -1)
							{
								Found = false;
								if(_MapLink->NumInternalLinks > 0)
									for(i = 0; i < int(_MapLink->NumInternalLinks); i++)
									{
										_MapLink->inLinks.getNodes(i, tmpMP);
										if(tmpMP.DestinationMapName == _tmpLS.DestinationMapName	&&
										   tmpMP.DestMapType		== _tmpLS.DestMapType			&&
										   tmpMP.destX				== _tmpLS.destX					&&
										   tmpMP.destY				== _tmpLS.destY					&&
										   tmpMP.exitX				== _tmpLS.exitX					&&
										   tmpMP.NickName			== _tmpLS.NickName) { Found = true; break; }
									}
								//By finding a matching entry that all of its data is already saved, we can skip
								//asking the User if they want to save or not - M. White 19 June, 2019
								if(Found == false)
								{
									//There was some unresolved actions, let the User know so they have a chance
									//to make sure they Add Link
									disposable  = "There is some data active in\n";
									disposable += "the screen that hasn't been saved.\n\nFinish anyway?";
									if(MessageBox(NULL, disposable.c_str(), "Attention!", MB_YESNO) != IDYES) return;
								}
							}
							//Default setting the Avatar's location - M. White 19 June, 2019
							_TileWalkFacing	= 0;
							_TileWalkerX	= _PlayWin[_MAPVIEW].GetCentCol();
							_TileWalkerY	= _PlayWin[_MAPVIEW].GetCentRow();
							CopyRect(&rct, &_MapLink->GetRectScreen());
							//resetting the buttons back to the previous stage - M. White 11 June, 2019
							switch(_MonitorCat)
							{
							case 2:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 0.00),
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Cancel");
								_MapLink->buttons[lcSave].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 1.25),
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Save");
								_MapLink->buttons[lcInternalLinks].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(39 * 2.50),
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Intern Links");
								break;
							case 1:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 0.00),
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Cancel");
								_MapLink->buttons[lcSave].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 1.25),
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Save");
								_MapLink->buttons[lcInternalLinks].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(26 * 2.50),
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Intern Links");
								break;
							case 0:
								_MapLink->buttons[lcCancel].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(13 * 0.00),
									 60, 12, 0, 0,  0, 0, 0, 0, true, "", "Cancel");
								_MapLink->buttons[lcSave].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(13 * 1.25),
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Save");
								_MapLink->buttons[lcInternalLinks].SetProperties(
									rct.left + int((rct.right - rct.left) * 0.85),
									rct.top  + int((rct.bottom - rct.top) * 0.85) + int(13 * 2.50),
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Intern Links");
								break;
							};
							ResetIntLinkStruct();
							_Editor_W_S_Name	= "";
							_SideBarMenuIndex	= 0;//Protection against accessing array - M. White 14 August, 2019
							_edLinkingMaps		= true;
							_edIntLinking		= false;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
						else if	(_MapLink->buttons[lcSave].DidItHit(X, Y)			== true)//Save the link created (Add)
						{
							//This version of "save" adds a node to the linked list of 
							//internal points, and has a label of "Add Point" - M. White 19 June, 2019
							//Verify that all of the fields have been filled out properly - M. White 15 June, 2019
							if(strMsg != "No_Map_Selected")
							{
								//Make sure there are no blank spaces...
								for(i = 0; i < int(_tmpLS.DestinationMapName.length()); i++)
									if(_tmpLS.DestinationMapName[i] == ' ') _tmpLS.DestinationMapName[i] = '_';
								for(i = 0; i < int(_tmpLS.NickName.length()); i++)
									if(_tmpLS.NickName[i] == ' ') _tmpLS.NickName[i] = '_';
								//Add the node...
								if(_tmpLS.exitX >= 0 && _tmpLS.exitY >= 0)
								{
									if(int(_tmpLS.DestinationMapName.length()) > 0)
									{
										if(_tmpLS.destX >= 0 && _tmpLS.destY >= 0)
										{
											if(int(_tmpLS.NickName.length()) > 0)
											{
												_Editor_W_S_Name	= _MapLink->GetStrMOI();
												if(_MapLink->GetTypeInterWorld() == true)	_MAPVIEW = HEX_Map01;
												else										_MAPVIEW = SQR_Map;
												_TileWalkerX = _PlayWin[_MAPVIEW].GetCentCol();
												_TileWalkerY = _PlayWin[_MAPVIEW].GetCentRow();
												//These values have to switch with the change of type of map - M. White 25 June, 2019
												_MapLimitL = _PlayWin[_MAPVIEW].GetCentCol();
												_MapLimitT = _PlayWin[_MAPVIEW].GetCentRow();
												_MapLimitR = _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
												_MapLimitB = _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();
												_edShowMapOfInt		= true;
												GetTacticalMapData(_MAPVIEW);

												//_EditorFocusIndex represents if the User selected World or Scene
												_MapLink->inLinks.insertBack(_tmpLS);
												_MapLink->NumInternalLinks++;
												_MapLink->CurIndex	= _MapLink->NumInternalLinks;

												//reset the data
												ResetIntLinkStruct();
												_paintSomething		= true;
												_paintWholeScrn		= true;
											}
											else MessageBox(NULL, "You must enter a Nick Name", "Required", MB_OK);
										}
										else MessageBox(NULL, "You must select the entry location", "Required", MB_OK);
									}
									else MessageBox(NULL, "You must select a destination map", "Required", MB_OK);
								}
								else MessageBox(NULL, "You must select the exit location", "Required", MB_OK);
							}
							else MessageBox(NULL, "You must select a map.", "Required", MB_OK);
						}
						else if	(_MapLink->buttons[lcPaths].DidItHit(X, Y)			== true)
						{
							if(_MAPVIEW != SQR_Map)
							{
								MessageBox(NULL, "For this version of game, you can only assign paths to Scene Maps", "Sorry", MB_OK);
								return;
							}
							_ScrollIndex			= 0;
							_SideBarMenuIndex		= -1;//-1 to not equal 0, which might be a case later in Paint() - M. White 13 August, 2019
							_edPathAssignmens		= true;
							_edIntLinking			= false;
							_edLinkingMaps			= false;
							//We're going to show the wizard each time they enter Pathing - M. White 03 August, 2019
							//Set up the Wizard's data
							_PaintTheWizard			= true;
							//Set where we want the message to appear...
							_TheWizard->Reset();
							_TheWizard->bDisplayMsg = true;
							SetRect(&_TheWizard->MsgRect, 
								_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.22),
								_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.05), 
								_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.22),
								_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.85));
							//Offset the wizard to the side of the message...
							_TheWizard->Move(_TheWizard->MsgRect.left - int(_TheWizard->GetFrameWidth() * 1.30), _TheWizard->MsgRect.top + 5);
							if(_TheWizard->wzButtons != NULL)
							{
								if(_TheWizard->numWizBtns > 1)	delete [] _TheWizard->wzButtons;
								else							delete _TheWizard->wzButtons;
							}
							_TheWizard->wzButtons = new myButton();
							_TheWizard->wzButtons->SetProperties(
								_TheWizard->MsgRect.left + int((_TheWizard->MsgRect.right  - _TheWizard->MsgRect.left) * 0.50) - 60, 
								_TheWizard->MsgRect.top  + int((_TheWizard->MsgRect.bottom - _TheWizard->MsgRect.top)  * 0.90), 
								119, 26, 0, 0, 119, 0, 238, 0, true, "", "OK");
							_TheWizard->numWizBtns = 1;
							_TheWizard->SetActive(true);

							//Set up Wizard Actions...
							_TheWizard->AssignTheatric(wizActTeleportIn,			0, _TheWizard->numFramesPer[wizActTeleportIn],			false);
							_TheWizard->AssignTheatric(wizActBowing,				0, _TheWizard->numFramesPer[wizActBowing],				false);
							_TheWizard->AssignTheatric(wizActTalkHeadTiltRJesture,	0, _TheWizard->numFramesPer[wizActTalkHeadTiltRJesture],false);
							_TheWizard->AssignTheatric(wizActCenterBlahBlahBlah,	0, _TheWizard->numFramesPer[wizActCenterBlahBlahBlah],	true);

							DataInput.open("data\\wiz\\wiz_createpath.txt");
							if(DataInput.is_open() == true)
							{
								DataInput >> strMsg;
								for(i = 0; i < int(strMsg.length()); i++)
								{
									if(strMsg[i] == '_') strMsg[i] = ' ';
									else if (strMsg[i] == '\\') 
									{
										strMsg[i] = '\n'; strMsg[i + 1] = ' ';
										for(y = i + 1; y < int(strMsg.length() - 1); y++)
											strMsg[y] = strMsg[y + 1];
										strMsg[y] = ' '; strMsg[y + 1] = ' ';
									}
								}
								_TheWizard->Speech = strMsg;
							}
							else MessageBox(NULL, "Unable to open Wizard Path Advice", "File Error", MB_OK);
							DataInput.close();

							//Buttons re-assignments...
							//Repurposed two of these buttons the Save button to "Add Link Points"
							switch(_MonitorCat)
							{
							case 2:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 47, 
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Finalize Path");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 94, 
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Finish Paths");
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 8,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) - 8, 
									15, 15, 140, 78, 140, 93);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 8,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) + 
										(_bmpTrimmed->GetHeight() * 11) - 8, 
									15, 15, 140, 78, 140, 93);
								break;
							case 1:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 32, 
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Finalize Path");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 64, 
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Finish Paths");
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 6,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) - 6, 
									12, 12, 108, 52, 108, 64);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 6,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) + 
										(_bmpTrimmed->GetHeight() * 11) - 6, 
									12, 12, 120, 52, 120, 64);
								break;
							case 0:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 18, 
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Finalize Path");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 36, 
									60, 12, 0, 0,  60, 0, 0, 0, true, "", "Finish Paths");
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 4,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) - 4, 
									 7,  7,  56, 24,  56, 31);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.96) - 4,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.06) + 
										(_bmpTrimmed->GetHeight() * 11) - 4, 
									 7,  7,  56, 24,  56, 31);
								break;
							};

							//Path Instantiations...
							if(_EditPath != NULL) delete _EditPath; _EditPath = new MapPath();;
							if(_MapPaths != NULL) delete _MapPaths; _MapPaths = NULL;
							if(_SwapPath != NULL) delete _SwapPath; _SwapPath = NULL;
							if(_WorkingNodeLead	!= NULL) { delete _WorkingNodeLead; _WorkingNodeLead = NULL; }
							_WorkingNodeLead = new PathNode();
							if(_WorkingNodeFoll	!= NULL) { delete _WorkingNodeFoll; _WorkingNodeFoll = NULL; }
							_WorkingNodeFoll = new PathNode();
							//Loading Paths from file...
							_NumPathsOnMap		= 0;
							//Load the paths...
							strTemp = "data\\s\\"; strTemp += _MapLink->GetStrMOI(); strTemp += "_paths.dat";
							_FileNamePaths = strTemp;
							for(i = 0; i < int(_FileNamePaths.length()); i++) if(_FileNamePaths[i] == ' ') _FileNamePaths[i] = '_';
							_bLoadPath = true;
							_myHandleThr = CreateThread(0, 0, LoadSavePaths, 0, 0, &_myThreadIDThr);
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
						else if (_MapLink->buttons[lcLinksLeft].DidItHit(X, Y)		== true)
						{
							//This decrements the index to the list of nodes of internal links - M. White 19 June, 2019
							if(_MapLink->CurIndex > 0)	_MapLink->CurIndex--;
							else						_MapLink->CurIndex = _MapLink->NumInternalLinks - 1;
							_MapLink->inLinks.getNodes(_MapLink->CurIndex, _tmpLS);
							_TileWalkerX = _tmpLS.exitX;
							_TileWalkerY = _tmpLS.exitY;
							GetTacticalMapData(_MAPVIEW);
							_edJustClickedIndex = true;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
						else if (_MapLink->buttons[lcLinksRight].DidItHit(X, Y)		== true)
						{
							//This increments the index to the list of nodes of internal links - M. White 19 June, 2019
							if		(_MapLink->CurIndex < _MapLink->NumInternalLinks - 1)	_MapLink->CurIndex++;
							else 															_MapLink->CurIndex = 0;
							_MapLink->inLinks.getNodes(_MapLink->CurIndex, _tmpLS);
							_TileWalkerX = _tmpLS.exitX;
							_TileWalkerY = _tmpLS.exitY;
							GetTacticalMapData(_MAPVIEW);
							_edJustClickedIndex = true;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
						else if	(_MapLink->HitRectHorClickRegion(X, Y)				== true)
						{
							//This modifies the current index based upon a percentage scale
							//that the User clicks and the index jumps to that point - M. White 19 June, 2019
							_MapLink->CurIndex = int(((X - rctTwo.left) / double(rctTwo.right - rctTwo.left)) * _MapLink->NumInternalLinks);
							if(_MapLink->CurIndex > _MapLink->NumInternalLinks) _MapLink->CurIndex = _MapLink->NumInternalLinks;
							else if (_MapLink->CurIndex < 0) _MapLink->CurIndex = 0;
							_MapLink->inLinks.getNodes(_MapLink->CurIndex, _tmpLS);
							_TileWalkerX = _tmpLS.exitX;
							_TileWalkerY = _tmpLS.exitY;
							GetTacticalMapData(_MAPVIEW);
							_edJustClickedIndex = true;
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
						else if	(_tmpSingleBtn[edStartLoc].DidItHit(X, Y)			== true)
						{
							//The User must have picked a map...
							if(strMsg != "No_Map_Selected")
							{
								//...that map must be a Scene Map...
								if(_EditorFocusIndex != mapSCENE)
									MessageBox(NULL, "You can only assign starting\npoints to Scene Maps", "Sorry", MB_OK);
								else
								{
									//Change status over to editing Start Location...
									if(_tmpSingleBtn[edStartLoc].GetIsActive() == true)
									{
										_tmpSingleBtn[edStartLoc].SetIsActive(false);
										_GAMEsubPHASE		= edStartLoc;
										if(_tmpStartLoc		!= NULL) { delete _tmpStartLoc; _tmpStartLoc = NULL; }
										_tmpStartLoc		= new StartLocation;
										_tmpStartLoc->SetScene(_MapLink->GetStrMOI());
										_edAssignStartPnt	= true;

										//Clean up data before attempt to assign more start points - M. White 30 July, 2019
										if(_startPoints.isEmpty() == false)
											while(_startPoints.isEmpty() == false) _startPoints.popFront();
										_myHandleOne = CreateThread(0, 0, LoadStartPoints, 0, 0, &_myThreadIDOne);
									}
								}
							}
							else MessageBox(NULL, "You must have a Scene Map open.", "Required", MB_OK);
						}
					}
				}
				else if	(_edPathAssignmens	== true)
				{
					if(_TheWizard->GetActive() == true)
					{
						//Clear out the Wizard...
						if(_TheWizard->wzButtons->DidItHit(X, Y) == true)
						{
							if(_TheWizard->numActions > 0) _TheWizard->ClearCurTheater();
							_TheWizard->AssignTheatric(wizActTeleportOut, 0, _TheWizard->numFramesPer[wizActTeleportOut], false);
							_TheWizard->bRepeatImage	= false;
							_TheWizard->bDisplayMsg		= false;
							_TheWizard->numWizBtns		= 0;//Fake it to think there's no buttons...
							_MouseDelay++;
							return;
						}
					}
					if(_MapLink->ShowUserInput == true)
					{
						if(_MapLink->buttons[lcContinueTwo].DidItHit(X, Y))
						{
							if(int(_tmpLS.NickName.length()) < 1)
							{
								MessageBox(NULL, "You must type at least one character", "Required", MB_OK);
								return;
							}
							else
							{
								if(_EditPath->Length > 0)
								{
									//Get and set the name of the path
									strTemp = _tmpLS.NickName.c_str();
									for(i = 0; i < int(strTemp.length()); i++) if(strTemp[i] == ' ') strTemp[i] = '_';
									_EditPath->SetName(strTemp);
									_MapLink->ShowUserInput = false;//_tmpLS
									if(_NumPathsOnMap > 0)
									{
										//Clear the old swap data...
										if(_SwapPath != NULL)
										{
											for(y = 0; y < _NumPathsOnMap; y++)
											{
												while(_SwapPath[y].Length > 0)
												{
													_SwapPath[y].Path.popFront();
													_SwapPath[y].Length--;
												}
											}
											delete [] _SwapPath; _SwapPath = NULL;
										}
										//Add 2 to the number of paths variable...
										_NumPathsOnMap += 2;
										_SwapPath = new MapPath[_NumPathsOnMap];
										//Copying only the active data from the old path - M. White 13 August, 2019
										for(y = 0; y < _NumPathsOnMap - 2; y++)
										{
											_SwapPath[y].SetName(_MapPaths[y].GetName());
											for(i = 0; i < int(_MapPaths[y].GetLength()); i++)
											{
												_MapPaths[y].Path.getNodes(i, tmpPathNode);
												_SwapPath[y].Path.insertBack(tmpPathNode);
												_SwapPath[y].Length++;
											}
										}
										//Delete the old data and make a new array...
										delete [] _MapPaths; _MapPaths = NULL;
										_MapPaths = new MapPath[_NumPathsOnMap];
										//Copy the paths with an iterator, max at count-2
										for(y = 0; y < _NumPathsOnMap - 2; y++)
										{
											_MapPaths[y].SetName(_SwapPath[y].GetName());
											for(i = 0; i < int(_SwapPath[y].GetLength()); i++)
											{
												_SwapPath[y].Path.getNodes(i, tmpPathNode);
												_MapPaths[y].Path.insertBack(tmpPathNode);
												_MapPaths[y].Length++;
											}
										}
										//Assign new User path to array - 2
										_MapPaths[_NumPathsOnMap - 2].SetName(_EditPath->GetName());
										for(i = 0; i < int(_EditPath->Path.GetLength()); i++)
										{
											_EditPath->Path.getNodes(i, tmpPathNode);
											_MapPaths[_NumPathsOnMap - 2].Path.insertBack(tmpPathNode);
											_MapPaths[_NumPathsOnMap - 2].Length++;
										}
										//Assign the final node picked by User, but hasn't been 
										//assisgned to _EditPath - M. White 13 August, 2019
										tmpPathNode.SetX(_WorkingNodeFoll->GetX());
										tmpPathNode.SetY(_WorkingNodeFoll->GetY());
										tmpPathNode.SetDir(-1);
										_MapPaths[_NumPathsOnMap - 2].Path.insertBack(tmpPathNode);
										_MapPaths[_NumPathsOnMap - 2].Length++;
										//Create reverse path to array - 1
										_MapPaths[_NumPathsOnMap - 1].SetName(_EditPath->GetName());
										for(i = int(_MapPaths[_NumPathsOnMap - 2].GetLength() - 1); i >= 0; i--)
										{
											_MapPaths[_NumPathsOnMap - 2].Path.getNodes(i, tmpPathNode);
											_MapPaths[_NumPathsOnMap - 1].Path.insertBack(tmpPathNode);
											_MapPaths[_NumPathsOnMap - 1].Length++;
										}
										//Clear the edit path - M. White 13 August, 2019
										while(_EditPath->Length > 0)
										{
											_EditPath->Path.popFront();
											_EditPath->Length--;
										}
										_EditPath->SetName("Pick_Name");
										_tmpLS.NickName = "";
									}
									else
									{
										if(_MapPaths != NULL) { delete _MapPaths; _MapPaths = NULL; }
										//Two arrays...one for User defined, other to create reverse...
										_NumPathsOnMap = 2;
										_MapPaths = new MapPath[_NumPathsOnMap];
										//Set the Name
										_MapPaths[0].SetName(_EditPath->GetName());
										//Copy Forward...
										for(i = 0; i < int(_EditPath->Length); i++)
										{
											_EditPath->Path.getNodes(i, tmpPathNode);
											_MapPaths[0].Path.insertBack(tmpPathNode);
											_MapPaths[0].Length++;
										}
										//Assign the final node picked by User, but hasn't been 
										//assisgned to _EditPath - M. White 13 August, 2019
										tmpPathNode.SetX(_WorkingNodeFoll->GetX());
										tmpPathNode.SetY(_WorkingNodeFoll->GetY());
										tmpPathNode.SetDir(_WorkingNodeFoll->GetDir());
										_MapPaths[0].Path.insertBack(tmpPathNode);
										_MapPaths[0].Length++;
										//Copy Reverse...
										_MapPaths[1].SetName(_EditPath->GetName());
										for(i = int(_MapPaths[0].Length - 1); i >= 0; i--)
										{
											_MapPaths[0].Path.getNodes(i, tmpPathNode);
											_MapPaths[1].Path.insertBack(tmpPathNode);
											_MapPaths[1].Length++;
										}
										_tmpLS.NickName = "";
										//Clear the edit path - M. White 13 August, 2019
										while(_EditPath->Length > 0)
										{
											_EditPath->Path.popFront();
											_EditPath->Length--;
										}
										_EditPath->SetName("Pick_Name");
									}
									//Reset operating nodes
									_WorkingNodeFoll->Reset();
									_WorkingNodeLead->Reset();
									_paintSomething			= true;
									_paintMainMap			= true;
									_PaintSideBar			= true;
								}
							}
						}
					}
					else
					{
						//Need to know the RECT for Map Name list in side bar
						SetRect(&rct,
							_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.04), 
							_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06), 
							_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.96), 
							_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06) + 
							(_bmpTrimmed->GetHeight() * 11));

						if		(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
								 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
						{
							XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
							YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
							if(_WorkingNodeLead != NULL && _WorkingNodeFoll != NULL)
							{
								//Recreate the Edit Path in case the User finalized a previous
								//path - M. White 11 August, 2019
								if(_EditPath == NULL) _EditPath = new MapPath();
								//The start of this process has the two working Nodes being assigned -1.
								//By being equal to this, we know we're starting a new path. After the 
								//first assignment by the User, operation changes to do a swap action
								//- M. White 06, August, 2019
								if(_WorkingNodeLead->GetX() == _WorkingNodeFoll->GetX() &&
								   _WorkingNodeLead->GetY() == _WorkingNodeFoll->GetY())
								{
									//The paint function will paint "Working" after it paints an list 
									//currently held. It will be a 'double paint' action, but will show
									//the User where the first node is if they only have one - M. White 06 August, 2019
									_WorkingNodeFoll->SetX(XMod);
									_WorkingNodeFoll->SetY(YMod);
								}
								else
								{
									//Test to verify that the User is within allowed range - M. White 10 August, 2019
									if(XMod >= _WorkingNodeFoll->GetX() - 1 && XMod <= _WorkingNodeFoll->GetX() + 1 &&
									   YMod >= _WorkingNodeFoll->GetY() - 1 && YMod <= _WorkingNodeFoll->GetY() + 1)
									{
										//Test to see if the User assigned a point here already...
										for(i = 0; i < int(_EditPath->GetLength()); i++)
										{
											_EditPath->Path.getNodes(i, tmpPathNode);
											if(tmpPathNode.GetX() == XMod && tmpPathNode.GetY() == YMod)
											{
												MessageBox(NULL, 
													"You can not assign the\nsame tile twice on a path.\nIf you want to use this\npoint, start a new path.", 
													"Required", MB_OK);
												return;
											}
										}
										i = -1;//reset to default
										//Determine which way the new node is from old node - M. White 06 August, 2019
										if		(XMod <  _WorkingNodeFoll->GetX())
										{
											if		(YMod < _WorkingNodeFoll->GetY())	i = 7;	//NW
											else if	(YMod > _WorkingNodeFoll->GetY())	i = 5;	//SW
											else										i = 6;	//W
										}
										else if	(XMod == _WorkingNodeFoll->GetX())
										{
											if		(YMod < _WorkingNodeFoll->GetY())	i = 0;	//N
											else if	(YMod > _WorkingNodeFoll->GetY())	i = 4;	//S
											else
												MessageBox(NULL, 
													"You can not assign a point where\nthere's already a point in a path", 
													"Error", MB_OK);
										}
										else
										{
											if		(YMod < _WorkingNodeFoll->GetY())	i = 1;	//NE
											else if	(YMod > _WorkingNodeFoll->GetY())	i = 3;	//SE
											else										i = 2;	//E
										}
										if(i > -1)
										{
											_WorkingNodeLead->SetX(XMod); _WorkingNodeLead->SetY(YMod); 
											_WorkingNodeFoll->SetDir(i);
											tmpPathNode = _WorkingNodeFoll;
											_EditPath->Path.insertBack(tmpPathNode);
											_EditPath->Length++;
											_WorkingNodeFoll->SetX(_WorkingNodeLead->GetX());
											_WorkingNodeFoll->SetY(_WorkingNodeLead->GetY());
											_WorkingNodeFoll->SetDir(-1);
											_WorkingNodeLead->Reset();
										}
									}
									else MessageBox(NULL, "You must assign points\ncloser to the previous point", "Require", MB_OK);
								}
							}
						}
						else if	(_MapLink->buttons[lcSave].DidItHit(X, Y)		== true)
						{
							if(_EditPath->Length > 0 && _EditPath != NULL)
							{
								//Finalizes the current path, but does not save to drive...
								//Saving will be on an upper level with the rest of saving - M. White 04 August, 2019
								strTemp = _EditPath->GetName();
								if(strTemp == "Pick_Name")
								{
									_MapLink->ShowUserInput = true;
									_paintSomething			= true; 
									_paintMainMap			= true;
									return;
								}
							}
							else MessageBox(NULL, "You have to assign some points before finalizing", "Required", MB_OK); 
						}
						else if	(_MapLink->buttons[lcPaths].DidItHit(X, Y)		== true)
						{
							//Save the paths...
							strTemp = "data\\s\\"; strTemp += _MapLink->GetStrMOI(); strTemp += "_paths.dat";
							_FileNamePaths = strTemp;
							for(i = 0; i < int(_FileNamePaths.length()); i++) if(_FileNamePaths[i] == ' ') _FileNamePaths[i] = '_';
							_bLoadPath = false;
							_myHandleThr = CreateThread(0, 0, LoadSavePaths, 0, 0, &_myThreadIDThr);
							//reset Buttons and mode back to Internal Linking mode - M. White 01 August, 2019
							_edPathAssignmens	= false;
							_edIntLinking		= true;
							switch(_MonitorCat)
							{
							case 2:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Add Link");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 47, 
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Assign Paths");
								_MapLink->buttons[lcCancel].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 89,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 94, 
									178, 39, 0, 0, 178, 0, 0, 0, true, "", "Finish");

								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
									14, 25, 0,  78, 14,  78);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
									14, 25, 0, 103, 14, 103);

								//Scroll Buttons
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
									14, 25, 0,  78, 14,  78);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 12, 
									14, 25, 0, 103, 14, 103);
								break;
							case 1:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Add Link");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 32, 
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Assign Paths");
								_MapLink->buttons[lcCancel].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 60,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 64, 
									119, 26, 0, 0, 119, 0, 0, 0, true, "", "Finish");

								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									15, 16, 0, 52, 15, 52);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									15, 16, 0, 68, 15, 68);

								//Scroll Buttons
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									15, 16, 0, 52, 15, 52);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									15, 16, 0, 68, 15, 68);
									break;
							case 0:
								_MapLink->buttons[lcSave].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 0, 
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Add Link");
								_MapLink->buttons[lcPaths].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 18, 
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Assign Paths");
								_MapLink->buttons[lcCancel].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 30,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.68) + 36, 
									 60, 12, 0, 0,  60, 0, 0, 0, true, "", "Finish");

								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									 8,  8, 0, 24,  8, 24);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 7,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 8, 
									 8,  8, 0, 32,  8, 32);

								//Scroll Buttons
								_MapLink->buttons[lcLinksLeft].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 4,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 4, 
									 8,  8, 0, 24,  8, 24);
								_MapLink->buttons[lcLinksRight].SetProperties(
									_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.45) - 4,
									_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.97) - 4, 
									8,  8, 0, 32,  8, 32);
								break;
							};
							_paintSomething		= true; 
							_paintMainMap		= true;
						}
						else if	(_MapLink->buttons[lcLinksLeft].DidItHit(X, Y)	== true)
						{
							//If there are enough paths to fill the display screen,
							//then allow User to Up/Down the list - M. White 04 August, 2019
							if(_ScrollIndex > 0)	_ScrollIndex -= 1;
						}
						else if	(_MapLink->buttons[lcLinksRight].DidItHit(X, Y)	== true)
						{
							//If there are enough paths to fill the display screen,
							//then allow User to Up/Down the list - M. White 04 August, 2019
							_ScrollIndex += 1;
						}
						else if	(_tmpSingleBtn[edStartLoc].DidItHit(X, Y)		== true)
						{
							//We want to respond even if the button is not active...
							//The User will at least under stand they need to be in a 
							//particular mode of operation - M. White 08, 2019
							strMsg  = "To use this function,\n";
							strMsg += "You must be in Internal Links";
							MessageBox(NULL, strMsg.c_str(), "Required", MB_OK);
							_XMouse = -1; _YMouse = -1;
						}
						else if	(X >= rct.left && X < rct.right - 5 && Y > rct.top && Y < rct.bottom)
						{
							_SideBarMenuIndex = VRD(rct.top, Y, _bmpTrimmed->GetHeight());
							_SideBarMenuIndex += _ScrollIndex;
							if(_SideBarMenuIndex > (int(_NumPathsOnMap / 2) - 1)) _SideBarMenuIndex = -1;
							_paintSomething = true; _paintMainMap = true;
						}
					}
				}
				_paintSomething = true;
				_paintWholeScrn	= true;
				break;
			case edStartLoc:
				{
					//Click in the game map area - M. White 29 July, 2019
					if		(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
							 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
					{
						if(_MapLink->ShowUserInput == true)
						{
							if(_MapLink->buttons[lcContinueTwo].DidItHit(X, Y))
							{
								if(int(_tmpLS.NickName.length()) < 1)
									MessageBox(NULL, "You must type at least one character", "Required", MB_OK);
								else _MapLink->ShowUserInput = false;
							}
						}
						else
						{
							XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
							YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;

							if(XMod >= 0 && XMod < _TactMapW && YMod >= 0 && YMod < _TactMapH)
							{
								_tmpStartLoc->SetX(XMod);
								_tmpStartLoc->SetY(YMod);
							}
						}
					}
					else if	(_MapLink->HitRectIO_DestMapName(X, Y)		== true)
					{
						if(_tmpStartLoc->GetX() < 0 || _tmpStartLoc->GetY() < 0)
							MessageBox(NULL, "You must first select the\n\nStarting Point\n\nby clicking on the map.", "Required", MB_OK);
						else
						{
							_MapLink->ShowUserInput	= true;
							_paintSomething			= true; 
							_paintWholeScrn			= true;
						}
					}
					else if	(_MapLink->buttons[lcCancel].DidItHit(X, Y)	== true)
					{
						_tmpSingleBtn[edStartLoc].SetIsActive(true);
						_GAMEsubPHASE		= edLinkMaps;
						_edAssignStartPnt	= false;
					}
					else if	(_MapLink->buttons[lcSave].DidItHit(X, Y)	== true)
					{
						if(_tmpStartLoc != NULL)
						{
							if(_tmpLS.NickName.length() > 0)
							{
								for(int xx = 0; xx < int(_tmpLS.NickName.length()); xx++)
									if(_tmpLS.NickName[xx] == ' ') _tmpLS.NickName[xx] = '_';
								_tmpStartLoc->SetNickName(_tmpLS.NickName);
								_tmpStartLoc->SetScene(_Editor_W_S_Name);
								if(_tmpStartLoc->GetX() >= 0 || _tmpStartLoc->GetY() >= 0)
								{
									if(_tmpStartLoc->GetScene() != "Pick_Map")
									{
										tmpStart = _tmpStartLoc;
										if(_startPoints.length() > 0)
										{
											//Check to see if there is a point for this map...
											for(i = 0; i < int(_startPoints.length()); i++)
											{
												_startPoints.getNodes(i, tmpStart);
												if(tmpStart.GetScene() == _tmpStartLoc->GetScene())
												{
													strMsg  = "This map has a starting point already.\n\n";
													strMsg += "Do you want to replace it?";
													if(MessageBox(NULL, strMsg.c_str(), "Modification Required", MB_YESNO) == IDYES)
													{
														_startPoints.deleteNodeByRef(i);
													}
													else return;
												}
											}
											//Check for a matching name...
											for(i = 0; i < int(_startPoints.length()); i++)
											{
												_startPoints.getNodes(i, tmpStart);
												if(tmpStart.GetNickName() == _tmpStartLoc->GetNickName())
												{
													MessageBox(NULL, "There is a Start Point with that name already", "Modification Required", MB_OK);
													return;
												}
											}
										}
										//Found no match, assign data to list - M. White 29 July, 2019
										//Assigning the data from a pointer-variable to a local variable
										//as the linked list wants a non-pointer set of data - M. White 31 July, 2019
										tmpStart = _tmpStartLoc;
										_startPoints.insertBack(tmpStart);
										MessageBox(NULL, "Start Point Added\n\nStart a new Character to\nconfirm addition", "Added", MB_OK);
									}
									else MessageBox(NULL, "You must pick a map first", "Required", MB_OK);
								}
								else MessageBox(NULL, "You assign coordinates", "Required", MB_OK);
							}
							else MessageBox(NULL, "You must assign a Name first", "Required", MB_OK);
						}
					}
					_paintSomething	= true; 
					_paintWholeScrn = true;
				}
				break;
			case edDelete:
				if		(_edDeleteTrue		== true)
				{
					//User is thinking about their choice of "World" or "Scene" - M. White 14 May, 2019
					if(_EditorFocusIndex == -1)
					{
						if(_tmpSubBtn != NULL)
						{
							//Remember that _NumButtons might change - M. White 14 May, 2019
							for(i = 0; i < _NumTmpSubBtn; i++)
								if(_tmpSubBtn[i].DidItHit(X, Y) == true)
									switch(i)
									{
									case mapWORLD://Choosing World map - M. White 15 May, 2019
										_NumTmpSubBtn		= 2;
										_EditorFocusIndex	= mapWORLD;//Focus Index of '0' is for "World" maps - M. White 15 May, 2019
										//Recalculating the Dialog to accomodate more - M. White 14 May, 2019
										//_ListWorldScenes
										SetRect(&_RectSubMenu,
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25), 
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.10), 
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25),
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.90));
										SetRect(&_MenuBackGrnd,
											_RectSubMenu.left   + int(_bmpTrimmed->GetWidth() * 0.50),
											_RectSubMenu.top    + int(_bmpTrimmed->GetHeight() * 2),
											_RectSubMenu.right  - int(_bmpTrimmed->GetWidth() * 0.50),
										//We're doing a +1 because we need the bottom of the listed line
										//Also need to offset for the top of the background - M. White 17 May, 2019
										_RectSubMenu.top	+ 
											int(_bmpTrimmed->GetHeight() * 2) + 
											int(_bmpTrimmed->GetHeight() * _NumLinesToList));
										//Windows version of reading a file does not work with the intended file reading
										//capabilities of the program. But, the file detection is valid and can be used 
										//to ensure that the file exists. We will temporarily open and close the file to
										//verify that it's there and if present, open it using iostream methods - M. White 15 May, 2019

										//Call Function to Open List of "World" Maps - M. White 14 May, 2019
										hFile = CreateFile("data\\w\\wd.dat",							// file to open
														GENERIC_READ,									// open for reading
														FILE_SHARE_READ,								// share for reading
														NULL,											// default security
														OPEN_EXISTING,									// existing file only
														FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,	// normal file
														NULL); 
										if(hFile == INVALID_HANDLE_VALUE)
										{
											//The file is missing...
											//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
											strMsg  = "There was a file missing.\n";
											strMsg += "Make sure the following file is located in\n";
											strMsg += "the data folder under the subfolder data/w\n\n";
											strMsg += "wd.dat";
											MessageBox(NULL, strMsg.c_str(), "World Map List Load Error", MB_OK);

											//reset everything to cover our bases - M. White 15 May, 2019
											_edNewWorldTrue		= false;
											_edEditingWorld		= false;
											_edNewSceneTrue		= false;
											_edEditingScene		= false;
											_StillEditing		= false;
											_edOpenTrue			= false;
											_edSaveTrue			= false;
											_edDeleteTrue		= false;
											//Reactivate all buttons - M. White 15 May, 2019
											if(_tmpSingleBtn != NULL)
												for(i = 0; i < MAX_edMenuOptions; i++) _tmpSingleBtn[i].SetIsActive(true);
											//Clean up - M. White 15 May, 2019
											CloseHandle(hFile);
										}
										else
										{
											//Clear out the list in case there was something there already - M. White 16 May, 2019
											if(_ListWorldScenes.length() > 0)
												while(_ListWorldScenes.length() > 0) _ListWorldScenes.popFront();
											_ListIndex = 0;
											//Clean up first to free the resource - M. White 15 May, 2019
											CloseHandle(hFile);
											DataInput.open("data\\w\\wd.dat");
											//Start by getting the integer value of how many entries to expect - M. White 15 May, 2019
											DataInput >> _NumWSs;
											//Case the variable as an integer to make sure that someone hasn't message with
											//the data in the file. Even if the list is 'empty', there should still be a message
											//in the file "No_World_Maps_Created" - M. White 15 May, 2019
											if(_NumWSs >= 1)
											{
												while(!DataInput.eof())
												{
													DataInput >> strMsg;
													for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
													_ListWorldScenes.insertBack(strMsg);
												}
												//If there's more data to be listed than allowed, create buttons to scroll
												//up and down the list - M. White 16 MAy, 2019
												if(_NumWSs > _NumLinesToList)
												{
													//Reset this button array in case missed somewhere else - M. White 26 June, 2019
													if(_WorldSceneUpDwn != NULL)
													{
														delete [] _WorldSceneUpDwn;
														_WorldSceneUpDwn = NULL;
													}
													_WorldSceneUpDwn = new myButton[2];
													switch(_MonitorCat)
													{
													case 2:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															15, 15, 155, 78, 155, 93);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															15, 15, 155, 78, 155, 93);
														break;
													case 1:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															12, 12, 120, 52, 120, 64);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															12, 12, 120, 52, 120, 64);
														break;
													case 0:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															 7,  7, 63, 24, 63, 31);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															 7,  7, 63, 24, 63, 31);
														break;
													};
												}
											}
											else
											{
												//The file is missing...
												//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
												strMsg  = "The wd.dat file is corrupt";
												MessageBox(NULL, strMsg.c_str(), "World Map Read Error", MB_OK);
											}
											DataInput.close();
											//Clear out the old buttons, make new - M. White 15 May, 2019
											delete [] _tmpSubBtn;
											_tmpSubBtn = new myButton[_NumTmpSubBtn];
											_tmpSubBtn[0].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.33) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Delete");
											_tmpSubBtn[1].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.66) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
											TabFlipMapType(HEX_Map01);
										}
										break;
									case mapSCENE: //Choose Scene Map - M. White 15 May, 2019
										_NumTmpSubBtn		= 2;
										_EditorFocusIndex	= mapSCENE;//Focus Index of '1' is for "Scene" maps - M. White 15 May, 2019
										//Recalculate the Dialog to accomodate more - M. White 14 May, 2019
										//_ListWorldScenes
										SetRect(&_RectSubMenu,
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25), 
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.10), 
											_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) + 
												int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.25),
											_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.90));
										SetRect(&_MenuBackGrnd,
											_RectSubMenu.left   + int(_bmpTrimmed->GetWidth()  * 0.50),
											_RectSubMenu.top    + int(_bmpTrimmed->GetHeight() * 2),
											_RectSubMenu.right  - int(_bmpTrimmed->GetWidth()  * 0.50),
											_RectSubMenu.top	+ int(_bmpTrimmed->GetHeight() * 2) + int(_bmpTrimmed->GetHeight() * _NumLinesToList));
										//Windows version of reading a file does not work with the intended file reading
										//capabilities of the program. But, the file detection is valid and can be used 
										//to ensure that the file exists. We will temporarily open and close the file to
										//verify that it's there and if present, open it using iostream methods - M. White 15 May, 2019

										//Call Function to Open List of "World" Maps - M. White 14 May, 2019
										hFile = CreateFile("data\\s\\sd.dat",							// file to open
														GENERIC_READ,									// open for reading
														FILE_SHARE_READ,								// share for reading
														NULL,											// default security
														OPEN_EXISTING,									// existing file only
														FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,	// normal file
														NULL); 
										if(hFile == INVALID_HANDLE_VALUE)
										{
											//The file is missing...
											//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
											strMsg  = "There was a file missing.\n";
											strMsg += "Make sure the following file is located in\n";
											strMsg += "the data folder under the subfolder data/s\n\n";
											strMsg += "sd.dat";
											MessageBox(NULL, strMsg.c_str(), "Scene Map List Load Error", MB_OK);

											//reset everything to cover our bases - M. White 15 May, 2019
											_edNewWorldTrue		= false;
											_edEditingWorld		= false;
											_edNewSceneTrue		= false;
											_edEditingScene		= false;
											_StillEditing		= false;
											_edOpenTrue			= false;
											_edSaveTrue			= false;
											_edDeleteTrue		= false;
											//Reactivate all buttons - M. White 15 May, 2019
											if(_tmpSingleBtn != NULL)
												for(i = 0; i < MAX_edMenuOptions; i++) _tmpSingleBtn[i].SetIsActive(true);											
											//Clean up - M. White 15 May, 2019
											CloseHandle(hFile);
										}
										else
										{
											//Clear out the list in case there was something there already - M. White 16 May, 2019
											if(_ListWorldScenes.length() > 0)
												while(_ListWorldScenes.length() > 0) _ListWorldScenes.popFront();
											_ListIndex = 0;
											//Clean up first to free the resource - M. White 15 May, 2019
											CloseHandle(hFile);
											DataInput.open("data\\s\\sd.dat");
											//Start by getting the integer value of how many entries to expect - M. White 15 May, 2019
											DataInput >> _NumWSs;
											//Case the variable as an integer to make sure that someone hasn't message with
											//the data in the file. Even if the list is 'empty', there should still be a message
											//in the file "No_Scene_Maps_Created" - M. White 15 May, 2019
											if(_NumWSs >= 1)
											{
												while(!DataInput.eof())
												{
													DataInput >> strMsg;
													for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
													_ListWorldScenes.insertBack(strMsg);
												}
												//If there's more data to be listed than allowed, create buttons to scroll
												//up and down the list - M. White 16 MAy, 2019
												if(_NumWSs > _NumLinesToList)
												{
													if(_WorldSceneUpDwn != NULL)
													{
														delete [] _WorldSceneUpDwn;
														_WorldSceneUpDwn = NULL;
													}
													_WorldSceneUpDwn = new myButton[2];
													switch(_MonitorCat)
													{
													case 2:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															15, 15, 155, 78, 155, 93);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															15, 15, 155, 78, 155, 93);
														break;
													case 1:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															12, 12, 120, 52, 120, 64);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															12, 12, 120, 52, 120, 64);
														break;
													case 0:
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[0].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.top - 6,
															 7,  7, 63, 24, 63, 31);
														//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
														_WorldSceneUpDwn[1].SetProperties(_MenuBackGrnd.right - 6, _MenuBackGrnd.bottom - 6,
															 7,  7, 63, 24, 63, 31);
														break;
													};
												}
											}
											else
											{
												//The file is missing...
												//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
												strMsg  = "The sd.dat file is corrupt";
												MessageBox(NULL, strMsg.c_str(), "World Map Read Error", MB_OK);
											}
											DataInput.close();
											//Clear out the old buttons, make new - M. White 15 May, 2019
											delete [] _tmpSubBtn;
											_tmpSubBtn = new myButton[_NumTmpSubBtn];
											_tmpSubBtn[0].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.33) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Delete");
											_tmpSubBtn[1].SetProperties(
												_RectSubMenu.left + int((_RectSubMenu.right - _RectSubMenu.left) * 0.66) - 60,
												_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.92), 
												119, 26, 0, 0, 119, 0, 238, 0, true, "", "Cancel");
											TabFlipMapType(SQR_Map);
										}
										break;
									case 2: //Cancel Button - M. White 15 May, 2019
										//Passing control back to subPhase edStart - M. White 19 June, 2019
										_GAMEsubPHASE	= edStart;
										_edDeleteTrue	= false;
										_NumTmpSubBtn	= 0;
										delete [] _tmpSubBtn;
										_tmpSubBtn = NULL;
										if(_WorldSceneUpDwn != NULL) delete [] _WorldSceneUpDwn;
										_Buttons[edMapSqr1].SetIsActive(true);
										_Buttons[edMapDiam].SetIsActive(true);
										_Buttons[edMapRhom].SetIsActive(true);
										_Buttons[edMapHex1].SetIsActive(true);
										_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
										_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
										_tmpSingleBtn[edOpen].SetIsActive(true);
										_tmpSingleBtn[edSave].SetIsActive(true);
										_tmpSingleBtn[edDelete].SetIsActive(true);
										_tmpSingleBtn[edQuit].SetIsActive(true);
										_tmpSingleBtn[edLinkMaps].SetIsActive(true);
										break;
									};
						}
					}
					else
					{
						//Targetting an item in the list on the screen
						//Subtracting width of button to make sure something is not selected under 
						//one of the buttons - M. White 17 May, 2019
						if(X >= _MenuBackGrnd.left && X <= _MenuBackGrnd.right - int((_MenuBackGrnd.right - _MenuBackGrnd.left) * 0.03) && 
						   Y >= _MenuBackGrnd.top  && Y <= _MenuBackGrnd.bottom)
						{
							//Recycling _EditingTarget1 to get an index value - M. White 17 May, 2019
							_EditingTarget1 = VRD(_MenuBackGrnd.top, Y) + _ListIndex;
							if(_EditingTarget1 > _NumWSs) _EditingTarget1 = -1;
						}
						//We will be using the _EditingTarget1 variable in tests done by these buttons - M. White 26 June, 2019
						if(_tmpSubBtn		!= NULL)
						{
							//Remember that _NumButtons might change - M. White 14 May, 2019
							for(i = 0; i < _NumTmpSubBtn; i++)
								if(_tmpSubBtn[i].DidItHit(X, Y) == true)
								{
									switch(i)
									{
									case 0://Delete button - M. White 15 May, 2019
										if(_EditingTarget1 > -1 && _EditingTarget1 < _NumWSs)
										{
											//test to make sure there are files created already - M. White 18 May, 2019
											_ListWorldScenes.getNodes(0, strMsg);
											if(strMsg != "No Maps Created")
											{
												if(MessageBox(NULL, "Do you really want to delete that file?", "Caution", MB_YESNO) == IDYES)
												{
													//recompile the file name according to User's choice of World or Scene - M. White 19 June, 2019
													//Also, pass control to either editor subPhase and set "editing" - M. White 19 June, 2019
													if(_EditorFocusIndex == mapWORLD)
													{
														_FileNameMap	= "data\\w\\";
														_edEditingWorld = true;
														_edEditingScene = false;
														_GAMEsubPHASE	= edNewWorldMenu;
													}
													else
													{
														_FileNameMap	= "data\\s\\";
														//Only load mobs on Scene Maps - M. White 26 July, 2019
														_FileNameMobs	= _FileNameMap;
														_edEditingScene = true;
														_edEditingWorld = false;
														_GAMEsubPHASE	= edNewSceneMenu;
													}

													_ListWorldScenes.getNodes(_EditingTarget1, strMsg);
													//Assigning visible name...
													_Editor_W_S_Name = strMsg;
													//Creating file name...
													for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
													_FileNameMap	+= strMsg;
													_FileNameMap	+= ".dat";

													//Delete the associated files...
													sprintf(tmpTxt, "%s", _FileNameMap.c_str());
													DeleteFile(tmpTxt);

													//Remove the listing of the map...
													_ListWorldScenes.deleteNodeByRef(_EditingTarget1);
													_NumWSs = _ListWorldScenes.length();
													//If that was the last file in memory, clean it up for defaults
													if(_NumWSs == 0)
													{
														_NumWSs		= 1;
														disposable	= "No_Maps_Created";
														_ListWorldScenes.insertBack(disposable);
													}
													if(_EditorFocusIndex == mapWORLD)	strTemp = "data\\w\\wd.dat";
													else								strTemp	= "data\\s\\sd.dat";
													DataOutput.open(strTemp.c_str(), ios_base::trunc);
													if(DataOutput.is_open())
													{
														DataOutput << _NumWSs << "\n";
														for(i = 0; i < _NumWSs; i++)
														{
															_ListWorldScenes.getNodes(i, strTemp);
															for(y = 0; y < int(strTemp.length()); y++) if(strTemp[y] == ' ') strTemp[y] = '_';
															DataOutput << strTemp;
															if(i < _NumWSs - 1) DataOutput << "\n"; 
														}
													}
													if(_EditorFocusIndex != mapWORLD)//Scene Maps only - M. White 26 July, 2019
													{
														//The LoadMobList() function clears out old data before loading - M. White 26 July, 2019
														_FileNameMobs += strMsg; _FileNameMobs += "_mob.dat";
														sprintf(tmpTxt, "%s", _FileNameMobs.c_str());
														DeleteFile(tmpTxt);
													}
													//Pass Control back to subPhase edStart
													_GAMEsubPHASE		= edStart;
													_Editor_W_S_Name	= "";
													_EditorFocusIndex	= -1;
													_EditingTarget1		= -1;
													_EditingTarget2		= -2;
													_edDeleteTrue		= false;
													_edEditingWorld		= false;
													_edEditingScene		= false;
													delete [] _tmpSubBtn;
													_tmpSubBtn			= NULL;
													_NumTmpSubBtn		= 0;
													if(_WorldSceneUpDwn != NULL) { delete [] _WorldSceneUpDwn; _WorldSceneUpDwn = NULL; }
													_tmpSingleBtn[edQuit].SetDisplayText("Quit");
													_Buttons[edMapSqr1].SetIsActive(true);
													_Buttons[edMapDiam].SetIsActive(true);
													_Buttons[edMapRhom].SetIsActive(true);
													_Buttons[edMapHex1].SetIsActive(true);
													_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
													_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
													_tmpSingleBtn[edOpen].SetIsActive(true);
													_tmpSingleBtn[edSave].SetIsActive(true);
													_tmpSingleBtn[edDelete].SetIsActive(true);
													_tmpSingleBtn[edQuit].SetIsActive(true);
													_tmpSingleBtn[edLinkMaps].SetIsActive(true);
												}
											}
											else
											{
												strMsg = "No Maps have been created.";
												MessageBox(NULL, strMsg.c_str(), "File Error", MB_OK);
											}
										}
										else
										{
											if(_EditingTarget1 == -1)	strMsg = "You must select a name to Delete.";
											else						strMsg = "File Target out of range.";
											MessageBox(NULL, strMsg.c_str(), "Required", MB_OK);
										}
										break;
									case 1://Cancel button - M. White 15 May, 2019
										//Pass Control back to subPhase edStart
										_GAMEsubPHASE		= edStart;
										_EditorFocusIndex	= -1;
										_EditingTarget1		= -1;
										_edDeleteTrue		= false;
										_edEditingWorld		= false;
										_edEditingScene		= false;
										delete [] _tmpSubBtn;
										_tmpSubBtn			= NULL;
										_NumTmpSubBtn		= 0;
										if(_WorldSceneUpDwn != NULL) { delete [] _WorldSceneUpDwn; _WorldSceneUpDwn = NULL; }
										_tmpSingleBtn[edQuit].SetDisplayText("Quit");
										_Buttons[edMapSqr1].SetIsActive(true);
										_Buttons[edMapDiam].SetIsActive(true);
										_Buttons[edMapRhom].SetIsActive(true);
										_Buttons[edMapHex1].SetIsActive(true);
										_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
										_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
										_tmpSingleBtn[edOpen].SetIsActive(true);
										_tmpSingleBtn[edSave].SetIsActive(true);
										_tmpSingleBtn[edDelete].SetIsActive(true);
										_tmpSingleBtn[edQuit].SetIsActive(true);
										_tmpSingleBtn[edLinkMaps].SetIsActive(true);
										break;
									};
									break;//Break out of the loop - M. White 19 June, 2019
								}
						}
						if(_WorldSceneUpDwn != NULL)
						{
							for(i = 0; i < 2; i++)
								if(_WorldSceneUpDwn[i].DidItHit(X, Y) == true)
								{
									switch(i)
									{
									case 0:		if(_ListIndex > 0) _ListIndex--;	break;
									case 1:		_ListIndex++;						break;
									};
									break;//Break out of the loop - M. White 19 June, 2019
								}
						}
					}
					_paintSomething = true;
					_paintMainMap	= true;
					_paintButtons	= true;
				}
				break;
			case edSave:
				if		(_edSaveTrue		== true)
				{
					MessageBox(NULL, "Create the Save Code.\n\nResetting Menu Buttons", "TODO:", MB_OK);
					_GAMEsubPHASE	= edStart;
					_Buttons[edMapSqr1].SetIsActive(true);
					_Buttons[edMapDiam].SetIsActive(true);
					_Buttons[edMapRhom].SetIsActive(true);
					_Buttons[edMapHex1].SetIsActive(true);
					_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
					_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
					_tmpSingleBtn[edOpen].SetIsActive(true);
					_tmpSingleBtn[edSave].SetIsActive(true);
					_tmpSingleBtn[edDelete].SetIsActive(true);
					_tmpSingleBtn[edQuit].SetIsActive(true);
					_tmpSingleBtn[edLinkMaps].SetIsActive(true);
					_edSaveTrue		= false;
					_paintSomething	= true;
					_paintMainMap	= true;
					_paintButtons	= true;
				}
				//Note: Each subPhase controls its own save of data specific to the purpose associated with it - M. White 19 June, 2019
				{
					/*
					TOOK THIS CODE OUT AS THIS INSTANCE OF SAVE IS OBSOLETE

					if(_Editor_W_S_Name.length() > 0)
					{
						strMsg = "Clicking Save will over write\nany file with the same name.\n\nProceed?";
						if(MessageBox(NULL, strMsg.c_str(), "Caution!", MB_YESNO) == IDYES)
						{
							//Assign the three-letter designator...
							if(_edEditingWorld == true)	_FileName	= "data\\w\\";
							else						_FileName	= "data\\s\\";
							strMsg = _Editor_W_S_Name;
							//Replace spaces with underscores
							for(i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == ' ') strMsg[i] = '_';
							_FileName += strMsg;
							_FileName += ".dat";
							_myhandle = CreateThread(0, 0, SaveToFile, 0, 0, &_myThreadID);
						}
					}
					else
					{
						strMsg  = "There is no file name locked in.\n\n";
						strMsg += "You must load a file first, or start\n";
						strMsg += "editing a map.";
						MessageBox(NULL, strMsg.c_str(), "File Name", MB_OK);
					}
					//Reset Data as a cue to User - M. White 4 May, 2019
					//	_tmpSingleBtn[edNewWorldMenu].SetIsActive(true);
					//	_tmpSingleBtn[edNewSceneMenu].SetIsActive(true);
					//	_tmpSingleBtn[edOpen].SetIsActive(true);
						_tmpSingleBtn[edSave].SetIsActive(true);
						_tmpSingleBtn[edDelete].SetIsActive(true);
						_tmpSingleBtn[edQuit].SetIsActive(true);
					//	_Editor_W_S_Name = "";
					//Removing this as it's no longer needed...
					//Kept here as a reminder about its use - M. White 17 May, 2019
					//	TabFlipMapType(_MAPVIEW);
						_StillEditing	= false;
						_paintSomething	= true;
						_paintMainMap	= true;
						X = 0; Y = 0;
					*/
				}
				//Set back to edStart when finished - M. White 19 June, 2019
				_GAMEsubPHASE = edStart;
				break;
			};
			//This if-test protects against accidental data input from overlapping regions
			//that present various screens for User input -  M. White 15 June, 2019
			if(_MapLink->ShowUserInput == false)
			{
				//The following tests against rect-areas on the screen are tightly tied to the SubPhase the
				//Use is currently in. To minimize the number of test per iteration through LMouse(), the 
				//active rects are separated by the phase they have an impact on program flow - M. White 20 June, 2019
				if(_edNewWorldTrue == true || _edNewSceneTrue == true)
				{
					//These two rect-settings here should be replaced with rects assigned to the MapLinks.h class
					//...this is temporary until then - M. White 19 June, 2019
					SetRect(&rct,
						_RectSubMenu.left  + int((_RectSubMenu.right  - _RectSubMenu.left) * 0.03),
						_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.05) + int(_bmpTrimmed->GetHeight() * 2.00),
						_RectSubMenu.right - int((_RectSubMenu.right  - _RectSubMenu.left) * 0.03),
						_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.05) + int(_bmpTrimmed->GetHeight() * 3.00));
					SetRect(&rctTwo,
						_RectSubMenu.left  + int((_RectSubMenu.right  - _RectSubMenu.left) * 0.03),
						_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.05) + int(_bmpTrimmed->GetHeight() * 4.00),
						_RectSubMenu.right - int((_RectSubMenu.right  - _RectSubMenu.left) * 0.03),
						_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top)  * 0.05) + int(_bmpTrimmed->GetHeight() * 5.00));
					//Setting focus to one of the two textboxes currently being display - M. White 19 June, 2019
					if		(X >= rct.left    && X <= rct.right    && Y >= rct.top    && Y <= rct.bottom)
					{
						_EditorFocusIndex = 0; _paintSomething = true; _paintWholeScrn = true;
					}
					else if	(X >= rctTwo.left && X <= rctTwo.right && Y >= rctTwo.top && Y <= rctTwo.bottom)
					{
						_EditorFocusIndex = 1; _paintSomething = true; _paintWholeScrn = true;
					}
				}
				//Moved these outside of "Normal Activity", as they are needed in all cases - M. White 11 June, 2019
				if(_Buttons != NULL)
				{
					//Loop through Button series at the top of map - M. White 9 May, 2019
					for(i = 0; i < MAX_edOPTIONS; i++)
						if(_Buttons[i].GetIsActive() == true)
						{
							if(_Buttons[i].DidItHit(X, Y) == true)
							{
								switch(i)
								{
								case edMapSqr1:	if(_PlayWin[_MAPVIEW].GetType() != SQR_Map)		TabFlipMapType(SQR_Map); 	break;
								case edMapDiam: if(_PlayWin[_MAPVIEW].GetType() != DIA_Map)		TabFlipMapType(DIA_Map);	break;
								case edMapRhom: if(_PlayWin[_MAPVIEW].GetType() != RHO_Map)		TabFlipMapType(RHO_Map);	break;
								case edMapHex1: if(_PlayWin[_MAPVIEW].GetType() != HEX_Map01)	TabFlipMapType(HEX_Map01);	break;
								case edMapSlideUp:
									if(_TileWalkerY > (_MapLimitT + 4))	_TileWalkerY -= 4;
									else								_TileWalkerY = _MapLimitT;
									GetTacticalMapData(_MAPVIEW);
									//Cleans up slide bars - M. White 9 May, 2019
									_paintSomething	= true;
									_paintWholeScrn	= true;
									break;
								case edMapSlideDown:
									if(_TileWalkerY < (_MapLimitB - 4)) _TileWalkerY += 4;
									else								_TileWalkerY = _MapLimitB;
									GetTacticalMapData(_MAPVIEW);
									//Cleans up slide bars - M. White 9 May, 2019
									_paintSomething	= true;
									_paintWholeScrn	= true;
									break;
								case edMapSlideLeft:
									if(_TileWalkerX > (_MapLimitL + 4)) _TileWalkerX -= 4;
									else								_TileWalkerX = _MapLimitL;
									GetTacticalMapData(_MAPVIEW);
									//Cleans up slide bars - M. White 9 May, 2019
									_paintSomething	= true;
									_paintWholeScrn	= true;
									break;
								case edMapSlideRight:
									if(_TileWalkerX < (_MapLimitR - 4)) _TileWalkerX += 4;
									else								_TileWalkerX = _MapLimitR;
									GetTacticalMapData(_MAPVIEW);
									//Cleans up slide bars - M. White 9 May, 2019
									_paintSomething	= true;
									_paintWholeScrn	= true;
									break;
								};
								_paintSomething = true;
								_paintMainMap	= true;
								_paintButtons	= true;
							}
						}
				}
				//Targeting the Map slide bar verticle
				if		((X >= _MapSliderVert.left && X <= _MapSliderVert.right) && (Y >= _MapSliderVert.top  && Y <= _MapSliderVert.bottom))
				{
					Percent = (Y - _MapSliderVert.top) / float(_MapSliderVert.bottom - _MapSliderVert.top);
					y = int(((_TactMapH - (_MapLimitT * 2)) * Percent) + _MapLimitT);
					//The User might target a point on the scale that yields a y-coordinate that does not
					//match the _TileWalker's y- even or odd status. If the value is different than the 
					//original, there will be a jump. This protects against that - M. White 10 May, 2019
					if(_MAPVIEW != SQR_Map)
					{
						//check the odd of the screen...
						//...and then modifying according to the even or odd of the Avatar - M. White 16 June, 2019
						if(y & 1)	{ if(_TileWalkerY % 2 == 0) { if(y > _MapLimitT) y--; }}
						else		{ if(_TileWalkerY & 1)		{ if(y > _MapLimitT) y--; }}
					}
					_TileWalkerY = y;
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
				//Targeting the Map slide bar horizontal
				else if	((X >= _MapSliderHori.left && X <= _MapSliderHori.right) && (Y >= _MapSliderHori.top  && Y <= _MapSliderHori.bottom))
				{
					Percent = (X - _MapSliderHori.left) / float(_MapSliderHori.right - _MapSliderHori.left);
					_TileWalkerX = int(((_TactMapW - (_MapLimitL * 2)) * Percent) + _MapLimitL);
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
				if(_MenuScrUpDwn	!= NULL)
				{
					for(i = 0; i < 2; i++)
						if(_MenuScrUpDwn[i].DidItHit(X, Y) == true)
						{
							switch(i)
							{
							case 0:		if(_ScrollIndex > 0) _ScrollIndex--;	break;
							case 1:		_ScrollIndex++;							break;
							}
							_paintSomething		= true;
							_paintWholeScrn		= true;
						}
				}
				if(_WorldSceneUpDwn != NULL)
				{
					for(i = 0; i < 2; i++)
					{
						if(_WorldSceneUpDwn[i].DidItHit(X, Y) == true)
						{
							switch(i)
							{
							case 0:		if(_ListIndex > 0) _ListIndex--;	break;
							case 1:		_ListIndex++;						break;
							};
						}
					}
				}
			}
		}
		else if	(_MouseDelay > 3)
		{
			if(_edEditingWorld == true || _edEditingScene == true)
			{
				if(_edEditingWorld == true)
				{
					if	(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
						 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
					{
						//The Play Window has multiple windows that might be open...we have to test 
						//to see which one is open and act upon it only - M. White 18 June, 2019
						//User Input has highest functionality
						if		(_MapLink->ShowUserInput	== true)
						{
						}//End: if(_ShowUserInput == true)
						else if	(_MapLink->ShowIntLink		== true)
						{
						}//End: if(_edIntLinking == true)
						//Else represents that no other windows are open and this 
						//is "normal" activity - M. White 18 June, 2019
						else
						{
							//Set this so that any changes to the map the User makes flags that
							//something has changed and protects against loss of work - M. White 13 May, 2019
							_StillEditing = true;
							XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
							YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
							switch(_SideBarMenuIndex)
							{
							case edMC_Cities:
								switch(_MAPVIEW)
								{
								case SQR_Map:	_TactMap[XMod][YMod].SetCity(_EditingTarget1);	break;
								case HEX_Map01:
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetCity(_EditingTarget1);
									else										_TactMap[XMod][YMod].SetCity(_EditingTarget1);
									break;
								};
								break;
							case edMC_Coastal:
								switch(_MAPVIEW)
								{
								case SQR_Map:
									_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
									_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
									break;
								case HEX_Map01:
									//Targetting has to be reversed calculated from cursor so that data
									//will point to the correct array index - M. White 9 May, 2019
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))
									{
										_TactMap[XMod + 1][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod + 1][YMod].SetCoastY(_EditingTarget2);
									}
									else
									{
										_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
									}
									break;
								};
								break;
							case edMC_Forests:
								switch(_MAPVIEW)
								{
								case SQR_Map:	_TactMap[XMod][YMod].SetForest(_EditingTarget1);		break;
								case HEX_Map01:
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetForest(_EditingTarget1);
									else										_TactMap[XMod][YMod].SetForest(_EditingTarget1);
									break;
								};
								break;
							case edMC_RiverRoads:
								switch(_MAPVIEW)
								{
								case SQR_Map:	_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);		break;
								case HEX_Map01:
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetRoadRiver(_EditingTarget1);
									else										_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);
									break;
								};
								break;
							case edMC_Terrain://Terrain
								//Temporaily setting value to match desired graphic in _bmp - M. White 25 May, 2019
								if(_EditingTarget1 == -1) _EditingTarget1 = 11;
								switch(_MAPVIEW)
								{
								case SQR_Map:
									if(_Dispersion == true)
									{
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);	//Center
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Right
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);		//Right
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Right
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Left
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod - 1][YMod + 0].SetBG(_EditingTarget1);		//Left
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Left
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Top
									}
									else
									{
										if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
											_TactMap[XMod][YMod].SetBG(_EditingTarget1);
									}
									break;
								case HEX_Map01:
									if(_ptCursor.y & 1)
									{
										if(_Dispersion == true)
										{
											if(_TileWalkerY & 1)
											{
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);	//Center Tile
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 2].SetBG(_EditingTarget1);	//Up
											}
											else
											{
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);		//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
											}
										}
										else
										{
											if(_TileWalkerY & 1)
											{
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);
											}
											else
											{
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
											}
										}
									}
									else
									{
										if(_Dispersion == true)
										{
											if(_TileWalkerY & 1)
											{
												if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
													_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) < _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
											}
											else
											{
												if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
													_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-left
												if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);	//Up
											}
										}
										else
										{
											//Test limits before assigning - M. White 9 May, 2019
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
										}
									}
									break;
								case edMC_walls001:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetWall(_EditingTarget1);	break;
								//	case HEX_Map01:
								//		if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetWall(_EditingTarget1);
								//		else										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
								//		break;
									};
									break;
								};
								if(_EditingTarget1 == 11) _EditingTarget1 = -1;//Reset to the test value - M. White 5 June, 2019
								break;
							};//End: switch()
							GetTacticalMapData(_MAPVIEW);//Reload map data so it can be rendered - M. White 19 June
							_paintSomething = true;
							_paintWholeScrn	= true;
						}//End: else
					}//End: if(_edIntLinking == false)
				}
				else
				{
					//Clicking in the play map - M. White 30 July, 2019
					if	(X >= _PlayWin[_MAPVIEW].gRectL() && X <= _PlayWin[_MAPVIEW].gRectR() && 
						 Y >= _PlayWin[_MAPVIEW].gRectT() && Y <= _PlayWin[_MAPVIEW].gRectB())
					{
						//The Play Window has multiple windows that might be open...we have to test 
						//to see which one is open and act upon it only - M. White 18 June, 2019
						//User Input has highest functionality
						if		(_MapLink->ShowUserInput	== true)
						{
						}//End: if(_ShowUserInput == true)
						else if	(_MapLink->ShowIntLink		== true)
						{
						}//End: if(_edIntLinking == true)
						//Else represents that no other windows are open and this is "normal"
						//activity within the map - M. White 18 June, 2019
						else
						{
							//Set this so that any changes to the map the User makes flags that
							//something has changed and protects against loss of work - M. White 13 May, 2019
							_StillEditing = true;
							XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + _ptCursor.x;
							YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + _ptCursor.y;
							switch(_SideBarMenuIndex)
							{
							case edMC_Cities:
								switch(_MAPVIEW)
								{
								case SQR_Map:	_TactMap[XMod][YMod].SetCity(_EditingTarget1);	break;
								case HEX_Map01:
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetCity(_EditingTarget1);
									else										_TactMap[XMod][YMod].SetCity(_EditingTarget1);
									break;
								};
								break;
							case edMC_Coastal:
								switch(_MAPVIEW)
								{
								case SQR_Map:
									_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
									_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
									break;
								case HEX_Map01:
									//Targetting has to be reversed calculated from cursor so that data
									//will point to the correct array index - M. White 9 May, 2019
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))
									{
										_TactMap[XMod + 1][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod + 1][YMod].SetCoastY(_EditingTarget2);
									}
									else
									{
										_TactMap[XMod][YMod].SetCoastX(_EditingTarget1);
										_TactMap[XMod][YMod].SetCoastY(_EditingTarget2);
									}
									break;
								};
								break;
							case edMC_Forests:
								switch(_MAPVIEW)
								{
								case SQR_Map:	_TactMap[XMod][YMod].SetForest(_EditingTarget1);		break;
								case HEX_Map01:
									if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetForest(_EditingTarget1);
									else										_TactMap[XMod][YMod].SetForest(_EditingTarget1);
									break;
								};
								break;
							case edMC_RiverRoads:
								switch(_MAPVIEW)
								{
									case SQR_Map:	_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);		break;
									case HEX_Map01:
										if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetRoadRiver(_EditingTarget1);
										else										_TactMap[XMod][YMod].SetRoadRiver(_EditingTarget1);
										break;
								};
								break;
							case edMC_Terrain://Terrain
								//Temporaily setting value to match desired graphic in _bmp - M. White 25 May, 2019
								if(_EditingTarget1 == -1) _EditingTarget1 = 11;
								switch(_MAPVIEW)
								{
								case SQR_Map:
									if(_Dispersion == true)
									{
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);	//Center
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Right
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);		//Right
										if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Right
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
											_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-Left
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
											_TactMap[XMod - 1][YMod + 0].SetBG(_EditingTarget1);		//Left
										if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Top-Left
										if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
											_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Top
									}
									else
									{
										if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
											_TactMap[XMod][YMod].SetBG(_EditingTarget1);
									}
									break;
								case HEX_Map01:
									if(_ptCursor.y & 1)
									{
										if(_Dispersion == true)
										{
											if(_TileWalkerY & 1)
											{
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);	//Center Tile
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 2].SetBG(_EditingTarget1);	//Up
											}
											else
											{
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);		//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);		//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);		//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
											}
										}
										else
										{
											if(_TileWalkerY & 1)
											{
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 0].SetBG(_EditingTarget1);
											}
											else
											{
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
											}
										}
									}
									else
									{
										if(_Dispersion == true)
										{
											if(_TileWalkerY & 1)
											{
												if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
													_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 1) >= _MapLimitL && (XMod + 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 1][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) < _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);		//Up
											}
											else
											{
												if(XMod >= _MapLimitL && XMod <= _MapLimitR && YMod >= _MapLimitT && YMod <= _MapLimitB)
													_TactMap[XMod][YMod].SetBG(_EditingTarget1);			//Center Tile...
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 1].SetBG(_EditingTarget1);	//Up-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 1].SetBG(_EditingTarget1);	//Down-right
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 2) >= _MapLimitT && (YMod + 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod + 2].SetBG(_EditingTarget1);	//Down
												if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod + 1) >= _MapLimitT && (YMod + 1) <= _MapLimitB)
													_TactMap[XMod - 1][YMod + 1].SetBG(_EditingTarget1);	//Down-left
												if((XMod - 1) >= _MapLimitL && (XMod - 1) <= _MapLimitR && (YMod - 1) >= _MapLimitT && (YMod - 1) <= _MapLimitB)
													_TactMap[XMod - 1][YMod - 1].SetBG(_EditingTarget1);	//Up-left
												if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod - 2) >= _MapLimitT && (YMod - 2) <= _MapLimitB)
													_TactMap[XMod + 0][YMod - 2].SetBG(_EditingTarget1);	//Up
											}
										}
										else
										{
											//Test limits before assigning - M. White 9 May, 2019
											if((XMod + 0) >= _MapLimitL && (XMod + 0) <= _MapLimitR && (YMod + 0) >= _MapLimitT && (YMod + 0) <= _MapLimitB)
												_TactMap[XMod + 0][YMod + 0].SetBG(_EditingTarget1);
										}
									}
									break;
								case edMC_walls001:
									switch(_MAPVIEW)
									{
									case SQR_Map:	_TactMap[XMod][YMod].SetWall(_EditingTarget1);	break;
								//	case HEX_Map01:
								//		if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetWall(_EditingTarget1);
								//		else										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
								//		break;
									};
									break;
								};
								if(_EditingTarget1 == 11) _EditingTarget1 = -1;//Reset to the test value - M. White 5 June, 2019
								break;
							case edMC_walls001:
								switch(_MAPVIEW)
								{
								case SQR_Map:
									_TactMap[XMod][YMod].SetWall(_EditingTarget1);
									break;
							//	case HEX_Map01:
							//		if((_TileWalkerY & 1) && (_ptCursor.y & 1))	_TactMap[XMod + 1][YMod].SetWall(_EditingTarget1);
							//		else										_TactMap[XMod][YMod].SetWall(_EditingTarget1);
							//		break;
								};
								break;
							};//End: switch()
							GetTacticalMapData(_MAPVIEW);//Reload map data so it can be rendered - M. White 19 June
							_paintSomething = true;
							_paintWholeScrn	= true;
						}//End: else
					}//End: if(_edIntLinking == false)
					if(_SideBarMenuIndex == edMC_Monsters)
					{
						if		(_MenuScrUpDwn[0].DidItHit(X, Y) == true)
						{
							if(_EditingTarget1 > 0)				_EditingTarget1--;
							else								_EditingTarget1 = (MAXMONS - 1);
							Percent = (_EditingTarget1 / double(MAXMONS));
							_intHorSlideLocation = _RectHorSlidePer.left + 
								int((_RectHorSlidePer.right - _RectHorSlidePer.left) * double(Percent));
						}
						else if	(_MenuScrUpDwn[1].DidItHit(X, Y) == true)
						{
							if(_EditingTarget1 < (MAXMONS - 1)) _EditingTarget1++;
							else								_EditingTarget1 = 0;
							Percent = (_EditingTarget1 / double(MAXMONS));
							_intHorSlideLocation = _RectHorSlidePer.left + 
								int((_RectHorSlidePer.right - _RectHorSlidePer.left) * double(Percent));
						}
					}//End: if(_SideBarMenuIndex == edMC_Monsters)
				}
			}
			if(_Buttons			!= NULL)
			{
				//These buttons were not put into a loop because we did not want to
				//iterate through the whole list at this point...
				if		(_Buttons[edMapSlideUp].DidItHit(X, Y)		== true)
				{
					if(_TileWalkerY > (_MapLimitT + 4))	_TileWalkerY -= 4;
					else								_TileWalkerY = _MapLimitT;
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
				else if	(_Buttons[edMapSlideDown].DidItHit(X, Y)	== true)
				{
					if(_TileWalkerY < (_MapLimitB - 4)) _TileWalkerY += 4;
					else								_TileWalkerY = _MapLimitB;
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
				else if	(_Buttons[edMapSlideLeft].DidItHit(X, Y)	== true)
				{
					if(_TileWalkerX > (_MapLimitL + 4)) _TileWalkerX -= 4;
					else								_TileWalkerX = _MapLimitL;
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
				else if	(_Buttons[edMapSlideRight].DidItHit(X, Y)	== true)
				{
					if(_TileWalkerX < (_MapLimitR - 4)) _TileWalkerX += 4;
					else								_TileWalkerX = _MapLimitR;
					GetTacticalMapData(_MAPVIEW);
					//Cleans up slide bars - M. White 9 May, 2019
					_paintSomething	= true;
					_paintWholeScrn	= true;
				}
			}
			if(_TheWizard		!= NULL)
			{
				if(X >= _TheWizard->WizLocation.left && X < _TheWizard->WizLocation.right && 
				   Y >= _TheWizard->WizLocation.top  && Y < _TheWizard->WizLocation.bottom - 16)
				{
					_TheWizard->Move(
						X - int((_TheWizard->WizLocation.right - _TheWizard->WizLocation.left) * 0.50), 
						Y - int((_TheWizard->WizLocation.bottom - _TheWizard->WizLocation.top) * 0.25));
				}				//Targeting the side bar background up button
			}
			if(_MenuScrUpDwn	!= NULL)
			{
				for(i = 0; i < 2; i++)
					if(_MenuScrUpDwn[i].DidItHit(X, Y) == true)
					{
						switch(i)
						{
						case 0:		if(_ScrollIndex > 0) _ScrollIndex--;	break;
						case 1:		_ScrollIndex++;							break;
						}
						_paintSomething		= true;
						_paintWholeScrn		= true;
					}
			}
			if(_WorldSceneUpDwn	!= NULL)
			{
				for(i = 0; i < 2; i++)
					if(_WorldSceneUpDwn[i].DidItHit(X, Y) == true)
					{
						switch(i)
						{
						case 0:		if(_ListIndex > 0) _ListIndex--;	break;
						case 1:		_ListIndex++;						break;
						};
					}
			}
		}
		break;
	case phNewGameScrn:
		if		(_MouseDelay == 0)
		{
			if		(_OpenRaceScreen	== true)
			{
				if		(X >= _RectRace.left && X <= _RectRace.right && Y >= _RectRace.top  && Y <= _RectRace.bottom)
				{
					i = int((Y - _RectRace.top) / _bmpTrimmed->GetHeight());
					switch(i)
					{
					//Case 0, just reset to its current value - M. White 12 April, 2019
					case 0:		i = _TempAvatar->GetRace();	break;
					case 1:		i = startDwarf;				break;
					case 2:		i = startElf;				break;
					case 3:		i = startGnome;				break;
					case 4:		i = startHalfElf;			break;
					case 5:		i = startHalfling;			break;
					case 6:		i = startHuman;				break;
					};
					if(i >= 0 && i < MAX_startRACES) { _TempAvatar->SetRace(i); _TempAvatar->ResetStartingStats(); }
					//Reset the RaceRect to enlarge to needed size
					SetRect(&_RectRace, _RectRace.left, _RectRace.top, _RectRace.right, _RectRace.top + _bmpTrimmed->GetHeight());
					_OpenRaceScreen = false; _paintSomething = true;
				}
			}
			else if (_OpenClassScreen	== true)
			{
				if		(X >= _RectClass.left && X <= _RectClass.right && Y >= (_RectClass.top + _bmpTrimmed->GetHeight()) && Y <= _RectClass.bottom)
				{
					if(_TempAvatar->GetRace() < MAX_startRACES)
					{
						i = 0;
						i = int((Y - (_RectClass.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
						i *= 2;
						if(X >= (_RectClass.left + ((_RectClass.right - _RectClass.left) / 2)))
						i += 1;
						if(i == cCustom)
						{
							MessageBox(NULL, "Custom class creation is not\noperational at this time.", "Future Developement", MB_OK);
							return;
						}
						if(ClassesAllowed[i][_TempAvatar->GetRace()] == true)
						{
							_TempAvatar->SetClassByRef(i);
							if(i == cPaladin) _TempAvatar->SetAlign(83, 83);//Lawful Good
							//Reset the RaceRect to enlarge to needed size
							SetRect(&_RectClass,
								int(_RectMenu.left + 10),
								int(_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3)),
								int(_RectMenu.left + 10) + int((_RectMenu.right - _RectMenu.left) * 0.70),
								_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3) + _bmpTrimmed->GetHeight() + 1);
							_OpenClassScreen = false;
						}
						else MessageBox(NULL, "The Race you chose is restricted from that Class", "Pick another", MB_OK);
					}
					_paintSomething = true;
				}
				//The top section where class might have been chosen already - M. White 16 April, 2019
				else if (X >= _RectClass.left && X <= _RectClass.right && Y >= _RectClass.top  && Y <= (_RectClass.top + _bmpTrimmed->GetHeight()))
				{
					if(_TempAvatar->GetRace() < MAX_startRACES) { MessageBox(NULL, "Please pick a Race first", "It's Important", MB_OK); return; }
					//Reset the RaceRect to enlarge to needed size
					SetRect(&_RectClass,
						int(_RectMenu.left + 10),
						int(_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3)),
						int(_RectMenu.left + 10) + int((_RectMenu.right - _RectMenu.left) * 0.70),
						_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3) + _bmpTrimmed->GetHeight() + 1);
					_OpenClassScreen = false;
				}
				//Modify the WeaponPros Rect to Accomodate the Avatar's picked skills - M. White 18 April, 2019
				SetRect(&_WeaponPros, _WeaponPros.left, _WeaponPros.top, _WeaponPros.right,
					_WeaponPros.top + (_TempAvatar->GetNumMaxWPslots() * _bmpTrimmed->GetHeight()));
			}
			else if	(_OpenAlignScreen	== true)
			{
				if		(X >= _RectMenu.left && X <= _RectMenu.right && Y >= _RectMenu.top  && Y <= _RectMenu.bottom)
				{
					i = int((Y - _RectAlign.top) / _bmpTrimmed->GetHeight());
					if((_TempAvatar->GetClassRef() == cPaladin) && (i != 1))
					{
						MessageBox(NULL, "Paladins are required to be Lawful Good", "Required", MB_OK);
						_TempAvatar->SetAlign(83, 83);//Lawful Good
					}
					else
					{
						switch(i)
						{
						case 0:		/* Do nothing - leave Alignment as is - M. White 17 April, 2019 */	break;
						case 1:		_TempAvatar->SetAlign(83, 83);	break;//Lawful Good
						case 2:		_TempAvatar->SetAlign(83, 50);	break;//Lawful Neutral
						case 3:		_TempAvatar->SetAlign(83, 16);	break;//Lawful Evil
						case 4:		_TempAvatar->SetAlign(50, 83);	break;//Neutral Good
						case 5:		_TempAvatar->SetAlign(50, 50);	break;//Neutral
						case 6:		_TempAvatar->SetAlign(50, 16);	break;//Neutral Evil
						case 7:		_TempAvatar->SetAlign(16, 83);	break;//Chaotic Good
						case 8:		_TempAvatar->SetAlign(16, 50);	break;//Chaotic Neutral
						case 9:		_TempAvatar->SetAlign(16, 16);	break;//Chaotic Evil
						};
					}
				}
				_OpenAlignScreen = false;
				SetRect(&_RectAlign, _RectMenu.left + 10, _RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 4),
						_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.70), 
						_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 4) + _bmpTrimmed->GetHeight() + 1);
			}
			else if	(_OpenWeapons		== true)
			{
				//Detecting bottom by counting from the top as we do not know how large a User's Monitor is - M. White 25 May, 2019
				if(Y >= (_WeaponPros.top + _bmpTrimmed->GetHeight()) && Y <= (_WeaponPros.top + (_bmpTrimmed->GetHeight() * 22)))
				{
					//Detect Left Column
					if		(X > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.05))	&& 
							 X < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.37)))
					{
						//Calc how far the User is point down - M. White 10 April, 2019
						y = int((Y - (_WeaponPros.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
					}
					//Detect Center Column
					else if	(X > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.38))	&& 
							 X < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.70)))
					{
						//Calc how far the User is point down - M. White 10 April, 2019
						y = int((Y - (_WeaponPros.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
						y += 21;
					}
					//Detect Right Column
					else if	(X > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.71))	&& 
							 X < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.99)))
					{
						//Calc how far the User is point down - M. White 10 April, 2019
						y = int((Y - (_WeaponPros.top + _bmpTrimmed->GetHeight())) / _bmpTrimmed->GetHeight());
						y += 42;
					}
					//Assign -1 to use as a test - M. White 25 May, 2019
					else y = -1;
					if(y > -1)
					{
						if(WeaponsAllowed[y][_TempAvatar->GetClass(0)] == true ||
						   WeaponsAllowed[y][_TempAvatar->GetClass(1)] == true ||
						   WeaponsAllowed[y][_TempAvatar->GetClass(2)] == true ||
						   WeaponsAllowed[y][_TempAvatar->GetClass(3)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y) == 0) _TempAvatar->AssignWeaponSlot(y, _TempAvatar->GetWPSlotCost(y) + 1);
							//If the User has already picked a weapon... 
							else if (_TempAvatar->GetWPSlotCost(y) == 1)
							{
								//We check to see if they are a single-class Fighter - M. White 20 April, 2019
								if(_TempAvatar->GetClass(0) == cFighter && _TempAvatar->GetClass(1) == -1 &&
								    _TempAvatar->GetClass(2) == -1       && _TempAvatar->GetClass(3) == -1)
								{
									_TempAvatar->AssignWeaponSlot(y, _TempAvatar->GetWPSlotCost(y) + 1);
								}
								else MessageBox(NULL, "Only Single-Classed Fighters\ncan Specialize in a weapon.", "Sorry", MB_OK);
							}
							else if (_TempAvatar->GetWPSlotCost(y) == 2) MessageBox(NULL, "You already Specialized in this weapon.", "Sorry", MB_OK);
						}
						//We have to leave the Rect open until the User uses all of their
						//weapon slot allocation - M. White 18 April, 2019
						if(_TempAvatar->GetNumWPsUsed() == _TempAvatar->GetNumMaxWPslots())
						{
							_OpenWeapons = false;
							switch(_MonitorCat)
							{
							case 2:
								SetRect(&_WeaponPros,
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 9.0),
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 9.0) + _bmpTrimmed->GetHeight() + 1);
								break;
							case 1:
								//Reset the rect back to Accomodate the skills - M. White 18 April, 2019
								SetRect(&_WeaponPros,
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + 
										(_TempAvatar->GetNumMaxWPslots() * _bmpTrimmed->GetHeight()) + 1);
								break;
							case 0:
								//Reset the rect back to Accomodate the skills - M. White 18 April, 2019
								SetRect(&_WeaponPros,
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
									_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
									_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + 
										(_TempAvatar->GetNumMaxWPslots() * _bmpTrimmed->GetHeight()) + 1);
								break;
							};
						}
					}
				}//End: if(_YMouse >=  && _YMouse <= )
				//The Reset Button usable only if y is -1 - M. White 25 May, 2019
				else if	(_tmpSingleBtn->DidItHit(X, Y) == true)	_TempAvatar->ResetWPsUsed();
			}
			else if	(_OpenStartTown		== true)
			{
				if(X >= _RectStartTown.left && X <= _RectStartTown.right - 5 &&
				//Adding height of trimmed to avoid the title bar - M. White 29 July 2019
				   Y >= (_RectStartTown.top	+ (_bmpTrimmed->GetHeight() * 2)) && Y <= _RectStartTown.bottom)
				{
					i = int(((Y - (_RectStartTown.top + (_bmpTrimmed->GetHeight() * 2))) / _bmpTrimmed->GetHeight())) + _ScrollIndex;
					if(i < int(_startPoints.length()))
					{
						_startPoints.getNodes(i, tmpStart);
						_TempAvatar->SetStartTown(tmpStart.GetNickName(), tmpStart.GetScene());
						_TempAvatar->SetDungeonX(tmpStart.GetX());
						_TempAvatar->SetDungeonY(tmpStart.GetY());
						_OpenStartTown = false;
						switch(_MonitorCat)
						{
						case 2:
							SetRect(&_RectStartTown, 
								_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
								_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
							break;
						case 1:
							SetRect(&_RectStartTown, 
								_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
								_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
							break;
						case 0:
							SetRect(&_RectStartTown, 
								_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
								_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
							break;
						};
					}
				}
			}
			else if	(_ShowPickAvatar	== true)
			{
				testInt = -1;
				SetRect(&rct,
					_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.02),
					_rctPickAvatar.top  + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02),
					_Buttons[ngPortLeft].GetX() - _Buttons[ngPortLeft].GetWidth(),
					_rctPickAvatar.top + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02) + (_bmpTrimmed->GetHeight() * _showNumAvatars));

				//Target the main field to get an index to an Avatar to load
				if		(_XMouse >= rct.left + 4 && _XMouse < rct.right - 4 && _YMouse >= rct.top && _YMouse < rct.bottom)
				{
					testInt = VRD(rct.top, _YMouse, _bmpTrimmed->GetHeight());
				}
				//Verticle scroll bar when it is actively shown
				else if	(_XMouse >= _RectHorSlidePer.left && _XMouse <= _RectHorSlidePer.right && _YMouse >= _RectHorSlidePer.top && _YMouse <= _RectHorSlidePer.bottom)
				{
					if(_numAvatarRef > _showNumAvatars)
					{
						YMod = _numAvatarRef - _showNumAvatars;					//Find out how many there are over what is to be shown...
						if(YMod == 1)
						{
							if(_intHorSlideLocation == (_RectHorSlidePer.bottom - int(_Buttons[ngPortLeft].GetHeight() * 0.50)))
							{
								_intHorSlideLocation = (_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
								_pickAvScrollIndex = 0;
							}
							else
							{
								_intHorSlideLocation = (_RectHorSlidePer.bottom - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
								_pickAvScrollIndex = 1;
							}
						}
						else
						{
							//Do some math...
							i = YMod + 1;
							YMod = VRD(_RectHorSlidePer.top, _YMouse, i);
							_pickAvScrollIndex = YMod;
							Percent = (_YMouse - _RectHorSlidePer.top) / double(_RectHorSlidePer.bottom - _RectHorSlidePer.top);
							_intHorSlideLocation = 
								_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50) + (YMod * i);
						}
					}
				}
				//The up (left) and down (right) buttons to scroll through available Avatars
				else if	(_Buttons[ngPortLeft].DidItHit(_XMouse, _YMouse) == true)
				{
					if(_pickAvScrollIndex > 0)
					{
						_pickAvScrollIndex--;
						YMod = _numAvatarRef - _showNumAvatars;					//Find out how many there are over what is to be shown...
						if(YMod == 1) _intHorSlideLocation = (_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
						else
						{
							Percent = _pickAvScrollIndex / double(YMod);
							_intHorSlideLocation = 
								_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50) + 
								int((_RectHorSlidePer.bottom - _RectHorSlidePer.top) * double(Percent));
						}
						_paintSomething = true;
					}
				}
				else if	(_Buttons[ngPortRight].DidItHit(_XMouse, _YMouse) == true)
				{
					if((_pickAvScrollIndex + _showNumAvatars) < _numAvatarRef)
					{
						_pickAvScrollIndex++;
						YMod = _numAvatarRef - _showNumAvatars;					//Find out how many there are over what is to be shown...
						if(YMod == 1) _intHorSlideLocation = (_RectHorSlidePer.bottom - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
						else
						{
							Percent = _pickAvScrollIndex / double(YMod);
							_intHorSlideLocation = 
								_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50) + 
								int((_RectHorSlidePer.bottom - _RectHorSlidePer.top) * double(Percent));
						}
						_paintSomething = true;
					}
				}
				//Testing the value to see if it's good data...
				if(testInt >= 0 && (testInt + _pickAvScrollIndex) < _numAvatarRef)
				{
					_ShowPickAvatar = false;
					//Reset the buttons...
					switch(_MonitorCat)
					{
					case 2:
						_Buttons[ngPortLeft].SetProperties(
							_RectPort.left - 14, _RectPort.top + int(_PortraitsH * 0.50) - 12, 14, 25, 0,  78, 14,  78);
						_Buttons[ngPortRight].SetProperties(
							_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) - 12, 14, 25, 0, 103, 14, 103); 
						break;
					case 1:
						_Buttons[ngPortLeft].SetProperties(
							_RectPort.left - 15, _RectPort.top + int(_PortraitsH * 0.50) -  8, 15, 16, 0,  52, 15,  52);
						_Buttons[ngPortRight].SetProperties(
							_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) -  8, 15, 16, 0,  68, 15,  68); 
						break;
					case 0:
						_Buttons[ngPortLeft].SetProperties(
							_RectPort.left -  8, _RectPort.top + int(_PortraitsH * 0.50) -  8,  8,  8, 0,  24,  8,  24);
						_Buttons[ngPortRight].SetProperties(
							_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) -  8,  8,  8, 0,  32,  8,  32); 
						break;
					};
					//Need to get the Avatar UI to be able to load it from file...
					if		(_numAvatarRef > 1)		i = _AvatarRef[testInt].UniqueID;
					else if	(_numAvatarRef == 1)	i = _AvatarRef->UniqueID;
					LoadBasicAvatar(i);//Load the Avatar
					//Necessary to do this to force the User to pick a starting town...
					_TempAvatar->SetStartTown("Pick Town", "");//No value will reset
					//Reset the Weapons rect
					SetRect(&_WeaponPros, _WeaponPros.left, _WeaponPros.top, _WeaponPros.right,
							 _WeaponPros.top + (_TempAvatar->GetNumMaxWPslots() * _bmpTrimmed->GetHeight()));
				}
			}
			//Continue with any additional screens that are open - M. White 16 April, 2019
			else
			{
				//Loop through the buttons - M. White 17 April, 2019
				for(i = 0; i < MAX_ngOPTIONS; i++)
				{
					if(_Buttons[i].DidItHit(X, Y) == true && _Buttons[i].GetIsActive() == true)
					{
						switch(i)
						{
						case ngQuit:
							delete _TempAvatar;
							_TempAvatar = NULL;
							_GAMEPHASE = phMenuScrn;
							CreateButtons(_GAMEPHASE);
							break;
						case ngStart:
							if(_intStatReserve == 0)
							{
								if(_TempAvatar->GetStartMapName() != "Pick_Town")
								{
									//Calculate starting HPs before proceeding
									//Assigning 'max' hp per class at 1st level
									for(y = 0; y < _TempAvatar->GetNumClass(); y++)
									{
										switch(_TempAvatar->GetClass(y))
										{
										case cZeroLvl: case cFighter: case cPaladin: case cRanger:
											//int index, int Level, int value
											_TempAvatar->SetHPRoll(y, 0, 10);
											//Add Con Bonus
											_TempAvatar->SetHP(_TempAvatar->GetHP() + _CONData[ConHpA][_TempAvatar->GetSCon() - 1]);
											break;
										case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
										case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
											_TempAvatar->SetHPRoll(y, 0, 4);
											if(_TempAvatar->GetSCon() > 15) _TempAvatar->SetHP(_TempAvatar->GetHP() + 2);
											else _TempAvatar->SetHP(_TempAvatar->GetHP() + _CONData[ConHpA][_TempAvatar->GetSCon() - 1]);
											break;
										case cCleric: case cDruid:
											_TempAvatar->SetHPRoll(y, 0, 8);
											if(_TempAvatar->GetSCon() > 15) _TempAvatar->SetHP(_TempAvatar->GetHP() + 2);
											else _TempAvatar->SetHP(_TempAvatar->GetHP() + _CONData[ConHpA][_TempAvatar->GetSCon() - 1]);
											break;
										case cThief: case cBard: case cNinja:
											_TempAvatar->SetHPRoll(y, 0, 6);
											if(_TempAvatar->GetSCon() > 15) _TempAvatar->SetHP(_TempAvatar->GetHP() + 2);
											else _TempAvatar->SetHP(_TempAvatar->GetHP() + _CONData[ConHpA][_TempAvatar->GetSCon() - 1]);
											break;
										};
									}
									//Con score modified within the Avatar Class
									//So, set the current hp to match here...
									_TempAvatar->SetCurHP(_TempAvatar->GetHP());

									//THIS IS TEMP: Set an AC until future upgrade
									switch(_TempAvatar->GetClass(0))
									{
										case cZeroLvl: case cFighter: case cPaladin: case cRanger:
											//-1 to access proper location in the array
											_TempAvatar->SetAC(6 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
											break;
										case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
										case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
											//-1 to access proper location in the array
											_TempAvatar->SetAC(9 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
											break;
										case cCleric: case cDruid:
											//-1 to access proper location in the array
											_TempAvatar->SetAC(8 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
											break;
										case cThief: case cBard: case cNinja:
											//-1 to access proper location in the array
											_TempAvatar->SetAC(7 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
											break;
										default: MessageBox(NULL, "Error AC", "K", MB_OK);
									};
									if(_TempAvatar->GetUI() == -1)
									{
										//Force an Export on the Avatar as it will be used as a 
										//'base' set of data each time a Campaign is reloaded
										if		(_numAvatarRef == 0)
										{
											_AvatarRef = new AvFileRef(); _TempAvatar->SetUI(_numAvatarRef);
											_AvatarRef->UniqueID		= _TempAvatar->GetUI();
											_AvatarRef->AvDisplayName	= _TempAvatar->GetFName();
											//Clean up the name in case...
											for(i = 0; i < int(_AvatarRef->AvDisplayName.length()); i++)
												if(_AvatarRef->AvDisplayName[i] == ' ') _AvatarRef->AvDisplayName[i] = '_';
											//Save the specific Avatar
											SaveBasicAvatar(_TempAvatar->GetUI());
											_numAvatarRef++;
											//Save the created (modified) list back to file
											SaveBaseAvatarList();
										}
										else if	(_numAvatarRef == 1)
										{
											//Check the other Ref to see what it's unique ID is (or is not)...
											y = _AvatarRef->UniqueID;
											if(y == 0)	_TempAvatar->SetUI(1);
											else		_TempAvatar->SetUI(0);
											_AvRefSwap = new AvFileRef[2];
											_AvRefSwap[0].UniqueID		= _AvatarRef->UniqueID;
											_AvRefSwap[0].AvDisplayName	= _AvatarRef->AvDisplayName;
											_AvRefSwap[1].UniqueID		= _TempAvatar->GetUI();
											_AvRefSwap[1].AvDisplayName	= _TempAvatar->GetFName();
											for(i = 0; i < int(_AvRefSwap[1].AvDisplayName.length()); i++)
												if(_AvRefSwap[1].AvDisplayName[i] == ' ') _AvRefSwap[1].AvDisplayName[i] = '_';
											delete _AvatarRef; _AvatarRef = NULL;
											_numAvatarRef = 2;
											_AvatarRef = new AvFileRef[_numAvatarRef];
											for(i = 0; i < _numAvatarRef; i++)
											{
												_AvatarRef[i].AvDisplayName = _AvRefSwap[i].AvDisplayName;
												_AvatarRef[i].UniqueID		= _AvRefSwap[i].UniqueID;
											}
											delete [] _AvRefSwap;
											//Order the (short) list if not in order
											if(_AvatarRef[0].UniqueID > _AvatarRef[1].UniqueID)
											{
												tmpLocalRef.UniqueID		= _AvatarRef[1].UniqueID;
												tmpLocalRef.AvDisplayName	= _AvatarRef[1].AvDisplayName;

												_AvatarRef[1].UniqueID		= _AvatarRef[0].UniqueID;
												_AvatarRef[1].AvDisplayName	= _AvatarRef[0].AvDisplayName;

												_AvatarRef[0].UniqueID		= tmpLocalRef.UniqueID;
												_AvatarRef[0].AvDisplayName	= tmpLocalRef.AvDisplayName;
											}
										}
										else
										{
											//Find an instance of where a Unique ID does not match any in 
											//the array index and assign it in the 'vacant' position
											Found = false;
											for(i = 0; i < _numAvatarRef; i++)
												if(i != _AvatarRef[i].UniqueID)
												{ y = i; Found = true; _TempAvatar->SetUI(y); break; }
											if(Found == false) _TempAvatar->SetUI(_numAvatarRef);
											_numAvatarRef++;
											_AvRefSwap = new AvFileRef[_numAvatarRef];
											//Copy the data
											for(i = 0; i < _numAvatarRef - 1; i++)
											{
												_AvRefSwap[i].UniqueID		= _AvatarRef[i].UniqueID;
												_AvRefSwap[i].AvDisplayName	= _AvatarRef[i].AvDisplayName;
											}
											//Assign data to the last position
											_AvRefSwap[_numAvatarRef - 1].UniqueID		= _TempAvatar->GetUI();
											_AvRefSwap[_numAvatarRef - 1].AvDisplayName	= _TempAvatar->GetFName();
											//Clean up any spaces in strings
											for(i = 0; i < int(_AvRefSwap[_numAvatarRef - 1].AvDisplayName.length()); i++)
												if(_AvRefSwap[_numAvatarRef - 1].AvDisplayName[i] == ' ')
													_AvRefSwap[_numAvatarRef - 1].AvDisplayName[i] = '_';
											//Rebuild the variable
											delete [] _AvatarRef;
											_AvatarRef = NULL;
											_AvatarRef = new AvFileRef[_numAvatarRef];
											//Copy new data into the primary buffer
											for(i = 0; i < _numAvatarRef; i++)
											{
												_AvatarRef[i].UniqueID		= _AvRefSwap[i].UniqueID;
												_AvatarRef[i].AvDisplayName	= _AvRefSwap[i].AvDisplayName;
											}
											//get ride of swap-buffer
											delete [] _AvRefSwap;
											_AvRefSwap = NULL;
											//Sort the new list
											for(y = 0; y < _numAvatarRef; y++)
												for(x = 0; x < _numAvatarRef; x++)
												{
													if(_AvatarRef[x].UniqueID > _AvatarRef[y].UniqueID)
													{
														tmpLocalRef.UniqueID		= _AvatarRef[y].UniqueID;
														tmpLocalRef.AvDisplayName	= _AvatarRef[y].AvDisplayName;
														_AvatarRef[y].UniqueID		= _AvatarRef[x].UniqueID;
														_AvatarRef[y].AvDisplayName	= _AvatarRef[x].AvDisplayName;
														_AvatarRef[x].UniqueID		= tmpLocalRef.UniqueID;
														_AvatarRef[x].AvDisplayName	= tmpLocalRef.AvDisplayName;
													}
												}
										}
										if(_TempAvatar->GetSStr() < 18 &&
											(_TempAvatar->GetClass(0) != cFighter &&
											 _TempAvatar->GetClass(0) != cPaladin && 
											 _TempAvatar->GetClass(0) != cRanger)) _TempAvatar->SetSStr(0);
										SaveBaseAvatarList();					//Save the list for protection
										SaveBasicAvatar(_TempAvatar->GetUI());	//Save the new Avatar in case Use doesn't start play immediately
									}
									_TempAvatar->SetRaceIsMonster(false);
									_TileWalkerX = _TempAvatar->GetDungeonX();
									_TileWalkerY = _TempAvatar->GetDungeonY();

									//Assigning these three has to happen before the limits....
									_GAMEPHASE	= phPlayScrn; CreateButtons(_GAMEPHASE); _MAPVIEW = SQR_Map;
									_MapLimitL	= _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitT	= _PlayWin[_MAPVIEW].GetCentRow();
									_MapLimitR	= _TactMapW - _PlayWin[_MAPVIEW].GetCentCol();
									_MapLimitB	= _TactMapH - _PlayWin[_MAPVIEW].GetCentRow();

									if(_ActiveCampaign != NULL) { delete _ActiveCampaign; _ActiveCampaign = NULL; }
									if(_NumCampaigns > 0)
									{
										if(_NumCampaigns > 1)
										{
											//Use this to hold the old data while rebuilding the array
											_ActiveCampaign = new Campaign[_NumCampaigns];
											for(i = 0; i < _NumCampaigns; i++)
											{
												_ActiveCampaign[i].SetCampaignID(_CampaignsAvail[i].GetCampaignID());
												_ActiveCampaign[i].SetAvatarID(_CampaignsAvail[i].GetAvatarID());
												_ActiveCampaign[i].SetNickName(_CampaignsAvail[i].GetNickName());
											}
											delete [] _CampaignsAvail; _CampaignsAvail = NULL;
											_NumCampaigns++;
											_CampaignsAvail = new Campaign[_NumCampaigns];
											for(i = 0; i < _NumCampaigns - 1; i++)
											{
												_CampaignsAvail[i].SetCampaignID(_ActiveCampaign[i].GetCampaignID());
												_CampaignsAvail[i].SetAvatarID(_ActiveCampaign[i].GetAvatarID());
												_CampaignsAvail[i].SetNickName(_ActiveCampaign[i].GetNickName());
											}
											delete [] _ActiveCampaign; _ActiveCampaign = NULL;
											_ActiveCampaign = new Campaign();
											_ActiveCampaign->SetCampaignID(_NumCampaigns);
											_ActiveCampaign->SetAvatarID(_TempAvatar->GetUI());
											disposable = _TempAvatar->GetFName();
											for(i = 0; i < int(disposable.length()); i++) 
												if(disposable[i] == ' ') disposable[i] = '_';
											_ActiveCampaign->SetNickName(disposable);
											_CampaignsAvail[_NumCampaigns - 1].SetCampaignID(_ActiveCampaign->GetCampaignID());
											_CampaignsAvail[_NumCampaigns - 1].SetAvatarID(_ActiveCampaign->GetAvatarID());
											_CampaignsAvail[_NumCampaigns - 1].SetNickName(_ActiveCampaign->GetNickName());
										}
										else
										{
											_ActiveCampaign = new Campaign();
											//Copy the saved campaign data
											_ActiveCampaign->SetCampaignID(_CampaignsAvail->GetCampaignID());
											_ActiveCampaign->SetAvatarID(_CampaignsAvail->GetAvatarID());
											_ActiveCampaign->SetNickName(_CampaignsAvail->GetNickName());

											//Rebuild the campaign pointer and make it an array
											if(_NumCampaigns > 1)	delete [] _CampaignsAvail;
											else					delete _CampaignsAvail;
											_CampaignsAvail = NULL;

											_NumCampaigns++;

											_CampaignsAvail = new Campaign[_NumCampaigns];
											//Copy back the saved data to the first position
											_CampaignsAvail[0].SetCampaignID(_ActiveCampaign->GetCampaignID());
											_CampaignsAvail[0].SetAvatarID(_ActiveCampaign->GetAvatarID());
											_CampaignsAvail[0].SetNickName(_ActiveCampaign->GetNickName());
											for(i = 0; i < int(_ActiveCampaign->MapList.length()); i++)
												_CampaignsAvail[0].AddMapVisited(_ActiveCampaign->GetData(i));
											//Start building the active campaign data
											_ActiveCampaign->Reset();
											_ActiveCampaign->SetCampaignID(1);
											_ActiveCampaign->SetAvatarID(_TempAvatar->GetUI());
											disposable = _TempAvatar->GetFName();
											for(i = 0; i < int(disposable.length()); i++) if(disposable[i] == ' ') disposable[i] = '_';
											_ActiveCampaign->SetNickName(disposable);
											//Add the data to the array of available campaigns
											_CampaignsAvail[1].SetCampaignID(_ActiveCampaign->GetCampaignID());
											_CampaignsAvail[1].SetAvatarID(_ActiveCampaign->GetAvatarID());
											_CampaignsAvail[1].SetNickName(_ActiveCampaign->GetNickName());
										}
									}
									else
									{
										//Set up a single Campaign listing...
										_NumCampaigns = 1;
										_CampaignsAvail = new Campaign();
										_CampaignsAvail->SetCampaignID(0);
										_CampaignsAvail->SetAvatarID(_TempAvatar->GetUI());
										disposable = _TempAvatar->GetFName();
										for(i = 0; i < int(disposable.length()); i++)
											if(disposable[i] == ' ') disposable[i] = '_';
										_CampaignsAvail->SetNickName(disposable);	
										_ActiveCampaign = new Campaign();
										//Set Active
										_ActiveCampaign->SetCampaignID(0);
										_ActiveCampaign->SetAvatarID(_TempAvatar->GetUI());
										_ActiveCampaign->SetNickName(disposable);
										_ActiveCampaign->AddMapVisited(_TempAvatar->GetStartMapName());
									}
									//Save the (new) campaign 
									SaveCampaignList();
									//This does not run in a separate thread, so the data it is saving 
									//won't be walked over by any future threads about to be opened...
									SaveGame(_ActiveCampaign->GetCampaignID());

									//Set up Loading of Map
									_FileNameMap	= "data\\s\\";
									_FileNameMap	+= _TempAvatar->GetStartMapName();
									_FileNameMap	+= ".dat";
									for(i = 0; i < int(_FileNameMap.length()); i++) if(_FileNameMap[i] == ' ') _FileNameMap[i] = '_';
									_myHandleOne	= CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);

									//Set up loading of FOW
									_FileNameFOW	= "data\\s\\";
									_FileNameFOW	+= _TempAvatar->GetStartMapName();
									_FileNameFOW	+= "_fow.dat";
									for(i = 0; i < int(_FileNameFOW.length()); i++) if(_FileNameFOW[i] == ' ') _FileNameFOW[i] = '_';
									_myHandleTwo	= CreateThread(0, 0, LoadFOW, 0, 0, &_myThreadIDTwo);

									//Set up loading Mobs
									_FileNameMobs	= "data\\s\\";
									_FileNameMobs	+= _TempAvatar->GetStartMapName();
									_FileNameMobs  += "_mob.dat";
									for(i = 0; i < int(_FileNameMobs.length()); i++) if(_FileNameMobs[i] == ' ') _FileNameMobs[i] = '_';
									_myHandleThr	= CreateThread(0, 0, LoadMobList, 0, 0, &_myThreadIDThr);

									//Set up loading Links
									_FileNameLinks	= "data\\s\\";
									_FileNameLinks	+= _TempAvatar->GetStartMapName();
									_FileNameLinks += "_Links.dat";
									for(i = 0; i < int(_FileNameLinks.length()); i++) if(_FileNameLinks[i]	== ' ')	_FileNameLinks[i] = '_';
									_myHandleFou	= CreateThread(0, 0, LoadLinks, 0, 0, &_myThreadIDFou);

									//Initialize this here because somewhere the math is important...
									switch(_TempAvatar->GetRace())
									{
									case startHuman:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.45); break;
									case startHalfElf:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.55); break;
									case startHalfling: testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.65); break;
									case startElf:		testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.75); break;
									case startGnome:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.85); break;
									case startDwarf:	testDbl = double(_PlayWin[_MAPVIEW].GetCentRow() * 0.95); break;
									};
									for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
										for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
										{
											testInt = int(getRange(x, y, _PlayWin[_MAPVIEW].GetCentCol(), _PlayWin[_MAPVIEW].GetCentRow()));
											if		(testInt >= testDbl)				_VisLightArray[x][y] = 0;
											else if	(testInt > testDbl - 1)				_VisLightArray[x][y] = 1;
											else										_VisLightArray[x][y] = 2;
										}
									//reset where the avatar is standing...
									for(y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
										for(x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
										{
											if(_VisLightArray[x][y] == 2)
											{
												XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
												YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
												_TactMap[XMod][YMod].SetVisited(true);
											}
											_PlayWin[_MAPVIEW].PW_Buffer[x][y].SetVisited(true);
										}

									while(_bLoadMobs == true) Sleep(1);
									
									if(_MSG != NULL) { delete _MSG; _MSG = NULL; }
									//Message Box for in game messages
									_MSG = new InScreenMsg();
									_MSG->SetStartRect(
										_PlayWin[_MAPVIEW].gRectL() + _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].gRectB() - int(_bmpTrimmed->GetHeight() * 0.50),
										_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].gRectB() + int(_bmpTrimmed->GetHeight() * 0.50));
									_MSG->SetExpandBy(_bmpTrimmed->GetHeight());

									GetTacticalMapData(_MAPVIEW);

									_paintSomething		= true;
									_paintWholeScrn		= true;
								}
								else MessageBox(NULL, "You must pick a starting town", "Required", MB_OK);
							}
							else MessageBox(NULL, "You have unspent attribute points!", "Use it!", MB_OK);
							break;
						case ngExport:
							if(_intStatReserve == 0)
							{
								if(_TempAvatar->GetFName() != "Type to Create a Name")
								{
									if(_TempAvatar->GetNumMaxWPslots() == _TempAvatar->GetNumWPsUsed())
									{
										if(_TempAvatar->GetSStr() > 0)
										{
											if		(_numAvatarRef == 0)
											{
												_AvatarRef					= new AvFileRef();
												_TempAvatar->SetUI(_numAvatarRef);
												_AvatarRef->UniqueID		= _TempAvatar->GetUI();
												_AvatarRef->AvDisplayName	= _TempAvatar->GetFName();
												//Clean up the name in case...
												for(i = 0; i < int(_AvatarRef->AvDisplayName.length()); i++)
													if(_AvatarRef->AvDisplayName[i] == ' ') _AvatarRef->AvDisplayName[i] = '_';
												//Save the specific Avatar
												SaveBasicAvatar(_TempAvatar->GetUI());
												_numAvatarRef++;
												//Save the created (modified) list back to file
												SaveBaseAvatarList();
											}
											else if	(_numAvatarRef == 1)
											{
												//Check the other Ref to see what it's unique ID is (or is not)...
												y = _AvatarRef->UniqueID;
												if(y == 0)	_TempAvatar->SetUI(1);
												else		_TempAvatar->SetUI(0);
												_AvRefSwap = new AvFileRef[2];
												_AvRefSwap[0].UniqueID		= _AvatarRef->UniqueID;
												_AvRefSwap[0].AvDisplayName	= _AvatarRef->AvDisplayName;
												_AvRefSwap[1].UniqueID		= _TempAvatar->GetUI();
												_AvRefSwap[1].AvDisplayName	= _TempAvatar->GetFName();
												for(i = 0; i < int(_AvRefSwap[1].AvDisplayName.length()); i++)
													if(_AvRefSwap[1].AvDisplayName[i] == ' ') _AvRefSwap[1].AvDisplayName[i] = '_';
												delete _AvatarRef; _AvatarRef = NULL;
												_numAvatarRef = 2;
												_AvatarRef = new AvFileRef[_numAvatarRef];
												for(i = 0; i < _numAvatarRef; i++)
												{
													_AvatarRef[i].AvDisplayName = _AvRefSwap[i].AvDisplayName;
													_AvatarRef[i].UniqueID		= _AvRefSwap[i].UniqueID;
												}
												delete [] _AvRefSwap;
												//Order the (short) list if not in order
												if(_AvatarRef[0].UniqueID > _AvatarRef[1].UniqueID)
												{
													tmpLocalRef.UniqueID		= _AvatarRef[1].UniqueID;
													tmpLocalRef.AvDisplayName	= _AvatarRef[1].AvDisplayName;
													_AvatarRef[1].UniqueID		= _AvatarRef[0].UniqueID;
													_AvatarRef[1].AvDisplayName	= _AvatarRef[0].AvDisplayName;
													_AvatarRef[0].UniqueID		= tmpLocalRef.UniqueID;
													_AvatarRef[0].AvDisplayName	= tmpLocalRef.AvDisplayName;
												}
											}
											else
											{
												//Find an instance of where a Unique ID does not match any in 
												//the array index and assign it in the 'vacant' position
												Found = false;
												for(i = 0; i < _numAvatarRef; i++)
													if(i != _AvatarRef[i].UniqueID) { y = i; Found = true; _TempAvatar->SetUI(y); break; }
												if(Found == false) _TempAvatar->SetUI(_numAvatarRef);
												_numAvatarRef++;
												_AvRefSwap = new AvFileRef[_numAvatarRef];
												//Copy the data
												for(i = 0; i < _numAvatarRef - 1; i++)
												{
													_AvRefSwap[i].UniqueID		= _AvatarRef[i].UniqueID;
													_AvRefSwap[i].AvDisplayName	= _AvatarRef[i].AvDisplayName;
												}
												//Assign data to the last position
												_AvRefSwap[_numAvatarRef - 1].UniqueID		= _TempAvatar->GetUI();
												_AvRefSwap[_numAvatarRef - 1].AvDisplayName	= _TempAvatar->GetFName();
												//Clean up any spaces in strings
												for(i = 0; i < int(_AvRefSwap[_numAvatarRef - 1].AvDisplayName.length()); i++)
													if(_AvRefSwap[_numAvatarRef - 1].AvDisplayName[i] == ' ')
														_AvRefSwap[_numAvatarRef - 1].AvDisplayName[i] = '_';
												//Rebuild the variable
												delete [] _AvatarRef;
												_AvatarRef = NULL;
												_AvatarRef = new AvFileRef[_numAvatarRef];
												//Copy new data into the primary buffer
												for(i = 0; i < _numAvatarRef; i++)
												{
													_AvatarRef[i].UniqueID		= _AvRefSwap[i].UniqueID;
													_AvatarRef[i].AvDisplayName	= _AvRefSwap[i].AvDisplayName;
												}
												//get ride of swap-buffer
												delete [] _AvRefSwap;
												_AvRefSwap = NULL;
												//Sort the new list
												for(y = 0; y < _numAvatarRef; y++)
													for(x = 0; x < _numAvatarRef; x++)
													{
														if(_AvatarRef[x].UniqueID > _AvatarRef[y].UniqueID)
														{
															tmpLocalRef.UniqueID		= _AvatarRef[y].UniqueID;
															tmpLocalRef.AvDisplayName	= _AvatarRef[y].AvDisplayName;
															_AvatarRef[y].UniqueID		= _AvatarRef[x].UniqueID;
															_AvatarRef[y].AvDisplayName	= _AvatarRef[x].AvDisplayName;
															_AvatarRef[x].UniqueID		= tmpLocalRef.UniqueID;
															_AvatarRef[x].AvDisplayName	= tmpLocalRef.AvDisplayName;
														}
													}
											}
											SaveBaseAvatarList();					//Save the list for protection
											SaveBasicAvatar(_TempAvatar->GetUI());	//Save the new Avatar in case Use doesn't start play immediately
											MessageBox(NULL, "Character Saved", "Archived Starting Character", MB_OK);
										}
										else MessageBox(NULL, "You must roll your stats", "Required", MB_OK);
									}
									else MessageBox(NULL, "You have unused weapon slots", "Required", MB_OK);
								}
								else MessageBox(NULL, "Your character needs a name", "Required", MB_OK);
							}
							else MessageBox(NULL, "You can not export a character with points in reserve", "Required", MB_OK);
							break;
						case ngImport:
							if(_numAvatarRef > 0)
							{
								_ShowPickAvatar			= true;
								SetRect(&_rctPickAvatar, _RectMenu.left, _RectMenu.top, _RectMenu.right, _RectMenu.bottom);
								//Repurpose buttons for temp-use
								switch(_MonitorCat)
								{
								case 2:
									_Buttons[ngPortLeft].SetProperties (_rctPickAvatar.right - 23, _rctPickAvatar.top    + 15, 15, 15, 155, 78, 155, 93);
									_Buttons[ngPortRight].SetProperties(_rctPickAvatar.right - 23, _rctPickAvatar.bottom - 30, 15, 15, 155, 78, 155, 93);
									break;
								case 1:
									_Buttons[ngPortLeft].SetProperties (_rctPickAvatar.right - 18, _rctPickAvatar.top    +  6, 12, 12, 120, 52, 120, 64);
									_Buttons[ngPortRight].SetProperties(_rctPickAvatar.right - 18, _rctPickAvatar.bottom - 18, 12, 12, 120, 52, 120, 64); 
									break;
								case 0:
									_Buttons[ngPortLeft].SetProperties (_rctPickAvatar.right -  9, _rctPickAvatar.top    +  3,  7,  7,  63, 24,  63, 31);
									_Buttons[ngPortRight].SetProperties(_rctPickAvatar.right -  9, _rctPickAvatar.bottom -  9,  7,  7,  63, 24,  63, 31); 
									break;
								};
								SetRect(&_RectHorSlidePer,
									_Buttons[ngPortLeft].GetX() + 2,
									_Buttons[ngPortLeft].GetY() + (_Buttons[ngPortLeft].GetHeight() * 2) - 1,
									_Buttons[ngPortLeft].GetX() + _Buttons[ngPortLeft].GetWidth() - 2,
									_Buttons[ngPortRight].GetY() - _Buttons[ngPortRight].GetHeight());
								//Default assign location
								_intHorSlideLocation	= (_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
								_pickAvScrollIndex		= 0;
							}
							else MessageBox(NULL, "There aren't any saved Characters", "OK", MB_OK);
							break;
						case ngRollDice:
							if(_MouseDelay != 0) return;
							if(_TempAvatar != NULL)
							{
								if(_TempAvatar->GetClass(0) == -1)
								{
									MessageBox(NULL, "Please pick a Class before rolling.", "Must do...", MB_OK);
									return;
								}
								//In case the User Rolled dice and decremented stats - M. White 9 April, 2019
								_intStatReserve = 0;		
								_TempAvatar->SetSStr(Roll4D6());
								_TempAvatar->SetSDex(Roll4D6());
								_TempAvatar->SetSCon(Roll4D6());
								_TempAvatar->SetSInt(Roll4D6());
								_TempAvatar->SetSWis(Roll4D6());
								_TempAvatar->SetSCha(Roll4D6());
								_TempAvatar->SetSCom(Roll4D6());
								//Increment the user has rolled stats - M. White 7 April, 2019
								_TempAvatar->setNumSRs(_TempAvatar->getNumSRs() + 1);
								//Test for the class - M. White 20 April, 2019
								if(_TempAvatar->GetClass(0) == cZeroLvl || _TempAvatar->GetClass(0) == cFighter ||
								   _TempAvatar->GetClass(0) == cPaladin || _TempAvatar->GetClass(0) == cRanger)
								{
									//We will roll exceptional Strength each time the User clicks the
									//button. But will not display the value unless they chose to 
									//make their Strength score an 18 - M. White 2019
									_TempAvatar->SetStrE(int(rand() % 100) + 1);
								}
							}
							else MessageBox(NULL, "Avatar Not Created", "Error", MB_OK);
							break;
						case ngStrUp:
							if(_TempAvatar->GetSStr() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSStr(_TempAvatar->GetSStr() + 1);
								_intStatReserve--;
							}
							break;
						case ngStrDwn:
							if(_TempAvatar->GetSStr() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSStr() > 8) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSStr() > 6) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSStr() > 7) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngDexUp:
							if(_intStatReserve > 0)
							{
								//Only Dwarves have a Max - M. White 20 April, 2019
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSDex() < 17) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSDex() < 18) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngDexDwn:
							if(_TempAvatar->GetSDex() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSDex() > 6) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSDex() > 6) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSDex() > 7) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngConUp:
							//All Races max at 18 - M. White 20 April, 2019
							if(_TempAvatar->GetSCon() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSCon(_TempAvatar->GetSCon() + 1);
								_intStatReserve--;
							}
							break;
						case ngConDwn:
							switch(_TempAvatar->GetRace())
							{
							case startDwarf:	if(_TempAvatar->GetSCon() > 11) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startElf:		if(_TempAvatar->GetSCon() >  7) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startGnome:	if(_TempAvatar->GetSCon() >  8) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startHalfElf:	if(_TempAvatar->GetSCon() >  6) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startHalfling:	if(_TempAvatar->GetSCon() > 10) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							default:			if(_TempAvatar->GetSCon() >  3) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							};
							break;
						case ngIntUp:
							//All Races max at 18 - M. White 20 April, 2019
							if(_TempAvatar->GetSInt() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSInt(_TempAvatar->GetSInt() + 1);
								_intStatReserve--;
							}
							break;
						case ngIntDwn:
							if(_TempAvatar->GetSInt() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSInt() > 3) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSInt() > 8) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSInt() > 6) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSInt() > 4) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSInt() > 6) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSInt() > 3) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngWisUp:
							//Only hafling has restriction - M. White 20 April, 2019
							if(_intStatReserve > 0)
							{
								switch(_TempAvatar->GetRace())
								{
								case startHalfling: if(_TempAvatar->GetSWis() < 17) { _TempAvatar->SetSWis(_TempAvatar->GetSWis() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSWis() < 18) { _TempAvatar->SetSWis(_TempAvatar->GetSWis() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngWisDwn:
							//All Races have the same minimum - M. White 20 April, 2019
							if(_TempAvatar->GetSWis() > 3)
							{
								_TempAvatar->SetSWis(_TempAvatar->GetSWis() - 1);
								_intStatReserve++;
							}
							break;
						case ngChaUp:
							//Only Dwarf has restrictions - M. White 20 April, 2019
							if(_intStatReserve > 0)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCha() < 17) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSCha() < 18) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngChaDwn:
							if(_TempAvatar->GetSCha() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSCha() > 8) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngComUp:
							if(_TempAvatar->GetSCom() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSCom(_TempAvatar->GetSCom() + 1);
								_intStatReserve--;
							}
							break;
						case ngComDwn:
							if(_TempAvatar->GetSCom() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngSex:
							if(_TempAvatar->GetSex() == FEMALE)
							{
								_TempAvatar->SetSex(MALE);
								switch(_MonitorCat)
								{
								case 2:
										_Buttons[ngSex].SetProperties(
										_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 15, 
										_RectPort.bottom,
										31, 31, 78, 78, 109, 78, 0, 0, true, "Male", "");
									break;
								case 1:
									_Buttons[ngSex].SetProperties
										//-12 because that's 1/2 of button width - M. White 1 April, 2019
										(_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 12, 
										_RectPort.bottom,
										23, 23, 62, 52, 85, 52, 0, 0, true, "Male", "");
										break;
								case 0:
									_Buttons[ngSex].SetProperties
										//-12 because that's 1/2 of button width - M. White 1 April, 2019
										(_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 6, 
										_RectPort.bottom,
										12, 12, 32, 24, 44, 24, 0, 0, true, "Male", "");
									break;
								};
							}
							else
							{
								switch(_MonitorCat)
								{
								case 2:
									_TempAvatar->SetSex(FEMALE);
									_Buttons[ngSex].SetProperties(
										_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 15, 
										_RectPort.bottom,
										31, 31, 78, 78, 109, 78, 0, 0, true, "Female", "");
									break;
								case 1:
									_TempAvatar->SetSex(FEMALE);
									_Buttons[ngSex].SetProperties
										//-12 because that's 1/2 of button width - M. White 1 April, 2019
										(_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 12, 
										_RectPort.bottom, 
										23, 23, 62, 75, 85, 75, 0, 0, true, "Female", "");
									break;
								case 0:
									_TempAvatar->SetSex(FEMALE);
									_Buttons[ngSex].SetProperties
										//-12 because that's 1/2 of button width - M. White 1 April, 2019
										(_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 6, 
										_RectPort.bottom, 
										12, 12, 32, 36, 44, 36, 0, 0, true, "Female", "");
									break;
								};
							}
							break;
						case ngPortLeft:
							if(_TempAvatar->getPortrait() > 0) _TempAvatar->setPortrait(_TempAvatar->getPortrait() - 1);
							break;
						case ngPortRight:
							if(_TempAvatar->getPortrait() < _MaxPortraits - 1) _TempAvatar->setPortrait(_TempAvatar->getPortrait() + 1);
							break;
						};//end switch(i)
						//Break out of the loop to speed up return - M. White 17 April, 2019
						return;
					}//end: if(_Buttons[i].DidItHit(X, Y) == true && _Buttons[i].GetIsActive() == true)
				}//end: for(i = 0; i < MAX_ngOPTIONS; i++)
				//If none of the buttons caused an early return, verify that the User
				//wasn't clicking on a rectangle - M. White 17 April, 2019
				//Racial bar - M. White 10 April, 2019
				if		(X >= _RectRace.left && X <= _RectRace.right && Y >= _RectRace.top  && Y <= _RectRace.bottom)
				{
					//If the User has already picked a race and had rolled hoping to exploit converting
					//over to better stats using different bonses - M. White 15 April, 2019
					_TempAvatar->ResetStartingStats();
					_intStatReserve = 0;
					_OpenRaceScreen = true;
					//Reset the RaceRect to enlarge to needed size
					SetRect(&_RectRace,
						//Left/Right/Top stay the same - M. White 10 April, 2019
						_RectRace.left, _RectRace.top, _RectRace.right, 
						_RectRace.bottom + (_bmpTrimmed->GetHeight() * MAX_startRACES));
					//reset the class(es) in case the User chose a class not allowed...
					//note: resetting class also resets number of weapon slots, and 
					//cleans up weapons... - M. White 20 April, 2019
					_TempAvatar->SetClassByRef(-1);
					//Reset the Weapons rect
					switch(_MonitorCat)
					{
					case 2:
						SetRect(&_WeaponPros,
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
						break;
					case 1:
						SetRect(&_WeaponPros,
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
						break;
					case 0:
						SetRect(&_WeaponPros,
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
							_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
							_RectMenu.top  +      int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
						break;
					};
				}
				//Avatar class bar - M. White 11 April, 2019
				else if (X >= _RectClass.left && X <= _RectClass.right && Y >= _RectClass.top  && Y <= _RectClass.bottom)
				{
					if(_TempAvatar->GetRace() < MAX_startRACES)
					{
						_OpenClassScreen = true;
						//Reset the RaceRect to enlarge to needed size
						SetRect(&_RectClass,
							_RectClass.left, _RectClass.top, //Left/Top stay the same - M. White 11 April, 2019
							_RectMenu.right - 10, //Right stretched to Menu screen -10 - M. White 13 April, 2019
							//Bottom expands an additional five spaces - M. White 11 Aprile, 2019
							//Expands by total number of Classes available to the Avatar - M. White 11 April, 2019
							_RectClass.bottom + (_bmpTrimmed->GetHeight() * int(cMAX_CLASSES * 0.50)));
						_TempAvatar->SetClassByRef(-1);
						//Reset the Weapons rect
						switch(_MonitorCat)
						{
						case 2:
							SetRect(&_WeaponPros,
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
							break;
						case 1:
							SetRect(&_WeaponPros,
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
							break;
						case 0:
							SetRect(&_WeaponPros,
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
								_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
								_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);
							break;
						};
					}
					else MessageBox(NULL, "You must pick a race\nbefore picking a class.", "Pick a Race", MB_OK);
				}
				//Alignment bar - M. White 11 April, 2019
				else if (X >= _RectAlign.left && X <= _RectAlign.right && Y >= _RectAlign.top  && Y <= _RectAlign.bottom)
				{
					if(_OpenAlignScreen == false)
					{
						_OpenAlignScreen = true;
						SetRect(&_RectAlign, _RectAlign.left, _RectAlign.top, _RectAlign.right,
							_RectAlign.bottom + (_bmpTrimmed->GetHeight() * 9));
						//Multiplying by 9 as that's how many options there are to list
						//to the User - M. White 17 April, 2019
					}
				}
				//Weapon bar - M. White 16 April, 2019
				else if	(X >= _WeaponPros.left && X <= _WeaponPros.right && Y >= _WeaponPros.top  && Y <= _WeaponPros.bottom)
				{
					if(_TempAvatar->GetClass(0) > -1)
					{
						_OpenWeapons = true;
						//Setting the rect to the full size of the Menu area as there
						//are a lot of Weapon Skills to display to the User - M. White 18 April, 2019
						SetRect(&_WeaponPros, _RectMenu.left, _RectMenu.top, _RectMenu.right, _RectMenu.bottom);
						//Create a single button that's particular to the screen we're about
						//to create. It's a recycleble button that will get deleted when
						//the screen gets closed - M. White 20 April, 2019
						_tmpSingleBtn = new myButton();
						switch(_MonitorCat)
						{
						case 2:
							_tmpSingleBtn->SetProperties(
								_RectMenu.left + int((_RectMenu.right  - _RectMenu.left) * 0.50) - 89, 
								_RectMenu.top  + int((_RectMenu.bottom - _RectMenu.top)  * 0.93), 
								178, 39, 0, 0, 178, 0, 356, 0, true, "", "Reset");
							break;
						case 1:
							_tmpSingleBtn->SetProperties(
								_RectMenu.left + int((_RectMenu.right  - _RectMenu.left) * 0.50) - 60, 
								_RectMenu.top  + int((_RectMenu.bottom - _RectMenu.top)  * 0.93), 
								119, 26, 0, 0, 119, 0, 238, 0, true, "", "Reset");
							break;
						case 0:
							_tmpSingleBtn->SetProperties(
								_RectMenu.left + int((_RectMenu.right  - _RectMenu.left) * 0.50) - 45, 
								_RectMenu.top  + int((_RectMenu.bottom - _RectMenu.top)  * 0.93), 
								 60, 12, 0, 0,  60, 0, 120, 0, true, "", "Reset");
							break;
						};
					}
					else MessageBox(NULL, "You must pick a class\nbefore picking weapons.", "Pick a Class", MB_OK);
				}
				//Starting Town bar - M. White 21 July, 2019
				else if	(X >= _RectStartTown.left && X <= _RectStartTown.right && Y >= _RectStartTown.top  && Y <= _RectStartTown.bottom)
				{
					if(_TempAvatar->GetRace() > -1)
					{
						if(_TempAvatar->GetClass(0)	> -1)
						{
							if(_TempAvatar->GetNumWPsUsed() == _TempAvatar->GetNumMaxWPslots())
							{
								if(_intStatReserve == 0 && _TempAvatar->GetSStr() != 0)
								{
									if(_TempAvatar->GetFName() != "Type to Create a Name")
									{
										if(_OpenStartTown == false)
										{
											_OpenStartTown	= true;
											_ScrollIndex	= 0;
											SetRect(&_RectStartTown, _RectMenu.left, _RectMenu.top, _RectMenu.right, _RectMenu.bottom);
											//Setting up buttons to go with new screen
											if(_MenuScrUpDwn != NULL) delete [] _MenuScrUpDwn;
											_MenuScrUpDwn = new myButton[2];
											switch(_MonitorCat)
											{
											case 2:
												_MenuScrUpDwn[0].SetProperties(
													_RectStartTown.right - 15, _RectStartTown.top    +  0, 15, 15, 140, 78, 140, 93); 
												_MenuScrUpDwn[1].SetProperties(
													_RectStartTown.right - 15, _RectStartTown.bottom - 15, 15, 15, 155, 78, 155, 93); 
												break;
											case 1:
												_MenuScrUpDwn[0].SetProperties(
													_RectStartTown.right - 12, _RectStartTown.top    +  0, 12, 12, 108, 52, 108, 64); 
												_MenuScrUpDwn[1].SetProperties(
													_RectStartTown.right - 12, _RectStartTown.bottom - 12, 12, 12, 120, 52, 120, 64); 
												break;
											case 0:
												_MenuScrUpDwn[0].SetProperties(
													_RectStartTown.right -  7, _RectStartTown.top    +  0,  7,  7,  56, 24,  56, 31); 
												_MenuScrUpDwn[1].SetProperties(
													_RectStartTown.right -  7, _RectStartTown.bottom -  7,  7,  7,  63, 24,  63, 31); 
												break;
											};
										}
									}
									else MessageBox(NULL, "You must create a Name before picking a town.", "Required", MB_OK);
								}
								else MessageBox(NULL, "You must finish Stats before picking a town.", "Required", MB_OK);
							}
							else MessageBox(NULL, "You must select Weapons before picking a town.", "Required", MB_OK);
						}
						else MessageBox(NULL, "You must select a Class before picking a town.", "Required", MB_OK);
					}
					else MessageBox(NULL, "You must select a Race before picking a town.", "Required", MB_OK);
				}
			}
		}
		else if	(_MouseDelay > 3)
		{
			if	(_ShowPickAvatar	== true)
			{
				if		(_Buttons[ngPortLeft].DidItHit(_XMouse, _YMouse) == true)
				{
					if(_pickAvScrollIndex > 0)
					{
						_pickAvScrollIndex--;
						YMod = _numAvatarRef - _showNumAvatars;					//Find out how many there are over what is to be shown...
						if(YMod == 1) _intHorSlideLocation = (_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
						else
						{
							Percent = _pickAvScrollIndex / double(YMod);
							_intHorSlideLocation = 
								_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50) + 
								int((_RectHorSlidePer.bottom - _RectHorSlidePer.top) * double(Percent));
						}
						_paintSomething = true;
					}
				}
				else if	(_Buttons[ngPortRight].DidItHit(_XMouse, _YMouse) == true)
				{
					if((_pickAvScrollIndex + _showNumAvatars) < _numAvatarRef)
					{
						_pickAvScrollIndex++;
						YMod = _numAvatarRef - _showNumAvatars;					//Find out how many there are over what is to be shown...
						if(YMod == 1) _intHorSlideLocation = (_RectHorSlidePer.bottom - int(_Buttons[ngPortLeft].GetHeight() * 0.50));
						else
						{
							Percent = _pickAvScrollIndex / double(YMod);
							_intHorSlideLocation = 
								_RectHorSlidePer.top - int(_Buttons[ngPortLeft].GetHeight() * 0.50) + 
								int((_RectHorSlidePer.bottom - _RectHorSlidePer.top) * double(Percent));
						}
						_paintSomething = true;
					}
				}
			}
			else
			{
				//Loop through the buttons - M. White 17 April, 2019
				for(i = 0; i < MAX_ngOPTIONS; i++)
					if(_Buttons[i].DidItHit(X, Y) == true && _Buttons[i].GetIsActive() == true)
					{
						switch(i)
						{
						case ngStrUp:
							if(_TempAvatar->GetSStr() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSStr(_TempAvatar->GetSStr() + 1);
								_intStatReserve--;
							}
							break;
						case ngStrDwn:
							if(_TempAvatar->GetSStr() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSStr() > 8) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSStr() > 6) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSStr() > 7) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSStr() > 3) { _TempAvatar->SetSStr(_TempAvatar->GetSStr() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngDexUp:
							if(_intStatReserve > 0)
							{
								//Only Dwarves have a Max - M. White 20 April, 2019
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSDex() < 17) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSDex() < 18) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngDexDwn:
							if(_TempAvatar->GetSDex() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSDex() > 6) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSDex() > 6) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSDex() > 7) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSDex() > 3) { _TempAvatar->SetSDex(_TempAvatar->GetSDex() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngConUp:
							//All Races max at 18 - M. White 20 April, 2019
							if(_TempAvatar->GetSCon() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSCon(_TempAvatar->GetSCon() + 1);
								_intStatReserve--;
							}
							break;
						case ngConDwn:
							switch(_TempAvatar->GetRace())
							{
							case startDwarf:	if(_TempAvatar->GetSCon() > 11) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startElf:		if(_TempAvatar->GetSCon() >  7) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startGnome:	if(_TempAvatar->GetSCon() >  8) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startHalfElf:	if(_TempAvatar->GetSCon() >  6) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							case startHalfling:	if(_TempAvatar->GetSCon() > 10) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							default:			if(_TempAvatar->GetSCon() >  3) { _TempAvatar->SetSCon(_TempAvatar->GetSCon() - 1); _intStatReserve++; } break;
							};
							break;
						case ngIntUp:
							//All Races max at 18 - M. White 20 April, 2019
							if(_TempAvatar->GetSInt() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSInt(_TempAvatar->GetSInt() + 1);
								_intStatReserve--;
							}
							break;
						case ngIntDwn:
							if(_TempAvatar->GetSInt() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSInt() > 3) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSInt() > 8) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSInt() > 6) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSInt() > 4) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSInt() > 6) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSInt() > 3) { _TempAvatar->SetSInt(_TempAvatar->GetSInt() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngWisUp:
							//Only hafling has restriction - M. White 20 April, 2019
							if(_intStatReserve > 0)
							{
								switch(_TempAvatar->GetRace())
								{
								case startHalfling: if(_TempAvatar->GetSWis() < 17) { _TempAvatar->SetSWis(_TempAvatar->GetSWis() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSWis() < 18) { _TempAvatar->SetSWis(_TempAvatar->GetSWis() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngWisDwn:
							//All Races have the same minimum - M. White 20 April, 2019
							if(_TempAvatar->GetSWis() > 3)
							{
								_TempAvatar->SetSWis(_TempAvatar->GetSWis() - 1);
								_intStatReserve++;
							}
							break;
						case ngChaUp:
							//Only Dwarf has restrictions - M. White 20 April, 2019
							if(_intStatReserve > 0)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCha() < 17) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() + 1); _intStatReserve--; } break;
								default:			if(_TempAvatar->GetSCha() < 18) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() + 1); _intStatReserve--; } break;
								};
							}
							break;
						case ngChaDwn:
							if(_TempAvatar->GetSCha() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSCha() > 8) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSCha() > 3) { _TempAvatar->SetSCha(_TempAvatar->GetSCha() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngComUp:
							if(_TempAvatar->GetSCom() < 18 && _intStatReserve > 0)
							{
								_TempAvatar->SetSCom(_TempAvatar->GetSCom() + 1);
								_intStatReserve--;
							}
							break;
						case ngComDwn:
							if(_TempAvatar->GetSCom() > 3)
							{
								switch(_TempAvatar->GetRace())
								{
								case startDwarf:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startElf:		if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startGnome:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startHalfElf:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								case startHalfling:	if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								default:			if(_TempAvatar->GetSCom() > 3) { _TempAvatar->SetSCom(_TempAvatar->GetSCom() - 1); _intStatReserve++; } break;
								};
							}
							break;
						case ngPortLeft:
							if(_TempAvatar->getPortrait() > 0) _TempAvatar->setPortrait(_TempAvatar->getPortrait() - 1);
							break;
						case ngPortRight:
							if(_TempAvatar->getPortrait() < _MaxPortraits - 1) _TempAvatar->setPortrait(_TempAvatar->getPortrait() + 1);
							break;
						};
						//Break out of the loop to speed up return - M. White 17 April, 2019
						return;
					}
			}
		}
		break;
	case phMenuScrn:
		if(_Buttons != NULL)
		{
			//There are five buttons on the main menu screen
			for(i = 0; i < MAX_menuOPTIONS; i++)
			{
				if(_Buttons[i].DidItHit(X, Y) == true)
				{
					switch(i)
					{
					case msQuitBtn:
						while(_IsLoading == true || _IsLoadingFOW == true || _IsLoadingMobs == true || _LoadCampaign == true)
						{
							Sleep(1);
						}
						PostQuitMessage(0);
						break;
					case msNewGame:
						//Instantiate a new temp Character()...
						//Constructor calls Reset() to default its own data  - M. White 7 April, 2019
						if(_TempAvatar != NULL) { delete _TempAvatar; _TempAvatar = NULL; }
						_TempAvatar = new Avatar();
						_intStatReserve			= 0;
						_EditorFocusIndex		= 0;
						if(_startPoints.length() > 0) while(_startPoints.length() > 0) _startPoints.popFront();
						_myHandleOne			= CreateThread(0, 0, LoadStartPoints, 0, 0, &_myThreadIDOne);
						_GAMEPHASE				= phNewGameScrn;
						break;
					case msLoadGame:
						_GAMEPHASE				= phLoadGame;
						_edOpenTrue				= true;	//Recycle variables
						_ScrollIndex			= 0;	//Recycle variables
						_EditingTarget1			= -1;	//Recycle variables
						_paintSomething			= true;
						_paintWholeScrn			= true;
						if(_TempAvatar != NULL)
						{
							delete _TempAvatar;
							_TempAvatar = NULL;
						}
						_TempAvatar = new Avatar();
						break;
					case msDeleteGame:
						_GAMEPHASE				= phDeleteGame;
						_edDeleteTrue			= true;
						_ScrollIndex			= 0;
						_EditingTarget1			= -1;
						_paintSomething			= true;
						_paintWholeScrn			= true;
						break;
					case msEditor:
						_GAMEPHASE			= phEditor;
						_EditorFocusIndex	= 0;
						_EditorStr3letters	= "";
						_Editor_W_S_Name	= "";
						_StillEditing		= false;
						for(y = 0; y < _TactMapH; y++)
							for(x = 0; x < _TactMapW; x++)
							{
								_TactMap[x][y].SetVisited(false);
								_TactMapBack[x][y].SetVisited(false);
							}
						GetTacticalMapData(_MAPVIEW);
						break;
					};
					//Generic to the various screens - M. White 5 April, 2019
					CreateButtons(_GAMEPHASE);
					//Break out of the loop if the button was found...
					break;
				}
			}
		}
		break;
	case phSplashScrn:
		//There's only one button on the plash screen, "Acknowledge" - M. White 19 June, 2019
		if(_Buttons->DidItHit(X, Y) == true)
		{
			_GAMEPHASE = phMenuScrn;
			CreateButtons(_GAMEPHASE);
		}
	};
}
void RMouse(int X, int Y)
{
	RECT		rct;
	PathNode	tmpPathNode;
	AvFileRef	local;
	int			i, testInt;
	string		strMsg;
	char		txt[128];

	if		(_MouseDelay == 0)
	{
		switch(_GAMEPHASE)
		{
		case phPlayScrn:
			if(X >= _PlayScrnAvatar.left && X < _PlayScrnAvatar.right && Y >= _PlayScrnAvatar.top && Y < _PlayScrnAvatar.bottom)
			{
				_ShowAnAvatar = true; _EditingTarget1 = -1;//-1 is The Player's Avatar
				//Set the Avatar Protrait RECT, which will be used as a Button of sorts...
				//Dependent upon RECT: _SideBarBackGrnd 
				SetRect(&_PlayScrnAvatar,
					_SideBarBackGrnd.left,
					(8 + _bmpMiniMap->GetHeight() + 8), //8 from top of client, below minimap, allow 8 for rect trim
					_SideBarBackGrnd.right,
					_SideBarBackGrnd.top + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top) * 0.66));//...plus portrait height
				_paintSomething = true;
				//Have to do the whole screen to refresh the background
				_paintWholeScrn	= true;
				/*
					TODO:
					Future development...
					Values for _EditingTarget1 >= 0, will represent the Henchmen icons shown below 
					the Player's main avatar (_TempAvatar).
				*/
			}
			break;
		case phEditor:
			switch(_GAMEsubPHASE)
			{
			case edNewWorldMenu:
			case edNewSceneMenu:
				if	(_edEditingScene == true || _edEditingWorld == true)
				{
					//Clicking in the sidebar selection area - M. White 18 June, 2019
					if	(X >= _SideBarBackGrnd.left && X <= _SideBarBackGrnd.right && 
						 Y >= _SideBarBackGrnd.top  && Y <= _SideBarBackGrnd.bottom)
					{
						if(_SideBarMenuIndex == edMC_Monsters)
						{
							//Currently just want to make sure there's no mistakes - M. White 22 July, 2019
						}
						else
						{
							//Clicking the mini-window at the bottom of the Side Bar background will 
							//clear out the seletected terrain/coastal types - M. White 05 May, 2019
							if		(X >= _MiniWindow.left && X <= _MiniWindow.right && Y >= _MiniWindow.top && Y <= _MiniWindow.bottom)
							{
								//User wants the darkest grey marker, as it's designates a 
								//"no move" area for Mobs - M. White 22 July, 2019
								_EditingTarget1 = 12;
							}
						}
						_paintSomething = true;
						_PaintSideBar	= true;
					}
				}
				break;
			case edLinkMaps:
				if(_edPathAssignmens	== true)
				{
					//Need to know the RECT for Map Name list in side bar
					SetRect(&rct,
						_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.04), 
						_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06), 
						_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.96), 
						_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06) + 
						(_bmpTrimmed->GetHeight() * 11));
					if(X >= rct.left && X < rct.right - 5 && Y > rct.top && Y < rct.bottom)
					{
						//We want to select the item in the list just to show the person
						//which path is going to be effected - M. White 16 August, 2019
						_SideBarMenuIndex = VRD(rct.top, Y, _bmpTrimmed->GetHeight());
						_SideBarMenuIndex += _ScrollIndex;
						_SideBarMenuIndex *= 2;
						_paintSomething = true; _paintMainMap = true;
						//Make sure it's an even number...
						if(_SideBarMenuIndex > _NumPathsOnMap - 1 || _SideBarMenuIndex < 0) _SideBarMenuIndex = -1;
						if(_SideBarMenuIndex >= 0 && _SideBarMenuIndex < _NumPathsOnMap - 1)
						{
							if(MessageBox(NULL, "Do you wish to remove this Path?", "Caution", MB_YESNO) == IDYES)
							{
								//There's more than '1' path on held...
								if(_NumPathsOnMap >= 4)
								{
									//Use _SideBarMenuIndex to clear the Name and Nodes of the Forward and Reverse Path.
									if(_SideBarMenuIndex >= 0 && _SideBarMenuIndex < _NumPathsOnMap)
									{
										_MapPaths[_SideBarMenuIndex].SetName("");
										_MapPaths[_SideBarMenuIndex + 1].SetName("");
										while(_MapPaths[_SideBarMenuIndex].Path.isEmpty() == false) 
											_MapPaths[_SideBarMenuIndex].Path.popFront();
										while(_MapPaths[_SideBarMenuIndex + 1].Path.isEmpty() == false)
											_MapPaths[_SideBarMenuIndex + 1].Path.popFront();
										//Copy any following paths to the recently vacated path.
										for(i = _SideBarMenuIndex + 2; i < _NumPathsOnMap; i++)
										{
											_MapPaths[i - 2].SetName(_MapPaths[i].GetName());
											while(_MapPaths[i].Path.isEmpty() == false)
											{
												//Using 0-index to get lead node...
												_MapPaths[i].Path.getNodes(0, tmpPathNode);
												_MapPaths[i - 2].Path.insertBack(tmpPathNode);
												_MapPaths[i].Path.popFront();
											}
										}
										//Decrement number of paths...
										_NumPathsOnMap -= 2;
										//Use _SwapPath to create an array with a size -2 than current...
										if(_SwapPath != NULL) { delete [] _SwapPath; _SwapPath = NULL; }
										_SwapPath = new MapPath[_NumPathsOnMap];
										//Copy the active paths over to _SwapPath, using variable to copy the remaining elements.
										for(i = 0; i < _NumPathsOnMap; i++)
										{

											_SwapPath[i].SetName(_MapPaths[i].GetName());
											while(_MapPaths[i].Path.isEmpty() == false)
											{
												//Using 0-index to get lead node...
												_MapPaths[i].Path.getNodes(0, tmpPathNode);
												_SwapPath[i].Path.insertBack(tmpPathNode);
												_SwapPath[i].Length++;
												_MapPaths[i].Path.popFront();
											}
										}
										//Delete [] the _MapPaths array
										delete [] _MapPaths;
										//Assign new array to _MapPaths
										_MapPaths = new MapPath[_NumPathsOnMap];
										//Copy _SwapPath to _MapPaths
										for(i = 0; i < _NumPathsOnMap; i++)
										{
											_MapPaths[i].SetName(_SwapPath[i].GetName());
											while(_SwapPath[i].Path.isEmpty() == false)
											{
												//Using 0-index to get lead node...
												_SwapPath[i].Path.getNodes(0, tmpPathNode);
												_MapPaths[i].Path.insertBack(tmpPathNode);
												_MapPaths[i].Length++;
												_SwapPath[i].Path.popFront();
											}
										}
										//Delete _SwapPath
										delete [] _SwapPath; _SwapPath = NULL;
									}
									//Unselect
									_SideBarMenuIndex = -1;
								}
								else
								{
									if(_NumPathsOnMap == 2)
									{
										for(i = 0; i < 2; i++)
										{
											while(_MapPaths[i].Path.isEmpty() == false)
												_MapPaths[i].Path.popFront();
										}
										delete [] _MapPaths; _MapPaths = NULL;
										_NumPathsOnMap = 0;
									}
								}
							}
						}
					}
				}
				break;
			};
			break;
		case phNewGameScrn:
			if	(_ShowPickAvatar	== true)
			{
				SetRect(&rct,
					_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.02),
					_rctPickAvatar.top  + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02),
					_Buttons[ngPortLeft].GetX() - _Buttons[ngPortLeft].GetWidth(),
					_rctPickAvatar.top + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02) + (_bmpTrimmed->GetHeight() * _showNumAvatars));

				//We're in the main area clicking...
				if		(_XMouse >= rct.left + 4 && _XMouse < rct.right - 4 && _YMouse >= rct.top && _YMouse < rct.bottom)
				{
					if(_numAvatarRef > 0)
					{
						testInt = VRD(rct.top, _YMouse, _bmpTrimmed->GetHeight());
						if(testInt >= 0 && (testInt + _pickAvScrollIndex) < _numAvatarRef)
						{
							if(MessageBox(NULL, "Do you want to delete this Character?", "Verify", MB_YESNO) == IDYES)
							{
								//Remove the file first...
								sprintf(txt, "data\\pc\\%d.dat", testInt);
								remove(txt);
								//Then delete everything else...
								if(_numAvatarRef == 1) { delete _AvatarRef; _AvatarRef = NULL; }
								else
								{
									_AvatarRef[testInt].UniqueID		= -1;
									_AvatarRef[testInt].AvDisplayName	= "";

									for(int y = 0; y < _numAvatarRef - 1; y++)
										for(int x = 0; x < _numAvatarRef - 1; x++)
										{
											if(_AvatarRef[x].UniqueID > _AvatarRef[y].UniqueID)
											{
												local.UniqueID				= _AvatarRef[y].UniqueID;
												local.AvDisplayName			= _AvatarRef[y].AvDisplayName;
												
												_AvatarRef[y].UniqueID		= _AvatarRef[x].UniqueID;
												_AvatarRef[y].AvDisplayName	= _AvatarRef[x].AvDisplayName;
												
												_AvatarRef[x].UniqueID		= local.UniqueID;
												_AvatarRef[x].AvDisplayName	= local.AvDisplayName;
											}
										}
								}
								_numAvatarRef -= 1;		//Decrement total number...
								//Protection before saving...
								if(_numAvatarRef == 1)
								{
									local.UniqueID		= _AvatarRef[0].UniqueID;
									local.AvDisplayName	= _AvatarRef[0].AvDisplayName;
									delete [] _AvatarRef;
									_AvatarRef = NULL;
									_AvatarRef = new AvFileRef();
									_AvatarRef->UniqueID		= local.UniqueID;
									_AvatarRef->AvDisplayName	= local.AvDisplayName;
								}
								SaveBaseAvatarList();	//Save the new list...
							}
						}
					}
				}
				//Reset the Weapons rect
				SetRect(&_WeaponPros, _WeaponPros.left, _WeaponPros.top, _WeaponPros.right,
					_WeaponPros.top + (_TempAvatar->GetNumMaxWPslots() * _bmpTrimmed->GetHeight()));
				_ShowPickAvatar = false;
				//Reset the buttons...
				switch(_MonitorCat)
				{
				case 2:
					_Buttons[ngPortLeft].SetProperties (_RectPort.left - 14, _RectPort.top + int(_PortraitsH * 0.50) - 12, 14, 25, 0,  78, 14,  78);
					_Buttons[ngPortRight].SetProperties(_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) - 12, 14, 25, 0, 103, 14, 103); 
					break;
				case 1:
					_Buttons[ngPortLeft].SetProperties (_RectPort.left - 15, _RectPort.top + int(_PortraitsH * 0.50) -  8, 15, 16, 0,  52, 15,  52);
					_Buttons[ngPortRight].SetProperties(_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) -  8, 15, 16, 0,  68, 15,  68); 
					break;
				case 0:
					_Buttons[ngPortLeft].SetProperties (_RectPort.left -  8, _RectPort.top + int(_PortraitsH * 0.50) -  8,  8,  8, 0,  24,  8,  24);
					_Buttons[ngPortRight].SetProperties(_RectPort.right,     _RectPort.top + int(_PortraitsH * 0.50) -  8,  8,  8, 0,  32,  8,  32);
					break;
				};
			}
			break;
		case phLoadGame:
			break;
		}
	}
}
bool LoadData(int WorldORScene)
{
	string		tmpFileName;
	string		tmpInput;
	string		strMsg;
	HANDLE		hFile; //used to open files and test they are there - M. White 16 May, 2019
	ifstream	DataInput;

	if(WorldORScene == mapWORLD)	tmpFileName = "data\\w\\wd.dat";
	else							tmpFileName = "data\\s\\sd.dat";

	hFile = CreateFile(tmpFileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 
		FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); 

	//Test to see if the file is there...
	if(hFile == INVALID_HANDLE_VALUE)
	{
		//The file is missing...
		//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
		strMsg  = "There was a file missing.\n";
		strMsg += "Make sure the following file is located in\n";
		strMsg += "the data folder under the subfolder";
		
		if(WorldORScene == mapWORLD)	strMsg += "data/w\n\nwd.dat";
		else							strMsg += "data/s\n\nsd.dat";
		MessageBox(NULL, strMsg.c_str(), "Map List Loading Error", MB_OK);
		//Clean up - M. White 15 May, 2019
		CloseHandle(hFile);
		return false;
	}
	else
	{
		//Clear out the list in case there was something there already - M. White 16 May, 2019
		if(_ListWorldScenes.length() > 0)
			while(_ListWorldScenes.length() > 0) _ListWorldScenes.popFront();
		CloseHandle(hFile);						//Clean up first to free the resource - M. White 15 May, 2019
		DataInput.open(tmpFileName.c_str());	//Reopen the file using a more friendly version
		DataInput >> tmpInput;					//Read the first symbol/text in as a string...
		_NumWSs = atoi(tmpInput.c_str());		//Attempt to convert it to a number (returns 0 if failed)
		//Case the variable as an integer to make sure that someone hasn't message with
		//the data in the file. Even if the list is 'empty', there should still be a message
		//in the file "No_World_Maps_Created" - M. White 15 May, 2019
		if(_NumWSs >= 1)
		{
			strMsg = "";//Cleaning up before use - M. White 11 June, 2019
			while(!DataInput.eof())
			{
				DataInput >> strMsg;
				for(int i = 0; i < int(strMsg.length()); i++) if(strMsg[i] == '_') strMsg[i] = ' ';
				_ListWorldScenes.insertBack(strMsg);
			}
		}
		else
		{
			//This error check only fires when the value is zero or less. 
			//The file is missing...
			//Inform the User and reset the game to recover gracefully - M. White 15 May, 2019
			strMsg = "The";
			if(WorldORScene == mapWORLD) strMsg = " wd.dat"; else strMsg = " sd.dat";
			strMsg += " file is corrupt";
			MessageBox(NULL, strMsg.c_str(), "Map List Reading Error", MB_OK);
			DataInput.close();
			return false;
		}
		DataInput.close();
	}
	return true;
}
void SetWasMinimized(bool data)
{
	//This function gets called by _pEngine when the screen has any
	//modifications to size, minimized, etc - M. White 13 March, 2019
	_WasMinimized = data;
}
void CreateButtons(int Scrn)
{
	/*
		Note:
		Because of the fluidity of this project in being able to modify itself to the dimensions of a
		User's monitor size, this function sets the parameters for the necessary rectangles, along with
		the buttons, as both are closely tied to one another. The buttons need to know where the rects 
		are positioned and therefor key off of them - M. White Feb 1, 2019
	*/
	double expand = 0.0;
	RECT rect;

	//Clear the previous buttons - M. White 2 April, 2019
	if(_Buttons != NULL)
	{
		if(_NumBtns > 1)	delete [] _Buttons;
		else				delete _Buttons;
        _Buttons = NULL;
	}
	//Reset the current count - M. White 2 April, 2019
	_NumBtns = 0;

	switch(Scrn)
	{
	case phSplashScrn:
		_Buttons = new myButton;
		switch(_MonitorCat)
		{
		case 2:	_Buttons->SetProperties(int(_EngineWidth / 2) - 89, _EngineHeight - 120, 178, 39, 0, 0, 178, 0, 356, 0, true, "Achknowledge", "Achknowledge");			break;
		case 1:	_Buttons->SetProperties(int(_EngineWidth / 2) - 59, _EngineHeight - 100, 119, 26, 0, 0, 119, 0, 238, 0, true, "Achknowledge", "Achknowledge");			break;
		case 0:	_Buttons->SetProperties(int(_EngineWidth / 2) - 30, _EngineHeight -  80,  60, 12, 0, 0,  60, 0, 120, 0, true, "Achknowledge", "Achknowledge");			break;
		};
		_NumBtns = 1;
		//No Menu background needed in this phase - M. White 3 April, 2019
		break;
	case phMenuScrn:
		_Buttons = new myButton[MAX_menuOPTIONS];
		switch(_MonitorCat)
		{
		case 2:	_Buttons[msQuitBtn].SetProperties	(int(_EngineWidth / 2) - 89, int(_EngineHeight / 2) -  57, 178, 39, 0, 0, 178, 0, 0, 0, true, "Quit",	"Quit");
				_Buttons[msNewGame].SetProperties	(int(_EngineWidth / 2) - 89, int(_EngineHeight / 2) +   0, 178, 39, 0, 0, 178, 0, 0, 0, true, "New",	"New");
				_Buttons[msLoadGame].SetProperties	(int(_EngineWidth / 2) - 89, int(_EngineHeight / 2) +  57, 178, 39, 0, 0, 178, 0, 0, 0, true, "Load",	"Load");
				_Buttons[msDeleteGame].SetProperties(int(_EngineWidth / 2) - 89, int(_EngineHeight / 2) + 114, 178, 39, 0, 0, 178, 0, 0, 0, true, "Delete",	"Delete");
				_Buttons[msEditor].SetProperties	(int(_EngineWidth / 2) - 89, int(_EngineHeight / 2) + 171, 178, 39, 0, 0, 178, 0, 0, 0, true, "Editor",	"Editor");
				break;
		case 1:	_Buttons[msQuitBtn].SetProperties	(int(_EngineWidth / 2) - 59, int(_EngineHeight / 2) -  48, 119, 26, 0, 0, 119, 0, 238, 0, true, "Quit",	"Quit");
				_Buttons[msNewGame].SetProperties	(int(_EngineWidth / 2) - 59, int(_EngineHeight / 2) +   0, 119, 26, 0, 0, 119, 0, 238, 0, true, "New",	"New");
				_Buttons[msLoadGame].SetProperties	(int(_EngineWidth / 2) - 59, int(_EngineHeight / 2) +  48, 119, 26, 0, 0, 119, 0, 238, 0, true, "Load",	"Load");
				_Buttons[msDeleteGame].SetProperties(int(_EngineWidth / 2) - 59, int(_EngineHeight / 2) +  96, 119, 26, 0, 0, 119, 0, 238, 0, true, "Delete",	"Delete");	
				_Buttons[msEditor].SetProperties	(int(_EngineWidth / 2) - 59, int(_EngineHeight / 2) + 144, 119, 26, 0, 0, 119, 0, 238, 0, true, "Editor",	"Editor");
				break;
		case 0:	_Buttons[msQuitBtn].SetProperties	(int(_EngineWidth / 2) - 30, int(_EngineHeight / 2) -  24,  60, 12, 0, 0,  60, 0, 0, 0, true, "Quit",	"Quit");
				_Buttons[msNewGame].SetProperties	(int(_EngineWidth / 2) - 30, int(_EngineHeight / 2) +   0,  60, 12, 0, 0,  60, 0, 0, 0, true, "New",	"New");
				_Buttons[msLoadGame].SetProperties	(int(_EngineWidth / 2) - 30, int(_EngineHeight / 2) +  24,  60, 12, 0, 0,  60, 0, 0, 0, true, "Load",	"Load");
				_Buttons[msDeleteGame].SetProperties(int(_EngineWidth / 2) - 30, int(_EngineHeight / 2) +  48,  60, 12, 0, 0,  60, 0, 0, 0, true, "Delete",	"Delete");	
				_Buttons[msEditor].SetProperties	(int(_EngineWidth / 2) - 30, int(_EngineHeight / 2) +  72,  60, 12, 0, 0,  60, 0, 0, 0, true, "Editor",	"Editor");
				break;
		};
		//Set up the Background Rect for the Menu - M. White 3 April, 2019
		SetRect(&_RectMenu,
			_Buttons[0].GetX() - int(_Buttons[0].GetWidth()  / 2),
			_Buttons[0].GetY() - int(_Buttons[0].GetHeight() * 3), //Extending top to make room for a title bar - M. White 3 April, 2019
			(_Buttons[MAX_menuOPTIONS - 1].GetX() + _Buttons[MAX_menuOPTIONS - 1].GetWidth()  + int(_Buttons[MAX_menuOPTIONS - 1].GetWidth() / 2)),
			(_Buttons[MAX_menuOPTIONS - 1].GetY() + _Buttons[MAX_menuOPTIONS - 1].GetHeight() + int(_Buttons[MAX_menuOPTIONS - 1].GetHeight())));
		_NumBtns = 5;
		break;
	case phNewGameScrn:
		//Set up the Background Rect for the Menu - M. White 3 April, 2019
		//This one has to be set first as the others rely upon its data - M. White 15 April, 2019
		{
			switch(_MonitorCat)
			{
			case 2:		expand = 0.25;		break;
			case 1:		expand = 0.20;		break;
			case 0:		expand = 0.10;		break;
			};
			SetRect(&_RectMenu,
				int(int(_EngineWidth * 0.50) - int(_EngineWidth * expand)),		//Left
				int(int(_EngineHeight * 0.05)),									//Top
				int(int(_EngineWidth * 0.50) + int (_EngineWidth * expand)),	//Right
				int(_EngineHeight * 0.90));										//Bottom
			//Setup the Race Background - M. White 9 April, 2019
			//The +10's are to make uniform starting points for each rect - M. White 15 April, 2019
			SetRect(&_RectName,
				_RectMenu.left + 10,
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 1),
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.70),
				//Don't forget that bottom has to total all of the offsets - M. White 9 April, 2019
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 1) + _bmpTrimmed->GetHeight() + 1);
			SetRect(&_RectPort, 
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.77), 
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 1),
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.77) + _PortraitsW, 
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 1) + _PortraitsH);
			SetRect(&_RectRace, 
				_RectMenu.left + 10,
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 2),
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.70),
				//Don't forget that bottom has to total all of the offsets - M. White 9 April, 2019
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 2) + _bmpTrimmed->GetHeight() + 1);
			SetRect(&_RectClass,
				_RectMenu.left + 10,
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3),
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.70),
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 3) + _bmpTrimmed->GetHeight() + 1);
			SetRect(&_RectAlign,
				_RectMenu.left + 10, 
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 4),
				_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.70), 
				_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 4) + _bmpTrimmed->GetHeight() + 1);
			switch(_MonitorCat)
			{
			case 2:
				SetRect(&_WeaponPros,
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);

				SetRect(&_RectStartTown, 
					_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
					_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
				break;
			case 1:
				SetRect(&_WeaponPros,
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);

				SetRect(&_RectStartTown, 
					_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
					_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
				break;
			case 0:
				SetRect(&_WeaponPros,
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0),
					_RectMenu.left + 10 + int((_RectMenu.right - _RectMenu.left) * 0.50) + int((_RectMenu.right - _RectMenu.left) * 0.45), 
					_RectMenu.top  + int(int(_bmpTrimmed->GetHeight() * 1.25) * 7.0) + _bmpTrimmed->GetHeight() + 1);

				SetRect(&_RectStartTown, 
					_WeaponPros.left, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6),
					_WeaponPros.right, _WeaponPros.top + (_bmpTrimmed->GetHeight() * 6) + _bmpTrimmed->GetHeight());
				break;
			};
			_Buttons = new myButton[MAX_ngOPTIONS];
			_NumBtns = MAX_ngOPTIONS;
			switch(_MonitorCat)
			{
			case 2:
				//Up/Down Arrows for Stats...
				//Start at Strength 'Up', range to Comeliness 'Down' - M. White 7 April, 2019
				if(_Buttons != NULL)
				{
					for(int i = ngStrUp; i <= ngComDwn; i += 2)
					{
						//UP Arrows...
						_Buttons[i].SetProperties(
							_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.40) + int(_bmpTrimmed->GetWidth() * 0.25),
							_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 5) + ((i - ngStrUp) * 20),
							25, 14, 28, 92, 53, 92);
						//Down Arrows...
						_Buttons[i + 1].SetProperties(
							_Buttons[i].GetX(), _Buttons[i].GetY() + _Buttons[i].GetHeight(),
							25, 14, 28, 78, 53, 78);
						_NumBtns += 2;
					}
				}
				_Buttons[ngSex].SetProperties(
					_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 15, 
					_RectPort.bottom,
					31, 31, 78, 78, 109, 78, 0, 0, true, "Female", "");
				_Buttons[ngPortLeft].SetProperties(
					_RectPort.left - 14,//15 for button width - M. White 15 April, 2019
					_RectPort.top + int(_PortraitsH * 0.50) - 12, //8 for 1/2 button height - M. White 15 April, 2019
					14, 25, 0, 78, 14, 78);
				_Buttons[ngPortRight].SetProperties(
					_RectPort.right,
					_RectPort.top + int(_PortraitsH * 0.50) - 12, 
					14, 25, 0, 103, 14, 103); 
				_Buttons[ngRollDice].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.03),
					_Buttons[ngComDwn].GetY() + int(_Buttons[ngComDwn].GetHeight() * 4.5),
					178, 39, 0, 0, 178, 0, 0, 0, true, "Roll", "Roll");
				_Buttons[ngQuit].SetProperties(
					//-59 because is half of width (centers the button) - M. White 8 April, 2019
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.25) - 89,
					//-52 to raise it up off of bottom of rectangle - M. White 7 April, 2019
					_RectMenu.bottom - 50,
					178, 39, 0, 0, 178, 0, 0, 0, true, "Return", "Return");
				_Buttons[ngStart].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 89,
					_RectMenu.bottom - 50,
					178, 39, 0, 0, 178, 0, 0, 0, true, "Start", "Accept");
				//Work these in...
				_Buttons[ngImport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 89,
					_RectMenu.bottom - 50,
					178, 39, 0, 0, 178, 0, 0, 0, true, "Start", "Accept");
				_Buttons[ngExport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 89,
					_RectMenu.bottom - 50,
					178, 39, 0, 0, 178, 0, 0, 0, true, "Start", "Accept");
				break;
			case 1:
				//Up/Down Arrows for Stats...
				//Start at Strength 'Up', range to Comeliness 'Down' - M. White 7 April, 2019
				if(_Buttons != NULL)
				{
					for(int i = ngStrUp; i <= ngComDwn; i += 2)
					{
						//UP Arrows...
						_Buttons[i].SetProperties(
							_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.40) + int(_bmpTrimmed->GetWidth() * 0.25),
							_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 5) + ((i - ngStrUp) * 20),
							16, 15, 30, 67, 46, 67);
						//Down Arrows...
						_Buttons[i + 1].SetProperties(
							_Buttons[i].GetX(), _Buttons[i].GetY() + _Buttons[i].GetHeight(),
							16, 15, 30, 52, 46, 52);
						_NumBtns += 2;
					}
				}
				_Buttons[ngSex].SetProperties(
					_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 12, 
					_RectPort.bottom,
					23, 23, 62, 75, 85, 75, 0, 0, true, "Female", "");
				_Buttons[ngPortLeft].SetProperties(
					_RectPort.left - 15,//15 for button width - M. White 15 April, 2019
					_RectPort.top + int(_PortraitsH * 0.50) - 8, //8 for 1/2 button height - M. White 15 April, 2019
					15, 16, 0, 52, 15, 52);
				_Buttons[ngPortRight].SetProperties(
					_RectPort.right,
					_RectPort.top + int(_PortraitsH * 0.50) - 8, 
					15, 16, 0, 68, 15, 68); 
				_Buttons[ngRollDice].	SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.03),
					_Buttons[ngComDwn].GetY() + int(_Buttons[ngComDwn].GetHeight() * 4.5),
					119, 26, 0, 0, 119, 0, 0, 0, true, "Roll", "Roll");
				_Buttons[ngQuit].SetProperties(
					//-59 because is half of width (centers the button) - M. White 8 April, 2019
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.25) - 59,
					//-52 to raise it up off of bottom of rectangle - M. White 7 April, 2019
					_RectMenu.bottom - 50,
					119, 26, 0, 0, 119, 0, 0, 0, true, "Return", "Return");
				_Buttons[ngStart].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 59,
					_RectMenu.bottom - 50,
					119, 26, 0, 0, 119, 0, 0, 0, true, "Start", "Accept");
				_Buttons[ngImport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 59,
					_RectMenu.bottom - 90,
					119, 26, 0, 0, 119, 0, 0, 0, true, "Load", "Load");
				_Buttons[ngExport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 59,
					_RectMenu.bottom - 130,
					119, 26, 0, 0, 119, 0, 0, 0, true, "Save", "Save");
				break;
			case 0:
				//Up/Down Arrows for Stats...
				//Start at Strength 'Up', range to Comeliness 'Down' - M. White 7 April, 2019
				if(_Buttons != NULL)
				{
					for(int i = ngStrUp; i <= ngComDwn; i += 2)
					{
						//UP Arrows...
						_Buttons[i].SetProperties(
							_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.40) + int(_bmpTrimmed->GetWidth() * 0.25),
							_RectMenu.top  + (int(_bmpTrimmed->GetHeight() * 1.25) * 5) + ((i - ngStrUp) * 20),
							 8,  8, 16, 33, 24, 33);
						//Down Arrows...
						_Buttons[i + 1].SetProperties(
							_Buttons[i].GetX(), _Buttons[i].GetY() + _Buttons[i].GetHeight(),
							 8,  8, 16, 24, 24, 24);
						_NumBtns += 2;
					}
				}
				_Buttons[ngSex].SetProperties(
					_RectPort.left + int((_RectPort.right - _RectPort.left) * 0.50) - 12, 
					_RectPort.bottom,
					21, 12, 32, 36, 44, 36, 0, 0, true, "Female", "");
				_Buttons[ngPortLeft].SetProperties(
					_RectPort.left - 15,//15 for button width - M. White 15 April, 2019
					_RectPort.top + int(_PortraitsH * 0.50) - 8, //8 for 1/2 button height - M. White 15 April, 2019
					 8,  8, 0, 24, 8, 24);
				_Buttons[ngPortRight].SetProperties(
					_RectPort.right,
					_RectPort.top + int(_PortraitsH * 0.50) - 8, 
					 8,  8, 0, 32, 8, 32); 
				_Buttons[ngRollDice].	SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.03),
					_Buttons[ngComDwn].GetY() + int(_Buttons[ngComDwn].GetHeight() * 4.5),
					60, 12, 0, 0, 119, 0, 0, 0, true, "Roll", "Roll");
				_Buttons[ngQuit].SetProperties(
					//-59 because is half of width (centers the button) - M. White 8 April, 2019
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.25) - 30,
					//-52 to raise it up off of bottom of rectangle - M. White 7 April, 2019
					_RectMenu.bottom - 50,
					60, 12, 0, 0, 60, 0, 0, 0, true, "Return", "Return");
				_Buttons[ngStart].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 30,
					_RectMenu.bottom - 50,
					60, 12, 0, 0, 60, 0, 0, 0, true, "Start", "Accept");
				_Buttons[ngImport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 30,
					_RectMenu.bottom - 90,
					60, 12, 0, 0, 60, 0, 0, 0, true, "Load", "Load");
				_Buttons[ngExport].SetProperties(
					_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.75) - 30,
					_RectMenu.bottom - 130,
					60, 12, 0, 0, 60, 0, 0, 0, true, "Save", "Save");
				break;
			};
		}
		break;
	case phLoadGame:
		//Recycle a variable RECT
		SetRect(&_rctPickAvatar,
			int(_pEngine->GetWidth() * 0.50) - int(_pEngine->GetWidth() * 0.17),
			int(_pEngine->GetHeight() * 0.10),
			int(_pEngine->GetWidth() * 0.50) + int(_pEngine->GetWidth() * 0.17),
			int(_pEngine->GetHeight() * 0.85));
		//Recycle RECT variable
		SetRect(&_MapSliderVert, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95),
			_rctPickAvatar.top  + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.15),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95) + 10,
			_rctPickAvatar.top  + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.15) + (_bmpTrimmed->GetHeight() * _showNumCampaigns));
		_intHorSlideLocation = _MapSliderVert.top - 6;
		//Recycle RECT variable
		SetRect(&_MiniWindow,
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.05), 
			_MapSliderVert.top,
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.91),
			_MapSliderVert.bottom);
		_NumTmpSubBtn = lgMAX;
		_tmpSingleBtn = new myButton[_NumTmpSubBtn];
		switch(_MonitorCat)
		{
		case 2:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 89,
				_MiniWindow.bottom  + 20, 
				178, 39, 0, 0, 178, 0, 356, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 89,
				_MiniWindow.bottom  + 20, 
				178, 39, 0, 0, 178, 0, 356, 0, true, "", "Continue");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 15, 15, 140, 78, 140, 93);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 15, 15, 155, 78, 155, 93);
			break;
		case 1:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 60,
				_MiniWindow.bottom  + 13, 
				119, 26, 0, 0, 119, 0, 238, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 60,
				_MiniWindow.bottom  + 13, 
				119, 26, 0, 0, 119, 0, 238, 0, true, "", "Continue");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 12, 12, 108, 52, 108, 64);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 12, 12, 120, 52, 120, 64);
			break;
		case 0:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 30,
				_MiniWindow.bottom  + 6, 
				 60, 12, 0, 0, 60, 0, 120, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 30,
				_MiniWindow.bottom  + 6, 
				 60, 12, 0, 0, 60, 0, 120, 0, true, "", "Continue");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 12, 12, 108, 52, 108, 64);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 12, 12, 120, 52, 120, 64);
			break;
		};
		break;
	case phDeleteGame:
		//Recycle a variable RECT
		SetRect(&_rctPickAvatar,
			int(_pEngine->GetWidth() * 0.50) - int(_pEngine->GetWidth() * 0.17),
			int(_pEngine->GetHeight() * 0.10),
			int(_pEngine->GetWidth() * 0.50) + int(_pEngine->GetWidth() * 0.17),
			int(_pEngine->GetHeight() * 0.85));
		//Recycle RECT variable
		SetRect(&_MapSliderVert, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95),
			_rctPickAvatar.top  + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.15),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95) + 10,
			_rctPickAvatar.top  + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.15) + (_bmpTrimmed->GetHeight() * _showNumCampaigns));
		_intHorSlideLocation = _MapSliderVert.top - 6;
		//Recycle RECT variable
		SetRect(&_MiniWindow,
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.05), 
			_MapSliderVert.top,
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.91),
			_MapSliderVert.bottom);
		_NumTmpSubBtn = lgMAX;
		_tmpSingleBtn = new myButton[_NumTmpSubBtn];
		switch(_MonitorCat)
		{
		case 2:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 89,
				_MiniWindow.bottom  + 20, 
				178, 39, 0, 0, 178, 0, 356, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 89,
				_MiniWindow.bottom  + 20, 
				178, 39, 0, 0, 178, 0, 356, 0, true, "", "Delete");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 15, 15, 140, 78, 140, 93);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 15, 15, 155, 78, 155, 93);
			break;
		case 1:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 60,
				_MiniWindow.bottom  + 13, 
				119, 26, 0, 0, 119, 0, 238, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 60,
				_MiniWindow.bottom  + 13, 
				119, 26, 0, 0, 119, 0, 238, 0, true, "", "Delete");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 12, 12, 108, 52, 108, 64);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 12, 12, 120, 52, 120, 64);
			break;
		case 0:
			_tmpSingleBtn[lgQuit].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25) - 30,
				_MiniWindow.bottom  + 6, 
				 60, 12, 0, 0, 60, 0, 120, 0, true, "", "Return");
			_tmpSingleBtn[lgContinue].SetProperties(
				_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.75) - 30,
				_MiniWindow.bottom  + 6, 
				 60, 12, 0, 0, 60, 0, 120, 0, true, "", "Delete");
			_tmpSingleBtn[lgScrollUp].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.top   - 20, 12, 12, 108, 52, 108, 64);
			_tmpSingleBtn[lgScrollDn].SetProperties(_MapSliderVert.left - 1, _MapSliderVert.bottom + 8, 12, 12, 120, 52, 120, 64);
			break;
		};
		break;
	case phEditor:
		_NumBtns		= MAX_edOPTIONS;
		_Buttons		= new myButton[_NumBtns];
		_NumTmpSingBtn	= MAX_edMenuOptions;
		_tmpSingleBtn	= new myButton[_NumTmpSingBtn];
		//These are always set to '2' - M. White 17 May, 2019
		_MenuScrUpDwn	= new myButton[2];
		//reset the menu index...
		_SideBarMenuIndex = 0; _NumBarMenuItems = 5;
		//NOTE: The button assignments here could have been put on a loop action using a script, instead of 
		//assigning them individually. Purpose of this is to keep Users from messing with the data as the 
		//assignment math is very particular
		switch(_MonitorCat)//edQuit = 0, edZoomIn, edZoomOut
		{
		case 2:
			{
			//Side Bar Mini-menu screen (Terrain Types)
			SetRect(&_SideBarMenu,
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 1));
			//Side bar display background - 
			//This declaration needs to know where the _SideBarMenu rect is, and then stretches down to
			//_RectMenu's top to fill up the screen space - M. White 3 May, 2019
			SetRect(&_SideBarBackGrnd,
				_SideBarMenu.left + 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75),
				_SideBarMenu.right - 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75) + 
					int((_EngineHeight - (_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75))) * 0.59));
			//Set the _MapLink to match, for use in a specific case - M. White 14 June, 2019
			_MapLink->SetSideBarScreen(_SideBarBackGrnd, _bmpTrimmed->GetHeight());

			SetRect(&_MiniWindow,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom - _TileH_Hex01 - 4,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom);

			//Set up the menu (which appears in the bottom-right of screen)
			SetRect(&_RectMenu,
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 105,
				_SideBarBackGrnd.bottom + (int(_bmpTrimmed->GetHeight() * 1.0) * 1),
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + 105,
				_SideBarBackGrnd.bottom + (int(_bmpTrimmed->GetHeight() * 1.6) * (_NumTmpSingBtn - 1)) + 5);//The last multiplier has to be 1 higher than the following SetProperties()

			//The last multiplier has to be 1 higher than the following SetProperties()
			expand = 4.0;

			_tmpSingleBtn[edNewWorldMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 0) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "New", "New World");
			_tmpSingleBtn[edNewSceneMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 1) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "New", "New Scene");
			_tmpSingleBtn[edLinkMaps].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 2) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "Return", "Link Maps");
			_tmpSingleBtn[edStartLoc].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (29 * 3) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, false, "Start Loc", "Start Location");
			_tmpSingleBtn[edOpen].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 4) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "Open", "Open");
			_tmpSingleBtn[edDelete].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 5) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "Delete", "Delete");
			_tmpSingleBtn[edSave].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 6) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, false, "Save", "Save");
			_tmpSingleBtn[edQuit].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 89,
				_RectMenu.top  + (41 * 7) + int(expand),
				178, 39,   0,  0, 178, 0, 356, 0, true, "Return", "Quit");

			//_bHiddenMap 
			_tmpSingleBtn[edHidden].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 89,
				8/*_RectMenu.top + int(int(_bmpTrimmed->GetHeight() * 1.6) * 6) + 10*/,
				178, 39,   0,  0, 178, 0, 356, 0, true, "Hidden Map", "Hidden Map");

			_Buttons[edMapSqr1].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.20) - 89,
				_PlayWin[_MAPVIEW].gRectT(),
				178, 39,   0,  39, 178, 39, 356, 0, true, "", "Square");
			_Buttons[edMapDiam].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.40) - 89,
				_PlayWin[_MAPVIEW].gRectT(),
				178, 39,   0,  39, 178, 39, 356, 0, true, "", "Diamond");
			_Buttons[edMapRhom].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.60) - 89,
				_PlayWin[_MAPVIEW].gRectT(),
				178, 39,   0,  39, 178, 39, 356, 0, true, "", "Rhombus");
			_Buttons[edMapHex1].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.80) - 89,
				_PlayWin[_MAPVIEW].gRectT(),
				178, 39,   0,  39, 178, 39, 356, 0, true, "", "Hexagon");

			//Set up the Slider rects...
			SetRect(&_MapSliderVert,
				_PlayWin[_MAPVIEW].gRectL() - 18,	_PlayWin[_MAPVIEW].gRectT() + 15,
				_PlayWin[_MAPVIEW].gRectL() - 12,	_PlayWin[_MAPVIEW].gRectB() - 15);
			SetRect(&_MapSliderHori, 
				_PlayWin[_MAPVIEW].gRectL() + 17,	_PlayWin[_MAPVIEW].gRectB() + 12,
				_PlayWin[_MAPVIEW].gRectR() - 17,	_PlayWin[_MAPVIEW].gRectB() + 18);
			_Buttons[edMapSlideUp]		.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.top    - 17, 16, 15, 30, 67, 46, 67);
			_Buttons[edMapSlideDown]	.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.bottom +  2, 16, 15, 30, 52, 46, 52);
			_Buttons[edMapSlideLeft]	.SetProperties(_MapSliderHori.left  - 17, _MapSliderHori.top	-  5, 15, 16,  0, 52, 15, 52);
			_Buttons[edMapSlideRight]	.SetProperties(_MapSliderHori.right +  2, _MapSliderHori.top    -  5, 15, 16,  0, 68, 15, 68);

			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top - 6, 12, 12, 108, 52, 108, 64);
			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
			}
			break;
		case 1:
			{				
			//Side Bar Mini-menu screen (Map categories drop down)
			SetRect(&_SideBarMenu,
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 1));

			//Side bar display background - 
			//This declaration needs to know where the _SideBarMenu rect is, and then stretches down to
			//_RectMenu's top to fill up the screen space - M. White 3 May, 2019
			SetRect(&_SideBarBackGrnd,
				_SideBarMenu.left + 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() * 0.50),
				_SideBarMenu.right - 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75) + 
					int((_EngineHeight - (_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75))) * 0.59));
			//Set the _MapLink to match, for use in a specific case - M. White 14 June, 2019
			_MapLink->SetSideBarScreen(_SideBarBackGrnd, _bmpTrimmed->GetHeight());

			SetRect(&_MiniWindow,
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom - _TileH_Hex01 - 4,
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom);

			//Set up the menu (which appears in the bottom-right of screen)
			SetRect(&_RectMenu,
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 75,
				_SideBarBackGrnd.bottom + int(_bmpTrimmed->GetHeight() * 0.70),
				_SideBarBackGrnd.left	+ int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + 75,
				_SideBarBackGrnd.bottom	+ int(_bmpTrimmed->GetHeight() * 0.70) + int(26.5 * (_NumTmpSingBtn - 1)));//26 height of buttons

			//The last multiplier has to be 1 higher than the following SetProperties()
			expand = 4.0;

			//	edNewWorldMenu, edNewSceneMenu, edLinkMaps, edStartLoc, edOpen, edDelete, edSave, edQuit,
			_tmpSingleBtn[edNewWorldMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 0) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "New", "New World");
			_tmpSingleBtn[edNewSceneMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 1) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "New", "New Scene");
			_tmpSingleBtn[edLinkMaps].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 2) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "Link Maps", "Link Maps");
			_tmpSingleBtn[edStartLoc].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 3) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, false, "Start Loc", "Start Location");
			_tmpSingleBtn[edOpen].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 4) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "Open", "Open");
			_tmpSingleBtn[edDelete].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 5) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "Delete", "Delete");
			_tmpSingleBtn[edSave].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 6) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, false, "Save", "Save Map");
			_tmpSingleBtn[edQuit].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 60,
				_RectMenu.top  + (29 * 7) + int(expand),
				119, 26,   0,  0, 119,  0, 238, 0, true, "Quit", "Quit");

			//_bHiddenMap edHidden
			_tmpSingleBtn[edHidden].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 60,
				8/*_RectMenu.top  + (29 * 7) + int(expand)*/,
				119, 26,   0,  0, 119,  0, 238, 0, true, "Hidden Map", "Hidden Map");

			_Buttons[edMapSqr1].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.20) - 60,
				_PlayWin[_MAPVIEW].gRectT(),
				119, 26, 0, 26, 119, 26, 238, 0, true,  "", "Square");
			_Buttons[edMapDiam].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.40) - 60,
				_PlayWin[_MAPVIEW].gRectT(),
				119, 26, 0, 26, 119, 26, 238, 0, true, "", "Diamond");
			_Buttons[edMapRhom].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.60) - 60,
				_PlayWin[_MAPVIEW].gRectT(),
				119, 26, 0, 26, 119, 26, 238, 0, true, "", "Rhombus");
			_Buttons[edMapHex1].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.80) - 60,
				_PlayWin[_MAPVIEW].gRectT(),
				119, 26, 0, 26, 119, 26, 238, 0, true,  "", "Hexagon");
			//Set up the Slider rects...
			SetRect(&_MapSliderVert,
				_PlayWin[_MAPVIEW].gRectL() - 18,	_PlayWin[_MAPVIEW].gRectT() + 15,
				_PlayWin[_MAPVIEW].gRectL() - 12,	_PlayWin[_MAPVIEW].gRectB() - 15);
			SetRect(&_MapSliderHori, 
				_PlayWin[_MAPVIEW].gRectL() + 17,	_PlayWin[_MAPVIEW].gRectB() + 12,
				_PlayWin[_MAPVIEW].gRectR() - 17,	_PlayWin[_MAPVIEW].gRectB() + 18);
			_Buttons[edMapSlideUp]		.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.top    - 17, 16, 15, 30, 67, 46, 67);
			_Buttons[edMapSlideDown]	.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.bottom +  2, 16, 15, 30, 52, 46, 52);
			_Buttons[edMapSlideLeft]	.SetProperties(_MapSliderHori.left  - 17, _MapSliderHori.top	-  5, 15, 16,  0, 52, 15, 52);
			_Buttons[edMapSlideRight]	.SetProperties(_MapSliderHori.right +  2, _MapSliderHori.top    -  5, 15, 16,  0, 68, 15, 68);

			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top - 6, 12, 12, 108, 52, 108, 64);
			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
			}
			break;
		case 0:
			{				
			//Side Bar Mini-menu screen (Map categories drop down)
			SetRect(&_SideBarMenu,
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.05),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 0),
				_PlayWin[_MAPVIEW].gRectR() + int((_EngineWidth - _PlayWin[_MAPVIEW].gRectR()) * 0.93),
				_PlayWin[_MAPVIEW].gRectT() + (_bmpTrimmed->GetHeight() * 1));

			//Side bar display background - 
			//This declaration needs to know where the _SideBarMenu rect is, and then stretches down to
			//_RectMenu's top to fill up the screen space - M. White 3 May, 2019
			SetRect(&_SideBarBackGrnd,
				_SideBarMenu.left + 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() * 0.50),
				_SideBarMenu.right - 4,
				_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75) + 
					int((_EngineHeight - (_SideBarMenu.bottom + int(_bmpTrimmed->GetHeight() *  0.75))) * 0.59));
			//Set the _MapLink to match, for use in a specific case - M. White 14 June, 2019
			_MapLink->SetSideBarScreen(_SideBarBackGrnd, _bmpTrimmed->GetHeight());

			SetRect(&_MiniWindow,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom - _TileH_Hex01 - 4,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + int(_TileW_Hex01 * 0.50),
				_SideBarBackGrnd.bottom);

			//Set up the menu (which appears in the bottom-right of screen)
			SetRect(&_RectMenu,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 75,
				_SideBarBackGrnd.bottom + (int(_bmpTrimmed->GetHeight() * 1.0) * 1),
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + 75,
				_SideBarBackGrnd.bottom + (int(_bmpTrimmed->GetHeight() * 1.55) * _NumTmpSingBtn));

			//The last multiplier has to be 1 higher than the following SetProperties()
			expand = 4.0;
			_tmpSingleBtn[edNewWorldMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 0) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "New", "New World");
			_tmpSingleBtn[edNewSceneMenu].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 1) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "New", "New Scene");
			_tmpSingleBtn[edLinkMaps].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 2) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "", "Link Maps");
			_tmpSingleBtn[edStartLoc].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 3) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, false, "Start Loc", "Start Location");
			_tmpSingleBtn[edOpen].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 4) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "Open", "Open");
			_tmpSingleBtn[edDelete].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 5) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "Delete", "Delete");
			_tmpSingleBtn[edSave].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 6) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, false, "Save", "Save");
			_tmpSingleBtn[edQuit].SetProperties(
				_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.50) - 30,
				_RectMenu.top  + (15 * 7) + int(expand),
				 60, 12,   0,  0,  60,  0, 120, 0, true, "Return", "Quit");

			//_bHiddenMap edHidden
			_tmpSingleBtn[edHidden].SetProperties(
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.50) - 60,
				8/*_RectMenu.top  + (29 * 7) + int(expand)*/,
				 60, 12,   0,  0,  60,  0, 120, 0, true, "Hidden Map", "Hidden Map");

			_Buttons[edMapSqr1].SetProperties(
				int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.24) - 30,
				int(_EngineHeight * 0.035) - 7,
				 60, 12, 0, 12, 60, 12, 120, 0, true,  "", "Square");
			_Buttons[edMapDiam].SetProperties(
				int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.42) - 30,
				int(_EngineHeight * 0.035) - 7,
				 60, 12, 0, 12, 60, 12, 120, 0, true, "", "Diamond");
			_Buttons[edMapRhom].SetProperties(
				int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.58) - 30,
				int(_EngineHeight * 0.035) - 7,
				 60, 12, 0, 12, 60, 12, 120, 0, true, "", "Rhombus");
			_Buttons[edMapHex1].SetProperties(
				int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.76) - 30,
				int(_EngineHeight * 0.035) - 7,
				 60, 12, 0, 12, 60, 12, 120, 0, true,  "", "Hexagon");
			
			//Set up the Slider rects...
			SetRect(&_MapSliderVert,
				_PlayWin[_MAPVIEW].gRectL() - 18,	_PlayWin[_MAPVIEW].gRectT() + 15,
				_PlayWin[_MAPVIEW].gRectL() - 12,	_PlayWin[_MAPVIEW].gRectB() - 15);
			SetRect(&_MapSliderHori, 
				_PlayWin[_MAPVIEW].gRectL() + 17,	_PlayWin[_MAPVIEW].gRectB() + 12,
				_PlayWin[_MAPVIEW].gRectR() - 17,	_PlayWin[_MAPVIEW].gRectB() + 18);
			_Buttons[edMapSlideUp]		.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.top    - 17, 16, 15, 30, 67, 46, 67);
			_Buttons[edMapSlideDown]	.SetProperties(_MapSliderVert.left  -  5, _MapSliderVert.bottom +  2, 16, 15, 30, 52, 46, 52);
			_Buttons[edMapSlideLeft]	.SetProperties(_MapSliderHori.left  - 17, _MapSliderHori.top	-  5, 15, 16,  0, 52, 15, 52);
			_Buttons[edMapSlideRight]	.SetProperties(_MapSliderHori.right +  2, _MapSliderHori.top    -  5, 15, 16,  0, 68, 15, 68);

			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[0].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.top - 6, 12, 12, 108, 52, 108, 64);
			//-6 from the right edge so that the button rests half way into the trim - M. White 04 May, 2019
			_MenuScrUpDwn[1].SetProperties(_SideBarBackGrnd.right - 6, _SideBarBackGrnd.bottom - 6, 12, 12, 108, 52, 108, 64);
			}
			break;
		};
		//Side bar terrain menu options...
		_SideBarMenuStr = new string[edMC_MAXCats];
		for(int i = 0; i < edMC_MAXCats; i++)
			_SideBarMenuStr[i] = "";
		_SideBarMenuStr[edMC_Cities]		= "Cities";
		_SideBarMenuStr[edMC_Coastal]		= "Coastal";
		_SideBarMenuStr[edMC_Forests]		= "Forests";
		_SideBarMenuStr[edMC_RiverRoads]	= "Rivers and Roads";
		_SideBarMenuStr[edMC_Terrain]		= "Terrain";
		_SideBarMenuStr[edMC_walls001]		= "Walls";
		_SideBarMenuStr[edMC_Monsters]		= "Monsters";
		break;
	case phPlayScrn:
		SetRect(&_SideBarBackGrnd, //+/- 16 to get separation
			_PlayWin[_MAPVIEW].gRectR() + 16, _PlayWin[_MAPVIEW].gRectT(), _pEngine->GetWidth() - 16, _PlayWin[_MAPVIEW].gRectB());
		
		//Set the Avatar Protrait RECT, which will be used as a Button of sorts...
		//Dependent upon RECT: _SideBarBackGrnd 
		SetRect(&_PlayScrnAvatar,
			_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_PortraitsW * 0.50),
			(8 + _bmpMiniMap->GetHeight() + 8), //8 from top of client, below minimap, allow 8 for rect trim
			_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - int(_PortraitsW * 0.50) + _PortraitsW,
			(8 + _bmpMiniMap->GetHeight() + 8) + _PortraitsH);//...plus portrait height
		
		CopyRect(&rect, &_MSG->CurrentRect);

		_NumBtns = gpMAX;
		if(_NumBtns > 1)
		{
			_Buttons = new myButton[gpMAX];
			switch(_MonitorCat)
			{
			case 2:
				_Buttons[gpQuit].SetProperties(_pEngine->GetWidth() - 35, 13, 22, 22, 200, 78, 200, 100, 200, 122, true, "", "");
				_Buttons[gpExpandMsg].SetProperties(rect.right - 8, rect.top - 8, 24, 24, 140, 108, 140, 108, 140, 108, true, "", "");
				_Buttons[gpShrinkMsg].SetProperties(rect.right - 8, rect.top - 8, 24, 24, 164, 108, 164, 108, 164, 108, true, "", "");
				break;
			case 1:
				_Buttons[gpQuit].SetProperties(_pEngine->GetWidth() - 27, 12, 15, 15, 156, 52, 156,  67, 156,  82, true, "", "");
				_Buttons[gpExpandMsg].SetProperties(rect.right - 8, rect.top - 8, 16, 16, 108, 76, 108, 76, 108, 76, true, "", "");
				_Buttons[gpShrinkMsg].SetProperties(rect.right - 8, rect.top - 8, 16, 16, 124, 76, 124, 76, 124, 76, true, "", "");
				break;
			case 0:
				_Buttons[gpQuit].SetProperties(_pEngine->GetWidth() - 19, 11,  8,  8,  84, 24,  84,  32,  84,  40, true, "", "");
				_Buttons[gpExpandMsg].SetProperties(rect.right - 8, rect.top - 8,  8,  8,  56,  38, 56,  38, 56,  38, true, "", "");
				_Buttons[gpShrinkMsg].SetProperties(rect.right - 8, rect.top - 8,  8,  8,  56,  38, 56,  38, 56,  38, true, "", "");
				break;
			};
		}
		else
		{
			_Buttons = new myButton();
			switch(_MonitorCat)
			{
			case 2: _Buttons->SetProperties(_pEngine->GetWidth() - 35, 13, 22, 22, 200, 78, 200, 100, 200, 122, true, "", ""); break;
			case 1: _Buttons->SetProperties(_pEngine->GetWidth() - 27, 12, 15, 15, 156, 52, 156,  67, 156,  82, true, "", ""); break;
			case 0: _Buttons->SetProperties(_pEngine->GetWidth() - 19, 11,  8,  8,  84, 24,  84,  32,  84,  40, true, "", ""); break;
			};
		}
		break;
	};
}
void GetTacticalMapData(int Screen)
{
	if(_IsFloatingMap == true)
	{
	}
	else
	{
		switch(Screen)
		{
		case SQR_Map:		GetSqrMapData();		break;
		case DIA_Map:		GetSqrIsoMapData();		break;
		case RHO_Map:		GetIsoMapData();		break;
		case HEX_Map01:		GetHex01MapData();		break;
		case HEX_Map02:		GetHex02MapData();		break;
		};
	}
}
void GetSqrMapData()
{
	int XMod = 0, YMod = 0;

	XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol();
	YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow();

	for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
		for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
			if((XMod + x >= 0) && (XMod + x < _TactMapW) && (YMod + y >= 0) && (YMod + y < _TactMapH))
			{
				//reset the avatars
				_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;
				if(_edShowMapOfInt == true)
				{
					_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][YMod + y];
					if(_TactMap[XMod + x][YMod + y].AvatarIndex > -1)
						_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = _TactMap[XMod + x][YMod + y].AvatarIndex;
				}
				else
				{
					_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][YMod + y];
					if(_TactMapBack[XMod + x][YMod + y].AvatarIndex > -1)
						_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = _TactMapBack[XMod + x][YMod + y].AvatarIndex;
				}
			}
}
void GetSqrIsoMapData()
{
	int XMod = 0, YMod = 0;

	XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol();
	YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow();

	for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
		for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
		{
			if(_TileWalkerY & 1)
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) && ((YMod - 1) + y >= 0) && ((YMod - 1) + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][(YMod - 1) + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][(YMod - 1) + y];
				}
			}
			else
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) && (YMod + y >= 0) && (YMod + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][YMod + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][YMod + y];
				}
			}
		}
}
void GetIsoMapData()
{
	int XMod = 0, YMod = 0;

	XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol();
	YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow();

	for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
		for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
		{	
			if(_TileWalkerY & 1)
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) && ((YMod - 1) + y >= 0) && ((YMod - 1) + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][(YMod - 1) + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][(YMod - 1) + y];
				}
			}
			else
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) && (YMod + y >= 0) && (YMod + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][YMod + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][YMod + y];
				}
			}
		}
}
void GetHex01MapData()
{
	int XMod = 0, YMod = 0;

	XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol();
	YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow();

	for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
		for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
		{
			if(_TileWalkerY & 1)
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) &&
				   ((YMod - 1) + y >= 0) && ((YMod - 1) + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][(YMod - 1) + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][(YMod - 1) + y];
				}
			}
			else
			{
				if((XMod + x >= 0) && (XMod + x < _TactMapW) &&
				   (YMod + y >= 0) && (YMod + y < _TactMapH))
				{
					if(_edShowMapOfInt == true)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][YMod + y];
					else						_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMapBack[XMod + x][YMod + y];
				}
			}
		}
}
void GetHex02MapData()
{
	int XMod = 0, YMod = 0;

	XMod = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol();
	YMod = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow();

	for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
		for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
		{
			if(_TileWalkerY & 1)	_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][(YMod - 1) + y];
			else				_PlayWin[_MAPVIEW].PW_Buffer[x][y] = _TactMap[XMod + x][YMod + y];
		}
}
void RandomTactMap()
{
	_TileWalkerX = _PlayWin[_MAPVIEW].GetCentCol();
	_TileWalkerY = _PlayWin[_MAPVIEW].GetCentRow();
	//Assign Random data to the tactical Map
	//Reconfigure this to take actual map data 
	//in future games - M. White 22 March, 2019
	for(int y = 0; y < _TactMapH; y++)
		for(int x = 0; x < _TactMapW; x++)
		{
			if(_edNewWorldTrue == true || _edNewSceneTrue == true)
			{
				if(x < _MapLimitL || x > _MapLimitR ||  y < _MapLimitT || y > _MapLimitB)
				{
					_TactMap[x][y].SetBG(MAX_TERRAIN - 1);
					_TactMap[x][y].SetCity(-1);
					_TactMap[x][y].SetCoastX(-1);
					_TactMap[x][y].SetCoastY(-1);
					_TactMap[x][y].SetForest(-1);
					_TactMap[x][y].SetRoadRiver(-1);
					_TactMap[x][y].SetWall(-1);
					_TactMap[x][y].SetVisited(true);
					_TactMap[x][y].AvatarIndex = -1;
				}
				else
				{
					_TactMap[x][y].SetBG(MAX_TERRAIN - 2);
					_TactMap[x][y].SetCity(-1);
					_TactMap[x][y].SetCoastX(-1);
					_TactMap[x][y].SetCoastY(-1);
					_TactMap[x][y].SetForest(-1);
					_TactMap[x][y].SetRoadRiver(-1);
					_TactMap[x][y].SetWall(-1);
					_TactMap[x][y].SetVisited(true);
					_TactMap[x][y].AvatarIndex = -1;
				}
			}
			else
			{
				if(x < _MapLimitL || x > _MapLimitR || y < _MapLimitT || y > _MapLimitB)
				{
					_TactMap[x][y].SetBG(MAX_TERRAIN - 1);
					_TactMap[x][y].SetCity(-1);
					_TactMap[x][y].SetCoastX(-1);
					_TactMap[x][y].SetCoastY(-1);
					_TactMap[x][y].SetForest(-1);
					_TactMap[x][y].SetRoadRiver(-1);
					_TactMap[x][y].SetWall(-1);
					_TactMap[x][y].SetVisited(true);
					_TactMap[x][y].AvatarIndex = -1;
				}
				else
				{
					_TactMap[x][y].SetBG(MAX_TERRAIN - 2);
					_TactMap[x][y].SetCity(-1);
					_TactMap[x][y].SetCoastX(-1);
					_TactMap[x][y].SetCoastY(-1);
					_TactMap[x][y].SetForest(-1);
					_TactMap[x][y].SetRoadRiver(-1);
					_TactMap[x][y].SetVisited(true);
					_TactMap[x][y].AvatarIndex = -1;
				}
			}
		}
}
void GamePaint(HDC hDC)
{
	switch(_GAMEPHASE)
	{
	case phPlayScrn:		PaintPlayScrn(hDC);			break;
	case phEditor:			PaintEditor(hDC);			break;
	case phMenuScrn:		PaintMainMenu(hDC);			break;
	case phNewGameScrn:		PaintNewGame(hDC);			break;
	case phLoadGame:		PaintMainMenu(hDC);			break;
	case phDeleteGame:		PaintMainMenu(hDC);			break;
	case phSplashScrn:		PaintSplashScrn(hDC);		break;
	};
}
void PaintMiniMap(HDC hDC)
{
//	RECT rect = {0, 0, 0, 0};
//	HBRUSH hB;


	//imgW and -H are modified according to the User's monitor so
	//that their size is significant enough for them to see
	//Source represents a larget location in Tile images to copy from
	//PaintTo is the CENTER of where the minimap will land
	int x, y, AvX, AvY, imgW, imgH, paintToX, paintToY;

	switch(_MonitorCat)
	{
	case 2: imgW = 6, imgH = 6; break;
	case 1: imgW = 3, imgH = 3; break;
	case 0: imgW = 1, imgH = 1; break;
	};

	paintToX = _PlayWin->gRectR() + 8;	//+8 to paint over trim
	paintToY = 8;						//Orientated from edge of client top

	//We'll loop through the minimap using the main map data, as centered on the avatar
	for(y = 0; y < int(_bmpMiniMap->GetHeight() / double(imgH)); y++)
	{
		for(x = 0; x < int(_bmpMiniMap->GetWidth() / double(imgW)); x++)
		{
			AvX = (_TileWalkerX - int(int(_bmpMiniMap->GetWidth()  / double(imgW))) / 2) + x;
			AvY = (_TileWalkerY - int(int(_bmpMiniMap->GetHeight() / double(imgH))) / 2) + y;
			if(_TactMap[AvX][AvY].GetVisited() == true)
			{
				//Subtracting _PlayWin[_MAPVIEW].GetCentCol() from both to get a square look...otherwise it's length is longer
				if(_TactMap[AvX][AvY].GetWall() > -1)
				{
					_bmpTiles[SQR_Map].DrawPart(hDC, paintToX + (x * imgW) + int(imgW / 2), paintToY + (y * imgH) + int(imgH / 2),
						int(_PlayWin[_MAPVIEW].GetTileW() * 13) + imgW, imgH, imgW, imgH, false);
				}
				else
				{
					_bmpTiles[SQR_Map].DrawPart(hDC, paintToX + (x * imgW) + int(imgW / 2), paintToY + (y * imgH) + int(imgH / 2), 
						int(_TactMap[AvX][AvY].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + imgW, imgH, imgW, imgH, false);
				}
			}
			else
				_bmpTiles[SQR_Map].DrawPart(hDC, paintToX + (x * imgW) + int(imgW / 2), paintToY + (y * imgH) + int(imgH / 2),
				int(_PlayWin[_MAPVIEW].GetTileW() * 13) + imgW, imgH, imgW, imgH, false);

		}
	}
	//Paint the trim to make it look nice...
	_bmpMiniMap->Draw(hDC, paintToX, paintToY, true);
}
void PaintBorderTrim(HDC hDC)
{
	int x, y;
	//Trim pieces around Client Window _EngineWidth, _EngineHeight
	_bmpTrim[0].DrawPart(hDC, 0, 0, 0, 0, 8, 8, false);									//Top-Left Corner Piece
	_bmpTrim[0].DrawPart(hDC, _EngineWidth - 8, 0, 8, 0, 8, 8, false);					//Top-Righ Corner Piece
	_bmpTrim[0].DrawPart(hDC, 0, _EngineHeight - 8, 0, 8, 8, 8, false);					//Bot-Left Corner Piece
	_bmpTrim[0].DrawPart(hDC, _EngineWidth - 8, _EngineHeight - 8, 8, 8, 8, 8, false);	//Bot-Righ Corner Piece
	//Horizonal Pieces
	for(x = 0; x < (_EngineWidth / 128); x++)
	{
		_bmpTrim[2].DrawPart(hDC, (x * 128) + 8,                    0, 0,   0, 128, 8, false);//top
		_bmpTrim[2].DrawPart(hDC, (x * 128) + 8, _EngineHeight - 8, 0, 8, 128,   8, false);//bottom
	}
	//Paint Remaining Horizontal
	_bmpTrim[2].DrawPart(hDC, (x * 128) + 8,                 0, 0, 0, _EngineWidth - (x * 128) - 16, 8, false);//top
	_bmpTrim[2].DrawPart(hDC, (x * 128) + 8, _EngineHeight - 8, 0, 8, _EngineWidth - (x * 128) - 16, 8, false);//bottom
	//Verticle Pieces
	for(y = 0; y < (_EngineHeight / 128); y++)
	{
		_bmpTrim[1].DrawPart(hDC, 0, (y * 128) + 8, 0, 0, 8, 128, false);//top
		_bmpTrim[1].DrawPart(hDC, _EngineWidth - 8, (y * 128) + 8, 8, 0, 8, 128, false);//bottom
	}
	//Paint Remaiing Verticle
	_bmpTrim[1].DrawPart(hDC, 0, (y * 128) + 8, 0, 0, 8, _EngineHeight - (y * 128) - 16, false);//top
	_bmpTrim[1].DrawPart(hDC, _EngineWidth - 8, (y * 128) + 8, 8, 0, 8, _EngineHeight - (y * 128) - 16, false);//bottom
}
void InvertedTrimRect(HDC hDC, RECT rect)
{
	int x, y;
	//Trim pieces around Client Window _EngineWidth, _EngineHeight
	_bmpTrim[0].DrawPart(hDC, rect.left - 8, rect.top - 8, 0, 0, 8, 8, false);			//Top-Left Corner Piece
	_bmpTrim[0].DrawPart(hDC, rect.right, rect.top - 8,    8, 0, 8, 8, false);			//Top-Righ Corner Piece
	_bmpTrim[0].DrawPart(hDC, rect.left - 8, rect.bottom,  0, 8, 8, 8, false);			//Bot-Left Corner Piece
	_bmpTrim[0].DrawPart(hDC, rect.right, rect.bottom,     8, 8, 8, 8, false);			//Bot-Righ Corner Piece
	//Horizonal Pieces
	for(x = 0; x < ((rect.right - rect.left) / 128); x++)
	{
		_bmpTrim[2].DrawPart(hDC, rect.left + (x * 128), rect.top - 8,  0, 8, 128, 8, false);//top
		_bmpTrim[2].DrawPart(hDC, rect.left + (x * 128), rect.bottom,   0, 0, 128, 8, false);//bottom
	}
	//Paint Remaining Horizontal
	_bmpTrim[2].DrawPart(hDC, rect.left + (x * 128), rect.top - 8,      0, 8, (rect.right - rect.left) - (x * 128), 8, false);//top
	_bmpTrim[2].DrawPart(hDC, rect.left + (x * 128), rect.bottom,       0, 0, (rect.right - rect.left) - (x * 128), 8, false);//bottom
	//Verticle Pieces
	for(y = 0; y < ((rect.bottom - rect.top) / 128); y++)
	{
		_bmpTrim[1].DrawPart(hDC, rect.left - 8, rect.top + (y * 128),  8, 0, 8, 128, false);//top
		_bmpTrim[1].DrawPart(hDC, rect.right, rect.top + (y * 128),     0, 0, 8, 128, false);//bottom
	}
	//Paint Remaiing Verticle
	_bmpTrim[1].DrawPart(hDC, rect.left - 8, rect.top + (y * 128),      8, 0, 8, (rect.bottom - rect.top) - (y * 128), false);//top
	_bmpTrim[1].DrawPart(hDC, rect.right, rect.top + (y * 128),         0, 0, 8, (rect.bottom - rect.top) - (y * 128), false);//bottom
}
void TextBoxTrim(HDC hDC, RECT rect, int NumRows)
{
	HBRUSH	hB;
	RECT	Local = {0, 0, 0, 0};
	int		x, z;

	//Create a base color background - M. White 10 April, 2019
	hB = CreateSolidBrush(RGB(0, 0, 0));

	//Offset from left / offset from top / offset from right / orientate from top, and then offset - M. White 10 April, 2019
	SetRect(&Local, rect.left + 1, rect.top + 1, rect.right - 1, rect.bottom);
	FillRect(hDC, &Local, hB);
	DeleteObject(hB);

	//Paint the top Edge - M. White 17 April, 2019
	_bmpTrimmed->DrawPart(hDC, rect.left,		rect.top, 0,							0, 10, (_bmpTrimmed->GetHeight() - 2), false);
	_bmpTrimmed->DrawPart(hDC, rect.right - 10,	rect.top, _bmpTrimmed->GetWidth() - 10, 0, 10, (_bmpTrimmed->GetHeight() - 2), false);
	//Loop through the rest of the bar's top edge...
	for(x = (rect.left + 10); x < (rect.right - 10); x++)
		_bmpTrimmed->DrawPart(hDC, x, rect.top, 5, 0, 1, _bmpTrimmed->GetHeight() - 2, false);

	//Vertical bars - M. White 17 April, 2019
	for(z = 0; z < NumRows; z++)
	{
		//The left and right edges of the rectangle - M. White 11 April, 2019
		_bmpTrimmed->DrawPart(hDC,
			rect.left,
			rect.top + (z * _bmpTrimmed->GetHeight()),
			0, 0,
			1, _bmpTrimmed->GetHeight(),
			false);
		_bmpTrimmed->DrawPart(hDC,
			rect.right - 1,
			rect.top + (z * _bmpTrimmed->GetHeight()),
			(_bmpTrimmed->GetWidth() - 1), 0, 
			1, _bmpTrimmed->GetHeight(),
			false);
	}
	//Paint Bottom Edge - M. White 17 April, 2019
	for(x = (rect.left + 10); x < (rect.right - 10); x++)
		_bmpTrimmed->DrawPart(hDC, 
			x, 
			rect.top + ((NumRows - 1) * _bmpTrimmed->GetHeight()) + 2,
			5, 2, 1, _bmpTrimmed->GetHeight() - 2, false);
	//Left and Right bottom corners 
	_bmpTrimmed->DrawPart(hDC,
		rect.left,
		rect.top + ((NumRows - 1) * _bmpTrimmed->GetHeight()) + 2,
		0, 2,
		10, (_bmpTrimmed->GetHeight() - 2),
		false);
	_bmpTrimmed->DrawPart(hDC,
		rect.right - 10,
		rect.top + ((NumRows - 1) * _bmpTrimmed->GetHeight()) + 2,
		_bmpTrimmed->GetWidth() - 10, 2,
		10, (_bmpTrimmed->GetHeight() - 2),
		false);
}
void ThinTrimBox(HDC hDC, RECT rect, int Red, int Green, int Blue)
{
	HBRUSH	hB;
	RECT	Local = {0, 0, 0, 0};
	int		x, y;
	//Create a base color background - M. White 10 April, 2019
	SetRect(&Local, rect.left, rect.top, rect.right, rect.bottom); 
	hB = CreateSolidBrush(RGB(Red, Green, Blue)); FillRect(hDC, &Local, hB); DeleteObject(hB);
	//Switch Acocrding to Monitor
	switch(_MonitorCat)
	{
	case 2:
		//Horizonal Pieces
		for(x = 0; x < int((rect.right - rect.left) / 10); x++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,  1, 0, 10, 1, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,   1, 0, 10, 1, false);//bottom
		}
		//Paint Remaining Horizontal
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,      1, 0, (rect.right - rect.left) - (x * 10), 1, false);//top
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,       1, 0, (rect.right - rect.left) - (x * 10), 1, false);//bottom
		//Verticle Pieces
		for(y = 0; y < ((rect.bottom - rect.top) / 10); y++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),  0, 1, 1, 10, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),  0, 1, 1, 10, false);//bottom
		}
		//Paint Remaiing Verticle
		_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//top
		_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//bottom
		break;
	case 1:
		//Horizonal Pieces
		for(x = 0; x < int((rect.right - rect.left) / 10); x++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,  1, 0, 10, 1, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,   1, 0, 10, 1, false);//bottom
		}
		//Paint Remaining Horizontal
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,      1, 0, (rect.right - rect.left) - (x * 10), 1, false);//top
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,       1, 0, (rect.right - rect.left) - (x * 10), 1, false);//bottom
		//Verticle Pieces
		for(y = 0; y < ((rect.bottom - rect.top) / 10); y++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),  0, 1, 1, 10, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),  0, 1, 1, 10, false);//bottom
		}
		//Paint Remaiing Verticle
		_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//top
		_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//bottom
		break;
	case 0:
		//Horizonal Pieces
		for(x = 0; x < int((rect.right - rect.left) / 10); x++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,  1, 0, 10, 1, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,   1, 0, 10, 1, false);//bottom
		}
		//Paint Remaining Horizontal
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.top - 1,      1, 0, (rect.right - rect.left) - (x * 10), 1, false);//top
		_bmpTrimmed->DrawPart(hDC, rect.left + (x * 10), rect.bottom,       1, 0, (rect.right - rect.left) - (x * 10), 1, false);//bottom
		//Verticle Pieces
		for(y = 0; y < ((rect.bottom - rect.top) / 10); y++)
		{
			_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),  0, 1, 1, 10, false);//top
			_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),  0, 1, 1, 10, false);//bottom
		}
		//Paint Remaiing Verticle
		_bmpTrimmed->DrawPart(hDC, rect.left - 1, rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//top
		_bmpTrimmed->DrawPart(hDC, rect.right,    rect.top + (y * 10),      0, 1, 1, (rect.bottom - rect.top) - (y * 10), false);//bottom
		break;
	};
}
void FakeProgressBar(HDC hDC, int Red, int Green, int Blue)
{
	//This is to give the User something to watch while the program is 
	//doing something in the background that isn't being measured...
	HBRUSH	hB;
	RECT	Local = {0, 0, 0, 0};
	SetRect(&Local,
		_rctFake.left,
		_rctFake.top,
		_rctFake.right + (-_intFake),
		_rctFake.bottom); 
	hB = CreateSolidBrush(RGB(Red, Green, Blue)); FillRect(hDC, &Local, hB); DeleteObject(hB);
}
void PaintSplashScrn(HDC hDC)
{
	PaintBorderTrim(hDC);//Paint all of the Border Trim - M. White 5 April, 2019

	//Paint the Splash Screen in the middle of the screen - M. White 5 April, 2019
	_bmpMultiUse->Draw(hDC, int(_EngineWidth / 2) - int(_bmpMultiUse->GetWidth() / 2), 45, false);

	//Set text color and to transparency so it appears on the buttons, etc - M. White 5 April, 2019
	SetTextColor(hDC, RGB(255, 242, 0)); SetBkMode(hDC, TRANSPARENT);

	MyDrawText(hDC, "READ:", int(_EngineWidth / 2) - 25, _bmpMultiUse->GetHeight() + 65, 50, 16, TCent);
	MyDrawText(hDC, "This game is not for sale. It is not a project of any similar product line and should not be associated with them.", 
		10, _bmpMultiUse->GetHeight() + 87, _EngineWidth - 20, 16, TCent);
	MyDrawText(hDC, "This game is simply a 'passion' project made by the developer to build up their skill level.", 
		10, _bmpMultiUse->GetHeight() + 111, _EngineWidth - 20, 16, TCent);
	MyDrawText(hDC, "The title art belongs to Larry Elmore, please visit his web site at www.larryelmore.com", 
		10, _bmpMultiUse->GetHeight() + 135, _EngineWidth - 20, 16, TCent);

	if(_Buttons->DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
		_bmpButtons->DrawPart(hDC, _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetBmpXAlt(), _Buttons->GetBmpYAlt(), _Buttons->GetWidth(), _Buttons->GetHeight(), true);
	else
		_bmpButtons->DrawPart(hDC, _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetBmpX(), _Buttons->GetBmpY(), _Buttons->GetWidth(), _Buttons->GetHeight(), true);

	MyDrawText(hDC, _Buttons->GetDisplayText(), _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetWidth(), _Buttons->GetHeight(), TCent);

	//Reset text color and transparency back to default - M. White 5 April, 2019
	SetTextColor(hDC, RGB(0, 0, 0)); SetBkMode(hDC, OPAQUE);
}
void PaintMainMenu(HDC hDC)
{
	HBRUSH	hB;
	RECT	rect = {0, 0, 0, 0};
	hB = CreateSolidBrush(RGB(0, 0, 0));
	int vShaIndex = 0;
	SetRect(&rect, 0, 0, _EngineWidth, _EngineHeight);
	FillRect(hDC, &rect, hB);
	DeleteObject(hB);
	string strTmp;

	//Paint all of the Border Trim - M. White 5 April, 2019
	PaintBorderTrim(hDC);

	SetBkMode(hDC, TRANSPARENT);
	if		(_edOpenTrue	== true)
	{
		SetRect(&rect, _rctPickAvatar.left, _rctPickAvatar.top, _rctPickAvatar.right, _rctPickAvatar.bottom);
		InvertedTrimRect(hDC, rect);
		_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, (rect.right - rect.left), (rect.bottom - rect.top), false); 
		
		//Title Bar
		SetRect(&rect, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.05),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.04),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.04) + _bmpTrimmed->GetHeight());
		InvertedTrimRect(hDC, rect);
		PaintAShadow(hDC, 0, 0, 0, rect);
		SetTextColor(hDC, RGB(255, 255, 255));
		MyDrawText(hDC, "Pick a Campaign to Open", rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);

		//Verticle Slide Bar
		SetRect(&rect, _MapSliderVert.left, _MapSliderVert.top, _MapSliderVert.right, _MapSliderVert.bottom);
		ThinTrimBox(hDC, rect, 0, 0, 0);
		//Main list window
		SetRect(&rect, _MiniWindow.left, _MiniWindow.top, _MiniWindow.right, _MiniWindow.bottom);
		ThinTrimBox(hDC, rect, 0, 0, 0);
		//Check to see if the mouse is within the area
		if(_XMouse >= _MiniWindow.left && _XMouse < _MiniWindow.right && _YMouse >= _MiniWindow.top && _YMouse < _MiniWindow.bottom)
		{
			vShaIndex = VRD(_MiniWindow.top, _YMouse, _bmpTrimmed->GetHeight());
			SetRect(&rect,
				_MiniWindow.left  + 5, _MiniWindow.top + (vShaIndex * _bmpTrimmed->GetHeight()),
				_MiniWindow.right - 4, _MiniWindow.top + (vShaIndex * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
			PaintAShadow(hDC, 75, 75, 75, rect);
		}		
		SetTextColor(hDC, RGB(255, 242, 0)); 
		//Paint Buttons
		for(int i = 0; i < _NumTmpSubBtn; i++)
		{
			if(_tmpSingleBtn[i].GetIsActive() == false)
				_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
					_tmpSingleBtn[i].GetBmpInActX(), _tmpSingleBtn[i].GetBmpInActY(),
					_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
			else
			{
				if(_tmpSingleBtn[i].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(), 
						_tmpSingleBtn[i].GetBmpXAlt(), _tmpSingleBtn[i].GetBmpYAlt(),
						_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
						_tmpSingleBtn[i].GetBmpX(), _tmpSingleBtn[i].GetBmpY(),
						_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
			}
			MyDrawText(hDC, _tmpSingleBtn[i].GetDisplayText(),
				_tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
				_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), TCent);
		}
		//Paint icon on slider
		switch(_MonitorCat)
		{
		case 2:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation, 185, 78, 15, 15, true);	break;
		case 1:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation, 144, 52, 12, 12, true);	break;
		case 0:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation,  77, 24,  7,  7, true);	break;
		};
		//Paint the list of available Campaigns
		if(_NumCampaigns > 0)
		{
			SetTextColor(hDC, RGB(255, 255, 255));
			if(_NumCampaigns > 1)
			{
				for(i = 0; i < _showNumCampaigns; i++)
				{
					//Paint a shadow on a selected target...
					if	(_EditingTarget1 >= 0)
					{
						if(i == (_EditingTarget1 - _ScrollIndex))
						{
							SetRect(&rect,
								_MiniWindow.left  + 5, _MiniWindow.top + (i * _bmpTrimmed->GetHeight()),
								_MiniWindow.right - 4, _MiniWindow.top + (i * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
							PaintAShadow(hDC, 153, 76, 0, rect);
						}
					}
					if(i + _ScrollIndex < _NumCampaigns)
					{
						strTmp = _CampaignsAvail[i + _ScrollIndex].GetNickName();
						for(int z = 0; z < int(strTmp.length()); z++)
							if(strTmp[z] == '_') strTmp[z] = ' ';
						MyDrawText(hDC, strTmp,
							_MiniWindow.left + 10, _MiniWindow.top  + (i * _bmpTrimmed->GetHeight()), 
							(_MiniWindow.right - _MiniWindow.left), _bmpTrimmed->GetHeight(), TLeft);
					}
				}
			}
			else
			{
				//Paint a shadow on a selected target...
				if	(_EditingTarget1 >= 0)
				{
					if(_EditingTarget1 == 0)
					{
						SetRect(&rect, _MiniWindow.left  + 5, _MiniWindow.top, _MiniWindow.right - 4, _MiniWindow.top + _bmpTrimmed->GetHeight());
						PaintAShadow(hDC, 153, 76, 0, rect);
					}
				}
				strTmp = _CampaignsAvail->GetNickName();
				for(int z = 0; z < int(strTmp.length()); z++)
					if(strTmp[z] == '_') strTmp[z] = ' ';
				MyDrawText(hDC, strTmp, _MiniWindow.left + 10, _MiniWindow.top,
					(_MiniWindow.right - _MiniWindow.left), _bmpTrimmed->GetHeight(), TLeft);
			}
		}
	}
	else if	(_edDeleteTrue	== true)
	{
		SetRect(&rect, _rctPickAvatar.left, _rctPickAvatar.top, _rctPickAvatar.right, _rctPickAvatar.bottom);
		InvertedTrimRect(hDC, rect);
		_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, (rect.right - rect.left), (rect.bottom - rect.top), false); 
		
		//Title Bar
		SetRect(&rect, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.05),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.04),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.95),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.04) + _bmpTrimmed->GetHeight());
		InvertedTrimRect(hDC, rect);
		PaintAShadow(hDC, 0, 0, 0, rect);
		SetTextColor(hDC, RGB(255, 255, 255));
		MyDrawText(hDC, "Pick a Campaign to Delete", rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);

		//Verticle Slide Bar
		SetRect(&rect, _MapSliderVert.left, _MapSliderVert.top, _MapSliderVert.right, _MapSliderVert.bottom);
		ThinTrimBox(hDC, rect, 0, 0, 0);
		//Main list window
		SetRect(&rect, _MiniWindow.left, _MiniWindow.top, _MiniWindow.right, _MiniWindow.bottom);
		ThinTrimBox(hDC, rect, 0, 0, 0);
		//Check to see if the mouse is within the area
		if(_XMouse >= _MiniWindow.left && _XMouse < _MiniWindow.right && _YMouse >= _MiniWindow.top && _YMouse < _MiniWindow.bottom)
		{
			vShaIndex = VRD(_MiniWindow.top, _YMouse, _bmpTrimmed->GetHeight());
			SetRect(&rect,
				_MiniWindow.left  + 5, _MiniWindow.top + (vShaIndex * _bmpTrimmed->GetHeight()),
				_MiniWindow.right - 4, _MiniWindow.top + (vShaIndex * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
			PaintAShadow(hDC, 75, 75, 75, rect);
		}		
		SetTextColor(hDC, RGB(255, 242, 0)); 
		//Paint Buttons
		for(int i = 0; i < _NumTmpSubBtn; i++)
		{
			if(_tmpSingleBtn[i].GetIsActive() == false)
				_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
					_tmpSingleBtn[i].GetBmpInActX(), _tmpSingleBtn[i].GetBmpInActY(),
					_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
			else
			{
				if(_tmpSingleBtn[i].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(), 
						_tmpSingleBtn[i].GetBmpXAlt(), _tmpSingleBtn[i].GetBmpYAlt(),
						_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
						_tmpSingleBtn[i].GetBmpX(), _tmpSingleBtn[i].GetBmpY(),
						_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);
			}
			MyDrawText(hDC, _tmpSingleBtn[i].GetDisplayText(),
				_tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),
				_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), TCent);
		}
		//Paint icon on slider
		switch(_MonitorCat)
		{
		case 2:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation, 185, 78, 15, 15, true);	break;
		case 1:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation, 144, 52, 12, 12, true);	break;
		case 0:	_bmpButtons->DrawPart(hDC, _MapSliderVert.left - 1, _intHorSlideLocation,  77, 24,  7,  7, true);	break;
		};
		//Paint the list of available Campaigns
		if(_NumCampaigns > 0)
		{
			SetTextColor(hDC, RGB(255, 255, 255));
			if(_NumCampaigns > 1)
			{
				for(i = 0; i < _showNumCampaigns; i++)
				{
					//Paint a shadow on a selected target...
					if	(_EditingTarget1 >= 0)
					{
						if(i == (_EditingTarget1 - _ScrollIndex))
						{
							SetRect(&rect,
								_MiniWindow.left  + 5, _MiniWindow.top + (i * _bmpTrimmed->GetHeight()),
								_MiniWindow.right - 4, _MiniWindow.top + (i * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
							PaintAShadow(hDC, 153, 76, 0, rect);
						}
					}
					if(i + _ScrollIndex < _NumCampaigns)
					{
						strTmp = _CampaignsAvail[i + _ScrollIndex].GetNickName();
						for(int z = 0; z < int(strTmp.length()); z++)
							if(strTmp[z] == '_') strTmp[z] = ' ';
						MyDrawText(hDC, strTmp,
							_MiniWindow.left + 10, _MiniWindow.top  + (i * _bmpTrimmed->GetHeight()), 
							(_MiniWindow.right - _MiniWindow.left), _bmpTrimmed->GetHeight(), TLeft);
					}
				}
			}
			else
			{
				//Paint a shadow on a selected target...
				if	(_EditingTarget1 >= 0)
				{
					if(_EditingTarget1 == 0)
					{
						SetRect(&rect, _MiniWindow.left  + 5, _MiniWindow.top, _MiniWindow.right - 4, _MiniWindow.top + _bmpTrimmed->GetHeight());
						PaintAShadow(hDC, 153, 76, 0, rect);
					}
				}
				strTmp = _CampaignsAvail->GetNickName();
				for(int z = 0; z < int(strTmp.length()); z++)
					if(strTmp[z] == '_') strTmp[z] = ' ';
				MyDrawText(hDC, strTmp, _MiniWindow.left + 10, _MiniWindow.top,
					(_MiniWindow.right - _MiniWindow.left), _bmpTrimmed->GetHeight(), TLeft);
			}
		}
	}
	else
	{
		//Setting up the base of the Menu Screen - M. White 3 April, 2019
		_bmpBG->DrawPart(hDC, _RectMenu.left, _RectMenu.top,
			int(_bmpBG->GetWidth()  / 2) - int((_RectMenu.right - _RectMenu.left) / 2),
			int(_bmpBG->GetHeight() / 2) - int((_RectMenu.bottom - _RectMenu.top) / 2),
			_RectMenu.right - _RectMenu.left, _RectMenu.bottom - _RectMenu.top, true);
		//Paint the trim - M. White 3 April, 2019
		InvertedTrimRect(hDC, _RectMenu);
		//Title and Open text field for following message - M. White 5 April, 2019
		_bmpSQR->Draw(hDC, 
			_RectMenu.left + int((_RectMenu.right - _RectMenu.left) / 2) - int(_bmpSQR->GetWidth() / 2),
			_RectMenu.top - int(_bmpSQR->GetHeight() * 0.50), true);
		//Set up text color and transparency - M. White 2 April, 2019
		SetTextColor(hDC, RGB(255, 242, 0)); 
		//msQuitBtn = 0, msNewGame, msLoadGame, msDeleteGame
		for(int i = 0; i < _NumBtns; i++)
		{
			if(_Buttons[i].DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
				_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetBmpXAlt(), _Buttons[i].GetBmpYAlt(), _Buttons[i].GetWidth(),   _Buttons[i].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetBmpX(),   _Buttons[i].GetBmpY(), _Buttons[i].GetWidth(),  _Buttons[i].GetHeight(), true);
			MyDrawText(hDC, _Buttons[i].GetDisplayText(), _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetWidth(), _Buttons[i].GetHeight(), TCent);
		}
	}
	//Set back to default - M. White 2 April, 2019
	SetTextColor(hDC, RGB(0, 0, 0)); SetBkMode(hDC, OPAQUE);
}
void PaintNewGame(HDC hDC)
{
	HBRUSH	hB;
	RECT	rect = {0, 0, 0, 0};
	int x, y, z, j, k;
	double per = 0.0;
	string temp;
	char	txt[32];
	AvFileRef tmpList;

	hB = CreateSolidBrush(RGB(0, 0, 0));
	SetRect(&rect, 0, 0, _EngineWidth, _EngineHeight);
	FillRect(hDC, &rect, hB);
	DeleteObject(hB);
	StartLocation tmpSL;
	//Paint all of the Border Trim - M. White 5 April, 2019
	PaintBorderTrim(hDC);
	//Create a Backdrop to paint everything else upon - M. White April, 2019
	hB = CreateSolidBrush(RGB(69, 1, 0));
	FillRect(hDC, &_RectMenu, hB);
	DeleteObject(hB);
	//Trim the Rectangle - M. White 6 April, 2019
	InvertedTrimRect(hDC, _RectMenu);
	//Set transparency and text color - M. White 6 April, 2019
	SetBkMode(hDC, TRANSPARENT); SetTextColor(hDC, RGB(255, 242, 0));
	//Painting Portrait (Buttons associated are painting in following loop) - M. White 15 April, 2019
	switch(_MonitorCat)
	{
	case 2:
		_bmpPortraits->DrawPart(hDC, _RectPort.left, _RectPort.top, 
			_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 48), 
			_PortraitsW, _PortraitsH, false);
		break;
	case 1:
		_bmpPortraits->DrawPart(hDC, _RectPort.left, _RectPort.top, 
			_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 32), 
			_PortraitsW, _PortraitsH, false);
		break;
	case 0:
		_bmpPortraits->DrawPart(hDC, _RectPort.left, _RectPort.top, 
			_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 16), 
			_PortraitsW, _PortraitsH, false);
		break;
	}
	//Trim the portrait - M. White 16 April, 2019
	InvertedTrimRect(hDC, _RectPort);
	//Painting Stats...
	for(z = ngStrUp; z < ngComDwn; z += 2)
	{
		switch(z)
		{
		case ngStrUp:
			temp = "Strength"; sprintf(txt, "%d", _TempAvatar->GetSStr());
			x = _Buttons[ngStrUp].GetX(); y = _Buttons[ngStrUp].GetY();
			break;
		case ngDexUp:
			temp = "Dexterity"; sprintf(txt, "%d", _TempAvatar->GetSDex());
			x = _Buttons[ngDexUp].GetX(); y = _Buttons[ngDexUp].GetY();
			break;
		case ngConUp:
			temp = "Constitution";	sprintf(txt, "%d", _TempAvatar->GetSCon());
			x = _Buttons[ngConUp].GetX(); y = _Buttons[ngConUp].GetY();
			break;
		case ngIntUp:
			temp = "Intelligence";	sprintf(txt, "%d", _TempAvatar->GetSInt());
			x = _Buttons[ngIntUp].GetX(); y = _Buttons[ngIntUp].GetY();
			break;
		case ngWisUp:
			temp = "Wisdom"; sprintf(txt, "%d", _TempAvatar->GetSWis());
			x = _Buttons[ngWisUp].GetX(); y = _Buttons[ngWisUp].GetY();
			break;
		case ngChaUp:
			temp = "Charisma"; sprintf(txt, "%d", _TempAvatar->GetSCha());
			x = _Buttons[ngChaUp].GetX(); y = _Buttons[ngChaUp].GetY();
			break;
		case ngComUp:
			temp = "Comeliness"; sprintf(txt, "%d", _TempAvatar->GetSCom());
			x = _Buttons[ngComUp].GetX(); y = _Buttons[ngComUp].GetY();
			break;
		};
		//Shift x- over to the left - M. White 7 April, 2019
		x -= int(_bmpTrimmed->GetWidth() * 1.25);
		y += int(_Buttons[ngStrUp].GetHeight()) - int(_bmpTrimmed->GetHeight() * 0.50);
		SetTextColor(hDC, RGB(255, 255, 255));		//Set WHITE for display - M. White 7 April, 2019
		_bmpTrimmed->Draw(hDC, x, y, false);		//Paint the Background - M. White 7 April, 2019
		//Display Stat - M. White 7 April, 2019
		MyDrawText(hDC, txt, x, y, int(_bmpTrimmed->GetWidth() * 0.90), _bmpTrimmed->GetHeight(), TCent);
		SetTextColor(hDC, RGB(255, 242, 0));		//Change text color to yellow
		MyDrawText(hDC, temp,						//Display Stat Word - M. White 7 April, 2019
			_RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.05), y, 150, int(_bmpTrimmed->GetHeight() * 0.90), TLeft);
		//Display Exceptional Strength if the Primary Class is a Fighter-Type - M. White 20 April, 2019
		if(z == ngStrUp)
		{
			//Paint the Background - M. White 20 April, 2019
			_bmpTrimmed->Draw(hDC, x + int(_bmpTrimmed->GetWidth() * 2), y, false);
			//Test for the class - M. White 20 April, 2019
			if(_TempAvatar->GetClass(0) == cZeroLvl || _TempAvatar->GetClass(0) == cFighter ||
			   _TempAvatar->GetClass(0) == cPaladin || _TempAvatar->GetClass(0) == cRanger)
			{
				//Check that Strength is 18 - M. White 20 April, 2019
				if(_TempAvatar->GetSStr() == 18 && _TempAvatar->GetStrE() > 0)
				{
					SetTextColor(hDC, RGB(255, 255, 255));
					//Display the background - M. White 20 APril, 2019
					//Create a leading 0 in case the value is below 10 - M. White 20 April, 2019
					if(_TempAvatar->GetStrE() > 9)	sprintf(txt, "%d", _TempAvatar->GetStrE());
					else							sprintf(txt, "0%d", _TempAvatar->GetStrE());
					MyDrawText(hDC, txt, x + int(_bmpTrimmed->GetWidth() * 2), y,
						_bmpTrimmed->GetWidth() - 1, _bmpTrimmed->GetHeight(), TCent);
				}
			}
		}
	}
	//Displaying BONUS XP data------------------------------
	//Shift x- over to the left - M. White 7 April, 2019
	x = _RectMenu.left + int((_RectMenu.right - _RectMenu.left) * 0.05);
	y = (_Buttons[ngComUp].GetY() - _Buttons[ngChaUp].GetY()) + 
		_Buttons[ngComUp].GetY() + 
		int(_Buttons[ngStrUp].GetHeight()) - int(_bmpTrimmed->GetHeight() * 0.50);
	//Display Stat Word - M. White 7 April, 2019
	temp = "Bonus XP"; MyDrawText(hDC, temp, x, y, 150, _bmpTrimmed->GetHeight(), TLeft);
	//Set white text color for display - M. White 7 April, 2019
	SetTextColor(hDC, RGB(255, 255, 255));
	//Bonus Percentage coordinates - M. White 7 April, 2019
	x = _Buttons[ngComUp].GetX() - int(_bmpTrimmed->GetWidth() * 1.25);
	y = (_Buttons[ngComUp].GetY() - _Buttons[ngChaUp].GetY()) +
		_Buttons[ngComUp].GetY() + int(_Buttons[ngComDwn].GetHeight()) - int(_bmpTrimmed->GetHeight() * 0.50);
	_bmpTrimmed->Draw(hDC, x, y, false);			//Paint the Background - M. White 7 April, 2019
	//Compile message to be displayed - M. White 7 April, 2019
	sprintf(txt, "%d", _TempAvatar->getStatRollB()); temp = txt; temp += " %"; sprintf(txt, "%s", temp.c_str());
	MyDrawText(hDC, txt, x, y, int(_bmpTrimmed->GetWidth() * 0.90), _bmpTrimmed->GetHeight(), TCent);
	//------------------------------------------------------
	//Displaying POINT RESERVE------------------------------
	x = _Buttons[ngStrUp].GetX()	- int(_bmpTrimmed->GetWidth() * 1.25);
	y = _Buttons[ngRollDice].GetY() + int(_Buttons[ngRollDice].GetHeight() * 0.50) - int(_bmpTrimmed->GetHeight() * 0.50);
	//Set text color to white - M. White 7 April, 2019
	SetTextColor(hDC, RGB(255, 255, 255));
	_bmpTrimmed->Draw(hDC, x, y, false);
	sprintf(txt, "%d", _intStatReserve);
	MyDrawText(hDC, txt, x, y, int(_bmpTrimmed->GetWidth() * 0.90), _bmpTrimmed->GetHeight(), TCent);
	//------------------------------------------------------
	//Go back to yellow - M. White 9 April, 2019
	SetTextColor(hDC, RGB(255, 242, 0));
	//Painting Buttons...
	for(int i = 0; i < MAX_ngOPTIONS; i++)
	{
		if(_NumBtns > 1)
		{
			if(_Buttons[i].DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
				_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetBmpXAlt(), _Buttons[i].GetBmpYAlt(), _Buttons[i].GetWidth(),   _Buttons[i].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetBmpX(),   _Buttons[i].GetBmpY(), _Buttons[i].GetWidth(),  _Buttons[i].GetHeight(), true);
			MyDrawText(hDC, _Buttons[i].GetDisplayText(), _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetWidth(), _Buttons[i].GetHeight(), TCent);
		}
		else
		{
			if(_Buttons->DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
				_bmpButtons->DrawPart(hDC, _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetBmpXAlt(), _Buttons->GetBmpYAlt(), _Buttons->GetWidth(),   _Buttons->GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetBmpX(),   _Buttons->GetBmpY(), _Buttons->GetWidth(),  _Buttons->GetHeight(), true);
			MyDrawText(hDC, _Buttons->GetDisplayText(), _Buttons->GetX(), _Buttons->GetY(), _Buttons->GetWidth(), _Buttons->GetHeight(), TCent);
		}
	}
	//Set text to white for display - M. White 7 April, 2019
	SetTextColor(hDC, RGB(255, 255, 255));
	//Setting up the Name Bar - M. White 8 April, 2019--------------------------------------------------------------------
	TextBoxTrim(hDC, _RectName, 1);
	temp = _TempAvatar->GetFName();
	for(x = 0; x < int(temp.length()); x++)
		if(temp[x] == '_') temp[x] = ' ';
	MyDrawText(hDC, temp, _RectName.left, _RectName.top, (_RectName.right - _RectName.left), _bmpTrimmed->GetHeight(), TCent);
	//End Name Bar -------------------------------------------------------------------------------------------------------
	//Setting up Race - M. White 9 April, 2019----------------------------------------------------------------------------
	TextBoxTrim(hDC, _RectRace, 1);
	temp = _TempAvatar->GetRaceStr(_TempAvatar->GetRace());
	MyDrawText(hDC, temp, _RectRace.left, _RectRace.top, (_RectRace.right - _RectRace.left) - 1, _bmpTrimmed->GetHeight(), TCent);
	//End Race Bar ---------------------------------------------------------------------------------------------------------
	//Setting up Class - M. White 11 April, 2019----------------------------------------------------------------------------
	TextBoxTrim(hDC, _RectClass, 1);
	//Display Message or Current Classes - M. White 13 April, 2019
	if(_TempAvatar->GetClassRef() > -1)	temp = _TempAvatar->ShowClassComboStr(_TempAvatar->GetClassRef());
	else								temp = "Pick Class";
	MyDrawText(hDC, temp, _RectClass.left, _RectClass.top, (_RectClass.right - _RectClass.left), _bmpTrimmed->GetHeight(), TCent);
	//End Class Bar -------------------------------------------------------------------------------------------------------
	//Alignment------------------------------------------------------------------------------------------------------------
	TextBoxTrim(hDC, _RectAlign, 1);
	temp = _TempAvatar->GetAlignFull();
	MyDrawText(hDC, temp, _RectAlign.left, _RectAlign.top, ((_RectAlign.right - _RectAlign.left) - 1), _bmpTrimmed->GetHeight(), TCent);	
	//---------------------------------------------------------------------------------------------------------------------
	//Set text color to yellow - M. White 11 April, 2019
	SetTextColor(hDC, RGB(255, 242, 0));
	//Weapon Proficiencies-------------------------------------------------------------------------------------------------
	if	(_OpenWeapons == false) TextBoxTrim(hDC, _WeaponPros, int(_TempAvatar->GetNumMaxWPslots()));
	temp = "Weapon Proficiencies";
	//Start at left side of Rect, find center, back left half of width of text length
	//keeps it centered on the _WeaponPros rectangle: -75 because in the following 
	//MyDrawText(), the width is x2 that value - M. White 17 April, 2019
	x = _WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.50) - 75;
	y = _WeaponPros.top - _bmpTrimmed->GetHeight();
	MyDrawText(hDC, temp, x, y, 150, _bmpTrimmed->GetHeight(), TCent);
	SetTextColor(hDC, RGB(255, 255, 255));
	if(_TempAvatar->GetNumWPsUsed() == 0)
	{
		//Set text color to white - M. White 11 April, 2019
		temp = "Pick Weapons";
		MyDrawText(hDC, temp, _WeaponPros.left, _WeaponPros.top, (_WeaponPros.right - _WeaponPros.left), _bmpTrimmed->GetHeight(), TCent);
	}
	//Loop through the weapons to get their name and then display - M. White 20 April, 2019
	else
	{
		y = 0;	//Using y to as a verticle incrementor for MyDrawText - M. White 20 April, 2019
		k = 0;	//keep track of how many slots we've counted...
		for(i = 0; i < MAX_WEAPONPRO; i++)
			if(_TempAvatar->GetWPSlotCost(i) > 0)
			{
				k += _TempAvatar->GetWPSlotCost(i);
				temp = _TempAvatar->GetWProName(i);
				if(_TempAvatar->GetWPSlotCost(i) > 1)	temp += " (Spc)";
				MyDrawText(hDC, temp, _WeaponPros.left + 3, _WeaponPros.top + (y * _bmpTrimmed->GetHeight()),
					int((_WeaponPros.right - (_WeaponPros.left - 3))), _bmpTrimmed->GetHeight(), TLeft);
				y += 1;//Increment y so that next skill will offset - M. White 20 April, 2019
			}
	}
	//---------------------------------------------------------------------------------------------------------------------
	//Starting Town -------------------------------------------------------------------------------------------------------
	//Set text color to yellow - M. White 11 April, 2019
	SetTextColor(hDC, RGB(255, 242, 0));
	temp = "Starting Town";
	x = _WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.50) - 75;
	y = _WeaponPros.top + (_bmpTrimmed->GetHeight() * 5);
	MyDrawText(hDC, temp, x, y, 150, _bmpTrimmed->GetHeight(), TCent);
	if(_OpenStartTown == false)
	{
		TextBoxTrim(hDC, _RectStartTown, 1);
		SetTextColor(hDC, RGB(255, 255, 255));//Change color for display
		temp = _TempAvatar->GetStartTownName();
		for(x = 0; x < int(temp.length()); x++) if(temp[x] == '_') temp[x] = ' ';
		MyDrawText(hDC, temp, _RectStartTown.left, _RectStartTown.top, 
			(_RectStartTown.right - _RectStartTown.left), _bmpTrimmed->GetHeight(), TCent);
	}
	//---------------------------------------------------------------------------------------------------------------------
	//Set text color to white - M. White 20 April, 2019
	SetTextColor(hDC, RGB(255, 255, 255));
	//Expanding the Menus...
	//Putting it down here so it gets painted later than the buttons to cover them - M. White 9 April, 2019
	if		(_OpenRaceScreen	== true)
	{
		TextBoxTrim(hDC, _RectRace, MAX_startRACES + 1);
		//See if the User is hoving mouse in clickable area, and highlight the background - M. White 10 April, 2019
		if(_XMouse > _RectRace.left && _XMouse < _RectRace.right &&
		   _YMouse > _RectRace.top + _bmpTrimmed->GetHeight() && _YMouse < (_RectRace.bottom - 2))
		{
			//Change Color of background - M. White 10 April, 2019
			hB = CreateSolidBrush(RGB(50, 50, 0));
			//Calc how far the User is point down - M. White 10 April, 2019
			k = VRD((_RectRace.top + _bmpTrimmed->GetHeight()), _YMouse, _bmpTrimmed->GetHeight());
			//Set the rect - M. White 10 April, 2019
			SetRect(&rect,
				_RectRace.left + 1, 
				_RectRace.top  + (k * _bmpTrimmed->GetHeight())+ _bmpTrimmed->GetHeight(),
				_RectRace.right - 1,
				_RectRace.top  + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() + _bmpTrimmed->GetHeight() - 1);
			//Fill the bar with the color - M. White 10 April, 2019
			FillRect(hDC, &rect, hB);
			DeleteObject(hB); 
		}
		//Looping 6 times to show total list of available races - M. White 9 April, 2019
		for(z = 0; z < MAX_startRACES + 1; z++)
		{
			switch(z)
			{
			case 0:		temp = _TempAvatar->GetRaceStr(_TempAvatar->GetRace());	break;
			case 1:		temp = "Dwarf";			break;
			case 2:		temp = "Elf";			break;
			case 3:		temp = "Gnome";			break;
			case 4:		temp = "Half Elf";		break;
			case 5:		temp = "Halfling";		break;
			case 6:		temp = "Human";			break;
			default:	temp = "";				break;
			};//rDwarf = 0, rElf, rGnome, rHalfElf, rHalfling, rHuman, MAX_pcRACES
			MyDrawText(hDC, temp, _RectRace.left, _RectRace.top + (z * _bmpTrimmed->GetHeight()), (_RectRace.right - _RectRace.left) - 1, _bmpTrimmed->GetHeight(), TCent);
		}
		//End Race Bar -------------------------------------------------------------------------------------------------------
	}
	else if (_OpenClassScreen	== true)
	{
		//Create a base color background - M. White 10 April, 2019
		hB = CreateSolidBrush(RGB(0, 0, 0));
		//Offset from left / offset from top / offset from right / orientate from top, and then offset - M. White 10 April, 2019
		SetRect(&rect, _RectClass.left + 1, _RectClass.top + 1, _RectClass.right - 1, _RectClass.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		//Create the background - M. White 13 April, 2019
		for(z = 0; z < int(cMAX_CLASSES * 0.50) + 1; z++)
		{
			//The left and right edges of the rectangle - M. White 11 April, 2019
			_bmpTrimmed->DrawPart(hDC, _RectClass.left,		 _RectClass.top + (z * _bmpTrimmed->GetHeight()), 0, 0, 1, _bmpTrimmed->GetHeight(), false);
			_bmpTrimmed->DrawPart(hDC, _RectClass.right - 1, _RectClass.top + (z * _bmpTrimmed->GetHeight()), (_bmpTrimmed->GetWidth() - 1), 0, 1, _bmpTrimmed->GetHeight(), false);
			//Spanning the width of the bottom of _RectRace - M. White 10 April, 2019
			if(z == int(cMAX_CLASSES * 0.50))
			{
				for(x = _RectClass.left + 1; x < _RectClass.right - 1; x++)
					_bmpTrimmed->DrawPart(hDC, x, _RectClass.top + (z * _bmpTrimmed->GetHeight()) + 2, 5, 2, 1, _bmpTrimmed->GetHeight() - 1, false);
			}
		}
		//Display Message or Current Classes - M. White 13 April, 2019
		if(_TempAvatar->GetClassRef() > -1)	temp = _TempAvatar->ShowClassComboStr(_TempAvatar->GetClassRef());
		else								temp = "Pick Class";
		MyDrawText(hDC, temp, _RectClass.left, _RectClass.top, (_RectClass.right - _RectClass.left), _bmpTrimmed->GetHeight(), TCent);
		//Calc center point - M. White 13 April, 2019
		j = _RectClass.left + int((_RectClass.right - _RectClass.left) * 0.50);
		//High-light where the mouse is pointing - M. White 13 April, 2019
		if(_XMouse > _RectClass.left && _XMouse < _RectClass.right &&
		   _YMouse > (_RectClass.top + _bmpTrimmed->GetHeight()) && _YMouse < (_RectClass.bottom - 2))
		{
			//Change Color of background - M. White 10 April, 2019
			hB = CreateSolidBrush(RGB(50, 50, 0));
			//Calc how far the User is point down - M. White 10 April, 2019
			k = VRD((_RectClass.top + _bmpTrimmed->GetHeight()), _YMouse);
			if(_XMouse <=  j)
			{
				SetRect(&rect,
					_RectClass.left + 1, _RectClass.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()),
					j, _RectClass.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
			}
			else
			{
				SetRect(&rect,
					j, _RectClass.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()),
					_RectClass.right - 1,
					_RectClass.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
			}
			//Fill the bar with the color - M. White 10 April, 2019
			FillRect(hDC, &rect, hB);
			DeleteObject(hB); 
		}
		//Paint the class strings in two columns - M. White 13 April, 2019
		//Color code them showing User they can select or not - M. White 13 April, 2019
		for(z = 0; z < cMAX_CLASSES; z += 2)
		{
			//Left Side
			if(z < cMAX_CLASSES)
			{
				if(_TempAvatar->CanBeTheseClasses(z) == false)		SetTextColor(hDC, RGB(125, 125, 125));	//Grey
				else												SetTextColor(hDC, RGB(255, 242, 0));	//Yellow
				temp = _TempAvatar->ShowClassComboStr(z);
				MyDrawText(hDC, temp, _RectClass.left + 8, _RectClass.top + _bmpTrimmed->GetHeight() + (int(z / 2) * _bmpTrimmed->GetHeight()),
					int((_RectClass.right - _RectClass.left) * 0.50), _bmpTrimmed->GetHeight(), TLeft);
			}
			//Ride Side
			if(z + 1 < cMAX_CLASSES)
			{
				if(_TempAvatar->CanBeTheseClasses(z + 1) == false)	SetTextColor(hDC, RGB(125, 125, 125));	//Grey
				else												SetTextColor(hDC, RGB(255, 242, 0));	//Yellow
				temp = _TempAvatar->ShowClassComboStr(z + 1);
				MyDrawText(hDC, temp, j + 8, _RectClass.top + _bmpTrimmed->GetHeight() + (int(z / 2) * _bmpTrimmed->GetHeight()),
					int((_RectClass.right - _RectClass.left) * 0.50), _bmpTrimmed->GetHeight(), TLeft);
			}
		}
	}
	else if	(_OpenAlignScreen	== true)
	{
		//Create a base color background - M. White 10 April, 2019
		hB = CreateSolidBrush(RGB(0, 0, 0));
		//Offset from left / offset from top / offset from right / orientate from top, and then offset - M. White 10 April, 2019
		SetRect(&rect, _RectAlign.left + 1, _RectAlign.top + 1, _RectAlign.right - 1, _RectAlign.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		//Create the background - M. White 13 April, 2019
		for(z = 0; z < (9 + 1); z++)//9 + 1 to serve as reminder that '9' is used initially - M. White 17 April, 2019
		{
			//The left and right edges of the rectangle - M. White 11 April, 2019
			_bmpTrimmed->DrawPart(hDC, _RectAlign.left,		 _RectAlign.top + (z * _bmpTrimmed->GetHeight()), 0, 0, 1, _bmpTrimmed->GetHeight(), false);
			_bmpTrimmed->DrawPart(hDC, _RectAlign.right - 1, _RectAlign.top + (z * _bmpTrimmed->GetHeight()), (_bmpTrimmed->GetWidth() - 1), 0, 1, _bmpTrimmed->GetHeight(), false);
			//Spanning the width of the bottom of _RectRace - M. White 10 April, 2019
			if(z == 9)//reminder that '9' is used initially - M. White 17 April, 2019
			{
				for(x = _RectAlign.left + 1; x < _RectAlign.right - 1; x++)
					_bmpTrimmed->DrawPart(hDC, 
						x, _RectAlign.top + (z * _bmpTrimmed->GetHeight()) + 2,
						5, 2, 1, _bmpTrimmed->GetHeight() - 1, false);
			}
		}
		//Background shadow - M. White 17 April, 2019
		if(_XMouse > _RectAlign.left && _XMouse < _RectAlign.right &&
		   _YMouse > (_RectAlign.top + _bmpTrimmed->GetHeight()) && _YMouse < (_RectAlign.bottom - 2))
		{
			//Change Color of background - M. White 10 April, 2019
			hB = CreateSolidBrush(RGB(50, 50, 0));
			//Calc how far the User is point down - M. White 10 April, 2019
			k = VRD((_RectAlign.top + _bmpTrimmed->GetHeight()), _YMouse);
			//Set the rect - M. White 10 April, 2019
			SetRect(&rect,
				_RectAlign.left + 1, 
				_RectAlign.top + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight(),
				_RectAlign.right - 1,
				_RectAlign.top + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() + _bmpTrimmed->GetHeight() - 1);
               //Fill the bar with the color - M. White 10 April, 2019
			FillRect(hDC, &rect, hB);
			DeleteObject(hB); 
		}
		//Looping 6 times to show total list of available races - M. White 9 April, 2019
		for(z = 0; z < 10; z++)
		{
			switch(z)
			{
			case 0:		temp = _TempAvatar->GetAlignFull();	break;
			case 1:		temp = "Lawful Good";				break;
			case 2:		temp = "Lawful Neutral";			break;
			case 3:		temp = "Lawful Evil";				break;
			case 4:		temp = "Neutral Good";				break;
			case 5:		temp = "Neutral";					break;
			case 6:		temp = "Neutral Evil";				break;
			case 7:		temp = "Chaotic Good";				break;
			case 8:		temp = "Chaotic Neutral";			break;
			case 9:		temp = "Chaotic Evil";				break;
			default:	temp = "";							break;
			};//rDwarf = 0, rElf, rGnome, rHalfElf, rHalfling, rHuman, MAX_pcRACES
			MyDrawText(hDC, temp, 
				_RectAlign.left, _RectAlign.top + (z * _bmpTrimmed->GetHeight()),
				((_RectAlign.right - _RectAlign.left) - 1), _bmpTrimmed->GetHeight(), TCent);
		}
	}
	else if	(_OpenWeapons		== true)
	{
		//Filling rect here because InvertedTrim does not - M. White 18 April, 2019
		hB = CreateSolidBrush(RGB(0, 0, 0));
		SetRect(&rect, _WeaponPros.left, _WeaponPros.top, _WeaponPros.right, _WeaponPros.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		InvertedTrimRect(hDC, _WeaponPros);
		//Display Instructions - M. White 18 April, 2019
		SetTextColor(hDC, RGB(255, 0, 0));
		temp = "Click on weapon name(s) until total weapon allowance is assigned.";
		MyDrawText(hDC, temp, _WeaponPros.left, _WeaponPros.top,
			int(_WeaponPros.right - _WeaponPros.left), _bmpTrimmed->GetHeight(), TCent);
	   //* 22 because there are three columns, one of which is 21 units high + the top 1 - M. White 18 April, 2018
		if(_XMouse > _WeaponPros.left && _XMouse < _WeaponPros.right &&
		   _YMouse > _WeaponPros.top + _bmpTrimmed->GetHeight() && _YMouse < (_WeaponPros.top + (_bmpTrimmed->GetHeight() * 22)))
		{
			//The code is repeated three times because we want the action to only take place if
			//the mouse is within a certain rect, otherwise your get crazy graphics - M. White 18 April, 2019

			//Change Color of background - M. White 10 April, 2019
			hB = CreateSolidBrush(RGB(50, 50, 0));
			//Calc how far the User is point down - M. White 10 April, 2019
			k = VRD((_WeaponPros.top + _bmpTrimmed->GetHeight()), _YMouse);
			//Detect Left Column
			if		(_XMouse > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.05))	&& 
					 _XMouse < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.37)))
			{
				x = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.05));
				z = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.37));
				//Set the rect - M. White 10 April, 2019
				SetRect(&rect,
					x,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()),
					z,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
				//Fill the bar with the color - M. White 10 April, 2019
				FillRect(hDC, &rect, hB);
			}
			//Detect Center Column
			else if	(_XMouse > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.38))	&& 
					 _XMouse < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.70)))
			{
				x = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.38));
				z = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.70));
				//Set the rect - M. White 10 April, 2019
				SetRect(&rect,
					x,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()),
					z,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
				//Fill the bar with the color - M. White 10 April, 2019
				FillRect(hDC, &rect, hB);
			}
			//Detect Right Column
			else if	(_XMouse > (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.71))	&& 
					 _XMouse < (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.99)))
			{
				x = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.71));
				z = (_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.99));
				//Set the rect - M. White 10 April, 2019
				SetRect(&rect,
					x,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()),
					z,
					_WeaponPros.top + _bmpTrimmed->GetHeight() + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
				//Fill the bar with the color - M. White 10 April, 2019
				FillRect(hDC, &rect, hB);
			}
			DeleteObject(hB);
		}
		/*
			Going to loop through the weapons list using 'y' as a verticle offset as it iterates. 
			The left-most column uses the 'y' as is, the other columns add multiples of the test-out
			value (in this case '21', and '42') - M. White 18 April, 2019
		*/
		for(y = 0; y < 21; y++)
		{
			//Left Side
			SetTextColor(hDC, RGB(100, 100, 100));
			//By the rules, Clerics/Druids must abide by weapon selection even if
			//they are multi-classed with a class that could use the skill. By 
			//checking to see if the character's classes is a Cleric or Druid first,
			//the if-tests trump to these classes, and then break out of the loop
			//not allowing further tests for the other classes - M. White 19 April, 2019
			if(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid || 
			   _TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid || 
			   _TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid || 
			   _TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
			{
				if		(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid)
				{
					if(WeaponsAllowed[y][_TempAvatar->GetClass(0)] == true)
					{
						if		(_TempAvatar->GetWPSlotCost(y) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
						else if	(_TempAvatar->GetWPSlotCost(y) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
						else												SetTextColor(hDC, RGB(255, 255, 255));
					}
				}
				else if (_TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid)
				{
					if(WeaponsAllowed[y][_TempAvatar->GetClass(1)] == true)
					{
						if		(_TempAvatar->GetWPSlotCost(y) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
						else if	(_TempAvatar->GetWPSlotCost(y) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
						else												SetTextColor(hDC, RGB(255, 255, 255));
					}
				}
				else if (_TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid)
				{
					if(WeaponsAllowed[y][_TempAvatar->GetClass(2)] == true)
					{
						if		(_TempAvatar->GetWPSlotCost(y) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
						else if	(_TempAvatar->GetWPSlotCost(y) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
						else												SetTextColor(hDC, RGB(255, 255, 255));
					}
				}
				else if (_TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
				{
					if(WeaponsAllowed[y][_TempAvatar->GetClass(3)] == true)
					{
						if		(_TempAvatar->GetWPSlotCost(y) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
						else if	(_TempAvatar->GetWPSlotCost(y) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
						else												SetTextColor(hDC, RGB(255, 255, 255));
					}
				}
			}
			else
			{
				for(int a = 0; a < 4; a++)
				{
					if(_TempAvatar->GetClass(a) == -1) break;
					if(WeaponsAllowed[y][_TempAvatar->GetClass(a)] == true)
					{
						if		(_TempAvatar->GetWPSlotCost(y) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
						else if	(_TempAvatar->GetWPSlotCost(y) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
						else												SetTextColor(hDC, RGB(255, 255, 255));
					}
				}
			}
			temp = _TempAvatar->GetWProName(y);
			MyDrawText(hDC, temp,																		//Text
				_WeaponPros.left + int((_WeaponPros.right - _WeaponPros.left) * 0.05) + 5,					//X
				_WeaponPros.top + _bmpTrimmed->GetHeight() + (y * _bmpTrimmed->GetHeight()),			//Y
				int((_WeaponPros.right - _WeaponPros.left) * 0.30),										//Width
				_bmpTrimmed->GetHeight(), TLeft);														//Height
			//Center
			if((y + 21) < MAX_WEAPONPRO)
			{
				SetTextColor(hDC, RGB(100, 100, 100));
				if(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid || 
				   _TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid || 
				   _TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid || 
				   _TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
				{
					if		(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid)
					{
						if(WeaponsAllowed[y + 21][_TempAvatar->GetClass(0)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 21) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 21) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid)
					{
						if(WeaponsAllowed[y + 21][_TempAvatar->GetClass(1)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 21) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 21) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid)
					{
						if(WeaponsAllowed[y + 21][_TempAvatar->GetClass(2)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 21) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 21) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
					{
						if(WeaponsAllowed[y + 21][_TempAvatar->GetClass(3)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 21) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 21) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
				}
				else
				{
					for(int a = 0; a < 4; a++)
					{
						if(_TempAvatar->GetClass(a) == -1) break;
						if(WeaponsAllowed[y + 21][_TempAvatar->GetClass(a)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 21) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 21) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
				}
				temp = _TempAvatar->GetWProName(y + 21);
				MyDrawText(hDC, temp,																	//Text
					_WeaponPros.left +
						int((_WeaponPros.right - _WeaponPros.left) * 0.38) + 5,							//X
					_WeaponPros.top + _bmpTrimmed->GetHeight() + 
						(y * _bmpTrimmed->GetHeight()),													//Y
					int((_WeaponPros.right - _WeaponPros.left) * 0.30) - 10,							//Width
					_bmpTrimmed->GetHeight(), TLeft);													//Height
			}
			//Right Side
			if((y + 42) < MAX_WEAPONPRO)
			{
				SetTextColor(hDC, RGB(100, 100, 100));
				if(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid || 
				   _TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid || 
				   _TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid || 
				   _TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
				{
					if		(_TempAvatar->GetClass(0) == cCleric || _TempAvatar->GetClass(0) == cDruid)
					{
						if(WeaponsAllowed[y + 42][_TempAvatar->GetClass(0)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 42) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 42) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(1) == cCleric || _TempAvatar->GetClass(1) == cDruid)
					{
						if(WeaponsAllowed[y + 42][_TempAvatar->GetClass(1)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 42) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 42) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(2) == cCleric || _TempAvatar->GetClass(2) == cDruid)
					{
						if(WeaponsAllowed[y + 42][_TempAvatar->GetClass(2)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 42) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 42) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
					else if (_TempAvatar->GetClass(3) == cCleric || _TempAvatar->GetClass(3) == cDruid)
					{
						if(WeaponsAllowed[y + 42][_TempAvatar->GetClass(3)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 42) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 42) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
				}
				else
				{
					for(int a = 0; a < 4; a++)
					{
						if(_TempAvatar->GetClass(a) == -1) break;
						if(WeaponsAllowed[y + 42][_TempAvatar->GetClass(a)] == true)
						{
							if		(_TempAvatar->GetWPSlotCost(y + 42) == 2)		SetTextColor(hDC, RGB(255, 255,   0));
							else if	(_TempAvatar->GetWPSlotCost(y + 42) == 1)		SetTextColor(hDC, RGB(255,   0,   0));
							else												SetTextColor(hDC, RGB(255, 255, 255));
						}
					}
				}
				temp = _TempAvatar->GetWProName(y + 42);
				MyDrawText(hDC, temp,																	//Text
					_WeaponPros.left +
						int((_WeaponPros.right - _WeaponPros.left) * 0.71) + 5,							//X
					_WeaponPros.top + _bmpTrimmed->GetHeight() + 
						(y * _bmpTrimmed->GetHeight()),													//Y
					int((_WeaponPros.right - _WeaponPros.left) * 0.30) - 10,							//Width
					_bmpTrimmed->GetHeight(), TLeft);													//Height
			}
		}	
		//Set to red
		SetTextColor(hDC, RGB(255, 0, 0));
		//More instructions to the User - M. White 20 April, 2019
		temp = "When you click a weapon that will use up your last available";
		MyDrawText(hDC, temp, 
			_WeaponPros.left,
			_WeaponPros.top  + (22 * _bmpTrimmed->GetHeight()),
			int(_WeaponPros.right - _WeaponPros.left), _bmpTrimmed->GetHeight(), TCent);
		temp = "slot, you will be automatically returned to the main screen.";
		MyDrawText(hDC, temp, 
			_WeaponPros.left,
			_WeaponPros.top  + (23 * _bmpTrimmed->GetHeight()),
			int(_WeaponPros.right - _WeaponPros.left), _bmpTrimmed->GetHeight(), TCent);
		//Set text to yellow - M. White 20 April, 2019
		SetTextColor(hDC, RGB(255, 242, 0));
		//Slots available - M. White 20 April, 2019
		sprintf(txt, "Slots Available: %d / %d", _TempAvatar->GetNumWPsUsed(), _TempAvatar->GetNumMaxWPslots());
		MyDrawText(hDC, txt, 
			_WeaponPros.left + int((_WeaponPros.right  - _WeaponPros.left) * 0.50) - 150,
			_WeaponPros.top  + (24 * _bmpTrimmed->GetHeight()),
			300, _bmpTrimmed->GetHeight(), TCent);
		//Reset Button
		if(_tmpSingleBtn->DidItHit(_XMouse, _YMouse))
			_bmpButtons->DrawPart(hDC, _tmpSingleBtn->GetX(), _tmpSingleBtn->GetY(), 
				_tmpSingleBtn->GetBmpXAlt(), _tmpSingleBtn->GetBmpYAlt(),
				_tmpSingleBtn->GetWidth(),   _tmpSingleBtn->GetHeight(), true);
		else
			_bmpButtons->DrawPart(hDC, _tmpSingleBtn->GetX(), _tmpSingleBtn->GetY(),
				_tmpSingleBtn->GetBmpX(),   _tmpSingleBtn->GetBmpY(),
				_tmpSingleBtn->GetWidth(),  _tmpSingleBtn->GetHeight(), true);
		MyDrawText(hDC, _tmpSingleBtn->GetDisplayText(), 
			_tmpSingleBtn->GetX(), _tmpSingleBtn->GetY(), _tmpSingleBtn->GetWidth(), _tmpSingleBtn->GetHeight(), TCent);
	}
	else if	(_OpenStartTown		== true)
	{
		//Filling rect here because InvertedTrim does not - M. White 18 April, 2019
		hB = CreateSolidBrush(RGB(0, 0, 0));
		SetRect(&rect, _RectStartTown.left, _RectStartTown.top, _RectStartTown.right, _RectStartTown.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		SetTextColor(hDC, RGB(255, 242, 0));
		MyDrawText(hDC, "Click a name to proceed", 
			 _RectStartTown.left, _RectStartTown.top, ( _RectStartTown.right - _RectStartTown.left), 
			 _bmpTrimmed->GetHeight(), TCent);

		//Print the list - M. White 29 July, 2019
		z = int(_startPoints.length());
		if(z > 0)
		{
			//Find a location two positions below the top of the rect, and divide it to know how many lines can be 
			//displayed, then print the names within a range modified by the _ScrollIndex
			y = int((_RectStartTown.bottom - (_RectStartTown.top + (_bmpTrimmed->GetHeight() * 2))) / _bmpTrimmed->GetHeight());

			//Paint a shadow...
			if(_XMouse >= _RectStartTown.left		&& 
			   _XMouse <  _RectStartTown.right		&&
			   _YMouse >= (_RectStartTown.top + (_bmpTrimmed->GetHeight() * 2)) && 
			   _YMouse < (_RectStartTown.bottom - _bmpTrimmed->GetHeight()))
			{
				//Change Color of background - M. White 10 April, 2019
				hB = CreateSolidBrush(RGB(50, 50, 0));
				//Calc how far the User is point down - M. White 10 April, 2019
				k = VRD((_RectStartTown.top + (_bmpTrimmed->GetHeight() * 2)), _YMouse, _bmpTrimmed->GetHeight());
				//Set the rect - M. White 10 April, 2019
				SetRect(&rect,
					_RectStartTown.left + 1, 
					_RectStartTown.top  + (k * _bmpTrimmed->GetHeight()) + (_bmpTrimmed->GetHeight() * 2),
					_RectStartTown.right - 1,
					_RectStartTown.top  + (k * _bmpTrimmed->GetHeight()) + (_bmpTrimmed->GetHeight() * 2) + _bmpTrimmed->GetHeight() - 1);
				//Fill the bar with the color - M. White 10 April, 2019
				FillRect(hDC, &rect, hB);
				DeleteObject(hB); 
			}
			
			SetTextColor(hDC, RGB(255, 255, 255));
			for(x = 0; x < z; x++)
				if((x + _ScrollIndex) < z)
				{
					_startPoints.getNodes(x + _ScrollIndex, tmpSL);
					temp = tmpSL.GetNickName();
					for(j = 0; j < int(temp.length()); j++)
						if(temp[j] == '_') temp[j] = ' ';
					MyDrawText(hDC, temp,
						_RectStartTown.left,
						_RectStartTown.top + (_bmpTrimmed->GetHeight() * 2) + (_bmpTrimmed->GetHeight() * x),
						(_RectStartTown.right - _RectStartTown.left), _bmpTrimmed->GetHeight(), TCent);
				}
		}
		//Up-down arrows...
		if(_MenuScrUpDwn != NULL)
		{
			for(i = 0; i < 2; i++)
			{
				if(_MenuScrUpDwn[i].DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()) == true)
					_bmpButtons->DrawPart(hDC, 
						_MenuScrUpDwn[i].GetX(), _MenuScrUpDwn[i].GetY(), 
						_MenuScrUpDwn[i].GetBmpXAlt(), _MenuScrUpDwn[i].GetBmpYAlt(), 
						_MenuScrUpDwn[i].GetWidth(),   _MenuScrUpDwn[i].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, 
						_MenuScrUpDwn[i].GetX(), _MenuScrUpDwn[i].GetY(), 
						_MenuScrUpDwn[i].GetBmpX(),   _MenuScrUpDwn[i].GetBmpY(), 
						_MenuScrUpDwn[i].GetWidth(),  _MenuScrUpDwn[i].GetHeight(), true);
			}
		}
	}
	else if	(_ShowPickAvatar	== true)
	{
		InvertedTrimRect(hDC, _rctPickAvatar);
		//Painting a Background other than a plain color...
		//...and changing color to work with the background
		_bmpBG->DrawPart(hDC, _rctPickAvatar.left, _rctPickAvatar.top, 0, 0, 
			(_rctPickAvatar.right - _rctPickAvatar.left), (_rctPickAvatar.bottom - _rctPickAvatar.top), false);
		SetTextColor(hDC, RGB(255, 255, 255));
		//Creating title bar...
		SetRect(&rect, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.50) - int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.50) + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.25),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02) + _bmpTrimmed->GetHeight());
		ThinTrimBox(hDC, rect, 0, 0, 0);
		temp = "Select a Character";
		MyDrawText(hDC, temp, rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
		if(_numAvatarRef > _showNumAvatars)
		{
			//Paint the index buttons
			if(_Buttons[ngPortLeft].DidItHit(_XMouse, _YMouse))
				_bmpButtons->DrawPart(hDC, _Buttons[ngPortLeft].GetX(), _Buttons[ngPortLeft].GetY(), 
					_Buttons[ngPortLeft].GetBmpXAlt(), _Buttons[ngPortLeft].GetBmpYAlt(),
					_Buttons[ngPortLeft].GetWidth(),   _Buttons[ngPortLeft].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _Buttons[ngPortLeft].GetX(), _Buttons[ngPortLeft].GetY(),
					_Buttons[ngPortLeft].GetBmpX(), _Buttons[ngPortLeft].GetBmpY(),
					_Buttons[ngPortLeft].GetWidth(), _Buttons[ngPortLeft].GetHeight(), true);
			//Paint the index buttons
			if(_Buttons[ngPortRight].DidItHit(_XMouse, _YMouse))
				_bmpButtons->DrawPart(hDC, _Buttons[ngPortRight].GetX(), _Buttons[ngPortRight].GetY(), 
					_Buttons[ngPortRight].GetBmpXAlt(), _Buttons[ngPortRight].GetBmpYAlt(),
					_Buttons[ngPortRight].GetWidth(),   _Buttons[ngPortRight].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _Buttons[ngPortRight].GetX(), _Buttons[ngPortRight].GetY(),
					_Buttons[ngPortRight].GetBmpX(), _Buttons[ngPortRight].GetBmpY(),
					_Buttons[ngPortRight].GetWidth(), _Buttons[ngPortRight].GetHeight(), true);
			ThinTrimBox(hDC, _RectHorSlidePer, 0, 0, 0);//Slider Index Bar
			switch(_MonitorCat)
			{
			case 2: _bmpButtons->DrawPart(hDC, _RectHorSlidePer.left - 2, _intHorSlideLocation, 185, 78, 15, 15, true); break;
			case 1: _bmpButtons->DrawPart(hDC, _RectHorSlidePer.left - 2, _intHorSlideLocation, 144, 52, 12, 12, true); break;
			case 0: _bmpButtons->DrawPart(hDC, _RectHorSlidePer.left - 2, _intHorSlideLocation,  77, 24,  7,  7, true); break;
			};
		}
		//Setting up background to text area
		SetRect(&rect,
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.02),
			_rctPickAvatar.top  + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02),
			_Buttons[ngPortLeft].GetX() - _Buttons[ngPortLeft].GetWidth(),
			_rctPickAvatar.top + int(_bmpTrimmed->GetHeight() * 1.50) + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.02) + (_bmpTrimmed->GetHeight() * _showNumAvatars));
		ThinTrimBox(hDC, rect, 0, 0, 0);	
		//High-light where the mouse is pointing - M. White 13 April, 2019
		if(_XMouse > rect.left && _XMouse < rect.right && _YMouse > rect.top && _YMouse < rect.top + (_bmpTrimmed->GetHeight() * _showNumAvatars))
		{
			//Calc how far the User is point down - M. White 10 April, 2019
			k = VRD(rect.top, _YMouse, _bmpTrimmed->GetHeight());
			SetRect(&_RectSubMenu,
				rect.left + 5, 
				rect.top + (k * _bmpTrimmed->GetHeight()),
				rect.right - 5, 
				rect.top + (k * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
			//Change Color of background - M. White 10 April, 2019
			hB = CreateSolidBrush(RGB(50, 50, 50));
			//Fill the bar with the color - M. White 10 April, 2019
			FillRect(hDC, &_RectSubMenu, hB);
			DeleteObject(hB); 
		}
		//Painting the names of available Avatars
		if(_numAvatarRef > 0)
		{
			if(_numAvatarRef > 1)
			{
				for(y = 0; y < _showNumAvatars; y++)
				{
					if(y + _pickAvScrollIndex < _numAvatarRef)
					{
						tmpList.AvDisplayName = _AvatarRef[y + _pickAvScrollIndex].AvDisplayName;
						for(x = 0; x < int(tmpList.AvDisplayName.length()); x++)
							if(tmpList.AvDisplayName[x] == '_') tmpList.AvDisplayName[x] = ' ';
						MyDrawText(hDC, tmpList.AvDisplayName,
							rect.left + 10, rect.top + (y * _bmpTrimmed->GetHeight()), 
							(rect.right - rect.left) - 20, _bmpTrimmed->GetHeight(), TLeft);
					}
				}
			}
			else
			{
				tmpList.AvDisplayName = _AvatarRef->AvDisplayName;
				for(x = 0; x < int(tmpList.AvDisplayName.length()); x++)
					if(tmpList.AvDisplayName[x] == '_') tmpList.AvDisplayName[x] = ' ';
				MyDrawText(hDC, tmpList.AvDisplayName,
					rect.left + 10, rect.top, (rect.right - rect.left) - 20, _bmpTrimmed->GetHeight(), TLeft);
			}
		}
		//Show Advice at bottom of dialog box

		SetTextColor(hDC, RGB(255, 25, 25));
		//Creating title bar...
		SetRect(&rect, 
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.50) - int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.40),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.95),
			_rctPickAvatar.left + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.50) + int((_rctPickAvatar.right - _rctPickAvatar.left) * 0.40),
			_rctPickAvatar.top + int((_rctPickAvatar.bottom - _rctPickAvatar.top) * 0.95) + _bmpTrimmed->GetHeight());
		ThinTrimBox(hDC, rect, 0, 0, 0);
		temp = "Right-clicking a name will allow you to delete the character";
		MyDrawText(hDC, temp, rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
	}
	//End Expanded-----------------------------------------------------------------------------------------
	if(_bFakeLoad == true)
	{
		hB = CreateSolidBrush(RGB(0, 0, 0));
		FillRect(hDC, &_rctFake, hB);
		DeleteObject(hB);
		InvertedTrimRect(hDC, _rctFake);
		FakeProgressBar(hDC, 255, 242, 0);
		MyDrawText(hDC, "Saving", _rctFake.left, _rctFake.top, (_rctFake.right - _rctFake.left), _bmpTrimmed->GetHeight(), TCent);
	}
	SetTextColor(hDC, RGB(0, 0, 0));
	SetBkMode(hDC, OPAQUE);
	_paintSomething = false;
}
void PaintPlayScrn(HDC hDC)
{
	HBRUSH hB;
	RECT	rect = {0, 0, 0, 0};
	int		i, j, x, y;
	int		SpcCursorX = 0;
	int		XStart = 0, Width	= 0;
	int		YStart = 0, Height	= 0;
	double	expand = 0.0;
	char	tmpTxt[128] = {0};
	RECT	percentRct;
	POINT	ptTile, ptEdge;
	Avatar	tmpAvatar;
	string	strMsg;

	SetBkMode(hDC, TRANSPARENT);
	if(_paintWholeScrn	== true)
	{
		//Drawing the Background Image Multiple times to cover the screen...
		for(y = 0; y < int(_EngineHeight / _bgHeigh); y++)
			for(x = 0; x < int(_EngineWidth / _bgWidth); x++)
				_bmpBG->Draw(hDC, (x * _bgWidth), (y * _bgHeigh), false);
		//Draw the left over spaces...
		j = y;	//Remembering where y was...
		i = x;	//Remembering where x was...
		for(y = 0; y < int(_EngineHeight); y++)
			_bmpBG->DrawPart(hDC, (i * _bgWidth), (y * _bgHeigh), 0, 0, (_EngineWidth - (i * _bgWidth)), _bgHeigh, false);
		for(x = 0; x < int(_EngineWidth); x++)
			_bmpBG->DrawPart(hDC, (x * _bgWidth), (j * _bgHeigh), 0, 0, _bgWidth, (_EngineHeight - (j * _bgHeigh)), false);
		//Paint all of the Border Trim - M. White 5 April, 2019
		PaintBorderTrim(hDC);
		_paintMainMap	= true;
		_PaintSideBar	= true;
		_paintButtons	= true;
		_paintWholeScrn = false;
	}
	if(_paintMainMap	== true)
	{
		//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
		PaintAShadow(hDC, 0, 0, 0, _PlayWin[_MAPVIEW].GetRect());//clear the screen - M. White 12 June, 2019
		switch(_PlayWin[_MAPVIEW].GetType())
		{
		case SQR_Map:
			for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
				for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + (x * _PlayWin[_MAPVIEW].GetTileW());
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + (y * _PlayWin[_MAPVIEW].GetTileH());

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							//Checking Fog of War
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited()	== true)
							{
								_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
									int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()),
									//The 0 y-coordinate will need to account for mtuliple
									//Tiles later - M. White 22 March, 2019
									0, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX()	>= 0)
							//	{
							//		_bmpCoastalImgs[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
							//			_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW(), 
							//			_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() * _PlayWin[_MAPVIEW].GetTileH(),
							//			_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							//	}
							//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest()	>= 0)
							//	{
							//		_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
							//			_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW(), 
							//			(4 * _PlayWin[_MAPVIEW].GetTileH()),
							//			_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							//	}
							//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity()		>= 0)
							//	{
							//		_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
							//			_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW(), 
							//			(3 * _PlayWin[_MAPVIEW].GetTileH()),
							//			_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							//	}
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall()		>= 0)
								{
								//	_walls002->DrawPart(hDC, ptTile.x, ptTile.y - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50),
								//		_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW(), 0,
								//		_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH() + int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);

									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0://Wall
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
											int(_PlayWin[_MAPVIEW].GetTileW() * 13),
											int(_PlayWin[_MAPVIEW].GetTileH() * 0), 
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									case 1://Closed Door (verticle)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
											int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 1), 
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									case 2://Closed Door (horizontal)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
											int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 2), 
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									case 3://Open Door (verticle)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
											int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 3),  
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									case 4://Open Door (horizontal)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
											int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 4),  
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
										//During Play, Secret doors appear as walls - M. White 27 August, 2019
									case 5://Secret Door (Not Found)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
											int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 0),  
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									case 6://Secret Door (Found)
										_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
											int(_PlayWin[_MAPVIEW].GetTileW() * 12), 
											int(_PlayWin[_MAPVIEW].GetTileH() * 4),  
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
										break;
									};
								}
								if(_bHiddenMap == true)
								{
									if		(_VisLightArray[x][y] == 2)
									{
										if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex > -1)
										{
											if(_bLoadMobs == false)
											{
												if(_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace() > -1)
												{
													_bmpMobImagesMap[/**/
														_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace()
															/**/].Draw(hDC, ptTile.x, ptTile.y - 16, true);
												}
											}
										}
									}
									//Fringe area / out of range 
									else if	(_VisLightArray[x][y] < 2)
									{
										_bmpFOW->DrawPart(hDC, ptTile.x, ptTile.y,
											1/*_VisLightArray[x][y]*/ * _PlayWin[_MAPVIEW].GetTileW(), 0,
											_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									}
								}
								else
								{
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex > -1)
									{
										if(_bLoadMobs == false)
										{
											if(_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace() > -1)
											{
												_bmpMobImagesMap[
													_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace()
														].Draw(hDC, ptTile.x, ptTile.y - 16, true);
											}
										}
									}
								}
							}
							else
							{
								_bmpFOW->DrawPart(hDC, ptTile.x, ptTile.y, 0, 0, 
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), false);
							}
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_bLoadMobs == false)
							{
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex > -1)
								{
									if(_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace() > -1)
									{
										_bmpMobImagesMap[
											_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetRace()
												].DrawPart(hDC, ptEdge.x, ptEdge.y - 16, XStart, YStart, Width, Height, true);
									}
								}
							}
						//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX()	>= 0)
						//	{
						//		if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						//		{
						//			ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//			Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//		}
						//		else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						//		}
						//		else
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].GetTileW();
						//		}
						//		_bmpCoastalImgs[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
						//			XStart, 
						//			YStart + _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() *_PlayWin[_MAPVIEW].GetTileH(),
						//			Width, Height, true);
						//	}
						//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest()	>= 0)
						//	{
						//		if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						//		{
						//			ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//			Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//		}
						//		else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						//		}
						//		else
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].GetTileW();
						//		}
						//		_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
						//			XStart, 
						//			YStart + (4 *_PlayWin[_MAPVIEW].GetTileH()),
						//			Width, Height, true);
						//	}
						//	if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity()		>= 0)
						//	{
						//		if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						//		{
						//			ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//			Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						//		}
						//		else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						//		}
						//		else
						//		{
						//			ptEdge.x	= ptTile.x;
						//			XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
						//			Width		= _PlayWin[_MAPVIEW].GetTileW();
						//		}
						//		_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
						//			XStart, YStart + (3 *_PlayWin[_MAPVIEW].GetTileH()), Width, Height, true);
						//	}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall()		>= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW());
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW());
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									};
									YStart		+= (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									};
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									};
									Height		= _PlayWin[_MAPVIEW].GetTileH();
								}
							//	_walls002->DrawPart(hDC, ptEdge.x, ptEdge.y - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), XStart, YStart, Width, Height + int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);
								_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
							//Adding Fog of War
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited()	== true)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(1/*_VisLightArray[x][y]*/ * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(1/*_VisLightArray[x][y]*/ * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(1/*_VisLightArray[x][y]*/ * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									YStart		= 0;
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									YStart		= 0;
									Height		= _PlayWin[_MAPVIEW].GetTileH();
								}
								if(_bHiddenMap == true)
								{
									if(_VisLightArray[x][y] < 2)
									{
										_bmpFOW->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
									}
								}
							}
							else
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_VisLightArray[x][y] * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_VisLightArray[x][y] * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_VisLightArray[x][y] * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									YStart		= 0;
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									YStart		= 0;
									Height		= _PlayWin[_MAPVIEW].GetTileH();
								}
								_bmpFOW->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
						}
						if(_bLoadMobs == false)
						{
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex > -1)
							{
								if(_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetShowSpeach() == true)
								{
									switch(_MonitorCat)
									{
									case 2:		expand = 1.5;		break;
									case 1:		expand = 1.0;		break;
									case 0:		expand = 0.5;		break;
									};
									//Need length of message to determin how wide to make the rect
									strMsg = _MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetSpeachMsg();
									SetRect(&_AvSpeachBubble, 
										ptTile.x + int(_PlayWin[_MAPVIEW].GetTileW() * 0.50) - 
											int(int((strMsg.length() * expand) * 8) * 0.50), 
										ptTile.y - int(_PlayWin[_MAPVIEW].GetTileH() * 1.00) - 
											int(_bmpAlienSpeak->GetHeight() * 1.50),
										ptTile.x + int(_PlayWin[_MAPVIEW].GetTileW() * 0.50) + 
											int(int((strMsg.length() * expand) * 8) * 0.50), 
										ptTile.y - int(_PlayWin[_MAPVIEW].GetTileH() * 1.00));

									if(_AvSpeachBubble.left > _PlayWin[_MAPVIEW].gRectL() && _AvSpeachBubble.right  < _PlayWin[_MAPVIEW].gRectR() &&
									   _AvSpeachBubble.top  > _PlayWin[_MAPVIEW].gRectT() && _AvSpeachBubble.bottom < _PlayWin[_MAPVIEW].gRectB())
									{
										//Painting trim box first so that the speach link will over-write the edge
										ThinTrimBox(hDC, _AvSpeachBubble, 0, 0, 0);
										if(_TheWizard != NULL)
										{
											_TheWizard->bmpMsgBG.DrawPart(hDC,
												_AvSpeachBubble.left + int((_AvSpeachBubble.right - _AvSpeachBubble.left) * 0.50) -
													int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
												_AvSpeachBubble.bottom - 1,
												//30 and 155 are coordinates in the bitmap, act as starting point
												30 - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50), 155 - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50),
												_PlayWin[_MAPVIEW].GetTileW(), int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);
										}
										_bmpBGParch->DrawPart(hDC, _AvSpeachBubble.left, _AvSpeachBubble.top,
											0, 0, 
											(_AvSpeachBubble.right  - _AvSpeachBubble.left),
											(_AvSpeachBubble.bottom - _AvSpeachBubble.top), false);

										MyDrawText(hDC, strMsg, 
											_AvSpeachBubble.left, _AvSpeachBubble.top + 3, 
											(_AvSpeachBubble.right - _AvSpeachBubble.left), _bmpTrimmed->GetHeight(), TCent);
										if(_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].GetInTextBox() == false)
										{
											_MobArray[_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex].SetInTextBox(true);
											_MSG->AddMessage(strMsg);
										}
									}
								}
							}
						}
					}
			//Show The Player's Avatar
			switch(_MonitorCat)
			{
			case 2:
				_bmpPortraits->DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					(_TempAvatar->getPortrait() * _PortraitsW) + (_TempAvatar->GetSex() * 72),
					177, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), false);
				break;
			case 1:
				_bmpPortraits->DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					(_TempAvatar->getPortrait() * _PortraitsW) + (_TempAvatar->GetSex() * 48),
					118, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), false);
				break;
			case 0:
				_bmpPortraits->DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					(_TempAvatar->getPortrait() * _PortraitsW) + (_TempAvatar->GetSex() * 24),
					59, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), false);
				break;
			};
			break;
			/*
			case DIA_Map:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						//This (y & 1) creates an boolen test - is Y even or odd?
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
									((x * _PlayWin[_MAPVIEW].GetTileW()) + 
									((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) - 
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)));
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
									((y * _PlayWin[_MAPVIEW].GetTileH()) - 
									( y      * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) - 
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)));

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y,
								//The zero y-coordinate needs to be changed to a multiplier later to
								//account for multiple ranks of images - M. White 15 March, 2019
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()), 0,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								//Find a matching x- and y-coordinate - M. White 20 June, 2019
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						//If the tile did not fall completely into the screen...clip it...
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[DIA_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
						}
					}
				if(_ShowCursor == true)
				{
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
						((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + 
						((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() / 2)) );
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
						((_ptCursor.y * _PlayWin[_MAPVIEW].GetTileH()) - 
						(_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() / 2)));

					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpCursors->DrawPart(hDC, 
							ptTile.x, ptTile.y,							//Where will the cursor's x and y land?
							_PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW(), //Find x-source data by multiplying map type by width
							_bmpY,										//Move to y-source data determined at GameStart()
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), //Width and Height of cursor matches Tile sizes...
							true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW() + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].GetTileW();
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= _bmpY + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				//'Arrow' graphic
				_bmpTiles[_MAPVIEW].DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(), 
					_PlayWin[_MAPVIEW].GetTileH(), 
					_PlayWin[_MAPVIEW].GetTileW(), 
					_PlayWin[_MAPVIEW].GetTileH(), true); 
				break;
			case RHO_Map:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						//This (y & 1) creates an boolen test - is Y even or odd?
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((x * _PlayWin[_MAPVIEW].GetTileW()) + 
							((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) -
							((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)));
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
							((y * _PlayWin[_MAPVIEW].GetTileH()) -
							( y      * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) -
							((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)));

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y,
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()),
								0,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 24, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 8, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						//If the tile did not fall completely into the screen...clip it...
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin->gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[RHO_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
						}
					}
				if(_ShowCursor == true)
				{
					ptTile.x = ((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + ((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() / 2)) ) + _PlayWin[_MAPVIEW].GetTileOffX();
					ptTile.y = ((_ptCursor.y * _PlayWin[_MAPVIEW].GetTileH()) -  (_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() / 2))	    ) + _PlayWin[_MAPVIEW].GetTileOffY();

					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{			
						_bmpCursors->DrawPart(hDC, 
							ptTile.x, ptTile.y,							//Where will the cursor's x and y land?
							_PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW(), //Find x-source data by multiplying map type by width
							_bmpY,										//Move to y-source data determined at GameStart()
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), //Width and Height of cursor matches Tile sizes...
							true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW() + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].GetTileW();
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				_bmpTiles[_MAPVIEW].DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(),
					_PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(), true); 
				break;
				*/
		case HEX_Map01:
			for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
				for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
				{
					//The +1 here keeps the uneven HexTiles from overlapping too badly - M. White 5 June, 2019
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() +
								((x * _PlayWin[_MAPVIEW].GetTileW()) + 1) +
								((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) -
								((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50));
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
								(y * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) -
								((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50));
					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
							_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW(), 
							0/*_PlayWin[_MAPVIEW].GetTileH()*/, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						if		(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terDesert		|| _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terHills ||
								 _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terRough)
						{
							switch(_MonitorCat)
							{
							case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 814, 132, _PlayWin[_MAPVIEW].GetTileW(), 52, true); break;
							case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
							case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 286,  42, _PlayWin[_MAPVIEW].GetTileW(), 14, true); break;
								break;
							};
						}
						else if	(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terMountains		|| _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terVolcano)
						{
							switch(_MonitorCat)
							{
							case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - 6, 888, 132, _PlayWin[_MAPVIEW].GetTileW(), 52, true); break;
							case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - 5, 600,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
							case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - 3, 312,  42, _PlayWin[_MAPVIEW].GetTileW(), 17, true); break;
								break;
							};
						}
						else if (_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terGlacier)
						{
							switch(_MonitorCat)
							{
							case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 814, 184, _PlayWin[_MAPVIEW].GetTileW(), 51, true); break;
							case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550, 120, _PlayWin[_MAPVIEW].GetTileW(), 34, true); break;
							case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 286,  56, _PlayWin[_MAPVIEW].GetTileW(), 14, true); break;
								break;
							};
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() >= 0)
						{
							_bmpCoastalImgs[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW(), 
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() * _PlayWin[_MAPVIEW].GetTileH(),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() >= 0)
						{
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW(), 
								_PlayWin[_MAPVIEW].GetTileH() * 4,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() >= 0)
						{
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW(), 
								_PlayWin[_MAPVIEW].GetTileH() * 3,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() >= 0)
						{
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
								_bmpRiverRoads->DrawPart(hDC, ptTile.x, ptTile.y,
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW(), 
								_PlayWin[_MAPVIEW].GetTileH(),//Bottom of the Bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							else
								_bmpRiverRoads->DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW(), 
								0,//Top of the Bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
						{
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].GetTileW() * 10, 
								_PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
					}
					//If the tile did not fall completely into the screen...clip it...
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
							Width		= _PlayWin[_MAPVIEW].GetTileW();
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							//These zeroes (30s) need to be modified later to account for bitmaps
							//that have multiple ranks of images to account for - M. White 15 March, 2019
							YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							//These zeroes (30s) need to be modified later to account for bitmaps
							//that have multiple ranks of images to account for - M. White 15 March, 2019
							YStart		= 0;//_PlayWin[_MAPVIEW].GetTileH();
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							//These zeroes (30s) need to be modified later to account for bitmaps
							//that have multiple ranks of images to account for - M. White 15 March, 2019
							YStart		= 0;//_PlayWin[_MAPVIEW].GetTileH();
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() >= 0)
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							_bmpCoastalImgs[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
								XStart, 
								YStart + (_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() *_PlayWin[_MAPVIEW].GetTileH()),
								Width, Height, true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() >= 0)
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
								XStart, 
								YStart + (4 *_PlayWin[_MAPVIEW].GetTileH()),
								Width, Height, true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() >= 0)
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (3 *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() >= 0)
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
									XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								else
									XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
									XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW());
								else
									XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
									XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW());
								else
									XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
							{
								_bmpRiverRoads->DrawPart(hDC, ptEdge.x, ptEdge.y,
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW(), 
								YStart + _PlayWin[_MAPVIEW].GetTileH(),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							else
							{
								_bmpRiverRoads->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
						}
						if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10);
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, 
								YStart + _PlayWin[_MAPVIEW].GetTileH(), Width, Height, true);
						}
					}
				}
				if(_ShowCursor == true)
				{
					switch(_PlayWin[_MAPVIEW].GetTileW())
					{
					case 74:	SpcCursorX = 144;		break;
					case 50:	SpcCursorX =  96;		break;
					case 26:	SpcCursorX =  48;		break;
					};
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() +
								((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + 1) +//The +1 is to kiss up the tiles - M. White 25 April, 2019
								((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50));
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
								(_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50));
					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _TileW_Hex01) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _TileH_Hex01) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpCursors->DrawPart(hDC, ptTile.x, ptTile.y, SpcCursorX, _bmpY, _TileW_Hex01, _TileH_Hex01, true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= SpcCursorX + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _TileW_Hex01 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _TileW_Hex01) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= SpcCursorX;
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= SpcCursorX;
							Width		= _TileW_Hex01;
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= _bmpY + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _TileH_Hex01 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _TileH_Hex01) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _TileH_Hex01;
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
			_bmpTiles[_MAPVIEW].DrawPart(hDC,
				(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
				(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
				_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(),
				_PlayWin[_MAPVIEW].GetTileH(),
				_PlayWin[_MAPVIEW].GetTileW(),
				_PlayWin[_MAPVIEW].GetTileH(), true);
			break;
		};
		//Trimming the play map - M. White 5 June, 2019
		InvertedTrimRect(hDC, _PlayWin[_MAPVIEW].GetRect());
		//Mini-map, compile the data into the off image...
		if(_IsLoading == true)
		{
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 0, 0, 0, _PlayWin[_MAPVIEW].GetRect());//clear the screen - M. White 12 June, 2019
			InvertedTrimRect(hDC, _PlayWin[_MAPVIEW].GetRect());
			
			SetRect(&rect,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) - 100,
				_PlayWin[_MAPVIEW].gRectT() + 24,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) + 100,
				_PlayWin[_MAPVIEW].gRectT() + 48);
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 255, 255, 255, rect);
			InvertedTrimRect(hDC, rect);

			//Showing Load Progress - M. White 20 May, 2019
			SetRect(&percentRct, rect.left, rect.top,
				rect.left + int((rect.right - rect.left) * double(_PercentCounter / double(_PercentTotal))), rect.bottom);
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 255, 242, 0, percentRct);
		}
		if(_IsLoading == false)
		{
			PaintMiniMap(hDC);
			//Paint Compass
			switch(_MonitorCat)
			{
			case 2:
				_bmpCompFace->DrawPart(hDC, _PlayWin[_MAPVIEW].gRectR() - 19, _PlayWin[_MAPVIEW].gRectT() - 18,
					(_TileWalkFacing * 36), 44, 36, 36, true);
				break;
			case 1:
				_bmpCompFace->DrawPart(hDC, _PlayWin[_MAPVIEW].gRectR() - 11, _PlayWin[_MAPVIEW].gRectT() - 14,
					(_TileWalkFacing * 25), 19, 25, 25, true);
				break;
			case 0:
				_bmpCompFace->DrawPart(hDC, _PlayWin[_MAPVIEW].gRectR() -  6, _PlayWin[_MAPVIEW].gRectT() - 13,
					(_TileWalkFacing * 19),  0, 19, 19, true);
				break;
			};
		}

		_paintMainMap = false;
	}
	if(_PaintSideBar	== true)
	{
		if(_ShowAnAvatar == true)
		{
			SetRect(&rect, _PlayScrnAvatar.left, _PlayScrnAvatar.top, _PlayScrnAvatar.right, _PlayScrnAvatar.bottom);
			_bmpBGParch->DrawPart(hDC,rect.left, rect.top, 0, 0, (rect.right - rect.left), (rect.bottom - rect.top), false);
			InvertedTrimRect(hDC, rect);
			if(_EditingTarget1 == -1)
			{
				//Avatar's Stats...
				//Note: These should have been put into an array and looped...
				//Not enough time to retro-fix all the related code

				//TODO: Work on the Active Attributes so we can call that data instead of Starting Attributes
				strMsg = "Name: ";
				strMsg += _TempAvatar->GetFName();
				MyDrawText(hDC, strMsg, 
					rect.left, rect.top + int(_bmpTrimmed->GetHeight() * 0.50), 
					(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);

				strMsg = "Str: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.20), rect.top + int(_bmpTrimmed->GetHeight() * 1.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSStr()); strMsg = tmpTxt;
				if(_TempAvatar->GetStrE() > 0)
				{
					strMsg += " / ";
					sprintf(tmpTxt, "%d", _TempAvatar->GetStrE());					
					strMsg += tmpTxt;
				}
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.35), rect.top + int(_bmpTrimmed->GetHeight() * 1.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "Dex: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.20), rect.top + int(_bmpTrimmed->GetHeight() * 2.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSDex()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.35), rect.top + int(_bmpTrimmed->GetHeight() * 2.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);
				
				strMsg = "Con: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.20), rect.top + int(_bmpTrimmed->GetHeight() * 3.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSCon()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.35), rect.top + int(_bmpTrimmed->GetHeight() * 3.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "Int: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.60), rect.top + int(_bmpTrimmed->GetHeight() * 1.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSInt()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.75), rect.top + int(_bmpTrimmed->GetHeight() * 1.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "Wis: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.60), rect.top + int(_bmpTrimmed->GetHeight() * 2.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSWis()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.75), rect.top + int(_bmpTrimmed->GetHeight() * 2.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "Cha: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.60), rect.top + int(_bmpTrimmed->GetHeight() * 3.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSCha()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.75), rect.top + int(_bmpTrimmed->GetHeight() * 3.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "Com: ";
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.40), rect.top + int(_bmpTrimmed->GetHeight() * 4.5), 
					int((rect.right - rect.left) * 0.90), _bmpTrimmed->GetHeight(), TLeft);
				sprintf(tmpTxt, "%d", _TempAvatar->GetSCom()); strMsg = tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.55), rect.top + int(_bmpTrimmed->GetHeight() * 4.5), 
					int((rect.right - rect.left) * 0.60), _bmpTrimmed->GetHeight(), TLeft);

				//But not the change in 6.0, as it's meant to give gap from previous data
				for(i = 0; i < _TempAvatar->GetNumClass(); i++)
				{
					strMsg = _TempAvatar->GetClassStr(i);
					sprintf(tmpTxt, "%d", _TempAvatar->GetClassLvl(i));
					strMsg += " (";
					strMsg += tmpTxt;
					strMsg += "):";
					MyDrawText(hDC, strMsg, 
						rect.left + int((rect.right - rect.left) * 0.05), rect.top + int(_bmpTrimmed->GetHeight() * (6.0 + i)), 
						int((rect.right - rect.left) * 0.25), _bmpTrimmed->GetHeight(), TLeft);

					sprintf(tmpTxt, "%d", _TempAvatar->GetClassXP(i));
					strMsg = tmpTxt;
					MyDrawText(hDC, strMsg, 
						rect.left + int((rect.right - rect.left) * 0.45), rect.top + int(_bmpTrimmed->GetHeight() * (6.0 + i)), 
						int((rect.right - rect.left) * 0.50), _bmpTrimmed->GetHeight(), TRight);
				}

				//This uses the above loops ending 'i' value...do not alterate it for the rest of this block of code
				//But not the change in 6.5, as it's meant to give gap from previous data
				strMsg = "AC: ";
				sprintf(tmpTxt, "%d", _TempAvatar->GetAC());
				strMsg += tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.05), rect.top + int(_bmpTrimmed->GetHeight() * (6.5 + i)), 
					int((rect.right - rect.left) * 0.25), _bmpTrimmed->GetHeight(), TLeft);

				strMsg = "HP (";
				sprintf(tmpTxt, "%d", _TempAvatar->GetHP());
				strMsg += tmpTxt;
				strMsg += "): ";
				sprintf(tmpTxt, "%d", _TempAvatar->GetCurHP());
				strMsg += tmpTxt;
				MyDrawText(hDC, strMsg, 
					rect.left + int((rect.right - rect.left) * 0.05), rect.top + int(_bmpTrimmed->GetHeight() * (7.5 + i)), 
					(rect.right - rect.left), _bmpTrimmed->GetHeight(), TLeft);
			}
			else
			{
				//TODO: Future Development, showing Henchmen stats...
			}
		}
		else
		{
			//Avatar's Portrait
			switch(_MonitorCat)
			{
			case 2:
				_bmpPortraits->DrawPart(hDC, _PlayScrnAvatar.left, _PlayScrnAvatar.top, 
					_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 48), 
					_PortraitsW, _PortraitsH, false);
				break;
			case 1:
				_bmpPortraits->DrawPart(hDC, _PlayScrnAvatar.left, _PlayScrnAvatar.top, 
					_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 32), 
					_PortraitsW, _PortraitsH, false);
				break;
			case 0:
				_bmpPortraits->DrawPart(hDC, _PlayScrnAvatar.left, _PlayScrnAvatar.top, 
					_TempAvatar->getPortrait() * _PortraitsW, (_TempAvatar->GetSex() * _PortraitsH) + (_TempAvatar->GetSex() * 16), 
					_PortraitsW, _PortraitsH, false);
				break;
			};
			//Create a Health Bar along the edge of the Portrait...
			//Red
			SetRect(&rect, _PlayScrnAvatar.right + 8, _PlayScrnAvatar.top, _PlayScrnAvatar.right + 16, _PlayScrnAvatar.bottom);
			PaintAShadow(hDC, 255, 0, 0, rect);

			//Green
			if(_TempAvatar->GetCurHP() >= 0)
			{
				SetRect(&rect, 
					_PlayScrnAvatar.right + 8,
					_PlayScrnAvatar.bottom - 
						int((_PlayScrnAvatar.bottom - _PlayScrnAvatar.top) * (_TempAvatar->GetCurHP() / double(_TempAvatar->GetHP()))),
					_PlayScrnAvatar.right + 16, _PlayScrnAvatar.bottom);
				PaintAShadow(hDC, 0, 255, 0, rect);
			}
			else
			{
				SetRect(&rect, 
					_PlayScrnAvatar.right + 8,
					_PlayScrnAvatar.bottom - 
						int((_PlayScrnAvatar.bottom - _PlayScrnAvatar.top) * 
							(_TempAvatar->GetSCon() + _TempAvatar->GetCurHP()) / double(_TempAvatar->GetSCon())),
					_PlayScrnAvatar.right + 16, _PlayScrnAvatar.bottom);
				PaintAShadow(hDC, 255, 255, 0, rect);
			}
			SetRect(&rect, _PlayScrnAvatar.left, _PlayScrnAvatar.top, _PlayScrnAvatar.right, _PlayScrnAvatar.bottom);
			InvertedTrimRect(hDC, rect);
			//Creating a division bar for austhetics
			SetRect(&rect, _SideBarBackGrnd.left  + 25, _PlayScrnAvatar.bottom + 8 + 8, _SideBarBackGrnd.right - 25, _PlayScrnAvatar.bottom + 8 + 16);
			ThinTrimBox(hDC, rect, 0, 0, 0);

			//Showing Henchmen Slots
			SetRect(&rect,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) - 
					int((_PlayWin[_MAPVIEW].GetTileW() * 5) * 0.50),

				_PlayScrnAvatar.bottom + 32, 

				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right - _SideBarBackGrnd.left) * 0.50) + 

				int((_PlayWin[_MAPVIEW].GetTileW() * 5) * 0.50),
				_PlayScrnAvatar.bottom + 32 + (_PlayWin[_MAPVIEW].GetTileH() * 10));
			ThinTrimBox(hDC, rect, 0, 0, 0);
			//Displaying Portrait or blank...
			for(y = 0; y < 10; y++)
			{
				for(x = 0; x < 5; x++)
				{
				//	if(THERE IS A HENCHMAN IN THIS SLOT)
				//	{
				//	}
				//	else
				//	{
						_bmpTiles[SQR_Map].DrawPart(hDC,
							rect.left + (x * _PlayWin[_MAPVIEW].GetTileW()),
							rect.top  + (y * _PlayWin[_MAPVIEW].GetTileH()), 
							//13 represents the black tile in map tile images
							int(13 * _PlayWin[_MAPVIEW].GetTileW()),
							0, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
				//	}
				}
			}
		}
		_PaintSideBar = false;
	}
	if(_paintButtons	== true)
	{
		if(_Buttons != NULL)
		{
			for(i = 0; i < _NumBtns; i++)
			{
				//Exclude these two buttons...
				if(i != gpShrinkMsg && i != gpExpandMsg)
				{
					if(_Buttons[i].DidItHit(_XMouse, _YMouse) == true)
						_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(),
											_Buttons[i].GetBmpXAlt(), _Buttons[i].GetBmpYAlt(),
											_Buttons[i].GetWidth(),   _Buttons[i].GetHeight(), false);
					else
						_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(),
											_Buttons[i].GetBmpX(),  _Buttons[i].GetBmpY(),
											_Buttons[i].GetWidth(), _Buttons[i].GetHeight(), false);
				}
			}
		}
		_paintButtons = false;
	}
	if(_ShowTestData	== true)
	{
		hB = CreateSolidBrush(RGB(255, 255, 255));
		for(y = 0; y < 40; y++)
		{
			SetRect(&rect, (_EngineWidth - 250), (y * 16) + 30, (_EngineWidth - 10), (y * 16) + 46);
			FillRect(hDC, &rect, hB);
		}
		DeleteObject(hB);

		sprintf(tmpTxt, "Client Rect (%d, %d)", _EngineWidth, _EngineHeight);
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 30, 300, 16, TLeft);

		switch(_MAPVIEW)
		{
		case SQR_Map:		sprintf(tmpTxt, "Map: Square");		break;
		case DIA_Map:		sprintf(tmpTxt, "Map: Diamond");	break;
		case RHO_Map:		sprintf(tmpTxt, "Map: Rhombus");	break;
		case HEX_Map01:		sprintf(tmpTxt, "Map: Hexa1");		break;
		case HEX_Map02:		sprintf(tmpTxt, "Map: Hexa2");		break;
		};
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 46, 300, 16, TLeft);

		switch(_MAPVIEW)
		{
		case SQR_Map:	sprintf(tmpTxt, "Max Tiles (SQR) (%d, %d)", _MaxColsSQR_Map, _MaxRowsSQR_Map);		break;
		case DIA_Map:	sprintf(tmpTxt, "Max Tiles (DIA) (%d, %d)", _MaxColsDIA_Map, _MaxRowsDIA_Map);		break;
		case RHO_Map:	sprintf(tmpTxt, "Max Tiles (RHO) (%d, %d)", _MaxColsRHO_Map, _MaxRowsRHO_Map);		break;
		case HEX_Map01:	sprintf(tmpTxt, "Max Tiles (HX1) (%d, %d)", _MaxColsHEX_Map01, _MaxRowsHEX_Map01);	break;
		case HEX_Map02:	sprintf(tmpTxt, "Max Tiles (HX2) (%d, %d)", _MaxColsHEX_Map02, _MaxRowsHEX_Map02);	break;
		};
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 62, 300, 16, TLeft);

		sprintf(tmpTxt, "PlayMap Columns: %d Rows: %d", _PlayWin[_MAPVIEW].GetNumCol(), _PlayWin[_MAPVIEW].GetNumRow());
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 78, 300, 16, TLeft);

		sprintf(tmpTxt, "TileWalker (%d, %d)", _TileWalkerX, _TileWalkerY);
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 94, 300, 16, TLeft);

		sprintf(tmpTxt, "Cursor (%d, %d)", _ptCursor.x, _ptCursor.y);
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 110, 300, 16, TLeft);

		sprintf(tmpTxt, "Fine Mouse Command: %d", _WhatCommandCursor);
		MyDrawText(hDC, tmpTxt, (rect.left + 5), 126, 300, 16, TLeft);

		strMsg = "Current Map: ";
		strMsg += _TempAvatar->GetStartMapName();
		MyDrawText(hDC, strMsg, (rect.left + 5), 142, 300, 16, TLeft);

		strMsg = _TempAvatar->GetListOfVisited();
		MyDrawText(hDC, strMsg, (rect.left + 5), 158, 300, 16, TLeft);
	}
	if(_MSG != NULL)
	{
		CopyRect(&rect, &_MSG->CurrentRect);
		InvertedTrimRect(hDC, rect);

		_bmpBGParch->DrawPart(hDC,rect.left, rect.top, 0, 0, (rect.right - rect.left), (rect.bottom - rect.top), false);

		for(i = 0; i < _MSG->GetExpand(); i++)
		{
			strMsg = ""; _MSG->Messages.getNodes(i, strMsg);
			MyDrawText(hDC, strMsg, rect.left + 10, rect.bottom - (_MSG->GetExpandBy() * (i + 1)),
			(rect.right - rect.left) - 20, _MSG->GetExpandBy(), TLeft);
		}
		//Move the buttons with the movements of the message board
		if		(_MSG->GetExpand() == MaxExpandedView)
		{
			_Buttons[gpShrinkMsg].SetProperties(rect.right - 8, rect.top - 8, 16, 16, 124, 76, 124, 76, 124, 76, true, "", "");
			_bmpButtons->DrawPart(hDC, _Buttons[gpShrinkMsg].GetX(), _Buttons[gpShrinkMsg].GetY(),
										_Buttons[gpShrinkMsg].GetBmpX(),  _Buttons[gpShrinkMsg].GetBmpY(),
										_Buttons[gpShrinkMsg].GetWidth(), _Buttons[gpShrinkMsg].GetHeight(), false);
		}
		else if	(_MSG->GetExpand() == 1)
		{
			_Buttons[gpExpandMsg].SetProperties(rect.right - 8, rect.top - 8, 16, 16, 108, 76, 108, 76, 108, 76, true, "", "");
			_bmpButtons->DrawPart(hDC, _Buttons[gpExpandMsg].GetX(), _Buttons[gpExpandMsg].GetY(),
										_Buttons[gpExpandMsg].GetBmpX(),  _Buttons[gpExpandMsg].GetBmpY(),
										_Buttons[gpExpandMsg].GetWidth(), _Buttons[gpExpandMsg].GetHeight(), false);
		}
		else
		{
			_Buttons[gpExpandMsg].SetProperties(rect.right -  8, rect.top - 8, 16, 16, 108, 76, 108, 76, 108, 76, true, "", "");
			_Buttons[gpShrinkMsg].SetProperties(rect.right - 28, rect.top - 8, 16, 16, 124, 76, 124, 76, 124, 76, true, "", "");
			_bmpButtons->DrawPart(hDC, _Buttons[gpExpandMsg].GetX(), _Buttons[gpExpandMsg].GetY(),
										_Buttons[gpExpandMsg].GetBmpX(),  _Buttons[gpExpandMsg].GetBmpY(),
										_Buttons[gpExpandMsg].GetWidth(), _Buttons[gpExpandMsg].GetHeight(), false);
			_bmpButtons->DrawPart(hDC, _Buttons[gpShrinkMsg].GetX(), _Buttons[gpShrinkMsg].GetY(),
										_Buttons[gpShrinkMsg].GetBmpX(),  _Buttons[gpShrinkMsg].GetBmpY(),
										_Buttons[gpShrinkMsg].GetWidth(), _Buttons[gpShrinkMsg].GetHeight(), false);
		}
	}
	SetBkMode(hDC, OPAQUE);
}
void PaintEditor(HDC hDC)
{
	HBRUSH hB;
	RECT	rect		= {0, 0, 0, 0};
	RECT	percentRct	= {0, 0, 0, 0};
	RECT	micro		= {0, 0, 0, 0};
	bool	localBool	= false;

	POINT ptTile, ptEdge;
	int XStart = 0, Width	= 0;
	int	YStart = 0, Height	= 0;
	int SpcCursorX = 0;

	int		i, j, x, y, z;
	int		testX = 0;
	int		testY = 0;
	char	tmpTxt[256] = {0};
	InternalMapLink tmpLS;
	Avatar	tmpAvatar;
	PathNode	tmpPathNode;
	string	temp;
	SetBkMode(hDC, TRANSPARENT);
	if(_paintWholeScrn	== true)
	{
		//Drawing the Background Image Multiple times to cover the screen...
		for(y = 0; y < int(_EngineHeight / _bgHeigh); y++)
			for(x = 0; x < int(_EngineWidth / _bgWidth); x++)
				_bmpBG->Draw(hDC, (x * _bgWidth), (y * _bgHeigh), false);
		//Draw the left over spaces...
		j = y;	//Remembering where y was...
		i = x;	//Remembering where x was...
		for(y = 0; y < int(_EngineHeight); y++)
			_bmpBG->DrawPart(hDC, (i * _bgWidth), (y * _bgHeigh), 0, 0, (_EngineWidth - (i * _bgWidth)), _bgHeigh, false);
		for(x = 0; x < int(_EngineWidth); x++)
			_bmpBG->DrawPart(hDC, (x * _bgWidth), (j * _bgHeigh), 0, 0, _bgWidth, (_EngineHeight - (j * _bgHeigh)), false);
		//Paint all of the Border Trim - M. White 5 April, 2019
		PaintBorderTrim(hDC);
		//Done painting main...
		_paintWholeScrn = false;
		//...not set the rest by default to paint also - M. White 9 May, 2019
		_paintMainMap	= true;
		_paintButtons	= true;
		_PaintSideBar	= true;
	}
	if(_paintMainMap	== true)
	{
		if		((_edLinkingMaps == true && _edIntLinking == false) || _edLoadScrnDestMap == true)
		{
			//Set and color the map area to make a different view - M. White 27 May, 2019
			SetRect(&rect, _PlayWin[_MAPVIEW].gRectL(), _PlayWin[_MAPVIEW].gRectT(), _PlayWin[_MAPVIEW].gRectR(), _PlayWin[_MAPVIEW].gRectB());
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 75, 75, 75, rect);
			//Display the five black fields...
			temp = _MapLink->GetStrMOI();//_tmpLS.DestinationMapName;
			if(temp == "No_Map_Selected")	{ /* Empy Test Field */ }
			else
			{
				//If a primary map has been picked, show Save-button and Internal Link-Button - M. White 10 June, 2019
				if(_MapLink->buttons[lcSave].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(), 
						_MapLink->buttons[lcSave].GetBmpXAlt(), _MapLink->buttons[lcSave].GetBmpYAlt(),
						_MapLink->buttons[lcSave].GetWidth(),   _MapLink->buttons[lcSave].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
						_MapLink->buttons[lcSave].GetBmpX(), _MapLink->buttons[lcSave].GetBmpY(),
						_MapLink->buttons[lcSave].GetWidth(), _MapLink->buttons[lcSave].GetHeight(), true);
				SetTextColor(hDC, RGB(255, 242, 0));
				MyDrawText(hDC, _MapLink->buttons[lcSave].GetDisplayText(), 
					_MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
					_MapLink->buttons[lcSave].GetWidth(), _MapLink->buttons[lcSave].GetHeight(), TCent);
				if(_MapLink->buttons[lcInternalLinks].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcInternalLinks].GetX(), _MapLink->buttons[lcInternalLinks].GetY(), 
						_MapLink->buttons[lcInternalLinks].GetBmpXAlt(), _MapLink->buttons[lcInternalLinks].GetBmpYAlt(),
						_MapLink->buttons[lcInternalLinks].GetWidth(),   _MapLink->buttons[lcInternalLinks].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcInternalLinks].GetX(), _MapLink->buttons[lcInternalLinks].GetY(),
						_MapLink->buttons[lcInternalLinks].GetBmpX(), _MapLink->buttons[lcInternalLinks].GetBmpY(),
						_MapLink->buttons[lcInternalLinks].GetWidth(), _MapLink->buttons[lcInternalLinks].GetHeight(), true);
				SetTextColor(hDC, RGB(255, 242, 0));
				MyDrawText(hDC, _MapLink->buttons[lcInternalLinks].GetDisplayText(), 
					_MapLink->buttons[lcInternalLinks].GetX(), _MapLink->buttons[lcInternalLinks].GetY(),
					_MapLink->buttons[lcInternalLinks].GetWidth(), _MapLink->buttons[lcInternalLinks].GetHeight(), TCent);
			}
			//Center...
			//Already have the Primary Map name from above - M. White 16 June, 2019 //temp = _MapLink->GetMapOfInterestStr();
			if(temp == "No_Map_Selected")	{ hB = CreateSolidBrush(RGB(0, 0, 0));			SetTextColor(hDC, RGB(175, 0, 0));	}
			else							{ hB = CreateSolidBrush(RGB(255, 255, 255));	SetTextColor(hDC, RGB(0, 0, 0));	}
			CopyRect(&micro, &_MapLink->GetRectMapInterest()); FillRect(hDC, &micro, hB); InvertedTrimRect(hDC, micro);
			if(temp == "No_Map_Selected")
			{
				MyDrawText(hDC, "Step 1: Click Here to assign the",
					micro.left, micro.top + _bmpTrimmed->GetHeight(), (micro.right - micro.left), 16, TCent);
				MyDrawText(hDC, "Primary Map to add Links to.",
					micro.left, micro.top + (_bmpTrimmed->GetHeight() * 2), (micro.right - micro.left), 16, TCent);
			}
			else
			{
				//Clean out underscores for display purposes - M. White 20 June, 2019
				for(z = 0; z < int(temp.length()); z++)
					if(temp[z] == '_') temp[z] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top + (_bmpTrimmed->GetHeight() * 4), (micro.right - micro.left), 16, TCent);
			}
			DeleteObject(hB);
			//Left
			temp = _MapLink->GetStrMapWest();
			if(temp == "No_Map_Selected")	{ hB = CreateSolidBrush(RGB(0, 0, 0));			SetTextColor(hDC, RGB(175, 0, 0));	}
			else							{ hB = CreateSolidBrush(RGB(255, 255, 255));	SetTextColor(hDC, RGB(0, 0, 0));	}
			CopyRect(&micro, &_MapLink->GetRectWestMap()); FillRect(hDC, &micro, hB); InvertedTrimRect(hDC, micro);
			if(temp == "No_Map_Selected")
			{
				MyDrawText(hDC, "Step 2: Click to Assign the West Map",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 0.20), (micro.right - micro.left), 16, TCent);
				MyDrawText(hDC, "Or leave blank for no map assignment",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.20), (micro.right - micro.left), 16, TCent);
			}
			else
			{
				//Clean out underscores for display purposes - M. White 20 June, 2019
				for(z = 0; z < int(temp.length()); z++)
					if(temp[z] == '_') temp[z] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.20), (micro.right - micro.left), 16, TCent);
			}
			DeleteObject(hB);
			//Top...
			temp = _MapLink->GetStrMapNorth();
			if(temp == "No_Map_Selected")	{ hB = CreateSolidBrush(RGB(0, 0, 0));			SetTextColor(hDC, RGB(175, 0, 0));	}
			else							{ hB = CreateSolidBrush(RGB(255, 255, 255));	SetTextColor(hDC, RGB(0, 0, 0));	}
			CopyRect(&micro, &_MapLink->GetRectNorthMap()); FillRect(hDC, &micro, hB); InvertedTrimRect(hDC, micro);
			if(temp == "No_Map_Selected")
			{
				MyDrawText(hDC, "Step 2: Click to Assign the North Map",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 0.50), (micro.right - micro.left), 16, TCent);
				MyDrawText(hDC, "Or leave blank for no map assignment",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.50), (micro.right - micro.left), 16, TCent);
			}
			else
			{
				//Clean out underscores for display purposes - M. White 20 June, 2019
				for(z = 0; z < int(temp.length()); z++)
					if(temp[z] == '_') temp[z] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.50), (micro.right - micro.left), 16, TCent);
			}
			DeleteObject(hB);
			//Right
			temp = _MapLink->GetStrMapEast();
			if(temp == "No_Map_Selected")	{ hB = CreateSolidBrush(RGB(0, 0, 0));			SetTextColor(hDC, RGB(175, 0, 0));	}
			else							{ hB = CreateSolidBrush(RGB(255, 255, 255));	SetTextColor(hDC, RGB(0, 0, 0));	}
			CopyRect(&micro, &_MapLink->GetRectEastMap()); FillRect(hDC, &micro, hB); InvertedTrimRect(hDC, micro);
			if(temp == "No_Map_Selected")
			{
				MyDrawText(hDC, "Step 2: Click to Assign the East Map",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 0.20), (micro.right - micro.left), 16, TCent);
				MyDrawText(hDC, "Or leave blank for no map assignment",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.20), (micro.right - micro.left), 16, TCent);
			}
			else
			{
				//Clean out underscores for display purposes - M. White 20 June, 2019
				for(z = 0; z < int(temp.length()); z++)
					if(temp[z] == '_') temp[z] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.20), (micro.right - micro.left), 16, TCent);
			}
			DeleteObject(hB);
			//Bottom...
			temp = _MapLink->GetStrMapSouth();
			if(temp == "No_Map_Selected")	{ hB = CreateSolidBrush(RGB(0, 0, 0));			SetTextColor(hDC, RGB(175, 0, 0));	}
			else							{ hB = CreateSolidBrush(RGB(255, 255, 255));	SetTextColor(hDC, RGB(0, 0, 0));	}
			CopyRect(&micro, &_MapLink->GetRectSouthMap()); FillRect(hDC, &micro, hB); InvertedTrimRect(hDC, micro);
			if(temp == "No_Map_Selected")
			{
				MyDrawText(hDC, "Step 2: Click to Assign the South Map",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 0.50), (micro.right - micro.left), 16, TCent);
				MyDrawText(hDC, "Or leave blank for no map assignment",
					micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.50), (micro.right - micro.left), 16, TCent);
			}
			else
			{
				//Clean out underscores for display purposes - M. White 20 June, 2019
				for(z = 0; z < int(temp.length()); z++)
					if(temp[z] == '_') temp[z] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top + int(_bmpTrimmed->GetHeight() * 1.50), (micro.right - micro.left), 16, TCent);
			}
			DeleteObject(hB);
			if(_MapLink->WhichMapBeingPicked > -1 || _edLoadScrnDestMap == true)
			{
				//Paint the underlying background - M. White 9 June, 2019
				CopyRect(&rect, &_MapLink->GetRectPickName());	//Copy the rect in question - M. White 9 June, 2019
				//Fill it with the parchment bitmap - M. White 9 June, 2019
				_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, (rect.right  - rect.left), (rect.bottom - rect.top), false);
				InvertedTrimRect(hDC, rect);//Trim it - M. White 9 June, 2019
				//Paint a background shadow indicating if the Map in question is either World or Scene...
				//...(as appears behind the buttons at top - M. White 9 June, 2019
				if(_edLoadScrnDestMap == false)
				{
					switch(_MapLink->WhichMapBeingPicked)
					{
					case 0:		localBool = _MapLink->GetTypeInterWorld();		break;
					case 1:		localBool = _MapLink->GetTypeWest();			break;
					case 2:		localBool = _MapLink->GetTypeNorth();			break;
					case 3:		localBool = _MapLink->GetTypeEast();			break;
					case 4:		localBool = _MapLink->GetTypeSouth();			break;
					};
				}
				else localBool = _edDestMapWorld;
				//Compiling instructions for User according to what is the current state - M. White 11 June, 2019
				temp = "Select a ";
				if(localBool == true)
				{
					SetRect(&_ShadowRect, 
						rect.left,
						_MapLink->buttons[lcWorld].GetY() - int(_MapLink->buttons[lcWorld].GetHeight() * 0.25), 
						rect.left + int((rect.right - rect.left) * 0.50),
						(_MapLink->buttons[lcWorld].GetY() + _MapLink->buttons[lcWorld].GetHeight()) + int(_MapLink->buttons[lcWorld].GetHeight() * 0.25));
					temp += "World Map";
				}
				else
				{
					SetRect(&_ShadowRect,
						rect.left + int((rect.right - rect.left) * 0.50),
						_MapLink->buttons[lcScene].GetY() - int((_MapLink->buttons[lcScene].GetHeight()) * 0.25), 
						rect.right,
						(_MapLink->buttons[lcScene].GetY() + _MapLink->buttons[lcScene].GetHeight()) + int((_MapLink->buttons[lcScene].GetHeight()) * 0.25));
					temp += "Scene Map";
				}
				if(_edLoadScrnDestMap == false)
				{
					switch(_MapLink->WhichMapBeingPicked)
					{
					case 0:		temp += " to assign links";		break;
					case 1:		temp += " for West Map";		break;
					case 2:		temp += " for North Map";		break;
					case 3:		temp += " for East Map";		break;
					case 4:		temp += " for South Map";		break;
					};
				}
				else temp += " as the Destination";
				//Only add this part if false - M. White 11 June, 2019
				if(_edLoadScrnDestMap == false) temp += ", then Continue or Cancel";
				//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
				PaintAShadow(hDC, 255, 242, 0, _ShadowRect);//Shadow behind buttons - M. White 12 June, 2019
				SetTextColor(hDC, RGB(0, 0, 0));
				MyDrawText(hDC, temp,
					rect.left, _MapLink->buttons[0].GetY() + int(_MapLink->buttons[0].GetHeight() * 1.50),
					(rect.right - rect.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Creating a field for the list to appear on - M. White 14 May, 2019
				CopyRect(&rect, &_MapLink->GetRectPickName());
				SetRect(&micro,
					rect.left	+ int((rect.right - rect.left) * 0.05),
					rect.top	+ int((rect.bottom - rect.top) * 0.15),
					rect.right	- int((rect.right - rect.left) * 0.05),
					rect.top	+ int((rect.bottom - rect.top) * 0.15) + (_bmpTrimmed->GetHeight() * _NumLinesToList));
				//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
				PaintAShadow(hDC, 175, 175, 175, micro);
				InvertedTrimRect(hDC, micro);
				//Present the list of options - M. White 9 June, 2019
				if(_NumWSs >= 1)
				{
					//Displaying the current File selected at bottom of window - M. White 12 June, 2019
					if(_EditingTarget1 >= 0 && _EditingTarget1 < _NumWSs)
					{
						SetRect(&_ShadowRect, micro.left, micro.bottom + (_bmpTrimmed->GetHeight() * 1),
							micro.right, micro.bottom + (_bmpTrimmed->GetHeight() * 2));
						//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
						PaintAShadow(hDC, 175, 175, 175, _ShadowRect);
						InvertedTrimRect(hDC, _ShadowRect);
						//Get the name - M. White 17 May, 2019
						_ListWorldScenes.getNodes(_EditingTarget1, temp);
						//Set the color - M. White 17 May, 2019
						SetTextColor(hDC, RGB(0, 0, 0));
						MyDrawText(hDC, temp,
							_ShadowRect.left, _ShadowRect.top,
							(_ShadowRect.right - _ShadowRect.left), _bmpTrimmed->GetHeight(), TCent);
					}
					//Creating a lighter shadown behind each entry seperatly...
					for(i = 0; i < _NumLinesToList; i++)
						if((i + _ListIndex) < _NumWSs)
						{
							SetRect(&_ShadowRect, micro.left + 2, micro.top + 2 + (i * _bmpTrimmed->GetHeight()),
								micro.right - 2, micro.top + (i * _bmpTrimmed->GetHeight()) + (_bmpTrimmed->GetHeight() - 2));
							//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
							PaintAShadow(hDC, 200, 200, 200, _ShadowRect);
						}
					//Creating Mouse shadow - M. White 9 June, 2019
					if(_XMouse >= micro.left && _XMouse <= micro.right - int((micro.right - micro.left) * 0.03) &&
					   _YMouse >= micro.top  && _YMouse < (micro.top + (_bmpTrimmed->GetHeight() * _NumLinesToList)))
					{
						j = VRD(micro.top, _pEngine->GetMouseY());
						if(j < _NumWSs)
						{
							SetRect(&_ShadowRect, micro.left, micro.top + ((VRD(micro.top, _YMouse) * _bmpTrimmed->GetHeight())),
								micro.right, micro.top + ((VRD(micro.top, _YMouse) * _bmpTrimmed->GetHeight())) + _bmpTrimmed->GetHeight());
							//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
							PaintAShadow(hDC, 255, 242, 0, _ShadowRect);
						}
					}
					//Listing the wording - M. White 9 June, 2019
					for(i = 0; i < _NumLinesToList; i++)
					{
						if((i + _ListIndex) < _NumWSs)
						{
							//List available links
							_ListWorldScenes.getNodes((i + _ListIndex), temp);
							SetTextColor(hDC, RGB(0, 0, 0));
							MyDrawText(hDC, temp,
								micro.left, micro.top + (_bmpTrimmed->GetHeight() * i),
								(micro.right - micro.left), _bmpTrimmed->GetHeight(), TCent);
						}
					}
					//up and down buttons - M. White 16 May, 2019
					if(_NumWSs > _NumLinesToList)
					{
						if(_WorldSceneUpDwn != NULL)
						{
							for(i = 0; i < 2; i++)
								if(_WorldSceneUpDwn[i].DidItHit(_XMouse, _YMouse))
									_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(), 
										_WorldSceneUpDwn[i].GetBmpXAlt(), _WorldSceneUpDwn[i].GetBmpYAlt(),
										_WorldSceneUpDwn[i].GetWidth(),   _WorldSceneUpDwn[i].GetHeight(), true);
								else
									_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(),
										_WorldSceneUpDwn[i].GetBmpX(),   _WorldSceneUpDwn[i].GetBmpY(),
										_WorldSceneUpDwn[i].GetWidth(),  _WorldSceneUpDwn[i].GetHeight(), true);
						}
					}
				}
				//Paint the Buttons
				SetTextColor(hDC, RGB(255, 242, 0));
				//Showing the relevant buttons needed to deal with selecting
				//a map (up to and included in the loop) - M. White 15 June, 2019
				if(_MapLink != NULL)
				{
				//	lcWorld = 0, lcScene, lcContinue, lcCancel, lcSave, lcInternalLinks, lcOpen, lcContinueTwo, MAX_LCs
					for(i = 0; i <= lcCancel; i++)
					{
						if(_MapLink->buttons[i].DidItHit(_XMouse, _YMouse))
							_bmpButtons->DrawPart(hDC, _MapLink->buttons[i].GetX(), _MapLink->buttons[i].GetY(), 
								_MapLink->buttons[i].GetBmpXAlt(), _MapLink->buttons[i].GetBmpYAlt(),
								_MapLink->buttons[i].GetWidth(),   _MapLink->buttons[i].GetHeight(), true);
						else
							_bmpButtons->DrawPart(hDC, _MapLink->buttons[i].GetX(), _MapLink->buttons[i].GetY(),
								_MapLink->buttons[i].GetBmpX(), _MapLink->buttons[i].GetBmpY(),
								_MapLink->buttons[i].GetWidth(), _MapLink->buttons[i].GetHeight(), true);
						MyDrawText(hDC, _MapLink->buttons[i].GetDisplayText(), 
							_MapLink->buttons[i].GetX(), _MapLink->buttons[i].GetY(),
							_MapLink->buttons[i].GetWidth(), _MapLink->buttons[i].GetHeight(), TCent);
					}
				}
			}
			//Cancel button at bottom of screen - M. White 9 June, 2019
			else
			{
				if(_MapLink->buttons != NULL)
				{
					if(_MapLink->buttons[lcCancel].DidItHit(_XMouse, _YMouse))
						_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(), 
							_MapLink->buttons[lcCancel].GetBmpXAlt(), _MapLink->buttons[lcCancel].GetBmpYAlt(),
							_MapLink->buttons[lcCancel].GetWidth(),   _MapLink->buttons[lcCancel].GetHeight(), true);
					else
						_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
							_MapLink->buttons[lcCancel].GetBmpX(), _MapLink->buttons[lcCancel].GetBmpY(),
							_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), true);
					SetTextColor(hDC, RGB(255, 242, 0));
					MyDrawText(hDC, _MapLink->buttons[lcCancel].GetDisplayText(), 
						_MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
						_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), TCent);
				}
			}
		}
		//Normal Editing Phase displaying map - M. White 11 June, 2019
		else
		{
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 0, 0, 0, _PlayWin[_MAPVIEW].GetRect());//clear the screen - M. White 12 June, 2019
			switch(_PlayWin[_MAPVIEW].GetType())
			{
			case SQR_Map:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + (x * _PlayWin[_MAPVIEW].GetTileW());
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + (y * _PlayWin[_MAPVIEW].GetTileH());

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
								int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()),
								//The 0 y-coordinate will need to account for mtuliple
								//Tiles later - M. White 22 March, 2019
								0, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);

							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex > -1)
							{
								_ListMobAssigns.getNodes(_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex, tmpAvatar);
								if(tmpAvatar.GetRace() > -1)
									_bmpMobImagesMap[tmpAvatar.GetRace()].Draw(hDC, ptTile.x, ptTile.y - 16, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX()	>= 0)
							{
								_bmpCoastalImgs[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW(), 
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() * _PlayWin[_MAPVIEW].GetTileH(),
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest()	>= 0)
							{
								_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW(), 
									(4 * _PlayWin[_MAPVIEW].GetTileH()),
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity()		>= 0)
							{
								_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW(), 
									(3 * _PlayWin[_MAPVIEW].GetTileH()),
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall()		>= 0)
							{
							//	_walls002->DrawPart(hDC, ptTile.x, ptTile.y - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50),
							//		_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW(), 0,
							//		_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH() + int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);

								//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
								switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
								{
								case 0://Wall
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
										int(_PlayWin[_MAPVIEW].GetTileW() * 13),
										int(_PlayWin[_MAPVIEW].GetTileH() * 0), 
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
								case 1://Closed Door (verticle)
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y,
										int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
										int(_PlayWin[_MAPVIEW].GetTileH() * 1), 
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
								case 2://Closed Door (horizontal)
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
										int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
										int(_PlayWin[_MAPVIEW].GetTileH() * 2), 
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
								case 3://Open Door (verticle)
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
										int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
										int(_PlayWin[_MAPVIEW].GetTileH() * 3),  
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
								case 4://Open Door (horizontal)
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
										int(_PlayWin[_MAPVIEW].GetTileW() * 13), 
										int(_PlayWin[_MAPVIEW].GetTileH() * 4),  
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
									//During Editing, Secret doors have to be marked for the person deloping
									//the map - M. White 27 August, 2019
								case 5://Secret Door (Not Found)
									_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
										int(_PlayWin[_MAPVIEW].GetTileW() * 12), 
										int(_PlayWin[_MAPVIEW].GetTileH() * 4),  
										_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
									break;
							//	case 6://Secret Door (Found)
							//		_bmpTiles[SQR_Map].DrawPart(hDC, ptTile.x, ptTile.y, 
							//			int(_PlayWin[_MAPVIEW].GetTileW() * 12), 
							//			int(_PlayWin[_MAPVIEW].GetTileH() * 4),  
							//			_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							//		break;
								};
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited()	== false)
							{
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX()	>= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpCoastalImgs[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() *_PlayWin[_MAPVIEW].GetTileH(),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest()	>= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (4 *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity()		>= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (3 *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall()		>= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() == 6)
										XStart = int(12 * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW());
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW());
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() == 6)
										XStart = int(12 * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
								//	XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() * _PlayWin[_MAPVIEW].GetTileW());
									XStart		= int(13 * _PlayWin[_MAPVIEW].GetTileW());
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall() == 6)
										XStart = int(12 * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									case 5:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Secret Door
									case 6: YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Secret Door (Found)
									};
									YStart		+= (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									case 5:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Secret Door
									case 6: YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Secret Door (Found)
									};
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									//TEMPORARY WALLS AND DOORS - will be replaced with more advanced graphics - M. White 21 August, 2019
									switch(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetWall())
									{
									case 0:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Wall
									case 1:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 1);	break;//Closed Door (verticle)
									case 2:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 2);	break;//Closed Door (horizontal)
									case 3:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 3);	break;//Open Door (verticle)
									case 4:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Open Door (horizontal)
									case 5:	YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 0);	break;//Secret Door
									case 6: YStart = int(_PlayWin[_MAPVIEW].GetTileH() * 4);	break;//Secret Door (Found)
									};
									Height		= _PlayWin[_MAPVIEW].GetTileH();
								}
							//	_walls002->DrawPart(hDC, ptEdge.x, ptEdge.y - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), XStart, YStart, Width, Height + int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);
								_bmpTiles[SQR_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited()	== false)
							{
							}
						}
					}
				if(_ShowCursor == true)
				{
					//This (y & 1) creates an boolen test - is Y even or odd?
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + (_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW());
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + (_ptCursor.y * _PlayWin[_MAPVIEW].GetTileH());
					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpCursors->DrawPart(hDC, 
							ptTile.x, ptTile.y,							//Where will the cursor's x and y land?
							_PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW(), //Find x-source data by multiplying map type by width
							_bmpY,										//Move to y-source data determined at GameStart()
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), //Width and Height of cursor matches Tile sizes...
							true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW() + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
							{
								ptEdge.x	= ptTile.x;
								XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
						if		(ptTile.y < _PlayWin->gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= _bmpY + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin->GetTileH()) > _PlayWin->gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				//'Arrow' graphic
				_bmpTiles[_MAPVIEW].DrawPart(hDC, 
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)),
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(), 
					_PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(), true);
				break;
			case DIA_Map:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						//This (y & 1) creates an boolen test - is Y even or odd?
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
									((x * _PlayWin[_MAPVIEW].GetTileW()) + 
									((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) - 
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)));
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
									((y * _PlayWin[_MAPVIEW].GetTileH()) - 
									( y      * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) - 
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)));

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y,
								//The zero y-coordinate needs to be changed to a multiplier later to
								//account for multiple ranks of images - M. White 15 March, 2019
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()), 0,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								//Find a matching x- and y-coordinate - M. White 20 June, 2019
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						//If the tile did not fall completely into the screen...clip it...
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[DIA_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
						}
					}
				if(_ShowCursor == true)
				{
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
						((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + 
						((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() / 2)) );
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
						((_ptCursor.y * _PlayWin[_MAPVIEW].GetTileH()) - 
						(_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() / 2)));

					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpCursors->DrawPart(hDC, 
							ptTile.x, ptTile.y,							//Where will the cursor's x and y land?
							_PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW(), //Find x-source data by multiplying map type by width
							_bmpY,										//Move to y-source data determined at GameStart()
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), //Width and Height of cursor matches Tile sizes...
							true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW() + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].GetTileW();
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= _bmpY + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				//'Arrow' graphic
				_bmpTiles[_MAPVIEW].DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(), 
					_PlayWin[_MAPVIEW].GetTileH(), 
					_PlayWin[_MAPVIEW].GetTileW(), 
					_PlayWin[_MAPVIEW].GetTileH(), true); 
				break;
			case RHO_Map:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						//This (y & 1) creates an boolen test - is Y even or odd?
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((x * _PlayWin[_MAPVIEW].GetTileW()) + 
							((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) -
							((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)));
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
							((y * _PlayWin[_MAPVIEW].GetTileH()) -
							( y      * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) -
							((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)));

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y,
								(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()),
								0,
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 24, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 8, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													576, 48, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													384, 32, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													192, 16, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						//If the tile did not fall completely into the screen...clip it...
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin->gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[RHO_Map].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
							}
						}
					}
				if(_ShowCursor == true)
				{
					ptTile.x = ((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + ((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() / 2)) ) + _PlayWin[_MAPVIEW].GetTileOffX();
					ptTile.y = ((_ptCursor.y * _PlayWin[_MAPVIEW].GetTileH()) -  (_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() / 2))	    ) + _PlayWin[_MAPVIEW].GetTileOffY();

					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
					{			
						_bmpCursors->DrawPart(hDC, 
							ptTile.x, ptTile.y,							//Where will the cursor's x and y land?
							_PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW(), //Find x-source data by multiplying map type by width
							_bmpY,										//Move to y-source data determined at GameStart()
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), //Width and Height of cursor matches Tile sizes...
							true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW() + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= _PlayWin[_MAPVIEW].GetType() * _PlayWin[_MAPVIEW].GetTileW();
							Width		= _PlayWin[_MAPVIEW].GetTileW();
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].GetTileH();
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				_bmpTiles[_MAPVIEW].DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(),
					_PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(), true); 
				break;
			case HEX_Map01:
				for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
					for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					{
						//The +1 here keeps the uneven HexTiles from overlapping too badly - M. White 5 June, 2019
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() +
									((x * _PlayWin[_MAPVIEW].GetTileW()) + 1) +
									((y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50)) -
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50));
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
									(y * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50)) -
									((_TileWalkerY & 1) * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50));
						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
								_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW(), 
								0/*_PlayWin[_MAPVIEW].GetTileH()*/, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							if		(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terDesert		|| _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terHills ||
									 _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terRough)
							{
								switch(_MonitorCat)
								{
								case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 814, 132, _PlayWin[_MAPVIEW].GetTileW(), 52, true); break;
								case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
							//	case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
									break;
								};
							}
							else if	(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terMountains		|| _PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terVolcano)
							{
								switch(_MonitorCat)
								{
								case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - 6, 888, 132, _PlayWin[_MAPVIEW].GetTileW(), 52, true); break;
								case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - 5, 600,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
							//	case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y - ?, 550,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
									break;
								};
							}
							else if (_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() == terGlacier)
							{
								switch(_MonitorCat)
								{
								case 2: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 814, 184, _PlayWin[_MAPVIEW].GetTileW(), 51, true); break;
								case 1: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550, 120, _PlayWin[_MAPVIEW].GetTileW(), 34, true); break;
							//	case 0: _bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y, 550,  85, _PlayWin[_MAPVIEW].GetTileW(), 35, true); break;
									break;
								};
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() >= 0)
							{
								_bmpCoastalImgs[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW(), 
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() * _PlayWin[_MAPVIEW].GetTileH(),
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() >= 0)
							{
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW(), 
									_PlayWin[_MAPVIEW].GetTileH() * 4,
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() >= 0)
							{
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW(), 
									_PlayWin[_MAPVIEW].GetTileH() * 3,
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() >= 0)
							{
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
									_bmpRiverRoads->DrawPart(hDC, ptTile.x, ptTile.y,
									(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW(), 
									_PlayWin[_MAPVIEW].GetTileH(),//Bottom of the Bitmap - M. White 12 May, 2019
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
								else
									_bmpRiverRoads->DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW(), 
									0,//Top of the Bitmap - M. White 12 May, 2019
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptTile.x, ptTile.y,
									_PlayWin[_MAPVIEW].GetTileW() * 10, 
									_PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							}
							if(_MapLink->NumInternalLinks > 0)
							{
								j = _TileWalkerX - _PlayWin[_MAPVIEW].GetCentCol() + x;
								z = _TileWalkerY - _PlayWin[_MAPVIEW].GetCentRow() + y;
								if(_TileWalkerY & 1) z--;
								for(i = 0; i < _MapLink->NumInternalLinks; i++)
								{
									_MapLink->inLinks.getNodes(i, tmpLS);
									if(_edShowMapOfInt == true)
									{
										if(tmpLS.exitX == j && tmpLS.exitY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													888, 46, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													600, 30, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													312, 14, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
									else
									{
										if(tmpLS.destX == j && tmpLS.destY == z)
										{
											switch(_MonitorCat)
											{
											case 2:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													888, 46, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 1:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													600, 30, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											case 0:
												_bmpTiles[_MAPVIEW].DrawPart(hDC, ptTile.x, ptTile.y, 
													312, 14, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
												break;
											};
										}
									}
								}
							}
						}
						//If the tile did not fall completely into the screen...clip it...
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetBG() * _PlayWin[_MAPVIEW].GetTileW());
								Width		= _PlayWin[_MAPVIEW].GetTileW();
							}
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								//These zeroes (30s) need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= _PlayWin[_MAPVIEW].GetTileH() - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + _PlayWin[_MAPVIEW].GetTileH()) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								//These zeroes (30s) need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;//_PlayWin[_MAPVIEW].GetTileH();
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								//These zeroes (30s) need to be modified later to account for bitmaps
								//that have multiple ranks of images to account for - M. White 15 March, 2019
								YStart		= 0;//_PlayWin[_MAPVIEW].GetTileH();
								Height		= _PlayWin[_MAPVIEW].GetTileH();
							}
							_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() >= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastX() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpCoastalImgs[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCoastY() *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() >= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetForest() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (4 *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() >= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetCity() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, 
									XStart, 
									YStart + (3 *_PlayWin[_MAPVIEW].GetTileH()),
									Width, Height, true);
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() >= 0)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
										XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									else
										XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
										XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW());
									else
										XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW()) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
										XStart	= int((_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW());
									else
										XStart	= int(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() * _PlayWin[_MAPVIEW].GetTileW());
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() > _numRiverRoadsHori)
								{
									_bmpRiverRoads->DrawPart(hDC, ptEdge.x, ptEdge.y,
									(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetRoadRiver() - _numRiverRoadsHori) * _PlayWin[_MAPVIEW].GetTileW(), 
									YStart + _PlayWin[_MAPVIEW].GetTileH(),
									_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
								}
								else
								{
									_bmpRiverRoads->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
								}
							}
							if(_PlayWin[_MAPVIEW].PW_Buffer[x][y].GetVisited() == false)
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= _PlayWin[_MAPVIEW].GetTileW() - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + _PlayWin[_MAPVIEW].GetTileW()) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10);
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(_PlayWin[_MAPVIEW].GetTileW() * 10);
									Width		= _PlayWin[_MAPVIEW].GetTileW();
								}
								_bmpTiles[HEX_Map01].DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, 
									YStart + _PlayWin[_MAPVIEW].GetTileH(), Width, Height, true);
							}
						}
					}
				if(_ShowCursor == true)
				{
					switch(_PlayWin[_MAPVIEW].GetTileW())
					{
					case 74:	SpcCursorX = 144;		break;
					case 50:	SpcCursorX =  96;		break;
					case 26:	SpcCursorX =  48;		break;
					};
					ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() +
								((_ptCursor.x * _PlayWin[_MAPVIEW].GetTileW()) + 1) +//The +1 is to kiss up the tiles - M. White 25 April, 2019
								((_ptCursor.y & 1) * int(_PlayWin[_MAPVIEW].GetTileW() * 0.50));
					ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() +
								(_ptCursor.y * int(_PlayWin[_MAPVIEW].GetTileH() * 0.50));
					//Did the tile fall completely into the Screen Map?
					if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + _TileW_Hex01) < _PlayWin[_MAPVIEW].gRectR() &&
					   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + _TileH_Hex01) < _PlayWin[_MAPVIEW].gRectB())
					{
						_bmpCursors->DrawPart(hDC, ptTile.x, ptTile.y, SpcCursorX, _bmpY, _TileW_Hex01, _TileH_Hex01, true);
					}
					else
					{
						if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
						{
							ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
							XStart		= SpcCursorX + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							Width		= _TileW_Hex01 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
						}
						else if	((ptTile.x + _TileW_Hex01) > _PlayWin[_MAPVIEW].gRectR())
						{
							ptEdge.x	= ptTile.x;
							XStart		= SpcCursorX;
							Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
						}
						else
						{
							ptEdge.x	= ptTile.x;
							XStart		= SpcCursorX;
							Width		= _TileW_Hex01;
						}
						if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
						{
							ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
							YStart		= _bmpY + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							Height		= _TileH_Hex01 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
						}
						else if	((ptTile.y + _TileH_Hex01) > _PlayWin[_MAPVIEW].gRectB())
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
						}
						else
						{
							ptEdge.y	= ptTile.y;
							YStart		= _bmpY;
							Height		= _TileH_Hex01;
						}
						_bmpCursors->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
					}
				}
				_bmpTiles[_MAPVIEW].DrawPart(hDC,
					(_PlayWin[_MAPVIEW].GetCenterX() - (_PlayWin[_MAPVIEW].GetTileW() / 2)),
					(_PlayWin[_MAPVIEW].GetCenterY() - (_PlayWin[_MAPVIEW].GetTileH() / 2)), 
					_TileWalkFacing * _PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(),
					_PlayWin[_MAPVIEW].GetTileW(),
					_PlayWin[_MAPVIEW].GetTileH(), true);
				break;
			}
			//Display Input box over map - M. White 29 July, 2019
			if	(_edAssignStartPnt == true && _tmpStartLoc != NULL)
			{
				if(_MapLink != NULL)
				{
					if(_MapLink->ShowUserInput == true)
					{
						CopyRect(&rect, &_MapLink->GetRectUserInputScrn());
						_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, rect.right - rect.left, rect.bottom - rect.top, false);
						InvertedTrimRect(hDC, rect);
						CopyRect(&rect, &_MapLink->GetRectUserTextBox());
						SetTextColor(hDC, RGB(0, 0, 0));
						MyDrawText(hDC, "Type Name", 
							rect.left, rect.top  - int(_bmpTrimmed->GetHeight() * 1.25), (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
						TextBoxTrim(hDC, rect, 1);
						SetTextColor(hDC, RGB(255, 255, 255));
						if(_tmpLS.NickName.length() > 0)
						{
							temp = _tmpLS.NickName;
							for(int xx = 0; xx < int(temp.length()); xx++)	if(temp[xx] == '_') temp[xx] = ' ';
							MyDrawText(hDC, temp, rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
						}
						if(_MapLink->buttons[lcContinueTwo].DidItHit(_XMouse, _YMouse))
							_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(), 
								_MapLink->buttons[lcContinueTwo].GetBmpXAlt(), _MapLink->buttons[lcContinueTwo].GetBmpYAlt(),
								_MapLink->buttons[lcContinueTwo].GetWidth(),   _MapLink->buttons[lcContinueTwo].GetHeight(), true);
						else
							_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(),
								_MapLink->buttons[lcContinueTwo].GetBmpX(),  _MapLink->buttons[lcContinueTwo].GetBmpY(),
								_MapLink->buttons[lcContinueTwo].GetWidth(), _MapLink->buttons[lcContinueTwo].GetHeight(), true);
						SetTextColor(hDC, RGB(255, 242, 0));
						MyDrawText(hDC, _MapLink->buttons[lcContinueTwo].GetDisplayText(), 
							_MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(),
							_MapLink->buttons[lcContinueTwo].GetWidth(), _MapLink->buttons[lcContinueTwo].GetHeight(), TCent);
					}
				}
			}
		}
		//Trimming the play map - M. White 5 June, 2019
		InvertedTrimRect(hDC, _PlayWin[_MAPVIEW].GetRect());
		//X- / Y-Coordinates to show user where they're currently orientated - M. White 30 April, 2019
	//	if(_edLinkingMaps == false && _edLoadScrnDestMap == false)
		{
			SetTextColor(hDC, RGB(0, 0, 0));
			SetRect(&rect,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) - 100,
				_PlayWin[_MAPVIEW].gRectB() - 24,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) + 100,
				_PlayWin[_MAPVIEW].gRectB());
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 255, 255, 255, rect);
			InvertedTrimRect(hDC, rect);
			sprintf(tmpTxt, " X: %d Y: %d ", _TileWalkerX, _TileWalkerY);
			MyDrawText(hDC, tmpTxt, rect.left + 3, rect.top, 195, (rect.bottom - rect.top), TCent);
		}
		if		(_edAssignStartPnt == true)
		{
			//Display instructions...
			SetTextColor(hDC, RGB(255, 255, 255));
			SetRect(&rect, 
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.01),
				_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.02),
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.31),
				_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.32));
			PaintAShadow(hDC, 0, 0, 0, rect);
			InvertedTrimRect(hDC, rect);
			temp  = "Use the arrow keys to manuever the map near the location where you want the Scenario Starting Point";
			temp += " to be and click on the tile to start the process.\n\n";
			temp += "Remember there can be only one Starting Point per map.";
			MyDrawMultiLineText(hDC, temp, rect.left, rect.top, (rect.right - rect.left), (rect.bottom - rect.top));
		}
		else if	(_edPathAssignmens == true)
		{
			testX = (_PlayWin[_MAPVIEW].GetCentCol() - 0);
			testY = (_PlayWin[_MAPVIEW].GetCentRow() - 0);
			//Paint the previously created paths...
			if(_MapPaths != NULL)
			{
				if(_NumPathsOnMap >= 2)
				{
					//There is more than one point...
					//All of the points assigned to the path have a directional marker...
					for(y = 0; y < _NumPathsOnMap; y += 2)
					{
						for(x = 0; x < int(_MapPaths[y].Length); x++)
						{
							_MapPaths[y].Path.getNodes(x, tmpPathNode);
							i = tmpPathNode.GetX();
							j = tmpPathNode.GetY();
							//If the index match User's current indicator, the path paints in yellow
							if(int(y / 2) == _SideBarMenuIndex)
							{
								if(x < int(_MapPaths[y].Length - 1))
								{
									switch(_MonitorCat)
									{
									case 2:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 48) - 24;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 48) - 24;
										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 96), 96, 96, 96, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 96);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 96);
												Width		= 96;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 96 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 96;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 96;
												Height		= 96;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 1:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 64), 64, 64, 64, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 64);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 64);
												Width		= 64;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 64 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 64;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 64;
												Height		= 64;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 0:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 32), 32, 32, 32, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 32);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 32);
												Width		= 32;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 32 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 32;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 32;
												Height		= 32;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									};
								}
								else
								{
									switch(_MonitorCat)
									{
									case 2:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 64) - 32;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 64) - 32;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 96), 96, 96, 96, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 96);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 96);
												Width		= 96;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 96 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 96;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 96;
												Height		= 96;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 1:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 64), 64, 64, 64, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 64);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 64);
												Width		= 64;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 64 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 64;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 64;
												Height		= 64;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 0:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 32), 32, 32, 32, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 32);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 32);
												Width		= 32;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 32 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 32;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 32;
												Height		= 32;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									};
								}
							}
							//...else it paints
							else
							{
								if(x < int(_MapPaths[y].Length - 1))
								{
									switch(_MonitorCat)
									{
									case 2:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 48) - 24;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 48) - 24;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 96), 0, 96, 96, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 96);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 96);
												Width		= 96;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 96;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 1:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
										ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 64), 0, 64, 64, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 64);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 64);
												Width		= 64;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 64;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 0:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(tmpPathNode.GetDir() * 32), 0, 32, 32, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(tmpPathNode.GetDir() * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 32);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(tmpPathNode.GetDir() * 32);
												Width		= 32;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 32;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									};
								}
								else
								{
									switch(_MonitorCat)
									{
									case 2:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 48) - 24;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 48) - 24;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 96), 0, 96, 96, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 96);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 96);
												Width		= 96;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 96;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 1:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
										ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 64), 0, 64, 64, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 64);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 64);
												Width		= 64;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 64;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									case 0:
										ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
											((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
										ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
											((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

										//Did the tile fall completely into the Screen Map?
										if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
										   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
										{
											_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 32), 0, 32, 32, true);
										}
										else
										{
											if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
											{
												ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
												XStart		= int(8 * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
												Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
											}
											else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 32);
												Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
											}
											else
											{
												ptEdge.x	= ptTile.x;
												XStart		= int(8 * 32);
												Width		= 32;
											}
											//------------------------ Seperation of previous if-test sequence
											if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
											{
												ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
												YStart		= 0 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
												Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
											}
											else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
											}
											else
											{
												ptEdge.y	= ptTile.y;
												YStart		= 0;
												Height		= 32;
											}
											_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
										}
										break;
									};
								}
							}
						}
					}
				}
			}
			//Paint the visible path orientated on the current Avatar location - M. White 06 August, 2019
			if(_EditPath != NULL)
			{
				if		(_EditPath->GetLength() == 0)
				{
					//The following point is the only point currently assigned (just starting...)
					//So we will paint it without a link-marking showing the path - M. White 10 August.
					i = _WorkingNodeFoll->GetX(); j = _WorkingNodeFoll->GetY();
					switch(_MonitorCat)
					{
					case 2:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 96) - 48;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 96) - 48;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 96), 192, 96, 96, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 96);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 96);
								Width		= 96;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 192 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 192;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 192;
								Height		= 96;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					case 1:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 64), 128, 64, 64, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 64);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 64);
								Width		= 64;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 128 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 128;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 128;
								Height		= 64;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					case 0:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 32), 64, 32, 32, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 32);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 32);
								Width		= 32;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 64 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 64;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 64;
								Height		= 32;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					};
				}
				//Testing because the ensures there is something in the array...
				else if (_EditPath->GetLength() > 0)
				{
					//There is more than one point...
					//All of the points assigned to the path have a directional marker...
					for(x = 0; x < int(_EditPath->GetLength()); x++)
					{
						_EditPath->Path.getNodes(x, tmpPathNode);
						i = tmpPathNode.GetX(); j = tmpPathNode.GetY();
						switch(_MonitorCat)
						{
						case 2:
							ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
								((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 48) - 24;
							ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
								((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 48) - 24;

							//Did the tile fall completely into the Screen Map?
							if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
							   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
							{
								_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, 
									int(tmpPathNode.GetDir() * 96), 192, 96, 96, true);
							}
							else
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(tmpPathNode.GetDir() * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 96);
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 96);
									Width		= 96;
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									YStart		= 192 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									YStart		= 192;
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									YStart		= 192;
									Height		= 96;
								}
								_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
							break;
						case 1:
							ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
								((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
							ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
								((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

							//Did the tile fall completely into the Screen Map?
							if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
							   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
							{
								_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, 
									int(tmpPathNode.GetDir() * 64), 128, 64, 64, true);
							}
							else
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(tmpPathNode.GetDir() * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 64);
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 64);
									Width		= 64;
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									YStart		= 128 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									YStart		= 128;
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									YStart		= 128;
									Height		= 64;
								}
								_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
							break;
						case 0:
							ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
								((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
							ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
								((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

							//Did the tile fall completely into the Screen Map?
							if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
							   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
							{
								_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, 
									int(tmpPathNode.GetDir() * 32), 64, 32, 32, true);
							}
							else
							{
								if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
								{
									ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
									XStart		= int(tmpPathNode.GetDir() * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
									Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								}
								else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 32);
									Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
								}
								else
								{
									ptEdge.x	= ptTile.x;
									XStart		= int(tmpPathNode.GetDir() * 32);
									Width		= 32;
								}
								//------------------------ Seperation of previous if-test sequence
								if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
								{
									ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
									YStart		= 64 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
									Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								}
								else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
								{
									ptEdge.y	= ptTile.y;
									YStart		= 64;
									Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
								}
								else
								{
									ptEdge.y	= ptTile.y;
									YStart		= 64;
									Height		= 32;
								}
								_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
							}
							break;
						};
					}
					//The user's last input was a point that is not assigned to the path
					//yet. Show it without a directional marker...
					i = _WorkingNodeFoll->GetX(); j = _WorkingNodeFoll->GetY();
					switch(_MonitorCat)
					{
					case 2:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 48) - 24;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 48) - 24;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 96) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 96) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 96), 192, 96, 96, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 96) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 96 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 96) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 96);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 96);
								Width		= 96;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 192 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 96 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 96) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 192;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 192;
								Height		= 96;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					case 1:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 32) - 16;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 32) - 16;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 64) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 64) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 64), 128, 64, 64, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 64) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 64 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 64) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 64);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 64);
								Width		= 64;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 128 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 64 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 64) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 128;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 128;
								Height		= 64;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					case 0:
						ptTile.x = _PlayWin[_MAPVIEW].GetTileOffX() + 
							((i - _TileWalkerX + _PlayWin[_MAPVIEW].GetCentCol()) * 16) - 8;
						ptTile.y = _PlayWin[_MAPVIEW].GetTileOffY() + 
							((j - _TileWalkerY + _PlayWin[_MAPVIEW].GetCentRow()) * 16) - 8;

						//Did the tile fall completely into the Screen Map?
						if(ptTile.x > _PlayWin[_MAPVIEW].gRectL() && (ptTile.x + 32) < _PlayWin[_MAPVIEW].gRectR() &&
						   ptTile.y > _PlayWin[_MAPVIEW].gRectT() && (ptTile.y + 32) < _PlayWin[_MAPVIEW].gRectB())
						{
							_bmpPathLinks->DrawPart(hDC, ptTile.x, ptTile.y, int(8 * 32), 64, 32, 32, true);
						}
						else
						{
							if		(ptTile.x < _PlayWin[_MAPVIEW].gRectL())
							{
								ptEdge.x	= _PlayWin[_MAPVIEW].gRectL();
								XStart		= int(8 * 32) + (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
								Width		= 32 - (_PlayWin[_MAPVIEW].gRectL() - ptTile.x);
							}
							else if	((ptTile.x + 32) > _PlayWin[_MAPVIEW].gRectR())
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 32);
								Width		= _PlayWin[_MAPVIEW].gRectR() - ptTile.x;
							}
							else
							{
								ptEdge.x	= ptTile.x;
								XStart		= int(8 * 32);
								Width		= 32;
							}
							//------------------------ Seperation of previous if-test sequence
							if		(ptTile.y < _PlayWin[_MAPVIEW].gRectT())
							{
								ptEdge.y	= _PlayWin[_MAPVIEW].gRectT();
								YStart		= 64 + (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
								Height		= 32 - (_PlayWin[_MAPVIEW].gRectT() - ptTile.y);
							}
							else if	((ptTile.y + 32) > _PlayWin[_MAPVIEW].gRectB())
							{
								ptEdge.y	= ptTile.y;
								YStart		= 64;
								Height		= _PlayWin[_MAPVIEW].gRectB() - ptTile.y;
							}
							else
							{
								ptEdge.y	= ptTile.y;
								YStart		= 64;
								Height		= 32;
							}
							_bmpPathLinks->DrawPart(hDC, ptEdge.x, ptEdge.y, XStart, YStart, Width, Height, true);
						}
						break;
					};
				}
			}
			//Display instructions last so it is over any path node painting - M. White 05 August, 2019
			SetTextColor(hDC, RGB(255, 255, 255));
			SetRect(&rect, 
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.01),
				_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.02),
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) * 0.31),
				_PlayWin[_MAPVIEW].gRectT() + int((_PlayWin[_MAPVIEW].gRectB() - _PlayWin[_MAPVIEW].gRectT()) * 0.40));
			PaintAShadow(hDC, 0, 0, 0, rect);
			InvertedTrimRect(hDC, rect);
			temp  = "Use the arrow keys to manuever the map near the location where you want, then start clicking tiles";
			temp += " in succesion (that are touching) until you're finished.\n\n";
			temp += "Click the Finalize Path button to end the path. Repeat this process until you have created all of";
			temp += " the paths you *need*.\n\n";
			temp += "Start a new path by clicking again.\n\n";
			temp += "WARNING: If you click the Finish Paths button, your work will automatically save to file,";
			temp += " over writing any previous saved file for this map!";
			MyDrawMultiLineText(hDC, temp, rect.left, rect.top, (rect.right - rect.left), (rect.bottom - rect.top));
			if(_IsLoading == true)
			{
				SetTextColor(hDC, RGB(0, 0, 0));
				SetRect(&rect,
					_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) - 100,
					_PlayWin[_MAPVIEW].gRectT() + 24,
					_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) + 100,
					_PlayWin[_MAPVIEW].gRectT() + 48);
				//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
				PaintAShadow(hDC, 255, 255, 255, rect);
				InvertedTrimRect(hDC, rect);
				SetRect(&percentRct, rect.left, rect.top,
					rect.left + int((rect.right - rect.left) * double(_PercentCounter / double(_PercentTotal))), rect.bottom);
				//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
				PaintAShadow(hDC, 255, 242, 0, percentRct);
				temp = "Please Wait";
				MyDrawText(hDC, temp, rect.left + 3, rect.top, 195, (rect.bottom - rect.top), TCent);
			}
		}
		//Showing the User an Edit Dialog screen - M. White 24 June, 2019
		if(_MapLink != NULL)
		{
			if	(_MapLink->ShowUserInput == true && _edAssignStartPnt == false)
			{
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&rect, &_MapLink->GetRectUserInputScrn());
				_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, rect.right - rect.left, rect.bottom - rect.top, false);
				InvertedTrimRect(hDC, rect);
				CopyRect(&rect, &_MapLink->GetRectUserTextBox());
				MyDrawText(hDC, "Type Nick Name", 
					rect.left, rect.top  - int(_bmpTrimmed->GetHeight() * 1.25), (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
				TextBoxTrim(hDC, rect, 1);
				SetTextColor(hDC, RGB(255, 255, 255));
				if(_tmpLS.NickName.length() > 0)
				{
					temp = _tmpLS.NickName;
					for(int xx = 0; xx < int(temp.length()); xx++)	if(temp[xx] == '_') temp[xx] = ' ';
					MyDrawText(hDC, _tmpLS.NickName, rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
				}
				if(_MapLink->buttons[lcContinueTwo].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(), 
						_MapLink->buttons[lcContinueTwo].GetBmpXAlt(), _MapLink->buttons[lcContinueTwo].GetBmpYAlt(),
						_MapLink->buttons[lcContinueTwo].GetWidth(),   _MapLink->buttons[lcContinueTwo].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(),
						_MapLink->buttons[lcContinueTwo].GetBmpX(),  _MapLink->buttons[lcContinueTwo].GetBmpY(),
						_MapLink->buttons[lcContinueTwo].GetWidth(), _MapLink->buttons[lcContinueTwo].GetHeight(), true);
				SetTextColor(hDC, RGB(255, 242, 0));
				MyDrawText(hDC, _MapLink->buttons[lcContinueTwo].GetDisplayText(), 
					_MapLink->buttons[lcContinueTwo].GetX(), _MapLink->buttons[lcContinueTwo].GetY(),
					_MapLink->buttons[lcContinueTwo].GetWidth(), _MapLink->buttons[lcContinueTwo].GetHeight(), TCent);
			}
		}
		//End X- / Y-
		//Name of World or Scene if the name has data - M. White 3 May, 2019
		if(_Editor_W_S_Name.length() > 0)
		{
			SetTextColor(hDC, RGB(0, 0, 0));
			SetRect(&rect,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) - 100,
				_PlayWin[_MAPVIEW].gRectT() + 24,
				_PlayWin[_MAPVIEW].gRectL() + int((_PlayWin[_MAPVIEW].gRectR() - _PlayWin[_MAPVIEW].gRectL()) / 2) + 100,
				_PlayWin[_MAPVIEW].gRectT() + 48);
			//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
			PaintAShadow(hDC, 255, 255, 255, rect);
			InvertedTrimRect(hDC, rect);
			//Showing Load Progress - M. White 20 May, 2019
			if(_IsLoading == true)
			{
				SetRect(&percentRct, rect.left, rect.top,
					rect.left + int((rect.right - rect.left) * double(_PercentCounter / double(_PercentTotal))), rect.bottom);
				//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
				PaintAShadow(hDC, 255, 242, 0, percentRct);
			}
			temp = _Editor_W_S_Name;
			for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
			MyDrawText(hDC, temp, rect.left + 3, rect.top, 195, (rect.bottom - rect.top), TCent);
		}
		_paintMainMap = false;
		_paintButtons = true;//Necessary to paint buttons as some overlap the map - M. White 9 May, 2019
	}
	if(_paintButtons	== true)
	{
		SetTextColor(hDC, RGB(255, 242, 0));
		//Four buttons at top of screen - M. White 27 July, 2019
		for(i = 0; i < _NumBtns; i++)
		{
			if(_Buttons[i].GetIsActive() == false)
				_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(),
					_Buttons[i].GetBmpInActX(),   _Buttons[i].GetBmpInActY(),
					_Buttons[i].GetWidth(),  _Buttons[i].GetHeight(), true);
			else
			{
				if(_Buttons[i].DidItHit(_XMouse, _YMouse))
					_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(), 
						_Buttons[i].GetBmpXAlt(), _Buttons[i].GetBmpYAlt(),
						_Buttons[i].GetWidth(),   _Buttons[i].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _Buttons[i].GetX(), _Buttons[i].GetY(),
						_Buttons[i].GetBmpX(),   _Buttons[i].GetBmpY(),
						_Buttons[i].GetWidth(),  _Buttons[i].GetHeight(), true);
			}
			MyDrawText(hDC, _Buttons[i].GetDisplayText(), _Buttons[i].GetX(), _Buttons[i].GetY(), _Buttons[i].GetWidth(), _Buttons[i].GetHeight(), TCent);
		}
		//Menu buttons bottom right of screen (and their background rect) - M. White 27 July, 2019--//
		SetRect(&rect, _RectMenu.left, _RectMenu.top, _RectMenu.right, _RectMenu.bottom);			//
		//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
		PaintAShadow(hDC, 0, 0, 0, rect);															//
		InvertedTrimRect(hDC, rect);																//
		for(i = 0; i < _NumTmpSingBtn; i++)															//
		{																							//
			if(_tmpSingleBtn[i].GetIsActive() == false)												//
				_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),		//
					_tmpSingleBtn[i].GetBmpInActX(), _tmpSingleBtn[i].GetBmpInActY(),				//
					_tmpSingleBtn[i].GetWidth(), _tmpSingleBtn[i].GetHeight(), true);				//
			else																					//
			{																						//
				if(_tmpSingleBtn[i].DidItHit(_XMouse, _YMouse))										//
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),	//
						_tmpSingleBtn[i].GetBmpXAlt(), _tmpSingleBtn[i].GetBmpYAlt(),				//
						_tmpSingleBtn[i].GetWidth(),   _tmpSingleBtn[i].GetHeight(), true);			//
				else																				//
					_bmpButtons->DrawPart(hDC, _tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(),	//
						_tmpSingleBtn[i].GetBmpX(),   _tmpSingleBtn[i].GetBmpY(),					//
						_tmpSingleBtn[i].GetWidth(),  _tmpSingleBtn[i].GetHeight(), true);			//
			}																						//
			MyDrawText(hDC, _tmpSingleBtn[i].GetDisplayText(),										//
				_tmpSingleBtn[i].GetX(), _tmpSingleBtn[i].GetY(), _tmpSingleBtn[i].GetWidth(),		//
				_tmpSingleBtn[i].GetHeight(), TCent);												//
		}																							//
		//------------------------------------------------------------------------------------------//
		SetRect(&rect, _MapSliderVert.left, _MapSliderVert.top, _MapSliderVert.right, _MapSliderVert.bottom);
		//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
		PaintAShadow(hDC, 175, 0, 0, rect);
		SetRect(&rect, _MapSliderHori.left, _MapSliderHori.top, _MapSliderHori.right, _MapSliderHori.bottom);
		//PaintAShadow creates a brush with the colors passed, and fills the rect, then destroys brush - M. White 12 June, 2019
		PaintAShadow(hDC, 175, 0, 0, rect);
		//Paint the slider icons - M. White 28 April, 2019
		_bmpButtons->DrawPart(hDC,
			_MapSliderVert.left - 3,
			_MapSliderVert.top +
				int(((_MapSliderVert.bottom - 12) - _MapSliderVert.top) * float((_TileWalkerY - _MapLimitT) / float(_MapLimitB - _MapLimitT))),
			144, 52, 12, 12, true);//Up-Down
		_bmpButtons->DrawPart(hDC,
			_MapSliderHori.left +
				int(((_MapSliderHori.right - 12) - _MapSliderHori.left) * float((_TileWalkerX - _MapLimitL) / float(_MapLimitR - _MapLimitL))),
			_MapSliderHori.top - 3,
			144, 52, 12, 12, true);//Left-Right
		_paintButtons = false;
	}
	if(_PaintSideBar	== true)
	{
		//Set up the basic background - M. White 11 June, 2019
		SetRect(&rect, _SideBarBackGrnd.left, _SideBarBackGrnd.top, _SideBarBackGrnd.right, _SideBarBackGrnd.bottom);
		InvertedTrimRect(hDC, rect);
		_bmpBGParch->DrawPart(hDC, rect.left, rect.top, 0, 0, rect.right - rect.left, rect.bottom - rect.top, false);
		SetTextColor(hDC, RGB(0, 0, 0));//Default text color - M. White 11 June, 2019
		if		(_edIntLinking		== true)
		{
			//Assigning a Starting Location - M. White 29 July, 2019
			if(_edAssignStartPnt == true && _tmpStartLoc != NULL)
			{
				SetTextColor(hDC, RGB(0, 0, 0));
				MyDrawText(hDC, "Starting Point Assignment", rect.left, rect.top, (rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_OriginMapPrompt());
				temp = "Origin Map";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Display Origin Map Name - M. White 12 June, 2019
				SetTextColor(hDC, RGB(255, 255, 255));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_Name());
				TextBoxTrim(hDC, micro, 1);
				temp = _tmpStartLoc->GetScene();
				for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Display the Coordinates
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_CoordPrompt());
				temp = "Map Coordinates";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitX());
				MyDrawText(hDC, "X:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpStartLoc->GetX());
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitY());
				MyDrawText(hDC, "Y:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpStartLoc->GetY());
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Nick Name - M. White 29 July, 2019
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_DM_Prompt());
				temp = "Display Name";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(255, 255, 255));
				CopyRect(&micro, &_MapLink->GetRectIO_DestMapName());
				TextBoxTrim(hDC, micro, 1);
				if(_tmpStartLoc->GetNickName() == "Assign_Name" && _tmpLS.NickName.length() == 0)
					temp = "Click to Assign";
				else												temp = _tmpLS.NickName;
				for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(255, 242, 0));
				if(_MapLink->buttons[lcSave].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(), 
						_MapLink->buttons[lcSave].GetBmpXAlt(), _MapLink->buttons[lcSave].GetBmpYAlt(),
						_MapLink->buttons[lcSave].GetWidth(),   _MapLink->buttons[lcSave].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
						_MapLink->buttons[lcSave].GetBmpX(),   _MapLink->buttons[lcSave].GetBmpY(),
						_MapLink->buttons[lcSave].GetWidth(),  _MapLink->buttons[lcSave].GetHeight(), true);
				MyDrawText(hDC, "Add Start Point", 
					_MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
					_MapLink->buttons[lcSave].GetWidth(), _MapLink->buttons[lcSave].GetHeight(), TCent);
				if(_MapLink->buttons[lcCancel].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(), 
						_MapLink->buttons[lcCancel].GetBmpXAlt(), _MapLink->buttons[lcCancel].GetBmpYAlt(),
						_MapLink->buttons[lcCancel].GetWidth(),   _MapLink->buttons[lcCancel].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
						_MapLink->buttons[lcCancel].GetBmpX(),   _MapLink->buttons[lcCancel].GetBmpY(),
						_MapLink->buttons[lcCancel].GetWidth(),  _MapLink->buttons[lcCancel].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcCancel].GetDisplayText(), 
					_MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
					_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), TCent);
			}
			else
			{
				//Display Link Index in case the person is reviewing previous links - M. White 12 June, 2019
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_LinkIndex());
				temp = "Internal Link - Number: ";
				if(_MapLink->NumInternalLinks > 0)	sprintf(tmpTxt, "%d", _MapLink->CurIndex);
				else								sprintf(tmpTxt, "0");
				temp += tmpTxt;
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_OriginMapPrompt());
				temp = "Origin Map";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Display Origin Map Name - M. White 12 June, 2019
				SetTextColor(hDC, RGB(255, 255, 255));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_Name());
				TextBoxTrim(hDC, micro, 1);
				temp = _MapLink->GetStrMOI();
				for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//Display the Origin Map's Exit Coordinates
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_CoordPrompt());
				temp = "Origin Map Coordinates";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitX());
				MyDrawText(hDC, "X:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.exitX);
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitY());
				MyDrawText(hDC, "Y:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.exitY);
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_DM_Prompt());
				temp = "Destination Map";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(255, 255, 255));
				CopyRect(&micro, &_MapLink->GetRectIO_DestMapName());
				TextBoxTrim(hDC, micro, 1);
				if(_tmpLS.DestinationMapName == "No_Map_Selected")	temp = "Click to Pick Destination Map";
				else												temp = _tmpLS.DestinationMapName;
				for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_DestCoordPrompt());
				temp = "Destination Map Coordinates";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				CopyRect(&micro, &_MapLink->GetRectOP_Dest_EnterX());
				MyDrawText(hDC, "X:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.destX);
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_Dest_EnterY());
				MyDrawText(hDC, "Y:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
				SetTextColor(hDC, RGB(255, 255, 255));
				TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.destY);
				MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(0, 0, 0));
				CopyRect(&micro, &_MapLink->GetRectOP_DestNickPrompt());
				temp = "Destination Nick Name";
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				SetTextColor(hDC, RGB(255, 255, 255));
				CopyRect(&micro, &_MapLink->GetRectIO_DestNickName());
				TextBoxTrim(hDC, micro, 1);
				if(_tmpLS.NickName == "")		temp = "Click to Assign Nick Name";
				else							temp = _tmpLS.NickName;
				for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
				MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
				//lcWorld = 0, lcScene, lcContinue, lcCancel, lcSave, lcInternalLinks, lcOpen, lcContinueTwo, lcLinksLeft, lcLinksRight, MAX_LCs
				//Buttons
				SetTextColor(hDC, RGB(255, 242, 0));
				if(_MapLink->buttons[lcSave].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(), 
						_MapLink->buttons[lcSave].GetBmpXAlt(), _MapLink->buttons[lcSave].GetBmpYAlt(),
						_MapLink->buttons[lcSave].GetWidth(),   _MapLink->buttons[lcSave].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
						_MapLink->buttons[lcSave].GetBmpX(),   _MapLink->buttons[lcSave].GetBmpY(),
						_MapLink->buttons[lcSave].GetWidth(),  _MapLink->buttons[lcSave].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcSave].GetDisplayText(), 
					_MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
					_MapLink->buttons[lcSave].GetWidth(), _MapLink->buttons[lcSave].GetHeight(), TCent);

				if(_MapLink->buttons[lcPaths].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(), 
						_MapLink->buttons[lcPaths].GetBmpXAlt(), _MapLink->buttons[lcPaths].GetBmpYAlt(),
						_MapLink->buttons[lcPaths].GetWidth(),   _MapLink->buttons[lcPaths].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(),
						_MapLink->buttons[lcPaths].GetBmpX(),   _MapLink->buttons[lcPaths].GetBmpY(),
						_MapLink->buttons[lcPaths].GetWidth(),  _MapLink->buttons[lcPaths].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcPaths].GetDisplayText(), 
					_MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(),
					_MapLink->buttons[lcPaths].GetWidth(), _MapLink->buttons[lcPaths].GetHeight(), TCent);

				if(_MapLink->buttons[lcCancel].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(), 
						_MapLink->buttons[lcCancel].GetBmpXAlt(), _MapLink->buttons[lcCancel].GetBmpYAlt(),
						_MapLink->buttons[lcCancel].GetWidth(),   _MapLink->buttons[lcCancel].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
						_MapLink->buttons[lcCancel].GetBmpX(),   _MapLink->buttons[lcCancel].GetBmpY(),
						_MapLink->buttons[lcCancel].GetWidth(),  _MapLink->buttons[lcCancel].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcCancel].GetDisplayText(), 
					_MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
					_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), TCent);


				if(_MapLink->buttons[lcLinksLeft].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksLeft].GetX(), _MapLink->buttons[lcLinksLeft].GetY(), 
						_MapLink->buttons[lcLinksLeft].GetBmpXAlt(), _MapLink->buttons[lcLinksLeft].GetBmpYAlt(),
						_MapLink->buttons[lcLinksLeft].GetWidth(),   _MapLink->buttons[lcLinksLeft].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksLeft].GetX(), _MapLink->buttons[lcLinksLeft].GetY(),
						_MapLink->buttons[lcLinksLeft].GetBmpX(),   _MapLink->buttons[lcLinksLeft].GetBmpY(),
						_MapLink->buttons[lcLinksLeft].GetWidth(),  _MapLink->buttons[lcLinksLeft].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcLinksLeft].GetDisplayText(), 
					_MapLink->buttons[lcLinksLeft].GetX(),		_MapLink->buttons[lcLinksLeft].GetY(),
					_MapLink->buttons[lcLinksLeft].GetWidth(),	_MapLink->buttons[lcLinksLeft].GetHeight(), TCent);
					
				if(_MapLink->buttons[lcLinksRight].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksRight].GetX(), _MapLink->buttons[lcLinksRight].GetY(), 
						_MapLink->buttons[lcLinksRight].GetBmpXAlt(), _MapLink->buttons[lcLinksRight].GetBmpYAlt(),
						_MapLink->buttons[lcLinksRight].GetWidth(),   _MapLink->buttons[lcLinksRight].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksRight].GetX(), _MapLink->buttons[lcLinksRight].GetY(),
						_MapLink->buttons[lcLinksRight].GetBmpX(),   _MapLink->buttons[lcLinksRight].GetBmpY(),
						_MapLink->buttons[lcLinksRight].GetWidth(),  _MapLink->buttons[lcLinksRight].GetHeight(), true);
				MyDrawText(hDC, _MapLink->buttons[lcCancel].GetDisplayText(), 
					_MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
					_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), TCent);

				//Horizontal Target Bar for User Clicking - M. White 16 June, 2019
				CopyRect(&micro, &_MapLink->GetRectHorClickRegion());
				PaintAShadow(hDC, 175, 0, 0, micro);
				//Paint icon showing a location in the index - M. White 25 June, 2019
				if(_MapLink->NumInternalLinks > 1)
				{
					switch(_MonitorCat)
					{
					case 2:
						_bmpButtons->DrawPart(hDC,
							micro.left - 4 + //-4 offsets most of width of icon, not -6 because of overlap
								int(((micro.right - 2) - (micro.left + 2)) * //Width of bar fractioned by...(-2 for little play room)
									(_MapLink->CurIndex / double(_MapLink->NumInternalLinks - 1))),//percentage of index...
							micro.top + int((micro.bottom - micro.top) * 0.50) - 6,
							170, 78, 15, 15, true);
						break;
					case 1:
						_bmpButtons->DrawPart(hDC,
							micro.left - 4 + //-4 offsets most of width of icon, not -6 because of overlap
								int(((micro.right - 2) - (micro.left + 2)) * //Width of bar fractioned by...(-2 for little play room)
									(_MapLink->CurIndex / double(_MapLink->NumInternalLinks - 1))),//percentage of index...
							micro.top + int((micro.bottom - micro.top) * 0.50) - 6,
							132, 52, 12, 12, true);
						break;
					case 0:
						_bmpButtons->DrawPart(hDC,
							micro.left - 4 + //-4 offsets most of width of icon, not -6 because of overlap
								int(((micro.right - 2) - (micro.left + 2)) * //Width of bar fractioned by...(-2 for little play room)
									(_MapLink->CurIndex / double(_MapLink->NumInternalLinks - 1))),//percentage of index...
							micro.top + int((micro.bottom - micro.top) * 0.50) - 6,
							70, 24, 7, 7, true);
						break;
					};
				}
			}
		}
		else if	(_edPathAssignmens	== true)
		{
			//Display Title - M. White 01 August, 2019
			SetTextColor(hDC, RGB(0, 0, 0));
			temp = "Path Creation";
			MyDrawText(hDC, temp, _SideBarBackGrnd.left, _SideBarBackGrnd.top, 
				(_SideBarBackGrnd.right - _SideBarBackGrnd.left), _bmpTrimmed->GetHeight(), TCent);
			//Paint a background for the list of paths made...
			SetRect(&rect,
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.04), 
				_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06), 
				_SideBarBackGrnd.left + int((_SideBarBackGrnd.right  - _SideBarBackGrnd.left) * 0.96), 
				_SideBarBackGrnd.top  + int((_SideBarBackGrnd.bottom - _SideBarBackGrnd.top)  * 0.06) + 
					(_bmpTrimmed->GetHeight() * 11));
			ThinTrimBox(hDC, rect, 190, 190, 190);
			//Create a mouse shadow
			if		(_XMouse >= rect.left && _XMouse < rect.right - 5 && _YMouse >= rect.top  && _YMouse < rect.bottom)
			{
				SetRect(&_ShadowRect,
					rect.left,
					rect.top + (VRD(rect.top, _YMouse, _bmpTrimmed->GetHeight()) * _bmpTrimmed->GetHeight()),
					rect.right,
					rect.top + (VRD(rect.top, _YMouse, _bmpTrimmed->GetHeight()) * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
				hB = CreateSolidBrush(RGB(255, 242, 0));
				FillRect(hDC, &_ShadowRect, hB);
				DeleteObject(hB);
			}
			else if	(_SideBarMenuIndex > -1)
			{
				SetRect(&_ShadowRect,
					rect.left,
					rect.top + ((_SideBarMenuIndex - _ScrollIndex) * _bmpTrimmed->GetHeight()),
					rect.right,
					rect.top + ((_SideBarMenuIndex - _ScrollIndex) * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
					hB = CreateSolidBrush(RGB(255, 242, 0));
					FillRect(hDC, &_ShadowRect, hB);
					DeleteObject(hB);
			}
			//Paint the Names of the Paths currently being held (other than working path)
			if(_MapPaths != NULL)
			{
				if(_NumPathsOnMap >= 2)
				{
					for(i = 0; i <= 20; i += 2)
					{
						if((i + _ScrollIndex) < (_NumPathsOnMap - 1))
						{
							temp = _MapPaths[i + _ScrollIndex].GetName();
							for(x = 0; x < int(temp.length()); x++) if(temp[x] == '_') temp[x] = ' ';
							MyDrawText(hDC, temp, rect.left + 5, rect.top + 2 + (int(i / 2) * _bmpTrimmed->GetHeight()),
								(rect.right - rect.left - 10), _bmpTrimmed->GetHeight(), TLeft);
							sprintf(tmpTxt, "%d", _MapPaths[i + _ScrollIndex].Path.GetLength());
							MyDrawText(hDC, tmpTxt, 
								rect.left + int((rect.right - rect.left) / 2), 
								rect.top + 2 + (int(i / 2) * _bmpTrimmed->GetHeight()),
								int((rect.right - rect.left - 10) * 0.50), _bmpTrimmed->GetHeight(), TRight);
						}
					}
				}
			}
		/*
			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_OriginMapPrompt());
			temp = "Origin Map";
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			//Display Origin Map Name - M. White 12 June, 2019
			SetTextColor(hDC, RGB(255, 255, 255));
			CopyRect(&micro, &_MapLink->GetRectOP_MOI_Name());
			TextBoxTrim(hDC, micro, 1);
			temp = _MapLink->GetStrMOI();
			for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			//Display the Origin Map's Exit Coordinates
			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_MOI_CoordPrompt());
			temp = "Origin Map Coordinates";
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitX());
			MyDrawText(hDC, "X:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
			SetTextColor(hDC, RGB(255, 255, 255));
			TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.exitX);
			MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_MOI_ExitY());
			MyDrawText(hDC, "Y:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
			SetTextColor(hDC, RGB(255, 255, 255));
			TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.exitY);
			MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_DM_Prompt());
			temp = "Destination Map";
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(255, 255, 255));
			CopyRect(&micro, &_MapLink->GetRectIO_DestMapName());
			TextBoxTrim(hDC, micro, 1);
			if(_tmpLS.DestinationMapName == "No_Map_Selected")	temp = "Click to Pick Destination Map";
			else												temp = _tmpLS.DestinationMapName;
			for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_DestCoordPrompt());
			temp = "Destination Map Coordinates";
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			CopyRect(&micro, &_MapLink->GetRectOP_Dest_EnterX());
			MyDrawText(hDC, "X:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
			SetTextColor(hDC, RGB(255, 255, 255));
			TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.destX);
			MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_Dest_EnterY());
			MyDrawText(hDC, "Y:", micro.left - int((micro.right - micro.left) * 0.40), micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TLeft);
			SetTextColor(hDC, RGB(255, 255, 255));
			TextBoxTrim(hDC, micro, 1); sprintf(tmpTxt, "%d", _tmpLS.destY);
			MyDrawText(hDC, tmpTxt, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(0, 0, 0));
			CopyRect(&micro, &_MapLink->GetRectOP_DestNickPrompt());
			temp = "Destination Nick Name";
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);

			SetTextColor(hDC, RGB(255, 255, 255));
			CopyRect(&micro, &_MapLink->GetRectIO_DestNickName());
			TextBoxTrim(hDC, micro, 1);
			if(_tmpLS.NickName == "")		temp = "Click to Assign Nick Name";
			else							temp = _tmpLS.NickName;
			for(i = 0; i < int(temp.length()); i++) if(temp[i] == '_') temp[i] = ' ';
			MyDrawText(hDC, temp, micro.left, micro.top, (micro.right - micro.left) - 1, _bmpTrimmed->GetHeight(), TCent);
		*/
			SetTextColor(hDC, RGB(255, 242, 0));
			//Finalizing Button
			if(_MapLink->buttons[lcSave].DidItHit(_XMouse, _YMouse) == true)
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(), 
					_MapLink->buttons[lcSave].GetBmpXAlt(), _MapLink->buttons[lcSave].GetBmpYAlt(),
					_MapLink->buttons[lcSave].GetWidth(),   _MapLink->buttons[lcSave].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
					_MapLink->buttons[lcSave].GetBmpX(),   _MapLink->buttons[lcSave].GetBmpY(),
					_MapLink->buttons[lcSave].GetWidth(),  _MapLink->buttons[lcSave].GetHeight(), true);
			MyDrawText(hDC, _MapLink->buttons[lcSave].GetDisplayText(), 
				_MapLink->buttons[lcSave].GetX(), _MapLink->buttons[lcSave].GetY(),
				_MapLink->buttons[lcSave].GetWidth(), _MapLink->buttons[lcSave].GetHeight(), TCent);
			//Return button
			if(_MapLink->buttons[lcPaths].DidItHit(_XMouse, _YMouse) == true)
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(), 
					_MapLink->buttons[lcPaths].GetBmpXAlt(), _MapLink->buttons[lcPaths].GetBmpYAlt(),
					_MapLink->buttons[lcPaths].GetWidth(),   _MapLink->buttons[lcPaths].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(),
					_MapLink->buttons[lcPaths].GetBmpX(),   _MapLink->buttons[lcPaths].GetBmpY(),
					_MapLink->buttons[lcPaths].GetWidth(),  _MapLink->buttons[lcPaths].GetHeight(), true);
			MyDrawText(hDC, _MapLink->buttons[lcPaths].GetDisplayText(), 
				_MapLink->buttons[lcPaths].GetX(), _MapLink->buttons[lcPaths].GetY(),
				_MapLink->buttons[lcPaths].GetWidth(), _MapLink->buttons[lcPaths].GetHeight(), TCent);
			/*
			if(_MapLink->buttons[lcCancel].DidItHit(_XMouse, _YMouse) == true)
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(), 
					_MapLink->buttons[lcCancel].GetBmpXAlt(), _MapLink->buttons[lcCancel].GetBmpYAlt(),
					_MapLink->buttons[lcCancel].GetWidth(),   _MapLink->buttons[lcCancel].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
					_MapLink->buttons[lcCancel].GetBmpX(),   _MapLink->buttons[lcCancel].GetBmpY(),
					_MapLink->buttons[lcCancel].GetWidth(),  _MapLink->buttons[lcCancel].GetHeight(), true);
			MyDrawText(hDC, _MapLink->buttons[lcCancel].GetDisplayText(), 
				_MapLink->buttons[lcCancel].GetX(), _MapLink->buttons[lcCancel].GetY(),
				_MapLink->buttons[lcCancel].GetWidth(), _MapLink->buttons[lcCancel].GetHeight(), TCent);
			*/
			//Up / Down arrows
			if(_MapLink->buttons[lcLinksLeft].DidItHit(_XMouse, _YMouse) == true)
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksLeft].GetX(), _MapLink->buttons[lcLinksLeft].GetY(), 
					_MapLink->buttons[lcLinksLeft].GetBmpXAlt(), _MapLink->buttons[lcLinksLeft].GetBmpYAlt(),
					_MapLink->buttons[lcLinksLeft].GetWidth(),   _MapLink->buttons[lcLinksLeft].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksLeft].GetX(), _MapLink->buttons[lcLinksLeft].GetY(),
					_MapLink->buttons[lcLinksLeft].GetBmpX(),   _MapLink->buttons[lcLinksLeft].GetBmpY(),
					_MapLink->buttons[lcLinksLeft].GetWidth(),  _MapLink->buttons[lcLinksLeft].GetHeight(), true);
					
			if(_MapLink->buttons[lcLinksRight].DidItHit(_XMouse, _YMouse) == true)
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksRight].GetX(), _MapLink->buttons[lcLinksRight].GetY(), 
					_MapLink->buttons[lcLinksRight].GetBmpXAlt(), _MapLink->buttons[lcLinksRight].GetBmpYAlt(),
					_MapLink->buttons[lcLinksRight].GetWidth(),   _MapLink->buttons[lcLinksRight].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _MapLink->buttons[lcLinksRight].GetX(), _MapLink->buttons[lcLinksRight].GetY(),
					_MapLink->buttons[lcLinksRight].GetBmpX(),   _MapLink->buttons[lcLinksRight].GetBmpY(),
					_MapLink->buttons[lcLinksRight].GetWidth(),  _MapLink->buttons[lcLinksRight].GetHeight(), true);
		}
		else
		{
			if		(_edEditingWorld	== true)
			{
				switch(_SideBarMenuIndex)
				{
				case edMC_Cities:
					//We must test for this because when User first enters the Editor, the default setting is for Cities, and
					//it looks bad while they're setting up - M. White 12 May, 2019
					if(_edEditingWorld	== true || _edEditingScene	== true)
					{
						if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5) && _YMouse <= rect.bottom)
						{
							if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < MAX_PopCenters)
							{
								SetRect(&_ShadowRect,
									rect.left,
									rect.top + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()),
									rect.right,
									rect.top + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
								hB = CreateSolidBrush(RGB(255, 242, 0));
								FillRect(hDC, &_ShadowRect, hB);
								DeleteObject(hB);
							}
						}
						for(i = 0; i < MAX_PopCenters; i++)
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, 
								rect.left + 5,														// X
								rect.top  + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),			// Y
								(i * _PlayWin[_MAPVIEW].GetTileW()),
								(_PlayWin[_MAPVIEW].GetTileH() * 3),//City icons are in Tiles bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(),
								_PlayWin[_MAPVIEW].GetTileH(), true);
							MyDrawText(hDC, GetCityString(i),
								rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
								rect.top + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),
								(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5),
								_PlayWin[_MAPVIEW].GetTileH(),
								TLeft);
						}
						if(_EditingTarget1 > -1)
						{
							hB = CreateSolidBrush(RGB(255, 255, 255));
							FillRect(hDC, &_MiniWindow, hB);
							DeleteObject(hB);
							InvertedTrimRect(hDC, _MiniWindow);
							_bmpTiles[_MAPVIEW].DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()),
								(_PlayWin[_MAPVIEW].GetTileH() * 3),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(),
								true);
						}
					}
					break;
				case edMC_Coastal:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5) && _YMouse <= rect.bottom)
					{
						if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < 9)
						{
							x = int((_XMouse - rect.left) / int((rect.right - rect.left) * 0.33));
							SetRect(&_ShadowRect,
								rect.left + 2 + (x * int((rect.right - rect.left) * 0.33)),
								rect.top  + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()),
								rect.left + 2 + (x * int((rect.right - rect.left) * 0.33)) + int((rect.right - rect.left) * 0.33),
								rect.top  + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
							hB = CreateSolidBrush(RGB(255, 242, 0));
							FillRect(hDC, &_ShadowRect, hB);
							DeleteObject(hB);
						}
					}
					for(i = _ScrollIndex; i < (_ScrollIndex + 9); i++)
					{
						//Deep Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top  + 5 + ((i - _ScrollIndex) * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), 	_PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Deep";
						MyDrawText(hDC, temp, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top  + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())) + _bmpTrimmed->GetHeight(),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
						//Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.33) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex)  * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()),
							_PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.33) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())),
							int((rect.right - rect.left) * 0.33), _bmpTrimmed->GetHeight(), TCent);
						//Shallow Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex)  * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 2), 
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Shallow";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())),
							int((rect.right - rect.left) * 0.33), _bmpTrimmed->GetHeight(), TCent);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())) + _bmpTrimmed->GetHeight(),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(255, 255, 255)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * _EditingTarget2),
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_Forests:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5)  && _YMouse <= rect.bottom)
					{
						if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < MAX_Forests - 1)
						{
							SetRect(&_ShadowRect,
								rect.left,
								rect.top + 5 + (VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()),
								rect.right,
								rect.top + 5 + (VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
							//Create, Fill, and Destroy a brush - M. White 11 June, 2019
							hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
						}
					}
					for(i = 0; i < MAX_Forests; i++)
					{
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							rect.left + 5, rect.top  + 5 + (i * _PlayWin[_MAPVIEW].GetTileH()),				// X, Y
							(i * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH() * 4,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						MyDrawText(hDC, GetForestString(i),
							rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
							rect.top  + 5 + (i * _PlayWin[_MAPVIEW].GetTileH()),
							(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5), _PlayWin[_MAPVIEW].GetTileH(), TLeft);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH() * 4,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_RiverRoads:
					if(_XMouse >= rect.left       && _XMouse <= rect.right - 6 &&
					   _YMouse >= (rect.top + 5)  && _YMouse <= ((rect.top + 5) + (_PlayWin[_MAPVIEW].GetTileH() * 10) - 1))
					{
						if(_XMouse < rect.left + int((rect.right - rect.left) * 0.50))
						{
							SetRect(&_ShadowRect,
								rect.left,
								rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()),
								rect.left + int((rect.right - rect.left) * 0.50),
								rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
						}
						else
						{
							SetRect(&_ShadowRect,
								rect.left + int((rect.right - rect.left) * 0.50),
								rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()),
								rect.right,
								rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
						}
						hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
					}
					for(i = _ScrollIndex; i < (_ScrollIndex + 10); i++)
					{
						//Left Side for Rivers - M. White 12 May, 2019
						_bmpRiverRoads->DrawPart(hDC, 
							rect.left + 
								int(int((rect.right - rect.left) * 0.50) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex) * _PlayWin[_MAPVIEW].GetTileH()),
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,// <-- Staying at top of Bitmap - M. White 12 May, 2019
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						//Right Side for Roads - M. White 12 May, 2019
						_bmpRiverRoads->DrawPart(hDC, 
							rect.left + 
								int((rect.right - rect.left) * 0.50) + 
								int(int((rect.right - rect.left) * 0.50) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex) * _PlayWin[_MAPVIEW].GetTileH()),
							(i * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH(),// <-- Reaching to lower half of Bitmap - M. White 12 May, 2019
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						//88 represents the number of images associated with River icons...
						//This test will look for Roads instead - M. White 12 May, 2019
						//TODO - Create a veriable that will divide the road _bmp to determine
						//this integer on startup along with the other graphics - M. White 24 May, 2019
						if(_EditingTarget1 > 87)
							_bmpRiverRoads->DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								//-88 because that is how many River pieces there are - M. White 12 May, 2019
								((_EditingTarget1 - 87) * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH(),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						else
							_bmpRiverRoads->DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), 0, //Rivers are at the top of the Bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_Terrain:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= rect.top && _YMouse <= rect.bottom)
					{
						if(VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < (MAX_TERRAIN - 2))
						{
							SetRect(&_ShadowRect,
								rect.left,
								rect.top + 5 + (VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()),
								rect.right,
								rect.top + 5 + (VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
							hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
						}
					}
					for(i = 0; i < MAX_TERRAIN - 2; i++)
					{
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							rect.left + 5, rect.top  + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),	//X-Y coordinates destination
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,										//X-Y coordinates source
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);		//Width and Height
						//Generically calling for a String associated with type - M. White 24 May, 2019
						MyDrawText(hDC, GetTerrainString(i),
							rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
							rect.top + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),
							(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5), _PlayWin[_MAPVIEW].GetTileH(), TLeft);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175));
						FillRect(hDC, &_MiniWindow, hB);
						DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					if(_Dispersion == true)
					{
						_bmpDispersionImg->DrawPart(hDC,
							_SideBarBackGrnd.left + int((_MiniWindow.left - _SideBarBackGrnd.left) / 2) - 20,
							_MiniWindow.bottom - 44,  0, 42, 40, 42, true);
						_bmpDispersionImg->DrawPart(hDC,
							_MiniWindow.right + int((_SideBarBackGrnd.right - _MiniWindow.right) / 2) - 20,
							_MiniWindow.bottom - 44, 40, 42, 40, 42, true);
					}
					else
					{
						_bmpDispersionImg->DrawPart(hDC,
							_SideBarBackGrnd.left + int((_MiniWindow.left - _SideBarBackGrnd.left) / 2) - 20,
							_MiniWindow.bottom - 44,  0, 0, 40, 42, true);
						_bmpDispersionImg->DrawPart(hDC,
							_MiniWindow.right + int((_SideBarBackGrnd.right - _MiniWindow.right) / 2) - 20,
							_MiniWindow.bottom - 44, 40, 0, 40, 42, true);
					}
					break;
				};
			}
			else if	(_edEditingScene	== true)
			{
				switch(_SideBarMenuIndex)
				{
				case edMC_Cities:
					//We must test for this because when User first enters the Editor, the default setting is for Cities, and
					//it looks bad while they're setting up - M. White 12 May, 2019
					if(_edEditingWorld	== true || _edEditingScene	== true)
					{
						if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5) && _YMouse <= rect.bottom)
						{
							if(_edOpenMapCategory == false)
							{
								if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < MAX_PopCenters)
								{
									SetRect(&_ShadowRect,
										rect.left,
										rect.top + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()),
										rect.right,
										rect.top + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
									hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
								}
							}
						}
						for(i = 0; i < MAX_PopCenters; i++)
						{
							_bmpTiles[_MAPVIEW].DrawPart(hDC, 
								rect.left + 5,														// X
								rect.top  + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),	// Y
								(i * _PlayWin[_MAPVIEW].GetTileW()),
								(_PlayWin[_MAPVIEW].GetTileH() * 3),//City icons are in Tiles bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							MyDrawText(hDC, GetCityString(i),
								rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
								rect.top + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),
								(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5), _PlayWin[_MAPVIEW].GetTileH(), TLeft);
						}
						if(_EditingTarget1 > -1)
						{
							hB = CreateSolidBrush(RGB(255, 255, 255)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
							InvertedTrimRect(hDC, _MiniWindow);
							_bmpTiles[_MAPVIEW].DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 3),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						}
					}
					break;
				case edMC_Coastal:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5) && _YMouse <= rect.bottom)
					{
						if(_edOpenMapCategory == false)
						{
							if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < 9)
							{
								x = int((_XMouse - rect.left) / int((rect.right - rect.left) * 0.33));
								SetRect(&_ShadowRect,
									rect.left + 2 + (x * int((rect.right - rect.left) * 0.33)),
									rect.top  + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()),
									rect.left + 2 + (x * int((rect.right - rect.left) * 0.33)) + int((rect.right - rect.left) * 0.33),
									rect.top  + 5 + VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * int(_PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
								hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
							}
						}
					}
					for(i = _ScrollIndex; i < (_ScrollIndex + 9); i++)
					{
						//Deep Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top  + 5 + ((i - _ScrollIndex) * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Deep";
						MyDrawText(hDC, temp, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top  + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + int(int((rect.right - rect.left) * 0.33) / 2) - int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())) + _bmpTrimmed->GetHeight(),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
						//Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.33) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex)  * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH(),
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.33) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())), 
							int((rect.right - rect.left) * 0.33), _bmpTrimmed->GetHeight(), TCent);
						//Shallow Ocean
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex)  * int(_PlayWin[_MAPVIEW].GetTileH())),
							(i * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 2),
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						temp = "Shallow";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())),
							int((rect.right - rect.left) * 0.33), _bmpTrimmed->GetHeight(), TCent);
						temp = "Ocean";
						MyDrawText(hDC, temp, 
							rect.left + 2 + 
								int((rect.right - rect.left) * 0.66) + int(int((rect.right - rect.left) * 0.33) / 2) - 
								int(int((rect.right - rect.left) * 0.33) / 2),
							rect.top + 5 + (9 * int(_PlayWin[_MAPVIEW].GetTileH())) + _bmpTrimmed->GetHeight(),
							int((rect.right - rect.left) * 0.33),
							_bmpTrimmed->GetHeight(), TCent);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(255, 255, 255)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpCoastalImgs[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()),
							(_PlayWin[_MAPVIEW].GetTileH() * _EditingTarget2),
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_Forests:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= (rect.top + 5) && _YMouse <= rect.bottom)
					{
						if(_edOpenMapCategory == false)
						{
							if(VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < MAX_Forests - 1)
							{
								SetRect(&_ShadowRect,
									rect.left,
									rect.top + 5 + (VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()),
									rect.right,
									rect.top + 5 + (VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
								hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
							}
						}
					}
					for(i = 0; i < MAX_Forests; i++)
					{
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							rect.left + 5,														// X
							rect.top  + 5 + (i * _PlayWin[_MAPVIEW].GetTileH()),				// Y
							(i * _PlayWin[_MAPVIEW].GetTileW()),
							_PlayWin[_MAPVIEW].GetTileH() * 4,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						MyDrawText(hDC, GetForestString(i),
							rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
							rect.top  + 5 + (i * _PlayWin[_MAPVIEW].GetTileH()),
							(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5), _PlayWin[_MAPVIEW].GetTileH(), TLeft);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH() * 4,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_RiverRoads:
					if(_XMouse >= rect.left       && _XMouse <= rect.right - 6 &&
					   _YMouse >= (rect.top + 5)  && _YMouse <= ((rect.top + 5) + (_PlayWin[_MAPVIEW].GetTileH() * 10) - 1))
					{
						if(_edOpenMapCategory == false)
						{
							if(_XMouse < rect.left + int((rect.right - rect.left) * 0.50))
							{
								SetRect(&_ShadowRect,
									rect.left,
									rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()),
									rect.left + int((rect.right - rect.left) * 0.50),
									rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
							}
							else
							{
								SetRect(&_ShadowRect,
									rect.left + int((rect.right - rect.left) * 0.50),
									rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()),
									rect.right,
									rect.top  + 5 + ((VRD((rect.top + 5), _YMouse, _PlayWin[_MAPVIEW].GetTileH())) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
							}
							hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
						}
					}
					for(i = _ScrollIndex; i < (_ScrollIndex + 10); i++)
					{
						//Left Side for Rivers - M. White 12 May, 2019
						_bmpRiverRoads->DrawPart(hDC, 
							rect.left + int(int((rect.right - rect.left) * 0.50) / 2) - 
								int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex) * _PlayWin[_MAPVIEW].GetTileH()),
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,// <-- Staying at top of Bitmap - M. White 12 May, 2019
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						//Right Side for Roads - M. White 12 May, 2019
						_bmpRiverRoads->DrawPart(hDC, 
							rect.left + int((rect.right - rect.left) * 0.50) + 
								int(int((rect.right - rect.left) * 0.50) / 2) - int(_PlayWin[_MAPVIEW].GetTileW() / 2),
							rect.top + 5 + ((i - _ScrollIndex) * _PlayWin[_MAPVIEW].GetTileH()),
							(i * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH(),// <-- Reaching to lower half of Bitmap - M. White 12 May, 2019
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						//88 represents the number of images associated with River icons...
						//This test will look for Roads instead - M. White 12 May, 2019
						//TODO - Create a veriable that will divide the road _bmp to determine
						//this integer on startup along with the other graphics - M. White 24 May, 2019
						if(_EditingTarget1 > 87)
							_bmpRiverRoads->DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								//-88 because that is how many River pieces there are - M. White 12 May, 2019
								((_EditingTarget1 - 87) * _PlayWin[_MAPVIEW].GetTileW()), _PlayWin[_MAPVIEW].GetTileH(),
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
						else
							_bmpRiverRoads->DrawPart(hDC, 
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), 0, //Rivers are at the top of the Bitmap - M. White 12 May, 2019
								_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					break;
				case edMC_Terrain:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 && _YMouse >= rect.top  && _YMouse <= rect.bottom)
					{
						if(_edOpenMapCategory == false)
						{
							if(VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < (MAX_TERRAIN - 2))
							{
								SetRect(&_ShadowRect,
									rect.left,
									rect.top + 5 + (VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()),
									rect.right,
									rect.top + 5 + (VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) * _PlayWin[_MAPVIEW].GetTileH()) + _PlayWin[_MAPVIEW].GetTileH());
								hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
							}
						}
					}
					for(i = 0; i < MAX_TERRAIN - 2; i++)
					{
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							rect.left + 5, rect.top  + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),	//X-Y coordinates destination
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,										//X-Y coordinates source
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);		//Width and Height
						//Generically calling for a String associated with type - M. White 24 May, 2019
						MyDrawText(hDC, GetTerrainString(i),
							rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5,
							rect.top + 5 + (i * int(_PlayWin[_MAPVIEW].GetTileH())),
							(rect.right - rect.left + 5 + _PlayWin[_MAPVIEW].GetTileW() + 5), _PlayWin[_MAPVIEW].GetTileH(), TLeft);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					else
					{
						hB = CreateSolidBrush(RGB(175, 175, 175));
						FillRect(hDC, &_MiniWindow, hB);
						DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_bmpTiles[_MAPVIEW].DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2,
							(11 * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					}
					if(_Dispersion == true)
					{
						_bmpDispersionImg->DrawPart(hDC,
							_SideBarBackGrnd.left + int((_MiniWindow.left - _SideBarBackGrnd.left) / 2) - 20,
							_MiniWindow.bottom - 44,  0, 42, 40, 42, true);
						_bmpDispersionImg->DrawPart(hDC,
							_MiniWindow.right + int((_SideBarBackGrnd.right - _MiniWindow.right) / 2) - 20,
							_MiniWindow.bottom - 44, 40, 42, 40, 42, true);
					}
					else
					{
						_bmpDispersionImg->DrawPart(hDC,
							_SideBarBackGrnd.left + int((_MiniWindow.left - _SideBarBackGrnd.left) / 2) - 20,
							_MiniWindow.bottom - 44,  0, 0, 40, 42, true);
						_bmpDispersionImg->DrawPart(hDC,
							_MiniWindow.right + int((_SideBarBackGrnd.right - _MiniWindow.right) / 2) - 20,
							_MiniWindow.bottom - 44, 40, 0, 40, 42, true);
					}
					break;
				case edMC_walls001:
					if(_XMouse >= rect.left && _XMouse <= rect.right - 6 &&
						//...* 7 here because the display shows only 7 versions, and then plus a tile to achieve "bottom" of image  - M. White 7 June, 2019
					   _YMouse >= rect.top  && _YMouse <= (rect.top + (int(_PlayWin[_MAPVIEW].GetTileH() * 1.50) * 7)))
					{
						if(_edOpenMapCategory == false)
						{
							if(VRD(rect.top + 5, _YMouse, _PlayWin[_MAPVIEW].GetTileH()) < (MAX_TERRAIN - 2))
							{
								//Creating the shadow so that it fits the dimensions of the "base" on the tile...the 
								//walls will extend above separately - M. White 7 June, 2019
								SetRect(&_ShadowRect,
									rect.left,
									rect.top + 5 + (VRD(rect.top + 5, _YMouse, int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/)) * int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/)),
									rect.right,
									rect.top + 5 + (VRD(rect.top + 5, _YMouse, int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/)) * int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/)) + int(_PlayWin[_MAPVIEW].GetTileH()/* * 1.50*/));
								hB = CreateSolidBrush(RGB(255, 242, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
							}
						}
					}
					/*
					for(i = _ScrollIndex; i < (_ScrollIndex + 7); i++)
					{
						//Left Side for Rivers - M. White 12 May, 2019
						_walls002->DrawPart(hDC, 
							rect.left + 
								int((rect.right - rect.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							rect.top + 5 + ((i - _ScrollIndex) * int(_PlayWin[_MAPVIEW].GetTileH() * 1.50)),
							(i * _PlayWin[_MAPVIEW].GetTileW()), 0,// <-- Staying at top of Bitmap - M. White 12 May, 2019
							_PlayWin[_MAPVIEW].GetTileW(), int(_PlayWin[_MAPVIEW].GetTileH() * 1.50), true);
					}
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);
						_walls002->DrawPart(hDC, 
							_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
							_MiniWindow.top + 2 - int(_PlayWin[_MAPVIEW].GetTileH() * 0.50),
							(_EditingTarget1 * _PlayWin[_MAPVIEW].GetTileW()), 0,
							_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH() + int(_PlayWin[_MAPVIEW].GetTileH() * 0.50), true);
					}
					*/

					//TEMPORARY WALL VERSION - next game version change back to advanced wall graphics
					_bmpTiles[_MAPVIEW].DrawPart(hDC, 
						rect.left + int((rect.right - rect.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50), 
						rect.top  + 5 + (_PlayWin[_MAPVIEW].GetTileH() * 0),
						(13 * _PlayWin[_MAPVIEW].GetTileW()),
						(_PlayWin[_MAPVIEW].GetTileH() * 0),
						_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					_bmpTiles[_MAPVIEW].DrawPart(hDC,
						rect.left + int((rect.right - rect.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50), 
						rect.top  + 5 + (_PlayWin[_MAPVIEW].GetTileH() * 1),
						(13 * _PlayWin[_MAPVIEW].GetTileW()),
						(_PlayWin[_MAPVIEW].GetTileH() * 1),
						_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					_bmpTiles[_MAPVIEW].DrawPart(hDC,
						rect.left + int((rect.right - rect.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50), 
						rect.top  + 5 + (_PlayWin[_MAPVIEW].GetTileH() * 2),
						(13 * _PlayWin[_MAPVIEW].GetTileW()),
						(_PlayWin[_MAPVIEW].GetTileH() * 2),
						_PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
					_bmpTiles[_MAPVIEW].DrawPart(hDC,
						_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
						rect.top  + 5 + (_PlayWin[_MAPVIEW].GetTileH() * 3),
						(12 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 4), _PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileH(), true);
					if(_EditingTarget1 > -1)
					{
						hB = CreateSolidBrush(RGB(175, 175, 175)); FillRect(hDC, &_MiniWindow, hB); DeleteObject(hB);
						InvertedTrimRect(hDC, _MiniWindow);	
						switch(_EditingTarget1)
						{
						case 0://Wall
							_bmpTiles[_MAPVIEW].DrawPart(hDC,
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(13 * _PlayWin[_MAPVIEW].GetTileW()), 0, _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							break;
						case 1://Door (East-West)
							_bmpTiles[_MAPVIEW].DrawPart(hDC,
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(13 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 1), _PlayWin[_MAPVIEW].GetTileW(), _PlayWin[_MAPVIEW].GetTileH(), true);
							break;
						case 2://Door (North-South)
							_bmpTiles[_MAPVIEW].DrawPart(hDC,
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(13 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 2), _PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileH(), true);
							break;
						case 5://Secret Door (Revealed)
							_bmpTiles[_MAPVIEW].DrawPart(hDC,
								_MiniWindow.left + int((_MiniWindow.right - _MiniWindow.left) * 0.50) - int(_PlayWin[_MAPVIEW].GetTileW() * 0.50),
								_MiniWindow.top + 2,
								(12 * _PlayWin[_MAPVIEW].GetTileW()), (_PlayWin[_MAPVIEW].GetTileH() * 4), _PlayWin[_MAPVIEW].GetTileH(), _PlayWin[_MAPVIEW].GetTileH(), true);
							break;
						}
					}
					break;
				case edMC_Monsters:
					if(_EditingTarget1 > -1 && _EditingTarget1 < MAXMONS)
					{
						temp = _MonData[_EditingTarget1].MonName;
						MyDrawText(hDC, temp, rect.left, rect.top,
							int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
						//Image
						switch(_MonitorCat)
						{
						case 2:
							_bmpMobImages[_EditingTarget1].DrawPart(hDC, 
								rect.left + int((rect.right - rect.left) * 0.50) - int(_bmpMobImages[_EditingTarget1].GetWidth() * 0.50), 
								rect.top  + int(_bmpTrimmed->GetHeight() * 1.00), 
								0, 0, 
								_bmpMobImages[_EditingTarget1].GetWidth(), 
								_bmpMobImages[_EditingTarget1].GetHeight(), false);
							break;
						case 1:
							_bmpMobImages[_EditingTarget1].DrawPart(hDC, 
								rect.left + int((rect.right - rect.left) * 0.50) - int(_bmpMobImages[_EditingTarget1].GetWidth() * 0.50), 
								rect.top  + int(_bmpTrimmed->GetHeight() * 1.00), 
								0, 0, 
								_bmpMobImages[_EditingTarget1].GetWidth(), 
								_bmpMobImages[_EditingTarget1].GetHeight(), false);
							break;
						case 0:
							_bmpMobImages[_EditingTarget1].DrawPart(hDC, 
								rect.left + int((rect.right - rect.left) * 0.50) - int(_bmpMobImages[_EditingTarget1].GetWidth() * 0.50), 
								rect.top  + int(_bmpTrimmed->GetHeight() * 1.00), 
								0, 0, 
								_bmpMobImages[_EditingTarget1].GetWidth(), 
								_bmpMobImages[_EditingTarget1].GetHeight(), false);
							break;
						}
						//Left Column Data - M. White 15 July, 2019
						if(_MonData[_EditingTarget1].data[MonIntMod] > 0)
							sprintf(tmpTxt, "Int: %d + (0 - %d)", _MonData[_EditingTarget1].data[MonBaseInt], (_MonData[_EditingTarget1].data[MonIntMod] - 1));
						else
							sprintf(tmpTxt, "Int: %d", _MonData[_EditingTarget1].data[MonBaseInt]);
						MyDrawText(hDC, tmpTxt, rect.left + int((rect.right - rect.left) * 0.15), 
							rect.top + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 1.20) , 
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						temp = "AL: ";
						switch(_MonData[_EditingTarget1].data[MonAlign])
						{
						case alignLG:	temp += "LG";	break;
						case alignLN:	temp += "LN";	break;
						case alignLE:	temp += "LE";	break;
						case alignNG:	temp += "NG";	break;
						case alignNN:	temp += "N";	break;
						case alignNE:	temp += "NE";	break;
						case alignCG:	temp += "CG";	break;
						case alignCN:	temp += "CN";	break;
						case alignCE:	temp += "CE";	break;
						}
						MyDrawText(hDC, temp,
							rect.left + int((rect.right - rect.left) * 0.15), 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 2.00),
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						sprintf(tmpTxt, "Morale: %d", _MonData[_EditingTarget1].data[MonMorale]);
						MyDrawText(hDC, tmpTxt, 
							rect.left + int((rect.right - rect.left) * 0.15), 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 2.80),
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						//End: Left Column------------------------------------------------------------------------
						//Right Column Data - M. White 15 July, 2019
						sprintf(tmpTxt, "AC: %d", _MonData[_EditingTarget1].data[MonAC]);
						MyDrawText(hDC, tmpTxt, 
							rect.left + int((rect.right - rect.left) * 0.61), 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 1.20) ,
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						if		(_MonData[_EditingTarget1].data[MonHDMod] > 0)//Need plus symbol...
							sprintf(tmpTxt, "HD: %d+%d", 
							_MonData[_EditingTarget1].data[MonNumHD], _MonData[_EditingTarget1].data[MonHDMod]);
						else if (_MonData[_EditingTarget1].data[MonHDMod] < 0)//Neg num already has minus symbol...
							sprintf(tmpTxt, "HD: %d%d", 
							_MonData[_EditingTarget1].data[MonNumHD], _MonData[_EditingTarget1].data[MonHDMod]);
						else//No +/- involved..
							sprintf(tmpTxt, "HD: %d", _MonData[_EditingTarget1].data[MonNumHD]);
						MyDrawText(hDC, tmpTxt, 
							rect.left + int((rect.right - rect.left) * 0.61), 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 2.00),
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						sprintf(tmpTxt, "Resist: %d %%", _MonData[_EditingTarget1].data[MonMR]);
						MyDrawText(hDC, tmpTxt, 
							rect.left + int((rect.right - rect.left) * 0.61), 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 2.80),
							int((rect.right - rect.left) * 0.45), _bmpTrimmed->GetHeight(), TLeft);
						//End: Right Column-----------------------------------------------------------------------
						//Centered Data - M. White 15 July, 2019
						sprintf(tmpTxt, "XP: %d", _MonData[_EditingTarget1].data[MonXP]);
						MyDrawText(hDC, tmpTxt, 
							rect.left, 
							rect.top  + _bmpMobImages[_EditingTarget1].GetHeight() + int(_bmpTrimmed->GetHeight() * 3.60),
							(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);

						if(_ResetMobs != NULL)
						{
							if(_ResetMobs->DidItHit(_XMouse, _YMouse) == true)
								_bmpButtons->DrawPart(hDC, _ResetMobs->GetX(), _ResetMobs->GetY(), 
								_ResetMobs->GetBmpXAlt(), _ResetMobs->GetBmpYAlt(), _ResetMobs->GetWidth(), _ResetMobs->GetHeight(), true);
							else
								_bmpButtons->DrawPart(hDC, _ResetMobs->GetX(), _ResetMobs->GetY(), 
								_ResetMobs->GetBmpX(), _ResetMobs->GetBmpY(), _ResetMobs->GetWidth(), _ResetMobs->GetHeight(), true);
							SetTextColor(hDC, RGB(255, 242, 0));
							temp = _ResetMobs->GetDisplayText();
							MyDrawText(hDC, temp, _ResetMobs->GetX(), _ResetMobs->GetY(), _ResetMobs->GetWidth(), _ResetMobs->GetHeight(), TCent);
						}
						//Setting up the single-letter display
						SetRect(&micro, 
							rect.left + int((rect.right - rect.left) * 0.80) - int((rect.right - rect.left) * 0.10),
							rect.top  + int((rect.bottom - rect.top) * 0.65),
							rect.left + int((rect.right - rect.left) * 0.80) + int((rect.right - rect.left) * 0.10),
							rect.top  + int((rect.bottom - rect.top) * 0.65) + _bmpTrimmed->GetHeight());
						TextBoxTrim(hDC, micro, 1);
						SetTextColor(hDC, RGB(255, 255, 255));
						temp = _SingleChar;
						MyDrawText(hDC, temp, micro.left, micro.top, int((micro.right - micro.left) * 0.95), 
							_bmpTrimmed->GetHeight(), TCent);

						//Showing total XP assigned...
						SetTextColor(hDC, RGB(0, 0, 0));
						temp = "XP Assigned";
						MyDrawText(hDC, temp, 
							rect.left, rect.top + int((rect.bottom - rect.top) * 0.73), 
							int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
						sprintf(tmpTxt, "%d", _intTotalXP_Assigned);
						MyDrawText(hDC, tmpTxt, 
							rect.left,  rect.top + int((rect.bottom - rect.top) * 0.73) + _bmpTrimmed->GetHeight(), 
							int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);

						temp = "Aggression";
						MyDrawText(hDC, temp, 
							rect.left + int((rect.right - rect.left) * 0.30),
							rect.top + int((rect.bottom - rect.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5), 
							int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TLeft);
						switch(_MonitorCat)
						{
						case 2: break;
						case 1:
							if(_bMonstersMad == true)
								_bmpButtons->DrawPart(hDC,
									rect.left + int((rect.right - rect.left) * 0.65),
									rect.top + int((rect.bottom - rect.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 3,
									171, 67, 15, 15, false);
							else
								_bmpButtons->DrawPart(hDC,
									rect.left + int((rect.right - rect.left) * 0.65),
									rect.top + int((rect.bottom - rect.top) * 0.72) + int(_bmpTrimmed->GetHeight() * 2.5) + 3,
									171, 82, 15, 15, false);
							break;
						case 0: break;
						};

						//Horizontal bar at bottom of side bar - M. White 18 July, 2019
						PaintAShadow(hDC, 125, 0, 0, _RectHorSlidePer);
						//Icon on bar
						switch(_MonitorCat)
						{
						case 2:
							break;
						case 1:
							_bmpButtons->DrawPart(hDC, _intHorSlideLocation - 6, _RectHorSlidePer.top - 2,
								120, 52, 12, 12, true);
							break;
						case 0:
							break;
						}
					}
					break;
				default: break;
				};
			}
			//_MapLink->ShowIntLink
			//Paint Scroll Buttons - M. White 3 May, 2019
			for(i = 0; i < 2; i++)
			{
				if(_MenuScrUpDwn[i].DidItHit(_XMouse, _YMouse) == true)
					_bmpButtons->DrawPart(hDC, _MenuScrUpDwn[i].GetX(), _MenuScrUpDwn[i].GetY(),
					_MenuScrUpDwn[i].GetBmpXAlt(), _MenuScrUpDwn[i].GetBmpYAlt(), _MenuScrUpDwn[i].GetWidth(), _MenuScrUpDwn[i].GetHeight(), true);
				else
					_bmpButtons->DrawPart(hDC, _MenuScrUpDwn[i].GetX(), _MenuScrUpDwn[i].GetY(),
					_MenuScrUpDwn[i].GetBmpX(), _MenuScrUpDwn[i].GetBmpY(), _MenuScrUpDwn[i].GetWidth(), _MenuScrUpDwn[i].GetHeight(), true);
			}
			//Painting this after the sidebar in case the User expands the menu where it would paint over
			//the background - M. White 3 May, 2019
			SetRect(&rect, _SideBarMenu.left, _SideBarMenu.top, _SideBarMenu.right, _SideBarMenu.bottom);
			TextBoxTrim(hDC, rect, _edOpenMCNum);
			SetTextColor(hDC, RGB(255, 242, 0));
			MyDrawText(hDC, "Click to select a category", rect.left, rect.top - _bmpTrimmed->GetHeight(),
				(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
			SetTextColor(hDC, RGB(255, 255, 255));
			//Draw the selected category - M. White 3 May, 2019
			temp = _SideBarMenuStr[_SideBarMenuIndex];
			MyDrawText(hDC, temp, rect.left, rect.top, rect.right - rect.left, _bmpTrimmed->GetHeight(), TCent);
			//If the menu is open, paint the whole list within - M. White 3 May, 2019
			if(_edOpenMapCategory == true)
			{
				if(_XMouse >= rect.left && _XMouse < rect.right && _YMouse >= rect.top && _YMouse < rect.bottom - 1)
				{
					x = VRD(rect.top, _YMouse, _bmpTrimmed->GetHeight());
					//Paint only if the mouse is down in the list - M. White 26 June, 2019
					if(x >= 1)
					{
						SetRect(&_ShadowRect,
							rect.left  + 2,
							rect.top   + (x * _bmpTrimmed->GetHeight()),
							rect.right - 2,
							rect.top   + (x * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight() - 1);
						hB = CreateSolidBrush(RGB(50, 50, 0)); FillRect(hDC, &_ShadowRect, hB); DeleteObject(hB);
					}
				}
				for(i = 0; i < edMC_MAXCats - ((_edEditingWorld == true) ? 2 : 0); i++)
				{
					MyDrawText(hDC, _SideBarMenuStr[i],
						//Adding 1 to nudge the text down into the open field - M. White 3 May, 2019
						rect.left, rect.top + ((i + 1) * _bmpTrimmed->GetHeight()),
						rect.right - rect.left, _bmpTrimmed->GetHeight(), TCent);
				}
			}
		}
		_PaintSideBar = false;
	}
	if		(_edNewWorldTrue	== true)
	{
		SetRect(&rect, _RectSubMenu.left, _RectSubMenu.top, _RectSubMenu.right, _RectSubMenu.bottom);
		hB = CreateSolidBrush(RGB(75, 0, 0)); FillRect(hDC, &rect, hB); DeleteObject(hB);
		InvertedTrimRect(hDC, rect);
		SetTextColor(hDC, RGB(255, 242, 0));
		temp = "Three Letter Designator";
		MyDrawText(hDC, temp,
			_RectSubMenu.left,
			_RectSubMenu.top + int(int(_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 1.00),
			(_RectSubMenu.right - _RectSubMenu.left) - 1,
			_bmpTrimmed->GetHeight(), TCent);
		SetRect(&rect,
			_RectSubMenu.left  + int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 2.00),
			_RectSubMenu.right - int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 3.00));
		TextBoxTrim(hDC, rect, 1);
		if(_EditorFocusIndex == 0)
		{
			SetTextColor(hDC, RGB( (50 + rand() % 206), (50 + rand() % 206), (50 + rand() % 206)));
			temp = "*";
			MyDrawText(hDC, temp, rect.left  - 8, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
			MyDrawText(hDC, temp, rect.right + 1, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
		}
		SetTextColor(hDC, RGB(255, 255, 255));
		temp = _EditorStr3letters;
		MyDrawText(hDC, temp, rect.left, rect.top, int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent); 
		SetTextColor(hDC, RGB(255, 242, 0));
		temp = "World Map Name";
		MyDrawText(hDC, temp,
			_RectSubMenu.left,
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 3.00),
			(_RectSubMenu.right - _RectSubMenu.left) - 1,
			_bmpTrimmed->GetHeight(), TCent);
		SetRect(&rect,
			_RectSubMenu.left  + int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 4.00),
			_RectSubMenu.right - int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top   + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 5.00));
		TextBoxTrim(hDC, rect, 1);
		if(_EditorFocusIndex == 1)
		{
			SetTextColor(hDC, RGB( (50 + rand() % 206), (50 + rand() % 206), (50 + rand() % 206)));
			temp = "*";
			MyDrawText(hDC, temp, rect.left  - 8, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
			MyDrawText(hDC, temp, rect.right + 1, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
		}
		SetTextColor(hDC, RGB(255, 255, 255));
		temp = _Editor_W_S_Name;
		MyDrawText(hDC, temp, rect.left, rect.top, int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
		SetTextColor(hDC, RGB(255, 242, 0));
		for(i = 0; i < _NumTmpSubBtn; i++)
		{
			if(_tmpSubBtn[i].DidItHit(_XMouse, _YMouse))
				_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(), 
					_tmpSubBtn[i].GetBmpXAlt(), _tmpSubBtn[i].GetBmpYAlt(),
					_tmpSubBtn[i].GetWidth(),   _tmpSubBtn[i].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
					_tmpSubBtn[i].GetBmpX(),   _tmpSubBtn[i].GetBmpY(),
					_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
			MyDrawText(hDC, _tmpSubBtn[i].GetDisplayText(), 
				_tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
				_tmpSubBtn[i].GetWidth(), _tmpSubBtn[i].GetHeight(), TCent);
		}
	}
	else if	(_edNewSceneTrue	== true)
	{
		hB = CreateSolidBrush(RGB(75, 0, 0));
		SetRect(&rect, _RectSubMenu.left, _RectSubMenu.top, _RectSubMenu.right, _RectSubMenu.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		SetTextColor(hDC, RGB(255, 242, 0));
		InvertedTrimRect(hDC, rect);
		temp = "Three Letter Designator";
		MyDrawText(hDC, temp,
			_RectSubMenu.left,
			_RectSubMenu.top + int(int(_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 1.00),
			(_RectSubMenu.right - _RectSubMenu.left) - 1,
			_bmpTrimmed->GetHeight(), TCent);
		SetRect(&rect,
			_RectSubMenu.left  + int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 2.00),
			_RectSubMenu.right - int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 2.00));
		TextBoxTrim(hDC, rect, 1);
		if(_EditorFocusIndex == 0)
		{
			SetTextColor(hDC, RGB( (50 + rand() % 206), (50 + rand() % 206), (50 + rand() % 206)));
			temp = "*";
			MyDrawText(hDC, temp, rect.left  - 8, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
			MyDrawText(hDC, temp, rect.right + 1, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
		}
		SetTextColor(hDC, RGB(255, 255, 255));
		temp = _EditorStr3letters;
		MyDrawText(hDC, temp, rect.left, rect.top, int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent); 
		SetTextColor(hDC, RGB(255, 242, 0));
		temp = "Scene Name";
		MyDrawText(hDC, temp,
			_RectSubMenu.left,
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 3.00),
			(_RectSubMenu.right - _RectSubMenu.left) - 1,
			_bmpTrimmed->GetHeight(), TCent);
		SetRect(&rect,
			_RectSubMenu.left  + int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 4.00),
			_RectSubMenu.right - int((_RectSubMenu.right - _RectSubMenu.left) * 0.03),
			_RectSubMenu.top + int((_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 4.00));
		TextBoxTrim(hDC, rect, 1);
		if(_EditorFocusIndex == 1)
		{
			SetTextColor(hDC, RGB( (50 + rand() % 206), (50 + rand() % 206), (50 + rand() % 206)));
			temp = "*";
			MyDrawText(hDC, temp, rect.left  - 8, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
			MyDrawText(hDC, temp, rect.right + 1, rect.top, 4, _bmpTrimmed->GetHeight(), TCent);
		}
		SetTextColor(hDC, RGB(255, 255, 255));
		temp = _Editor_W_S_Name;
		MyDrawText(hDC, temp, rect.left, rect.top, int(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
		SetTextColor(hDC, RGB(255, 242, 0));
		for(i = 0; i < _NumTmpSubBtn; i++)
		{
			if(_tmpSubBtn[i].DidItHit(_XMouse, _YMouse))
				_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(), 
					_tmpSubBtn[i].GetBmpXAlt(), _tmpSubBtn[i].GetBmpYAlt(),
					_tmpSubBtn[i].GetWidth(),   _tmpSubBtn[i].GetHeight(), true);
			else
				_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
					_tmpSubBtn[i].GetBmpX(),   _tmpSubBtn[i].GetBmpY(),
					_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
			MyDrawText(hDC, _tmpSubBtn[i].GetDisplayText(), 
				_tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
				_tmpSubBtn[i].GetWidth(), _tmpSubBtn[i].GetHeight(), TCent);
		}
	}
	else if	(_edOpenTrue		== true)
	{
		hB = CreateSolidBrush(RGB(75, 0, 0));
		SetRect(&rect, _RectSubMenu.left, _RectSubMenu.top, _RectSubMenu.right, _RectSubMenu.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		InvertedTrimRect(hDC, rect);
		SetTextColor(hDC, RGB(255, 242, 0));
		//Positioning cue text for User to read - M. White 14 May, 2019
		if(_EditorFocusIndex == -1)
		{
			temp = "Open a World or Scene Map?";
			MyDrawText(hDC, temp,
				_RectSubMenu.left,
				_RectSubMenu.top + int(int(_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + int(_bmpTrimmed->GetHeight() * 1.00),
				(_RectSubMenu.right - _RectSubMenu.left) - 1,
				_bmpTrimmed->GetHeight(), TCent);
		}
		else
		{
			SetTextColor(hDC, RGB(255, 242, 0));
			temp = "Select a Name, then click Open or Cancel";
			MyDrawText(hDC, temp,
				_RectSubMenu.left,
				_RectSubMenu.top + int(_bmpTrimmed->GetHeight() * 0.50),
				(_RectSubMenu.right - _RectSubMenu.left) - 1,
				_bmpTrimmed->GetHeight(), TCent);
			//Creating a backdrop for the list to appear on - M. White 14 May, 2019
			hB = CreateSolidBrush(RGB(175, 175, 175));
			SetRect(&rect, _MenuBackGrnd.left, _MenuBackGrnd.top, _MenuBackGrnd.right, _MenuBackGrnd.bottom);
			FillRect(hDC, &rect, hB);
			DeleteObject(hB);
			InvertedTrimRect(hDC, rect);
			if(_NumWSs >= 1)
			{
				for(i = _ListIndex; i < (_ListIndex + _NumLinesToList) && i < _NumWSs; i++)
				{
					if(i < _NumWSs)
					{
						//Creating a lighter shadown behind each entry seperatly...
						SetRect(&micro,
							rect.left + 2, 
							rect.top + 2 + ((i - _ListIndex) * _bmpTrimmed->GetHeight()),
							rect.right - 2, 
							rect.top + ((i - _ListIndex) * _bmpTrimmed->GetHeight()) + (_bmpTrimmed->GetHeight() - 2));
						hB = CreateSolidBrush(RGB(200, 200, 200));
						FillRect(hDC, &micro, hB);
						DeleteObject(hB);
					}
				}
				//Creating Mouse shadow - M. White 15 May, 2019
				if(_XMouse >= rect.left && _XMouse <= rect.right - 6 &&
				   _YMouse >= rect.top  && _YMouse < (rect.top + (_bmpTrimmed->GetHeight() * _NumLinesToList)))
				{
					j = VRD(rect.top, _pEngine->GetMouseY());
					if(j < _NumWSs)
					{
						SetRect(&_ShadowRect,
							rect.left,
							rect.top + ((VRD(rect.top, _YMouse) * _bmpTrimmed->GetHeight())),
							rect.right,
							rect.top + ((VRD(rect.top, _YMouse) * _bmpTrimmed->GetHeight())) + _bmpTrimmed->GetHeight());
						hB = CreateSolidBrush(RGB(255, 242, 0));
						FillRect(hDC, &_ShadowRect, hB);
						DeleteObject(hB);
					}
				}
				//Listing the wording - M. White 15 May, 2019
				for(i = _ListIndex; i < (_ListIndex + _NumLinesToList) && i < _NumWSs; i++)
				{
					//List available links
					_ListWorldScenes.getNodes(i, temp);
					SetTextColor(hDC, RGB(0, 0, 0));
					MyDrawText(hDC, temp,
						rect.left, rect.top + (_bmpTrimmed->GetHeight() * (i - _ListIndex)),
						(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
				}
				if(_EditingTarget1 >= 0 && _EditingTarget1 < _NumWSs)
				{
					hB = CreateSolidBrush(RGB(175, 175, 175));
					SetRect(&micro,
						_MenuBackGrnd.left,
						_MenuBackGrnd.bottom + _bmpTrimmed->GetHeight(),
						_MenuBackGrnd.right, 
						_MenuBackGrnd.bottom + (_bmpTrimmed->GetHeight() * 2));
					FillRect(hDC, &micro, hB);
					DeleteObject(hB);
					InvertedTrimRect(hDC, micro);
					//Get the name - M. White 17 May, 2019
					_ListWorldScenes.getNodes(_EditingTarget1, temp);
					//Set the color - M. White 17 May, 2019
					SetTextColor(hDC, RGB(0, 0, 0));
					MyDrawText(hDC, temp,
						micro.left, micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TCent);
				}
				//up and down buttons - M. White 16 May, 2019
				if(_NumWSs > _NumLinesToList)
				{
					if(_WorldSceneUpDwn != NULL)
					{
						for(i = 0; i < 2; i++)
							if(_WorldSceneUpDwn[i].DidItHit(_XMouse, _YMouse))
								_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(), 
									_WorldSceneUpDwn[i].GetBmpXAlt(), _WorldSceneUpDwn[i].GetBmpYAlt(),
									_WorldSceneUpDwn[i].GetWidth(),   _WorldSceneUpDwn[i].GetHeight(), true);
							else
								_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(),
									_WorldSceneUpDwn[i].GetBmpX(),   _WorldSceneUpDwn[i].GetBmpY(),
									_WorldSceneUpDwn[i].GetWidth(),  _WorldSceneUpDwn[i].GetHeight(), true);
					}
				}
			}
		}
		//These (tmp) buttons array size changes in this Phase - M. White 14 May, 2019
		if(_tmpSubBtn != NULL)
		{
			SetTextColor(hDC, RGB(255, 242, 0));
			for(i = 0; i < _NumTmpSubBtn; i++)
			{
				if(_tmpSubBtn[i].GetIsActive() == false)
				{
					_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
						_tmpSubBtn[i].GetBmpInActX(),   _tmpSubBtn[i].GetBmpInActY(),
						_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
				}
				else
				{
					if(_tmpSubBtn[i].DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
						_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(), 
							_tmpSubBtn[i].GetBmpXAlt(), _tmpSubBtn[i].GetBmpYAlt(),
							_tmpSubBtn[i].GetWidth(),   _tmpSubBtn[i].GetHeight(), true);
					else
						_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
							_tmpSubBtn[i].GetBmpX(),   _tmpSubBtn[i].GetBmpY(),
							_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
				}
				MyDrawText(hDC, _tmpSubBtn[i].GetDisplayText(), 
					_tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
					_tmpSubBtn[i].GetWidth(), _tmpSubBtn[i].GetHeight(), TCent);
			}
		}
	}
	else if	(_edDeleteTrue		== true)
	{
		hB = CreateSolidBrush(RGB(75, 0, 0));
		SetRect(&rect, _RectSubMenu.left, _RectSubMenu.top, _RectSubMenu.right, _RectSubMenu.bottom);
		FillRect(hDC, &rect, hB);
		DeleteObject(hB);
		InvertedTrimRect(hDC, rect);
		SetTextColor(hDC, RGB(255, 242, 0));
		//Positioning cue text for User to read - M. White 14 May, 2019
		if(_EditorFocusIndex == -1)
		{
			temp = "Select World or Scene Map to Delete";
			MyDrawText(hDC, temp,
				_RectSubMenu.left,
				_RectSubMenu.top + int(int(_RectSubMenu.bottom - _RectSubMenu.top) * 0.05) + _bmpTrimmed->GetHeight(),
				(_RectSubMenu.right - _RectSubMenu.left) - 1,
				_bmpTrimmed->GetHeight(), TCent);
		}
		else
		{
			SetTextColor(hDC, RGB(255, 242, 0));
			temp = "Select a Name, then click Open or Cancel";
			MyDrawText(hDC, temp,
				_RectSubMenu.left,
				_RectSubMenu.top + int(_bmpTrimmed->GetHeight() * 0.50),
				(_RectSubMenu.right - _RectSubMenu.left) - 1,
				_bmpTrimmed->GetHeight(), TCent);
			//Creating a backdrop for the list to appear on - M. White 14 May, 2019
			hB = CreateSolidBrush(RGB(175, 175, 175));
			SetRect(&rect, _MenuBackGrnd.left, _MenuBackGrnd.top, _MenuBackGrnd.right, _MenuBackGrnd.bottom);
			FillRect(hDC, &rect, hB);
			DeleteObject(hB);
			InvertedTrimRect(hDC, rect);
			if(_NumWSs >= 1)
			{
				for(i = _ListIndex; i < (_ListIndex + _NumLinesToList) && i < _NumWSs; i++)
				{
					if(i < _NumWSs)
					{
						//Creating a lighter shadown behind each entry seperatly...
						SetRect(&micro,
							rect.left + 2, 
							rect.top + 2 + ((i - _ListIndex) * _bmpTrimmed->GetHeight()),
							rect.right - 2, 
							rect.top + ((i - _ListIndex) * _bmpTrimmed->GetHeight()) + (_bmpTrimmed->GetHeight() - 2));
						hB = CreateSolidBrush(RGB(200, 200, 200));
						FillRect(hDC, &micro, hB);
						DeleteObject(hB);
					}
				}
				//Creating Mouse shadow - M. White 15 May, 2019
				if(_XMouse >= rect.left && _XMouse <= rect.right - 6 &&
				   _YMouse >= rect.top  && _YMouse < (rect.top + (_bmpTrimmed->GetHeight() * _NumLinesToList)))
				{
					j = VRD(rect.top, _YMouse);
					if(j < _NumWSs)
					{
						SetRect(&_ShadowRect,
							rect.left,
							rect.top + (VRD(rect.top, _YMouse) * _bmpTrimmed->GetHeight()),
							rect.right,
							rect.top + (VRD(rect.top, _YMouse) * _bmpTrimmed->GetHeight()) + _bmpTrimmed->GetHeight());
						hB = CreateSolidBrush(RGB(255, 242, 0));
						FillRect(hDC, &_ShadowRect, hB);
						DeleteObject(hB);
					}
				}
				//Listing the wording - M. White 15 May, 2019
				for(i = _ListIndex; i < (_ListIndex + _NumLinesToList) && i < _NumWSs; i++)
				{
					//List available links
					_ListWorldScenes.getNodes(i, temp);
					SetTextColor(hDC, RGB(0, 0, 0));
					MyDrawText(hDC, temp,
						rect.left, rect.top + (_bmpTrimmed->GetHeight() * (i - _ListIndex)),
						(rect.right - rect.left), _bmpTrimmed->GetHeight(), TCent);
				}
				if(_EditingTarget1 >= 0 && _EditingTarget1 < _NumWSs)
				{
					hB = CreateSolidBrush(RGB(175, 175, 175));
					SetRect(&micro,
						_MenuBackGrnd.left,
						_MenuBackGrnd.bottom + _bmpTrimmed->GetHeight(),
						_MenuBackGrnd.right, 
						_MenuBackGrnd.bottom + (_bmpTrimmed->GetHeight() * 2));
					FillRect(hDC, &micro, hB);
					DeleteObject(hB);
					InvertedTrimRect(hDC, micro);
					//Get the name - M. White 17 May, 2019
					_ListWorldScenes.getNodes(_EditingTarget1, temp);
					//Set the color - M. White 17 May, 2019
					SetTextColor(hDC, RGB(0, 0, 0));
					MyDrawText(hDC, temp,
						micro.left, micro.top, (micro.right - micro.left), _bmpTrimmed->GetHeight(), TCent);
				}
				//up and down buttons - M. White 16 May, 2019
				if(_NumWSs > _NumLinesToList)
				{
					if(_WorldSceneUpDwn != NULL)
					{
						for(i = 0; i < 2; i++)
							if(_WorldSceneUpDwn[i].DidItHit(_XMouse, _YMouse))
								_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(), 
									_WorldSceneUpDwn[i].GetBmpXAlt(), _WorldSceneUpDwn[i].GetBmpYAlt(),
									_WorldSceneUpDwn[i].GetWidth(),   _WorldSceneUpDwn[i].GetHeight(), true);
							else
								_bmpButtons->DrawPart(hDC, _WorldSceneUpDwn[i].GetX(), _WorldSceneUpDwn[i].GetY(),
									_WorldSceneUpDwn[i].GetBmpX(),   _WorldSceneUpDwn[i].GetBmpY(),
									_WorldSceneUpDwn[i].GetWidth(),  _WorldSceneUpDwn[i].GetHeight(), true);
					}
				}
			}
		}
		if(_tmpSubBtn != NULL)
		{
			SetTextColor(hDC, RGB(255, 242, 0));
			for(i = 0; i < _NumTmpSubBtn; i++)
			{
				if(_tmpSubBtn[i].GetIsActive() == false)
				{
					_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
						_tmpSubBtn[i].GetBmpInActX(),   _tmpSubBtn[i].GetBmpInActY(),
						_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
				}
				else
				{
					if(_tmpSubBtn[i].DidItHit(_pEngine->GetMouseX(), _pEngine->GetMouseY()))
						_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(), 
							_tmpSubBtn[i].GetBmpXAlt(), _tmpSubBtn[i].GetBmpYAlt(),
							_tmpSubBtn[i].GetWidth(),   _tmpSubBtn[i].GetHeight(), true);
					else
						_bmpButtons->DrawPart(hDC, _tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
							_tmpSubBtn[i].GetBmpX(),   _tmpSubBtn[i].GetBmpY(),
							_tmpSubBtn[i].GetWidth(),  _tmpSubBtn[i].GetHeight(), true);
				}
				MyDrawText(hDC, _tmpSubBtn[i].GetDisplayText(), 
					_tmpSubBtn[i].GetX(), _tmpSubBtn[i].GetY(),
					_tmpSubBtn[i].GetWidth(), _tmpSubBtn[i].GetHeight(), TCent);
			}
		}
	}
	//Leave the Wizard last as he'll need to always be on top - M. White 9 June, 2019
	if(_PaintTheWizard	== true)
	{
		_TheWizard->PaintSelf(hDC, _XMouse, _YMouse);
		if(_TheWizard->bDisplayMsg == true)
		{
			SetTextColor(hDC, RGB(0, 0, 0));
			MyDrawMultiLineText(hDC, _TheWizard->Speech, _TheWizard->MsgRect.left + 19, _TheWizard->MsgRect.top + 19,
									((_TheWizard->MsgRect.right - 19) - (_TheWizard->MsgRect.left + 19)),
									((_TheWizard->MsgRect.bottom - 19) - (_TheWizard->MsgRect.top + 19)));
			//Buttons after the rest...
			if(_TheWizard->numWizBtns > 0)//this might be at '0' as a fake to keep from blit'n
			{
				SetTextColor(hDC, RGB(255, 242, 0));
				if(_TheWizard->numWizBtns > 1)
				{
					for(i = 0; i < _TheWizard->numWizBtns; i++)
					{
						if(_TheWizard->wzButtons[i].DidItHit(_XMouse, _YMouse))
							_bmpButtons->DrawPart(hDC, _TheWizard->wzButtons[i].GetX(), _TheWizard->wzButtons[i].GetY(), 
								_TheWizard->wzButtons[i].GetBmpXAlt(), _TheWizard->wzButtons[i].GetBmpYAlt(),
								_TheWizard->wzButtons[i].GetWidth(),   _TheWizard->wzButtons[i].GetHeight(), true);
						else
							_bmpButtons->DrawPart(hDC, _TheWizard->wzButtons[i].GetX(), _TheWizard->wzButtons[i].GetY(),
								_TheWizard->wzButtons[i].GetBmpX(), _TheWizard->wzButtons[i].GetBmpY(),
								_TheWizard->wzButtons[i].GetWidth(), _TheWizard->wzButtons[i].GetHeight(), true);
						if(_TheWizard->wzButtons[i].GetDisplayLength() > 0)
						{
							temp = _TheWizard->wzButtons[i].GetDisplayText();
							MyDrawText(hDC, temp, 
								_TheWizard->wzButtons[i].GetX(), _TheWizard->wzButtons[i].GetY(),
								_TheWizard->wzButtons[i].GetWidth(), _TheWizard->wzButtons[i].GetHeight(), TCent);
						}
					}
				}
				else
				{
					if(_TheWizard->wzButtons->DidItHit(_XMouse, _YMouse))
						_bmpButtons->DrawPart(hDC, _TheWizard->wzButtons->GetX(), _TheWizard->wzButtons->GetY(), 
							_TheWizard->wzButtons->GetBmpXAlt(), _TheWizard->wzButtons->GetBmpYAlt(),
							_TheWizard->wzButtons->GetWidth(),   _TheWizard->wzButtons->GetHeight(), true);
					else
						_bmpButtons->DrawPart(hDC, _TheWizard->wzButtons->GetX(), _TheWizard->wzButtons->GetY(),
							_TheWizard->wzButtons->GetBmpX(), _TheWizard->wzButtons->GetBmpY(),
							_TheWizard->wzButtons->GetWidth(), _TheWizard->wzButtons->GetHeight(), true);
					if(_TheWizard->wzButtons->GetDisplayLength() > 0)
					{
						MyDrawText(hDC, _TheWizard->wzButtons->GetDisplayText(), 
							_TheWizard->wzButtons->GetX(), _TheWizard->wzButtons->GetY(),
							_TheWizard->wzButtons->GetWidth(), _TheWizard->wzButtons->GetHeight(), TCent);
					}
				}
			}
		}
	}
	SetBkMode(hDC, OPAQUE);
}
int	Roll4D6()
{
	int LocalDice[4]; int tempInt; int x, y;
	for(x = 0; x < 4; x++)	LocalDice[x] = int(rand() % 6) + 1;
	for(x = 0; x < 4; x++)
	{
		for(y = 0; y < 4; y++)
			if(LocalDice[y] < LocalDice[x]) { tempInt = LocalDice[x]; LocalDice[x] = LocalDice[y]; LocalDice[y] = tempInt; }
	}
	tempInt = 0;
	for(x = 0; x < 3; x++)	tempInt += LocalDice[x];
	return tempInt;
}
int RollSomeDice(int Num, int Side)
{
	int tmp; tmp = 0;
	for(int i = 0; i < Num; i++) tmp += int(rand() % Side) + 1;
	return tmp;
}
void DeleteFile(string FileName)
{
	if(remove(LPCSTR(FileName.c_str())) != 0)
		MessageBox(NULL, "Unable to Delete File", FileName.c_str(), MB_OK);
}
int VRD(int StartingY, int MouseY, int Divisor)
{
	//Verticle Rectangle Divisor
	//Divisor's default is "_bmpTrimmed->GetHeight() - M. White 24 May, 2019
	/*
	This function replaces all of the times that an index has to be generated according to
	where the User is pointing the mouse to select an item out of a list. This function 
	takes the Rectangle in question, gets the difference between the MouseY location and 
	the top of the rect, and returns an integer based upon the divisor. 
	
	Any modifications by offset should be done calculated before being passed in - M. White 24 May, 2019
	*/
	int returnValue;
	if(Divisor != 0)	returnValue = int((MouseY - StartingY) / double(Divisor));
	else				returnValue = 0;
	return returnValue;
}
DWORD WINAPI LoadWorldScene(LPVOID lpParameter)
{
	ifstream	DataInput;
	int			i = 0;//, XMod, YMod;
	bool		bTemp;
	_PercentCounter	= 0;
	_PercentTotal	= (_TactMapW * _TactMapH) + 4;
	while(_IsLoadingFOW == true) Sleep(1);
	_IsLoading		= true;
	DataInput.open(_FileNameMap.c_str());
	if(DataInput.is_open() == true)
	{
		DataInput >> i;
		if(i == 0)	_bHiddenMap = false;
		else		_bHiddenMap = true;

		for(int y = 0; y < _TactMapH; y++)
			for(int x = 0; x < _TactMapW; x++)
			{
				if(_edShowMapOfInt == true)//Show map of interest (map being worked with)
				{
					DataInput >> i;		_TactMap[x][y].SetBG(i);
					DataInput >> i;		_TactMap[x][y].SetCity(i);
					DataInput >> i;		_TactMap[x][y].SetCoastX(i);
					DataInput >> i;		_TactMap[x][y].SetCoastY(i);
					DataInput >> i;		_TactMap[x][y].SetForest(i);
					DataInput >> i;		_TactMap[x][y].SetRoadRiver(i);
					DataInput >> i;		_TactMap[x][y].SetWall(i);
					DataInput >> bTemp; _TactMap[x][y].SetVisited(bTemp);
				}
				else//Other map that comes up
				{
					DataInput >> i;		_TactMapBack[x][y].SetBG(i);
					DataInput >> i;		_TactMapBack[x][y].SetCity(i);
					DataInput >> i;		_TactMapBack[x][y].SetCoastX(i);
					DataInput >> i;		_TactMapBack[x][y].SetCoastY(i);
					DataInput >> i;		_TactMapBack[x][y].SetForest(i);
					DataInput >> i;		_TactMapBack[x][y].SetRoadRiver(i);
					DataInput >> i;		_TactMapBack[x][y].SetWall(i);
					DataInput >> bTemp; _TactMapBack[x][y].SetVisited(bTemp);
				}
				_paintSomething	= true;
				_paintMainMap	= true;
				_PercentCounter++;
			}
	}
	DataInput.close();
	_IsLoading		= false;
	_paintSomething	= true;
	_paintMainMap	= true;
	return 0;
}
DWORD WINAPI SaveWorldScene(LPVOID lpParameter)
{
	ofstream DataOutput;
	_PercentCounter	= 0;
	_PercentTotal	= (_TactMapW * _TactMapH) + 4;
	_IsLoading		= true;	
	DataOutput.open(_FileNameMap.c_str());
	if(DataOutput.is_open() == true)
	{
		if(_bHiddenMap == true) DataOutput << 1 << "\n";
		else					DataOutput << 0 << "\n";

		for(int y = 0; y < _TactMapH; y++)
		{
			for(int x = 0; x < _TactMapW; x++)
			{
				DataOutput << _TactMap[x][y].GetBG()		<< " "
						   << _TactMap[x][y].GetCity()		<< " "
						   << _TactMap[x][y].GetCoastX()	<< " "
						   << _TactMap[x][y].GetCoastY()	<< " "
						   << _TactMap[x][y].GetForest()	<< " "
						   << _TactMap[x][y].GetRoadRiver()	<< " "
						   << _TactMap[x][y].GetWall()		<< " ";

				if(_TactMap[x][y].GetVisited() == true)	DataOutput << "1";
				else									DataOutput << "0";
				if(x < _TactMapW - 1) DataOutput << " ";
				_paintSomething = true;
				_paintWholeScrn = true;
				_PercentCounter++;
			}
			if(y < _TactMapH - 1) DataOutput << "\n";
		}
	}
	DataOutput.close();
	GetTacticalMapData(_MAPVIEW);
	_IsLoading = false;
	return 0;
}
DWORD WINAPI LoadLinks(LPVOID lpParameter)
{
	/*
		struct InternalMapLink
		{
			int exitX, exitY;				//Location of exit on the Map of Interest - M. White 8 June, 2019
			int destX, destY;				//Destination map's location of entry - M. White 8 June, 2019
			int DestMapType;				//World or Scene (0, 1);
			string DestinationMapName;		//File name of the destinamtion Map - M. White 8 June, 2019
			string NickName;
		};
	*/
	ifstream		DataInput;
	InternalMapLink	tmpNode;
	bool			bTemp;
	string			strTemp;

	//Clear out any old data - M. White 21 Sep, 2019
	if(_MapLink->inLinks.isEmpty() == false)
		while(_MapLink->inLinks.isEmpty() != true)
			_MapLink->inLinks.popFront();

	DataInput.open(_FileNameLinks.c_str());
	if(DataInput.is_open())
	{
		DataInput >> bTemp;	_MapLink->SetTypeWest(bTemp);	DataInput >> strTemp;	_MapLink->SetStrMapWest(strTemp);
		DataInput >> bTemp;	_MapLink->SetTypeNorth(bTemp);	DataInput >> strTemp;	_MapLink->SetStrMapNorth(strTemp);
		DataInput >> bTemp;	_MapLink->SetTypeEast(bTemp);	DataInput >> strTemp;	_MapLink->SetStrMapEast(strTemp);
		DataInput >> bTemp;	_MapLink->SetTypeSouth(bTemp);	DataInput >> strTemp;	_MapLink->SetStrMapSouth(strTemp);
		_MapLink->NumInternalLinks = 0;
		while(!DataInput.eof())
		{
			DataInput >> tmpNode.exitX >> tmpNode.exitY;
			DataInput >> tmpNode.DestMapType;
			DataInput >> tmpNode.IsHidden;
			DataInput >> tmpNode.DestinationMapName;
			DataInput >> tmpNode.destX >> tmpNode.destY;
			DataInput >> tmpNode.NickName;
			//Validate the data - M. White 20 June, 2019
			if(tmpNode.exitX > -1 && tmpNode.exitY > -1)
			{
				if(tmpNode.destX > -1 && tmpNode.destY > -1)
				{
					if(tmpNode.DestMapType == 0 || tmpNode.DestMapType == 1)
					{
						if(int(tmpNode.DestinationMapName.length() > 0))
						{
							if(int(tmpNode.NickName.length() > 0))
							{
								_MapLink->inLinks.insertBack(tmpNode);
								_MapLink->NumInternalLinks++;
								_MapLink->CurIndex = _MapLink->NumInternalLinks;
							}
							else break;
						}
						else break;
					}
					else break;
				}
				else break;
			}
			else break;
		}
	}
	DataInput.clear();
	return 0;
}
DWORD WINAPI SaveLinks(LPVOID lpParameter)
{
	/*
		struct InternalMapLink
		{
			int exitX, exitY;				//Location of exit on the Map of Interest - M. White 8 June, 2019
			int destX, destY;				//Destination map's location of entry - M. White 8 June, 2019
			int DestMapType;				//World or Scene (0, 1);
			string DestinationMapName;		//File name of the destinamtion Map - M. White 8 June, 2019
			string NickName;
		};
	*/
	ofstream		DataOutput;
	InternalMapLink	localNode;
	DataOutput.open(_FileNameLinks.c_str());
	if(DataOutput.is_open() == true)
	{
		//Output the five map names and what type they are...(type, then name per...)
		DataOutput << _MapLink->GetTypeWest()			<< " "
				   << _MapLink->GetStrMapWest()			<< " "
				   << _MapLink->GetTypeNorth()			<< " "
				   << _MapLink->GetStrMapNorth()		<< " "
				   << _MapLink->GetTypeEast()			<< " "
				   << _MapLink->GetStrMapEast()			<< " "
				   << _MapLink->GetTypeSouth()			<< " "
				   << _MapLink->GetStrMapSouth()		<< " ";
		//Output the Internal Links if any present in the Linked List...
		if(_MapLink->NumInternalLinks > 0)
		{
			DataOutput << "\n";
			for(int i = 0; i < _MapLink->NumInternalLinks; i++)
			{
				_MapLink->inLinks.getNodes(i, localNode);
				DataOutput << localNode.exitX		<< " " << localNode.exitY				<< " "
						   << localNode.DestMapType << " " << localNode.IsHidden			<< " "
						   << localNode.DestinationMapName	<< " "
						   << localNode.destX		<< " " << localNode.destY				<< " "
						   << localNode.NickName;

				if(i < (_MapLink->NumInternalLinks - 1)) DataOutput << "\n";
			}
		}
	}
	DataOutput.close();

	return 0;
}
DWORD WINAPI LoadMobsEditor(LPVOID lpParameter)
{
	Avatar		Temp;
	string		strInput;
	int			intX, intY;
	char		cData[32];
	bool		bAggressive;
	ifstream	DataInput;

	while(_IsLoading == true) Sleep(1);
	DataInput.open(_FileNameMobs.c_str());
	if(DataInput.is_open() == true)
	{
		//Cleaning Garbage before use...
		strInput = ""; intX = 0; intY = 0;

		//Clear out old data - M. White 26 July, 2019
		if(int(_ListMobAssigns.length()) > 0) while(_ListMobAssigns.isEmpty() != true) _ListMobAssigns.popFront();

		//Clear out mob references in the TactMap
		for(int y = 0; y < _TactMapH; y++) for(int x = 0; x < _TactMapW; x++) _TactMap[x][y].AvatarIndex = -1;

		//Clear out mob references in the play screen
		for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
			for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
				_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;

		//Used to test the file to know if there's any monsters in it...
		_intNumMobsAssigned = 0;
		DataInput >> _intNumMobsAssigned;
		sprintf(cData, "Num: %d", _intNumMobsAssigned);
		if(_intNumMobsAssigned > 0)
		{
			while(DataInput.eof() != true)
			{
				if(DataInput.eof() != true)
				{
					DataInput >> strInput;
					if(DataInput.eof() != true)
					{
						DataInput >> intX;
						if(DataInput.eof() != true)
						{
							DataInput >> intY;
							if(DataInput.eof() != true)
							{
								DataInput >> bAggressive;
								if(intX >= 0 && intX < _TactMapW && intY >= 0 && intY < _TactMapH)
								{
									Temp.AssignRaceViaString(strInput);
									Temp.SetDungeonX(intX); Temp.SetDungeonY(intY);
									Temp.SetAggress(bAggressive);
									//Final verification before assigning to list - M. White 24 July, 2019
									if(Temp.GetRace() >= 0 && Temp.GetRace() < MAXMONS)
										_ListMobAssigns.insertBack(Temp);
									else MessageBox(NULL, "Failed to Read Data - Stage 5", "LoadMobsEditor()", MB_OK);
								}
								else
								{
									Temp.Reset();
									MessageBox(NULL, "Failed to Read Data - Stage 4", "LoadMobsEditor()", MB_OK);
								}
							}
							else MessageBox(NULL, "Failed to Read Data - Stage 3", "LoadMobsEditor()", MB_OK);
						}
						else MessageBox(NULL, "Failed to Read Data - Stage 2", "LoadMobsEditor()", MB_OK);
					}
					else MessageBox(NULL, "Failed to Read Data - Stage 1", "LoadMobsEditor()", MB_OK);
				}
				else MessageBox(NULL, "Failed to Read Data - Stage 0", "LoadMobsEditor()", MB_OK);
			}
			//Re-account the data for accuracy
			_intNumMobsAssigned		= 0;
			_intTotalXP_Assigned	= 0;
			for(int z = 0; z < int(_ListMobAssigns.length()); z++)
			{
				_ListMobAssigns.getNodes(z, Temp);
				//Count how many mobs are present...
				_intNumMobsAssigned++;
				//Calclate the total XP assigned for the editor screen
				_intTotalXP_Assigned += _MonData[Temp.GetRace()].data[MonXP];
				//Assign the mob to the map...
				_TactMap[Temp.GetDungeonX()][Temp.GetDungeonY()].AvatarIndex = z;
			}
		}
	}
	DataInput.close();

	return 0;
}
DWORD WINAPI SaveMobsEditor(LPVOID lpParameter)
{
	Avatar		Temp;
	ofstream	DataOutput;
//	char		test[64];
	DataOutput.open(_FileNameMobs.c_str());
	if(DataOutput.is_open() == true)
	{
		if(_intNumMobsAssigned > 0)
		{
			DataOutput << _intNumMobsAssigned << "\n";
			for(int i = 0; i < _intNumMobsAssigned; i++)
			{
				_ListMobAssigns.getNodes(i, Temp);
				DataOutput << Temp.GetRaceEnumName() << " " << Temp.GetDungeonX() << " " << Temp.GetDungeonY() << " ";
				if(Temp.GetAggress() == true)	DataOutput << 1;
				else							DataOutput << 0;
				if(i < (_intNumMobsAssigned - 1)) DataOutput << "\n";
			}
		}
		else DataOutput << _intNumMobsAssigned;
	}
	DataOutput.close();
	return 0;
}
DWORD WINAPI LoadMobList(LPVOID lpParameter)
{
	/*
		LoadMobList() uses a linked list and a Pointer to first read in data from a File, insert 
		it into the linked list until the File is done being read. Once the data is collected and 
		measured, a new array matching the size is created using the pointer. The linked list is 
		then cleaned up.
	*/
	Avatar		Temp;
	string		strInput;
	int			intX, intY;
	int			hp;
	bool		bAggressive;
	ifstream	DataInput;
	while(_IsLoading == true) Sleep(1);
	_bLoadMobs = true;//Alert the other threads we're active...

	DataInput.open(_FileNameMobs.c_str());
	if(DataInput.is_open() == true)
	{
		if(_MobArray != NULL)
		{
			if(_intNumMobsAssigned > 1) delete [] _MobArray; else delete _MobArray;
			_intNumMobsAssigned = 0; _MobArray = NULL;
		}
		//Clear out old data - M. White 26 July, 2019
		if(int(_ListMobAssigns.length()) > 0)
		{
			while(_ListMobAssigns.isEmpty() != true) _ListMobAssigns.popFront();
		}

		DataInput >> _intNumMobsAssigned;

		if(_intNumMobsAssigned > 0)
		{
			//Cleaning Garbage before use...
			strInput = ""; intX = 0; intY = 0;

			//Clear out mob references in the TactMap
			for(int y = 0; y < _TactMapH; y++) for(int x = 0; x < _TactMapW; x++) _TactMap[x][y].AvatarIndex = -1;

			//Clear out mob references in play screen
			for(int y = 0; y < _PlayWin[_MAPVIEW].GetNumRow(); y++)
				for(int x = 0; x < _PlayWin[_MAPVIEW].GetNumCol(); x++)
					_PlayWin[_MAPVIEW].PW_Buffer[x][y].AvatarIndex = -1;

			if(DataInput.eof() != true)
			{
				while(!DataInput.eof())
				{
					if(DataInput.eof() != true)
					{
						DataInput >> strInput;
						if(DataInput.eof() != true)
						{
							DataInput >> intX;
							if(DataInput.eof() != true)
							{
								DataInput >> intY;
								if(DataInput.eof() != true)
								{
									DataInput >> bAggressive;
									if(intX >= 0 && intX < _TactMapW && intY >= 0 && intY < _TactMapH)
									{
										//Load Data to the temp avatar...
										Temp.AssignRaceViaString(strInput);
										Temp.SetDungeonX(intX);
										Temp.SetDungeonY(intY);
										Temp.SetAggress(bAggressive);
										//On the fly data manipulation...
										Temp.SetFName(_MonData[Temp.GetRace()].MonName);
										if(_MonData[Temp.GetRace()].data[MonBaseInt] > 1) 
											Temp.SetSInt((int(rand() % _MonData[Temp.GetRace()].data[MonBaseInt]) + 1) + _MonData[Temp.GetRace()].data[MonIntMod]);
										else
											Temp.SetSInt(1);
										Temp.SetAC(_MonData[Temp.GetRace()].data[MonAC]);
										if(_MonData[Temp.GetRace()].data[MonNumHD] > 1)
										{
											//Maxing out the base HD roll...
											Temp.SetHP(8);
											//Randomly rolling for each of the remaining...
											for(int a = 0; a < (_MonData[Temp.GetRace()].data[MonNumHD] - 1); a++)
											{
												hp = (int(rand() % 8) + 1);
												Temp.SetHP(Temp.GetHP() + hp);
											}
											//Add final modifier...
											Temp.SetHP(Temp.GetHP() + _MonData[Temp.GetRace()].data[MonHDMod]);
										}
										else Temp.SetHP(8 + _MonData[Temp.GetRace()].data[MonHDMod]);

										//Final verification before assigning to list - M. White 24 July, 2019
										if(Temp.GetRace() >= 0 && Temp.GetRace() < MAXMONS)
										{
											_ListMobAssigns.insertBack(Temp);
										}
										else MessageBox(NULL, "Loading Mobs Error - Stage 6", "LoadMobList()", MB_OK);
									}
									else MessageBox(NULL, "Loading Mobs Error - Stage 5", "LoadMobList()", MB_OK);
								}
								else MessageBox(NULL, "Loading Mobs Error - Stage 4", "LoadMobList()", MB_OK);
							}
							else MessageBox(NULL, "Loading Mobs Error - Stage 3", "LoadMobList()", MB_OK);
						}
						else MessageBox(NULL, "Loading Mobs Error - Stage 2", "LoadMobList()", MB_OK);
					}
					else MessageBox(NULL, "Loading Mobs Error - Stage 1", "LoadMobList()", MB_OK);
				}
			}
			else MessageBox(NULL, "Loading Mobs Error - Stage 0", "LoadMobList()", MB_OK);
			//Reassign data according to new data - M. White 26 July, 2019
			if(_MobArray != NULL)
			{
				if(_intNumMobsAssigned > 1) delete [] _MobArray;
				else delete _MobArray;
				_MobArray = NULL;
			}
			_intNumMobsAssigned		= 0;
			_intTotalXP_Assigned	= 0;
			for(int z = 0; z < int(_ListMobAssigns.length()); z++)
			{
				_ListMobAssigns.getNodes(z, Temp);
				//Count how many mobs are present...
				_intNumMobsAssigned++;
				//Calclate the total XP assigned for the editor screen
				_intTotalXP_Assigned += _MonData[Temp.GetRace()].data[MonXP];
			}
			//Convert the Linked List to an Array - M. White 25 August, 2019
			if		(_intNumMobsAssigned > 1)
			{
				_MobArray = new Avatar[_intNumMobsAssigned];
				for(intX = 0; intX < _intNumMobsAssigned; intX++)
				{
					Temp.Reset();
					_ListMobAssigns.getNodes(intX, Temp);
					_MobArray[intX] = Temp;
				}
			}
			else if (_intNumMobsAssigned == 1)
			{
				_ListMobAssigns.getNodes(0, Temp);
				_MobArray = new Avatar();
				_MobArray->Copy(Temp);
			}
			//force an assignment of mob data to the maps...
			if(_intNumMobsAssigned > 1)
				for(int i = 0; i < _intNumMobsAssigned; i++)
					_TactMap[_MobArray[i].GetDungeonX()][_MobArray[i].GetDungeonY()].AvatarIndex = i;
			else
				_TactMap[_MobArray->GetDungeonX()][_MobArray->GetDungeonY()].AvatarIndex = 0;
		}
	}
	DataInput.close();

	//Clean out the linkedList
	if(int(_ListMobAssigns.length()) > 0)
		while(_ListMobAssigns.isEmpty() != true) _ListMobAssigns.popFront();
	_bLoadMobs = false;

	return 0;
}
DWORD WINAPI SaveMobList(LPVOID lpParameter)
{
	Avatar		Temp;
	ofstream	DataOutput;
	DataOutput.open(_FileNameMobs.c_str());
	_IsLoadingMobs = true;
	if(DataOutput.is_open() == true)
	{
		if(_intNumMobsAssigned > 0)
		{
			DataOutput << _intNumMobsAssigned << "\n";
			if(_intNumMobsAssigned > 1)
			{
				for(int i = 0; i < _intNumMobsAssigned; i++)
				{
					Temp = _MobArray[i];
					DataOutput << Temp.GetRaceEnumName() << " " << Temp.GetDungeonX() << " " << Temp.GetDungeonY() << " ";
					if(Temp.GetAggress() == true)	DataOutput << 1;
					else							DataOutput << 0;
					if(i < (_intNumMobsAssigned - 1)) DataOutput << "\n";
				}
			}
			else
			{
				DataOutput << _MobArray->GetRaceEnumName()	<< " "
						   << _MobArray->GetDungeonX()		<< " "
						   << _MobArray->GetDungeonY()		<< " "
						   << _MobArray->GetAggress();
			}
		}
		else DataOutput << "0";
	}
	DataOutput.close();
	_IsLoadingMobs = false;
	return 0;
}
DWORD WINAPI LoadStartPoints(LPVOID lpParameter)
{
	string			strInput1, strInput2;
	int				intX, intY;
	StartLocation	tmpSL;
	ifstream		DataInput;
	DataInput.open("data\\s\\sp.dat");
	if(DataInput.is_open() == true)
	{
		//Clear the grabage
		tmpSL.Reset(); intX = -1; intY = -1; strInput1 = ""; strInput2 = "";
		//Clear out any old listings...
		if(_startPoints.length() > 0)
		{
			while(_startPoints.length() > 0)
				_startPoints.popFront();
		}
		while(!DataInput.eof())
		{
			if(!DataInput.eof())
			{
				DataInput >> strInput1;
				if(!DataInput.eof())
				{
					DataInput >> strInput2;
					if(!DataInput.eof())
					{
						DataInput >> intX;
						if(!DataInput.eof())
						{
							DataInput >> intY;
							if(int(strInput1.length()) > 0)
							{
								if(int(strInput2.length()) > 0)
								{
									if(intX >= 0 && intX < _TactMapW)
									{
										if(intY >= 0 && intY < _TactMapH)
										{
											tmpSL.SetNickName(strInput1);
											tmpSL.SetScene(strInput2);
											tmpSL.SetX(intX);
											tmpSL.SetY(intY);
											_startPoints.insertBack(tmpSL);
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	DataInput.close();
	_paintSomething	= true; _paintWholeScrn	= true;
	return 0;
}
DWORD WINAPI SaveStartPoints(LPVOID lpParameter)
{
	ofstream		DataOutput;
	int				length;
	StartLocation	tmpSL;
	string			tmpStr;
	DataOutput.open("data\\s\\sp.dat");
	if(DataOutput.is_open() == true)
	{
		tmpSL.Reset();
		length = int(_startPoints.length());
		if(length > 0)
		{
			for(int i = 0; i < length; i++)
			{
				_startPoints.getNodes(i, tmpSL);

				tmpStr = tmpSL.GetNickName();
				for(int j = 0; j < int(tmpStr.length()); j++)
					if(tmpStr[j] == ' ') tmpStr = '_';
				DataOutput << tmpStr				<< " " 
						   << tmpSL.GetScene()		<< " "
						   << tmpSL.GetX()			<< " "
						   << tmpSL.GetY();
				if(i < length - 1) DataOutput << "\n";
			}
		}
	}
	DataOutput.close();
	return 0;
}
DWORD WINAPI LoadSavePaths(LPVOID lpParameter)
{
	ifstream DataInput;
	ofstream DataOutput;
	PathNode tmpNode;
	string tmpName;
	string errMsg;
	errMsg = "The Path File associated with the\nmap you are loading is corrupt";
	int i = 0, j = 0;
	int X, Y, Dir;
	bool error;
	X = 0; Y = 0; Dir = 0; error = false;
	if(_bLoadPath == true)
	{
		//We wont worry about displaying a load symbol for paths because the map loading
		//will already have a display showing progress. Map Paths should be loaded long
		//before the map gets done - M. White 11 August, 2019

		DataInput.open(_FileNamePaths.c_str());
		if(DataInput.is_open() == true)
		{
			DataInput >> j;
			_NumPathsOnMap = int(j * 2);
			//Checking that integer value is a) above 0, b) is even - M. White 14 August, 2019
			if		(_NumPathsOnMap < 2)		{ MessageBox(NULL, errMsg.c_str(), "File Error - AS001", MB_OK); }
			else if	(_NumPathsOnMap % 2 != 0)	{ MessageBox(NULL, errMsg.c_str(), "File Error - AS002", MB_OK); }
			else
			{
				//Create the array necessary to hold all of the data - M. White 14 August, 2019
				if(_MapPaths != NULL) { delete [] _MapPaths; _MapPaths = NULL; } _MapPaths = new MapPath[_NumPathsOnMap];
				//Skip each odd-integer element - M. White August, 2019
				for(j = 0; j < _NumPathsOnMap; j += 2)
				{
					//Get and Set the Path's Name - M. White 14 August, 2019
					DataInput >> tmpName; _MapPaths[j].SetName(tmpName); _MapPaths[j+1].SetName(tmpName);
					do
					{
						if(DataInput.eof() != true)
						{
							DataInput >> X;
							if(DataInput.eof() != true)
							{
								DataInput >> Y;
								if(DataInput.eof() != true)
								{
									DataInput >> Dir;
									tmpNode.SetX(X); tmpNode.SetY(Y), tmpNode.SetDir(Dir);
									_MapPaths[j].Path.insertBack(tmpNode);
									_MapPaths[j].Length++;
								}
								else { MessageBox(NULL, errMsg.c_str(), "File Error - EOF003", MB_OK); error = true; break; }
							}
							else { MessageBox(NULL, errMsg.c_str(), "File Error - EOF002", MB_OK); error = true; break; }
						}
						else { MessageBox(NULL, errMsg.c_str(), "File Error - EOF001", MB_OK); error = true; break; }
					}while(Dir != -1);
					if(error == false)
					{
						//There appears to be no problems loading - M. White 14 August, 2019
						//After we find the last node of the path, we create a reverse copy of it - M. White 14 August, 2019
						for(i = _MapPaths[j].Length - 1; i >= 0; i--)
						{
							_MapPaths[j].Path.getNodes(i, tmpNode);
							_MapPaths[j+1].Path.insertBack(tmpNode);
							_MapPaths[j+1].Length++;
						}
					}
				}
			}
		}
		DataInput.close();
	}
	else
	{
		DataOutput.open(_FileNamePaths.c_str());
		if(DataOutput.is_open() == true)
		{
			_IsLoading = true;
			//Saved how many paths there are - M. White 14 August, 2019
			DataOutput << int(_NumPathsOnMap / 2) << "\n";
			for(i = 0; i < _NumPathsOnMap; i += 2)
			{
				DataOutput << _MapPaths[i].GetName() << " ";
				for(j = 0; j < int(_MapPaths[i].GetLength()); j++)
				{
					_MapPaths[i].Path.getNodes(j, tmpNode);
					DataOutput << tmpNode.GetX() << " " << tmpNode.GetY() << " " << tmpNode.GetDir();
					if(j < int(_MapPaths[i].GetLength()) - 1) DataOutput << " ";
				}
				if(i < _NumPathsOnMap - 2) DataOutput << "\n";
			}
			_IsLoading = false;
		}
		DataOutput.close();
		_IsLoading = false;
	}
	return 0;
}
DWORD WINAPI LoadSaveAvatars(LPVOID lpParameter)
{
/*
AvFileRef			*_AvatarRef			= NULL;
int					_numAvatarRef		= 0;
bool				_loadAvatarRefs		= false;
*/
	ifstream	DataInput;
	ofstream	DataOutput;
	AvFileRef	localRefData;
	int			localCount;

	if(_loadAvatarRefs == true)
	{
		if(_AvatarRef != NULL)
		{
			if(_numAvatarRef > 1)	delete [] _AvatarRef;
			else					delete _AvatarRef;
			_AvatarRef = NULL;
			_numAvatarRef = 0;
		}
		DataInput.open("data//pc//pc_list.dat");
		if(DataInput.is_open() == true)
		{
			DataInput >> _numAvatarRef;
			if(_numAvatarRef > 0)
			{
				if(_numAvatarRef > 1)	_AvatarRef = new AvFileRef[_numAvatarRef];
				else					_AvatarRef = new AvFileRef;
				localCount = 0;
				while(DataInput.eof() != true)
				{
					DataInput >> localRefData.UniqueID; DataInput >> localRefData.AvDisplayName;
					if(localRefData.UniqueID >= 0 && int(localRefData.AvDisplayName.length()) > 0)
					{
						_AvatarRef[localCount].UniqueID			= localRefData.UniqueID;
						_AvatarRef[localCount].AvDisplayName	= localRefData.AvDisplayName;
						localCount++;
					}
					else
					{
						//There was a definite data error and we're totally cleaning out the data
						if(_numAvatarRef > 1)	_AvatarRef = new AvFileRef[_numAvatarRef];
						else					_AvatarRef = new AvFileRef;
						_numAvatarRef = 0;
						break;
					}
				}
			}
			else MessageBox(NULL, "There are no Characters. Please make some to save.", "File Error", MB_OK);
		}
		DataInput.close();
	}
	else
	{
		if(_AvatarRef != NULL && _numAvatarRef > 0)
		{
			DataOutput.open("data//pc//pc_list.dat");
			if(DataOutput.is_open() == true)
			{
				DataOutput << _numAvatarRef << "\n";
				for(localCount = 0; localCount < _numAvatarRef; localCount++)
				{
					DataOutput << _AvatarRef[localCount].UniqueID << " "
							   << _AvatarRef[localCount].AvDisplayName;
					if(localCount < _numAvatarRef - 1) DataOutput << "\n";
				}
			}
			DataOutput.close();
		}
		else MessageBox(NULL, "You must create an avatar before you can attempt to save it", "Required", MB_OK);
	}
	return 0;
}
DWORD WINAPI LoadFOW(LPVOID lpParameter)
{
	ifstream	DataInput;
	int			i = 0;

	//Sleep while main map is loading
	while(_IsLoading == true) Sleep(1000);

	_IsLoadingFOW = true;
	DataInput.open(_FileNameFOW.c_str());
	if(DataInput.is_open() == true)
		for(int y = 0; y < _TactMapH; y++)
			for(int x = 0; x < _TactMapW; x++)
			{
                DataInput >> i; 
				if(i == 1)	_TactMap[x][y].SetVisited(true);
				else		_TactMap[x][y].SetVisited(false);
			}
	DataInput.close();
	_IsLoadingFOW = false;
//	GetTacticalMapData(_MAPVIEW);
	_paintSomething	= true;
	_paintMainMap	= true;
	return 0;
}
DWORD WINAPI SaveFOW(LPVOID lpParameter)
{
	ofstream DataOutput;

	_IsLoadingFOW = true;
	DataOutput.open(_FileNameFOW.c_str());
	if(DataOutput.is_open() == true)
	{
		for(int y = 0; y < _TactMapH; y++)
		{
			for(int x = 0; x < _TactMapW; x++)
			{
				if(_TactMap[x][y].GetVisited() == true)	DataOutput << "1"; else DataOutput << "0";
				if(x < _TactMapW - 1) DataOutput << " ";
			}
			if(y < _TactMapH - 1) DataOutput << "\n";
		}
	}
	else MessageBox(NULL, "Did not open FOW", "SaveFOW()", MB_OK);
	DataOutput.close();
	_IsLoadingFOW = false;
	return 0;
}
void ResetIntLinkStruct()
{
	_tmpLS.DestinationMapName	= "No_Map_Selected";
	_tmpLS.NickName				= "";
	_tmpLS.DestMapType			= -1;
	_tmpLS.destX				= -1;
	_tmpLS.destY				= -1;
	_tmpLS.exitX				= -1;
	_tmpLS.exitY				= -1;
}
void ShowLinkData(int Stage)
{
	char	chrData[128];
	string	strData;
	string	msg;
	
	sprintf(chrData, "Stage: %d\n", Stage);							msg = chrData;

	sprintf(chrData, "%s\n", _tmpLS.NickName);						strData = chrData;
	sprintf(chrData, "%s\n", _tmpLS.DestinationMapName);			strData += chrData;
	sprintf(chrData, "Dest: %d %d\n", _tmpLS.destX, _tmpLS.destY);	strData += chrData;
	sprintf(chrData, "Orig: %d %d\n", _tmpLS.exitX, _tmpLS.exitY);	strData += chrData;

	MessageBox(NULL, strData.c_str(), msg.c_str(), MB_OK);
}
void PaintAShadow(HDC hDC, int Red, int Grn, int Blu, RECT &rect)
{
	HBRUSH hB; hB = CreateSolidBrush(RGB(Red, Grn, Blu));  FillRect(hDC, &rect, hB); DeleteObject(hB);
}
void DeleteCharacter(string txtFileName)
{
	int status = -1;
	string localFileName;
	if(MessageBox(NULL, "Do you want to delete this Character?", "Verify", MB_YESNO) == IDYES)
	{
		localFileName = "data\\pc\\";
		localFileName += txtFileName;
		localFileName += ".dat";
		status = remove(txtFileName.c_str());
		if(status != 0) MessageBox(NULL, "Character File was not deleted", "Error", MB_OK);
	}
}
void SaveBasicAvatar(int AvatarUI)
{
	ofstream	O;
	string		local;
	string		work;
	char		tmp[128];

	sprintf(tmp, "%d", AvatarUI);

	local = "data\\pc\\"; local += tmp; local += ".dat";

	O.open(local.c_str());
	if(O.is_open() == true)
	{
		//Name
		work = _TempAvatar->GetFName(); for(int i = 0; i < int(work.length()); i++) if(work[i] == ' ') work[i] = '_';
		O << work << " ";
		//Starting Attributes
		O << _TempAvatar->GetSStr() << " " << _TempAvatar->GetStrE() << " " << _TempAvatar->GetSDex() << " " << _TempAvatar->GetSCon() << " "
		  << _TempAvatar->GetSInt() << " " << _TempAvatar->GetSWis() << " " << _TempAvatar->GetSCha() << " "
		  << _TempAvatar->GetSCom() << " "
		//Sex Race Monster?
		  << _TempAvatar->GetSex()  << " " << _TempAvatar->GetRace() << " " << _TempAvatar->GetRaceIsMonster() << " "
		//Class Stuff
		  << _TempAvatar->GetClassRef() << " " << _TempAvatar->GetNumMaxWPslots() << "\n";
		for(int x = 0; x < MAX_WEAPONPRO; x++)
		{
			O << _TempAvatar->GetWPSlotCost(x);
			if(x < MAX_WEAPONPRO - 1)	O << " ";
			else						O << "\n";
		}
		//c == Class
		for(int c = 0; c < maxNumClasses; c++)
		{
			//l == Level
			for(int l = 0; l < maxHpRolls; l++)
			{
				O << _TempAvatar->GetHPRoll(c, l);
				if(l < maxHpRolls - 1) O << " ";
			}
			if(c < maxNumClasses - 1)	O << "\n";
		}
		O << "\n";
		work = _TempAvatar->GetStartMapName();
		for(int i = 0; i < int(work.length()); i++)
			if(work[i] == ' ') work[i] = '_';
		O << _TempAvatar->getNumSRs()   << " "
		  << _TempAvatar->getPortrait() << " "
		  << _TempAvatar->GetLaw()		<< " "
		  << _TempAvatar->GetGood();
	}
	O.close();
}
void LoadBasicAvatar(int AvatarUI)
{
	ifstream		I;
	int				i;
	string			local;
	string			work;
	char			tmp[128];

	sprintf(tmp, "%d", AvatarUI); local = "data\\pc\\"; local += tmp; local += ".dat";

	I.open(local.c_str());
	if(I.is_open() == true)
	{
		_TempAvatar->SetUI(AvatarUI);
		//Name
		I >> work;	_TempAvatar->SetFName(work);
		I >> i;		_TempAvatar->SetSStr(i);
		I >> i;		_TempAvatar->SetStrE(i);
		I >> i;		_TempAvatar->SetSDex(i);
		I >> i;		_TempAvatar->SetSCon(i);
		I >> i;		_TempAvatar->SetSInt(i);
		I >> i;		_TempAvatar->SetSWis(i);
		I >> i;		_TempAvatar->SetSCha(i);
		I >> i;		_TempAvatar->SetSCom(i);
		I >> i;		_TempAvatar->SetSex(i);
		I >> i;		_TempAvatar->SetRace(i);
		I >> i;
		if(i == 0)	_TempAvatar->SetRaceIsMonster(false);
		else		_TempAvatar->SetRaceIsMonster(true);
		I >> i;		_TempAvatar->SetClassByRef(i);
		I >> i;		_TempAvatar->SetMaxNumWPs(i);
		for(int x = 0; x < MAX_WEAPONPRO; x++) { I >> i; _TempAvatar->AssignWeaponSlot(x, i); }
		//c == Class
		for(int c = 0; c < maxNumClasses; c++)
		{
			//l == Level
			for(int l = 0; l < maxHpRolls; l++)
			{
				I >> i;
				_TempAvatar->SetHPRoll(c, l, i);
			}
		}
		I >> i;		_TempAvatar->setNumSRs(i);
		I >> i;		_TempAvatar->setPortrait(i);
		I >> i;		_TempAvatar->SetLaw(i);
		I >> i;		_TempAvatar->SetGood(i);
	}
	//Set an AC until upgrade
	switch(_TempAvatar->GetClass(0))
	{
	case cZeroLvl: case cFighter: case cPaladin: case cRanger:
		_TempAvatar->SetAC(6 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
		break;
	case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
	case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
		_TempAvatar->SetAC(9 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
		break;
	case cCleric: case cDruid:
		_TempAvatar->SetAC(8 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
		break;
	case cThief: case cBard: case cNinja:
		_TempAvatar->SetAC(7 + _DEXData[DexDA_][_TempAvatar->GetSDex() - 1]);
		break;
	};
	_TempAvatar->SetCurHP(_TempAvatar->GetHP());
	I.close();
}
void SaveBaseAvatarList()
{
	ofstream	O;
	string		local;
	string		work;
	O.open("data\\pc\\pc_list.dat");
	if(O.is_open() == true)
	{
		O << _numAvatarRef;
		if(_numAvatarRef > 0)
		{
			if(_numAvatarRef > 1)
			{
				O << "\n";
				for(int i = 0; i < _numAvatarRef; i++)
				{
					if(_AvatarRef[i].UniqueID >= 0)
					{
						O << _AvatarRef[i].UniqueID << " " << _AvatarRef[i].AvDisplayName;
						if(i < _numAvatarRef - 1) O << "\n";
					}
				}
			}
			else O << "\n" << _AvatarRef->UniqueID << " " << _AvatarRef->AvDisplayName;
		}
	}
	else MessageBox(NULL, "SaveBasicAvatarList() unable to open the file: pc_list.dat", "File Error", MB_OK);
	O.close();
}
void LoadBaseAvatarList()
{
	ifstream		I;
	int				Count;
	I.open("data\\pc\\pc_list.dat");
	if(I.is_open() == true)
	{
		I >> Count;
		if		(Count > 1)
		{
			_AvatarRef = new AvFileRef[Count];
			for(int i = 0; i < Count; i++)
			{
				if(I.eof() != true)
				{
					I >> _AvatarRef[i].UniqueID;
					if(I.eof() != true) I >> _AvatarRef[i].AvDisplayName;
					else
					{
						MessageBox(NULL, "Loading pc_list.dat file is corrupt - stage 2", "File Error", MB_OK);
						delete [] _AvatarRef; Count = 0; break;
					}
				}
				else
				{
					MessageBox(NULL, "Loading pc_list.dat file is corrupt - stage 1 (L)", "File Error", MB_OK);
					delete [] _AvatarRef; Count = 0; break;
				}
			}
		}
		else if	(Count == 1)
		{
			_AvatarRef = new AvFileRef();
			if(I.eof() != true) 
			{
				I >> _AvatarRef->UniqueID;
				if(I.eof() != true) I >> _AvatarRef->AvDisplayName;
				else
				{
					MessageBox(NULL, "Loading pc_list.dat file is corrupt - stage 2", "File Error", MB_OK);
					delete _AvatarRef; Count = 0; 
				}
			}
			else
			{
				MessageBox(NULL, "Loading pc_list.dat file is corrupt - stage 1 (NL)", "File Error", MB_OK);
				delete _AvatarRef; Count = 0; 
			}
		}
		else { if(_AvatarRef != NULL) _AvatarRef = NULL; }
		_numAvatarRef = Count;
	}
	else MessageBox(NULL, "LoadBasicAvatarList() unable to open the file: pc_list.dat", "File Error", MB_OK);
	I.close();
}
void SaveGame(int index)
{
	ofstream	O;
	int			x;
	char		tmp[8];
	string		local;
	string		work;

	//Less than because that is 8-digits of numbers...
	//We don't think people will play THAT much!
	if(index >= 0 && index < 1111111)//Yes, 1,111,111 - save last position for null-termination
	{
		sprintf(tmp, "%d", index);
		local = "save\\"; local += tmp; local += ".dat";
		O.open(local.c_str());
		if(O.is_open() == true)
		{
			//We want to know which Avatar is associated with this game...
			O	<< _TempAvatar->GetUI() << " "
			//Where it's at on a particular map...
				<< _TempAvatar->GetDungeonX() << " " << _TempAvatar->GetDungeonY() << " ";
			//There weapon proficiencies earned since starting the game...
			for(x = 0; x < MAX_WEAPONPRO; x++) O << _TempAvatar->GetWPSlotCost(x) << " ";
			O << _TempAvatar->GetAC() << " ";
			for(x = 0; x < maxNumClasses; x++)
			{
				O << _TempAvatar->GetClassXP(x) << " ";
			}
			O << _TempAvatar->GetCurHP() << "\n";
			//c == Class
			for(int c = 0; c < maxNumClasses; c++)
			{
				//l == Level
				for(int l = 0; l < maxHpRolls; l++)
				{
					O << _TempAvatar->GetHPRoll(c, l);
					if(l < maxHpRolls - 1) O << " ";
				}
				if(c < maxNumClasses - 1)	O << " ";
				else						O << "\n";
			}
			//We want to know the name of the current map they are on...
			work = _TempAvatar->GetStartMapName();
			for(x = 0; x < int(work.length()); x++) if(work[x] == ' ') work[x] = '_';
			O << work << " ";
			//...and the maps the campaign has gone through....
			if(int(_ActiveCampaign->MapList.length()) > 0)
				for(x = 0; x < int(_ActiveCampaign->MapList.length()); x++)
				{
					_ActiveCampaign->MapList.getNodes(x, work);
					O << work;
					if(x < int(_ActiveCampaign->MapList.length() - 1)) O << " ";
				}
		}
		O.close();
	}
}
void LoadGame(int index)
{
	ifstream	I;
	int			i, x;
	int			curHP;
	char		tmp[8];
	string		local;
	string		work;

	_LoadCampaign = true;
	//Less than because that is 8-digits of numbers...
	//We don't think people will play THAT much!
	if(index >= 0 && index < 10000000)
	{
		curHP = 0;
		sprintf(tmp, "%d", index);
		local = "save\\"; local += tmp; local += ".dat";
		I.open(local.c_str());
		if(I.is_open() == true)
		{
			if(_TempAvatar == NULL) _TempAvatar = new Avatar();
			else					_TempAvatar->Reset();
			I >> i;
			if(i >= 0)
			{
				//We'll jump over and load the basics from the saved avatar in an export file
				_TempAvatar->SetUI(i);
				//Basics will get over-written by campaign specific data as needed...
				LoadBasicAvatar(_TempAvatar->GetUI());
				//Over-writing pre-data
				if(I.eof()	!= true) { I >> i; _TempAvatar->SetDungeonX(i); _TileWalkerX = i; }
				if(I.eof()	!= true) { I >> i; _TempAvatar->SetDungeonY(i); _TileWalkerY = i; }
				for(x = 0; x < MAX_WEAPONPRO; x++) if(I.eof() != true) { I >> i; _TempAvatar->AssignWeaponSlot(x, i); }
				if(I.eof()	!= true) { I >> i; _TempAvatar->SetAC(i); }
				for(x = 0; x < maxNumClasses; x++)
				{
					 if(I.eof() != true)
					 {
						 //Adding xp counts
						 I >> i; _TempAvatar->SetClassXP(x, i);
						 //Assigning level according to xp assigned...
						 if			(i >= XPCharts[_TempAvatar->GetClass(x)][10])	_TempAvatar->SetClassLvl(x, 10);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][9])	_TempAvatar->SetClassLvl(x, 9);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][8])	_TempAvatar->SetClassLvl(x, 8);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][7])	_TempAvatar->SetClassLvl(x, 7);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][6])	_TempAvatar->SetClassLvl(x, 6);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][5])	_TempAvatar->SetClassLvl(x, 5);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][4])	_TempAvatar->SetClassLvl(x, 4);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][3])	_TempAvatar->SetClassLvl(x, 3);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][2])	_TempAvatar->SetClassLvl(x, 2);
						 else if	(i >= XPCharts[_TempAvatar->GetClass(x)][1])	_TempAvatar->SetClassLvl(x, 1);
						 else														_TempAvatar->SetClassLvl(x, 0);
					}
				}
				if(I.eof() != true) { I >> curHP; }
				//c == Class
				for(int c = 0; c < maxNumClasses; c++)
				{
					//l == Level
					for(int l = 0; l < maxHpRolls; l++)
						if(I.eof()	!= true)
						{
							I >> i; _TempAvatar->SetHPRoll(c, l, i);
						}
				}

				if(_TempAvatar->GetNumClass() > 1)
				{
					//TODO: Mod for Multi-class'ers
				}
				else
				{
					switch(_TempAvatar->GetClass(0))
					{
					case cZeroLvl: case cFighter: case cPaladin: case cRanger:
						_TempAvatar->SetHP(_TempAvatar->GetHP() + 
							(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
						break;
					case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
					case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
						if(_TempAvatar->GetClassLvl(0) < 11)
						{
							if(_TempAvatar->GetSCon() > 15)
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_TempAvatar->GetClassLvl(0) * 2));//Max +2 for non-fighters
							else
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
						}
						else
						{
							if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
							else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
							//Adjust for any levels above hit die levels...
							_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 10) * 1));
						}
						break;
					case cCleric: case cDruid:
						if(_TempAvatar->GetClassLvl(0) < 10)
						{
							if(_TempAvatar->GetSCon() > 15)
								_TempAvatar->SetHP(_TempAvatar->GetHP() + (_TempAvatar->GetClassLvl(0) * 2));
							else
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
						}
						else
						{
							if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * 2));//Max +2 for non-fighters
							else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
							//Adjust for any levels above hit die levels...
							_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 9) * 2));
						}
						break;
					case cThief: case cBard: case cNinja:
						if(_TempAvatar->GetClassLvl(0) < 11)
						{
							if(_TempAvatar->GetSCon() > 15)
								_TempAvatar->SetHP(_TempAvatar->GetHP() + (_TempAvatar->GetClassLvl(0) * 2));//Max +2 for non-fighters
							else
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
						}
						else
						{
							if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
							else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
							//Adjust for any levels above hit die levels...
							_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 10) * 2));
						}
						break;
					};
				}
				//Set Current AFTER assigning Hp rolls...
				_TempAvatar->SetCurHP(curHP);
				//Hold the current map the Avatar is on...
				if(I.eof()	!= true)
				{ 
					I >> work; local = work;
				}
				//Load the maps already visited (in order)...
				while(I.eof() != true)
				{
					I >> work;
					if(int(work.length()) > 0) _TempAvatar->SetStartTown("Visited", work);
				}
				//Set the map that the Avatar is on...
				_TempAvatar->SetStartMapName(local);
				if(_TempAvatar->GetCurHP() < 0)	NegativeToHit = _TempAvatar->GetCurHP();
				else							NegativeToHit = 0;
			}
		}
		I.close();

		//Load base map...
		//These two 's' directory references needs re-coding to be flexable with 'w'
		_FileNameMap    = "data\\s\\";
		_FileNameMap   += _TempAvatar->GetStartMapName();
		_FileNameMap   += ".dat";
        _myHandleOne	= CreateThread(0, 0, LoadWorldScene, 0, 0, &_myThreadIDOne);
		_FileNameLinks	= "data\\s\\";
		_FileNameLinks += _TempAvatar->GetStartMapName();
		_FileNameLinks += "_Links.dat";
		_myHandleFou = CreateThread(0, 0, LoadLinks, 0, 0, &_myThreadIDFou);

		//Load the Mobs...
		sprintf(tmp, "%d", _ActiveCampaign->GetCampaignID());
		_FileNameMobs  = "save\\";
		_FileNameMobs += tmp;
		_FileNameMobs += ".";
		_FileNameMobs += _TempAvatar->GetStartMapName();
		_FileNameMobs += "_mob.dat";
		_myHandleTwo = CreateThread(0, 0, LoadMobList, 0, 0, &_myThreadIDTwo);

		//Load the FOW...
		_FileNameFOW   = "save\\";
		_FileNameFOW  += tmp;
		_FileNameFOW  += ".";
		_FileNameFOW  += _TempAvatar->GetStartMapName();
		_FileNameFOW  += "_fow.dat";
		_myHandleThr = CreateThread(0, 0, LoadFOW, 0, 0, &_myThreadIDThr);
	}
	_LoadCampaign = false;
}
void LoadCampaignToDelete(int index)
{
	ifstream	I;
	int			i, x;
	int			curHP;
	char		tmp[8];
	string		local;
	string		work;

	_LoadCampaign = true;
	//Less than because that is 8-digits of numbers...
	//We don't think people will play THAT much!
	if(index >= 0 && index < 10000000)
	{
		curHP = 0;
		sprintf(tmp, "%d", index);
		local = "save\\"; local += tmp; local += ".dat";
		I.open(local.c_str());
		if(I.is_open() == true)
		{
			if(_TempAvatar == NULL) _TempAvatar = new Avatar();
			else					_TempAvatar->Reset();
			I >> i;
			if(i >= 0)
			{
				//Soak up all of the data in the file to get to the list of maps visited----------------//
				_TempAvatar->SetUI(i);																	//
				if(I.eof()	!= true) { I >> i;  }														//
				if(I.eof()	!= true) { I >> i;  }														//
				for(x = 0; x < MAX_WEAPONPRO; x++) if(I.eof() != true) { I >> i;  }						//
				if(I.eof()	!= true) { I >> i; }														//
				for(x = 0; x < maxNumClasses; x++) { if(I.eof() != true) I >> i; }						//
				if(I.eof() != true) { I >> curHP; }														//
				for(int c = 0; c < maxNumClasses; c++)													//
					for(int l = 0; l < maxHpRolls; l++) if(I.eof()	!= true) { I >> i; }				//
				//--------------------------------------------------------------------------------------//
				//Hold the list of maps visited
				if(I.eof()	!= true) { I >> work; _ListWorldScenes.insertBack(work); }
				while(I.eof() != true) { I >> work; if(int(work.length()) > 0) _ListWorldScenes.insertBack(work); }
			}
		}
		I.close();
	}
	_LoadCampaign = false;
}
void LoadCampaignList()
{
	ifstream In;
	int i, x;
	char	chMsg[128];
	string	tmpStr;
	tmpStr = "save\\CampaignList.dat";
	In.open(tmpStr.c_str());
	if(In.is_open() == true)
	{
		if(In.eof() != true)
		{
			In >> _NumCampaigns;
			if(_NumCampaigns > 0)
			{
				if(_NumCampaigns > 1)	_CampaignsAvail = new Campaign[_NumCampaigns];
				else					_CampaignsAvail = new Campaign();
				if(_CampaignsAvail != NULL)
				{
					if(_NumCampaigns > 1)
					{
						for(i = 0; i < _NumCampaigns; i++)
						{
							if(In.eof() != true)
							{
								In >> x;
								if(x >= 0)
								{
									//Verify numbers don't match previous entry...
									if(i >= 1)
									{
										for(int y = 0; y < i; y++)
											if(_CampaignsAvail[y].GetCampaignID() == x)
											{
												_NumCampaigns = 0;
												delete [] _CampaignsAvail; _CampaignsAvail = NULL;
												sprintf(chMsg, "%d", i);
												tmpStr = "Campaign Data Corrupt\nStage 12\n";
												tmpStr += "Iteration: ";
												tmpStr += chMsg;
												MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
												return;
											}
									}
									_CampaignsAvail[i].SetCampaignID(x);
									if(In.eof() != true)
									{
										In >> x;
										if(x >= 0)
										{
											_CampaignsAvail[i].SetAvatarID(x);
											if(In.eof() != true)
											{
												In >> tmpStr;
												if(int(tmpStr.length()) > 0)
												{
													_CampaignsAvail[i].SetNickName(tmpStr);
												}
												else
												{
													_NumCampaigns = 0;
													delete [] _CampaignsAvail; _CampaignsAvail = NULL;
													sprintf(chMsg, "%d", i);
													tmpStr = "Campaign Data Corrupt\nStage 11\n";
													tmpStr += "Iteration: ";
													tmpStr += chMsg;
													MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
													i = _NumCampaigns;//Force completion of iterations
												}
											}
										}
									}
									else
									{
										_NumCampaigns = 0;
										delete [] _CampaignsAvail; _CampaignsAvail = NULL;
										sprintf(chMsg, "%d", i);
										tmpStr = "Campaign Data Corrupt\nStage 10\n";
											tmpStr += "Iteration: ";
											tmpStr += chMsg;
											MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
									}
								}
								else
								{
									_NumCampaigns = 0;
									delete [] _CampaignsAvail; _CampaignsAvail = NULL;
									sprintf(chMsg, "%d", i);
									tmpStr = "Campaign Data Corrupt\nStage 9\n";
									tmpStr += "Iteration: ";
									tmpStr += chMsg;
									MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
								}
							}
							else
							{
								_NumCampaigns = 0;
								delete [] _CampaignsAvail; _CampaignsAvail = NULL;
								sprintf(chMsg, "%d", i);
								tmpStr = "Campaign Data Corrupt\nStage 8\n";
								tmpStr += "Iteration: ";
								tmpStr += chMsg;
								MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
							}
						}
					}
					else
					{
						if(In.eof() != true)
						{
							In >> x;
							if(x >= 0)
							{
								_CampaignsAvail->SetCampaignID(x);
								if(In.eof() != true)
								{
									In >> x;
									if(x >= 0)
									{
										_CampaignsAvail->SetAvatarID(x);
										if(In.eof() != true)
										{
											In >> tmpStr;
											if(int(tmpStr.length()) > 0)	_CampaignsAvail->SetNickName(tmpStr);
											else
											{
												_NumCampaigns = 0;
												delete [] _CampaignsAvail; _CampaignsAvail = NULL;
												tmpStr = "Campaign Data Corrupt\nStage 11\n";
												tmpStr += "Iteration: Single Entry";
												MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
											}
										}
									}
									else
									{
										_NumCampaigns = 0;
										delete _CampaignsAvail; _CampaignsAvail = NULL;
										tmpStr = "Campaign Data Corrupt\nStage 7";
										MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
									}
								}
								else
								{
									_NumCampaigns = 0;
									delete _CampaignsAvail; _CampaignsAvail = NULL;
									tmpStr = "Campaign Data Corrupt\nStage 6";
									MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
								}
							}
							else
							{
								_NumCampaigns = 0;
								delete _CampaignsAvail; _CampaignsAvail = NULL;
								tmpStr = "Campaign Data Corrupt\nStage 5";
								MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
							}
						}
						else
						{
							_NumCampaigns = 0;
							delete _CampaignsAvail; _CampaignsAvail = NULL;
							tmpStr = "Campaign Data Corrupt\nStage 4";
							MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
						}
					}
				}
				else
				{
					_NumCampaigns = 0;
					if(_NumCampaigns > 1)	delete [] _CampaignsAvail;
					else					delete _CampaignsAvail;
					_CampaignsAvail = NULL;
					tmpStr = "Failed to Create Campaign List\nStage 3";
					MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
				}
			}
			else
			{
				//Do nothing other than make sure that the value is at zero
				_NumCampaigns = 0;
			}
		}
		else
		{
			_NumCampaigns = 0;
			tmpStr = "Campaign Data File Corrupt\nStage 1";
			MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
		}
	}
	else
	{
		_NumCampaigns = 0;
		tmpStr = "Failed to open Campaign Data File";
		MessageBox(NULL, tmpStr.c_str(), "LCL() Function", MB_OK);
	}
	In.close();
	//_CampaignsAvail
	//_NumCampaigns
}
void SaveCampaignList()
{
	ofstream	Out;
	int			i;
	string		tmpStr;
	tmpStr = "save\\CampaignList.dat";
	if(_NumCampaigns > 0)
	{
		Out.open(tmpStr.c_str());
		if(Out.is_open() == true)
		{
			Out << _NumCampaigns << "\n";
			if(_CampaignsAvail != NULL)
			{
				if(_NumCampaigns > 1)
				{
					for(i = 0; i < _NumCampaigns; i++)
					{
						Out << _CampaignsAvail[i].GetCampaignID() << " " << _CampaignsAvail[i].GetAvatarID() << " "
							<< _CampaignsAvail[i].GetNickName();
						if(i < _NumCampaigns - 1) Out << "\n";
					}
				}
				else
				{
					Out << _CampaignsAvail->GetCampaignID() << " " << _CampaignsAvail->GetAvatarID() << " "
						<< _CampaignsAvail->GetNickName();
				}
			}
		}
		Out.close();
	}
}
bool LoadCampaignVisitedMaps(int i)
{
	ifstream In;
	char cStr[128];
	string name;
	sprintf(cStr, "save\\%d_v.dat", i);
	In.open(cStr);
	if(In.is_open() == true)
	{
		while(In.eof() != true)
		{
			In >> name;
			_ActiveCampaign->AddMapVisited(name);
		}
	}
	else { In.close(); return false; }
	return true;
}
void MobAI()
{
	Avatar	Temp;
	string	strMsg;
	char	chData[256];

	double	dist	= 0.0;
	int		dmg		= 0;
	int		rand20	= 0;
	int		NewLvl	= 0;
	int		OldCurHp = 0;
	int		HighestComLvl = 0;

	//We don't want to try to access the mobs if they're still be loaded...
	if(_bLoadMobs == true) return;

	//Effect a timer so that the game's action pauses between "combat rounds"
	//The player's action will reset the pause
	if(_bPlayersTurn == false)
	{
		for(int i = 0; i < _intNumMobsAssigned; i++)
		{
			if(_MobArray[i].GetShowSpeach() == true)
			{
				_paintSomething = true;
				_paintMainMap	= true;
				_MobArray[i].DecSpeachTimer();
			}
			//Is this mob angry?
			if(_MobArray[i].GetAggress() == true)
			{
				//Is the Avatar within Melee range?
				dist = getRange(_TileWalkerX, _TileWalkerY, _MobArray[i].GetDungeonX(), _MobArray[i].GetDungeonY());
				if(dist < 2)
				{
					dmg = 0;
					if		(_MonData[_MobArray[i].GetRace()].data[MonNumAttN] > 0)
					{
						//Does the monster have these attacks available...?
						if(_MonData[_MobArray[i].GetRace()].data[MonDmgN01] > 0)
						{
							rand20 = int(rand() % 20) + 1;
							//If they do, then attempt to hit the Avatar's AC and assign dmg if successful
							if(((_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20) <= _TempAvatar->GetAC()) || rand20 == 20)
							{
								dmg += int(rand() % _MonData[_MobArray[i].GetRace()].data[MonDmgN01]) + 1;
								if(dmg < 1) dmg = 1;
								strMsg = _MonData[_MobArray[i].GetRace()].MonName;
								strMsg += " ";
								strMsg += "hits AC: ";
								sprintf(chData, "%d", (_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20));
								strMsg += chData;
								strMsg += ", ";
								strMsg += "doing ";
								sprintf(chData, "%d", dmg);
								strMsg += chData;
								strMsg += " ";
								strMsg += "damage";
								_MSG->AddMessage(strMsg);
								if(_MobArray[i].GetRace() == rBird_ChickenSuper)
								{
									plySnd("sound\\suprchkn.wav"); Sleep(250);
								}
							}
						}
						if(_MonData[_MobArray[i].GetRace()].data[MonDmgN02] > 0)
						{
							rand20 = int(rand() % 20) + 1;
							//If they do, then attempt to hit the Avatar's AC and assign dmg if successful
							if(((_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20) <= _TempAvatar->GetAC()) || rand20 == 20)
							{
								dmg += int(rand() % _MonData[_MobArray[i].GetRace()].data[MonDmgN02]) + 1;
								strMsg = _MonData[_MobArray[i].GetRace()].MonName;
								strMsg += " ";
								strMsg += "hits AC: ";
								sprintf(chData, "%d", (_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20));
								strMsg += chData;
								strMsg += ", ";
								strMsg += "doing ";
								sprintf(chData, "%d", dmg);
								strMsg += chData;
								strMsg += " ";
								strMsg += "damage";
								_MSG->AddMessage(strMsg);
							}
						}
						if(_MonData[_MobArray[i].GetRace()].data[MonDmgN03] > 0)
						{
							rand20 = int(rand() % 20) + 1;
							//If they do, then attempt to hit the Avatar's AC and assign dmg if successful
							if(((_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20) <= _TempAvatar->GetAC()) || rand20 == 20)
							{
								dmg += int(rand() % _MonData[_MobArray[i].GetRace()].data[MonDmgN03]) + 1;
								strMsg = _MonData[_MobArray[i].GetRace()].MonName;
								strMsg += " ";
								strMsg += "hits AC: ";
								sprintf(chData, "%d", (_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20));
								strMsg += chData;
								strMsg += ", ";
								strMsg += "doing ";
								sprintf(chData, "%d", dmg);
								strMsg += chData;
								strMsg += " ";
								strMsg += "damage";
								_MSG->AddMessage(strMsg);
							}
						}
					}
					else if	(_MonData[_MobArray[i].GetRace()].data[MonNumAttW] > 0)
					{
						rand20 = int(rand() % 20) + 1;
						//If they do, then attempt to hit the Avatar's AC and assign dmg if successful
						if(((_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20) <= _TempAvatar->GetAC()) || rand20 == 20)
						{
							for(int j = 0; j < _MonData[_MobArray[i].GetRace()].data[MonDmgW_mult]; j++)
								dmg += int(rand() % _MonData[_MobArray[i].GetRace()].data[MonDmgW_base]) + 1;
							strMsg = _MonData[_MobArray[i].GetRace()].MonName;
							strMsg += " ";
							strMsg += "hits AC: ";
							sprintf(chData, "%d", (_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20));
							strMsg += chData;
							strMsg += " (hitting), ";
							strMsg += "doing ";
							sprintf(chData, "%d", dmg);
							strMsg += chData;
							strMsg += " ";
							strMsg += "damage";
						}
						else
						{
							strMsg = _MonData[_MobArray[i].GetRace()].MonName;
							strMsg += " ";
							strMsg += "hits AC: ";
							sprintf(chData, "%d", (_MonData[_MobArray[i].GetRace()].data[MonTHAC0] - rand20));
							strMsg += chData;
							strMsg += ", and misses";
							plySnd("sound\\swordmiss.wav");
						}
						_MSG->AddMessage(strMsg);
					}
					if(dmg > 0)
					{
						_TempAvatar->SetCurHP(_TempAvatar->GetCurHP() - dmg);
						//We're employing a neg-StartingCon score as the cut off 
						//when the avatar dies...
						if(_TempAvatar->GetCurHP() < (0 - _TempAvatar->GetSCon()))
						{
							NegativeToHit = (0 - _TempAvatar->GetSCon());
							strMsg = "YOU DIED!";
							_MSG->AddMessage(strMsg);
							//Force a game save so if they try to reload they're still dead
							_TempAvatar->SetDungeonX(_TileWalkerX);
							_TempAvatar->SetDungeonY(_TileWalkerY);
							SaveGame(_ActiveCampaign->GetCampaignID());
						}
						else if	(_TempAvatar->GetCurHP() < 0)
						{
							NegativeToHit = _TempAvatar->GetCurHP();
							strMsg = "YOU'RE BELOW ZERO HIT POINTS! Elf needs food badly!";
							_MSG->AddMessage(strMsg);
						}
						_paintSomething = true;
						_PaintSideBar	= true;
					}
				}
			}
			//Check to see if the Mob's Hp is zero or less, and kill them off
			if(_MobArray[i].GetHP() <= 0)
			{
				//Send a message to the screen
			//	rand20 = _MobArray[i].GetHP();
			//	if		(rand20 < -10)	strMsg = "Oh you got me you tazmanian turd! May you rot in your personal hell !!";
			//	else if	(rand20 < -8)	strMsg = "Oh! I curse you! May you never find the treasure you seek!";
			//	else if	(rand20 < -6)	strMsg = "Oh! Agatha! Agatha! I see the light!!";
			//	else if	(rand20 < -4)	strMsg = "Oh! Fooker! That hurt! My comrades will get you!";
			//	else if	(rand20 < -2)	strMsg = "Oh! Man that hurt! My comrades will get you!";
			//	else					strMsg = "Oh! Dang that hurt! My comrades will get you!";
				strMsg = "Your target dies!";
				_MSG->AddMessage(strMsg);

				//Apply XP award to Avatar
				_TempAvatar->AddXP(_MonData[_MobArray[i].GetRace()].data[MonXP]);
				sprintf(chData, "You gain %d xp", _MonData[_MobArray[i].GetRace()].data[MonXP]);
				strMsg = chData;
				_MSG->AddMessage(strMsg);

				//Reassign levels to cover if Avatar went up a level
				for(int x = 0; x < maxNumClasses; x++)
				{
					//reset to zero for future tests
					NewLvl = 0;

					rand20 = _TempAvatar->GetClassXP(x);
					if		(rand20 >= XPCharts[_TempAvatar->GetClass(x)][10])	NewLvl = 10;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][9])	NewLvl = 9;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][8])	NewLvl = 8;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][7])	NewLvl = 7;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][6])	NewLvl = 6;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][5])	NewLvl = 5;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][4])	NewLvl = 4;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][3])	NewLvl = 3;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][2])	NewLvl = 2;
					else if	(rand20 >= XPCharts[_TempAvatar->GetClass(x)][1])	NewLvl = 1;
					else														NewLvl = 0;

					if(NewLvl > _TempAvatar->GetClassLvl(x))
					{
						MessageBox(NULL, "Your Character Went Up A Level", "OK", MB_OK);
						//The old damage to be retained until new HP rolls and Con-bonus is applied...
						//This in normal circumstances will be a negative value..."add" it later...
						OldCurHp = _TempAvatar->GetCurHP() - _TempAvatar->GetHP();

						_TempAvatar->SetClassLvl(x, NewLvl);
						//Note: Assigning HPs to an Avatar automatically resets
						//to zero and counts back up to their full value
						switch(_TempAvatar->GetClass(x))
						{
						//-1's or array indexing purposes
						case cZeroLvl: case cFighter: case cPaladin: case cRanger:
							_TempAvatar->SetHPRoll(x, NewLvl - 1, int(rand() % 10) + 1);
							break;
						case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
						case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
							_TempAvatar->SetHPRoll(x, NewLvl - 1, int(rand() % 4) + 1);
						case cCleric: case cDruid:
							_TempAvatar->SetHPRoll(x, NewLvl - 1, int(rand() % 8) + 1);
							break;
						case cThief: case cBard: case cNinja:	
							_TempAvatar->SetHPRoll(x, NewLvl - 1, int(rand() % 6) + 1);
							break;
						};
						//Modify for Con-Bonus
						//Multi-Classed Character...
						if(_TempAvatar->GetNumClass() > 1)
						{
							if(_TempAvatar->GetNumClass() > 2)
							{
								for(x = 9; x >= 0; x--)
								{
									if(_TempAvatar->GetClassLvl(0) == x && _TempAvatar->GetClassLvl(1) == x && _TempAvatar->GetClassLvl(2) == x)
									{
										HighestComLvl = x;
										x = -1;
									}
								}
							}
							else
							{
								for(x = 9; x >= 0; x--)
								{
									if(_TempAvatar->GetClassLvl(0) == x && _TempAvatar->GetClassLvl(1) == x)
									{
										HighestComLvl = x;
										x = -1;
									}
								}
							}
							//The Best Class will be in index 0
							switch(_TempAvatar->GetClass(0))
							{
							case cZeroLvl: case cFighter: case cPaladin: case cRanger:
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * HighestComLvl));
								break;
							case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
							case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
								if(_TempAvatar->GetClassLvl(0) < 11)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(HighestComLvl * 2));//Max +2 for non-fighters
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * HighestComLvl));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((HighestComLvl - 10) * 1));
								}
								break;
							case cCleric: case cDruid:
								if(_TempAvatar->GetClassLvl(0) < 10)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + (HighestComLvl * 2));
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * HighestComLvl));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((HighestComLvl - 9) * 2));
								}
								break;
							case cThief: case cBard: case cNinja:
								if(_TempAvatar->GetClassLvl(0) < 11)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + (HighestComLvl * 2));//Max +2 for non-fighters
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * HighestComLvl));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((HighestComLvl - 10) * 2));
								}
								break;
							};
						}
						//Single-Class Character...
						else
						{
							switch(_TempAvatar->GetClass(0))
							{
							case cZeroLvl: case cFighter: case cPaladin: case cRanger:
								_TempAvatar->SetHP(_TempAvatar->GetHP() + 
									(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
								break;
							case cWizard: case cAbjurer: case cTransmuter: case cConjurer: case cEnchanter:
							case cDiviner: case cIllusionist: case cInvoker: case cNecromancer:
								if(_TempAvatar->GetClassLvl(0) < 11)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_TempAvatar->GetClassLvl(0) * 2));//Max +2 for non-fighters
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 10) * 1));
								}
								break;
							case cCleric: case cDruid:
								if(_TempAvatar->GetClassLvl(0) < 10)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + (_TempAvatar->GetClassLvl(0) * 2));
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (9 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 9) * 2));
								}
								break;
							case cThief: case cBard: case cNinja:
								if(_TempAvatar->GetClassLvl(0) < 11)
								{
									if(_TempAvatar->GetSCon() > 15)
										_TempAvatar->SetHP(_TempAvatar->GetHP() + (_TempAvatar->GetClassLvl(0) * 2));//Max +2 for non-fighters
									else
										_TempAvatar->SetHP(_TempAvatar->GetHP() + 
											(_CONData[ConHpA][_TempAvatar->GetSCon() - 1] * _TempAvatar->GetClassLvl(0)));
								}
								else
								{
									if(_TempAvatar->GetSCon() > 15)	_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * 2));//Max +2 for non-fighters
									else							_TempAvatar->SetHP(_TempAvatar->GetHP() + (10 * _CONData[ConHpA][_TempAvatar->GetSCon() - 1]));
									//Adjust for any levels above hit die levels...
									_TempAvatar->SetHP(_TempAvatar->GetHP() + ((_TempAvatar->GetClassLvl(0) - 10) * 2));
								}
								break;
							};
						}
						_TempAvatar->SetCurHP(_TempAvatar->GetHP() + OldCurHp);
					}
				}

				//Remove from Tacticle Map
				_TactMap[_MobArray[i].GetDungeonX()][_MobArray[i].GetDungeonY()].AvatarIndex = -1;
				//Move up mobs in the list
				for(int j = i; j < _intNumMobsAssigned - 1; j++)
				{
					_MobArray[j] = _MobArray[j + 1];
					//Mod the TactMap for all of the remaining mobs so the map points at
					//the new re-arrangement
					_TactMap[_MobArray[j].GetDungeonX()][_MobArray[j].GetDungeonY()].AvatarIndex -= 1;
				}
				//Reset the last position
				_MobArray[_intNumMobsAssigned - 1].Reset();
				//Decrement so that when the game is saved, worthless data isn't saved
				_intNumMobsAssigned--;
				//Renew the map
				GetTacticalMapData(_MAPVIEW);
			}
		}
		_bPlayersTurn = true;
	}
}