mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-20 20:23:03 +02:00
0b70baa95e
* Indirect spell effects loading * Json serializer improvements * spell->canBeCastAt do not allow useless cast for any spell * Added proxy caster class for spell-created obstacles * Handle damage from spell-created obstacles inside mechanics * Experimental GameState integration/regression tests * Ignore mod settings and load only "vcmi" mod when running tests * fixed https://bugs.vcmi.eu/view.php?id=2765 (with tests) * Huge improvements of BattleAI regarding spell casts * AI can cast almost any combat spell except TELEPORT, SACRIFICE and obstacle placement spells. * Possible fix for https://bugs.vcmi.eu/view.php?id=1811 * CStack factored out to several classes * [Battle] Allowed RETURN_AFTER_STRIKE effect on server side to be optional * [Battle] Allowed BattleAction have multiple destinations * [Spells] Converted limit|immunity to target condition * [Spells] Use partial configuration reload for backward compatibility handling * [Tests] Started tests for CUnitState * Partial fixes of fire shield effect * [Battle] Do HP calculations in 64 bits * [BattleAI] Use threading for spell cast evaluation * [BattleAI] Made AI be able to evaluate modified turn order (on hypothetical battle state) * Implemented https://bugs.vcmi.eu/view.php?id=2811 * plug rare freeze when hypnotized unit shots vertically * Correctly apply ONLY_MELEE_FIGHT / ONLY_DISTANCE_FIGHT for unit damage, attack & defense * [BattleAI] Try to not waste a cast if battle is actually won already * Extended JsonSerializeFormat API * fixed https://bugs.vcmi.eu/view.php?id=2847 * Any unit effect can be now chained (not only damage like Chain Lightning) ** only damage effect for now actually uses "chainFactor" * Possible quick fix for https://bugs.vcmi.eu/view.php?id=2860
409 lines
7.0 KiB
JSON
409 lines
7.0 KiB
JSON
{
|
|
"magicArrow" : {
|
|
"index" : 15,
|
|
"targetType": "CREATURE",
|
|
|
|
"animation":{
|
|
"projectile": [
|
|
{"minimumAngle": 0 ,"defName":"C20SPX4"},
|
|
{"minimumAngle": 0.60 ,"defName":"C20SPX3"},
|
|
{"minimumAngle": 0.90 ,"defName":"C20SPX2"},
|
|
{"minimumAngle": 1.20 ,"defName":"C20SPX1"},
|
|
{"minimumAngle": 1.50 ,"defName":"C20SPX0"}
|
|
],
|
|
"hit":["C20SPX"]
|
|
},
|
|
"sounds": {
|
|
"cast": "MAGICBLT"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"iceBolt" : {
|
|
"index" : 16,
|
|
"targetType": "CREATURE",
|
|
|
|
"animation":{
|
|
"projectile": [
|
|
{"minimumAngle": 0 ,"defName":"C08SPW4"},
|
|
{"minimumAngle": 0.60 ,"defName":"C08SPW3"},
|
|
{"minimumAngle": 0.90 ,"defName":"C08SPW2"},
|
|
{"minimumAngle": 1.20 ,"defName":"C08SPW1"},
|
|
{"minimumAngle": 1.50 ,"defName":"C08SPW0"}
|
|
],
|
|
"hit":["C08SPW5"]
|
|
},
|
|
"sounds": {
|
|
"cast": "ICERAY"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"lightningBolt" : {
|
|
"index" : 17,
|
|
"targetType": "CREATURE",
|
|
|
|
"animation":{
|
|
"affect":[{"defName":"C03SPA0", "verticalPosition":"bottom"}, "C11SPA1"]
|
|
},
|
|
"sounds": {
|
|
"cast": "LIGHTBLT"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"implosion" : {
|
|
"index" : 18,
|
|
"targetType": "CREATURE",
|
|
|
|
"animation":{
|
|
"affect":["C05SPE0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "DECAY"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal",
|
|
"bonus.SIEGE_WEAPON" : "absolute"
|
|
}
|
|
}
|
|
},
|
|
"chainLightning" : {
|
|
"index" : 19,
|
|
"targetType": "CREATURE",
|
|
|
|
"animation":{
|
|
"affect":[{"defName":"C03SPA0", "verticalPosition":"bottom"}, "C11SPA1"]
|
|
},
|
|
"sounds": {
|
|
"cast": "CHAINLTE"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {
|
|
"type" : "core:damage",
|
|
"chainFactor" : 0.5,
|
|
"chainLength" : 4
|
|
}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
},
|
|
"advanced" : {
|
|
"battleEffects" : {
|
|
"directDamage" : {
|
|
"chainLength" : 5
|
|
}
|
|
}
|
|
},
|
|
"expert" : {
|
|
"battleEffects" : {
|
|
"directDamage" : {
|
|
"chainLength" : 5
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
}
|
|
},
|
|
"frostRing" : {
|
|
"index" : 20,
|
|
"targetType": "LOCATION",
|
|
|
|
"animation":{
|
|
"hit":["C07SPW"] //C07SPW0 ???
|
|
},
|
|
"sounds": {
|
|
"cast": "FROSTING"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "1",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"fireball" : {
|
|
"index" : 21,
|
|
"targetType": "LOCATION",
|
|
|
|
"animation":{
|
|
"hit":["C13SPF"] //C13SPF0 ???
|
|
},
|
|
"sounds": {
|
|
"cast": "SPONTCOMB"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0,1",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"inferno" : {
|
|
"index" : 22,
|
|
"targetType": "LOCATION",
|
|
|
|
"animation":{
|
|
"hit":["C04SPF0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "FIREBLST"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0-2",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"meteorShower" : {
|
|
"index" : 23,
|
|
"targetType": "LOCATION",
|
|
|
|
"animation":{
|
|
"hit":["C08SPE0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "METEOR"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0,1",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"deathRipple" : {
|
|
"index" : 24,
|
|
"targetType" : "CREATURE",
|
|
|
|
"animation":{
|
|
"affect":["C04SPE0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "DEATHRIP"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "X",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal",
|
|
"bonus.SIEGE_WEAPON" : "absolute",
|
|
"bonus.UNDEAD" : "absolute"
|
|
}
|
|
}
|
|
},
|
|
"destroyUndead" : {
|
|
"index" : 25,
|
|
"targetType" : "CREATURE",
|
|
|
|
"animation":{
|
|
"affect":["C14SPA0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "SACBRETH"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "X",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"allOf" : {
|
|
"bonus.UNDEAD" : "absolute"
|
|
},
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"armageddon" : {
|
|
"index" : 26,
|
|
"targetType" : "CREATURE",
|
|
|
|
"animation":{
|
|
"hit":["C06SPF0"]
|
|
},
|
|
"sounds": {
|
|
"cast": "ARMGEDN"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "X",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":false}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true
|
|
},
|
|
"targetCondition" : {
|
|
"noneOf" : {
|
|
"bonus.DIRECT_DAMAGE_IMMUNITY" : "normal"
|
|
}
|
|
}
|
|
},
|
|
"titanBolt" : {
|
|
"index" : 57,
|
|
"targetType" : "CREATURE",
|
|
|
|
"animation":{
|
|
"hit":[{"defName":"C03SPA0", "verticalPosition":"bottom"}, "C11SPA1"]
|
|
},
|
|
"sounds": {
|
|
"cast": "LIGHTBLT"
|
|
},
|
|
"levels" : {
|
|
"base":{
|
|
"range" : "0",
|
|
"battleEffects" : {
|
|
"directDamage" : {"type":"core:damage"}
|
|
},
|
|
"targetModifier":{"smart":true}
|
|
}
|
|
},
|
|
"flags" : {
|
|
"damage": true,
|
|
"negative": true,
|
|
"special": true
|
|
}
|
|
}
|
|
}
|