From 8824f5e2d54f57d17a56e83ec9c01d18dd0135c5 Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Sat, 22 Dec 2012 16:47:12 +0000 Subject: [PATCH] - H3 creatures use subset of mod creature format (todo - unify code) - creatures configs moved into confg/creatures files, similar to factions. - creatures ID's use same camelCase format as the rest of the game --- AI/BattleAI/BattleAI.cpp | 2 + CMakeLists.txt | 2 +- config/commanders.json | 16 +- config/cr_sounds.json | 1330 -------------------- config/creatures.json | 1992 ------------------------------ config/creatures/castle.json | 297 +++++ config/creatures/conflux.json | 336 +++++ config/creatures/dungeon.json | 310 +++++ config/creatures/fortress.json | 287 +++++ config/creatures/inferno.json | 309 +++++ config/creatures/necropolis.json | 294 +++++ config/creatures/neutral.json | 333 +++++ config/creatures/rampart.json | 291 +++++ config/creatures/special.json | 122 ++ config/creatures/stronghold.json | 295 +++++ config/creatures/tower.json | 308 +++++ config/creatures/wog.json | 729 +++++++++++ config/factions/castle.json | 20 +- config/factions/conflux.json | 20 +- config/factions/dungeon.json | 20 +- config/factions/fortress.json | 20 +- config/factions/inferno.json | 20 +- config/factions/necropolis.json | 20 +- config/factions/neutral.json | 2 +- config/factions/rampart.json | 20 +- config/factions/stronghold.json | 20 +- config/factions/tower.json | 20 +- config/gameConfig.json | 19 + lib/CCreatureHandler.cpp | 82 +- lib/CCreatureHandler.h | 6 +- lib/CHeroHandler.cpp | 1 + lib/CModHandler.cpp | 33 +- lib/CModHandler.h | 2 + lib/CTownHandler.cpp | 2 +- lib/CTownHandler.h | 1 - 35 files changed, 4086 insertions(+), 3495 deletions(-) delete mode 100644 config/cr_sounds.json delete mode 100644 config/creatures.json create mode 100644 config/creatures/castle.json create mode 100644 config/creatures/conflux.json create mode 100644 config/creatures/dungeon.json create mode 100644 config/creatures/fortress.json create mode 100644 config/creatures/inferno.json create mode 100644 config/creatures/necropolis.json create mode 100644 config/creatures/neutral.json create mode 100644 config/creatures/rampart.json create mode 100644 config/creatures/special.json create mode 100644 config/creatures/stronghold.json create mode 100644 config/creatures/tower.json create mode 100644 config/creatures/wog.json diff --git a/AI/BattleAI/BattleAI.cpp b/AI/BattleAI/BattleAI.cpp index 10d4f75a9..a95dc28bf 100644 --- a/AI/BattleAI/BattleAI.cpp +++ b/AI/BattleAI/BattleAI.cpp @@ -145,6 +145,7 @@ bool isCloser(const EnemyInfo & ei1, const EnemyInfo & ei2, const ReachabilityIn } //FIXME: unused function +/* static bool willSecondHexBlockMoreEnemyShooters(const BattleHex &h1, const BattleHex &h2) { int shooters[2] = {0}; //count of shooters on hexes @@ -157,6 +158,7 @@ static bool willSecondHexBlockMoreEnemyShooters(const BattleHex &h1, const Battl return shooters[0] < shooters[1]; } +*/ template auto sum(const Container & c, Pred p) -> decltype(p(*boost::begin(c))) diff --git a/CMakeLists.txt b/CMakeLists.txt index 678aa82b0..6fecadf80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ option(DISABLE_ERM "Disable compilation of ERM scripting module" ON) if (APPLE) # Default location for thirdparty libs - set(CMAKE_INCLUDE_PATH "../include") + set(CMAKE_INCLUDE_PATH "../include ${CMAKE_OSX_SYSROOT}/usr/include") set(CMAKE_LIBRARY_PATH "../lib") set(CMAKE_FRAMEWORK_PATH "../Frameworks") set(BOOST_ROOT "../") diff --git a/config/commanders.json b/config/commanders.json index 5b2cf3eb0..9706137e2 100644 --- a/config/commanders.json +++ b/config/commanders.json @@ -1,19 +1,5 @@ { - //Map faction - commander creature - //Using "attacking creature" from WoG - whatever it means - "factionCreatures": - [ - {"faction": 0, "id": 174}, - {"faction": 1, "id": 175}, - {"faction": 2, "id": 176}, - {"faction": 3, "id": 177}, - {"faction": 4, "id": 178}, - {"faction": 5, "id": 179}, - {"faction": 6, "id": 180}, - {"faction": 7, "id": 181}, - {"faction": 8, "id": 182} - ], //Commander receives these bonuses on level-up "bonusPerLevel": [ @@ -133,4 +119,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/config/cr_sounds.json b/config/cr_sounds.json deleted file mode 100644 index 61fc585c2..000000000 --- a/config/cr_sounds.json +++ /dev/null @@ -1,1330 +0,0 @@ -{ - "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": "Sharpshooter", - "attack": "HCRSATTK.wav", - "defend": "HCRSDFND.wav", - "killed": "HCRSKILL.wav", - "move": "HCRSMOVE.wav", - "shoot": "HCRSSHOT.wav", - "wince": "HCRSWNCE.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" - }, - // Commanders - { - "name": "AstralSpirit1", - "attack": "GENIATTK.wav", - "defend": "GENIDFND.wav", - "killed": "GENIKILL.wav", - "move": "GENIMOVE.wav", - "wince": "GENIWNCE.wav" - }, - { - "name": "Shaman1", - "attack": "AMAGATTK.wav", - "defend": "AMAGDFND.wav", - "killed": "AMAGKILL.wav", - "move": "AMAGMOVE.wav", - "shoot": "AMAGSHOT.wav", - "wince": "AMAGWNCE.wav" - }, - { - "name": "OgreLeader1", - "attack": "TRLLATTK.wav", - "defend": "TRLLDFND.wav", - "killed": "TRLLKILL.wav", - "move": "TRLLMOVE.wav", - "wince": "TRLLWNCE.wav" - }, - { - "name": "Brute1", - "attack": "PFOEATTK.wav", - "defend": "PFOEDFND.wav", - "killed": "PFOEKILL.wav", - "move": "PFOEMOVE.wav", - "wince": "PFOEWNCE.wav" - }, - { - "name": "SoulEater1", - "attack": "GNOLATTK.wav", - "defend": "GNOLDFND.wav", - "killed": "GNOLKILL.wav", - "move": "GNOLMOVE.wav", - "wince": "GNOLWNCE.wav" - }, - { - "name": "Succubus1", - "attack": "SGRGATTK.wav", - "defend": "SGRGDFND.wav", - "killed": "SGRGKILL.wav", - "move": "SGRGMOVE.wav", - "wince": "SGRGWNCE.wav" - }, - { - "name": "TempleGuardian1", - "attack": "LICHATTK.wav", - "defend": "LICHDFND.wav", - "killed": "LICHKILL.wav", - "move": "LICHMOVE.wav", - "shoot": "LICHSHOT.wav", - "wince": "LICHWNCE.wav", - "ext1": "LICHATK2.wav" - }, - { - "name": "Hierophant1", - "attack": "MONKATTK.wav", - "defend": "MONKDFND.wav", - "killed": "MONKKILL.wav", - "move": "MONKMOVE.wav", - "shoot": "MONKSHOT.wav", - "wince": "MONKWNCE.wav" - }, - { - "name": "Paladin1", - "attack": "CRUSATTK.wav", - "defend": "CRUSDFND.wav", - "killed": "CRUSKILL.wav", - "move": "CRUSMOVE.wav", - "wince": "CRUSWNCE.wav" - } - ] -} - -// For future reference. Creatures from WoG and their sound prefixes. -//aagl ZM150Z.def SupremeArchangel -//godr ZM151Z.def DiamondDragon -//gtit ZM152Z.def LordofThunder -//advl ZM153Z.def HellBaron -//ghdr ZM154Z.def BloodDragon -//bkdr ZM155Z.def DarknessDragon -//bmth ZM156Z.def GhostBehemoth -//chyd ZM157Z.def HellHydra -//phoe ZM158Z.def SacredPhoenix -//wrth ZM159G.def Ghost -//aagl ZM160G.def God1War -//aagl ZM161G.def God2Peace -//aagl ZM162G.def God3Mana -//aagl ZM163G.def God4Lore -//sglm ZM164GD.def MinotaurKing -//sglm ZM165GD.def MineralElemental -//sglm ZM166GD.def ElectricityElemental -//sglm ZM167GD.def AncientBasilisk -//bkdr ZM168DG.def Gorynych -//zelt ZM169ZL.def WarZealot -//hcrs ZM170SW.def Myriad -//hcrs ZM171SR.def MedusaMatriarch -//bgor ZM172N.def Nightmare -//aagl ZM173M.def SantaGremlin - -//crus ZM174NPC.def Paladin2 -//monk ZM175NPC.def Hierophant2 -//lich ZM176NPC.def TempleGuardian2 -//sgrg ZM177NPC.def Succubus2 -//gnol ZM178NPC.def SoulEater2 -///pfoe ZM179NPC.def Brute2 -//trll ZM180NPC.def OgreLeader2 -//amag ZM181NPC.def Shaman2 -//geni ZM182NPC.def AstralSpirit2 - -//ecnt ZM192Z.def SylvanCentaur -//monk ZM193Z.def Sorceress -//monk ZM194Z.def Werewolf -//bgor ZM195Z.def HellSteed -//ghdr ZM196Z.def Dracolich diff --git a/config/creatures.json b/config/creatures.json deleted file mode 100644 index da89a46cc..000000000 --- a/config/creatures.json +++ /dev/null @@ -1,1992 +0,0 @@ -// Defines creatures. - -// The following properties are mandatory: -// id: number of the creature -// name: array of names for the creature -// defname: graphics for the creature -// level: its level (1 to 7) -// faction: its faction (0 to 8) - -// The following properties are optional: -// upgrades: id of the creatures to upgrade to -// projectile_defname: if the creature is a shooter, graphics for the projectile -// projectile_spin: if the creature is a shooter, indicate whether the projectile spins -// turret_shooter: indicates whether the shooter appears in the castle turrets -// ability_add: adding a abilities ( [ABILITY] [value] [subtype] [additional info] ) -// ability_remove: removing an existing ability ( [ABILITY] ) - -{ - "creatures": - [ - { - "id": 0, - "level": 1, - "name": [ "Pikeman" ], - "faction": "castle", - "upgrades": ["Halberdier"], - "ability_add": [ [ "CHARGE_IMMUNITY", 0, 0, 0 ] ], //pikeman immunity to Champion charge bonus - "defname": "CPKMAN.DEF" - }, - - { - "id": 1, - "level": 1, - "name": [ "Halberdier" ], - "faction": "castle", - "ability_add": [ [ "CHARGE_IMMUNITY", 0, 0, 0 ] ], //halberdier immunity to Champion charge bonus - "defname": "CHALBD.DEF" - }, - - { - "id": 2, - "level": 2, - "name": [ "Archer", "LightCrossbowman" ], - "faction": "castle", - "upgrades": ["HeavyCrossbowman"], - "defname": "CLCBOW.DEF", - "projectile_defname": "PLCBOWX.DEF", - "projectile_spin": false - }, - - { - "id": 3, - "level": 2, - "name": [ "HeavyCrossbowman" ], - "faction": "castle", - "defname": "CHCBOW.DEF", - "projectile_defname": "PLCBOWX.DEF", - "projectile_spin": false - }, - - { - "id": 4, - "level": 3, - "name": [ "Griffin" ], - "faction": "castle", - "ability_add": [ [ "ADDITIONAL_RETALIATION", 1, 0, 0 ] ], //griffins retaliate twice - "upgrades": ["RoyalGriffin"], - "defname": "CGRIFF.DEF" - }, - - { - "id": 5, - "level": 3, - "name": [ "RoyalGriffin" ], - "faction": "castle", - "ability_add": [ [ "UNLIMITED_RETALIATIONS", 0, 0, 0 ] ], //royal griffins retaliate always - "defname": "CRGRIF.DEF" - }, - - { - "id": 6, - "level": 4, - "name": [ "Swordsman" ], - "faction": "castle", - "upgrades": ["Crusader"], - "defname": "CSWORD.DEF" - }, - - { - "id": 7, - "level": 4, - "name": [ "Crusader" ], - "faction": "castle", - "defname": "CCRUSD.DEF" - }, - - { - "id": 8, - "level": 5, - "name": [ "Monk" ], - "faction": "castle", - "upgrades": ["Zealot"], - "defname": "CMONKK.DEF", - "projectile_defname": "CPRZEAX.DEF", - "projectile_spin": false - }, - - { - "id": 9, - "level": 5, - "name": [ "Zealot" ], - "faction": "castle", - "defname": "CZEALT.DEF", - "projectile_defname": "CPRZEAX.DEF", - "projectile_spin": false - }, - - { - "id": 10, - "level": 6, - "name": [ "Cavalier" ], - "faction": "castle", - "upgrades": ["Champion"], - "defname": "CCAVLR.DEF" - }, - - { - "id": 11, - "level": 6, - "name": [ "Champion" ], - "faction": "castle", - "defname": "CCHAMP.DEF" - }, - - { - "id": 12, - "level": 7, - "name": [ "Angel" ], - "faction": "castle", - "ability_add": [ [ "HATE", 50, 55, 0 ], //angels hate archdevils - [ "HATE", 50, 54, 0 ] ], //angels hate devils - "upgrades": ["Archangel"], - "defname": "CANGEL.DEF" - }, - - { - "id": 13, - "level": 7, - "name": [ "Archangel" ], - "faction": "castle", - "ability_add": [ [ "SPECIFIC_SPELL_POWER", 100, 38, 0 ], // 100 hp per Archangel - [ "SPELLCASTER", 0, 38, 0 ], //archangels cast resurrection - [ "HATE", 50, 55, 0 ], //archangels hate arch - [ "HATE", 50, 54, 0 ] , //archangels hate devils - [ "CASTS", 1, 0, 0]], - "defname": "CRANGL.DEF" - }, - - { - "id": 14, - "level": 1, - "name": [ "Centaur" ], - "faction": "rampart", - "upgrades": ["EliteCentaur"], - "defname": "CCENTR.DEF" - }, - - { - "id": 15, - "level": 1, - "name": [ "EliteCentaur" ], - "faction": "rampart", - "defname": "CECENT.DEF" - }, - - { - "id": 16, - "level": 2, - "name": [ "Dwarf" ], - "faction": "rampart", - "ability_add": [ [ "MAGIC_RESISTANCE", 20, 0, 0 ] ], //dwarf's magic resistance 20% - "upgrades": ["BattleDwarf"], - "defname": "CDWARF.DEF" - }, - - { - "id": 17, - "level": 2, - "name": [ "BattleDwarf" ], - "faction": "rampart", - "ability_add": [ [ "MAGIC_RESISTANCE", 40, 0, 0 ] ], //battle dwarf's magic resistance 40% - "defname": "CBDWAR.DEF" - }, - - { - "id": 18, - "level": 3, - "name": [ "WoodElf" ], - "faction": "rampart", - "upgrades": ["GrandElf"], - "defname": "CELF.DEF", - "projectile_defname": "PELFX.DEF", - "projectile_spin": false - }, - - { - "id": 19, - "level": 3, - "name": [ "GrandElf" ], - "faction": "rampart", - "defname": "CGRELF.DEF", - "projectile_defname": "PELFX.DEF", - "projectile_spin": false - }, - - { - "id": 20, - "level": 4, - "name": [ "Pegasus" ], - "faction": "rampart", - "ability_add": [ [ "CHANGES_SPELL_COST_FOR_ENEMY", 2, 0, 0 ] ], //pegasus makes spell cost higher for enemy mage - "upgrades": ["SilverPegasus"], - "defname": "CPEGAS.DEF" - }, - - { - "id": 21, - "level": 4, - "name": [ "SilverPegasus" ], - "faction": "rampart", - "ability_add": [ [ "CHANGES_SPELL_COST_FOR_ENEMY", 2, 0, 0 ] ], //silver pegasus makes spell cost higher for enemy mage - "defname": "CAPEGS.DEF" - }, - - { - "id": 22, - "level": 5, - "name": [ "Treefolk" ], - "faction": "rampart", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 100, 72, 0 ] ], //dendroids cast bind - "upgrades": ["BriarTreefolk"], - "defname": "CTREE.DEF" - }, - - { - "id": 23, - "level": 5, - "name": [ "BriarTreefolk" ], - "faction": "rampart", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 100, 72, 0 ] ], //dendroid guards cast bind - "defname": "CBTREE.DEF" - }, - - { - "id": 24, - "level": 6, - "name": [ "Unicorn" ], - "faction": "rampart", - "ability_add": [ [ "SPELL_RESISTANCE_AURA", 0, 55, 0 ], //unicorn - [ "SPELL_AFTER_ATTACK", 20, 62, 0 ] ], //unicorns cast blind with 20% probability - "upgrades": ["WarUnicorn"], - "defname": "CUNICO.DEF" - }, - - { - "id": 25, - "level": 6, - "name": [ "WarUnicorn" ], - "faction": "rampart", - "ability_add": [ [ "SPELL_RESISTANCE_AURA", 20, 55, 0 ], //war unicorn - [ "SPELL_AFTER_ATTACK", 20, 62, 0 ] ], //war unicorns cast blind with 20% probability - "defname": "CWUNIC.DEF" - }, - - { - "id": 26, - "level": 7, - "name": [ "GreenDragon" ], - "faction": "rampart", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //green dragon is a dragon - [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //green dragon's breath - [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ] ], //green dragon's spell immunity - "upgrades": ["GoldDragon"], - "defname": "CGDRAG.DEF" - }, - - { - "id": 27, - "level": 7, - "name": [ "GoldDragon" ], - "faction": "rampart", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //gold dragon is a dragon - [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //gold dragon's breath - [ "LEVEL_SPELL_IMMUNITY", 4, 0, 0 ] ], //gold dragon's spell immunity - "defname": "CDDRAG.DEF" - }, - - { - "id": 28, - "level": 1, - "name": [ "ApprenticeGremlin" ], - "faction": "tower", - "upgrades": ["MasterGremlin"], - "defname": "CGREMA.DEF" - }, - - { - "id": 29, - "level": 1, - "name": [ "MasterGremlin" ], - "faction": "tower", - "defname": "CGREMM.DEF", - "projectile_defname": "CPRGRE.DEF", - "projectile_spin": false - }, - - { - "id": 30, - "level": 2, - "name": [ "StoneGargoyle" ], - "faction": "tower", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ] ], //stone gargoyles are non-living - "upgrades": ["ObsidianGargoyle"], - "defname": "CGARGO.DEF" - }, - - { - "id": 31, - "level": 2, - "name": [ "ObsidianGargoyle" ], - "faction": "tower", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ] ], //obsidian gargoyles are non-living - "defname": "COGARG.DEF" - }, - - { - "id": 32, - "level": 3, - "name": [ "IronGolem" ], - "faction": "tower", - "ability_add": [ [ "SPELL_DAMAGE_REDUCTION", 50, -1, 0 ], //stone golems reduce dmg from spells - [ "NON_LIVING", 0, 0, 0 ] ], //stone golems are non-living - "upgrades": ["StoneGolem"], //? - "defname": "CSGOLE.DEF" - }, - - { - "id": 33, - "level": 3, - "name": [ "StoneGolem" ], - "faction": "tower", - "ability_add": [ [ "SPELL_DAMAGE_REDUCTION", 75, -1, 0 ], //iron golems reduce dmg from spells - [ "NON_LIVING", 0, 0, 0 ] ], //iron golems are non-living - "defname": "CIGOLE.DEF" - }, - - { - "id": 34, - "level": 4, - "name": [ "Mage" ], - "faction": "tower", - "ability_add": [ [ "CHANGES_SPELL_COST_FOR_ALLY", 2, 0, 0 ] ], //mages reduce spell cost - "upgrades": ["ArchMage"], - "defname": "CMAGE.DEF", - "projectile_defname": "PMAGEX.DEF", - "projectile_spin": false - }, - - { - "id": 35, - "level": 4, - "name": [ "ArchMage" ], - "faction": "tower", - "ability_add": [ [ "CHANGES_SPELL_COST_FOR_ALLY", 2, 0, 0 ]], //archmages reduce spell cost - "defname": "CAMAGE.DEF", - "projectile_defname": "PMAGEX.DEF", - "projectile_spin": false - }, - - { - "id": 36, - "level": 5, - "name": [ "Genie" ], - "faction": "tower", - "ability_add": [ [ "HATE", 50, 53, 0 ], //master genies hate efreets - [ "HATE", 50, 52, 0 ] ], //genies hate efreet sultans - "upgrades": ["Caliph"], - "defname": "CGENIE.DEF" - }, - - { - "id": 37, - "level": 5, - "name": [ "Caliph" ], - "faction": "tower", - "ability_add": [ [ "CREATURE_ENCHANT_POWER", 5, 0, 0 ], //spells last 5 turns - [ "RANDOM_SPELLCASTER", 2, 0, 0 ], //master genies cast spells on advanced level - [ "CASTS", 3, 0, 0], - [ "HATE", 50, 53, 0 ], - [ "HATE", 50, 52, 0 ] ], //master genies hate efreet sultans - "defname": "CSULTA.DEF" - }, - - { - "id": 38, - "level": 6, - "name": [ "NagaSentinel" ], - "faction": "tower", - "ability_add": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //nagas block retaliation - "upgrades": ["NagaGuardian"], - "defname": "CNAGA.DEF" - }, - - { - "id": 39, - "level": 6, - "name": [ "NagaGuardian" ], - "faction": "tower", - "ability_add": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //naga queens block retaliation - "defname": "CNAGAG.DEF" - }, - - { - "id": 40, - "level": 7, - "name": [ "LesserTitan" ], - "faction": "tower", - "ability_add": [ ["MIND_IMMUNITY", 0, 0, 0] ], //giants are immune to mind spells - "upgrades": ["GreaterTitan"], - "defname": "CLTITA.DEF" - }, - - { - "id": 41, - "level": 7, - "name": [ "GreaterTitan" ], - "faction": "tower", - "ability_add": [ ["MIND_IMMUNITY", 0, 0, 0], //Titans are immune to mind spells - [ "HATE", 50, 83, 0 ] ], //titans hate black dragons - "defname": "CGTITA.DEF", - "projectile_defname": "CPRGTIX.DEF", - "projectile_spin": false - }, - - { - "id": 42, - "level": 1, - "name": [ "Imp" ], - "faction": "inferno", - "upgrades": ["Familiar"], - "defname": "CIMP.DEF" - }, - - { - "id": 43, - "level": 1, - "name": [ "Familiar" ], - "faction": "inferno", - "ability_add": [ [ "MANA_CHANNELING", 20, 0, 0 ] ], //familiars - "defname": "CFAMIL.DEF" - }, - - { - "id": 44, - "level": 2, - "name": [ "Gog" ], - "faction": "inferno", - "upgrades": ["Magog"], - "defname": "CGOG.DEF", - "projectile_defname": "CPRGOGX.DEF", - "projectile_spin": false - }, - - { - "id": 45, - "level": 2, - "name": [ "Magog" ], - "faction": "inferno", - "ability_add": [ [ "SPELL_LIKE_ATTACK", 0, 21, 0 ] ], //magogs fire with fireballs - "defname": "CMAGOG.DEF", - "projectile_defname": "CPRGOGX.DEF", - "projectile_spin": false - }, - - { - "id": 46, - "level": 3, - "name": [ "HellHound" ], - "faction": "inferno", - "upgrades": ["Cerberus"], - "ability_remove": [ "FLYING" ], //hell hound doesn't fly - "defname": "CHHOUN.DEF" - }, - - { - "id": 47, - "level": 3, - "name": [ "Cerberus" ], - "faction": "inferno", - "ability_add": [ [ "THREE_HEADED_ATTACK", 0, 0, 0 ], - [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], - "ability_remove": [ "FLYING" ], //cerberus doesn't fly - "defname": "CCERBU.DEF" - }, - - { - "id": 48, - "level": 4, - "name": [ "Single-HornedDemon" ], - "faction": "inferno", - "upgrades": ["Dual-HornedDemon"], - "defname": "COHDEM.DEF" - }, - - { - "id": 49, - "level": 4, - "name": [ "Dual-HornedDemon" ], - "faction": "inferno", - "defname": "CTHDEM.DEF" - }, - - { - "id": 50, - "level": 5, - "name": [ "PitFiend" ], - "faction": "inferno", - "upgrades": ["PitFoe"], - "defname": "CPFIEN.DEF" - }, - - { - "id": 51, - "level": 5, - "name": [ "PitFoe" ], - "faction": "inferno", - "ability_add": [ [ "DAEMON_SUMMONING", 50, 48, 0 ], - [ "CASTS", 1, 0, 0] ], //pit lord - "defname": "CPFOE.DEF" - }, - - { - "id": 52, - "level": 6, - "name": [ "Efreet" ], - "faction": "inferno", - "ability_add": [ [ "HATE", 50, 37, 0 ], - [ "HATE", 50, 36, 0 ], - [ "FLYING", 0, 0, 0 ], //efreeti hate master genies - [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //efreeti hate genies - "upgrades": ["EfreetSultan"], - "defname": "CEFREE.DEF" - }, - - { - "id": 53, - "level": 6, - "name": [ "EfreetSultan" ], - "faction": "inferno", - "ability_add": [ [ "HATE", 50, 37, 0 ], - [ "HATE", 50, 36, 0 ], - [ "FLYING", 0, 0, 0 ], //efreet sultans hate master genies - [ "FIRE_SHIELD", 0, 36, 0 ], //efreet sultans hate genies - [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //efreet sultan //Efreet Sultan - "defname": "CEFRES.DEF" - }, - - { - "id": 54, - "level": 7, - "name": [ "Devil" ], - "faction": "inferno", - "ability_remove": [ "FLYING" ], //use teleport instead - "ability_add": [ [ "HATE", 50, 13, 0 ], - [ "FLYING", 0, 1, 0], //teleport - [ "HATE", 50, 12, 0 ], - [ "ENEMY_LUCK_DECREASING", 1, 0, 0 ], //devils //devils hate archangles - [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //devils //devils hate angels - "upgrades": ["ArchDevil"], - "defname": "CDEVIL.DEF" - }, - - { - "id": 55, - "level": 7, - "name": [ "ArchDevil" ], - "faction": "inferno", - "ability_remove": [ "FLYING" ], //use teleport instead - "ability_add": [ [ "HATE", 50, 13, 0 ], - [ "HATE", 50, 12, 0 ], - [ "FLYING", 0, 1, 0], - [ "ENEMY_LUCK_DECREASING", 1, 0, 0 ], //archdevils //archdevils hate archangles - [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //archdevils //archdevils hate angels - "defname": "CADEVL.DEF" - }, - - { - "id": 56, - "level": 1, - "name": [ "Skeleton" ], - "faction": "necropolis", - "upgrades": ["SkeletonWarrior"], - "defname": "CSKELE.DEF" - }, - - { - "id": 57, - "level": 1, - "name": [ "SkeletonWarrior" ], - "faction": "necropolis", - "defname": "CWSKEL.DEF" - }, - - { - "id": 58, - "level": 2, - "name": [ "Zombie" ], - "faction": "necropolis", - "upgrades": ["ZombieLord"], - "defname": "CZOMBI.DEF" - }, - - { - "id": 59, - "level": 2, - "name": [ "ZombieLord" ], - "faction": "necropolis", - "defname": "CZOMLO.DEF" - }, - - { - "id": 60, - "level": 3, - "name": [ "Wight" ], - "faction": "necropolis", - "ability_add": [ [ "FULL_HP_REGENERATION", 0, 1, 0 ] ], //wight - "upgrades": ["Wraith"], - "defname": "CWIGHT.DEF" - }, - - { - "id": 61, - "level": 3, - "name": [ "Wraith" ], - "faction": "necropolis", - "ability_add": [ [ "FULL_HP_REGENERATION", 0, 1, 0 ], //wraith - [ "MANA_DRAIN", 2, 0, 0 ] ], - "defname": "CWRAIT.DEF" - }, - - { - "id": 62, - "level": 4, - "name": [ "Vampire" ], - "faction": "necropolis", - "ability_add": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //vampires //vampire lords - "upgrades": ["Nosferatu"], - "defname": "CVAMP.DEF" - }, - - { - "id": 63, - "level": 4, - "name": [ "Nosferatu" ], - "faction": "necropolis", - "ability_add": [ [ "LIFE_DRAIN", 0, 0, 0 ], - [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //vampire lords - "defname": "CNOSFE.DEF" - }, - - { - "id": 64, - "level": 5, - "name": [ "Lich" ], - "faction": "necropolis", - "ability_add": [ [ "SPELL_LIKE_ATTACK", 0, 76, 0 ] ], //liches - "upgrades": ["PowerLich"], - "defname": "CLICH.DEF", - "projectile_defname": "PLICH.DEF", - "projectile_spin": false - }, - - { - "id": 65, - "level": 5, - "name": [ "PowerLich" ], - "faction": "necropolis", - "ability_add": [ [ "SPELL_LIKE_ATTACK", 0, 76, 0 ] ], //power liches - "defname": "CPLICH.DEF", - "projectile_defname": "PLICH.DEF", - "projectile_spin": false - }, - - { - "id": 66, - "level": 6, - "name": [ "BlackKnight" ], - "faction": "necropolis", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 42, 0 ] ], //black knights - "upgrades": ["BlackLord"], - "defname": "CBKNIG.DEF" - }, - - { - "id": 67, - "level": 6, - "name": [ "BlackLord" ], - "faction": "necropolis", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 42, 0 ], //dread knights - [ "DOUBLE_DAMAGE_CHANCE", 20, 0, 0 ] ], //vampire lords - "defname": "CBLORD.DEF" - }, - - { - "id": 68, - "level": 7, - "name": [ "BoneDragon" ], - "faction": "necropolis", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //bone dragon is a dragon - "upgrades": ["GhostDragon"], - "defname": "CNDRGN.DEF" - }, - - { - "id": 69, - "level": 7, - "name": [ "GhostDragon" ], - "faction": "necropolis", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //ghost dragon is a dragon - [ "SPELL_AFTER_ATTACK", 20, 75, 0 ] ], //ghost dragon - "defname": "CHDRGN.DEF" - }, - - { - "id": 70, - "level": 1, - "name": [ "Troglodyte" ], - "faction": "dungeon", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 62, 0 ] ], //troglodytes are immune to blind - "upgrades": ["InfernalTroglodyte"], - "defname": "CTROGL.DEF" - }, - - { - "id": 71, - "level": 1, - "name": [ "InfernalTroglodyte" ], - "faction": "dungeon", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 62, 0 ] ], //infernal troglodytes are immune to blind - "defname": "CITROG.DEF" - }, - - { - "id": 72, - "level": 2, - "name": [ "Harpy" ], - "faction": "dungeon", - "ability_add": [ [ "RETURN_AFTER_STRIKE", 0, 0, 0 ] ], //Harpies return after attack - "upgrades": ["HarpyHag"], - "defname": "CHARPY.DEF" - }, - - { - "id": 73, - "level": 2, - "name": [ "HarpyHag", "M73" ], - "faction": "dungeon", - "ability_add": [ [ "RETURN_AFTER_STRIKE", 0, 0, 0 ], //Harpy Hags return after attack - [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //Harpy Hags - "defname": "CHARPH.DEF" - }, - - { - "id": 74, - "level": 3, - "name": [ "Beholder" ], - "faction": "dungeon", - "upgrades": ["EvilEye"], - "defname": "CBEHOL.DEF", - "projectile_defname": "SMBALX.DEF", - "projectile_spin": false - }, - - { - "id": 75, - "level": 3, - "name": [ "EvilEye", "M75" ], - "faction": "dungeon", - "defname": "CEVEYE.DEF", - "projectile_defname": "SMBALX.DEF", - "projectile_spin": false - }, - - { - "id": 76, - "level": 4, - "name": [ "Medusa", "Medusae" ], - "faction": "dungeon", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 70, 2000 ] ], //medusas //minotaurs - "upgrades": ["MedusaQueen"], - "defname": "CMEDUS.DEF", - "projectile_defname": "PMEDUSX.DEF", - "projectile_spin": false - }, - - { - "id": 77, - "level": 4, - "name": [ "MedusaQueen" ], - "faction": "dungeon", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 70, 2000 ] ], //medusa queens //minotaur kings - "defname": "CMEDUQ.DEF", - "projectile_defname": "PMEDUSX.DEF", - "projectile_spin": false - }, - - { - "id": 78, - "level": 5, - "name": [ "Minotaur" ], - "faction": "dungeon", - "ability_add": [ [ "SELF_MORALE", 0, 0, 0 ] ], - "upgrades": ["MinotaurKing"], - "defname": "CMINOT.DEF" - }, - - { - "id": 79, - "level": 5, - "name": [ "MinotaurKing" ], - "faction": "dungeon", - "ability_add": [ [ "SELF_MORALE", 0, 0, 0 ] ], - "defname": "CMINOK.DEF" - }, - - { - "id": 80, - "level": 6, - "name": [ "Manticore" ], - "faction": "dungeon", - "upgrades": ["Scorpicore"], - "defname": "CMCORE.DEF" - }, - - { - "id": 81, - "level": 6, - "name": [ "Scorpicore" ], - "faction": "dungeon", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 74, 0 ] ], //scorpicore - "defname": "CCMCOR.DEF" - }, - - { - "id": 82, - "level": 7, - "name": [ "RedDragon" ], - "faction": "dungeon", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //red dragon is a dragon - [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //Red Dragon has breath attack - [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ] ], //red dragon's spell immunity - "upgrades": ["BlackDragon"], - "defname": "CRDRGN.DEF" - }, - - { - "id": 83, - "level": 7, - "name": [ "BlackDragon" ], - "faction": "dungeon", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //black dragon is a dragon - [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //Black Dragon has breath attack - [ "HATE", 50, 41, 0 ], //Hate Titans - [ "HATE", 50, 40, 0 ], //Hate Giants - [ "LEVEL_SPELL_IMMUNITY", 5, 0, 0 ] ], //black dragon's spell immunity - "defname": "CBDRGN.DEF" - }, - - { - "id": 84, - "level": 1, - "name": [ "Goblin", "Goblins" ], - "faction": "stronghold", - "upgrades": ["Hobgoblin"], - "defname": "CGOBLI.DEF" - }, - - { - "id": 85, - "level": 1, - "name": [ "Hobgoblin" ], - "faction": "stronghold", - "defname": "CHGOBL.DEF" - }, - - { - "id": 86, - "level": 2, - "name": [ "GoblinWolfRider" ], - "faction": "stronghold", - "upgrades": ["HobgoblinWolfRider"], - "defname": "CBWLFR.DEF" - }, - - { - "id": 87, - "level": 2, - "name": [ "HobgoblinWolfRider" ], - "faction": "stronghold", - "ability_add": [ [ "ADDITIONAL_ATTACK", 1, 0, 0 ] ], //wolf raider - "defname": "CUWLFR.DEF" - }, - - { - "id": 88, - "level": 3, - "name": [ "Orc" ], - "faction": "stronghold", - "upgrades": ["OrcChieftain"], - "defname": "CORC.DEF", - "projectile_defname": "PORCHX.DEF", - "projectile_spin": true - }, - - { - "id": 89, - "level": 3, - "name": [ "OrcChieftain" ], - "faction": "stronghold", - "defname": "CORCCH.DEF", - "projectile_defname": "PORCHX.DEF", - "projectile_spin": true - }, - - { - "id": 90, - "level": 4, - "name": [ "Ogre" ], - "faction": "stronghold", - "upgrades": ["OgreMage"], - "defname": "COGRE.DEF" - }, - - { - "id": 91, - "level": 4, - "name": [ "OgreMage" ], - "faction": "stronghold", - "ability_add": [ [ "SPELLCASTER", 2, 43, 0 ], - [ "CASTS", 3, 0, 0], - [ "CREATURE_ENCHANT_POWER", 3, 0, 0]], //ogre magi cast bloodlust - "defname": "COGMAG.DEF" - }, - - { - "id": 92, - "level": 5, - "name": [ "Roc" ], - "faction": "stronghold", - "upgrades": ["Thunderbird"], - "defname": "CROC.DEF" - }, - - { - "id": 93, - "level": 5, - "name": [ "Thunderbird" ], - "faction": "stronghold", - "ability_add": [ [ "SPECIFIC_SPELL_POWER", 10, 77, 0 ], //10 damage per unit - [ "SPELL_AFTER_ATTACK", 20, 77, 0 ] ], //thunderbirds - "defname": "CTBIRD.DEF" - }, - - { - "id": 94, - "level": 6, - "name": [ "Cyclops" ], - "faction": "stronghold", - "upgrades": ["CyclopsLord"], - "defname": "CCYCLR.DEF", - "projectile_defname": "PCYCLBX.DEF", - "projectile_spin": true - }, - - { - "id": 95, - "level": 6, - "name": [ "CyclopsLord" ], - "faction": "stronghold", - "defname": "CCYCLLOR.DEF", - "projectile_defname": "PCYCLBX.DEF", - "projectile_spin": true - }, - - { - "id": 96, - "level": 7, - "name": [ "YoungBehemoth" ], - "faction": "stronghold", - "ability_add": [ [ "ENEMY_DEFENCE_REDUCTION", 40, 0, 0 ] ], //behemots - "upgrades": ["AncientBehemoth"], - "defname": "CYBEHE.DEF" - }, - - { - "id": 97, - "level": 7, - "name": [ "AncientBehemoth" ], - "faction": "stronghold", - "ability_add": [ [ "ENEMY_DEFENCE_REDUCTION", 80, 0, 0 ] ], //ancient behemots - "defname": "CABEHE.DEF" - }, - - { - "id": 98, - "level": 1, - "name": [ "Gnoll" ], - "faction": "fortress", - "upgrades": ["GnollMarauder"], - "defname": "CGNOLL.DEF" - }, - - { - "id": 99, - "level": 1, - "name": [ "GnollMarauder" ], - "faction": "fortress", - "defname": "CGNOLM.DEF" - }, - - { - "id": 100, - "level": 2, - "name": [ "PrimitiveLizardman", "Lizardman" ], - "faction": "fortress", - "upgrades": ["AdvancedLizardman"], - "defname": "CPLIZA.DEF", - "projectile_defname": "PPLIZAX.DEF", - "projectile_spin": false - }, - - { - "id": 101, - "level": 2, - "name": [ "AdvancedLizardman" ], - "faction": "fortress", - "defname": "CALIZA.DEF", - "projectile_defname": "PPLIZAX.DEF", - "projectile_spin": false - }, - - { - "id": 102, - "level": 5, - "name": [ "CopperGorgon" ], - "faction": "fortress", - "upgrades": ["BronzeGorgon"], - "defname": "CCGORG.DEF" - }, - - { - "id": 103, - "level": 5, - "name": [ "BronzeGorgon" ], - "faction": "fortress", - "ability_add": [ [ "DEATH_STARE", 10, 0, 0 ] ], //mighty gorgons - "defname": "CBGOG.DEF" - }, - - { - "id": 104, - "level": 3, - "name": [ "Dragonflies", "DragonFly", "SerpentFly" ], - "faction": "fortress", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 100, 78, 0 ] ], //serpent fly - "upgrades": ["FireDragonFly"], - "defname": "CDRFLY.DEF" - }, - - { - "id": 105, - "level": 3, - "name": [ "FireDragonFly" ], - "faction": "fortress", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 100, 78, 0 ], //dragon fly - [ "SPELL_AFTER_ATTACK", 100, 45, 0 ] ], //mighty gorgons - "defname": "CDRFIR.DEF" - }, - - { - "id": 106, - "level": 4, - "name": [ "Basilisk" ], - "faction": "fortress", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 70, 0 ] ], //basilisks - "upgrades": ["GreaterBasilisk"], - "defname": "CBASIL.DEF" - }, - - { - "id": 107, - "level": 4, - "name": [ "GreaterBasilisk" ], - "faction": "fortress", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 70, 0 ] ], //greater basilisks - "defname": "CGBASI.DEF" - }, - - { - "id": 108, - "level": 6, - "name": [ "Wyvern" ], - "faction": "fortress", - "upgrades": ["WyvernMonarch"], - "defname": "CWYVER.DEF" - }, - - { - "id": 109, - "level": 6, - "name": [ "WyvernMonarch" ], - "faction": "fortress", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 20, 71, 0 ] ], //Wyvern Monarch - "defname": "CWYVMN.DEF" - }, - - { - "id": 110, - "level": 7, - "name": [ "Hydra" ], - "faction": "fortress", - "ability_add": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ], //hydras - [ "ATTACKS_ALL_ADJACENT", 0, 0, 0 ] ], //hydras - "upgrades": ["ChaosHydra"], - "defname": "CHYDRA.DEF" - }, - - { - "id": 111, - "level": 7, - "name": [ "ChaosHydra" ], - "faction": "fortress", - "ability_add": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ], //chaos hydras - [ "ATTACKS_ALL_ADJACENT", 0, 0, 0 ] ], //chaos hydras - "defname": "CCHYDR.DEF" - }, - - { - "id": 112, - "level": 2, - "name": [ "AirElemental", "AirElementals" ], - "faction": "conflux", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //air elementals are immune to mind spells (forgetfulness) //earth elementals are non-living - [ "SPELL_IMMUNITY", 0, 60, 0 ], //air elementals are immune to mind spells (hypnotize) - [ "SPELL_IMMUNITY", 0, 59, 0 ], //air elementals are immune to mind spells (berserk) - [ "SPELL_IMMUNITY", 0, 50, 0 ], //air elementals are immune to mind spells (sorrow) - [ "SPELL_IMMUNITY", 0, 23, 0 ], //air elementals are immune to meteor shower - [ "NON_LIVING", 0, 0, 0 ], - [ "MORE_DAMAGE_FROM_SPELL", 100, 19, 0 ], //air elementals are vulnerable to chain lightning - [ "MORE_DAMAGE_FROM_SPELL", 100, 17, 0 ] ], //air elementals are vulnerable to lightning bolt //air elementals are non-living - "upgrades": ["StormElemental"], - "defname": "CAELEM.DEF" - }, - - { - "id": 113, - "level": 5, - "name": [ "EarthElemental", "EarthElementals" ], - "faction": "conflux", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //earth elementals are immune to mind spells (forgetfulness) - [ "SPELL_IMMUNITY", 0, 60, 0 ], //earth elementals are immune to mind spells (hypnotize) - [ "SPELL_IMMUNITY", 0, 59, 0 ], //earth elementals are immune to mind spells (berserk) - [ "SPELL_IMMUNITY", 0, 50, 0 ], //earth elementals are immune to mind spells (sorrow) - [ "SPELL_IMMUNITY", 0, 19, 0 ], //earth elementals are immune to chain lightning - [ "SPELL_IMMUNITY", 0, 17, 0 ], //earth elementals are immune to lightning bolt - [ "NON_LIVING", 0, 0, 0 ], - [ "MORE_DAMAGE_FROM_SPELL", 100, 23, 0 ] ], //earth elementals are vulnerable to meteor shower - "upgrades": ["StoneElemental"], - "defname": "CEELEM.DEF" - }, - - { - "id": 114, - "level": 4, - "name": [ "FireElemental", "FireElementals" ], - "faction": "conflux", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //fire elementals are immune to mind spells (forgetfulness) - [ "SPELL_IMMUNITY", 0, 60, 0 ], //fire elementals are immune to mind spells (hypnotize) //water elemental should be treated as double-wide - [ "SPELL_IMMUNITY", 0, 59, 0 ], //fire elementals are immune to mind spells (berserk) - [ "SPELL_IMMUNITY", 0, 50, 0 ], //fire elementals are immune to mind spells (sorrow) - [ "NON_LIVING", 0, 0, 0 ], //fire elementals are non-living - [ "MORE_DAMAGE_FROM_SPELL", 100, 20, 0 ], //fire elementals are vulnerable to frost ring - [ "MORE_DAMAGE_FROM_SPELL", 100, 16, 0 ], //fire elementals are vulnerable to ice bolt - [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //fire elementals are immune to fire spells - "upgrades": ["ElectricityElemental"], - "defname": "CFELEM.DEF" - }, - - { - "id": 115, - "level": 3, - "name": [ "WaterElemental", "WaterElementals" ], - "faction": "conflux", - "ability_add": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //water elementals are immune to mind spells (forgetfulness) - [ "SPELL_IMMUNITY", 0, 60, 0 ], //water elementals are immune to mind spells (hypnotize) //gold golems are non-living - [ "SPELL_IMMUNITY", 0, 59, 0 ], //water elementals are immune to mind spells (berserk) - [ "SPELL_IMMUNITY", 0, 50, 0 ], //water elementals are immune to mind spells (sorrow) - [ "SPELL_IMMUNITY", 0, 20, 0 ], //water elementals are immune to frost ring - [ "SPELL_IMMUNITY", 0, 16, 0 ], //water elementals are immune to ice bolt - [ "NON_LIVING", 0, 0, 0 ], //water elementals are non-living - [ "MORE_DAMAGE_FROM_SPELL", 100, 29, 0 ], //water elementals are vulnerable to fire shield - [ "MORE_DAMAGE_FROM_SPELL", 100, 22, 0 ], //water elementals are vulnerable to inferno - [ "MORE_DAMAGE_FROM_SPELL", 100, 21, 0 ], //water elementals are vulnerable to fireball - [ "MORE_DAMAGE_FROM_SPELL", 100, 13, 0 ], //water elementals are vulnerable to fire wall - [ "DOUBLE_WIDE", 0, 0, 0 ] ], - "upgrades": ["IceElemental"], - "defname": "CWELEM.DEF" - }, - - { - "id": 116, - "level": 4, - "name": [ "GoldGolem" ], - "faction": "neutral", - "ability_add": [ [ "SPELL_DAMAGE_REDUCTION", 85, -1, 0 ], //gold golems reduce dmg from spells - [ "NON_LIVING", 0, 0, 0 ] ], //diamond golems are non-living - "defname": "CGGOLE.DEF" - }, - - { - "id": 117, - "level": 5, - "name": [ "DiamondGolem" ], - "faction": "neutral", - "ability_add": [ [ "SPELL_DAMAGE_REDUCTION", 95, -1, 0 ], //diamond golems reduce dmg from spells - [ "NON_LIVING", 0, 0, 0 ] ], //psychic elementals shouldn't get morale - "defname": "CDGOLE.DEF" - }, - - { - "id": 118, - "level": 1, - "name": [ "Pixie", "Pixies" ], - "faction": "conflux", - "upgrades": ["Sprite"], - "defname": "CPIXIE.DEF" - }, - - { - "id": 119, - "level": 1, - "name": [ "Sprite" ], - "faction": "conflux", - "defname": "CSPRITE.DEF" - }, - - { - "id": 120, - "level": 6, - "name": [ "PsiElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ] ], //magic elementals shouldn't get morale - "ability_remove": [ "DOUBLE_WIDE" ], - "upgrades": ["MagicElemental"], - "defname": "CPSYEL.DEF" - }, - - { - "id": 121, - "level": 6, - "name": [ "MagicElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ], //ice elementals shouldn't get morale - [ "LEVEL_SPELL_IMMUNITY", 5, 0, 0 ] ], //magic elementals are immune to all spells - "ability_remove": [ "DOUBLE_WIDE" ], - "defname": "CMAGEL.DEF" - }, - - { - "id": 123, - "level": 3, - "name": [ "IceElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ], - [ "DOUBLE_WIDE", 0, 0, 0 ], //ice elemental should be treated as double-wide - [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], - [ "CASTS", 3, 0, 0 ], - [ "SPELLCASTER", 2, 32, 0 ]], - "defname": "CICEE.DEF", - "projectile_defname": "PICEE.DEF", - "projectile_spin": false - }, - - { - "id": 125, - "level": 5, - "name": [ "StoneElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ], //magma elementals shouldn't get morale - [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], - [ "CASTS", 3, 0, 0 ], - [ "SPELLCASTER", 2, 33, 0 ]], - "defname": "CSTONE.DEF" - }, - - { - "id": 127, - "level": 2, - "name": [ "StormElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ], //storm elementals shouldn't get morale - [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], - [ "CASTS", 3, 0, 0 ], - [ "SPELLCASTER", 2, 30, 0 ]], - "defname": "CSTORM.DEF", - "projectile_defname": "CPRGTIX.DEF", - "projectile_spin": false - }, - - { - "id": 129, - "level": 4, - "name": [ "ElectricityElemental" ], - "faction": "conflux", - "ability_add": [ [ "NON_LIVING", 0, 0, 0 ] , //energy elementals shouldn't get morale //Crystal Dragons do not fly - [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], - [ "CASTS", 3, 0, 0 ], - [ "SPELLCASTER", 2, 31, 0 ]], - "defname": "CNRG.DEF" - }, - - { - "id": 130, - "level": 7, - "name": [ "Firebird" ], - "faction": "conflux", - "upgrades": ["Pheonix"], - "defname": "CFBIRD.DEF" - }, - - { - "id": 131, - "level": 7, - "name": [ "Pheonix" ], - "faction": "conflux", - "ability_add": [ [ "CASTS", 1, 0, 0 ], //Phoenix rebirths once - [ "REBIRTH", 20, 0, 0 ] ], //20% of stack is resurrected - "defname": "CPHX.DEF" - }, - - { - "id": 132, - "level": 10, - "name": [ "AzureDragon" ], - "faction": "neutral", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], - [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //azure dragon's breath - [ "FEARLESS", 0, 0, 0 ], //azure dragon is immune to fear - [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ], //immunity spell levels 1-3 - [ "FEAR", 0, 0, 0]], //azure dragon is a dragon - "defname": "CADRGN.DEF" - }, - - { - "id": 133, - "level": 10, - "name": [ "CrystalDragon" ], - "faction": "neutral", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //crystal dragon is a dragon - "ability_remove": [ "FLYING" ], - "defname": "CCDRGN.DEF" - }, - - { - "id": 134, - "level": 8, - "name": [ "FairieDragon" ], - "faction": "neutral", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ], //faerie dragon is a dragon - [ "CASTS", 5, 0, 0 ], - [ "CREATURE_SPELL_POWER", 500, 0, 0], //5 spell power per dragon - [ "SPELLCASTER", 2, 15, 10 ], //magic arrow - [ "SPELLCASTER", 2, 16, 22 ], //ice bolt - [ "SPELLCASTER", 2, 17, 22 ], //thunderbolt - [ "SPELLCASTER", 2, 19, 5 ], //chain lightning - [ "SPELLCASTER", 2, 20, 10 ], //frost ring - [ "SPELLCASTER", 2, 21, 21 ], //fireball - [ "SPELLCASTER", 2, 22, 5 ], //inferno - [ "SPELLCASTER", 2, 23, 5 ]], //meteor shower - "defname": "CFDRGN.DEF" - }, - - { - "id": 135, - "level": 10, - "name": [ "RustDragon" ], - "faction": "neutral", - "ability_add": [ [ "SPELL_AFTER_ATTACK", 100, 80, 0 ], //always reduce defense - [ "ACID_BREATH", 25, 0, 20 ], //20% chance to do 25 damage - [ "DRAGON_NATURE", 0, 0, 0 ] ], //rust dragon is a dragon - "defname": "CRSDGN.DEF" - }, - - { - "id": 136, - "level": 6, - "name": [ "Enchanter", "Enchanters" ], - "faction": "neutral", - "ability_add": [ [ "NO_WALL_PENALTY", 0, 0, 0 ], - [ "ENCHANTER", 3, 28, 3], //air shield - [ "ENCHANTER", 3, 41, 3], //bless - [ "ENCHANTER", 3, 45, 3], //wealness - [ "ENCHANTER", 3, 46, 3], //stone skin - [ "ENCHANTER", 3, 53, 3], //slow - [ "ENCHANTER", 3, 54, 3], //haster - [ "CASTS", 5, 0, 0]], //Enchanter - "defname": "CENCH.DEF", - "projectile_defname": "SMBALX.DEF", - "projectile_spin": false - }, - - { - "id": 137, - "level": 4, - "name": [ "Sharpshooter", "Sharpshooters" ], - "faction": "neutral", - "ability_add": [ [ "NO_WALL_PENALTY", 0, 0, 0 ], - [ "NO_DISTANCE_PENALTY", 0, 0, 0 ] ], //Sharpshooter - "defname": "CSHARP.DEF", - "projectile_defname": "PELFX.DEF", - "projectile_spin": false - }, - - { - "id": 138, - "level": 1, - "name": [ "Halfling" ], - "faction": "neutral", - "defname": "CHALF.DEF", - "projectile_defname": "PHALF.DEF", - "projectile_spin": true - }, - - { - "id": 139, - "level": 1, - "name": [ "Peasant" ], - "faction": "neutral", - "defname": "CPEAS.DEF" - }, - - { - "id": 140, - "level": 2, - "name": [ "Boar" ], - "faction": "neutral", - "ability_add": [ [ "DOUBLE_WIDE", 0, 0, 0 ] ], //boar should be treated as double-wide - "defname": "CBOAR.DEF" - }, - - { - "id": 141, - "level": 3, - "name": [ "Mummy" ], - "faction": "neutral", - "ability_add": [ [ "UNDEAD", 0, 0, 0 ] ], - "defname": "CMUMMY.DEF" - }, - - { - "id": 142, - "level": 3, - "name": [ "warrior" ], - "faction": "neutral", - "ability_add": [ [ "DOUBLE_WIDE", 0, 0, 0 ] ], //nomads should be treated as double-wide - "defname": "CNOMAD.DEF" - }, - - { - "id": 143, - "level": 2, - "name": [ "Rogue" ], - "faction": "neutral", - "defname": "CROGUE.DEF" - }, - - { - "id": 144, - "level": 5, - "name": [ "OgreShaman" ], - "faction": "neutral", - "ability_add": [ [ "FULL_HP_REGENERATION", 0, 0, 0 ] ], //troll - "defname": "CTROLL.DEF" - }, - - { - "id": 145, - "level": 0, - "name": [ "Catapult" ], - "faction": "neutral", - "defname": "SMCATA.DEF", - "projectile_defname": "SMCATX.DEF", - "projectile_spin": true - }, - - { - "id": 146, - "level": 0, - "name": [ "Ballista" ], - "faction": "neutral", - "defname": "SMBAL.DEF", - "projectile_defname": "SMBALX.DEF", - "projectile_spin": false - }, - - { - "id": 147, - "level": 0, - "name": [ "FirstAidTent" ], - "faction": "neutral", - "ability_add": [ [ "HEALER", 0, 0, 0 ] ], - "defname": "SMTENT.DEF" - }, - - { - "id": 148, - "level": 0, - "name": [ "AmmoCart" ], - "faction": "neutral", - "ability_add": [ [ "NOT_ACTIVE", 0, 0, 0 ] ], - "defname": "SMCART.DEF" - }, - - { - "id": 149, - "level": 0, - "name": [ "ArrowTower" ], - "faction": "neutral", - "ability_add": [ [ "SHOOTER", 0, 0, 0 ] ], - "projectile_defname": "SMBALX.DEF", //workaround for crash - "defname": "x" - }, - - { - "id": 150, - "level": 0, - "name": [ "SupremeArchangel" ], - "faction": "castle", - "defname": "ZM150Z.DEF" - }, - - { - "id": 151, - "level": 8, - "name": [ "DiamondDragon" ], - "faction": "rampart", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //diamond dragon is a dragon //psychic elemental - "defname": "ZM151Z.DEF" - }, - - { - "id": 152, - "level": 8, - "name": [ "LordofThunder" ], - "faction": "tower", - "defname": "ZM152Z.DEF", - "projectile_defname": "CPRGTIX.DEF", - "projectile_spin": false - }, - - { - "id": 153, - "level": 8, - "name": [ "HellBaron" ], - "faction": "inferno", - "defname": "ZM153Z.DEF" - }, - - { - "id": 154, - "level": 8, - "name": [ "BloodDragon" ], - "faction": "necropolis", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //blood dragon is a dragon //magic elemental - "defname": "ZM154Z.DEF" - }, - - { - "id": 155, - "level": 8, - "name": [ "DarknessDragon" ], - "faction": "dungeon", - "ability_add": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //darkness dragon is a dragon - "defname": "ZM155Z.DEF" - }, - - { - "id": 156, - "level": 8, - "name": [ "GhostBehemoth" ], - "faction": "stronghold", - "defname": "ZM156Z.DEF" - }, - - { - "id": 157, - "level": 8, - "name": [ "HellHydra" ], - "faction": "fortress", - "ability_remove": [ "SHOOTER" ], //Hell Hydra certainly does not shoot - "defname": "ZM157Z.DEF" - }, - - { - "id": 158, - "level": 8, - "name": [ "SacredPhoenix" ], - "faction": "conflux", - "defname": "ZM158Z.DEF" - }, - - { - "id": 159, - "level": 0, - "name": [ "Ghost" ], - "faction": "neutral", - "defname": "ZM159G.DEF" - }, - - { - "id": 160, - "level": 0, - "name": [ "God1War" ], - "faction": "neutral", - "defname": "ZM160G.DEF" - }, - - { - "id": 161, - "level": 0, - "name": [ "God2Peace" ], - "faction": "neutral", - "defname": "ZM161G.DEF" - }, - - { - "id": 162, - "level": 0, - "name": [ "God3Mana" ], - "faction": "neutral", - "defname": "ZM162G.DEF" - }, - - { - "id": 163, - "level": 0, - "name": [ "God4Lore" ], - "faction": "neutral", - "defname": "ZM163G.DEF" - }, - - { - "id": 164, - "level": 0, - "name": [ "MinotaurKing2" ], /// WTF is this? Same ID as Minotaur King from Dungeon - "faction": "neutral", - "defname": "ZM164GD.DEF" - }, - - { - "id": 165, - "level": 0, - "name": [ "MineralElemental" ], - "faction": "neutral", - "defname": "ZM165GD.DEF" - }, - - { - "id": 166, - "level": 0, - "name": [ "ElectricityElemental2" ], /// WTF is this? Same ID as elemental from Conflux - "faction": "neutral", - "defname": "ZM166GD.DEF" - }, - - { - "id": 167, - "level": 0, - "name": [ "AncientBasilisk" ], - "faction": "neutral", - "defname": "ZM167GD.DEF" - }, - - { - "id": 168, - "level": 0, - "name": [ "Gorynych" ], - "faction": "neutral", - "ability_add": [ [ "FLYING", 0, 0, 0 ] ], //Gorynyches fly - "defname": "ZM168DG.DEF" - }, - - { - "id": 169, - "level": 0, - "name": [ "WarZealot" ], - "faction": "neutral", - "defname": "ZM169ZL.DEF", - "projectile_defname": "CPRZEAX.DEF", - "projectile_spin": false - }, - - { - "id": 170, - "level": 0, - "name": [ "Myriad" ], - "faction": "neutral", - "defname": "ZM170SW.DEF", - "projectile_defname": "PLCBOWX.DEF", - "projectile_spin": false - }, - - { - "id": 171, - "level": 0, - "name": [ "MedusaMatriarch" ], - "faction": "neutral", - "defname": "ZM171SR.DEF", - "projectile_defname": "PLCBOWX.DEF", - "projectile_spin": false - }, - - { - "id": 172, - "level": 0, - "name": [ "Nightmare" ], - "faction": "neutral", - "defname": "ZM172N.DEF" - }, - - { - "id": 173, - "level": 0, - "name": [ "SantaGremlin" ], - "faction": "neutral", - "defname": "ZM173M.DEF", - "projectile_defname": "CPRGRE.DEF", - "projectile_spin": true - }, - - { - "id": 174, - "level": 0, - "name": [ "Paladin1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 37, 0 ] ], //expert cure - "defname": "ZM174NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 175, - "level": 0, - "name": [ "Hierophant1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 27, 0 ] ], //expert shield - "defname": "ZM175NPC.DEF", - "projectile_defname": "CPRZEAX.DEF" - }, - - { - "id": 176, - "level": 0, - "name": [ "TempleGuardian1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 44, 0 ] ], //expert precision - "defname": "ZM176NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 177, - "level": 0, - "name": [ "Succubus1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 29, 0 ] ], //expert fire shield - "defname": "ZM177NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 178, - "level": 0, - "name": [ "SoulEater1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 39, 0 ] ], //expert animate dead - "defname": "ZM178NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 179, - "level": 0, - "name": [ "Brute1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 46, 0 ] ], //expert stone skin - "defname": "ZM179NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 180, - "level": 0, - "name": [ "OgreLeader1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 37, 0 ] ], //expert cure - "defname": "ZM180NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 181, - "level": 0, - "name": [ "Shaman1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 53, 0 ] ], //expert haste - "defname": "ZM181NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 182, - "level": 0, - "name": [ "AstralSpirit1" ], - "faction": "neutral", - "ability_add": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], - [ "CASTS", 1, 0, 0 ] , - [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , - [ "SPELLCASTER", 3, 58, 0 ] ], //expert counterstrike - "defname": "ZM182NPC.DEF", - "projectile_defname": "PLCBOWX.DEF" - }, - - { - "id": 183, - "level": 0, - "name": [ "Paladin2" ], - "faction": "neutral", - "defname": "ZM174NPC.DEF" - }, - - { - "id": 184, - "level": 0, - "name": [ "Hierophant2" ], - "faction": "neutral", - "defname": "ZM175NPC.DEF" - }, - - { - "id": 185, - "level": 0, - "name": [ "TempleGuardian2" ], - "faction": "neutral", - "defname": "ZM176NPC.DEF" - }, - - { - "id": 186, - "level": 0, - "name": [ "Succubus2" ], - "faction": "neutral", - "defname": "ZM177NPC.DEF" - }, - - { - "id": 187, - "level": 0, - "name": [ "SoulEater2" ], - "faction": "neutral", - "defname": "ZM178NPC.DEF" - }, - - { - "id": 188, - "level": 0, - "name": [ "Brute2" ], - "faction": "neutral", - "defname": "ZM179NPC.DEF" - }, - - { - "id": 189, - "level": 0, - "name": [ "OgreLeader2" ], - "faction": "neutral", - "defname": "ZM180NPC.DEF" - }, - - { - "id": 190, - "level": 0, - "name": [ "Shaman2" ], - "faction": "neutral", - "defname": "ZM181NPC.DEF" - }, - - { - "id": 191, - "level": 0, - "name": [ "AstralSpirit2" ], - "faction": "neutral", - "defname": "ZM182NPC.DEF" - }, - - { - "id": 192, - "level": 0, - "name": [ "SylvanCentaur" ], - "faction": "neutral", - "defname": "ZM192Z.DEF", - "projectile_defname": "PELFX.DEF", - "projectile_spin": false - }, - - { - "id": 193, - "level": 0, - "name": [ "Sorceress" ], - "faction": "neutral", - "defname": "ZM193Z.DEF", - "projectile_defname": "CPRZEAX.DEF", - "projectile_spin": false - }, - - { - "id": 194, - "level": 0, - "name": [ "Werewolf" ], - "faction": "neutral", - "defname": "ZM194Z.DEF" - }, - - { - "id": 195, - "level": 0, - "name": [ "HellSteed" ], - "faction": "neutral", - "defname": "ZM195Z.DEF" - }, - - { - "id": 196, - "level": 0, - "name": [ "Dracolich" ], - "faction": "neutral", - "defname": "ZM196Z.DEF", - "projectile_defname": "SMBALX.DEF", - "projectile_spin": false - } - ], - - // something hacking - "unused_creatures": [ 122, 124, 126, 128, 145, 146, 147, 148, 149, 160, - 161, 162, 163, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191 ] -} diff --git a/config/creatures/castle.json b/config/creatures/castle.json new file mode 100644 index 000000000..b2b37eba4 --- /dev/null +++ b/config/creatures/castle.json @@ -0,0 +1,297 @@ +{ + "pikeman" : + { + "id": 0, + "level": 1, + "faction": "castle", + "upgrades": ["halberdier"], + "abilities": [ [ "CHARGE_IMMUNITY", 0, 0, 0 ] ], //pikeman immunity to Champion charge bonus + "graphics" : + { + "animation": "CPKMAN.DEF" + }, + "sound" : + { + "attack": "PIKEATTK.wav", + "defend": "PIKEDFND.wav", + "killed": "PIKEKILL.wav", + "move": "PIKEMOVE.wav", + "wince": "PIKEWNCE.wav" + } + }, + "halberdier" : + { + "id": 1, + "level": 1, + "faction": "castle", + "abilities": [ [ "CHARGE_IMMUNITY", 0, 0, 0 ] ], //halberdier immunity to Champion charge bonus + "graphics" : + { + "animation": "CHALBD.DEF" + }, + "sound" : + { + "attack": "HALBATTK.wav", + "defend": "HALBDFND.wav", + "killed": "HALBKILL.wav", + "move": "HALBMOVE.wav", + "wince": "HALBWNCE.wav" + } + }, + "archer" : + { + "id": 2, + "level": 2, + "extraNames": [ "lightCrossbowman" ], + "faction": "castle", + "upgrades": ["marksman"], + "graphics" : + { + "animation": "CLCBOW.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "LCRSATTK.wav", + "defend": "LCRSDFND.wav", + "killed": "LCRSKILL.wav", + "move": "LCRSMOVE.wav", + "shoot": "LCRSSHOT.wav", + "wince": "LCRSWNCE.wav" + } + }, + "marksman" : + { + "id": 3, + "level": 2, + "faction": "castle", + "graphics" : + { + "animation": "CHCBOW.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "HCRSATTK.wav", + "defend": "HCRSDFND.wav", + "killed": "HCRSKILL.wav", + "move": "HCRSMOVE.wav", + "shoot": "HCRSSHOT.wav", + "wince": "HCRSWNCE.wav" + } + }, + "griffin" : + { + "id": 4, + "level": 3, + "faction": "castle", + "abilities": [ [ "ADDITIONAL_RETALIATION", 1, 0, 0 ] ], //griffins retaliate twice + "upgrades": ["royalGriffin"], + "graphics" : + { + "animation": "CGRIFF.DEF" + }, + "sound" : + { + "attack": "GRIFATTK.wav", + "defend": "GRIFDFND.wav", + "killed": "GRIFKILL.wav", + "move": "GRIFMOVE.wav", + "wince": "GRIFWNCE.wav" + } + }, + "royalGriffin" : + { + "id": 5, + "level": 3, + "faction": "castle", + "abilities": [ [ "UNLIMITED_RETALIATIONS", 0, 0, 0 ] ], //royal griffins retaliate always + "graphics" : + { + "animation": "CRGRIF.DEF" + }, + "sound" : + { + "attack": "RGRFATTK.wav", + "defend": "RGRFDFND.wav", + "killed": "RGRFKILL.wav", + "move": "RGRFMOVE.wav", + "wince": "RGRFWNCE.wav" + } + }, + "swordsman" : + { + "id": 6, + "level": 4, + "faction": "castle", + "upgrades": ["crusader"], + "graphics" : + { + "animation": "CSWORD.DEF" + }, + "sound" : + { + "attack": "SWRDATTK.wav", + "defend": "SWRDDFND.wav", + "killed": "SWRDKILL.wav", + "move": "SWRDMOVE.wav", + "wince": "SWRDWNCE.wav" + } + }, + "crusader" : + { + "id": 7, + "level": 4, + "faction": "castle", + "graphics" : + { + "animation": "CCRUSD.DEF" + }, + "sound" : + { + "attack": "CRUSATTK.wav", + "defend": "CRUSDFND.wav", + "killed": "CRUSKILL.wav", + "move": "CRUSMOVE.wav", + "wince": "CRUSWNCE.wav" + } + }, + "monk" : + { + "id": 8, + "level": 5, + "faction": "castle", + "upgrades": ["zealot"], + "graphics" : + { + "animation": "CMONKK.DEF", + "missile" : + { + "projectile": "CPRZEAX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MONKATTK.wav", + "defend": "MONKDFND.wav", + "killed": "MONKKILL.wav", + "move": "MONKMOVE.wav", + "shoot": "MONKSHOT.wav", + "wince": "MONKWNCE.wav" + } + }, + "zealot" : + { + "id": 9, + "level": 5, + "faction": "castle", + "graphics" : + { + "animation": "CZEALT.DEF", + "missile" : + { + "projectile": "CPRZEAX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "ZELTATTK.wav", + "defend": "ZELTDFND.wav", + "killed": "ZELTKILL.wav", + "move": "ZELTMOVE.wav", + "shoot": "ZELTSHOT.wav", + "wince": "ZELTWNCE.wav" + } + }, + "cavalier" : + { + "id": 10, + "level": 6, + "faction": "castle", + "upgrades": ["champion"], + "graphics" : + { + "animation": "CCAVLR.DEF" + }, + "sound" : + { + "attack": "CAVAATTK.wav", + "defend": "CAVADFND.wav", + "killed": "CAVAKILL.wav", + "move": "CAVAMOVE.wav", + "wince": "CAVAWNCE.wav" + } + }, + "champion" : + { + "id": 11, + "level": 6, + "faction": "castle", + "graphics" : + { + "animation": "CCHAMP.DEF" + }, + "sound" : + { + "attack": "CHMPATTK.wav", + "defend": "CHMPDFND.wav", + "killed": "CHMPKILL.wav", + "move": "CHMPMOVE.wav", + "wince": "CHMPWNCE.wav" + } + }, + "angel" : + { + "id": 12, + "level": 7, + "faction": "castle", + "abilities": [ [ "HATE", 50, 55, 0 ], //angels hate archdevils + [ "HATE", 50, 54, 0 ] ], //angels hate devils + "upgrades": ["archangel"], + "graphics" : + { + "animation": "CANGEL.DEF" + }, + "sound" : + { + "attack": "ANGLATTK.wav", + "defend": "ANGLDFND.wav", + "killed": "ANGLKILL.wav", + "move": "ANGLMOVE.wav", + "wince": "ANGLWNCE.wav" + } + }, + "archangel" : + { + "id": 13, + "level": 7, + "faction": "castle", + "abilities": [ [ "SPECIFIC_SPELL_POWER", 100, 38, 0 ], // 100 hp per Archangel + [ "SPELLCASTER", 0, 38, 0 ], //archangels cast resurrection + [ "HATE", 50, 55, 0 ], //archangels hate arch + [ "HATE", 50, 54, 0 ] , //archangels hate devils + [ "CASTS", 1, 0, 0]], + "graphics" : + { + "animation": "CRANGL.DEF" + }, + "sound" : + { + "attack": "AAGLATTK.wav", + "defend": "AAGLDFND.wav", + "killed": "AAGLKILL.wav", + "move": "AAGLMOVE.wav", + "wince": "AAGLWNCE.wav" + } + } +} diff --git a/config/creatures/conflux.json b/config/creatures/conflux.json new file mode 100644 index 000000000..34ec36872 --- /dev/null +++ b/config/creatures/conflux.json @@ -0,0 +1,336 @@ +{ + "airElemental" : + { + "id": 112, + "level": 2, + "extraNames": [ "airElementals" ], + "faction": "conflux", + "abilities": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //air elementals are immune to mind spells (forgetfulness) //earth elementals are non-living + [ "SPELL_IMMUNITY", 0, 60, 0 ], //air elementals are immune to mind spells (hypnotize) + [ "SPELL_IMMUNITY", 0, 59, 0 ], //air elementals are immune to mind spells (berserk) + [ "SPELL_IMMUNITY", 0, 50, 0 ], //air elementals are immune to mind spells (sorrow) + [ "SPELL_IMMUNITY", 0, 23, 0 ], //air elementals are immune to meteor shower + [ "NON_LIVING", 0, 0, 0 ], + [ "MORE_DAMAGE_FROM_SPELL", 100, 19, 0 ], //air elementals are vulnerable to chain lightning + [ "MORE_DAMAGE_FROM_SPELL", 100, 17, 0 ] ], //air elementals are vulnerable to lightning bolt //air elementals are non-living + "upgrades": ["stormElemental"], + "graphics" : + { + "animation": "CAELEM.DEF" + }, + "sound" : + { + "attack": "AELMATTK.wav", + "defend": "AELMDFND.wav", + "killed": "AELMKILL.wav", + "move": "AELMMOVE.wav", + "wince": "AELMWNCE.wav" + } + }, + "earthElemental" : + { + "id": 113, + "level": 5, + "faction": "conflux", + "abilities": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //earth elementals are immune to mind spells (forgetfulness) + [ "SPELL_IMMUNITY", 0, 60, 0 ], //earth elementals are immune to mind spells (hypnotize) + [ "SPELL_IMMUNITY", 0, 59, 0 ], //earth elementals are immune to mind spells (berserk) + [ "SPELL_IMMUNITY", 0, 50, 0 ], //earth elementals are immune to mind spells (sorrow) + [ "SPELL_IMMUNITY", 0, 19, 0 ], //earth elementals are immune to chain lightning + [ "SPELL_IMMUNITY", 0, 17, 0 ], //earth elementals are immune to lightning bolt + [ "NON_LIVING", 0, 0, 0 ], + [ "MORE_DAMAGE_FROM_SPELL", 100, 23, 0 ] ], //earth elementals are vulnerable to meteor shower + "upgrades": ["magmaElemental"], + "graphics" : + { + "animation": "CEELEM.DEF" + }, + "sound" : + { + "attack": "EELMATTK.wav", + "defend": "EELMDFND.wav", + "killed": "EELMKILL.wav", + "move": "EELMMOVE.wav", + "wince": "EELMWNCE.wav" + } + }, + "fireElemental" : + { + "id": 114, + "level": 4, + "faction": "conflux", + "abilities": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //fire elementals are immune to mind spells (forgetfulness) + [ "SPELL_IMMUNITY", 0, 60, 0 ], //fire elementals are immune to mind spells (hypnotize) //water elemental should be treated as double-wide + [ "SPELL_IMMUNITY", 0, 59, 0 ], //fire elementals are immune to mind spells (berserk) + [ "SPELL_IMMUNITY", 0, 50, 0 ], //fire elementals are immune to mind spells (sorrow) + [ "NON_LIVING", 0, 0, 0 ], //fire elementals are non-living + [ "MORE_DAMAGE_FROM_SPELL", 100, 20, 0 ], //fire elementals are vulnerable to frost ring + [ "MORE_DAMAGE_FROM_SPELL", 100, 16, 0 ], //fire elementals are vulnerable to ice bolt + [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //fire elementals are immune to fire spells + "upgrades": ["energyElemental"], + "graphics" : + { + "animation": "CFELEM.DEF" + }, + "sound" : + { + "attack": "FELMATTK.wav", + "defend": "FELMDFND.wav", + "killed": "FELMKILL.wav", + "move": "FELMMOVE.wav", + "wince": "FELMWNCE.wav" + } + }, + "waterElemental" : + { + "id": 115, + "level": 3, + "extraNames": [ "waterElementals" ], + "faction": "conflux", + "abilities": [ [ "SPELL_IMMUNITY", 0, 61, 0 ], //water elementals are immune to mind spells (forgetfulness) + [ "SPELL_IMMUNITY", 0, 60, 0 ], //water elementals are immune to mind spells (hypnotize) + [ "SPELL_IMMUNITY", 0, 59, 0 ], //water elementals are immune to mind spells (berserk) + [ "SPELL_IMMUNITY", 0, 50, 0 ], //water elementals are immune to mind spells (sorrow) + [ "SPELL_IMMUNITY", 0, 20, 0 ], //water elementals are immune to frost ring + [ "SPELL_IMMUNITY", 0, 16, 0 ], //water elementals are immune to ice bolt + [ "NON_LIVING", 0, 0, 0 ], //water elementals are non-living + [ "MORE_DAMAGE_FROM_SPELL", 100, 29, 0 ], //water elementals are vulnerable to fire shield + [ "MORE_DAMAGE_FROM_SPELL", 100, 22, 0 ], //water elementals are vulnerable to inferno + [ "MORE_DAMAGE_FROM_SPELL", 100, 21, 0 ], //water elementals are vulnerable to fireball + [ "MORE_DAMAGE_FROM_SPELL", 100, 13, 0 ], //water elementals are vulnerable to fire wall + [ "DOUBLE_WIDE", 0, 0, 0 ] ], + "upgrades": ["iceElemental"], + "graphics" : + { + "animation": "CWELEM.DEF" + }, + "sound" : + { + "attack": "WELMATTK.wav", + "defend": "WELMDFND.wav", + "killed": "WELMKILL.wav", + "move": "WELMMOVE.wav", + "wince": "WELMWNCE.wav" + } + }, + "pixie" : + { + "id": 118, + "level": 1, + "extraNames": [ "pixies" ], + "faction": "conflux", + "upgrades": ["sprite"], + "graphics" : + { + "animation": "CPIXIE.DEF" + }, + "sound" : + { + "attack": "PIXIATTK.wav", + "defend": "PIXIDFND.wav", + "killed": "PIXIKILL.wav", + "move": "PIXIMOVE.wav", + "wince": "PIXIWNCE.wav" + } + }, + "sprite" : + { + "id": 119, + "level": 1, + "faction": "conflux", + "graphics" : + { + "animation": "CSPRITE.DEF" + }, + "sound" : + { + "attack": "SPRTATTK.wav", + "defend": "SPRTDFND.wav", + "killed": "SPRTKILL.wav", + "move": "SPRTMOVE.wav", + "wince": "SPRTWNCE.wav" + } + }, + "psychicElemental" : + { + "id": 120, + "level": 6, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ] ], //magic elementals shouldn't get morale + "ability_remove": [ "DOUBLE_WIDE" ], + "upgrades": ["magicElemental"], + "graphics" : + { + "animation": "CPSYEL.DEF" + }, + "sound" : + { + "attack": "PSYCATTK.wav", + "defend": "PSYCDFND.wav", + "killed": "PSYCKILL.wav", + "move": "PSYCMOVE.wav", + "wince": "PSYCWNCE.wav" + } + }, + "magicElemental" : + { + "id": 121, + "level": 6, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ], //ice elementals shouldn't get morale + [ "LEVEL_SPELL_IMMUNITY", 5, 0, 0 ] ], //magic elementals are immune to all spells + "ability_remove": [ "DOUBLE_WIDE" ], + "graphics" : + { + "animation": "CMAGEL.DEF" + }, + "sound" : + { + "attack": "MGELATTK.wav", + "defend": "MGELDFND.wav", + "killed": "MGELKILL.wav", + "move": "MGELMOVE.wav", + "wince": "MGELWNCE.wav" + } + }, + "iceElemental" : + { + "id": 123, + "level": 3, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ], + [ "DOUBLE_WIDE", 0, 0, 0 ], //ice elemental should be treated as double-wide + [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], + [ "CASTS", 3, 0, 0 ], + [ "SPELLCASTER", 2, 32, 0 ]], + "graphics" : + { + "animation": "CICEE.DEF", + "missile" : + { + "projectile": "PICEE.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "ICELATTK.wav", + "defend": "ICELDFND.wav", + "killed": "ICELKILL.wav", + "move": "ICELMOVE.wav", + "shoot": "ICELSHOT.wav", + "wince": "ICELWNCE.wav" + } + }, + "magmaElemental" : + { + "id": 125, + "level": 5, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ], //magma elementals shouldn't get morale + [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], + [ "CASTS", 3, 0, 0 ], + [ "SPELLCASTER", 2, 33, 0 ]], + "graphics" : + { + "animation": "CSTONE.DEF" + }, + "sound" : + { + "attack": "MAGMATTK.wav", + "defend": "MAGMDFND.wav", + "killed": "MAGMKILL.wav", + "move": "MAGMMOVE.wav", + "wince": "MAGMWNCE.wav" + } + }, + "stormElemental" : + { + "id": 127, + "level": 2, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ], //storm elementals shouldn't get morale + [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], + [ "CASTS", 3, 0, 0 ], + [ "SPELLCASTER", 2, 30, 0 ]], + "graphics" : + { + "animation": "CSTORM.DEF", + "missile" : + { + "projectile": "CPRGTIX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "STORATTK.wav", + "defend": "STORDFND.wav", + "killed": "STORKILL.wav", + "move": "STORMOVE.wav", + "shoot": "STORSHOT.wav", + "wince": "STORWNCE.wav" + } + }, + "energyElemental" : + { + "id": 129, + "level": 4, + "faction": "conflux", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ] , //energy elementals shouldn't get morale //Crystal Dragons do not fly + [ "CREATURE_ENCHANT_POWER", 6, 0, 0 ], + [ "CASTS", 3, 0, 0 ], + [ "SPELLCASTER", 2, 31, 0 ]], + "graphics" : + { + "animation": "CNRG.DEF" + }, + "sound" : + { + "attack": "ENERATTK.wav", + "defend": "ENERDFND.wav", + "killed": "ENERKILL.wav", + "move": "ENERMOVE.wav", + "wince": "ENERWNCE.wav" + } + }, + "firebird" : + { + "id": 130, + "level": 7, + "faction": "conflux", + "upgrades": ["phoenix"], + "graphics" : + { + "animation": "CFBIRD.DEF" + }, + "sound" : + { + "attack": "FIRBATTK.wav", + "defend": "FIRBDFND.wav", + "killed": "FIRBKILL.wav", + "move": "FIRBMOVE.wav", + "wince": "FIRBWNCE.wav" + } + }, + "phoenix" : + { + "id": 131, + "level": 7, + "faction": "conflux", + "abilities": [ [ "CASTS", 1, 0, 0 ], //Phoenix rebirths once + [ "REBIRTH", 20, 0, 0 ] ], //20% of stack is resurrected + "graphics" : + { + "animation": "CPHX.DEF" + }, + "sound" : + { + "attack": "PHOEATTK.wav", + "defend": "PHOEDFND.wav", + "killed": "PHOEKILL.wav", + "move": "PHOEMOVE.wav", + "wince": "PHOEWNCE.wav" + } + } +} diff --git a/config/creatures/dungeon.json b/config/creatures/dungeon.json new file mode 100644 index 000000000..381f763b9 --- /dev/null +++ b/config/creatures/dungeon.json @@ -0,0 +1,310 @@ +{ + "troglodyte" : + { + "id": 70, + "level": 1, + "faction": "dungeon", + "abilities": [ [ "SPELL_IMMUNITY", 0, 62, 0 ] ], //troglodytes are immune to blind + "upgrades": ["infernalTroglodyte"], + "graphics" : + { + "animation": "CTROGL.DEF" + }, + "sound" : + { + "attack": "TROGATTK.wav", + "defend": "TROGDFND.wav", + "killed": "TROGKILL.wav", + "move": "TROGMOVE.wav", + "wince": "TROGWNCE.wav" + } + }, + "infernalTroglodyte" : + { + "id": 71, + "level": 1, + "faction": "dungeon", + "abilities": [ [ "SPELL_IMMUNITY", 0, 62, 0 ] ], //infernal troglodytes are immune to blind + "graphics" : + { + "animation": "CITROG.DEF" + }, + "sound" : + { + "attack": "ITRGATTK.wav", + "defend": "ITRGDFND.wav", + "killed": "ITRGKILL.wav", + "move": "ITRGMOVE.wav", + "wince": "ITRGWNCE.wav" + } + }, + "harpy" : + { + "id": 72, + "level": 2, + "faction": "dungeon", + "abilities": [ [ "RETURN_AFTER_STRIKE", 0, 0, 0 ] ], //Harpies return after attack + "upgrades": ["harpyHag"], + "graphics" : + { + "animation": "CHARPY.DEF" + }, + "sound" : + { + "attack": "HARPATTK.wav", + "defend": "HARPDFND.wav", + "killed": "HARPKILL.wav", + "move": "HARPMOVE.wav", + "shoot": "silence", + "wince": "HARPWNCE.wav" + } + }, + "harpyHag" : + { + "id": 73, + "level": 2, + "faction": "dungeon", + "abilities": [ [ "RETURN_AFTER_STRIKE", 0, 0, 0 ], //Harpy Hags return after attack + [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //Harpy Hags + "graphics" : + { + "animation": "CHARPH.DEF" + }, + "sound" : + { + "attack": "HHAGATTK.wav", + "defend": "HHAGDFND.wav", + "killed": "HHAGKILL.wav", + "move": "HHAGMOVE.wav", + "shoot": "HHAGSHOT.wav", + "wince": "HHAGWNCE.wav" + } + }, + "beholder" : + { + "id": 74, + "level": 3, + "faction": "dungeon", + "upgrades": ["evilEye"], + "graphics" : + { + "animation": "CBEHOL.DEF", + "missile" : + { + "projectile": "SMBALX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "BHDRATTK.wav", + "defend": "BHDRDFND.wav", + "killed": "BHDRKILL.wav", + "move": "BHDRMOVE.wav", + "shoot": "BHDRSHOT.wav", + "wince": "BHDRWNCE.wav", + "ext1": "BHDRDETH.wav" + } + }, + "evilEye" : + { + "id": 75, + "level": 3, + "faction": "dungeon", + "graphics" : + { + "animation": "CEVEYE.DEF", + "missile" : + { + "projectile": "SMBALX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "EVLIATTK.wav", + "defend": "EVLIDFND.wav", + "killed": "EVLIKILL.wav", + "move": "EVLIMOVE.wav", + "shoot": "EVLISHOT.wav", + "wince": "EVLIWNCE.wav", + "ext1": "EVLIDETH.wav" + } + }, + "medusa" : + { + "id": 76, + "level": 4, + "faction": "dungeon", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 70, 2000 ] ], //medusas //minotaurs + "upgrades": ["medusaQueen"], + "graphics" : + { + "animation": "CMEDUS.DEF", + "missile" : + { + "projectile": "PMEDUSX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MEDUATTK.wav", + "defend": "MEDUDFND.wav", + "killed": "MEDUKILL.wav", + "move": "MEDUMOVE.wav", + "shoot": "MEDUSHOT.wav", + "wince": "MEDUWNCE.wav" + } + }, + "medusaQueen" : + { + "id": 77, + "level": 4, + "faction": "dungeon", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 70, 2000 ] ], //medusa queens //minotaur kings + "graphics" : + { + "animation": "CMEDUQ.DEF", + "missile" : + { + "projectile": "PMEDUSX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MEDQATTK.wav", + "defend": "MEDQDFND.wav", + "killed": "MEDQKILL.wav", + "move": "MEDQMOVE.wav", + "shoot": "MEDQSHOT.wav", + "wince": "MEDQWNCE.wav" + } + }, + "minotaur" : + { + "id": 78, + "level": 5, + "faction": "dungeon", + "abilities": [ [ "SELF_MORALE", 0, 0, 0 ] ], + "upgrades": ["minotaurKing"], + "graphics" : + { + "animation": "CMINOT.DEF" + }, + "sound" : + { + "attack": "MINOATTK.wav", + "defend": "MINODFND.wav", + "killed": "MINOKILL.wav", + "move": "MINOMOVE.wav", + "wince": "MINOWNCE.wav" + } + }, + "minotaurKing" : + { + "id": 79, + "level": 5, + "faction": "dungeon", + "abilities": [ [ "SELF_MORALE", 0, 0, 0 ] ], + "graphics" : + { + "animation": "CMINOK.DEF" + }, + "sound" : + { + "attack": "MINKATTK.wav", + "defend": "MINKDFND.wav", + "killed": "MINKKILL.wav", + "move": "MINKMOVE.wav", + "shoot": "MINKSHOT.wav", + "wince": "MINKWNCE.wav" + } + }, + "manticore" : + { + "id": 80, + "level": 6, + "faction": "dungeon", + "upgrades": ["scorpicore"], + "graphics" : + { + "animation": "CMCORE.DEF" + }, + "sound" : + { + "attack": "MANTATTK.wav", + "defend": "MANTDFND.wav", + "killed": "MANTKILL.wav", + "move": "MANTMOVE.wav", + "shoot": "MANTSHOT.wav", + "wince": "MANTWNCE.wav" + } + }, + "scorpicore" : + { + "id": 81, + "level": 6, + "faction": "dungeon", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 74, 0 ] ], //scorpicore + "graphics" : + { + "animation": "CCMCOR.DEF" + }, + "sound" : + { + "attack": "SCRPATTK.wav", + "defend": "SCRPDFND.wav", + "killed": "SCRPKILL.wav", + "move": "SCRPMOVE.wav", + "shoot": "SCRPSHOT.wav", + "wince": "SCRPWNCE.wav" + } + }, + "redDragon" : + { + "id": 82, + "level": 7, + "faction": "dungeon", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //red dragon is a dragon + [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //Red Dragon has breath attack + [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ] ], //red dragon's spell immunity + "upgrades": ["blackDragon"], + "graphics" : + { + "animation": "CRDRGN.DEF" + }, + "sound" : + { + "attack": "RDDRATTK.wav", + "defend": "RDDRDFND.wav", + "killed": "RDDRKILL.wav", + "move": "RDDRMOVE.wav", + "wince": "RDDRWNCE.wav" + } + }, + "blackDragon" : + { + "id": 83, + "level": 7, + "faction": "dungeon", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //black dragon is a dragon + [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //Black Dragon has breath attack + [ "HATE", 50, 41, 0 ], //Hate Titans + [ "HATE", 50, 40, 0 ], //Hate Giants + [ "LEVEL_SPELL_IMMUNITY", 5, 0, 0 ] ], //black dragon's spell immunity + "graphics" : + { + "animation": "CBDRGN.DEF" + }, + "sound" : + { + "attack": "BKDRATTK.wav", + "defend": "BKDRDFND.wav", + "killed": "BKDRKILL.wav", + "move": "BKDRMOVE.wav", + "wince": "BKDRWNCE.wav" + } + } +} diff --git a/config/creatures/fortress.json b/config/creatures/fortress.json new file mode 100644 index 000000000..53c3225a2 --- /dev/null +++ b/config/creatures/fortress.json @@ -0,0 +1,287 @@ +{ + "gnoll" : + { + "id": 98, + "level": 1, + "faction": "fortress", + "upgrades": ["gnollMarauder"], + "graphics" : + { + "animation": "CGNOLL.DEF" + }, + "sound" : + { + "attack": "GNOLATTK.wav", + "defend": "GNOLDFND.wav", + "killed": "GNOLKILL.wav", + "move": "GNOLMOVE.wav", + "wince": "GNOLWNCE.wav" + } + }, + "gnollMarauder" : + { + "id": 99, + "level": 1, + "faction": "fortress", + "graphics" : + { + "animation": "CGNOLM.DEF" + }, + "sound" : + { + "attack": "GNLMATTK.wav", + "defend": "GNLMDFND.wav", + "killed": "GNLMKILL.wav", + "move": "GNLMMOVE.wav", + "wince": "GNLMWNCE.wav" + } + }, + "lizardman" : + { + "id": 100, + "level": 2, + "extraNames": [ "primitiveLizardman", ], + "faction": "fortress", + "upgrades": ["lizardWarrior"], + "graphics" : + { + "animation": "CPLIZA.DEF", + "missile" : + { + "projectile": "PPLIZAX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "PLIZATTK.wav", + "defend": "PLIZDFND.wav", + "killed": "PLIZKILL.wav", + "move": "PLIZMOVE.wav", + "shoot": "PLIZSHOT.wav", + "wince": "PLIZWNCE.wav" + } + }, + "lizardWarrior" : + { + "id": 101, + "level": 2, + "faction": "fortress", + "graphics" : + { + "animation": "CALIZA.DEF", + "missile" : + { + "projectile": "PPLIZAX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "ALIZATTK.wav", + "defend": "ALIZDFND.wav", + "killed": "ALIZKILL.wav", + "move": "ALIZMOVE.wav", + "shoot": "ALIZSHOT.wav", + "wince": "ALIZWNCE.wav" + } + }, + "gorgon" : + { + "id": 102, + "level": 5, + "faction": "fortress", + "upgrades": ["mightyGorgon"], + "graphics" : + { + "animation": "CCGORG.DEF" + }, + "sound" : + { + "attack": "CGORATTK.wav", + "defend": "CGORDFND.wav", + "killed": "CGORKILL.wav", + "move": "CGORMOVE.wav", + "wince": "CGORWNCE.wav" + } + }, + "mightyGorgon" : + { + "id": 103, + "level": 5, + "faction": "fortress", + "abilities": [ [ "DEATH_STARE", 10, 0, 0 ] ], //mighty gorgons + "graphics" : + { + "animation": "CBGOG.DEF" + }, + "sound" : + { + "attack": "BGORATTK.wav", + "defend": "BGORDFND.wav", + "killed": "BGORKILL.wav", + "move": "BGORMOVE.wav", + "wince": "BGORWNCE.wav" + } + }, + "serpentFly" : + { + "id": 104, + "level": 3, + "extraNames": [ "dragonFly" ], + "faction": "fortress", + "abilities": [ [ "SPELL_AFTER_ATTACK", 100, 78, 0 ] ], //serpent fly + "upgrades": ["fireDragonFly"], + "graphics" : + { + "animation": "CDRFLY.DEF" + }, + "sound" : + { + "attack": "DFLYATTK.wav", + "defend": "DFLYDFND.wav", + "killed": "DFLYKILL.wav", + "move": "DFLYMOVE.wav", + "wince": "DFLYWNCE.wav" + } + }, + "fireDragonFly" : // dragonFly is correct in-game, incorrect in HOTRAITS + { + "id": 105, + "level": 3, + "faction": "fortress", + "abilities": [ [ "SPELL_AFTER_ATTACK", 100, 78, 0 ], //dragon fly + [ "SPELL_AFTER_ATTACK", 100, 45, 0 ] ], //mighty gorgons + "graphics" : + { + "animation": "CDRFIR.DEF" + }, + "sound" : + { + "attack": "FDFLATTK.wav", + "defend": "FDFLDFND.wav", + "killed": "FDFLKILL.wav", + "move": "FDFLMOVE.wav", + "shoot": "FDFLSHOT.wav", + "wince": "FDFLWNCE.wav" + } + }, + "basilisk" : + { + "id": 106, + "level": 4, + "faction": "fortress", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 70, 0 ] ], //basilisks + "upgrades": ["greaterBasilisk"], + "graphics" : + { + "animation": "CBASIL.DEF" + }, + "sound" : + { + "attack": "BASLATTK.wav", + "defend": "BASLDFND.wav", + "killed": "BASLKILL.wav", + "move": "BASLMOVE.wav", + "wince": "BASLWNCE.wav" + } + }, + "greaterBasilisk" : + { + "id": 107, + "level": 4, + "faction": "fortress", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 70, 0 ] ], //greater basilisks + "graphics" : + { + "animation": "CGBASI.DEF" + }, + "sound" : + { + "attack": "GBASATTK.wav", + "defend": "GBASDFND.wav", + "killed": "GBASKILL.wav", + "move": "GBASMOVE.wav", + "wince": "GBASWNCE.wav" + } + }, + "wyvern" : + { + "id": 108, + "level": 6, + "faction": "fortress", + "upgrades": ["wyvernMonarch"], + "graphics" : + { + "animation": "CWYVER.DEF" + }, + "sound" : + { + "attack": "WYVNATTK.wav", + "defend": "WYVNDFND.wav", + "killed": "WYVNKILL.wav", + "move": "WYVNMOVE.wav", + "wince": "WYVNWNCE.wav" + } + }, + "wyvernMonarch" : + { + "id": 109, + "level": 6, + "faction": "fortress", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 71, 0 ] ], //Wyvern Monarch + "graphics" : + { + "animation": "CWYVMN.DEF" + }, + "sound" : + { + "attack": "WYVMATTK.wav", + "defend": "WYVMDFND.wav", + "killed": "WYVMKILL.wav", + "move": "WYVMMOVE.wav", + "wince": "WYVMWNCE.wav" + } + }, + "hydra" : + { + "id": 110, + "level": 7, + "faction": "fortress", + "abilities": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ], //hydras + [ "ATTACKS_ALL_ADJACENT", 0, 0, 0 ] ], //hydras + "upgrades": ["chaosHydra"], + "graphics" : + { + "animation": "CHYDRA.DEF" + }, + "sound" : + { + "attack": "HYDRATTK.wav", + "defend": "HYDRDFND.wav", + "killed": "HYDRKILL.wav", + "move": "HYDRMOVE.wav", + "wince": "HYDRWNCE.wav" + } + }, + "chaosHydra" : + { + "id": 111, + "level": 7, + "faction": "fortress", + "abilities": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ], //chaos hydras + [ "ATTACKS_ALL_ADJACENT", 0, 0, 0 ] ], //chaos hydras + "graphics" : + { + "animation": "CCHYDR.DEF" + }, + "sound" : + { + "attack": "CHYDATTK.wav", + "defend": "CHYDDFND.wav", + "killed": "CHYDKILL.wav", + "move": "CHYDMOVE.wav", + "wince": "CHYDWNCE.wav" + } + } +} diff --git a/config/creatures/inferno.json b/config/creatures/inferno.json new file mode 100644 index 000000000..cb3353d6b --- /dev/null +++ b/config/creatures/inferno.json @@ -0,0 +1,309 @@ +{ + "imp" : + { + "id": 42, + "level": 1, + "faction": "inferno", + "upgrades": ["familiar"], + "graphics" : + { + "animation": "CIMP.DEF" + }, + "sound" : + { + "attack": "IMPPATTK.wav", + "defend": "IMPPDFND.wav", + "killed": "IMPPKILL.wav", + "move": "IMPPMOVE.wav", + "wince": "IMPPWNCE.wav" + } + }, + "familiar" : + { + "id": 43, + "level": 1, + "faction": "inferno", + "abilities": [ [ "MANA_CHANNELING", 20, 0, 0 ] ], //familiars + "graphics" : + { + "animation": "CFAMIL.DEF" + }, + "sound" : + { + "attack": "FMLRATTK.wav", + "defend": "FMLRDFND.wav", + "killed": "FMLRKILL.wav", + "move": "FMLRMOVE.wav", + "wince": "FMLRWNCE.wav" + } + }, + "gog" : + { + "id": 44, + "level": 2, + "faction": "inferno", + "upgrades": ["magog"], + "graphics" : + { + "animation": "CGOG.DEF", + "missile" : + { + "projectile": "CPRGOGX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "GOGGATTK.wav", + "defend": "GOGGDFND.wav", + "killed": "GOGGKILL.wav", + "move": "GOGGMOVE.wav", + "shoot": "GOGGSHOT.wav", + "wince": "GOGGWNCE.wav", + "ext1": "GOGFLAME.wav" + } + }, + "magog" : + { + "id": 45, + "level": 2, + "faction": "inferno", + "abilities": [ [ "SPELL_LIKE_ATTACK", 0, 21, 0 ] ], //magogs fire with fireballs + "graphics" : + { + "animation": "CMAGOG.DEF", + "missile" : + { + "projectile": "CPRGOGX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MGOGATTK.wav", + "defend": "MGOGDFND.wav", + "killed": "MGOGKILL.wav", + "move": "MGOGMOVE.wav", + "shoot": "MGOGSHOT.wav", + "wince": "MGOGWNCE.wav", + "ext1": "GOGFLAME.wav" + } + }, + "hellHound" : + { + "id": 46, + "level": 3, + "faction": "inferno", + "upgrades": ["cerberus"], + "ability_remove": [ "FLYING" ], //hell hound doesn't fly + "graphics" : + { + "animation": "CHHOUN.DEF" + }, + "sound" : + { + "attack": "HHNDATTK.wav", + "defend": "HHNDDFND.wav", + "killed": "HHNDKILL.wav", + "move": "HHNDMOVE.wav", + "wince": "HHNDWNCE.wav" + } + }, + "cerberus" : + { + "id": 47, + "level": 3, + "faction": "inferno", + "abilities": [ [ "THREE_HEADED_ATTACK", 0, 0, 0 ], + [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], + "ability_remove": [ "FLYING" ], //cerberus doesn't fly + "graphics" : + { + "animation": "CCERBU.DEF" + }, + "sound" : + { + "attack": "CERBATTK.wav", + "defend": "CERBDFND.wav", + "killed": "CERBKILL.wav", + "move": "CERBMOVE.wav", + "wince": "CERBWNCE.wav" + } + }, + "demon" : + { + "id": 48, + "level": 4, + "faction": "inferno", + "upgrades": ["hornedDemon"], + "graphics" : + { + "animation": "COHDEM.DEF" + }, + "sound" : + { + "attack": "SHDMATTK.wav", + "defend": "SHDMDFND.wav", + "killed": "SHDMKILL.wav", + "move": "SHDMMOVE.wav", + "wince": "SHDMWNCE.wav" + } + }, + "hornedDemon" : + { + "id": 49, + "level": 4, + "faction": "inferno", + "graphics" : + { + "animation": "CTHDEM.DEF" + }, + "sound" : + { + "attack": "DHDMATTK.wav", + "defend": "DHDMDFND.wav", + "killed": "DHDMKILL.wav", + "move": "DHDMMOVE.wav", + "wince": "DHDMWNCE.wav" + } + }, + "pitFiend" : + { + "id": 50, + "level": 5, + "faction": "inferno", + "upgrades": ["pitLord"], + "graphics" : + { + "animation": "CPFIEN.DEF" + }, + "sound" : + { + "attack": "PFNDATTK.wav", + "defend": "PFNDDFND.wav", + "killed": "PFNDKILL.wav", + "move": "PFNDMOVE.wav", + "wince": "PFNDWNCE.wav" + } + }, + "pitLord" : + { + "id": 51, + "level": 5, + "faction": "inferno", + "abilities": [ [ "DAEMON_SUMMONING", 50, 48, 0 ], + [ "CASTS", 1, 0, 0] ], //pit lord + "graphics" : + { + "animation": "CPFOE.DEF" + }, + "sound" : + { + "attack": "PFOEATTK.wav", + "defend": "PFOEDFND.wav", + "killed": "PFOEKILL.wav", + "move": "PFOEMOVE.wav", + "wince": "PFOEWNCE.wav" + } + }, + "efreet" : + { + "id": 52, + "level": 6, + "faction": "inferno", + "abilities": [ [ "HATE", 50, 37, 0 ], + [ "HATE", 50, 36, 0 ], + [ "FLYING", 0, 0, 0 ], //efreeti hate master genies + [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //efreeti hate genies + "upgrades": ["efreetSultan"], + "graphics" : + { + "animation": "CEFREE.DEF" + }, + "sound" : + { + "attack": "EFRTATTK.wav", + "defend": "EFRTDFND.wav", + "killed": "EFRTKILL.wav", + "move": "EFRTMOVE.wav", + "wince": "EFRTWNCE.wav" + } + }, + "efreetSultan" : + { + "id": 53, + "level": 6, + "faction": "inferno", + "abilities": [ [ "HATE", 50, 37, 0 ], + [ "HATE", 50, 36, 0 ], + [ "FLYING", 0, 0, 0 ], //efreet sultans hate master genies + [ "FIRE_SHIELD", 0, 36, 0 ], //efreet sultans hate genies + [ "FIRE_IMMUNITY", 0, 0, 0 ] ], //efreet sultan //Efreet Sultan + "graphics" : + { + "animation": "CEFRES.DEF" + }, + "sound" : + { + "attack": "ESULATTK.wav", + "defend": "ESULDFND.wav", + "killed": "ESULKILL.wav", + "move": "ESULMOVE.wav", + "shoot": "ESULSHOT.wav", + "wince": "ESULWNCE.wav" + } + }, + "devil" : + { + "id": 54, + "level": 7, + "faction": "inferno", + "ability_remove": [ "FLYING" ], //use teleport instead + "abilities": [ [ "HATE", 50, 13, 0 ], + [ "FLYING", 0, 1, 0], //teleport + [ "HATE", 50, 12, 0 ], + [ "ENEMY_LUCK_DECREASING", 1, 0, 0 ], //devils //devils hate archangles + [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //devils //devils hate angels + "upgrades": ["archDevil"], + "graphics" : + { + "animation": "CDEVIL.DEF" + }, + "sound" : + { + "attack": "DEVLATTK.wav", + "defend": "DEVLDFND.wav", + "killed": "DEVLKILL.wav", + "move": "DEVLMOVE.wav", + "wince": "DEVLWNCE.wav", + "ext1": "DEVLEXT1.wav", + "ext2": "DEVLEXT2.wav" + } + }, + "archDevil" : + { + "id": 55, + "level": 7, + "faction": "inferno", + "ability_remove": [ "FLYING" ], //use teleport instead + "abilities": [ [ "HATE", 50, 13, 0 ], + [ "HATE", 50, 12, 0 ], + [ "FLYING", 0, 1, 0], + [ "ENEMY_LUCK_DECREASING", 1, 0, 0 ], //archdevils //archdevils hate archangles + [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //archdevils //archdevils hate angels + "graphics" : + { + "animation": "CADEVL.DEF" + }, + "sound" : + { + "attack": "ADVLATTK.wav", + "defend": "ADVLDFND.wav", + "killed": "ADVLKILL.wav", + "move": "ADVLMOVE.wav", + "wince": "ADVLWNCE.wav", + "startMoving": "ADVLEXT1.wav", + "stopMoving": "ADVLEXT2.wav" + } + } +} diff --git a/config/creatures/necropolis.json b/config/creatures/necropolis.json new file mode 100644 index 000000000..7632da14f --- /dev/null +++ b/config/creatures/necropolis.json @@ -0,0 +1,294 @@ +{ + "skeleton" : + { + "id": 56, + "level": 1, + "faction": "necropolis", + "upgrades": ["skeletonWarrior"], + "graphics" : + { + "animation": "CSKELE.DEF" + }, + "sound" : + { + "attack": "SKELATTK.wav", + "defend": "SKELDFND.wav", + "killed": "SKELKILL.wav", + "move": "SKELMOVE.wav", + "wince": "SKELWNCE.wav" + } + }, + "skeletonWarrior" : + { + "id": 57, + "level": 1, + "faction": "necropolis", + "graphics" : + { + "animation": "CWSKEL.DEF" + }, + "sound" : + { + "attack": "SKLWATTK.wav", + "defend": "SKLWDFND.wav", + "killed": "SKLWKILL.wav", + "move": "SKLWMOVE.wav", + "wince": "SKLWWNCE.wav" + } + }, + "walkingDead" : + { + "id": 58, + "level": 2, + "extraNames": [ "zombie" ], //FIXME: zombie is a name of upgrade but not in HOTRAITS + "faction" : "necropolis", + "upgrades": ["zombieLord"], + "graphics" : + { + "animation": "CZOMBI.DEF" + }, + "sound" : + { + "attack": "ZOMBATTK.wav", + "defend": "ZOMBDFND.wav", + "killed": "ZOMBKILL.wav", + "move": "ZOMBMOVE.wav", + "wince": "ZOMBWNCE.wav" + } + }, + "zombieLord" : //FIXME: zombie is a correct in-name but not in HOTRAITS.TXT + { + "id": 59, + "level": 2, + "faction": "necropolis", + "graphics" : + { + "animation": "CZOMLO.DEF" + }, + "sound" : + { + "attack": "ZMBLATTK.wav", + "defend": "ZMBLDFND.wav", + "killed": "ZMBLKILL.wav", + "move": "ZMBLMOVE.wav", + "wince": "ZMBLWNCE.wav" + } + }, + "wight" : + { + "id": 60, + "level": 3, + "faction": "necropolis", + "abilities": [ [ "FULL_HP_REGENERATION", 0, 1, 0 ] ], //wight + "upgrades": ["wraith"], + "graphics" : + { + "animation": "CWIGHT.DEF" + }, + "sound" : + { + "attack": "WGHTATTK.wav", + "defend": "WGHTDFND.wav", + "killed": "WGHTKILL.wav", + "move": "WGHTMOVE.wav", + "wince": "WGHTWNCE.wav" + } + }, + "wraith" : + { + "id": 61, + "level": 3, + "faction": "necropolis", + "abilities": [ [ "FULL_HP_REGENERATION", 0, 1, 0 ], //wraith + [ "MANA_DRAIN", 2, 0, 0 ] ], + "graphics" : + { + "animation": "CWRAIT.DEF" + }, + "sound" : + { + "attack": "WRTHATTK.wav", + "defend": "WRTHDFND.wav", + "killed": "WRTHKILL.wav", + "move": "WRTHMOVE.wav", + "wince": "WRTHWNCE.wav" + } + }, + "vampire" : + { + "id": 62, + "level": 4, + "faction": "necropolis", + "abilities": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //vampires //vampire lords + "upgrades": ["vampireLord"], + "graphics" : + { + "animation": "CVAMP.DEF" + }, + "sound" : + { + "attack": "VAMPATTK.wav", + "defend": "VAMPDFND.wav", + "killed": "VAMPKILL.wav", + "move": "VAMPMOVE.wav", + "wince": "VAMPWNCE.wav", + "startMoving": "VAMPEXT1.wav", + "stopMoving": "VAMPEXT2.wav" + } + }, + "vampireLord" : + { + "id": 63, + "level": 4, + "faction": "necropolis", + "abilities": [ [ "LIFE_DRAIN", 0, 0, 0 ], + [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //vampire lords + "graphics" : + { + "animation": "CNOSFE.DEF" + }, + "sound" : + { + "attack": "NOSFATTK.wav", + "defend": "NOSFDFND.wav", + "killed": "NOSFKILL.wav", + "move": "NOSFMOVE.wav", + "shoot": "NOSFSHOT.wav", + "wince": "NOSFWNCE.wav", + "ext1": "NOSFEXT1.wav", + "ext2": "NOSFEXT2.wav" + } + }, + "lich" : + { + "id": 64, + "level": 5, + "faction": "necropolis", + "abilities": [ [ "SPELL_LIKE_ATTACK", 0, 76, 0 ] ], //liches + "upgrades": ["powerLich"], + "graphics" : + { + "animation": "CLICH.DEF", + "missile" : + { + "projectile": "PLICH.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "LICHATTK.wav", + "defend": "LICHDFND.wav", + "killed": "LICHKILL.wav", + "move": "LICHMOVE.wav", + "shoot": "LICHSHOT.wav", + "wince": "LICHWNCE.wav", + "ext1": "LICHATK2.wav" + } + }, + "powerLich" : + { + "id": 65, + "level": 5, + "faction": "necropolis", + "abilities": [ [ "SPELL_LIKE_ATTACK", 0, 76, 0 ] ], //power liches + "graphics" : + { + "animation": "CPLICH.DEF", + "missile" : + { + "projectile": "PLICH.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "PLCHATTK.wav", + "defend": "PLCHDFND.wav", + "killed": "PLCHKILL.wav", + "move": "PLCHMOVE.wav", + "shoot": "PLCHSHOT.wav", + "wince": "PLCHWNCE.wav" + } + }, + "blackKnight" : + { + "id": 66, + "level": 6, + "faction": "necropolis", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 42, 0 ] ], //black knights + "upgrades": ["dreadKnight"], + "graphics" : + { + "animation": "CBKNIG.DEF" + }, + "sound" : + { + "attack": "BKNTATTK.wav", + "defend": "BKNTDFND.wav", + "killed": "BKNTKILL.wav", + "move": "BKNTMOVE.wav", + "wince": "BKNTWNCE.wav" + } + }, + "dreadKnight" : + { + "id": 67, + "level": 6, + "faction": "necropolis", + "abilities": [ [ "SPELL_AFTER_ATTACK", 20, 42, 0 ], //dread knights + [ "DOUBLE_DAMAGE_CHANCE", 20, 0, 0 ] ], //vampire lords + "graphics" : + { + "animation": "CBLORD.DEF" + }, + "sound" : + { + "attack": "BLRDATTK.wav", + "defend": "BLRDDFND.wav", + "killed": "BLRDKILL.wav", + "move": "BLRDMOVE.wav", + "wince": "BLRDWNCE.wav" + } + }, + "boneDragon" : + { + "id": 68, + "level": 7, + "faction": "necropolis", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //bone dragon is a dragon + "upgrades": ["ghostDragon"], + "graphics" : + { + "animation": "CNDRGN.DEF" + }, + "sound" : + { + "attack": "BODRATTK.wav", + "defend": "BODRDFND.wav", + "killed": "BODRKILL.wav", + "move": "BODRMOVE.wav", + "wince": "BODRWNCE.wav" + } + }, + "ghostDragon" : + { + "id": 69, + "level": 7, + "faction": "necropolis", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //ghost dragon is a dragon + [ "SPELL_AFTER_ATTACK", 20, 75, 0 ] ], //ghost dragon + "graphics" : + { + "animation": "CHDRGN.DEF" + }, + "sound" : + { + "attack": "GHDRATTK.wav", + "defend": "GHDRDFND.wav", + "killed": "GHDRKILL.wav", + "move": "GHDRMOVE.wav", + "wince": "GHDRWNCE.wav" + } + } +} diff --git a/config/creatures/neutral.json b/config/creatures/neutral.json new file mode 100644 index 000000000..6c8e7df83 --- /dev/null +++ b/config/creatures/neutral.json @@ -0,0 +1,333 @@ +// Neutral creatures as in SoD +{ + "goldGolem" : + { + "id": 116, + "level": 4, + "faction": "neutral", + "abilities": [ [ "SPELL_DAMAGE_REDUCTION", 85, -1, 0 ], //gold golems reduce dmg from spells + [ "NON_LIVING", 0, 0, 0 ] ], //diamond golems are non-living + "graphics" : + { + "animation": "CGGOLE.DEF" + }, + "sound" : + { + "attack": "GGLMATTK.wav", + "defend": "GGLMDFND.wav", + "killed": "GGLMKILL.wav", + "move": "GGLMMOVE.wav", + "wince": "GGLMWNCE.wav" + } + }, + "diamondGolem" : + { + "id": 117, + "level": 5, + "faction": "neutral", + "abilities": [ [ "SPELL_DAMAGE_REDUCTION", 95, -1, 0 ], //diamond golems reduce dmg from spells + [ "NON_LIVING", 0, 0, 0 ] ], //psychic elementals shouldn't get morale + "graphics" : + { + "animation": "CDGOLE.DEF" + }, + "sound" : + { + "attack": "DGLMATTK.wav", + "defend": "DGLMDFND.wav", + "killed": "DGLMKILL.wav", + "move": "DGLMMOVE.wav", + "wince": "DGLMWNCE.wav" + } + }, + "azureDragon" : + { + "id": 132, + "level": 10, + "faction": "neutral", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], + [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //azure dragon's breath + [ "FEARLESS", 0, 0, 0 ], //azure dragon is immune to fear + [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ], //immunity spell levels 1-3 + [ "FEAR", 0, 0, 0]], //azure dragon is a dragon + "graphics" : + { + "animation": "CADRGN.DEF" + }, + "sound" : + { + "attack": "AZURATTK.wav", + "defend": "AZURDFND.wav", + "killed": "AZURKILL.wav", + "move": "AZURMOVE.wav", + "wince": "AZURWNCE.wav" + } + }, + "crystalDragon" : + { + "id": 133, + "level": 10, + "faction": "neutral", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //crystal dragon is a dragon + "ability_remove": [ "FLYING" ], + "graphics" : + { + "animation": "CCDRGN.DEF" + }, + "sound" : + { + "attack": "CRYSATTK.wav", + "defend": "CRYSDFND.wav", + "killed": "CRYSKILL.wav", + "move": "CRYSMOVE.wav", + "wince": "CRYSWNCE.wav" + } + }, + "fairieDragon" : + { + "id": 134, + "level": 8, + "faction": "neutral", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //faerie dragon is a dragon + [ "CASTS", 5, 0, 0 ], + [ "CREATURE_SPELL_POWER", 500, 0, 0], //5 spell power per dragon + [ "SPELLCASTER", 2, 15, 10 ], //magic arrow + [ "SPELLCASTER", 2, 16, 22 ], //ice bolt + [ "SPELLCASTER", 2, 17, 22 ], //thunderbolt + [ "SPELLCASTER", 2, 19, 5 ], //chain lightning + [ "SPELLCASTER", 2, 20, 10 ], //frost ring + [ "SPELLCASTER", 2, 21, 21 ], //fireball + [ "SPELLCASTER", 2, 22, 5 ], //inferno + [ "SPELLCASTER", 2, 23, 5 ]], //meteor shower + "graphics" : + { + "animation": "CFDRGN.DEF" + }, + "sound" : + { + "attack": "FAERATTK.wav", + "defend": "FAERDFND.wav", + "killed": "FAERKILL.wav", + "move": "FAERMOVE.wav", + "shoot": "FAERSHOT.wav", + "wince": "FAERWNCE.wav" + } + }, + "rustDragon" : + { + "id": 135, + "level": 10, + "faction": "neutral", + "abilities": [ [ "SPELL_AFTER_ATTACK", 100, 80, 0 ], //always reduce defense + [ "ACID_BREATH", 25, 0, 20 ], //20% chance to do 25 damage + [ "DRAGON_NATURE", 0, 0, 0 ] ], //rust dragon is a dragon + "graphics" : + { + "animation": "CRSDGN.DEF" + }, + "sound" : + { + "attack": "RUSTATTK.wav", + "defend": "RUSTDFND.wav", + "killed": "RUSTKILL.wav", + "move": "RUSTMOVE.wav", + "wince": "RUSTWNCE.wav" + } + }, + "enchanter" : + { + "id": 136, + "level": 6, + "extraNames": [ "enchanters" ], + "faction": "neutral", + "abilities": [ [ "NO_WALL_PENALTY", 0, 0, 0 ], + [ "ENCHANTER", 3, 28, 3], //air shield + [ "ENCHANTER", 3, 41, 3], //bless + [ "ENCHANTER", 3, 45, 3], //wealness + [ "ENCHANTER", 3, 46, 3], //stone skin + [ "ENCHANTER", 3, 53, 3], //slow + [ "ENCHANTER", 3, 54, 3], //haster + [ "CASTS", 5, 0, 0]], //Enchanter + "graphics" : + { + "animation": "CENCH.DEF", + "missile" : + { + "projectile": "SMBALX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "ENCHATTK.wav", + "defend": "ENCHDFND.wav", + "killed": "ENCHKILL.wav", + "move": "ENCHMOVE.wav", + "shoot": "ENCHSHOT.wav", + "wince": "ENCHWNCE.wav" + } + }, + "sharpshooter" : + { + "id": 137, + "level": 4, + "extraNames": [ "sharpshooters" ], + "faction": "neutral", + "abilities": [ [ "NO_WALL_PENALTY", 0, 0, 0 ], + [ "NO_DISTANCE_PENALTY", 0, 0, 0 ] ], //Sharpshooter + "graphics" : + { + "animation": "CSHARP.DEF", + "missile" : + { + "projectile": "PELFX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "HCRSATTK.wav", + "defend": "HCRSDFND.wav", + "killed": "HCRSKILL.wav", + "move": "HCRSMOVE.wav", + "shoot": "HCRSSHOT.wav", + "wince": "HCRSWNCE.wav" + } + }, + "halfling" : + { + "id": 138, + "level": 1, + "faction": "neutral", + "graphics" : + { + "animation": "CHALF.DEF", + "missile" : + { + "projectile": "PHALF.DEF", + "spinning": true + } + }, + "sound" : + { + "attack": "HALFATTK.wav", + "defend": "HALFDFND.wav", + "killed": "HALFKILL.wav", + "move": "HALFMOVE.wav", + "shoot": "HALFSHOT.wav", + "wince": "HALFWNCE.wav" + } + }, + "peasant" : + { + "id": 139, + "level": 1, + "faction": "neutral", + "graphics" : + { + "animation": "CPEAS.DEF" + }, + "sound" : + { + "attack": "PSNTATTK.wav", + "defend": "PSNTDFND.wav", + "killed": "PSNTKILL.wav", + "move": "PSNTMOVE.wav", + "wince": "PSNTWNCE.wav" + } + }, + "boar" : + { + "id": 140, + "level": 2, + "faction": "neutral", + "abilities": [ [ "DOUBLE_WIDE", 0, 0, 0 ] ], //boar should be treated as double-wide + "graphics" : + { + "animation": "CBOAR.DEF" + }, + "sound" : + { + "attack": "BOARATTK.wav", + "defend": "BOARDFND.wav", + "killed": "BOARKILL.wav", + "move": "BOARMOVE.wav", + "wince": "BOARWNCE.wav" + } + }, + "mummy" : + { + "id": 141, + "level": 3, + "faction": "neutral", + "abilities": [ [ "UNDEAD", 0, 0, 0 ] ], + "graphics" : + { + "animation": "CMUMMY.DEF" + }, + "sound" : + { + "attack": "MUMYATTK.wav", + "defend": "MUMYDFND.wav", + "killed": "MUMYKILL.wav", + "move": "MUMYMOVE.wav", + "wince": "MUMYWNCE.wav" + } + }, + "nomad" : + { + "id": 142, + "level": 3, + "faction": "neutral", + "abilities": [ [ "DOUBLE_WIDE", 0, 0, 0 ] ], //nomads should be treated as double-wide + "graphics" : + { + "animation": "CNOMAD.DEF" + }, + "sound" : + { + "attack": "NMADATTK.wav", + "defend": "NMADDFND.wav", + "killed": "NMADKILL.wav", + "move": "NMADMOVE.wav", + "wince": "NMADWNCE.wav" + } + }, + "rogue" : + { + "id": 143, + "level": 2, + "faction": "neutral", + "graphics" : + { + "animation": "CROGUE.DEF" + }, + "sound" : + { + "attack": "ROGUATTK.wav", + "defend": "ROGUDFND.wav", + "killed": "ROGUKILL.wav", + "move": "ROGUMOVE.wav", + "wince": "ROGUWNCE.wav" + } + }, + "troll" : + { + "id": 144, + "level": 5, + "faction": "neutral", + "abilities": [ [ "FULL_HP_REGENERATION", 0, 0, 0 ] ], //troll + "graphics" : + { + "animation": "CTROLL.DEF" + }, + "sound" : + { + "attack": "TRLLATTK.wav", + "defend": "TRLLDFND.wav", + "killed": "TRLLKILL.wav", + "move": "TRLLMOVE.wav", + "wince": "TRLLWNCE.wav" + } + } +} diff --git a/config/creatures/rampart.json b/config/creatures/rampart.json new file mode 100644 index 000000000..a1cc91a28 --- /dev/null +++ b/config/creatures/rampart.json @@ -0,0 +1,291 @@ +{ + "centaur" : + { + "id": 14, + "level": 1, + "faction": "rampart", + "upgrades": ["centaurCaptain"], + "graphics" : + { + "animation": "CCENTR.DEF" + }, + "sound" : + { + "attack": "CNTRATTK.wav", + "defend": "CNTRDFND.wav", + "killed": "CNTRKILL.wav", + "move": "CNTRMOVE.wav", + "shoot": "CNTRSHOT.wav", + "wince": "CNTRWNCE.wav" + } + }, + "centaurCaptain" : + { + "id": 15, + "level": 1, + "faction": "rampart", + "graphics" : + { + "animation": "CECENT.DEF" + }, + "sound" : + { + "attack": "ECNTATTK.wav", + "defend": "ECNTDFND.wav", + "killed": "ECNTKILL.wav", + "move": "ECNTMOVE.wav", + "wince": "ECNTWNCE.wav" + } + }, + "dwarf" : + { + "id": 16, + "level": 2, + "faction": "rampart", + "abilities": [ [ "MAGIC_RESISTANCE", 20, 0, 0 ] ], //dwarf's magic resistance 20% + "upgrades": ["battleDwarf"], + "graphics" : + { + "animation": "CDWARF.DEF" + }, + "sound" : + { + "attack": "DWRFATTK.wav", + "defend": "DWRFDFND.wav", + "killed": "DWRFKILL.wav", + "move": "DWRFMOVE.wav", + "wince": "DWRFWNCE.wav" + } + }, + "battleDwarf" : + { + "id": 17, + "level": 2, + "faction": "rampart", + "abilities": [ [ "MAGIC_RESISTANCE", 40, 0, 0 ] ], //battle dwarf's magic resistance 40% + "graphics" : + { + "animation": "CBDWAR.DEF" + }, + "sound" : + { + "attack": "BDRFATTK.wav", + "defend": "BDRFDFND.wav", + "killed": "BDRFKILL.wav", + "move": "BDRFMOVE.wav", + "wince": "BDRFWNCE.wav" + } + }, + "woodElf" : + { + "id": 18, + "level": 3, + "faction": "rampart", + "upgrades": ["grandElf"], + "graphics" : + { + "animation": "CELF.DEF", + "missile" : + { + "projectile": "PELFX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "WELFATTK.wav", + "defend": "WELFDFND.wav", + "killed": "WELFKILL.wav", + "move": "WELFMOVE.wav", + "shoot": "WELFSHOT.wav", + "wince": "WELFWNCE.wav" + } + }, + "grandElf" : + { + "id": 19, + "level": 3, + "faction": "rampart", + "graphics" : + { + "animation": "CGRELF.DEF", + "missile" : + { + "projectile": "PELFX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "GELFATTK.wav", + "defend": "GELFDFND.wav", + "killed": "GELFKILL.wav", + "move": "GELFMOVE.wav", + "shoot": "GELFSHOT.wav", + "wince": "GELFWNCE.wav" + } + }, + "pegasus" : + { + "id": 20, + "level": 4, + "faction": "rampart", + "abilities": [ [ "CHANGES_SPELL_COST_FOR_ENEMY", 2, 0, 0 ] ], //pegasus makes spell cost higher for enemy mage + "upgrades": ["silverPegasus"], + "graphics" : + { + "animation": "CPEGAS.DEF" + }, + "sound" : + { + "attack": "PEGAATTK.wav", + "defend": "PEGADFND.wav", + "killed": "PEGAKILL.wav", + "move": "PEGAMOVE.wav", + "wince": "PEGAWNCE.wav" + } + }, + "silverPegasus" : + { + "id": 21, + "level": 4, + "faction": "rampart", + "abilities": [ [ "CHANGES_SPELL_COST_FOR_ENEMY", 2, 0, 0 ] ], //silver pegasus makes spell cost higher for enemy mage + "graphics" : + { + "animation": "CAPEGS.DEF" + }, + "sound" : + { + "attack": "APEGATTK.wav", + "defend": "APEGDFND.wav", + "killed": "APEGKILL.wav", + "move": "APEGMOVE.wav", + "wince": "APEGWNCE.wav" + } + }, + "dendroidGuard" : + { + "id": 22, + "level": 5, + "faction": "rampart", + "abilities": [ [ "SPELL_AFTER_ATTACK", 100, 72, 0 ] ], //dendroids cast bind + "upgrades": ["dendroidSoldier"], + "graphics" : + { + "animation": "CTREE.DEF" + }, + "sound" : + { + "attack": "TREEATTK.wav", + "defend": "TREEDFND.wav", + "killed": "TREEKILL.wav", + "move": "TREEMOVE.wav", + "wince": "TREEWNCE.wav" + } + }, + "dendroidSoldier" : + { + "id": 23, + "level": 5, + "faction": "rampart", + "abilities": [ [ "SPELL_AFTER_ATTACK", 100, 72, 0 ] ], //dendroid guards cast bind + "graphics" : + { + "animation": "CBTREE.DEF" + }, + "sound" : + { + "attack": "BTREATTK.wav", + "defend": "BTREDFND.wav", + "killed": "BTREKILL.wav", + "move": "BTREMOVE.wav", + "wince": "BTREWNCE.wav" + } + }, + "unicorn" : + { + "id": 24, + "level": 6, + "faction": "rampart", + "abilities": [ [ "SPELL_RESISTANCE_AURA", 0, 55, 0 ], //unicorn + [ "SPELL_AFTER_ATTACK", 20, 62, 0 ] ], //unicorns cast blind with 20% probability + "upgrades": ["warUnicorn"], + "graphics" : + { + "animation": "CUNICO.DEF" + }, + "sound" : + { + "attack": "UNICATTK.wav", + "defend": "UNICDFND.wav", + "killed": "UNICKILL.wav", + "move": "UNICMOVE.wav", + "wince": "UNICWNCE.wav" + } + }, + "warUnicorn" : + { + "id": 25, + "level": 6, + "faction": "rampart", + "abilities": [ [ "SPELL_RESISTANCE_AURA", 20, 55, 0 ], //war unicorn + [ "SPELL_AFTER_ATTACK", 20, 62, 0 ] ], //war unicorns cast blind with 20% probability + "graphics" : + { + "animation": "CWUNIC.DEF" + }, + "sound" : + { + "attack": "WUNCATTK.wav", + "defend": "WUNCDFND.wav", + "killed": "WUNCKILL.wav", + "move": "WUNCMOVE.wav", + "shoot": "WUNCSHOT.wav", + "wince": "WUNCWNCE.wav" + } + }, + "greenDragon" : + { + "id": 26, + "level": 7, + "faction": "rampart", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //green dragon is a dragon + [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //green dragon's breath + [ "LEVEL_SPELL_IMMUNITY", 3, 0, 0 ] ], //green dragon's spell immunity + "upgrades": ["goldDragon"], + "graphics" : + { + "animation": "CGDRAG.DEF" + }, + "sound" : + { + "attack": "GRDRATTK.wav", + "defend": "GRDRDFND.wav", + "killed": "GRDRKILL.wav", + "move": "GRDRMOVE.wav", + "wince": "GRDRWNCE.wav" + } + }, + "goldDragon" : + { + "id": 27, + "level": 7, + "faction": "rampart", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ], //gold dragon is a dragon + [ "TWO_HEX_ATTACK_BREATH", 0, 0, 0 ], //gold dragon's breath + [ "LEVEL_SPELL_IMMUNITY", 4, 0, 0 ] ], //gold dragon's spell immunity + "graphics" : + { + "animation": "CDDRAG.DEF" + }, + "sound" : + { + "attack": "GODRATTK.wav", + "defend": "GODRDFND.wav", + "killed": "GODRKILL.wav", + "move": "GODRMOVE.wav", + "wince": "GODRWNCE.wav" + } + } +} diff --git a/config/creatures/special.json b/config/creatures/special.json new file mode 100644 index 000000000..9eb7e2ea6 --- /dev/null +++ b/config/creatures/special.json @@ -0,0 +1,122 @@ +{ + // Several unused in H3 creatures + // TODO: better way to disable them + "unused122" : + { + "faction": "neutral", + "special" : true, + "id" : 122 + }, + "unused124" : + { + "faction": "neutral", + "special" : true, + "id" : 124 + }, + "unused126" : + { + "faction": "neutral", + "special" : true, + "id" : 126 + }, + "unused128" : + { + "faction": "neutral", + "special" : true, + "id" : 128 + }, + + "catapult" : + { + "special" : true, + "id": 145, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "SMCATA.DEF", + "missile" : + { + "projectile": "SMCATX.DEF", + "spinning": true + } + }, + "sound" : + { + "killed": "CATAKILL.wav", + "shoot": "CATASHOT.wav", + "wince": "CATAWNCE.wav" + } + }, + "ballista" : + { + "special" : true, + "id": 146, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "SMBAL.DEF", + "missile" : + { + "projectile": "SMBALX.DEF", + "spinning": false + } + }, + "sound" : + { + "killed": "BALLKILL.wav", + "shoot": "BALLSHOT.wav", + "wince": "BALLWNCE.wav" + } + }, + "firstAidTent" : + { + "special" : true, + "id": 147, + "level": 0, + "faction": "neutral", + "abilities": [ [ "HEALER", 0, 0, 0 ] ], + "graphics" : + { + "animation": "SMTENT.DEF" + }, + "sound" : + { + "killed": "FAIDKILL.wav", + "wince": "FAIDWNCE.wav" + } + }, + "ammoCart" : + { + "special" : true, + "id": 148, + "level": 0, + "faction": "neutral", + "abilities": [ [ "NOT_ACTIVE", 0, 0, 0 ] ], + "graphics" : + { + "animation": "SMCART.DEF" + }, + "sound" : + { + "killed": "CARTKILL.wav", + "wince": "CARTWNCE.wav" + } + }, + "arrowTower" : + { + "special" : true, + "id": 149, + "level": 0, + "faction": "neutral", + "abilities": [ [ "SHOOTER", 0, 0, 0 ] ], + "graphics" : + { + "missile" : + { + "projectile": "SMBALX.DEF", //workaround for crash + } + } + } +} diff --git a/config/creatures/stronghold.json b/config/creatures/stronghold.json new file mode 100644 index 000000000..99d5797ef --- /dev/null +++ b/config/creatures/stronghold.json @@ -0,0 +1,295 @@ +{ + "goblin" : + { + "id": 84, + "level": 1, + "extraNames": [ "goblins" ], + "faction": "stronghold", + "upgrades": ["hobgoblin"], + "graphics" : + { + "animation": "CGOBLI.DEF" + }, + "sound" : + { + "attack": "GBLNATTK.wav", + "defend": "GBLNDFND.wav", + "killed": "GBLNKILL.wav", + "move": "GBLNMOVE.wav", + "wince": "GBLNWNCE.wav" + } + }, + "hobgoblin" : + { + "id": 85, + "level": 1, + "faction": "stronghold", + "graphics" : + { + "animation": "CHGOBL.DEF" + }, + "sound" : + { + "attack": "HGOBATTK.wav", + "defend": "HGOBDFND.wav", + "killed": "HGOBKILL.wav", + "move": "HGOBMOVE.wav", + "wince": "HGOBWNCE.wav" + } + }, + "goblinWolfRider" : + { + "id": 86, + "level": 2, + "faction": "stronghold", + "upgrades": ["hobgoblinWolfRider"], + "graphics" : + { + "animation": "CBWLFR.DEF" + }, + "sound" : + { + "attack": "GWRDATTK.wav", + "defend": "GWRDDFND.wav", + "killed": "GWRDKILL.wav", + "move": "GWRDMOVE.wav", + "wince": "GWRDWNCE.wav" + } + }, + "hobgoblinWolfRider" : + { + "id": 87, + "level": 2, + "faction": "stronghold", + "abilities": [ [ "ADDITIONAL_ATTACK", 1, 0, 0 ] ], //wolf raider + "graphics" : + { + "animation": "CUWLFR.DEF" + }, + "sound" : + { + "attack": "HGWRATTK.wav", + "defend": "HGWRDFND.wav", + "killed": "HGWRKILL.wav", + "move": "HGWRMOVE.wav", + "wince": "HGWRWNCE.wav" + } + }, + "orc" : + { + "id": 88, + "level": 3, + "faction": "stronghold", + "upgrades": ["orcChieftain"], + "graphics" : + { + "animation": "CORC.DEF", + "missile" : + { + "projectile": "PORCHX.DEF", + "spinning": true + } + }, + "sound" : + { + "attack": "OORCATTK.wav", + "defend": "OORCDFND.wav", + "killed": "OORCKILL.wav", + "move": "OORCMOVE.wav", + "shoot": "OORCSHOT.wav", + "wince": "OORCWNCE.wav" + } + }, + "orcChieftain" : + { + "id": 89, + "level": 3, + "faction": "stronghold", + "graphics" : + { + "animation": "CORCCH.DEF", + "missile" : + { + "projectile": "PORCHX.DEF", + "spinning": true + } + }, + "sound" : + { + "attack": "ORCCATTK.wav", + "defend": "ORCCDFND.wav", + "killed": "ORCCKILL.wav", + "move": "ORCCMOVE.wav", + "shoot": "ORCCSHOT.wav", + "wince": "ORCCWNCE.wav" + } + }, + "ogre" : + { + "id": 90, + "level": 4, + "faction": "stronghold", + "upgrades": ["ogreMage"], + "graphics" : + { + "animation": "COGRE.DEF" + }, + "sound" : + { + "attack": "OGREATTK.wav", + "defend": "OGREDFND.wav", + "killed": "OGREKILL.wav", + "move": "OGREMOVE.wav", + "wince": "OGREWNCE.wav" + } + }, + "ogreMage" : + { + "id": 91, + "level": 4, + "faction": "stronghold", + "abilities": [ [ "SPELLCASTER", 2, 43, 0 ], + [ "CASTS", 3, 0, 0], + [ "CREATURE_ENCHANT_POWER", 3, 0, 0]], //ogre magi cast bloodlust + "graphics" : + { + "animation": "COGMAG.DEF" + }, + "sound" : + { + "attack": "OGRMATTK.wav", + "defend": "OGRMDFND.wav", + "killed": "OGRMKILL.wav", + "move": "OGRMMOVE.wav", + "shoot": "OGRMSHOT.wav", + "wince": "OGRMWNCE.wav" + } + }, + "roc" : + { + "id": 92, + "level": 5, + "faction": "stronghold", + "upgrades": ["thunderbird"], + "graphics" : + { + "animation": "CROC.DEF" + }, + "sound" : + { + "attack": "ROCCATTK.wav", + "defend": "ROCCDFND.wav", + "killed": "ROCCKILL.wav", + "move": "ROCCMOVE.wav", + "wince": "ROCCWNCE.wav" + } + }, + "thunderbird" : + { + "id": 93, + "level": 5, + "faction": "stronghold", + "abilities": [ [ "SPECIFIC_SPELL_POWER", 10, 77, 0 ], //10 damage per unit + [ "SPELL_AFTER_ATTACK", 20, 77, 0 ] ], //thunderbirds + "graphics" : + { + "animation": "CTBIRD.DEF" + }, + "sound" : + { + "attack": "TBRDATTK.wav", + "defend": "TBRDDFND.wav", + "killed": "TBRDKILL.wav", + "move": "TBRDMOVE.wav", + "wince": "TBRDWNCE.wav" + } + }, + "cyclop" : + { + "id": 94, + "level": 6, + "faction": "stronghold", + "upgrades": ["cyclopKing"], + "graphics" : + { + "animation": "CCYCLR.DEF", + "missile" : + { + "projectile": "PCYCLBX.DEF", + "spinning": true + } + }, + "sound" : + { + "attack": "CCYCATTK.wav", + "defend": "CCYCDFND.wav", + "killed": "CCYCKILL.wav", + "move": "CCYCMOVE.wav", + "shoot": "CCYCSHOT.wav", + "wince": "CCYCWNCE.wav" + } + }, + "cyclopKing" : + { + "id": 95, + "level": 6, + "faction": "stronghold", + "graphics" : + { + "animation": "CCYCLLOR.DEF", + "missile" : + { + "projectile": "PCYCLBX.DEF", + "spinning": true + } + }, + "sound" : + { + "attack": "CYCLATTK.wav", + "defend": "CYCLDFND.wav", + "killed": "CYCLKILL.wav", + "move": "CYCLMOVE.wav", + "shoot": "CYCLSHOT.wav", + "wince": "CYCLWNCE.wav" + } + }, + "behemoth" : + { + "id": 96, + "level": 7, + "faction": "stronghold", + "abilities": [ [ "ENEMY_DEFENCE_REDUCTION", 40, 0, 0 ] ], //behemots + "upgrades": ["ancientBehemoth"], + "graphics" : + { + "animation": "CYBEHE.DEF" + }, + "sound" : + { + "attack": "YBMHATTK.wav", + "defend": "YBMHDFND.wav", + "killed": "YBMHKILL.wav", + "move": "YBMHMOVE.wav", + "wince": "YBMHWNCE.wav" + } + }, + "ancientBehemoth" : + { + "id": 97, + "level": 7, + "faction": "stronghold", + "abilities": [ [ "ENEMY_DEFENCE_REDUCTION", 80, 0, 0 ] ], //ancient behemots + "graphics" : + { + "animation": "CABEHE.DEF" + }, + "sound" : + { + "attack": "BMTHATTK.wav", + "defend": "BMTHDFND.wav", + "killed": "BMTHKILL.wav", + "move": "BMTHMOVE.wav", + "wince": "BMTHWNCE.wav" + } + } +} diff --git a/config/creatures/tower.json b/config/creatures/tower.json new file mode 100644 index 000000000..035e1af85 --- /dev/null +++ b/config/creatures/tower.json @@ -0,0 +1,308 @@ +{ + "gremlin" : + { + "id": 28, + "level": 1, + "extraNames": [ "apprenticeGremlin" ], + "faction": "tower", + "upgrades": ["masterGremlin"], + "graphics" : + { + "animation": "CGREMA.DEF" + }, + "sound" : + { + "attack": "AGRMATTK.wav", + "defend": "AGRMDFND.wav", + "killed": "AGRMKILL.wav", + "move": "AGRMMOVE.wav", + "shoot": "AGRMSHOT.wav", + "wince": "AGRMWNCE.wav" + } + }, + "masterGremlin" : + { + "id": 29, + "level": 1, + "faction": "tower", + "graphics" : + { + "animation": "CGREMM.DEF", + "missile" : + { + "projectile": "CPRGRE.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MGRMATTK.wav", + "defend": "MGRMDFND.wav", + "killed": "MGRMKILL.wav", + "move": "MGRMMOVE.wav", + "shoot": "MGRMSHOT.wav", + "wince": "MGRMWNCE.wav" + } + }, + "stoneGargoyle" : + { + "id": 30, + "level": 2, + "faction": "tower", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ] ], //stone gargoyles are non-living + "upgrades": ["obsidianGargoyle"], + "graphics" : + { + "animation": "CGARGO.DEF" + }, + "sound" : + { + "attack": "SGRGATTK.wav", + "defend": "SGRGDFND.wav", + "killed": "SGRGKILL.wav", + "move": "SGRGMOVE.wav", + "wince": "SGRGWNCE.wav" + } + }, + "obsidianGargoyle" : + { + "id": 31, + "level": 2, + "faction": "tower", + "abilities": [ [ "NON_LIVING", 0, 0, 0 ] ], //obsidian gargoyles are non-living + "graphics" : + { + "animation": "COGARG.DEF" + }, + "sound" : + { + "attack": "OGRGATTK.wav", + "defend": "OGRGDFND.wav", + "killed": "OGRGKILL.wav", + "move": "OGRGMOVE.wav", + "wince": "OGRGWNCE.wav" + } + }, + "ironGolem" : //FIXME correct ID is stoneGolem, unchangeable due to HOTRAITS.TXT + { + "id": 32, + "level": 3, + "faction": "tower", + "abilities": [ [ "SPELL_DAMAGE_REDUCTION", 50, -1, 0 ], //stone golems reduce dmg from spells + [ "NON_LIVING", 0, 0, 0 ] ], //stone golems are non-living + "upgrades": ["stoneGolem"], + "graphics" : + { + "animation": "CSGOLE.DEF" + }, + "sound" : + { + "attack": "SGLMATTK.wav", + "defend": "SGLMDFND.wav", + "killed": "SGLMKILL.wav", + "move": "SGLMMOVE.wav", + "wince": "SGLMWNCE.wav" + } + }, + "stoneGolem" : //FIXME correct ID is ironGolem, unchangeable due to HOTRAITS.TXT + { + "id": 33, + "level": 3, + "faction": "tower", + "abilities": [ [ "SPELL_DAMAGE_REDUCTION", 75, -1, 0 ], //iron golems reduce dmg from spells + [ "NON_LIVING", 0, 0, 0 ] ], //iron golems are non-living + "graphics" : + { + "animation": "CIGOLE.DEF" + }, + "sound" : + { + "attack": "IGLMATTK.wav", + "defend": "IGLMDFND.wav", + "killed": "IGLMKILL.wav", + "move": "IGLMMOVE.wav", + "wince": "IGLMWNCE.wav" + } + }, + "mage" : + { + "id": 34, + "level": 4, + "faction": "tower", + "abilities": [ [ "CHANGES_SPELL_COST_FOR_ALLY", 2, 0, 0 ] ], //mages reduce spell cost + "upgrades": ["archMage"], + "graphics" : + { + "animation": "CMAGE.DEF", + "missile" : + { + "projectile": "PMAGEX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "MAGEATTK.wav", + "defend": "MAGEDFND.wav", + "killed": "MAGEKILL.wav", + "move": "MAGEMOVE.wav", + "shoot": "MAGESHOT.wav", + "wince": "MAGEWNCE.wav" + } + }, + "archMage" : + { + "id": 35, + "level": 4, + "faction": "tower", + "abilities": [ [ "CHANGES_SPELL_COST_FOR_ALLY", 2, 0, 0 ]], //archmages reduce spell cost + "graphics" : + { + "animation": "CAMAGE.DEF", + "missile" : + { + "projectile": "PMAGEX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "AMAGATTK.wav", + "defend": "AMAGDFND.wav", + "killed": "AMAGKILL.wav", + "move": "AMAGMOVE.wav", + "shoot": "AMAGSHOT.wav", + "wince": "AMAGWNCE.wav" + } + }, + "genie" : + { + "id": 36, + "level": 5, + "faction": "tower", + "abilities": [ [ "HATE", 50, 53, 0 ], //master genies hate efreets + [ "HATE", 50, 52, 0 ] ], //genies hate efreet sultans + "upgrades": ["masterGenie"], + "graphics" : + { + "animation": "CGENIE.DEF" + }, + "sound" : + { + "attack": "GENIATTK.wav", + "defend": "GENIDFND.wav", + "killed": "GENIKILL.wav", + "move": "GENIMOVE.wav", + "wince": "GENIWNCE.wav" + } + }, + "masterGenie" : + { + "id": 37, + "level": 5, + "faction": "tower", + "abilities": [ [ "CREATURE_ENCHANT_POWER", 5, 0, 0 ], //spells last 5 turns + [ "RANDOM_SPELLCASTER", 2, 0, 0 ], //master genies cast spells on advanced level + [ "CASTS", 3, 0, 0], + [ "HATE", 50, 53, 0 ], + [ "HATE", 50, 52, 0 ] ], //master genies hate efreet sultans + "graphics" : + { + "animation": "CSULTA.DEF" + }, + "sound" : + { + "attack": "CALFATTK.wav", + "defend": "CALFDFND.wav", + "killed": "CALFKILL.wav", + "move": "CALFMOVE.wav", + "shoot": "CALFSHOT.wav", + "wince": "CALFWNCE.wav" + } + }, + "naga" : + { + "id": 38, + "level": 6, + "faction": "tower", + "abilities": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //nagas block retaliation + "upgrades": ["nagaQueen"], + "graphics" : + { + "animation": "CNAGA.DEF" + }, + "sound" : + { + "attack": "NSENATTK.wav", + "defend": "NSENDFND.wav", + "killed": "NSENKILL.wav", + "move": "NSENMOVE.wav", + "wince": "NSENWNCE.wav" + } + }, + "nagaQueen" : + { + "id": 39, + "level": 6, + "faction": "tower", + "abilities": [ [ "BLOCKS_RETALIATION", 0, 0, 0 ] ], //naga queens block retaliation + "graphics" : + { + "animation": "CNAGAG.DEF" + }, + "sound" : + { + "attack": "NGRDATTK.wav", + "defend": "NGRDDFND.wav", + "killed": "NGRDKILL.wav", + "move": "NGRDMOVE.wav", + "wince": "NGRDWNCE.wav" + } + }, + "giant" : + { + "id": 40, + "level": 7, + "faction": "tower", + "abilities": [ ["MIND_IMMUNITY", 0, 0, 0] ], //giants are immune to mind spells + "upgrades": ["titan"], + "graphics" : + { + "animation": "CLTITA.DEF" + }, + "sound" : + { + "attack": "LTITATTK.wav", + "defend": "LTITDFND.wav", + "killed": "LTITKILL.wav", + "move": "LTITMOVE.wav", + "wince": "LTITWNCE.wav" + } + }, + "titan" : + { + "id": 41, + "level": 7, + "faction": "tower", + "abilities": [ ["MIND_IMMUNITY", 0, 0, 0], //Titans are immune to mind spells + [ "HATE", 50, 83, 0 ] ], //titans hate black dragons + "graphics" : + { + "animation": "CGTITA.DEF", + "missile" : + { + "projectile": "CPRGTIX.DEF", + "spinning": false + } + }, + "sound" : + { + "attack": "GTITATTK.wav", + "defend": "GTITDFND.wav", + "killed": "GTITKILL.wav", + "move": "GTITMOVE.wav", + "shoot": "GTITSHOT.wav", + "wince": "GTITWNCE.wav" + } + } +} diff --git a/config/creatures/wog.json b/config/creatures/wog.json new file mode 100644 index 000000000..027cc66da --- /dev/null +++ b/config/creatures/wog.json @@ -0,0 +1,729 @@ +{ + "supremeArchangel" : + { + "id": 150, + "level": 0, + "faction": "castle", + "graphics" : + { + "animation": "ZM150Z.DEF" + } + }, + "diamondDragon" : + { + "id": 151, + "level": 8, + "faction": "rampart", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //diamond dragon is a dragon //psychic elemental + "graphics" : + { + "animation": "ZM151Z.DEF" + } + }, + "lordofThunder" : + { + "id": 152, + "level": 8, + "faction": "tower", + "graphics" : + { + "animation": "ZM152Z.DEF", + "missile" : + { + "projectile": "CPRGTIX.DEF", + "spinning": false + } + } + }, + "hellBaron" : + { + "id": 153, + "level": 8, + "faction": "inferno", + "graphics" : + { + "animation": "ZM153Z.DEF" + } + }, + "bloodDragon" : + { + "id": 154, + "level": 8, + "faction": "necropolis", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //blood dragon is a dragon //magic elemental + "graphics" : + { + "animation": "ZM154Z.DEF" + } + }, + "darknessDragon" : + { + "id": 155, + "level": 8, + "faction": "dungeon", + "abilities": [ [ "DRAGON_NATURE", 0, 0, 0 ] ], //darkness dragon is a dragon + "graphics" : + { + "animation": "ZM155Z.DEF" + } + }, + "ghostBehemoth" : + { + "id": 156, + "level": 8, + "faction": "stronghold", + "graphics" : + { + "animation": "ZM156Z.DEF" + } + }, + "hellHydra" : + { + "id": 157, + "level": 8, + "faction": "fortress", + "ability_remove": [ "SHOOTER" ], //Hell Hydra certainly does not shoot + "graphics" : + { + "animation": "ZM157Z.DEF" + } + }, + "sacredPhoenix" : + { + "id": 158, + "level": 8, + "faction": "conflux", + "graphics" : + { + "animation": "ZM158Z.DEF" + } + }, + "ghost" : + { + "id": 159, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM159G.DEF" + } + }, + "godWar" : + { + "special" : true, + "id": 160, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM160G.DEF" + } + }, + "godPeace" : + { + "special" : true, + "id": 161, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM161G.DEF" + } + }, + "godMana" : + { + "special" : true, + "id": 162, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM162G.DEF" + } + }, + "godLore" : + { + "special" : true, + "id": 163, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM163G.DEF" + } + }, + "minotaurKing2" :// WTF is this? Same ID as Minotaur King from Dungeon + { + "id": 164, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM164GD.DEF" + } + }, + "mineralElemental" : + { + "id": 165, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM165GD.DEF" + } + }, + "electricityElemental" : + { + "id": 166, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM166GD.DEF" + } + }, + "ancientBasilisk" : + { + "id": 167, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM167GD.DEF" + } + }, + "gorynych" : + { + "id": 168, + "level": 0, + "faction": "neutral", + "abilities": [ [ "FLYING", 0, 0, 0 ] ], //Gorynyches fly + "graphics" : + { + "animation": "ZM168DG.DEF" + } + }, + "warZealot" : + { + "id": 169, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM169ZL.DEF", + "missile" : + { + "projectile": "CPRZEAX.DEF", + "spinning": false + } + } + }, + "myriad" : + { + "id": 170, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM170SW.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF", + "spinning": false + } + } + }, + "medusaMatriarch" : + { + "id": 171, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM171SR.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF", + "spinning": false + } + } + }, + "nightmare" : + { + "id": 172, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM172N.DEF" + } + }, + "santaGremlin" : + { + "id": 173, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM173M.DEF", + "missile" : + { + "projectile": "CPRGRE.DEF", + "spinning": true + } + }, + }, + "paladin1" : + { + "special" : true, + "id": 174, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 37, 0 ] ], //expert cure + "graphics" : + { + "animation": "ZM174NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "CRUSATTK.wav", + "defend": "CRUSDFND.wav", + "killed": "CRUSKILL.wav", + "move": "CRUSMOVE.wav", + "wince": "CRUSWNCE.wav" + } + }, + "hierophant1" : + { + "special" : true, + "id": 175, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 27, 0 ] ], //expert shield + "graphics" : + { + "animation": "ZM175NPC.DEF", + "missile" : + { + "projectile": "CPRZEAX.DEF" + } + }, + "sounds" : + { + "attack": "MONKATTK.wav", + "defend": "MONKDFND.wav", + "killed": "MONKKILL.wav", + "move": "MONKMOVE.wav", + "shoot": "MONKSHOT.wav", + "wince": "MONKWNCE.wav" + } + }, + "templeGuardian1" : + { + "special" : true, + "id": 176, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 44, 0 ] ], //expert precision + "graphics" : + { + "animation": "ZM176NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "LICHATTK.wav", + "defend": "LICHDFND.wav", + "killed": "LICHKILL.wav", + "move": "LICHMOVE.wav", + "shoot": "LICHSHOT.wav", + "wince": "LICHWNCE.wav", + "ext1": "LICHATK2.wav" + } + }, + "succubus1" : + { + "special" : true, + "id": 177, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 29, 0 ] ], //expert fire shield + "graphics" : + { + "animation": "ZM177NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "SGRGATTK.wav", + "defend": "SGRGDFND.wav", + "killed": "SGRGKILL.wav", + "move": "SGRGMOVE.wav", + "wince": "SGRGWNCE.wav" + } + }, + "soulEater1" : + { + "special" : true, + "id": 178, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 39, 0 ] ], //expert animate dead + "graphics" : + { + "animation": "ZM178NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "GNOLATTK.wav", + "defend": "GNOLDFND.wav", + "killed": "GNOLKILL.wav", + "move": "GNOLMOVE.wav", + "wince": "GNOLWNCE.wav" + } + }, + "brute1" : + { + "special" : true, + "id": 179, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 46, 0 ] ], //expert stone skin + "graphics" : + { + "animation": "ZM179NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "PFOEATTK.wav", + "defend": "PFOEDFND.wav", + "killed": "PFOEKILL.wav", + "move": "PFOEMOVE.wav", + "wince": "PFOEWNCE.wav" + } + }, + "ogreLeader1" : + { + "special" : true, + "id": 180, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 37, 0 ] ], //expert cure + "graphics" : + { + "animation": "ZM180NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "TRLLATTK.wav", + "defend": "TRLLDFND.wav", + "killed": "TRLLKILL.wav", + "move": "TRLLMOVE.wav", + "wince": "TRLLWNCE.wav" + } + }, + "shaman1" : + { + "special" : true, + "id": 181, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 53, 0 ] ], //expert haste + "graphics" : + { + "animation": "ZM181NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "AMAGATTK.wav", + "defend": "AMAGDFND.wav", + "killed": "AMAGKILL.wav", + "move": "AMAGMOVE.wav", + "shoot": "AMAGSHOT.wav", + "wince": "AMAGWNCE.wav" + } + }, + "astralSpirit1" : + { + "special" : true, + "id": 182, + "level": 0, + "faction": "neutral", + "abilities": [ [ "MAGIC_RESISTANCE", 5, 0, 0 ], + [ "CASTS", 1, 0, 0 ] , + [ "CREATURE_ENCHANT_POWER", 1, 0, 0 ] , + [ "SPELLCASTER", 3, 58, 0 ] ], //expert counterstrike + "graphics" : + { + "animation": "ZM182NPC.DEF", + "missile" : + { + "projectile": "PLCBOWX.DEF" + } + }, + "sounds" : + { + "attack": "GENIATTK.wav", + "defend": "GENIDFND.wav", + "killed": "GENIKILL.wav", + "move": "GENIMOVE.wav", + "wince": "GENIWNCE.wav" + } + }, + "paladin2" : + { + "special" : true, + "id": 183, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM174NPC.DEF" + } + }, + "hierophant2" : + { + "special" : true, + "id": 184, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM175NPC.DEF" + } + }, + "templeGuardian2" : + { + "special" : true, + "id": 185, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM176NPC.DEF" + } + }, + "succubus2" : + { + "special" : true, + "id": 186, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM177NPC.DEF" + } + }, + "soulEater2" : + { + "special" : true, + "id": 187, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM178NPC.DEF" + } + }, + "brute2" : + { + "special" : true, + "id": 188, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM179NPC.DEF" + } + }, + "ogreLeader2" : + { + "special" : true, + "id": 189, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM180NPC.DEF" + } + }, + "shaman2" : + { + "special" : true, + "id": 190, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM181NPC.DEF" + } + }, + "astralSpirit2" : + { + "special" : true, + "id": 191, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM182NPC.DEF" + } + }, + "sylvanCentaur" : + { + "id": 192, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM192Z.DEF", + "missile" : + { + "projectile": "PELFX.DEF", + "spinning": false + } + } + }, + "sorceresses" : + { + "id": 193, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM193Z.DEF", + "missile" : + { + "projectile": "CPRZEAX.DEF", + "spinning": false + } + } + }, + "werewolf" : + { + "id": 194, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM194Z.DEF" + } + }, + "hellSteed" : + { + "id": 195, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM195Z.DEF" + } + }, + "dracolich" : + { + "id": 196, + "level": 0, + "faction": "neutral", + "graphics" : + { + "animation": "ZM196Z.DEF", + "missile" : + { + "projectile": "SMBALX.DEF", + "spinning": false + } + } + } +} + +// For future reference. Creatures from WoG and their sound prefixes. +//aagl ZM150Z.def SupremeArchangel +//godr ZM151Z.def DiamondDragon +//gtit ZM152Z.def LordofThunder +//advl ZM153Z.def HellBaron +//ghdr ZM154Z.def BloodDragon +//bkdr ZM155Z.def DarknessDragon +//bmth ZM156Z.def GhostBehemoth +//chyd ZM157Z.def HellHydra +//phoe ZM158Z.def SacredPhoenix +//wrth ZM159G.def Ghost +//aagl ZM160G.def God1War +//aagl ZM161G.def God2Peace +//aagl ZM162G.def God3Mana +//aagl ZM163G.def God4Lore +//sglm ZM164GD.def MinotaurKing +//sglm ZM165GD.def MineralElemental +//sglm ZM166GD.def ElectricityElemental +//sglm ZM167GD.def AncientBasilisk +//bkdr ZM168DG.def Gorynych +//zelt ZM169ZL.def WarZealot +//hcrs ZM170SW.def Myriad +//hcrs ZM171SR.def MedusaMatriarch +//bgor ZM172N.def Nightmare +//aagl ZM173M.def SantaGremlin + +//crus ZM174NPC.def Paladin2 +//monk ZM175NPC.def Hierophant2 +//lich ZM176NPC.def TempleGuardian2 +//sgrg ZM177NPC.def Succubus2 +//gnol ZM178NPC.def SoulEater2 +///pfoe ZM179NPC.def Brute2 +//trll ZM180NPC.def OgreLeader2 +//amag ZM181NPC.def Shaman2 +//geni ZM182NPC.def AstralSpirit2 + +//ecnt ZM192Z.def SylvanCentaur +//monk ZM193Z.def Sorceress +//monk ZM194Z.def Werewolf +//bgor ZM195Z.def HellSteed +//ghdr ZM196Z.def Dracolich diff --git a/config/factions/castle.json b/config/factions/castle.json index d30fdc8e4..070c40e3a 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -4,7 +4,7 @@ "index" : 0, "nativeTerrain": "grass", "alignment" : "good", - "commander" : "Paladin1", + "commander" : "paladin1", "creatureBackground" : { "120px" : "TPCASCAS", @@ -137,17 +137,17 @@ ], "creatures" : [ - ["Pikeman", "Halberdier"], - ["Archer", "HeavyCrossbowman"], - ["Griffin", "RoyalGriffin"], - ["Swordsman", "Crusader"], - ["Monk", "Zealot"], - ["Cavalier", "Champion"], - ["Angel", "Archangel"] + ["pikeman", "halberdier"], + ["archer", "marksman"], + ["griffin", "royalGriffin"], + ["swordsman", "crusader"], + ["monk", "zealot"], + ["cavalier", "champion"], + ["angel", "archangel"] ], "horde" : [ 2, -1 ], "mageGuild" : 4, - "warMachine" : "Ballista", + "warMachine" : "ballista", "buildings" : [ @@ -196,7 +196,7 @@ "siege" : { - "shooter" : "Archer", + "shooter" : "archer", "imagePrefix" : "SGCS", "gate" : { diff --git a/config/factions/conflux.json b/config/factions/conflux.json index a9eb76cdb..55c1d68cc 100644 --- a/config/factions/conflux.json +++ b/config/factions/conflux.json @@ -4,7 +4,7 @@ "index" : 8, "nativeTerrain": "grass", "alignment" : "neutral", - "commander" : "AstralSpirit1", + "commander" : "astralSpirit1", "creatureBackground" : { "120px" : "TPCASELE", @@ -139,18 +139,18 @@ ], "creatures" : [ - ["Pixie", "Sprite"], - ["AirElemental", "StormElemental"], - ["WaterElemental", "IceElemental"], - ["FireElemental", "ElectricityElemental"], - ["EarthElemental", "StoneElemental"], - ["PsiElemental", "MagicElemental"], - ["Firebird", "Pheonix"] + ["pixie", "sprite"], + ["airElemental", "stormElemental"], + ["waterElemental", "iceElemental"], + ["fireElemental", "energyElemental"], + ["earthElemental", "magmaElemental"], + ["psychicElemental", "magicElemental"], + ["firebird", "phoenix"] ], "horde" : [ 0, -1 ], "mageGuild" : 5, "primaryResource" : "mercury", - "warMachine" : "Ballista", + "warMachine" : "ballista", "buildings" : [ @@ -198,7 +198,7 @@ "siege" : { - "shooter" : "StormElemental", + "shooter" : "stormElemental", "imagePrefix" : "SGEL", "gate" : { diff --git a/config/factions/dungeon.json b/config/factions/dungeon.json index c6a6b1b5f..e86929f6f 100644 --- a/config/factions/dungeon.json +++ b/config/factions/dungeon.json @@ -4,7 +4,7 @@ "index" : 5, "nativeTerrain": "subterra", "alignment" : "evil", - "commander" : "Brute1", + "commander" : "brute1", "creatureBackground" : { "120px" : "TPCASDUN", @@ -134,18 +134,18 @@ ], "creatures" : [ - ["Troglodyte", "InfernalTroglodyte"], - ["Harpy", "HarpyHag"], - ["Beholder", "EvilEye"], - ["Medusa", "MedusaQueen"], - ["Minotaur", "MinotaurKing"], - ["Manticore", "Scorpicore"], - ["RedDragon", "BlackDragon"] + ["troglodyte", "infernalTroglodyte"], + ["harpy", "harpyHag"], + ["beholder", "evilEye"], + ["medusa", "medusaQueen"], + ["minotaur", "minotaurKing"], + ["manticore", "scorpicore"], + ["redDragon", "blackDragon"] ], "horde" : [ 0, -1 ], "mageGuild" : 5, "primaryResource" : "sulfur", - "warMachine" : "Ballista", + "warMachine" : "ballista", "buildings" : [ @@ -193,7 +193,7 @@ "siege" : { - "shooter" : "Beholder", + "shooter" : "beholder", "imagePrefix" : "SGDN", "gate" : { diff --git a/config/factions/fortress.json b/config/factions/fortress.json index 4dfad2588..452a7b91a 100644 --- a/config/factions/fortress.json +++ b/config/factions/fortress.json @@ -4,7 +4,7 @@ "index" : 7, "nativeTerrain": "swamp", "alignment" : "neutral", - "commander" : "Shaman1", + "commander" : "shaman1", "creatureBackground" : { "120px" : "TPCASFOR", @@ -135,17 +135,17 @@ ], "creatures" : [ - ["Gnoll", "GnollMarauder"], - ["PrimitiveLizardman", "AdvancedLizardman"], - ["Dragonflies", "FireDragonFly"], - ["Basilisk", "GreaterBasilisk"], - ["CopperGorgon", "BronzeGorgon"], - ["Wyvern", "WyvernMonarch"], - ["Hydra", "ChaosHydra"] + ["gnoll", "gnollMarauder"], + ["lizardman", "lizardWarrior"], + ["serpentFly", "fireDragonFly"], + ["basilisk", "greaterBasilisk"], + ["gorgon", "mightyGorgon"], + ["wyvern", "wyvernMonarch"], + ["hydra", "chaosHydra"] ], "horde" : [ 0, -1 ], "mageGuild" : 3, - "warMachine" : "FirstAidTent", + "warMachine" : "firstAidTent", "buildings" : [ @@ -194,7 +194,7 @@ "siege" : { - "shooter" : "PrimitiveLizardman", + "shooter" : "lizardman", "imagePrefix" : "SGFR", "gate" : { diff --git a/config/factions/inferno.json b/config/factions/inferno.json index dd90f59a6..29b97d21b 100644 --- a/config/factions/inferno.json +++ b/config/factions/inferno.json @@ -4,7 +4,7 @@ "index" : 3, "nativeTerrain": "lava", "alignment" : "evil", - "commander" : "Succubus1", + "commander" : "succubus1", "creatureBackground" : { "120px" : "TPCASINF", @@ -135,18 +135,18 @@ ], "creatures" : [ - ["Imp", "Familiar"], - ["Gog", "Magog"], - ["HellHound", "Cerberus"], - ["Single-HornedDemon", "Dual-HornedDemon"], - ["PitFiend", "PitFoe"], - ["Efreet", "EfreetSultan"], - ["Devil", "ArchDevil"] + ["imp", "familiar"], + ["gog", "magog"], + ["hellHound", "cerberus"], + ["demon", "hornedDemon"], + ["pitFiend", "pitLord"], + ["efreet", "efreetSultan"], + ["devil", "archDevil"] ], "horde" : [ 0, 2 ], "mageGuild" : 5, "primaryResource" : "mercury", - "warMachine" : "Ballista", + "warMachine" : "ballista", "buildings" : [ @@ -196,7 +196,7 @@ "siege" : { - "shooter" : "Gog", + "shooter" : "gog", "imagePrefix" : "SGIN", "gate" : { diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 7370d88aa..730d74059 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -4,7 +4,7 @@ "index" : 4, "nativeTerrain": "dirt", "alignment" : "evil", - "commander" : "SoulEater1", + "commander" : "soulEater1", "creatureBackground" : { "120px" : "TPCASNEC", @@ -139,17 +139,17 @@ ], "creatures" : [ - ["Skeleton", "SkeletonWarrior"], - ["Zombie", "ZombieLord"], - ["Wight", "Wraith"], - ["Vampire", "Nosferatu"], - ["Lich", "PowerLich"], - ["BlackKnight", "BlackLord"], - ["BoneDragon", "GhostDragon"] + ["skeleton", "skeletonWarrior"], + ["walkingDead", "zombieLord"], + ["wight", "wraith"], + ["vampire", "vampireLord"], + ["lich", "powerLich"], + ["blackKnight", "dreadKnight"], + ["boneDragon", "ghostDragon"] ], "horde" : [ 0, -1 ], "mageGuild" : 5, - "warMachine" : "FirstAidTent", + "warMachine" : "firstAidTent", "buildings" : [ @@ -198,7 +198,7 @@ "siege" : { - "shooter" : "Lich", + "shooter" : "lich", "imagePrefix" : "SGNC", "gate" : { diff --git a/config/factions/neutral.json b/config/factions/neutral.json index 43491e0ab..4683da4ea 100644 --- a/config/factions/neutral.json +++ b/config/factions/neutral.json @@ -8,6 +8,6 @@ "120px" : "TPCASNEU", "130px" : "CRBKGNEU" }, - "commander" : "Enchanter" //just in case + "commander" : "enchanter" //just in case } } diff --git a/config/factions/rampart.json b/config/factions/rampart.json index ba43b60d1..9c1af568d 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -4,7 +4,7 @@ "index" : 1, "nativeTerrain": "grass", "alignment" : "good", - "commander" : "Hierophant1", + "commander" : "hierophant1", "creatureBackground" : { "120px" : "TPCASRAM", @@ -140,18 +140,18 @@ ], "creatures" : [ - ["Centaur", "EliteCentaur"], - ["Dwarf", "BattleDwarf"], - ["WoodElf", "GrandElf"], - ["Pegasus", "SilverPegasus"], - ["Treefolk", "BriarTreefolk"], - ["Unicorn", "WarUnicorn"], - ["GreenDragon", "GoldDragon"] + ["centaur", "centaurCaptain"], + ["dwarf", "battleDwarf"], + ["woodElf", "grandElf"], + ["pegasus", "silverPegasus"], + ["dendroidGuard", "dendroidSoldier"], + ["unicorn", "warUnicorn"], + ["greenDragon", "goldDragon"] ], "horde" : [ 1, 4 ], "mageGuild" : 5, "primaryResource" : "crystal", - "warMachine" : "FirstAidTent", + "warMachine" : "firstAidTent", "buildings" : [ @@ -201,7 +201,7 @@ "siege" : { - "shooter" : "WoodElf", + "shooter" : "woodElf", "imagePrefix" : "SGRM", "gate" : { diff --git a/config/factions/stronghold.json b/config/factions/stronghold.json index ad461d9ff..c42f41dbe 100644 --- a/config/factions/stronghold.json +++ b/config/factions/stronghold.json @@ -4,7 +4,7 @@ "index" : 6, "nativeTerrain": "rough", "alignment" : "neutral", - "commander" : "OgreLeader1", + "commander" : "ogreLeader1", "creatureBackground" : { "120px" : "TPCASSTR", @@ -133,17 +133,17 @@ ], "creatures" : [ - ["Goblin", "Hobgoblin"], - ["GoblinWolfRider", "HobgoblinWolfRider"], - ["Orc", "OrcChieftain"], - ["Ogre", "OgreMage"], - ["Roc", "Thunderbird"], - ["Cyclops", "CyclopsLord"], - ["YoungBehemoth", "AncientBehemoth"] + ["goblin", "hobgoblin"], + ["goblinWolfRider", "hobgoblinWolfRider"], + ["orc", "orcChieftain"], + ["ogre", "ogreMage"], + ["roc", "thunderbird"], + ["cyclop", "cyclopKing"], + ["behemoth", "ancientBehemoth"] ], "horde" : [ 0, -1 ], "mageGuild" : 3, - "warMachine" : "AmmoCart", + "warMachine" : "ammoCart", "buildings" : [ @@ -191,7 +191,7 @@ "siege" : { - "shooter" : "Orc", + "shooter" : "orc", "imagePrefix" : "SGST", "gate" : { diff --git a/config/factions/tower.json b/config/factions/tower.json index d188d1f63..54bcfa722 100644 --- a/config/factions/tower.json +++ b/config/factions/tower.json @@ -4,7 +4,7 @@ "index" : 2, "nativeTerrain" : "snow", "alignment" : "good", - "commander" : "TempleGuardian1", + "commander" : "templeGuardian1", "creatureBackground" : { "120px" : "TPCASTOW", @@ -135,18 +135,18 @@ ], "creatures" : [ - ["ApprenticeGremlin", "MasterGremlin"], - ["StoneGargoyle", "ObsidianGargoyle"], - ["IronGolem", "StoneGolem"], - ["Mage", "ArchMage"], - ["Genie", "Caliph"], - ["NagaSentinel", "NagaGuardian"], - ["LesserTitan", "GreaterTitan"] + ["gremlin", "masterGremlin"], + ["stoneGargoyle", "obsidianGargoyle"], + ["ironGolem", "stoneGolem"], + ["mage", "archMage"], + ["genie", "masterGenie"], + ["naga", "nagaQueen"], + ["giant", "titan"] ], "horde" : [ 1, -1 ], "primaryResource" : "gems", "mageGuild" : 5, - "warMachine" : "AmmoCart", + "warMachine" : "ammoCart", "buildings" : [ @@ -194,7 +194,7 @@ "siege" : { - "shooter" : "Mage", + "shooter" : "mage", "imagePrefix" : "SGTW", "gate" : { diff --git a/config/gameConfig.json b/config/gameConfig.json index f006121d7..a6972bcc6 100644 --- a/config/gameConfig.json +++ b/config/gameConfig.json @@ -11,5 +11,24 @@ "config/factions/fortress.json", "config/factions/conflux.json", "config/factions/neutral.json" + ], + + "creatures" : + [ + "config/creatures/castle.json", + "config/creatures/rampart.json", + "config/creatures/tower.json", + + "config/creatures/necropolis.json", + "config/creatures/inferno.json", + "config/creatures/dungeon.json", + + "config/creatures/stronghold.json", + "config/creatures/fortress.json", + "config/creatures/conflux.json", + + "config/creatures/neutral.json", + "config/creatures/special.json", + "config/creatures/wog.json" ] } diff --git a/lib/CCreatureHandler.cpp b/lib/CCreatureHandler.cpp index 629a51e60..2f0a68a04 100644 --- a/lib/CCreatureHandler.cpp +++ b/lib/CCreatureHandler.cpp @@ -310,11 +310,14 @@ void CCreatureHandler::loadCreatures() while (parser.endLine()); // loading creatures properties - tlog5 << "\t\tReading config/creatures.json" << std::endl; - const JsonNode config(ResourceID("config/creatures.json")); + tlog5 << "\t\tReading creatures json configs" << std::endl; - BOOST_FOREACH(const JsonNode &creature, config["creatures"].Vector()) + const JsonNode gameConf(ResourceID("config/gameConfig.json")); + const JsonNode config(JsonUtils::assembleFromFiles(gameConf["creatures"].convertTo >())); + + BOOST_FOREACH(auto & node, config.Struct()) { + const JsonNode &creature = node.second; int creatureID = creature["id"].Float(); const JsonNode *value; @@ -355,7 +358,7 @@ void CCreatureHandler::loadCreatures() } } - value = &creature["ability_add"]; + value = &creature["abilities"]; if (!value->isNull()) { BOOST_FOREACH(const JsonNode &ability, value->Vector()) { @@ -363,23 +366,37 @@ void CCreatureHandler::loadCreatures() } } - c->nameRef = creature["name"].Vector().at(0).String(); + c->special = creature["special"].Bool(); + if ( c->special ) + notUsedMonsters.insert(c->idNumber); - /* A creature can have several names. */ - BOOST_FOREACH(const JsonNode &name, creature["name"].Vector()) + const JsonNode & sounds = creature["sound"]; + +#define GET_SOUND_VALUE(value_name) c->sounds.value_name = sounds[#value_name].String() + 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 + + // Main reference name, e.g. royalGriffin + c->nameRef = node.first; + VLC->modh->identifiers.registerObject("creature." + node.first, c->idNumber); + + // Alternative names, if any + BOOST_FOREACH(const JsonNode &name, creature["extraNames"].Vector()) { - VLC->modh->identifiers.registerObject(std::string("creature.") + name.String(), c->idNumber); + VLC->modh->identifiers.registerObject("creature." + name.String(), c->idNumber); } } - BOOST_FOREACH(const JsonNode &creature, config["unused_creatures"].Vector()) - { - notUsedMonsters += creature.Float(); - } - loadAnimationInfo(); - loadSoundsInfo(); - //reading creature ability names const JsonNode config2(ResourceID("config/bonusnames.json")); @@ -574,41 +591,6 @@ void CCreatureHandler::loadUnitAnimInfo(CCreature & unit, CLegacyConfigParser & parser.endLine(); } -void CCreatureHandler::loadCreatureSounds(JsonNode node, si32 creaID) // passing node by value to get clearer binding code -{ - /* 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 { creatures[creaID]->sounds.value_name = node[#value_name].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 -} - -void CCreatureHandler::loadSoundsInfo() -{ - tlog5 << "\t\tReading config/cr_sounds.json" << std::endl; - const JsonNode config(ResourceID("config/cr_sounds.json")); - - if (!config["creature_sounds"].isNull()) - { - - BOOST_FOREACH(const JsonNode &node, config["creature_sounds"].Vector()) - { - VLC->modh->identifiers.requestIdentifier(std::string("creature.") + node["name"].String(), - boost::bind(&CCreatureHandler::loadCreatureSounds, this, node, _1)); - } - } -} - void CCreatureHandler::load(const JsonNode & node) { BOOST_FOREACH(auto & entry, node.Struct()) diff --git a/lib/CCreatureHandler.h b/lib/CCreatureHandler.h index 1ef901393..3f0ff2ef7 100644 --- a/lib/CCreatureHandler.h +++ b/lib/CCreatureHandler.h @@ -32,7 +32,6 @@ public: //damage, hp. etc are handled by Bonuses ui32 fightValue, AIValue, growth, hordeGrowth; ui32 ammMin, ammMax; - ui8 level; // 0 - unknown std::string abilityText; //description of abilities std::string abilityRefs; //references to abilities, in text format std::string animDefName; @@ -40,7 +39,9 @@ public: si32 idNumber; si32 iconIndex; // index of icon in files like twcrport TFaction faction; //-1 = neutral + ui8 level; // 0 - unknown ui8 doubleWide; + ui8 special; // Creature is not available normally (war machines, commanders, etc ///animation info double timeBetweenFidgets, walkAnimationTime, attackAnimationTime, flightAnimationDistance; @@ -157,9 +158,6 @@ public: void loadAnimationInfo(); /// read one line from cranim.txt void loadUnitAnimInfo(CCreature & unit, CLegacyConfigParser &parser); - /// load cr_sounds.json config - void loadCreatureSounds(JsonNode node, si32 creaID); - void loadSoundsInfo(); /// parse crexpbon.txt file from H3 void loadStackExp(Bonus & b, BonusList & bl, CLegacyConfigParser &parser); /// help function for parsing CREXPBON.txt diff --git a/lib/CHeroHandler.cpp b/lib/CHeroHandler.cpp index 064619d0b..9a7d87383 100644 --- a/lib/CHeroHandler.cpp +++ b/lib/CHeroHandler.cpp @@ -381,6 +381,7 @@ void CHeroHandler::loadHeroes() std::string refName = parser.readString(); boost::algorithm::replace_all(refName, " ", ""); //remove spaces + refName[0] = std::tolower(refName[0]); // to camelCase VLC->modh->identifiers.requestIdentifier(std::string("creature.") + refName, [=](si32 creature) { hero->initialArmy[x].creature = creature; diff --git a/lib/CModHandler.cpp b/lib/CModHandler.cpp index 828b76487..01e3b0280 100644 --- a/lib/CModHandler.cpp +++ b/lib/CModHandler.cpp @@ -21,19 +21,30 @@ * */ -class CArtHandler; -class CHeroHandler; -class CCreatureHandler; -class CSpellHandler; -class CBuildingHandler; -class CObjectHandler; -class CDefObjInfoHandler; -class CTownHandler; -class CGeneralTextHandler; -class ResourceLocator; +void CIdentifierStorage::checkIdentifier(std::string & ID) +{ + if (boost::algorithm::ends_with(ID, ".")) + tlog0 << "BIG WARNING: identifier " << ID << " seems to be broken!\n"; + else + { + size_t pos = 0; + do + { + if (std::tolower(ID[pos]) != ID[pos] ) //Not in camelCase + { + tlog0 << "Warning: identifier " << ID << " is not in camelCase!\n"; + ID[pos] = std::tolower(ID[pos]);// Try to fix the ID + } + pos = ID.find('.', pos); + } + while(pos++ != std::string::npos); + } +} void CIdentifierStorage::requestIdentifier(std::string name, const boost::function & callback) { + checkIdentifier(name); + auto iter = registeredObjects.find(name); if (iter != registeredObjects.end()) @@ -44,6 +55,8 @@ void CIdentifierStorage::requestIdentifier(std::string name, const boost::functi void CIdentifierStorage::registerObject(std::string name, si32 identifier) { + checkIdentifier(name); + // do not allow to register same object twice assert(registeredObjects.find(name) == registeredObjects.end()); diff --git a/lib/CModHandler.h b/lib/CModHandler.h index 594e3762f..8160926c0 100644 --- a/lib/CModHandler.h +++ b/lib/CModHandler.h @@ -26,6 +26,8 @@ class CIdentifierStorage std::map registeredObjects; std::map > > missingObjects; + //Check if identifier can be valid (camelCase, point as separator) + void checkIdentifier(std::string & ID); public: /// request identifier for specific object name. If ID is not yet resolved callback will be queued /// and will be called later diff --git a/lib/CTownHandler.cpp b/lib/CTownHandler.cpp index a7af5d975..68854c682 100644 --- a/lib/CTownHandler.cpp +++ b/lib/CTownHandler.cpp @@ -520,7 +520,7 @@ void CTownHandler::load(const JsonNode &source) [=](si32 commanderID) { factions[id].commander = commanderID; - }); //TODO: resolve string id + }); faction.creatureBg120 = node.second["creatureBackground"]["120px"].String(); faction.creatureBg130 = node.second["creatureBackground"]["130px"].String(); diff --git a/lib/CTownHandler.h b/lib/CTownHandler.h index 09fb5cdf1..ef91eb391 100644 --- a/lib/CTownHandler.h +++ b/lib/CTownHandler.h @@ -176,7 +176,6 @@ public: ui8 nativeTerrain; ui8 alignment; // uses EAlignment enum - //std::string commanderClass; TCreature commander; std::string creatureBg120;