mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
02b5a5e830
Addresses several related problems: * Propagation / unpropagation of duplicate bonuses is inconsistent, causing bugs * Duplicate bonuses never stack, which is not always intended behaviour (e.g. multiple copies of resource generating artifacts) * Different bonuses always stack, which is not always intended behaviour (e.g. Angel + Archangel morale bonuses) This is addressed as follows: * Duplicate bonuses are never eliminated during propagation/inheritance. * Unpropagation eliminates only a single copy of duplicated bonus * Bonus receives a new field stacking that determines stacking behaviour: * * empty string = no stacking with duplicates (default) * * "ALWAYS" = stacks with duplicates & everything else * * some other value = no stacking with bonuses with same stacking value Also Morale/Luck window now hides non-stacking bonuses.
441 lines
7.0 KiB
JSON
441 lines
7.0 KiB
JSON
{
|
|
"imp" :
|
|
{
|
|
"index": 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" :
|
|
{
|
|
"index": 43,
|
|
"level": 1,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"manaChannel" :
|
|
{
|
|
"type" : "MANA_CHANNELING",
|
|
"val" : 20
|
|
}
|
|
},
|
|
"graphics" :
|
|
{
|
|
"animation": "CFAMIL.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "FMLRATTK.wav",
|
|
"defend": "FMLRDFND.wav",
|
|
"killed": "FMLRKILL.wav",
|
|
"move": "FMLRMOVE.wav",
|
|
"wince": "FMLRWNCE.wav"
|
|
}
|
|
},
|
|
"gog" :
|
|
{
|
|
"index": 44,
|
|
"level": 2,
|
|
"faction": "inferno",
|
|
"upgrades": ["magog"],
|
|
"hasDoubleWeek": true,
|
|
"graphics" :
|
|
{
|
|
"animation": "CGOG.DEF",
|
|
"missile" :
|
|
{
|
|
"projectile": "CPRGOGX.DEF"
|
|
}
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "GOGGATTK.wav",
|
|
"defend": "GOGGDFND.wav",
|
|
"killed": "GOGGKILL.wav",
|
|
"move": "GOGGMOVE.wav",
|
|
"shoot": "GOGGSHOT.wav",
|
|
"wince": "GOGGWNCE.wav"
|
|
}
|
|
},
|
|
"magog" :
|
|
{
|
|
"index": 45,
|
|
"level": 2,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"fireball" :
|
|
{
|
|
"type" : "SPELL_LIKE_ATTACK",
|
|
"subtype" : "spell.fireball"
|
|
}
|
|
},
|
|
"graphics" :
|
|
{
|
|
"animation": "CMAGOG.DEF",
|
|
"missile" :
|
|
{
|
|
"projectile": "CPRGOGX.DEF"
|
|
}
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "MGOGATTK.wav",
|
|
"defend": "MGOGDFND.wav",
|
|
"killed": "MGOGKILL.wav",
|
|
"move": "MGOGMOVE.wav",
|
|
"shoot": "SPONTCOMB.wav",
|
|
"wince": "MGOGWNCE.wav"
|
|
}
|
|
},
|
|
"hellHound" :
|
|
{
|
|
"index": 46,
|
|
"level": 3,
|
|
"faction": "inferno",
|
|
"upgrades": ["cerberus"],
|
|
"abilities":
|
|
{
|
|
"FLYING_ARMY" : null //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" :
|
|
{
|
|
"index": 47,
|
|
"level": 3,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"threeHeads" :
|
|
{
|
|
"type" : "THREE_HEADED_ATTACK"
|
|
},
|
|
"noRetaliation" :
|
|
{
|
|
"type" : "BLOCKS_RETALIATION"
|
|
},
|
|
"FLYING_ARMY" : null //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" :
|
|
{
|
|
"index": 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" :
|
|
{
|
|
"index": 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" :
|
|
{
|
|
"index": 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" :
|
|
{
|
|
"index": 51,
|
|
"level": 5,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"demonSummon" :
|
|
{
|
|
"type" : "DAEMON_SUMMONING",
|
|
"subtype" : "creature.demon",
|
|
"val" : 50
|
|
},
|
|
"castsAmount" :
|
|
{
|
|
"type" : "CASTS",
|
|
"val" : 1
|
|
}
|
|
},
|
|
"graphics" :
|
|
{
|
|
"animation": "CPFOE.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "PFOEATTK.wav",
|
|
"defend": "PFOEDFND.wav",
|
|
"killed": "PFOEKILL.wav",
|
|
"move": "PFOEMOVE.wav",
|
|
"wince": "PFOEWNCE.wav"
|
|
}
|
|
},
|
|
"efreet" :
|
|
{
|
|
"index": 52,
|
|
"level": 6,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"hateGenies" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.genie",
|
|
"val" : 50
|
|
},
|
|
"hateMasterGenies" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.masterGenie",
|
|
"val" : 50
|
|
},
|
|
"canFly" :
|
|
{
|
|
"type" : "FLYING"
|
|
},
|
|
"immuneToFire" :
|
|
{
|
|
"type" : "FIRE_IMMUNITY",
|
|
"subtype" : 0
|
|
}
|
|
},
|
|
"upgrades": ["efreetSultan"],
|
|
"graphics" :
|
|
{
|
|
"animation": "CEFREE.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "EFRTATTK.wav",
|
|
"defend": "EFRTDFND.wav",
|
|
"killed": "EFRTKILL.wav",
|
|
"move": "EFRTMOVE.wav",
|
|
"wince": "EFRTWNCE.wav"
|
|
}
|
|
},
|
|
"efreetSultan" :
|
|
{
|
|
"index": 53,
|
|
"level": 6,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"hateGenies" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.genie",
|
|
"val" : 50
|
|
},
|
|
"hateMasterGenies" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.masterGenie",
|
|
"val" : 50
|
|
},
|
|
"canFly" :
|
|
{
|
|
"type" : "FLYING"
|
|
},
|
|
"immuneToFire" :
|
|
{
|
|
"type" : "FIRE_IMMUNITY",
|
|
"subtype" : 0
|
|
},
|
|
"fireShield" :
|
|
{
|
|
"type" : "FIRE_SHIELD",
|
|
"val" : 30
|
|
}
|
|
},
|
|
"graphics" :
|
|
{
|
|
"animation": "CEFRES.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "ESULATTK.wav",
|
|
"defend": "ESULDFND.wav",
|
|
"killed": "ESULKILL.wav",
|
|
"move": "ESULMOVE.wav",
|
|
"shoot": "ESULSHOT.wav",
|
|
"wince": "ESULWNCE.wav"
|
|
}
|
|
},
|
|
"devil" :
|
|
{
|
|
"index": 54,
|
|
"level": 7,
|
|
"faction": "inferno",
|
|
"abilities":
|
|
{
|
|
"hateAngels" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.angel",
|
|
"val" : 50
|
|
},
|
|
"hateArchAngels" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.archangel",
|
|
"val" : 50,
|
|
"description" : "Devil -1"
|
|
},
|
|
"FLYING_ARMY" :
|
|
{
|
|
// type loaded from crtraits
|
|
"subtype" : 1 // teleports
|
|
},
|
|
"descreaseLuck" :
|
|
{
|
|
"type" : "LUCK",
|
|
"effectRange" : "ONLY_ENEMY_ARMY",
|
|
"val" : -1,
|
|
"stacking" : "Devils"
|
|
},
|
|
"blockRetaliation" :
|
|
{
|
|
"type" : "BLOCKS_RETALIATION"
|
|
}
|
|
},
|
|
"upgrades": ["archDevil"],
|
|
"graphics" :
|
|
{
|
|
"animation": "CDEVIL.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "DEVLATTK.wav",
|
|
"defend": "DEVLDFND.wav",
|
|
"killed": "DEVLKILL.wav",
|
|
"move": "DEVLMOVE.wav",
|
|
"wince": "DEVLWNCE.wav",
|
|
"startMoving": "DEVLEXT1.wav",
|
|
"endMoving": "DEVLEXT2.wav"
|
|
}
|
|
},
|
|
"archDevil" :
|
|
{
|
|
"index": 55,
|
|
"level": 7,
|
|
"faction": "inferno",
|
|
"abilities" :
|
|
{
|
|
"hateAngels" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.angel",
|
|
"val" : 50
|
|
},
|
|
"hateArchAngels" :
|
|
{
|
|
"type" : "HATE",
|
|
"subtype" : "creature.archangel",
|
|
"val" : 50
|
|
},
|
|
"FLYING_ARMY" :
|
|
{
|
|
// type loaded from crtraits
|
|
"subtype" : 1 // teleports
|
|
},
|
|
"descreaseLuck" :
|
|
{
|
|
"type" : "LUCK",
|
|
"effectRange" : "ONLY_ENEMY_ARMY",
|
|
"val" : -1,
|
|
"stacking" : "Devils"
|
|
},
|
|
"blockRetaliation" :
|
|
{
|
|
"type" : "BLOCKS_RETALIATION"
|
|
}
|
|
},
|
|
"graphics" :
|
|
{
|
|
"missile" : null,
|
|
"animation": "CADEVL.DEF"
|
|
},
|
|
"sound" :
|
|
{
|
|
"attack": "ADVLATTK.wav",
|
|
"defend": "ADVLDFND.wav",
|
|
"killed": "ADVLKILL.wav",
|
|
"move": "ADVLMOVE.wav",
|
|
"wince": "ADVLWNCE.wav",
|
|
"startMoving": "ADVLEXT1.wav",
|
|
"endMoving": "ADVLEXT2.wav"
|
|
}
|
|
}
|
|
}
|