2
0
Эх сурвалжийг харах

Store battle fields sounds in a json file instead of a text file.

Frank Zago 14 жил өмнө
parent
commit
cf1d179acf

+ 33 - 45
client/CMusicHandler.cpp

@@ -12,6 +12,7 @@
 #include "../lib/CCreatureHandler.h"
 #include "../lib/CSpellHandler.h"
 #include "../client/CGameInfo.h"
+#include "../lib/JsonNode.h"
 
 /*
  * CMusicHandler.cpp, part of VCMI engine
@@ -156,7 +157,7 @@ Mix_Chunk *CSoundHandler::GetSoundChunk(soundBase::soundID soundID)
 }
 
 // Get a soundID given a filename
-soundBase::soundID CSoundHandler::getSoundID(std::string &fileName)
+soundBase::soundID CSoundHandler::getSoundID(const std::string &fileName)
 {
 	boost::bimap<soundBase::soundID, std::string>::right_iterator it;
 
@@ -169,62 +170,49 @@ soundBase::soundID CSoundHandler::getSoundID(std::string &fileName)
 
 void CSoundHandler::initCreaturesSounds(const std::vector<ConstTransitivePtr< CCreature> > &creatures)
 {
-	tlog5 << "\t\tReading config/cr_sounds.txt" << std::endl;
-	std::ifstream ifs(DATA_DIR "/config/cr_sounds.txt");
-	std::string line;
+	tlog5 << "\t\tReading config/cr_sounds.json" << std::endl;
+	class JsonNode config(DATA_DIR "/config/cr_sounds.json");
 
 	CBattleSounds.resize(creatures.size());
 
-	while(getline(ifs, line))
-	{
-		std::string cname="", attack="", defend="", killed="", move="", 
-			shoot="", wince="", ext1="", ext2="";
-		std::istringstream str(line);
-
-		str >> cname >> attack >> defend >> killed >> move >> shoot >> wince >> ext1 >> ext2;
-
-		if (!line.size() || cname[0] == '#')
-			// That's a comment. Discard.
-			continue;
+	if (!config["creature_sounds"].isNull()) {
+		const JsonVector &vector = config["creature_sounds"].Vector();
+	
+		for (JsonVector::const_iterator it = vector.begin(); it!=vector.end(); ++it) {
+			const JsonNode &node = *it;
+			const JsonNode *value;
+			int id;
 
-		if (str.good() || (str.eof() && wince != ""))
-		{
-			int id = -1;
+			value = &node["name"];
 
-			bmap<std::string,int>::const_iterator i = CGI->creh->nameToID.find(cname);
-			if(i != CGI->creh->nameToID.end())
+			bmap<std::string,int>::const_iterator i = CGI->creh->nameToID.find(value->String());
+			if (i != CGI->creh->nameToID.end())
 				id = i->second;
 			else
 			{
-				tlog1 << "Sound info for an unknown creature: " << cname << std::endl;
+				tlog1 << "Sound info for an unknown creature: " << value->String() << std::endl;
 				continue;
 			}
 
-			if (CBattleSounds[id].killed != soundBase::invalid)
-				tlog1 << "Creature << " << cname << " already has sounds" << std::endl;
-			
-			CBattleSounds[id].attack = getSoundID(attack);
-			CBattleSounds[id].defend = getSoundID(defend);
-			CBattleSounds[id].killed = getSoundID(killed);
-			CBattleSounds[id].move = getSoundID(move);
-			CBattleSounds[id].shoot = getSoundID(shoot);
-			CBattleSounds[id].wince = getSoundID(wince);
-			CBattleSounds[id].ext1 = getSoundID(ext1);
-			CBattleSounds[id].ext2 = getSoundID(ext2);
-
-			// Special creatures
-			if (id == 55 || // Archdevil
-				id == 62 || // Vampire
-				id == 62)	// Vampire Lord
-			{
-				CBattleSounds[id].startMoving = CBattleSounds[id].ext1;
-				CBattleSounds[id].endMoving = CBattleSounds[id].ext2;
-			}
+			/* This is a bit ugly. Maybe we should use an array for
+			 * sound ids instead of separate variables and define
+			 * attack/defend/killed/... as indexes. */
+#define GET_SOUND_VALUE(value_name) do { value = &node[#value_name]; if (!value->isNull()) CBattleSounds[id].value_name = getSoundID(value->String()); } while(0)
+
+			GET_SOUND_VALUE(attack);
+			GET_SOUND_VALUE(defend);
+			GET_SOUND_VALUE(killed);
+			GET_SOUND_VALUE(move);
+			GET_SOUND_VALUE(shoot);
+			GET_SOUND_VALUE(wince);
+			GET_SOUND_VALUE(ext1);
+			GET_SOUND_VALUE(ext2);
+			GET_SOUND_VALUE(startMoving);
+			GET_SOUND_VALUE(endMoving);
+#undef GET_SOUND_VALUE
 		}
 	}
