浏览代码

Merge remote-tracking branch 'upstream/develop' into develop

Xilmi 11 月之前
父节点
当前提交
31d4517f17

+ 89 - 13
config/creatures/castle.json

@@ -57,6 +57,12 @@
 		"extraNames": [ "lightCrossbowman" ],
 		"faction": "castle",
 		"upgrades": ["marksman"],
+		"abilities" :
+		{
+			"shooter" : {
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CLCBOW.DEF",
@@ -80,7 +86,11 @@
 		"index": 3,
 		"level": 2,
 		"faction": "castle",
-		"abilities": {
+		"abilities":
+		{
+			"shooter" : {
+				"type" : "SHOOTER"
+			},
 			"extraAttack" :
 			{
 				"type": "ADDITIONAL_ATTACK",
@@ -111,8 +121,12 @@
 		"index": 4,
 		"level": 3,
 		"faction": "castle",
+		"doubleWide": true,
 		"abilities":
 		{
+			"canFly" : {
+				"type" : "FLYING"
+			},
 			"extraRetaliation" :
 			{
 				"type" : "ADDITIONAL_RETALIATION",
@@ -139,8 +153,12 @@
 		"index": 5,
 		"level": 3,
 		"faction": "castle",
+		"doubleWide": true,
 		"abilities":
 		{
+			"canFly" : {
+				"type" : "FLYING"
+			},
 			"unlimitedRetaliation" :
 			{
 				"type" : "UNLIMITED_RETALIATIONS"
@@ -210,6 +228,12 @@
 		"level": 5,
 		"faction": "castle",
 		"upgrades": ["zealot"],
+		"abilities" :
+		{
+			"shooter" : {
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CMONKK.DEF",
@@ -233,6 +257,15 @@
 		"index": 9,
 		"level": 5,
 		"faction": "castle",
+		"abilities" :
+		{
+			"shooter" : {
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" : {
+				"type" : "NO_MELEE_PENALTY"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CZEALT.DEF",
@@ -256,7 +289,16 @@
 		"index": 10,
 		"level": 6,
 		"faction": "castle",
+		"doubleWide": true,
 		"upgrades": ["champion"],
+		"abilities" :
+		{
+			"jousting":
+			{
+				"type": "JOUSTING",
+				"val": 5
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CCAVLR.DEF"
@@ -275,6 +317,15 @@
 		"index": 11,
 		"level": 6,
 		"faction": "castle",
+		"doubleWide": true,
+		"abilities" :
+		{
+			"jousting":
+			{
+				"type": "JOUSTING",
+				"val": 5
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CCHAMP.DEF"
@@ -293,8 +344,25 @@
 		"index": 12,
 		"level": 7,
 		"faction": "castle",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_2" : // Will be affected by Advanced Slayer or better
+			{
+				"type" : "KING",
+				"val" : 2
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
+			"raisesMorale" :
+			{
+				"type" : "MORALE",
+				"val" : 1,
+				"propagator" : "HERO",
+				"stacking" : "Angels"
+			},
 			"hateDevils" :
 			{
 				"type" : "HATE",
@@ -306,10 +374,6 @@
 				"type" : "HATE",
 				"subtype" : "creature.archDevil",
 				"val" : 50
-			},
-			"const_raises_morale" :
-			{
-				"stacking" : "Angels"
 			}
 		},
 		"upgrades": ["archangel"],
@@ -331,13 +395,17 @@
 		"index": 13,
 		"level": 7,
 		"faction": "castle",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"resurrection100hp" : 
+			"KING_2" : // Will be affected by Advanced Slayer or better
 			{
-				"type" : "SPECIFIC_SPELL_POWER",
-				"subtype" : "spell.resurrection",
-				"val" : 100
+				"type" : "KING",
+				"val" : 2
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
 			},
 			"resurrects" :
 			{
@@ -345,11 +413,23 @@
 				"subtype" : "spell.resurrection",
 				"val" : 3
 			},
+			"resurrection100hp" : 
+			{
+				"type" : "SPECIFIC_SPELL_POWER",
+				"subtype" : "spell.resurrection",
+				"val" : 100
+			},
 			"spellpoints" :
 			{
 				"type" : "CASTS",
 				"val" : 1
 			},
+			"raisesMorale" : {
+				"type" : "MORALE",
+				"val" : 1,
+				"propagator" : "HERO",
+				"stacking" : "Angels"
+			},
 			"hateDevils" :
 			{
 				"type" : "HATE",
@@ -361,10 +441,6 @@
 				"type" : "HATE",
 				"subtype" : "creature.archDevil",
 				"val" : 50
-			},
-			"const_raises_morale" :
-			{
-				"stacking" : "Angels"
 			}
 		},
 		"graphics" :

文件差异内容过多而无法显示
+ 386 - 314
config/creatures/conflux.json


+ 83 - 2
config/creatures/dungeon.json

@@ -74,6 +74,10 @@
 		"faction": "dungeon",
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"strikeAndReturn" : 
 			{
 				"type" : "RETURN_AFTER_STRIKE"
@@ -101,6 +105,10 @@
 		"faction": "dungeon",
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"strikeAndReturn" : 
 			{
 				"type" : "RETURN_AFTER_STRIKE"
@@ -130,6 +138,17 @@
 		"level": 3,
 		"faction": "dungeon",
 		"upgrades": ["evilEye"],
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CBEHOL.DEF",
@@ -160,6 +179,17 @@
 		"index": 75,
 		"level": 3,
 		"faction": "dungeon",
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CEVEYE.DEF",
@@ -190,8 +220,17 @@
 		"index": 76,
 		"level": 4,
 		"faction": "dungeon",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
 			"petrification" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -224,8 +263,17 @@
 		"index": 77,
 		"level": 4,
 		"faction": "dungeon",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
 			"petrification" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -314,6 +362,14 @@
 		"level": 6,
 		"faction": "dungeon",
 		"upgrades": ["scorpicore"],
+		"doubleWide" : true,
+		"abilities" :
+		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CMCORE.DEF"
@@ -333,8 +389,13 @@
 		"index": 81,
 		"level": 6,
 		"faction": "dungeon",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"paralize" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -361,13 +422,23 @@
 		"index": 82,
 		"level": 7,
 		"faction": "dungeon",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" : 
 			{
 				"type" : "DRAGON_NATURE"
 			},
-			"fireBreath" :
+			"twoHexAttackBreath" :
 			{
 				"type" : "TWO_HEX_ATTACK_BREATH"
 			},
@@ -396,13 +467,23 @@
 		"index": 83,
 		"level": 7,
 		"faction": "dungeon",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" : 
 			{
 				"type" : "DRAGON_NATURE"
 			},
-			"fireBreath" :
+			"twoHexAttackBreath" :
 			{
 				"type" : "TWO_HEX_ATTACK_BREATH"
 			},

+ 58 - 7
config/creatures/fortress.json

@@ -44,6 +44,13 @@
 		"faction": "fortress",
 		"upgrades": ["lizardWarrior"],
 		"hasDoubleWeek": true,
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CPLIZA.DEF",
@@ -67,6 +74,13 @@
 		"index": 101,
 		"level": 2,
 		"faction": "fortress",
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CALIZA.DEF",
@@ -91,6 +105,7 @@
 		"level": 5,
 		"faction": "fortress",
 		"upgrades": ["mightyGorgon"],
+		"doubleWide" : true,
 		"graphics" :
 		{
 			"animation": "CCGORG.DEF"
@@ -109,6 +124,7 @@
 		"index": 103,
 		"level": 5,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"deathStare" : 
@@ -139,6 +155,10 @@
 		"faction": "fortress",
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dispellHelpful" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -168,6 +188,10 @@
 		"faction": "fortress",
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dispellHelpful" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -200,6 +224,7 @@
 		"index": 106,
 		"level": 4,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"petrify" :
@@ -228,6 +253,7 @@
 		"index": 107,
 		"level": 4,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"petrify" :
@@ -256,6 +282,14 @@
 		"level": 6,
 		"faction": "fortress",
 		"upgrades": ["wyvernMonarch"],
+		"doubleWide" : true,
+		"abilities" :
+		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CWYVER.DEF"
@@ -274,9 +308,14 @@
 		"index": 109,
 		"level": 6,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"petrify" :
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
+			"poison" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
 				"subtype" : "spell.poison",
@@ -301,15 +340,21 @@
 		"index": 110,
 		"level": 7,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"noRetaliate" :
+			"KING_1" : // Will be affected by Slayer with no expertise
 			{
-				"type" : "BLOCKS_RETALIATION"
+				"type" : "KING",
+				"val" : 0
 			},
-			"attackAll" :
+			"attackAllAdjacent" :
 			{
 				"type" : "ATTACKS_ALL_ADJACENT"
+			},
+			"noRetaliation" :
+			{
+				"type" : "BLOCKS_RETALIATION"
 			}
 		},
 		"upgrades": ["chaosHydra"],
@@ -331,15 +376,21 @@
 		"index": 111,
 		"level": 7,
 		"faction": "fortress",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"noRetaliate" :
+			"KING_1" : // Will be affected by Slayer with no expertise
 			{
-				"type" : "BLOCKS_RETALIATION"
+				"type" : "KING",
+				"val" : 0
 			},
-			"attackAll" :
+			"attackAllAdjacent" :
 			{
 				"type" : "ATTACKS_ALL_ADJACENT"
+			},
+			"noRetaliation" :
+			{
+				"type" : "BLOCKS_RETALIATION"
 			}
 		},
 		"graphics" :

+ 77 - 59
config/creatures/inferno.json

@@ -51,6 +51,13 @@
 		"faction": "inferno",
 		"upgrades": ["magog"],
 		"hasDoubleWeek": true,
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CGOG.DEF",
@@ -76,6 +83,10 @@
 		"faction": "inferno",
 		"abilities":
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
 			"fireball" :
 			{
 				"type" : "SPELL_LIKE_ATTACK",
@@ -106,10 +117,7 @@
 		"level": 3,
 		"faction": "inferno",
 		"upgrades": ["cerberus"],
-		"abilities":
-		{
-			 "FLYING_ARMY" : null //hell hound doesn't fly
-		},
+		"doubleWide" : true,
 		"graphics" :
 		{
 			"animation": "CHHOUN.DEF"
@@ -128,17 +136,17 @@
 		"index": 47,
 		"level": 3,
 		"faction": "inferno",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"threeHeads" : 
-			{
-				"type" : "THREE_HEADED_ATTACK"
-			},
 			"noRetaliation" :
 			{
 				"type" : "BLOCKS_RETALIATION"
 			},
-			"FLYING_ARMY" : null //cerberus doesn't fly
+			"threeHeads" : 
+			{
+				"type" : "THREE_HEADED_ATTACK"
+			}
 		},
 		"graphics" :
 		{
@@ -254,6 +262,15 @@
 		"faction": "inferno", 
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
+			"immuneToFire" :
+			{
+				"type" : "SPELL_SCHOOL_IMMUNITY",
+				"subtype" : "spellSchool.fire"
+			},
 			"hateGenies" : 
 			{
 				"type" : "HATE",
@@ -265,15 +282,6 @@
 				"type" : "HATE",
 				"subtype" : "creature.masterGenie",
 				"val" : 50
-			},
-			"canFly" :
-			{
-				"type" : "FLYING"
-			},
-			"immuneToFire" :
-			{
-				"type" : "SPELL_SCHOOL_IMMUNITY",
-				"subtype" : "spellSchool.fire"
 			}
 		},
 		"upgrades": ["efreetSultan"],
@@ -297,6 +305,20 @@
 		"faction": "inferno",
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
+			"fireShield" :
+			{
+				"type" : "FIRE_SHIELD",
+				"val" : 20
+			},
+			"immuneToFire" :
+			{
+				"type" : "SPELL_SCHOOL_IMMUNITY",
+				"subtype" : "spellSchool.fire"
+			},
 			"hateGenies" : 
 			{
 				"type" : "HATE",
@@ -308,20 +330,6 @@
 				"type" : "HATE",
 				"subtype" : "creature.masterGenie",
 				"val" : 50
-			},
-			"canFly" :
-			{
-				"type" : "FLYING"
-			},
-			"immuneToFire" :
-			{
-				"type" : "SPELL_SCHOOL_IMMUNITY",
-				"subtype" : "spellSchool.fire"
-			},
-			"fireShield" :
-			{
-				"type" : "FIRE_SHIELD",
-				"val" : 20
 			}
 		},
 		"graphics" :
@@ -345,23 +353,19 @@
 		"faction": "inferno",
 		"abilities":
 		{
-			"hateAngels" : 
+			"KING_2" : // Will be affected by Advanced Slayer or better
 			{
-				"type" : "HATE",
-				"subtype" : "creature.angel",
-				"val" : 50
+				"type" : "KING",
+				"val" : 2
 			},
-			"hateArchAngels" : 
+			"canFly" :
 			{
-				"type" : "HATE",
-				"subtype" : "creature.archangel",
-				"val" : 50,
-				"description" : "Devil -1"
+				"type" : "FLYING",
+				"subtype" : "movementTeleporting"
 			},
-			"FLYING_ARMY" :
+			"noRetaliation" :
 			{
-				// type loaded from crtraits
-				"subtype" : "movementTeleporting"
+				"type" : "BLOCKS_RETALIATION"
 			},
 			"descreaseLuck" :
 			{
@@ -372,9 +376,18 @@
 				"propagationUpdater" : "BONUS_OWNER_UPDATER",
 				"limiters" : [ "OPPOSITE_SIDE" ]
 			},
-			"blockRetaliation" :
+			"hateAngels" : 
+			{
+				"type" : "HATE",
+				"subtype" : "creature.angel",
+				"val" : 50
+			},
+			"hateArchAngels" : 
 			{
-				"type" : "BLOCKS_RETALIATION"
+				"type" : "HATE",
+				"subtype" : "creature.archangel",
+				"val" : 50,
+				"description" : "Devil -1"
 			}
 		},
 		"upgrades": ["archDevil"],
@@ -400,22 +413,19 @@
 		"faction": "inferno",
 		"abilities" :
 		{
-			"hateAngels" : 
+			"KING_2" : // Will be affected by Advanced Slayer or better
 			{
-				"type" : "HATE",
-				"subtype" : "creature.angel",
-				"val" : 50
+				"type" : "KING",
+				"val" : 2
 			},
-			"hateArchAngels" : 
+			"canFly" :
 			{
-				"type" : "HATE",
-				"subtype" : "creature.archangel",
-				"val" : 50
+				"type" : "FLYING",
+				"subtype" : "movementTeleporting"
 			},
-			"FLYING_ARMY" :
+			"noRetaliation" :
 			{
-				// type loaded from crtraits
-				"subtype" : "movementTeleporting"
+				"type" : "BLOCKS_RETALIATION"
 			},
 			"descreaseLuck" :
 			{
@@ -426,9 +436,17 @@
 				"propagationUpdater" : "BONUS_OWNER_UPDATER",
 				"limiters" : [ "OPPOSITE_SIDE" ]
 			},
-			"blockRetaliation" :
+			"hateAngels" : 
 			{
-				"type" : "BLOCKS_RETALIATION"
+				"type" : "HATE",
+				"subtype" : "creature.angel",
+				"val" : 50
+			},
+			"hateArchAngels" : 
+			{
+				"type" : "HATE",
+				"subtype" : "creature.archangel",
+				"val" : 50
 			}
 		},
 		"graphics" :

+ 117 - 6
config/creatures/necropolis.json

@@ -5,6 +5,13 @@
 		"level": 1,
 		"faction": "necropolis",
 		"upgrades": ["skeletonWarrior"],
+		"abilities" :
+		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CSKELE.DEF"
@@ -23,6 +30,13 @@
 		"index": 57,
 		"level": 1,
 		"faction": "necropolis",
+		"abilities" :
+		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CWSKEL.DEF"
@@ -43,6 +57,13 @@
 		"extraNames": [ "zombie" ], //FIXME: zombie is a name of upgrade but not in HOTRAITS
 		"faction" : "necropolis",
 		"upgrades": ["zombieLord"],
+		"abilities" :
+		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CZOMBI.DEF"
@@ -75,6 +96,10 @@
 		},
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
 			"castDisease" : 
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -90,6 +115,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"regenerate" : 
 			{
 				"type" : "HP_REGENERATION",
@@ -118,6 +151,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"regenerate" : 
 			{
 				"type" : "HP_REGENERATION",
@@ -149,6 +190,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"noRetalitation" : 
 			{
 				"type" : "BLOCKS_RETALIATION"
@@ -177,6 +226,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"noRetalitation" : 
 			{
 				"type" : "BLOCKS_RETALIATION"
@@ -210,6 +267,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
 			"deathCloud" :
 			{
 				"type" : "SPELL_LIKE_ATTACK",
@@ -242,6 +307,14 @@
 		"faction": "necropolis",
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
 			"deathCloud" :
 			{
 				"type" : "SPELL_LIKE_ATTACK",
@@ -271,8 +344,13 @@
 		"index": 66,
 		"level": 6,
 		"faction": "necropolis",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
 			"curses" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -299,8 +377,13 @@
 		"index": 67,
 		"level": 6,
 		"faction": "necropolis",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
 			"curses" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -331,8 +414,22 @@
 		"index": 68,
 		"level": 7,
 		"faction": "necropolis",
+		"doubleWide" : true,
 		"abilities" :
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
@@ -366,12 +463,32 @@
 		"index": 69,
 		"level": 7,
 		"faction": "necropolis",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"undead" :
+			{
+				"type" : "UNDEAD"
+			},
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
 			},
+			"age" :
+			{
+				"type" : "SPELL_AFTER_ATTACK",
+				"subtype" : "spell.age",
+				"val" : 20
+			},
 			"decreaseMorale" :
 			{
 				"type" : "MORALE",
@@ -380,12 +497,6 @@
 				"propagator": "BATTLE_WIDE",
 				"propagationUpdater" : "BONUS_OWNER_UPDATER",
 				"limiters" : [ "OPPOSITE_SIDE" ]
-			},
-			"age" :
-			{
-				"type" : "SPELL_AFTER_ATTACK",
-				"subtype" : "spell.age",
-				"val" : 20
 			}
 		},
 		"graphics" :

+ 86 - 40
config/creatures/neutral.json

@@ -7,15 +7,15 @@
 		"faction": "neutral",
 		"abilities":
 		{
+			"nonliving" :
+			{
+				"type" : "NON_LIVING"
+			},
 			"magicResistance" :
 			{
 				"type" : "SPELL_DAMAGE_REDUCTION",
 				"subtype" : "spellSchool.any",
 				"val" : 85
-			},
-			"nonliving" :
-			{
-				"type" : "NON_LIVING"
 			}
 		},
 		"graphics" :
@@ -38,15 +38,15 @@
 		"faction": "neutral",
 		"abilities":
 		{
+			"nonliving" :
+			{
+				"type" : "NON_LIVING"
+			},
 			"magicResistance" :
 			{
 				"type" : "SPELL_DAMAGE_REDUCTION",
 				"subtype" : "spellSchool.any",
 				"val" : 95
-			},
-			"nonliving" :
-			{
-				"type" : "NON_LIVING"
 			}
 		},
 		"graphics" :
@@ -68,28 +68,38 @@
 		"level": 10,
 		"faction": "neutral",
 		"excludeFromRandomization" : true,
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" : 
 			{
 				"type" : "DRAGON_NATURE"
 			},
-			"fireBreath" :
+			"twoHexAttackBreath" :
 			{
 				"type" : "TWO_HEX_ATTACK_BREATH"
 			},
-			"spellImmunity" :
+			"fear" :
 			{
-				"type" : "LEVEL_SPELL_IMMUNITY",
-				"val" : 3
+				"type" : "FEAR"
 			},
 			"fearless" :
 			{
 				"type" : "FEARLESS"
 			},
-			"fear" :
+			"spellImmunity" :
 			{
-				"type" : "FEAR"
+				"type" : "LEVEL_SPELL_IMMUNITY",
+				"val" : 3
 			}
 		},
 		"graphics" :
@@ -111,8 +121,14 @@
 		"level": 10,
 		"faction": "neutral",
 		"excludeFromRandomization" : true,
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
@@ -125,8 +141,7 @@
 			"crystals" :
 			{
 				"type" : "SPECIAL_CRYSTAL_GENERATION"
-			},
-			"FLYING_ARMY" : null
+			}
 		},
 		"graphics" :
 		{
@@ -147,8 +162,14 @@
 		"level": 8,
 		"faction": "neutral",
 		"excludeFromRandomization" : true,
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
@@ -245,22 +266,32 @@
 		"level": 10,
 		"faction": "neutral",
 		"excludeFromRandomization" : true,
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" : 
 			{
 				"type" : "DRAGON_NATURE"
 			},
+			"twoHexAttackBreath" :
+			{
+				"type" : "TWO_HEX_ATTACK_BREATH"
+			},
 			"acidBreath" :
 			{
 				"type" : "ACID_BREATH",
 				"val" : 25,
 				"addInfo" : 30
 			},
-			"fireBreath" :
-			{
-				"type" : "TWO_HEX_ATTACK_BREATH"
-			},
 			"reduceDefence" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
@@ -290,7 +321,15 @@
 		"excludeFromRandomization" : true,
 		"abilities":
 		{
-			"noPenalty" : 
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
+			"noWallPenalty" :
 			{
 				"type" : "NO_WALL_PENALTY"
 			},
@@ -299,49 +338,48 @@
 				"type" : "CASTS",
 				"val" : 5
 			},
-			"castsAirShield" :
+			"castsHaste" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.airShield",
+				"subtype" : "spell.haste",
 				"val" : 3,
 				"addInfo" : 3
 			},
-			"castsBless" :
+			"castsSlow" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.bless",
+				"subtype" : "spell.slow",
 				"val" : 3,
 				"addInfo" : 3
 			},
-			"castsWeakness" :
+			"castsStoneSkin" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.weakness",
+				"subtype" : "spell.stoneSkin",
 				"val" : 3,
 				"addInfo" : 3
 			},
-			"castsStoneSkin" :
+			"castsBless" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.stoneSkin",
+				"subtype" : "spell.bless",
 				"val" : 3,
 				"addInfo" : 3
 			},
-			"castsSlow" :
+			"castsWeakness" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.slow",
+				"subtype" : "spell.weakness",
 				"val" : 3,
 				"addInfo" : 3
 			},
-			"castsHaste" :
+			"castsAirShield" :
 			{
 				"type" : "ENCHANTER",
-				"subtype" : "spell.haste",
+				"subtype" : "spell.airShield",
 				"val" : 3,
 				"addInfo" : 3
 			}
-			
 		},
 		"graphics" :
 		{
@@ -370,13 +408,17 @@
 		"excludeFromRandomization" : true,
 		"abilities":
 		{
-			"noPenalty" : 
+			"shooter" :
 			{
-				"type" : "NO_WALL_PENALTY"
+				"type" : "SHOOTER"
 			},
 			"noDistancePenalty" :
 			{
 				"type" : "NO_DISTANCE_PENALTY"
+			},
+			"noWallPenalty" :
+			{
+				"type" : "NO_WALL_PENALTY"
 			}
 		},
 		"graphics" :
@@ -404,6 +446,10 @@
 		"faction": "neutral",
 		"abilities": 
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
 			"lucky" :
 			{
 				"type" : "LUCK",
@@ -482,7 +528,7 @@
 				"type" : "SPELL_AFTER_ATTACK",
 				"subtype" : "spell.curse",
 				"val" : 50
-			}			
+			}
 		},
 		"graphics" :
 		{
@@ -502,6 +548,7 @@
 		"index": 142,
 		"level": 3,
 		"faction": "neutral",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"sandWalker" :
@@ -511,7 +558,6 @@
 				"propagator" : "HERO"
 			}
 		},
-		"doubleWide" : true,
 		"graphics" :
 		{
 			"animation": "CNOMAD.DEF"
@@ -546,7 +592,7 @@
 				"subtype" : "visionsHeroes",
 				"val" : 3,
 				"valueType" : "INDEPENDENT_MAX",
-				"propagator" : "HERO"				
+				"propagator" : "HERO"
 			},
 			"visionsTowns" :
 			{
@@ -554,7 +600,7 @@
 				"subtype" : "visionsTowns",
 				"val" : 3,
 				"valueType" : "INDEPENDENT_MAX",
-				"propagator" : "HERO"				
+				"propagator" : "HERO"
 			}
 		},
 		"graphics" :

+ 57 - 12
config/creatures/rampart.json

@@ -5,6 +5,7 @@
 		"level": 1,
 		"faction": "rampart",
 		"upgrades": ["centaurCaptain"],
+		"doubleWide" : true,
 		"hasDoubleWeek": true,
 		"graphics" :
 		{
@@ -26,6 +27,7 @@
 		"index": 15,
 		"level": 1,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"graphics" :
 		{
 			"missile" : null,
@@ -99,6 +101,13 @@
 		"level": 3,
 		"faction": "rampart",
 		"upgrades": ["grandElf"],
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CELF.DEF",
@@ -124,6 +133,10 @@
 		"faction": "rampart",
 		"abilities": 
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
 			"doubleShot" :
 			{
 				"type": "ADDITIONAL_ATTACK",
@@ -154,8 +167,13 @@
 		"index": 20,
 		"level": 4,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"increaseManaCost" :
 			{
 				"type" : "CHANGES_SPELL_COST_FOR_ENEMY",
@@ -182,8 +200,13 @@
 		"index": 21,
 		"level": 4,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"increaseManaCost" :
 			{
 				"type" : "CHANGES_SPELL_COST_FOR_ENEMY",
@@ -263,19 +286,20 @@
 		"index": 24,
 		"level": 6,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"spellResistAura" :
-			{
-				"type" : "SPELL_RESISTANCE_AURA",
-				"val" : 20
-			},
 			"blinds" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
 				"subtype" : "spell.blind",
 				"val" : 20,
 				"addInfo" : [3,0]
+			},
+			"spellResistAura" :
+			{
+				"type" : "SPELL_RESISTANCE_AURA",
+				"val" : 20
 			}
 		},
 		"upgrades": ["warUnicorn"],
@@ -297,19 +321,20 @@
 		"index": 25,
 		"level": 6,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"spellResistAura" :
-			{
-				"type" : "SPELL_RESISTANCE_AURA",
-				"val" : 20
-			},
 			"blinds" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
 				"subtype" : "spell.blind",
 				"val" : 20,
 				"addInfo" : [3,0]
+			},
+			"spellResistAura" :
+			{
+				"type" : "SPELL_RESISTANCE_AURA",
+				"val" : 20
 			}
 		},
 		"graphics" :
@@ -331,13 +356,23 @@
 		"index": 26,
 		"level": 7,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
 			},
-			"fireBreath" :
+			"twoHexAttackBreath" :
 			{
 				"type" : "TWO_HEX_ATTACK_BREATH"
 			},
@@ -366,13 +401,23 @@
 		"index": 27,
 		"level": 7,
 		"faction": "rampart",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
 			"dragon" :
 			{
 				"type" : "DRAGON_NATURE"
 			},
-			"fireBreath" :
+			"twoHexAttackBreath" :
 			{
 				"type" : "TWO_HEX_ATTACK_BREATH"
 			},

+ 10 - 2
config/creatures/special.json

@@ -36,8 +36,14 @@
 		"index": 145,
 		"level": 0,
 		"faction": "neutral",
-		"abilities" : {
-			"siegeMachine" : { "type" : "CATAPULT", "subtype" : "spell.catapultShot" }
+		"doubleWide" : true,
+		"abilities" :
+		{
+			"siegeMachine" :
+			{
+				"type" : "CATAPULT",
+				"subtype" : "spell.catapultShot"
+			}
 		},
 		"graphics" :
 		{
@@ -60,6 +66,7 @@
 		"index": 146,
 		"level": 0,
 		"faction": "neutral",
+		"doubleWide" : true,
 		"graphics" :
 		{
 			"animation": "SMBAL.DEF",
@@ -81,6 +88,7 @@
 		"index": 147,
 		"level": 0,
 		"faction": "neutral",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"heals" : {

+ 63 - 12
config/creatures/stronghold.json

@@ -44,6 +44,7 @@
 		"level": 2,
 		"faction": "stronghold",
 		"upgrades": ["hobgoblinWolfRider"],
+		"doubleWide" : true,
 		"hasDoubleWeek": true,
 		"graphics" :
 		{
@@ -63,6 +64,7 @@
 		"index": 87,
 		"level": 2,
 		"faction": "stronghold",
+		"doubleWide" : true,
 		"abilities":
 		{
 			"extraAttack" :
@@ -90,6 +92,13 @@
 		"level": 3,
 		"faction": "stronghold",
 		"upgrades": ["orcChieftain"],
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CORC.DEF",
@@ -113,6 +122,13 @@
 		"index": 89,
 		"level": 3,
 		"faction": "stronghold",
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CORCCH.DEF",
@@ -194,6 +210,14 @@
 		"level": 5,
 		"faction": "stronghold",
 		"upgrades": ["thunderbird"],
+		"doubleWide" : true,
+		"abilities" :
+		{
+			"canFly" :
+			{
+				"type" : "FLYING"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CROC.DEF"
@@ -212,19 +236,24 @@
 		"index": 93,
 		"level": 5,
 		"faction": "stronghold",
+		"doubleWide" : true,
 		"abilities":
 		{
-			"thunderStrength" :
+			"canFly" :
 			{
-				"type" : "SPECIFIC_SPELL_POWER",
-				"subtype" : "spell.thunderbolt",
-				"val" : 10
+				"type" : "FLYING"
 			},
 			"thunderOnAttack" :
 			{
 				"type" : "SPELL_AFTER_ATTACK",
 				"subtype" : "spell.thunderbolt",
 				"val" : 20
+			},
+			"thunderStrength" :
+			{
+				"type" : "SPECIFIC_SPELL_POWER",
+				"subtype" : "spell.thunderbolt",
+				"val" : 10
 			}
 		},
 		"graphics" :
@@ -247,9 +276,14 @@
 		"faction": "stronghold",
 		"abilities" :
 		{
-			"siege" : {
-				"subtype" : "spell.cyclopsShot",
-				"type" : "CATAPULT"
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"canShootWalls" :
+			{
+				"type" : "CATAPULT",
+				"subtype" : "spell.cyclopsShot"
 			}
 		},
 		"upgrades": ["cyclopKing"],
@@ -278,14 +312,19 @@
 		"faction": "stronghold",
 		"abilities":
 		{
-			"siege" : {
-				"subtype" : "spell.cyclopsShot",
-				"type" : "CATAPULT"
+			"shooter" :
+			{
+				"type" : "SHOOTER"
 			},
-			"siegeLevel" :
+			"canShootWalls" :
+			{
+				"type" : "CATAPULT",
+				"subtype" : "spell.cyclopsShot"
+			},
+			"canShootWallsTimes" :
 			{
-				"subtype" : "spell.cyclopsShot",
 				"type" : "CATAPULT_EXTRA_SHOTS",
+				"subtype" : "spell.cyclopsShot",
 				"valueType" : "BASE_NUMBER",
 				"val" : 1
 			}
@@ -313,8 +352,14 @@
 		"index": 96,
 		"level": 7,
 		"faction": "stronghold",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
 			"reduceDefence" :
 			{
 				"type" : "ENEMY_DEFENCE_REDUCTION",
@@ -340,8 +385,14 @@
 		"index": 97,
 		"level": 7,
 		"faction": "stronghold",
+		"doubleWide" : true,
 		"abilities":
 		{
+			"KING_1" : // Will be affected by Slayer with no expertise
+			{
+				"type" : "KING",
+				"val" : 0
+			},
 			"reduceDefence" :
 			{
 				"type" : "ENEMY_DEFENCE_REDUCTION",

+ 85 - 22
config/creatures/tower.json

@@ -26,6 +26,13 @@
 		"index": 29,
 		"level": 1,
 		"faction": "tower",
+		"abilities" :
+		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			}
+		},
 		"graphics" :
 		{
 			"animation": "CGREMM.DEF",
@@ -54,6 +61,10 @@
 			"gargoyle" :
 			{
 				"type" : "GARGOYLE"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
 			}
 		},
 		"upgrades": ["obsidianGargoyle"],
@@ -80,6 +91,10 @@
 			"gargoyle" :
 			{
 				"type" : "GARGOYLE"
+			},
+			"canFly" :
+			{
+				"type" : "FLYING"
 			}
 		},
 		"graphics" :
@@ -102,15 +117,15 @@
 		"faction": "tower",
 		"abilities":
 		{
+			"nonliving" :
+			{
+				"type" : "NON_LIVING"
+			},
 			"magicResistance" :
 			{
 				"type" : "SPELL_DAMAGE_REDUCTION",
 				"subtype" : "spellSchool.any",
 				"val" : 50
-			},
-			"nonliving" :
-			{
-				"type" : "NON_LIVING"
 			}
 		},
 		"upgrades": ["stoneGolem"],
@@ -134,15 +149,15 @@
 		"faction": "tower",
 		"abilities" :
 		{
+			"nonliving" :
+			{
+				"type" : "NON_LIVING"
+			},
 			"magicResistance" :
 			{
 				"type" : "SPELL_DAMAGE_REDUCTION",
 				"subtype" : "spellSchool.any",
 				"val" : 75
-			},
-			"nonliving" :
-			{
-				"type" : "NON_LIVING"
 			}
 		},
 		"graphics" :
@@ -165,6 +180,14 @@
 		"faction": "tower",
 		"abilities": 
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
 			"reduceSpellCost" : 
 			{
 				"type" : "CHANGES_SPELL_COST_FOR_ALLY",
@@ -197,6 +220,18 @@
 		"faction": "tower",
 		"abilities": 
 		{
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
+			"noWallPenalty" :
+			{
+				"type" : "NO_WALL_PENALTY"
+			},
 			"reduceSpellCost" : 
 			{
 				"type" : "CHANGES_SPELL_COST_FOR_ALLY",
@@ -236,13 +271,17 @@
 		"faction": "tower",
 		"abilities":
 		{
-			"hateAngels" : 
+			"canFly" :
+			{
+				"type" : "FLYING"
+			},
+			"hateEfreet" : 
 			{
 				"type" : "HATE",
 				"subtype" : "creature.efreet",
 				"val" : 50
 			},
-			"hateArchAngels" : 
+			"hateEfreetSultans" : 
 			{
 				"type" : "HATE",
 				"subtype" : "creature.efreetSultan",
@@ -270,17 +309,14 @@
 		"faction": "tower",
 		"abilities":
 		{
-			"hateAngels" : 
+			"canFly" :
 			{
-				"type" : "HATE",
-				"subtype" : "creature.efreet",
-				"val" : 50
+				"type" : "FLYING"
 			},
-			"hateArchAngels" : 
+			"casts" :
 			{
-				"type" : "HATE",
-				"subtype" : "creature.efreetSultan",
-				"val" : 50
+				"type" : "CASTS",
+				"val" : 3
 			},
 			"spellsLength" : 
 			{
@@ -292,10 +328,17 @@
 				"type" : "RANDOM_SPELLCASTER",
 				"val" : 2
 			},
-			"casts" :
+			"hateEfreet" : 
 			{
-				"type" : "CASTS",
-				"val" : 3
+				"type" : "HATE",
+				"subtype" : "creature.efreet",
+				"val" : 50
+			},
+			"hateEfreetSultans" : 
+			{
+				"type" : "HATE",
+				"subtype" : "creature.efreetSultan",
+				"val" : 50
 			}
 		},
 		"graphics" :
@@ -317,6 +360,7 @@
 		"index": 38,
 		"level": 6,
 		"faction": "tower",
+		"doubleWide" : true,
 		"abilities" :
 		{
 			"noRetaliation" : 
@@ -343,6 +387,7 @@
 		"index": 39,
 		"level": 6,
 		"faction": "tower",
+		"doubleWide" : true,
 		"abilities" :
 		{
 			"noRetaliation" : 
@@ -370,6 +415,11 @@
 		"faction": "tower",
 		"abilities" :
 		{
+			"KING_3" : // Will be affected by Expert Slayer only
+			{
+				"type" : "KING",
+				"val" : 3
+			},
 			"immuneToMind" : 
 			{
 				"type" : "MIND_IMMUNITY"
@@ -396,11 +446,24 @@
 		"faction": "tower",
 		"abilities" :
 		{
+			"KING_3" : // Will be affected by Expert Slayer only
+			{
+				"type" : "KING",
+				"val" : 3
+			},
+			"shooter" :
+			{
+				"type" : "SHOOTER"
+			},
+			"noMeleePenalty" :
+			{
+				"type" : "NO_MELEE_PENALTY"
+			},
 			"immuneToMind" : 
 			{
 				"type" : "MIND_IMMUNITY"
 			},
-			"hateArchAngels" : 
+			"hateBlackDragons" : 
 			{
 				"type" : "HATE",
 				"subtype" : "creature.blackDragon",

+ 1 - 51
lib/CCreatureHandler.cpp

@@ -462,56 +462,6 @@ void CCreatureHandler::loadCommanders()
 	}
 }
 
-void CCreatureHandler::loadBonuses(JsonNode & creature, std::string bonuses) const
-{
-	auto makeBonusNode = [&](const std::string & type, double val = 0) -> JsonNode
-	{
-		JsonNode ret;
-		ret["type"].String() = type;
-		ret["val"].Float() = val;
-		return ret;
-	};
-
-	static const std::map<std::string, JsonNode> abilityMap =
-	{
-		{"FLYING_ARMY",            makeBonusNode("FLYING")},
-		{"SHOOTING_ARMY",          makeBonusNode("SHOOTER")},
-		{"SIEGE_WEAPON",           makeBonusNode("SIEGE_WEAPON")},
-		{"const_free_attack",      makeBonusNode("BLOCKS_RETALIATION")},
-		{"IS_UNDEAD",              makeBonusNode("UNDEAD")},
-		{"const_no_melee_penalty", makeBonusNode("NO_MELEE_PENALTY")},
-		{"const_jousting",         makeBonusNode("JOUSTING", 5)},
-		{"KING_1",                 makeBonusNode("KING")}, // Slayer with no expertise
-		{"KING_2",                 makeBonusNode("KING", 2)}, // Advanced Slayer or better
-		{"KING_3",                 makeBonusNode("KING", 3)}, // Expert Slayer only
-		{"const_no_wall_penalty",  makeBonusNode("NO_WALL_PENALTY")},
-		{"MULTI_HEADED",           makeBonusNode("ATTACKS_ALL_ADJACENT")},
-		{"IMMUNE_TO_MIND_SPELLS",  makeBonusNode("MIND_IMMUNITY")},
-		{"HAS_EXTENDED_ATTACK",    makeBonusNode("TWO_HEX_ATTACK_BREATH")}
-	};
-
-	auto hasAbility = [&](const std::string & name) -> bool 
-	{
-		return boost::algorithm::find_first(bonuses, name);
-	};
-
-	for(const auto & a : abilityMap)
-	{
-		if(hasAbility(a.first))
-			creature["abilities"][a.first] = a.second;
-	}
-	if(hasAbility("DOUBLE_WIDE"))
-		creature["doubleWide"].Bool() = true;
-
-	if(hasAbility("const_raises_morale"))
-	{
-		JsonNode node = makeBonusNode("MORALE");
-		node["val"].Float() = 1;
-		node["propagator"].String() = "HERO";
-		creature["abilities"]["const_raises_morale"] = node;
-	}
-}
-
 std::vector<JsonNode> CCreatureHandler::loadLegacyData()
 {
 	size_t dataSize = VLC->engineSettings()->getInteger(EGameSettings::TEXTS_CREATURE);
@@ -581,7 +531,7 @@ std::vector<JsonNode> CCreatureHandler::loadLegacyData()
 
 		// unused - ability text, not used since we no longer have original creature window
 		parser.readString();
-		loadBonuses(data, parser.readString()); //Attributes
+		parser.readString(); // unused - abilities, not used since we load them all from json configs
 
 		h3Data.push_back(data);
 	}

+ 0 - 2
lib/CCreatureHandler.h

@@ -195,8 +195,6 @@ private:
 	void loadStackExperience(CCreature * creature, const JsonNode & input) const;
 	void loadCreatureJson(CCreature * creature, const JsonNode & config) const;
 
-	/// adding abilities from ZCRTRAIT.TXT
-	void loadBonuses(JsonNode & creature, std::string bonuses) const;
 	/// load all creatures from H3 files
 	void load();
 	void loadCommanders();

部分文件因为文件数量过多而无法显示