-	ifs.close();
-	ifs.clear();
-
+	
 	//commented to avoid spurious warnings
 	/*
 	// Find creatures without sounds
@@ -551,4 +539,4 @@ bool MusicEntry::operator == (musicBase::musicID _musicID) const
 bool MusicEntry::operator == (std::vector<musicBase::musicID> &_musicVec) const
 {
 	return musicVec == _musicVec;
-}
+}

+ 1 - 1
client/CMusicHandler.h

@@ -70,7 +70,7 @@ class CSoundHandler: public CAudioBase
 {
 private:
 	CSndHandler sndh;
-	soundBase::soundID getSoundID(std::string &fileName);
+	soundBase::soundID getSoundID(const std::string &fileName);
 
 	std::map<soundBase::soundID, Mix_Chunk *> soundChunks;
 

+ 1253 - 0
config/cr_sounds.json

@@ -0,0 +1,1253 @@
+{
+	"creature_sounds": 
+	[
+		{
+			"name": "AdvancedLizardman",
+			"attack": "ALIZATTK.wav",
+			"defend": "ALIZDFND.wav",
+			"killed": "ALIZKILL.wav",
+			"move": "ALIZMOVE.wav",
+			"shoot": "ALIZSHOT.wav",
+			"wince": "ALIZWNCE.wav"
+		},
+		{
+			"name": "AirElemental",
+			"attack": "AELMATTK.wav",
+			"defend": "AELMDFND.wav",
+			"killed": "AELMKILL.wav",
+			"move": "AELMMOVE.wav",
+			"wince": "AELMWNCE.wav"
+		},
+		{
+			"name": "AmmoCart",
+			"killed": "CARTKILL.wav",
+			"wince": "CARTWNCE.wav"
+		},
+		{
+			"name": "AncientBehemoth",
+			"attack": "BMTHATTK.wav",
+			"defend": "BMTHDFND.wav",
+			"killed": "BMTHKILL.wav",
+			"move": "BMTHMOVE.wav",
+			"wince": "BMTHWNCE.wav"
+		},
+		{
+			"name": "Angel",
+			"attack": "ANGLATTK.wav",
+			"defend": "ANGLDFND.wav",
+			"killed": "ANGLKILL.wav",
+			"move": "ANGLMOVE.wav",
+			"wince": "ANGLWNCE.wav"
+		},
+		{
+			"name": "ApprenticeGremlin",
+			"attack": "AGRMATTK.wav",
+			"defend": "AGRMDFND.wav",
+			"killed": "AGRMKILL.wav",
+			"move": "AGRMMOVE.wav",
+			"shoot": "AGRMSHOT.wav",
+			"wince": "AGRMWNCE.wav"
+		},
+		{
+			"name": "ArchDevil",
+			"attack": "ADVLATTK.wav",
+			"defend": "ADVLDFND.wav",
+			"killed": "ADVLKILL.wav",
+			"move": "ADVLMOVE.wav",
+			"wince": "ADVLWNCE.wav",
+			"startMoving": "ADVLEXT1.wav",
+			"stopMoving": "ADVLEXT2.wav"
+		},
+		{
+			"name": "ArchMage",
+			"attack": "AMAGATTK.wav",
+			"defend": "AMAGDFND.wav",
+			"killed": "AMAGKILL.wav",
+			"move": "AMAGMOVE.wav",
+			"shoot": "AMAGSHOT.wav",
+			"wince": "AMAGWNCE.wav"
+		},
+		{
+			"name": "Archangel",
+			"attack": "AAGLATTK.wav",
+			"defend": "AAGLDFND.wav",
+			"killed": "AAGLKILL.wav",
+			"move": "AAGLMOVE.wav",
+			"wince": "AAGLWNCE.wav"
+		},
+		{
+			"name": "AzureDragon",
+			"attack": "AZURATTK.wav",
+			"defend": "AZURDFND.wav",
+			"killed": "AZURKILL.wav",
+			"move": "AZURMOVE.wav",
+			"wince": "AZURWNCE.wav"
+		},
+		{
+			"name": "Ballista",
+			"killed": "BALLKILL.wav",
+			"shoot": "BALLSHOT.wav",
+			"wince": "BALLWNCE.wav"
+		},
+		{
+			"name": "Basilisk",
+			"attack": "BASLATTK.wav",
+			"defend": "BASLDFND.wav",
+			"killed": "BASLKILL.wav",
+			"move": "BASLMOVE.wav",
+			"wince": "BASLWNCE.wav"
+		},
+		{
+			"name": "BattleDwarf",
+			"attack": "BDRFATTK.wav",
+			"defend": "BDRFDFND.wav",
+			"killed": "BDRFKILL.wav",
+			"move": "BDRFMOVE.wav",
+			"wince": "BDRFWNCE.wav"
+		},
+		{
+			"name": "Beholder",
+			"attack": "BHDRATTK.wav",
+			"defend": "BHDRDFND.wav",
+			"killed": "BHDRKILL.wav",
+			"move": "BHDRMOVE.wav",
+			"shoot": "BHDRSHOT.wav",
+			"wince": "BHDRWNCE.wav",
+			"ext1": "BHDRDETH.wav"
+		},
+		{
+			"name": "BlackDragon",
+			"attack": "BKDRATTK.wav",
+			"defend": "BKDRDFND.wav",
+			"killed": "BKDRKILL.wav",
+			"move": "BKDRMOVE.wav",
+			"wince": "BKDRWNCE.wav"
+		},
+		{
+			"name": "BlackKnight",
+			"attack": "BKNTATTK.wav",
+			"defend": "BKNTDFND.wav",
+			"killed": "BKNTKILL.wav",
+			"move": "BKNTMOVE.wav",
+			"wince": "BKNTWNCE.wav"
+		},
+		{
+			"name": "BlackLord",
+			"attack": "BLRDATTK.wav",
+			"defend": "BLRDDFND.wav",
+			"killed": "BLRDKILL.wav",
+			"move": "BLRDMOVE.wav",
+			"wince": "BLRDWNCE.wav"
+		},
+		{
+			"name": "Boar",
+			"attack": "BOARATTK.wav",
+			"defend": "BOARDFND.wav",
+			"killed": "BOARKILL.wav",
+			"move": "BOARMOVE.wav",
+			"wince": "BOARWNCE.wav"
+		},
+		{
+			"name": "BoneDragon",
+			"attack": "BODRATTK.wav",
+			"defend": "BODRDFND.wav",
+			"killed": "BODRKILL.wav",
+			"move": "BODRMOVE.wav",
+			"wince": "BODRWNCE.wav"
+		},
+		{
+			"name": "BriarTreefolk",
+			"attack": "BTREATTK.wav",
+			"defend": "BTREDFND.wav",
+			"killed": "BTREKILL.wav",
+			"move": "BTREMOVE.wav",
+			"wince": "BTREWNCE.wav"
+		},
+		{
+			"name": "BronzeGorgon",
+			"attack": "BGORATTK.wav",
+			"defend": "BGORDFND.wav",
+			"killed": "BGORKILL.wav",
+			"move": "BGORMOVE.wav",
+			"wince": "BGORWNCE.wav"
+		},
+		{
+			"name": "Caliph",
+			"attack": "CALFATTK.wav",
+			"defend": "CALFDFND.wav",
+			"killed": "CALFKILL.wav",
+			"move": "CALFMOVE.wav",
+			"shoot": "CALFSHOT.wav",
+			"wince": "CALFWNCE.wav"
+		},
+		{
+			"name": "Catapult",
+			"killed": "CATAKILL.wav",
+			"shoot": "CATASHOT.wav",
+			"wince": "CATAWNCE.wav"
+		},
+		{
+			"name": "Cavalier",
+			"attack": "CAVAATTK.wav",
+			"defend": "CAVADFND.wav",
+			"killed": "CAVAKILL.wav",
+			"move": "CAVAMOVE.wav",
+			"wince": "CAVAWNCE.wav"
+		},
+		{
+			"name": "Centaur",
+			"attack": "CNTRATTK.wav",
+			"defend": "CNTRDFND.wav",
+			"killed": "CNTRKILL.wav",
+			"move": "CNTRMOVE.wav",
+			"shoot": "CNTRSHOT.wav",
+			"wince": "CNTRWNCE.wav"
+		},
+		{
+			"name": "Cerberus",
+			"attack": "CERBATTK.wav",
+			"defend": "CERBDFND.wav",
+			"killed": "CERBKILL.wav",
+			"move": "CERBMOVE.wav",
+			"wince": "CERBWNCE.wav"
+		},
+		{
+			"name": "Champion",
+			"attack": "CHMPATTK.wav",
+			"defend": "CHMPDFND.wav",
+			"killed": "CHMPKILL.wav",
+			"move": "CHMPMOVE.wav",
+			"wince": "CHMPWNCE.wav"
+		},
+		{
+			"name": "ChaosHydra",
+			"attack": "CHYDATTK.wav",
+			"defend": "CHYDDFND.wav",
+			"killed": "CHYDKILL.wav",
+			"move": "CHYDMOVE.wav",
+			"wince": "CHYDWNCE.wav"
+		},
+		{
+			"name": "CopperGorgon",
+			"attack": "CGORATTK.wav",
+			"defend": "CGORDFND.wav",
+			"killed": "CGORKILL.wav",
+			"move": "CGORMOVE.wav",
+			"wince": "CGORWNCE.wav"
+		},
+		{
+			"name": "Crusader",
+			"attack": "CRUSATTK.wav",
+			"defend": "CRUSDFND.wav",
+			"killed": "CRUSKILL.wav",
+			"move": "CRUSMOVE.wav",
+			"wince": "CRUSWNCE.wav"
+		},
+		{
+			"name": "CrystalDragon",
+			"attack": "CRYSATTK.wav",
+			"defend": "CRYSDFND.wav",
+			"killed": "CRYSKILL.wav",
+			"move": "CRYSMOVE.wav",
+			"wince": "CRYSWNCE.wav"
+		},
+		{
+			"name": "Cyclops",
+			"attack": "CCYCATTK.wav",
+			"defend": "CCYCDFND.wav",
+			"killed": "CCYCKILL.wav",
+			"move": "CCYCMOVE.wav",
+			"shoot": "CCYCSHOT.wav",
+			"wince": "CCYCWNCE.wav"
+		},
+		{
+			"name": "CyclopsLord",
+			"attack": "CYCLATTK.wav",
+			"defend": "CYCLDFND.wav",
+			"killed": "CYCLKILL.wav",
+			"move": "CYCLMOVE.wav",
+			"shoot": "CYCLSHOT.wav",
+			"wince": "CYCLWNCE.wav"
+		},
+		{
+			"name": "Devil",
+			"attack": "DEVLATTK.wav",
+			"defend": "DEVLDFND.wav",
+			"killed": "DEVLKILL.wav",
+			"move": "DEVLMOVE.wav",
+			"wince": "DEVLWNCE.wav",
+			"ext1": "DEVLEXT1.wav",
+			"ext2": "DEVLEXT2.wav"
+		},
+		{
+			"name": "DiamondGolem",
+			"attack": "DGLMATTK.wav",
+			"defend": "DGLMDFND.wav",
+			"killed": "DGLMKILL.wav",
+			"move": "DGLMMOVE.wav",
+			"wince": "DGLMWNCE.wav"
+		},
+		{
+			"name": "DragonFly",
+			"attack": "DFLYATTK.wav",
+			"defend": "DFLYDFND.wav",
+			"killed": "DFLYKILL.wav",
+			"move": "DFLYMOVE.wav",
+			"wince": "DFLYWNCE.wav"
+		},
+		{
+			"name": "Dual-HornedDemon",
+			"attack": "DHDMATTK.wav",
+			"defend": "DHDMDFND.wav",
+			"killed": "DHDMKILL.wav",
+			"move": "DHDMMOVE.wav",
+			"wince": "DHDMWNCE.wav"
+		},
+		{
+			"name": "Dwarf",
+			"attack": "DWRFATTK.wav",
+			"defend": "DWRFDFND.wav",
+			"killed": "DWRFKILL.wav",
+			"move": "DWRFMOVE.wav",
+			"wince": "DWRFWNCE.wav"
+		},
+		{
+			"name": "EarthElemental",
+			"attack": "EELMATTK.wav",
+			"defend": "EELMDFND.wav",
+			"killed": "EELMKILL.wav",
+			"move": "EELMMOVE.wav",
+			"wince": "EELMWNCE.wav"
+		},
+		{
+			"name": "Efreet",
+			"attack": "EFRTATTK.wav",
+			"defend": "EFRTDFND.wav",
+			"killed": "EFRTKILL.wav",
+			"move": "EFRTMOVE.wav",
+			"wince": "EFRTWNCE.wav"
+		},
+		{
+			"name": "EfreetSultan",
+			"attack": "ESULATTK.wav",
+			"defend": "ESULDFND.wav",
+			"killed": "ESULKILL.wav",
+			"move": "ESULMOVE.wav",
+			"shoot": "ESULSHOT.wav",
+			"wince": "ESULWNCE.wav"
+		},
+		{
+			"name": "ElectricityElemental",
+			"attack": "ENERATTK.wav",
+			"defend": "ENERDFND.wav",
+			"killed": "ENERKILL.wav",
+			"move": "ENERMOVE.wav",
+			"wince": "ENERWNCE.wav"
+		},
+		{
+			"name": "EliteCentaur",
+			"attack": "ECNTATTK.wav",
+			"defend": "ECNTDFND.wav",
+			"killed": "ECNTKILL.wav",
+			"move": "ECNTMOVE.wav",
+			"wince": "ECNTWNCE.wav"
+		},
+		{
+			"name": "Enchanter",
+			"attack": "ENCHATTK.wav",
+			"defend": "ENCHDFND.wav",
+			"killed": "ENCHKILL.wav",
+			"move": "ENCHMOVE.wav",
+			"shoot": "ENCHSHOT.wav",
+			"wince": "ENCHWNCE.wav"
+		},
+		{
+			"name": "EvilEye",
+			"attack": "EVLIATTK.wav",
+			"defend": "EVLIDFND.wav",
+			"killed": "EVLIKILL.wav",
+			"move": "EVLIMOVE.wav",
+			"shoot": "EVLISHOT.wav",
+			"wince": "EVLIWNCE.wav",
+			"ext1": "EVLIDETH.wav"
+		},
+		{
+			"name": "FairieDragon",
+			"attack": "FAERATTK.wav",
+			"defend": "FAERDFND.wav",
+			"killed": "FAERKILL.wav",
+			"move": "FAERMOVE.wav",
+			"shoot": "FAERSHOT.wav",
+			"wince": "FAERWNCE.wav"
+		},
+		{
+			"name": "Familiar",
+			"attack": "FMLRATTK.wav",
+			"defend": "FMLRDFND.wav",
+			"killed": "FMLRKILL.wav",
+			"move": "FMLRMOVE.wav",
+			"wince": "FMLRWNCE.wav"
+		},
+		{
+			"name": "FireDragonFly",
+			"attack": "FDFLATTK.wav",
+			"defend": "FDFLDFND.wav",
+			"killed": "FDFLKILL.wav",
+			"move": "FDFLMOVE.wav",
+			"shoot": "FDFLSHOT.wav",
+			"wince": "FDFLWNCE.wav"
+		},
+		{
+			"name": "FireElemental",
+			"attack": "FELMATTK.wav",
+			"defend": "FELMDFND.wav",
+			"killed": "FELMKILL.wav",
+			"move": "FELMMOVE.wav",
+			"wince": "FELMWNCE.wav"
+		},
+		{
+			"name": "Firebird",
+			"attack": "FIRBATTK.wav",
+			"defend": "FIRBDFND.wav",
+			"killed": "FIRBKILL.wav",
+			"move": "FIRBMOVE.wav",
+			"wince": "FIRBWNCE.wav"
+		},
+		{
+			"name": "FirstAidTent",
+			"killed": "FAIDKILL.wav",
+			"wince": "FAIDWNCE.wav"
+		},
+		{
+			"name": "Genie",
+			"attack": "GENIATTK.wav",
+			"defend": "GENIDFND.wav",
+			"killed": "GENIKILL.wav",
+			"move": "GENIMOVE.wav",
+			"wince": "GENIWNCE.wav"
+		},
+		{
+			"name": "GhostDragon",
+			"attack": "GHDRATTK.wav",
+			"defend": "GHDRDFND.wav",
+			"killed": "GHDRKILL.wav",
+			"move": "GHDRMOVE.wav",
+			"wince": "GHDRWNCE.wav"
+		},
+		{
+			"name": "Gnoll",
+			"attack": "GNOLATTK.wav",
+			"defend": "GNOLDFND.wav",
+			"killed": "GNOLKILL.wav",
+			"move": "GNOLMOVE.wav",
+			"wince": "GNOLWNCE.wav"
+		},
+		{
+			"name": "GnollMarauder",
+			"attack": "GNLMATTK.wav",
+			"defend": "GNLMDFND.wav",
+			"killed": "GNLMKILL.wav",
+			"move": "GNLMMOVE.wav",
+			"wince": "GNLMWNCE.wav"
+		},
+		{
+			"name": "Goblin",
+			"attack": "GBLNATTK.wav",
+			"defend": "GBLNDFND.wav",
+			"killed": "GBLNKILL.wav",
+			"move": "GBLNMOVE.wav",
+			"wince": "GBLNWNCE.wav"
+		},
+		{
+			"name": "GoblinWolfRider",
+			"attack": "GWRDATTK.wav",
+			"defend": "GWRDDFND.wav",
+			"killed": "GWRDKILL.wav",
+			"move": "GWRDMOVE.wav",
+			"wince": "GWRDWNCE.wav"
+		},
+		{
+			"name": "Gog",
+			"attack": "GOGGATTK.wav",
+			"defend": "GOGGDFND.wav",
+			"killed": "GOGGKILL.wav",
+			"move": "GOGGMOVE.wav",
+			"shoot": "GOGGSHOT.wav",
+			"wince": "GOGGWNCE.wav",
+			"ext1": "GOGFLAME.wav"
+		},
+		{
+			"name": "GoldDragon",
+			"attack": "GODRATTK.wav",
+			"defend": "GODRDFND.wav",
+			"killed": "GODRKILL.wav",
+			"move": "GODRMOVE.wav",
+			"wince": "GODRWNCE.wav"
+		},
+		{
+			"name": "GoldGolem",
+			"attack": "GGLMATTK.wav",
+			"defend": "GGLMDFND.wav",
+			"killed": "GGLMKILL.wav",
+			"move": "GGLMMOVE.wav",
+			"wince": "GGLMWNCE.wav"
+		},
+		{
+			"name": "GrandElf",
+			"attack": "GELFATTK.wav",
+			"defend": "GELFDFND.wav",
+			"killed": "GELFKILL.wav",
+			"move": "GELFMOVE.wav",
+			"shoot": "GELFSHOT.wav",
+			"wince": "GELFWNCE.wav"
+		},
+		{
+			"name": "GreaterBasilisk",
+			"attack": "GBASATTK.wav",
+			"defend": "GBASDFND.wav",
+			"killed": "GBASKILL.wav",
+			"move": "GBASMOVE.wav",
+			"wince": "GBASWNCE.wav"
+		},
+		{
+			"name": "GreaterTitan",
+			"attack": "GTITATTK.wav",
+			"defend": "GTITDFND.wav",
+			"killed": "GTITKILL.wav",
+			"move": "GTITMOVE.wav",
+			"shoot": "GTITSHOT.wav",
+			"wince": "GTITWNCE.wav"
+		},
+		{
+			"name": "GreenDragon",
+			"attack": "GRDRATTK.wav",
+			"defend": "GRDRDFND.wav",
+			"killed": "GRDRKILL.wav",
+			"move": "GRDRMOVE.wav",
+			"wince": "GRDRWNCE.wav"
+		},
+		{
+			"name": "Griffin",
+			"attack": "GRIFATTK.wav",
+			"defend": "GRIFDFND.wav",
+			"killed": "GRIFKILL.wav",
+			"move": "GRIFMOVE.wav",
+			"wince": "GRIFWNCE.wav"
+		},
+		{
+			"name": "Halberdier",
+			"attack": "HALBATTK.wav",
+			"defend": "HALBDFND.wav",
+			"killed": "HALBKILL.wav",
+			"move": "HALBMOVE.wav",
+			"wince": "HALBWNCE.wav"
+		},
+		{
+			"name": "Halfling",
+			"attack": "HALFATTK.wav",
+			"defend": "HALFDFND.wav",
+			"killed": "HALFKILL.wav",
+			"move": "HALFMOVE.wav",
+			"shoot": "HALFSHOT.wav",
+			"wince": "HALFWNCE.wav"
+		},
+		{
+			"name": "Harpy",
+			"attack": "HARPATTK.wav",
+			"defend": "HARPDFND.wav",
+			"killed": "HARPKILL.wav",
+			"move": "HARPMOVE.wav",
+			"shoot": "silence",
+			"wince": "HARPWNCE.wav"
+		},
+		{
+			"name": "HarpyHag",
+			"attack": "HHAGATTK.wav",
+			"defend": "HHAGDFND.wav",
+			"killed": "HHAGKILL.wav",
+			"move": "HHAGMOVE.wav",
+			"shoot": "HHAGSHOT.wav",
+			"wince": "HHAGWNCE.wav"
+		},
+		{
+			"name": "HeavyCrossbowman",
+			"attack": "HCRSATTK.wav",
+			"defend": "HCRSDFND.wav",
+			"killed": "HCRSKILL.wav",
+			"move": "HCRSMOVE.wav",
+			"shoot": "HCRSSHOT.wav",
+			"wince": "HCRSWNCE.wav"
+		},
+		{
+			"name": "HellHound",
+			"attack": "HHNDATTK.wav",
+			"defend": "HHNDDFND.wav",
+			"killed": "HHNDKILL.wav",
+			"move": "HHNDMOVE.wav",
+			"wince": "HHNDWNCE.wav"
+		},
+		{
+			"name": "Hobgoblin",
+			"attack": "HGOBATTK.wav",
+			"defend": "HGOBDFND.wav",
+			"killed": "HGOBKILL.wav",
+			"move": "HGOBMOVE.wav",
+			"wince": "HGOBWNCE.wav"
+		},
+		{
+			"name": "HobgoblinWolfRider",
+			"attack": "HGWRATTK.wav",
+			"defend": "HGWRDFND.wav",
+			"killed": "HGWRKILL.wav",
+			"move": "HGWRMOVE.wav",
+			"wince": "HGWRWNCE.wav"
+		},
+		{
+			"name": "Hydra",
+			"attack": "HYDRATTK.wav",
+			"defend": "HYDRDFND.wav",
+			"killed": "HYDRKILL.wav",
+			"move": "HYDRMOVE.wav",
+			"wince": "HYDRWNCE.wav"
+		},
+		{
+			"name": "IceElemental",
+			"attack": "ICELATTK.wav",
+			"defend": "ICELDFND.wav",
+			"killed": "ICELKILL.wav",
+			"move": "ICELMOVE.wav",
+			"shoot": "ICELSHOT.wav",
+			"wince": "ICELWNCE.wav"
+		},
+		{
+			"name": "Imp",
+			"attack": "IMPPATTK.wav",
+			"defend": "IMPPDFND.wav",
+			"killed": "IMPPKILL.wav",
+			"move": "IMPPMOVE.wav",
+			"wince": "IMPPWNCE.wav"
+		},
+		{
+			"name": "InfernalTroglodyte",
+			"attack": "ITRGATTK.wav",
+			"defend": "ITRGDFND.wav",
+			"killed": "ITRGKILL.wav",
+			"move": "ITRGMOVE.wav",
+			"wince": "ITRGWNCE.wav"
+		},
+		{
+			"name": "StoneGolem",
+			"attack": "IGLMATTK.wav",
+			"defend": "IGLMDFND.wav",
+			"killed": "IGLMKILL.wav",
+			"move": "IGLMMOVE.wav",
+			"wince": "IGLMWNCE.wav"
+		},
+		{
+			"name": "LesserTitan",
+			"attack": "LTITATTK.wav",
+			"defend": "LTITDFND.wav",
+			"killed": "LTITKILL.wav",
+			"move": "LTITMOVE.wav",
+			"wince": "LTITWNCE.wav"
+		},
+		{
+			"name": "Lich",
+			"attack": "LICHATTK.wav",
+			"defend": "LICHDFND.wav",
+			"killed": "LICHKILL.wav",
+			"move": "LICHMOVE.wav",
+			"shoot": "LICHSHOT.wav",
+			"wince": "LICHWNCE.wav",
+			"ext1": "LICHATK2.wav"
+		},
+		{
+			"name": "LightCrossbowman",
+			"attack": "LCRSATTK.wav",
+			"defend": "LCRSDFND.wav",
+			"killed": "LCRSKILL.wav",
+			"move": "LCRSMOVE.wav",
+			"shoot": "LCRSSHOT.wav",
+			"wince": "LCRSWNCE.wav"
+		},
+		{
+			"name": "Mage",
+			"attack": "MAGEATTK.wav",
+			"defend": "MAGEDFND.wav",
+			"killed": "MAGEKILL.wav",
+			"move": "MAGEMOVE.wav",
+			"shoot": "MAGESHOT.wav",
+			"wince": "MAGEWNCE.wav"
+		},
+		{
+			"name": "MagicElemental",
+			"attack": "MGELATTK.wav",
+			"defend": "MGELDFND.wav",
+			"killed": "MGELKILL.wav",
+			"move": "MGELMOVE.wav",
+			"wince": "MGELWNCE.wav"
+		},
+		{
+			"name": "Magog",
+			"attack": "MGOGATTK.wav",
+			"defend": "MGOGDFND.wav",
+			"killed": "MGOGKILL.wav",
+			"move": "MGOGMOVE.wav",
+			"shoot": "MGOGSHOT.wav",
+			"wince": "MGOGWNCE.wav",
+			"ext1": "GOGFLAME.wav"
+		},
+		{
+			"name": "Manticore",
+			"attack": "MANTATTK.wav",
+			"defend": "MANTDFND.wav",
+			"killed": "MANTKILL.wav",
+			"move": "MANTMOVE.wav",
+			"shoot": "MANTSHOT.wav",
+			"wince": "MANTWNCE.wav"
+		},
+		{
+			"name": "MasterGremlin",
+			"attack": "MGRMATTK.wav",
+			"defend": "MGRMDFND.wav",
+			"killed": "MGRMKILL.wav",
+			"move": "MGRMMOVE.wav",
+			"shoot": "MGRMSHOT.wav",
+			"wince": "MGRMWNCE.wav"
+		},
+		{
+			"name": "Medusa",
+			"attack": "MEDUATTK.wav",
+			"defend": "MEDUDFND.wav",
+			"killed": "MEDUKILL.wav",
+			"move": "MEDUMOVE.wav",
+			"shoot": "MEDUSHOT.wav",
+			"wince": "MEDUWNCE.wav"
+		},
+		{
+			"name": "MedusaQueen",
+			"attack": "MEDQATTK.wav",
+			"defend": "MEDQDFND.wav",
+			"killed": "MEDQKILL.wav",
+			"move": "MEDQMOVE.wav",
+			"shoot": "MEDQSHOT.wav",
+			"wince": "MEDQWNCE.wav"
+		},
+		{
+			"name": "Minotaur",
+			"attack": "MINOATTK.wav",
+			"defend": "MINODFND.wav",
+			"killed": "MINOKILL.wav",
+			"move": "MINOMOVE.wav",
+			"wince": "MINOWNCE.wav"
+		},
+		{
+			"name": "MinotaurKing",
+			"attack": "MINKATTK.wav",
+			"defend": "MINKDFND.wav",
+			"killed": "MINKKILL.wav",
+			"move": "MINKMOVE.wav",
+			"shoot": "MINKSHOT.wav",
+			"wince": "MINKWNCE.wav"
+		},
+		{
+			"name": "Monk",
+			"attack": "MONKATTK.wav",
+			"defend": "MONKDFND.wav",
+			"killed": "MONKKILL.wav",
+			"move": "MONKMOVE.wav",
+			"shoot": "MONKSHOT.wav",
+			"wince": "MONKWNCE.wav"
+		},
+		{
+			"name": "Mummy",
+			"attack": "MUMYATTK.wav",
+			"defend": "MUMYDFND.wav",
+			"killed": "MUMYKILL.wav",
+			"move": "MUMYMOVE.wav",
+			"wince": "MUMYWNCE.wav"
+		},
+		{
+			"name": "NagaGuardian",
+			"attack": "NGRDATTK.wav",
+			"defend": "NGRDDFND.wav",
+			"killed": "NGRDKILL.wav",
+			"move": "NGRDMOVE.wav",
+			"wince": "NGRDWNCE.wav"
+		},
+		{
+			"name": "NagaSentinel",
+			"attack": "NSENATTK.wav",
+			"defend": "NSENDFND.wav",
+			"killed": "NSENKILL.wav",
+			"move": "NSENMOVE.wav",
+			"wince": "NSENWNCE.wav"
+		},
+		{
+			"name": "Nosferatu",
+			"attack": "NOSFATTK.wav",
+			"defend": "NOSFDFND.wav",
+			"killed": "NOSFKILL.wav",
+			"move": "NOSFMOVE.wav",
+			"shoot": "NOSFSHOT.wav",
+			"wince": "NOSFWNCE.wav",
+			"ext1": "NOSFEXT1.wav",
+			"ext2": "NOSFEXT2.wav"
+		},
+		{
+			"name": "ObsidianGargoyle",
+			"attack": "OGRGATTK.wav",
+			"defend": "OGRGDFND.wav",
+			"killed": "OGRGKILL.wav",
+			"move": "OGRGMOVE.wav",
+			"wince": "OGRGWNCE.wav"
+		},
+		{
+			"name": "Ogre",
+			"attack": "OGREATTK.wav",
+			"defend": "OGREDFND.wav",
+			"killed": "OGREKILL.wav",
+			"move": "OGREMOVE.wav",
+			"wince": "OGREWNCE.wav"
+		},
+		{
+			"name": "OgreMage",
+			"attack": "OGRMATTK.wav",
+			"defend": "OGRMDFND.wav",
+			"killed": "OGRMKILL.wav",
+			"move": "OGRMMOVE.wav",
+			"shoot": "OGRMSHOT.wav",
+			"wince": "OGRMWNCE.wav"
+		},
+		{
+			"name": "OgreShaman",
+			"attack": "TRLLATTK.wav",
+			"defend": "TRLLDFND.wav",
+			"killed": "TRLLKILL.wav",
+			"move": "TRLLMOVE.wav",
+			"wince": "TRLLWNCE.wav"
+		},
+		{
+			"name": "Orc",
+			"attack": "OORCATTK.wav",
+			"defend": "OORCDFND.wav",
+			"killed": "OORCKILL.wav",
+			"move": "OORCMOVE.wav",
+			"shoot": "OORCSHOT.wav",
+			"wince": "OORCWNCE.wav"
+		},
+		{
+			"name": "OrcChieftain",
+			"attack": "ORCCATTK.wav",
+			"defend": "ORCCDFND.wav",
+			"killed": "ORCCKILL.wav",
+			"move": "ORCCMOVE.wav",
+			"shoot": "ORCCSHOT.wav",
+			"wince": "ORCCWNCE.wav"
+		},
+		{
+			"name": "Peasant",
+			"attack": "PSNTATTK.wav",
+			"defend": "PSNTDFND.wav",
+			"killed": "PSNTKILL.wav",
+			"move": "PSNTMOVE.wav",
+			"wince": "PSNTWNCE.wav"
+		},
+		{
+			"name": "Pegasus",
+			"attack": "PEGAATTK.wav",
+			"defend": "PEGADFND.wav",
+			"killed": "PEGAKILL.wav",
+			"move": "PEGAMOVE.wav",
+			"wince": "PEGAWNCE.wav"
+		},
+		{
+			"name": "Pheonix",
+			"attack": "PHOEATTK.wav",
+			"defend": "PHOEDFND.wav",
+			"killed": "PHOEKILL.wav",
+			"move": "PHOEMOVE.wav",
+			"wince": "PHOEWNCE.wav"
+		},
+		{
+			"name": "Pikeman",
+			"attack": "PIKEATTK.wav",
+			"defend": "PIKEDFND.wav",
+			"killed": "PIKEKILL.wav",
+			"move": "PIKEMOVE.wav",
+			"wince": "PIKEWNCE.wav"
+		},
+		{
+			"name": "PitFiend",
+			"attack": "PFNDATTK.wav",
+			"defend": "PFNDDFND.wav",
+			"killed": "PFNDKILL.wav",
+			"move": "PFNDMOVE.wav",
+			"wince": "PFNDWNCE.wav"
+		},
+		{
+			"name": "PitFoe",
+			"attack": "PFOEATTK.wav",
+			"defend": "PFOEDFND.wav",
+			"killed": "PFOEKILL.wav",
+			"move": "PFOEMOVE.wav",
+			"wince": "PFOEWNCE.wav"
+		},
+		{
+			"name": "Pixie",
+			"attack": "PIXIATTK.wav",
+			"defend": "PIXIDFND.wav",
+			"killed": "PIXIKILL.wav",
+			"move": "PIXIMOVE.wav",
+			"wince": "PIXIWNCE.wav"
+		},
+		{
+			"name": "PowerLich",
+			"attack": "PLCHATTK.wav",
+			"defend": "PLCHDFND.wav",
+			"killed": "PLCHKILL.wav",
+			"move": "PLCHMOVE.wav",
+			"shoot": "PLCHSHOT.wav",
+			"wince": "PLCHWNCE.wav"
+		},
+		{
+			"name": "PrimitiveLizardman",
+			"attack": "PLIZATTK.wav",
+			"defend": "PLIZDFND.wav",
+			"killed": "PLIZKILL.wav",
+			"move": "PLIZMOVE.wav",
+			"shoot": "PLIZSHOT.wav",
+			"wince": "PLIZWNCE.wav"
+		},
+		{
+			"name": "PsiElemental",
+			"attack": "PSYCATTK.wav",
+			"defend": "PSYCDFND.wav",
+			"killed": "PSYCKILL.wav",
+			"move": "PSYCMOVE.wav",
+			"wince": "PSYCWNCE.wav"
+		},
+		{
+			"name": "RedDragon",
+			"attack": "RDDRATTK.wav",
+			"defend": "RDDRDFND.wav",
+			"killed": "RDDRKILL.wav",
+			"move": "RDDRMOVE.wav",
+			"wince": "RDDRWNCE.wav"
+		},
+		{
+			"name": "Roc",
+			"attack": "ROCCATTK.wav",
+			"defend": "ROCCDFND.wav",
+			"killed": "ROCCKILL.wav",
+			"move": "ROCCMOVE.wav",
+			"wince": "ROCCWNCE.wav"
+		},
+		{
+			"name": "Rogue",
+			"attack": "ROGUATTK.wav",
+			"defend": "ROGUDFND.wav",
+			"killed": "ROGUKILL.wav",
+			"move": "ROGUMOVE.wav",
+			"wince": "ROGUWNCE.wav"
+		},
+		{
+			"name": "RoyalGriffin",
+			"attack": "RGRFATTK.wav",
+			"defend": "RGRFDFND.wav",
+			"killed": "RGRFKILL.wav",
+			"move": "RGRFMOVE.wav",
+			"wince": "RGRFWNCE.wav"
+		},
+		{
+			"name": "RustDragon",
+			"attack": "RUSTATTK.wav",
+			"defend": "RUSTDFND.wav",
+			"killed": "RUSTKILL.wav",
+			"move": "RUSTMOVE.wav",
+			"wince": "RUSTWNCE.wav"
+		},
+		{
+			"name": "Scorpicore",
+			"attack": "SCRPATTK.wav",
+			"defend": "SCRPDFND.wav",
+			"killed": "SCRPKILL.wav",
+			"move": "SCRPMOVE.wav",
+			"shoot": "SCRPSHOT.wav",
+			"wince": "SCRPWNCE.wav"
+		},
+		{
+			"name": "SilverPegasus",
+			"attack": "APEGATTK.wav",
+			"defend": "APEGDFND.wav",
+			"killed": "APEGKILL.wav",
+			"move": "APEGMOVE.wav",
+			"wince": "APEGWNCE.wav"
+		},
+		{
+			"name": "Single-HornedDemon",
+			"attack": "SHDMATTK.wav",
+			"defend": "SHDMDFND.wav",
+			"killed": "SHDMKILL.wav",
+			"move": "SHDMMOVE.wav",
+			"wince": "SHDMWNCE.wav"
+		},
+		{
+			"name": "Skeleton",
+			"attack": "SKELATTK.wav",
+			"defend": "SKELDFND.wav",
+			"killed": "SKELKILL.wav",
+			"move": "SKELMOVE.wav",
+			"wince": "SKELWNCE.wav"
+		},
+		{
+			"name": "SkeletonWarrior",
+			"attack": "SKLWATTK.wav",
+			"defend": "SKLWDFND.wav",
+			"killed": "SKLWKILL.wav",
+			"move": "SKLWMOVE.wav",
+			"wince": "SKLWWNCE.wav"
+		},
+		{
+			"name": "Sprite",
+			"attack": "SPRTATTK.wav",
+			"defend": "SPRTDFND.wav",
+			"killed": "SPRTKILL.wav",
+			"move": "SPRTMOVE.wav",
+			"wince": "SPRTWNCE.wav"
+		},
+		{
+			"name": "StoneElemental",
+			"attack": "MAGMATTK.wav",
+			"defend": "MAGMDFND.wav",
+			"killed": "MAGMKILL.wav",
+			"move": "MAGMMOVE.wav",
+			"wince": "MAGMWNCE.wav"
+		},
+		{
+			"name": "StoneGargoyle",
+			"attack": "SGRGATTK.wav",
+			"defend": "SGRGDFND.wav",
+			"killed": "SGRGKILL.wav",
+			"move": "SGRGMOVE.wav",
+			"wince": "SGRGWNCE.wav"
+		},
+		{
+			"name": "IronGolem",
+			"attack": "SGLMATTK.wav",
+			"defend": "SGLMDFND.wav",
+			"killed": "SGLMKILL.wav",
+			"move": "SGLMMOVE.wav",
+			"wince": "SGLMWNCE.wav"
+		},
+		{
+			"name": "StormElemental",
+			"attack": "STORATTK.wav",
+			"defend": "STORDFND.wav",
+			"killed": "STORKILL.wav",
+			"move": "STORMOVE.wav",
+			"shoot": "STORSHOT.wav",
+			"wince": "STORWNCE.wav"
+		},
+		{
+			"name": "Swordsman",
+			"attack": "SWRDATTK.wav",
+			"defend": "SWRDDFND.wav",
+			"killed": "SWRDKILL.wav",
+			"move": "SWRDMOVE.wav",
+			"wince": "SWRDWNCE.wav"
+		},
+		{
+			"name": "Thunderbird",
+			"attack": "TBRDATTK.wav",
+			"defend": "TBRDDFND.wav",
+			"killed": "TBRDKILL.wav",
+			"move": "TBRDMOVE.wav",
+			"wince": "TBRDWNCE.wav"
+		},
+		{
+			"name": "Treefolk",
+			"attack": "TREEATTK.wav",
+			"defend": "TREEDFND.wav",
+			"killed": "TREEKILL.wav",
+			"move": "TREEMOVE.wav",
+			"wince": "TREEWNCE.wav"
+		},
+		{
+			"name": "Troglodyte",
+			"attack": "TROGATTK.wav",
+			"defend": "TROGDFND.wav",
+			"killed": "TROGKILL.wav",
+			"move": "TROGMOVE.wav",
+			"wince": "TROGWNCE.wav"
+		},
+		{
+			"name": "Unicorn",
+			"attack": "UNICATTK.wav",
+			"defend": "UNICDFND.wav",
+			"killed": "UNICKILL.wav",
+			"move": "UNICMOVE.wav",
+			"wince": "UNICWNCE.wav"
+		},
+		{
+			"name": "Vampire",
+			"attack": "VAMPATTK.wav",
+			"defend": "VAMPDFND.wav",
+			"killed": "VAMPKILL.wav",
+			"move": "VAMPMOVE.wav",
+			"wince": "VAMPWNCE.wav",
+			"startMoving": "VAMPEXT1.wav",
+			"stopMoving": "VAMPEXT2.wav"
+		},
+		{
+			"name": "warrior",
+			"attack": "NMADATTK.wav",
+			"defend": "NMADDFND.wav",
+			"killed": "NMADKILL.wav",
+			"move": "NMADMOVE.wav",
+			"wince": "NMADWNCE.wav"
+		},
+		{
+			"name": "WarUnicorn",
+			"attack": "WUNCATTK.wav",
+			"defend": "WUNCDFND.wav",
+			"killed": "WUNCKILL.wav",
+			"move": "WUNCMOVE.wav",
+			"shoot": "WUNCSHOT.wav",
+			"wince": "WUNCWNCE.wav"
+		},
+		{
+			"name": "WaterElemental",
+			"attack": "WELMATTK.wav",
+			"defend": "WELMDFND.wav",
+			"killed": "WELMKILL.wav",
+			"move": "WELMMOVE.wav",
+			"wince": "WELMWNCE.wav"
+		},
+		{
+			"name": "Wight",
+			"attack": "WGHTATTK.wav",
+			"defend": "WGHTDFND.wav",
+			"killed": "WGHTKILL.wav",
+			"move": "WGHTMOVE.wav",
+			"wince": "WGHTWNCE.wav"
+		},
+		{
+			"name": "WoodElf",
+			"attack": "WELFATTK.wav",
+			"defend": "WELFDFND.wav",
+			"killed": "WELFKILL.wav",
+			"move": "WELFMOVE.wav",
+			"shoot": "WELFSHOT.wav",
+			"wince": "WELFWNCE.wav"
+		},
+		{
+			"name": "Wraith",
+			"attack": "WRTHATTK.wav",
+			"defend": "WRTHDFND.wav",
+			"killed": "WRTHKILL.wav",
+			"move": "WRTHMOVE.wav",
+			"wince": "WRTHWNCE.wav"
+		},
+		{
+			"name": "Wyvern",
+			"attack": "WYVNATTK.wav",
+			"defend": "WYVNDFND.wav",
+			"killed": "WYVNKILL.wav",
+			"move": "WYVNMOVE.wav",
+			"wince": "WYVNWNCE.wav"
+		},
+		{
+			"name": "WyvernMonarch",
+			"attack": "WYVMATTK.wav",
+			"defend": "WYVMDFND.wav",
+			"killed": "WYVMKILL.wav",
+			"move": "WYVMMOVE.wav",
+			"wince": "WYVMWNCE.wav"
+		},
+		{
+			"name": "YoungBehemoth",
+			"attack": "YBMHATTK.wav",
+			"defend": "YBMHDFND.wav",
+			"killed": "YBMHKILL.wav",
+			"move": "YBMHMOVE.wav",
+			"wince": "YBMHWNCE.wav"
+		},
+		{
+			"name": "Zealot",
+			"attack": "ZELTATTK.wav",
+			"defend": "ZELTDFND.wav",
+			"killed": "ZELTKILL.wav",
+			"move": "ZELTMOVE.wav",
+			"shoot": "ZELTSHOT.wav",
+			"wince": "ZELTWNCE.wav"
+		},
+		{
+			"name": "Zombie",
+			"attack": "ZOMBATTK.wav",
+			"defend": "ZOMBDFND.wav",
+			"killed": "ZOMBKILL.wav",
+			"move": "ZOMBMOVE.wav",
+			"wince": "ZOMBWNCE.wav"
+		},
+		{
+			"name": "ZombieLord",
+			"attack": "ZMBLATTK.wav",
+			"defend": "ZMBLDFND.wav",
+			"killed": "ZMBLKILL.wav",
+			"move": "ZMBLMOVE.wav",
+			"wince": "ZMBLWNCE.wav"
+		}
+	]
+}
+
+// For future reference. Creatures from WoG.
+// 137 Sharpshooter
+// 149 ArrowTower
+// 150 SupremeArchangel
+// 151 DiamondDragon
+// 152 LordofThunder
+// 153 HellBaron
+// 154 BloodDragon
+// 155 DarknessDragon
+// 156 GhostBehemoth
+// 157 HellHydra
+// 158 SacredPhoenix
+// 159 Ghost
+// 160 God1War
+// 161 God2Peace
+// 162 God3Mana
+// 163 God4Lore
+// 164 MinotaurKing
+// 165 MineralElemental
+// 166 ElectricityElemental
+// 167 AncientBasilisk
+// 168 Gorynych
+// 169 WarZealot
+// 170 Myriad
+// 171 MedusaMatriarch
+// 172 Nightmare
+// 173 SantaGremlin
+// 174 Paladin1
+// 175 Hierophant1
+// 176 TempleGuardian1
+// 177 Succubus1
+// 178 SoulEater1
+// 179 Brute1
+// 180 OgreLeader1
+// 181 Shaman1
+// 182 AstralSpirit1
+// 183 Paladin2
+// 184 Hierophant2
+// 185 TempleGuardian2
+// 186 Succubus2
+// 187 SoulEater2
+// 188 Brute2
+// 189 OgreLeader2
+// 190 Shaman2
+// 191 AstralSpirit2
+// 192 SylvanCentaur
+// 193 Sorceress
+// 194 Werewolf
+// 195 HellSteed
+// 196 Dracolich

+ 0 - 202
config/cr_sounds.txt

@@ -1,202 +0,0 @@
-# Format is: <creature number> <attack> <defend> <killed> <move> <shoot> <wince> <ext1> <ext2>
-# All fields are mandatory, except ext1 and ext2.
-# If a sound doesn't exist or is not applicable, use invalid.
-
-AdvancedLizardman ALIZATTK.wav ALIZDFND.wav ALIZKILL.wav ALIZMOVE.wav ALIZSHOT.wav ALIZWNCE.wav
-AirElemental AELMATTK.wav AELMDFND.wav AELMKILL.wav AELMMOVE.wav invalid AELMWNCE.wav
-AmmoCart invalid invalid CARTKILL.wav invalid invalid CARTWNCE.wav
-AncientBehemoth BMTHATTK.wav BMTHDFND.wav BMTHKILL.wav BMTHMOVE.wav invalid BMTHWNCE.wav
-Angel ANGLATTK.wav ANGLDFND.wav ANGLKILL.wav ANGLMOVE.wav invalid ANGLWNCE.wav
-ApprenticeGremlin AGRMATTK.wav AGRMDFND.wav AGRMKILL.wav AGRMMOVE.wav AGRMSHOT.wav AGRMWNCE.wav
-ArchDevil ADVLATTK.wav ADVLDFND.wav ADVLKILL.wav ADVLMOVE.wav invalid ADVLWNCE.wav ADVLEXT1.wav ADVLEXT2.wav
-ArchMage AMAGATTK.wav AMAGDFND.wav AMAGKILL.wav AMAGMOVE.wav AMAGSHOT.wav AMAGWNCE.wav
-Archangel AAGLATTK.wav AAGLDFND.wav AAGLKILL.wav AAGLMOVE.wav invalid AAGLWNCE.wav
-AzureDragon AZURATTK.wav AZURDFND.wav AZURKILL.wav AZURMOVE.wav invalid AZURWNCE.wav
-Ballista invalid  invalid BALLKILL.wav invalid BALLSHOT.wav BALLWNCE.wav
-Basilisk BASLATTK.wav BASLDFND.wav BASLKILL.wav BASLMOVE.wav invalid BASLWNCE.wav
-BattleDwarf BDRFATTK.wav BDRFDFND.wav BDRFKILL.wav BDRFMOVE.wav invalid BDRFWNCE.wav
-Beholder BHDRATTK.wav BHDRDFND.wav BHDRKILL.wav BHDRMOVE.wav BHDRSHOT.wav BHDRWNCE.wav BHDRDETH.wav
-BlackDragon BKDRATTK.wav BKDRDFND.wav BKDRKILL.wav BKDRMOVE.wav invalid BKDRWNCE.wav
-BlackKnight BKNTATTK.wav BKNTDFND.wav BKNTKILL.wav BKNTMOVE.wav invalid BKNTWNCE.wav
-BlackLord BLRDATTK.wav BLRDDFND.wav BLRDKILL.wav BLRDMOVE.wav invalid BLRDWNCE.wav
-Boar BOARATTK.wav BOARDFND.wav BOARKILL.wav BOARMOVE.wav invalid BOARWNCE.wav
-BoneDragon BODRATTK.wav BODRDFND.wav BODRKILL.wav BODRMOVE.wav invalid BODRWNCE.wav
-BriarTreefolk BTREATTK.wav BTREDFND.wav BTREKILL.wav BTREMOVE.wav invalid BTREWNCE.wav
-BronzeGorgon BGORATTK.wav BGORDFND.wav BGORKILL.wav BGORMOVE.wav invalid BGORWNCE.wav
-Caliph CALFATTK.wav CALFDFND.wav CALFKILL.wav CALFMOVE.wav CALFSHOT.wav CALFWNCE.wav
-Catapult invalid invalid CATAKILL.wav invalid CATASHOT.wav CATAWNCE.wav
-Cavalier CAVAATTK.wav CAVADFND.wav CAVAKILL.wav CAVAMOVE.wav invalid CAVAWNCE.wav
-Centaur CNTRATTK.wav CNTRDFND.wav CNTRKILL.wav CNTRMOVE.wav CNTRSHOT.wav CNTRWNCE.wav
-Cerberus CERBATTK.wav CERBDFND.wav CERBKILL.wav CERBMOVE.wav invalid CERBWNCE.wav
-Champion CHMPATTK.wav CHMPDFND.wav CHMPKILL.wav CHMPMOVE.wav invalid CHMPWNCE.wav
-ChaosHydra CHYDATTK.wav CHYDDFND.wav CHYDKILL.wav CHYDMOVE.wav invalid CHYDWNCE.wav
-CopperGorgon CGORATTK.wav CGORDFND.wav CGORKILL.wav CGORMOVE.wav invalid CGORWNCE.wav
-Crusader CRUSATTK.wav CRUSDFND.wav CRUSKILL.wav CRUSMOVE.wav invalid CRUSWNCE.wav
-CrystalDragon CRYSATTK.wav CRYSDFND.wav CRYSKILL.wav CRYSMOVE.wav invalid CRYSWNCE.wav
-Cyclops CCYCATTK.wav CCYCDFND.wav CCYCKILL.wav CCYCMOVE.wav CCYCSHOT.wav CCYCWNCE.wav
-CyclopsLord CYCLATTK.wav CYCLDFND.wav CYCLKILL.wav CYCLMOVE.wav CYCLSHOT.wav CYCLWNCE.wav
-Devil DEVLATTK.wav DEVLDFND.wav DEVLKILL.wav DEVLMOVE.wav invalid DEVLWNCE.wav DEVLEXT1.wav DEVLEXT2.wav
-DiamondGolem DGLMATTK.wav DGLMDFND.wav DGLMKILL.wav DGLMMOVE.wav invalid DGLMWNCE.wav
-DragonFly DFLYATTK.wav DFLYDFND.wav DFLYKILL.wav DFLYMOVE.wav invalid DFLYWNCE.wav
-Dual-HornedDemon DHDMATTK.wav DHDMDFND.wav DHDMKILL.wav DHDMMOVE.wav invalid DHDMWNCE.wav
-Dwarf DWRFATTK.wav DWRFDFND.wav DWRFKILL.wav DWRFMOVE.wav invalid DWRFWNCE.wav
-EarthElemental EELMATTK.wav EELMDFND.wav EELMKILL.wav EELMMOVE.wav invalid EELMWNCE.wav
-Efreet EFRTATTK.wav EFRTDFND.wav EFRTKILL.wav EFRTMOVE.wav invalid EFRTWNCE.wav
-EfreetSultan ESULATTK.wav ESULDFND.wav ESULKILL.wav ESULMOVE.wav ESULSHOT.wav ESULWNCE.wav
-ElectricityElemental ENERATTK.wav ENERDFND.wav ENERKILL.wav ENERMOVE.wav invalid ENERWNCE.wav
-EliteCentaur ECNTATTK.wav ECNTDFND.wav ECNTKILL.wav ECNTMOVE.wav invalid ECNTWNCE.wav
-Enchanter ENCHATTK.wav ENCHDFND.wav ENCHKILL.wav ENCHMOVE.wav ENCHSHOT.wav ENCHWNCE.wav
-EvilEye EVLIATTK.wav EVLIDFND.wav EVLIKILL.wav EVLIMOVE.wav EVLISHOT.wav EVLIWNCE.wav EVLIDETH.wav
-FairieDragon FAERATTK.wav FAERDFND.wav FAERKILL.wav FAERMOVE.wav FAERSHOT.wav FAERWNCE.wav
-Familiar FMLRATTK.wav FMLRDFND.wav FMLRKILL.wav FMLRMOVE.wav invalid FMLRWNCE.wav
-FireDragonFly FDFLATTK.wav FDFLDFND.wav FDFLKILL.wav FDFLMOVE.wav FDFLSHOT.wav FDFLWNCE.wav
-FireElemental FELMATTK.wav FELMDFND.wav FELMKILL.wav FELMMOVE.wav invalid FELMWNCE.wav
-Firebird FIRBATTK.wav FIRBDFND.wav FIRBKILL.wav FIRBMOVE.wav invalid FIRBWNCE.wav
-FirstAidTent invalid invalid FAIDKILL.wav invalid invalid FAIDWNCE.wav
-Genie GENIATTK.wav GENIDFND.wav GENIKILL.wav GENIMOVE.wav invalid GENIWNCE.wav
-GhostDragon GHDRATTK.wav GHDRDFND.wav GHDRKILL.wav GHDRMOVE.wav invalid GHDRWNCE.wav
-Gnoll GNOLATTK.wav GNOLDFND.wav GNOLKILL.wav GNOLMOVE.wav invalid GNOLWNCE.wav
-GnollMarauder GNLMATTK.wav GNLMDFND.wav GNLMKILL.wav GNLMMOVE.wav invalid GNLMWNCE.wav
-Goblin GBLNATTK.wav GBLNDFND.wav GBLNKILL.wav GBLNMOVE.wav invalid GBLNWNCE.wav
-GoblinWolfRider GWRDATTK.wav GWRDDFND.wav GWRDKILL.wav GWRDMOVE.wav invalid GWRDWNCE.wav
-Gog GOGGATTK.wav GOGGDFND.wav GOGGKILL.wav GOGGMOVE.wav GOGGSHOT.wav GOGGWNCE.wav GOGFLAME.wav
-GoldDragon GODRATTK.wav GODRDFND.wav GODRKILL.wav GODRMOVE.wav invalid GODRWNCE.wav
-GoldGolem GGLMATTK.wav GGLMDFND.wav GGLMKILL.wav GGLMMOVE.wav invalid GGLMWNCE.wav
-GrandElf GELFATTK.wav GELFDFND.wav GELFKILL.wav GELFMOVE.wav GELFSHOT.wav GELFWNCE.wav
-GreaterBasilisk GBASATTK.wav GBASDFND.wav GBASKILL.wav GBASMOVE.wav invalid GBASWNCE.wav
-GreaterTitan GTITATTK.wav GTITDFND.wav GTITKILL.wav GTITMOVE.wav GTITSHOT.wav GTITWNCE.wav
-GreenDragon GRDRATTK.wav GRDRDFND.wav GRDRKILL.wav GRDRMOVE.wav invalid GRDRWNCE.wav
-Griffin GRIFATTK.wav GRIFDFND.wav GRIFKILL.wav GRIFMOVE.wav invalid GRIFWNCE.wav
-Halberdier HALBATTK.wav HALBDFND.wav HALBKILL.wav HALBMOVE.wav invalid HALBWNCE.wav
-Halfling HALFATTK.wav HALFDFND.wav HALFKILL.wav HALFMOVE.wav HALFSHOT.wav HALFWNCE.wav
-Harpy HARPATTK.wav HARPDFND.wav HARPKILL.wav HARPMOVE.wav silence HARPWNCE.wav
-HarpyHag HHAGATTK.wav HHAGDFND.wav HHAGKILL.wav HHAGMOVE.wav HHAGSHOT.wav HHAGWNCE.wav
-HeavyCrossbowman HCRSATTK.wav HCRSDFND.wav HCRSKILL.wav HCRSMOVE.wav HCRSSHOT.wav HCRSWNCE.wav
-HellHound HHNDATTK.wav HHNDDFND.wav HHNDKILL.wav HHNDMOVE.wav invalid HHNDWNCE.wav
-Hobgoblin HGOBATTK.wav HGOBDFND.wav HGOBKILL.wav HGOBMOVE.wav invalid HGOBWNCE.wav
-HobgoblinWolfRider HGWRATTK.wav HGWRDFND.wav HGWRKILL.wav HGWRMOVE.wav invalid HGWRWNCE.wav
-Hydra HYDRATTK.wav HYDRDFND.wav HYDRKILL.wav HYDRMOVE.wav invalid HYDRWNCE.wav
-IceElemental ICELATTK.wav ICELDFND.wav ICELKILL.wav ICELMOVE.wav ICELSHOT.wav ICELWNCE.wav
-Imp IMPPATTK.wav IMPPDFND.wav IMPPKILL.wav IMPPMOVE.wav invalid IMPPWNCE.wav
-InfernalTroglodyte ITRGATTK.wav ITRGDFND.wav ITRGKILL.wav ITRGMOVE.wav invalid ITRGWNCE.wav
-# StoneGolem is actually an Iron Golem
-StoneGolem IGLMATTK.wav IGLMDFND.wav IGLMKILL.wav IGLMMOVE.wav invalid IGLMWNCE.wav
-LesserTitan LTITATTK.wav LTITDFND.wav LTITKILL.wav LTITMOVE.wav invalid LTITWNCE.wav
-Lich LICHATTK.wav LICHDFND.wav LICHKILL.wav LICHMOVE.wav LICHSHOT.wav LICHWNCE.wav LICHATK2.wav
-LightCrossbowman LCRSATTK.wav LCRSDFND.wav LCRSKILL.wav LCRSMOVE.wav LCRSSHOT.wav LCRSWNCE.wav
-Mage MAGEATTK.wav MAGEDFND.wav MAGEKILL.wav MAGEMOVE.wav MAGESHOT.wav MAGEWNCE.wav
-MagicElemental MGELATTK.wav MGELDFND.wav MGELKILL.wav MGELMOVE.wav invalid MGELWNCE.wav
-Magog MGOGATTK.wav MGOGDFND.wav MGOGKILL.wav MGOGMOVE.wav MGOGSHOT.wav MGOGWNCE.wav GOGFLAME.wav
-Manticore MANTATTK.wav MANTDFND.wav MANTKILL.wav MANTMOVE.wav MANTSHOT.wav MANTWNCE.wav
-MasterGremlin MGRMATTK.wav MGRMDFND.wav MGRMKILL.wav MGRMMOVE.wav MGRMSHOT.wav MGRMWNCE.wav
-Medusa MEDUATTK.wav MEDUDFND.wav MEDUKILL.wav MEDUMOVE.wav MEDUSHOT.wav MEDUWNCE.wav
-MedusaQueen MEDQATTK.wav MEDQDFND.wav MEDQKILL.wav MEDQMOVE.wav MEDQSHOT.wav MEDQWNCE.wav
-Minotaur MINOATTK.wav MINODFND.wav MINOKILL.wav MINOMOVE.wav invalid MINOWNCE.wav
-MinotaurKing MINKATTK.wav MINKDFND.wav MINKKILL.wav MINKMOVE.wav MINKSHOT.wav MINKWNCE.wav
-Monk MONKATTK.wav MONKDFND.wav MONKKILL.wav MONKMOVE.wav MONKSHOT.wav MONKWNCE.wav
-Mummy MUMYATTK.wav MUMYDFND.wav MUMYKILL.wav MUMYMOVE.wav invalid MUMYWNCE.wav
-NagaGuardian NGRDATTK.wav NGRDDFND.wav NGRDKILL.wav NGRDMOVE.wav invalid NGRDWNCE.wav
-NagaSentinel NSENATTK.wav NSENDFND.wav NSENKILL.wav NSENMOVE.wav invalid NSENWNCE.wav
-Nosferatu NOSFATTK.wav NOSFDFND.wav NOSFKILL.wav NOSFMOVE.wav NOSFSHOT.wav NOSFWNCE.wav NOSFEXT1.wav NOSFEXT2.wav 
-ObsidianGargoyle OGRGATTK.wav OGRGDFND.wav OGRGKILL.wav OGRGMOVE.wav invalid OGRGWNCE.wav
-Ogre OGREATTK.wav OGREDFND.wav OGREKILL.wav OGREMOVE.wav invalid OGREWNCE.wav
-OgreMage OGRMATTK.wav OGRMDFND.wav OGRMKILL.wav OGRMMOVE.wav OGRMSHOT.wav OGRMWNCE.wav
-OgreShaman TRLLATTK.wav TRLLDFND.wav TRLLKILL.wav TRLLMOVE.wav invalid TRLLWNCE.wav
-Orc OORCATTK.wav OORCDFND.wav OORCKILL.wav OORCMOVE.wav OORCSHOT.wav OORCWNCE.wav
-OrcChieftain ORCCATTK.wav ORCCDFND.wav ORCCKILL.wav ORCCMOVE.wav ORCCSHOT.wav ORCCWNCE.wav
-Peasant PSNTATTK.wav PSNTDFND.wav PSNTKILL.wav PSNTMOVE.wav invalid PSNTWNCE.wav
-Pegasus PEGAATTK.wav PEGADFND.wav PEGAKILL.wav PEGAMOVE.wav invalid PEGAWNCE.wav
-Pheonix PHOEATTK.wav PHOEDFND.wav PHOEKILL.wav PHOEMOVE.wav invalid PHOEWNCE.wav
-Pikeman PIKEATTK.wav PIKEDFND.wav PIKEKILL.wav PIKEMOVE.wav invalid PIKEWNCE.wav
-PitFiend PFNDATTK.wav PFNDDFND.wav PFNDKILL.wav PFNDMOVE.wav invalid PFNDWNCE.wav
-PitFoe PFOEATTK.wav PFOEDFND.wav PFOEKILL.wav PFOEMOVE.wav invalid PFOEWNCE.wav
-Pixie PIXIATTK.wav PIXIDFND.wav PIXIKILL.wav PIXIMOVE.wav invalid PIXIWNCE.wav
-PowerLich PLCHATTK.wav PLCHDFND.wav PLCHKILL.wav PLCHMOVE.wav PLCHSHOT.wav PLCHWNCE.wav
-PrimitiveLizardman PLIZATTK.wav PLIZDFND.wav PLIZKILL.wav PLIZMOVE.wav PLIZSHOT.wav PLIZWNCE.wav
-PsiElemental PSYCATTK.wav PSYCDFND.wav PSYCKILL.wav PSYCMOVE.wav invalid PSYCWNCE.wav
-RedDragon RDDRATTK.wav RDDRDFND.wav RDDRKILL.wav RDDRMOVE.wav invalid RDDRWNCE.wav
-Roc ROCCATTK.wav ROCCDFND.wav ROCCKILL.wav ROCCMOVE.wav invalid ROCCWNCE.wav
-Rogue ROGUATTK.wav ROGUDFND.wav ROGUKILL.wav ROGUMOVE.wav invalid ROGUWNCE.wav
-RoyalGriffin RGRFATTK.wav RGRFDFND.wav RGRFKILL.wav RGRFMOVE.wav invalid RGRFWNCE.wav
-RustDragon RUSTATTK.wav RUSTDFND.wav RUSTKILL.wav RUSTMOVE.wav invalid RUSTWNCE.wav
-Scorpicore SCRPATTK.wav SCRPDFND.wav SCRPKILL.wav SCRPMOVE.wav SCRPSHOT.wav SCRPWNCE.wav
-SilverPegasus APEGATTK.wav APEGDFND.wav APEGKILL.wav APEGMOVE.wav invalid APEGWNCE.wav
-Single-HornedDemon SHDMATTK.wav SHDMDFND.wav SHDMKILL.wav SHDMMOVE.wav invalid SHDMWNCE.wav
-Skeleton SKELATTK.wav SKELDFND.wav SKELKILL.wav SKELMOVE.wav invalid SKELWNCE.wav
-SkeletonWarrior SKLWATTK.wav SKLWDFND.wav SKLWKILL.wav SKLWMOVE.wav invalid SKLWWNCE.wav
-Sprite SPRTATTK.wav SPRTDFND.wav SPRTKILL.wav SPRTMOVE.wav invalid SPRTWNCE.wav
-StoneElemental MAGMATTK.wav MAGMDFND.wav MAGMKILL.wav MAGMMOVE.wav invalid MAGMWNCE.wav
-StoneGargoyle SGRGATTK.wav SGRGDFND.wav SGRGKILL.wav SGRGMOVE.wav invalid SGRGWNCE.wav
-# IronGolem is actually a Stone Golem
-IronGolem SGLMATTK.wav SGLMDFND.wav SGLMKILL.wav SGLMMOVE.wav invalid SGLMWNCE.wav
-StormElemental STORATTK.wav STORDFND.wav STORKILL.wav STORMOVE.wav STORSHOT.wav STORWNCE.wav
-Swordsman SWRDATTK.wav SWRDDFND.wav SWRDKILL.wav SWRDMOVE.wav invalid SWRDWNCE.wav
-Thunderbird TBRDATTK.wav TBRDDFND.wav TBRDKILL.wav TBRDMOVE.wav invalid TBRDWNCE.wav
-Treefolk TREEATTK.wav TREEDFND.wav TREEKILL.wav TREEMOVE.wav invalid TREEWNCE.wav
-Troglodyte TROGATTK.wav TROGDFND.wav TROGKILL.wav TROGMOVE.wav invalid TROGWNCE.wav
-Unicorn UNICATTK.wav UNICDFND.wav UNICKILL.wav UNICMOVE.wav invalid UNICWNCE.wav
-Vampire VAMPATTK.wav VAMPDFND.wav VAMPKILL.wav VAMPMOVE.wav invalid VAMPWNCE.wav VAMPEXT1.wav VAMPEXT2.wav
-warrior NMADATTK.wav NMADDFND.wav NMADKILL.wav NMADMOVE.wav invalid NMADWNCE.wav
-WarUnicorn WUNCATTK.wav WUNCDFND.wav WUNCKILL.wav WUNCMOVE.wav WUNCSHOT.wav WUNCWNCE.wav
-WaterElemental WELMATTK.wav WELMDFND.wav WELMKILL.wav WELMMOVE.wav invalid WELMWNCE.wav
-Wight WGHTATTK.wav WGHTDFND.wav WGHTKILL.wav WGHTMOVE.wav invalid WGHTWNCE.wav
-WoodElf WELFATTK.wav WELFDFND.wav WELFKILL.wav WELFMOVE.wav WELFSHOT.wav WELFWNCE.wav
-Wraith WRTHATTK.wav WRTHDFND.wav WRTHKILL.wav WRTHMOVE.wav invalid WRTHWNCE.wav
-Wyvern WYVNATTK.wav WYVNDFND.wav WYVNKILL.wav WYVNMOVE.wav invalid WYVNWNCE.wav
-WyvernMonarch WYVMATTK.wav WYVMDFND.wav WYVMKILL.wav WYVMMOVE.wav invalid WYVMWNCE.wav
-YoungBehemoth YBMHATTK.wav YBMHDFND.wav YBMHKILL.wav YBMHMOVE.wav invalid YBMHWNCE.wav
-Zealot ZELTATTK.wav ZELTDFND.wav ZELTKILL.wav ZELTMOVE.wav ZELTSHOT.wav ZELTWNCE.wav
-Zombie ZOMBATTK.wav ZOMBDFND.wav ZOMBKILL.wav ZOMBMOVE.wav invalid ZOMBWNCE.wav
-ZombieLord ZMBLATTK.wav ZMBLDFND.wav ZMBLKILL.wav ZMBLMOVE.wav invalid ZMBLWNCE.wav
-
-
-
-# 137 Sharpshooter
-# 149 ArrowTower
-# 150 SupremeArchangel
-# 151 DiamondDragon
-# 152 LordofThunder
-# 153 HellBaron
-# 154 BloodDragon
-# 155 DarknessDragon
-# 156 GhostBehemoth
-# 157 HellHydra
-# 158 SacredPhoenix
-# 159 Ghost
-# 160 God1War
-# 161 God2Peace
-# 162 God3Mana
-# 163 God4Lore
-# 164 MinotaurKing
-# 165 MineralElemental
-# 166 ElectricityElemental
-# 167 AncientBasilisk
-# 168 Gorynych
-# 169 WarZealot
-# 170 Myriad
-# 171 MedusaMatriarch
-# 172 Nightmare
-# 173 SantaGremlin
-# 174 Paladin1
-# 175 Hierophant1
-# 176 TempleGuardian1
-# 177 Succubus1
-# 178 SoulEater1
-# 179 Brute1
-# 180 OgreLeader1
-# 181 Shaman1
-# 182 AstralSpirit1
-# 183 Paladin2
-# 184 Hierophant2
-# 185 TempleGuardian2
-# 186 Succubus2
-# 187 SoulEater2
-# 188 Brute2
-# 189 OgreLeader2
-# 190 Shaman2
-# 191 AstralSpirit2
-# 192 SylvanCentaur
-# 193 Sorceress
-# 194 Werewolf
-# 195 HellSteed
-# 196 Dracolich