1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-06 09:09:40 +02:00

convert line endings from CRLF (Windows) to LF (Linux/Unix)

Mixed line endings cause problems when exporting patches with
git-format-patch and then trying to "git am" a patch with mixed and
non-matching line endings. In such a situation git will fail to apply
the patch.

This commit runs the dos2unix tools on the remaining files with CRLF
(\r\n) line endings to convert them to line-feeds (\n) only.

Files that are Windows specific like *.vcxproj and *.props files were
not converted.

Closes: #3073
This commit is contained in:
Johannes Schauer Marin Rodrigues
2023-10-19 16:19:09 +02:00
parent d295840c64
commit a1a5bc28c2
309 changed files with 98656 additions and 98656 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,239 +1,239 @@
{
"videos": [
//Restoration of Erathia
//Long live the Queen
"GOOD1A.SMK", //Good1_a
"GOOD1B.SMK", //Good1_b
"GOOD1C.SMK", //Good1_c
//Dungeons and devils
"EVIL1A.SMK", //Evil1_a
"EVIL1B.SMK", //Evil1_b
"EVIL1C.SMK", //Evil1_c
//Spoils of War
"NEUTRALA.SMK", //Neutral1_a
"NEUTRALB.SMK", //Neutral1_b
"NEUTRALC.SMK", //Neutral1_c
//Liberation
"GOOD2A.SMK", //Good2_a
"GOOD2B.SMK", //Good2_b
"GOOD2C.SMK", //Good2_c
"GOOD2D.SMK", //Good2_d
//Long Live the King
"EVIL2A.SMK", //Evil2_a
"EVIL2AP1.SMK", //Evil2ap1
"EVIL2B.SMK", //Evil2_b
"EVIL2C.SMK", //Evil2_c
"EVIL2D.SMK", //Evil2_d
//Song for the Father
"GOOD3A.SMK", //Good3_a
"GOOD3B.SMK", //Good3_b
"GOOD3C.SMK", //Good3_c
//Seeds Of Discontent
"SECRETA.SMK", //Secret_a
"SECRETB.SMK", //Secret_b
"SECRETC.SMK", //Secret_c
//Armageddon's Blade
//Armageddon's Blade
"H3ABab1.smk", //ArmageddonsBlade_a
"H3ABab2.smk", //ArmageddonsBlade_b
"H3ABab3.smk", //ArmageddonsBlade_c
"H3ABab4.smk", //ArmageddonsBlade_d
"H3ABab5.smk", //ArmageddonsBlade_e
"H3ABab6.smk", //ArmageddonsBlade_f
"H3ABab7.smk", //ArmageddonsBlade_g
"H3ABab8.smk", //ArmageddonsBlade_h
"H3ABab9.smk", //ArmageddonsBlade_end
//Dragon's Blood
"H3ABdb1.smk", //DragonsBlood_a
"H3ABdb2.smk", //DragonsBlood_b
"H3ABdb3.smk", //DragonsBlood_c
"H3ABdb4.smk", //DragonsBlood_d
"H3ABdb5.smk", //DragonsBlood_end
//Dragon Slayer
"H3ABds1.smk", //DragonSlayer_a
"H3ABds2.smk", //DragonSlayer_b
"H3ABds3.smk", //DragonSlayer_c
"H3ABds4.smk", //DragonSlayer_d
"H3ABds5.smk", //DragonSlayer_end
//Festival of Life
"H3ABfl1.smk", //FestivalOfLife_a
"H3ABfl2.smk", //FestivalOfLife_b
"H3ABfl3.smk", //FestivalOfLife_c
"H3ABfl4.smk", //FestivalOfLife_d
"H3ABfl5.smk", //FestivalOfLife_end
//Foolhardy Waywardness
"H3ABfw1.smk", //FoolhardyWaywardness_a
"H3ABfw2.smk", //FoolhardyWaywardness_b
"H3ABfw3.smk", //FoolhardyWaywardness_c
"H3ABfw4.smk", //FoolhardyWaywardness_d
"H3ABfw5.smk", //FoolhardyWaywardness_end
//Playing with Fire
"H3ABpf1.smk", //PlayingWithFire_a
"H3ABpf2.smk", //PlayingWithFire_b
"3ABpf3.smk", //PlayingWithFire_c
"H3ABpf4.smk", //PlayingWithFire_end
//Shadow of Death Campaigns
//Birth of a Barbarian
"H3x2_BBa.smk", //BirthOfABarbarian_a
"H3x2_BBb.smk", //BirthOfABarbarian_b
"H3x2_BBc.smk", //BirthOfABarbarian_c
"H3x2_BBd.smk", //BirthOfABarbarian_d
"H3x2_BBe.smk", //BirthOfABarbarian_e
"H3x2_BBf.smk", //BirthOfABarbarian_end
//Elixir of Life
"H3x2_Ela.smk", //ElixirOfLife_a
"H3x2_Elb.smk", //ElixirOfLife_b
"H3x2_Elc.smk", //ElixirOfLife_c
"H3x2_Eld.smk", //ElixirOfLife_d
"H3x2_Ele.smk", //ElixirOfLife_end
//Hack and Slash
"H3x2_HSa.smk", //HackAndSlash_a
"EVIL2C.SMK", //HackAndSlash_b
"H3x2_HSc.smk", //HackAndSlash_c
"H3x2_HSd.smk", //HackAndSlash_d
"H3x2_HSe.smk", //HackAndSlash_end
//New Beginning
"H3x2_NBa.smk", //NewBeginning_a
"H3x2_NBb.smk", //NewBeginning_b
"H3x2_Nbc.smk", //NewBeginning_c
"H3x2_Nbd.smk", //NewBeginning_d
"H3x2_Nbe.smk", //NewBeginning_end
//Rise of the Necromancer
"H3x2_RNa.smk", //RiseOfTheNecromancer_a
"H3x2_RNb.smk", //RiseOfTheNecromancer_b
"H3x2_RNc.smk", //RiseOfTheNecromancer_c
"H3x2_RNd.smk", //RiseOfTheNecromancer_d
"H3x2_RNe1.smk", //RiseOfTheNecromancer_end
//Spectre of Power
"H3x2_SPa.smk", //SpectreOfPower_a
"H3x2_SPb.smk", //SpectreOfPower_b
"H3x2_SPc.smk", //SpectreOfPower_c
"H3x2_SPd.smk", //SpectreOfPower_d
"H3x2_SPe.smk", //SpectreOfPower_end
//Unholy Alliance
"H3x2_UAa.smk", //UnholyAlliance_a
"H3x2_UAb.smk", //UnholyAlliance_b
"H3x2_UAc.smk", //UnholyAlliance_c
"H3x2_UAd.smk", //UnholyAlliance_d
"H3x2_UAe.smk", //UnholyAlliance_e
"H3x2_UAf.smk", //UnholyAlliance_f
"H3x2_UAg.smk", //UnholyAlliance_g
"H3x2_UAh.smk", //UnholyAlliance_h
"H3x2_UAi.smk", //UnholyAlliance_i
"H3x2_UAj.smk", //UnholyAlliance_j
"H3x2_UAk.smk", //UnholyAlliance_k
"H3x2_UAl.smk", //UnholyAlliance_l
"H3x2_UAm.smk", //UnholyAlliance_end //H3x2_UAm.bik?
],
"music" : [
// Use CmpMusic.txt from H3 instead
],
"voice" : [
//Restoration of Erathia
"G1A", //Long live the Queen 1
"G1B", //Long live the Queen 2
"G1C", //Long live the Queen 3
"E1A.wav", //Dungeons and Devils 1
"E1B.wav", //Dungeons and Devils 2
"E1C.wav", //Dungeons and Devils 3
"N1A", //Spoils of War 1
"N1B", //Spoils of War 2
"N1C_D", //Spoils of War 3
"G2A", //Liberation 1
"G2B", //Liberation 2
"G2C", //Liberation 3
"G2D", //Liberation 4
"E2A.wav", //Long live the King 1
"E2AE.wav", //Long live the King 1end
"E2B.wav", //Long live the King 2
"E2C.wav", //Long live the King 3
"E2D.wav", //Long live the King 4
"G3A", //Song for the Father 1
"G3B", //Song for the Father 2
"G3C", //Song for the Father 3
"S1A", //Seeds of discontent 1
"S1B", //Seeds of discontent 2
"S1C", //Seeds of discontent 3
//Armageddon's Blade
"ABvoAB1.wav", //Armageddon's Blade 1
"ABvoAB2.wav", //Armageddon's Blade 2
"ABvoAB3.wav", //Armageddon's blade 3
"ABvoAB4.wav", //Armageddon's blade 4
"ABvoAB5.wav", //Armageddon's blade 5
"ABvoAB6.wav", //Armageddon's blade 6
"ABvoAB7.wav", //Armageddon's blade 7
"ABvoAB8.wav", //Armageddon's blade 8
"ABvoAB9.wav", //Armageddon's blade 8end
"ABvoDB1.wav", //Dragon's Blood 1
"ABvoDB2.wav", //Dragon's Blood 2
"ABvoDB3.wav", //Dragon's Blood 3
"ABvoDB4.wav", //Dragon's Blood 4
"ABvoDB5.wav", //Dragon's Blood 4end
"ABvoDS1.wav", //Dragon Slayer 1
"ABvoDS2.wav", //Dragon Slayer 2
"ABvoDS3.wav", //Dragon Slayer 3
"ABvoDS4.wav", //Dragon Slayer 4
"ABvoDS5.wav", //Dragon Slayer 4end
"ABvoFL1.wav", //Festival of Life 1
"ABvoFL2.wav", //Festival of Life 2
"ABvoFL3.wav", //Festival of Life 3
"ABvoFL4.wav", //Festival of Life 4
"ABvoFL5.wav", //Festival of Life 4end
"ABvoFW1.wav", //Foolhardy Waywardness 1
"ABvoFW2.wav", //Foolhardy Waywardness 2
"ABvoFW3.wav", //Foolhardy Waywardness 3
"ABvoFW4.wav", //Foolhardy Waywardness 4
"ABvoFW5.wav", //Foolhardy Waywardness 4end
"ABvoPF1.wav", //Playing with Fire 1
"ABvoPF2.wav", //Playing with Fire 2
"ABvoPF3.wav", //Playing with Fire 3
"ABvoPF4.wav", //Playing with Fire 3end
//Shadow of Death Campaigns
"H3x2BBa", //Birth of a Barbarian 1
"H3x2BBb", //Birth of a Barbarian 2
"H3x2BBc", //Birth of a Barbarian 3
"H3x2BBd", //Birth of a Barbarian 4
"H3x2BBe", //Birth of a Barbarian 5
"H3x2BBf", //Birth of a Barbarian 5end
"H3x2ELa", //Elixir of life 1
"H3x2ELb", //Elixir of life 2
"H3x2ELc", //Elixir of life 3
"H3x2ELd", //Elixir of life 4
"H3x2ELe", //Elixir of life 4end
"H3x2HSa", //Hack and Slash 1
"H3x2HSb", //Hack and Slash 2
"H3x2HSc", //Hack and Slash 3
"H3x2HSd", //Hack and Slash 4
"H3x2HSe", //Hack and Slash 4end
"H3x2NBa", //New Beginning 1
"H3x2NBb", //New Beginning 2
"H3x2NBc", //New Beginning 3
"H3x2NBd", //New Beginning 4
"H3x2NBe", //New Beginning 4end
"H3x2RNa", //Rise of the Necromancer 1
"H3x2RNb", //Rise of the Necromancer 2
"H3x2RNc", //Rise of the Necromancer 3
"H3x2RNd", //Rise of the Necromancer 4
"H3x2RNe", //Rise of the Necromancer 4end
"H3x2SPa", //Spectre of Power 1
"H3x2Spb", //Spectre of Power 2
"H3x2Spc", //Spectre of Power 3
"H3x2Spd", //Spectre of Power 4
"H3x2Spe", //Spectre of Power 4end
"H3x2UAa", //Unholy alliance 1
"H3x2UAb", //Unholy alliance 2
"H3x2UAc", //Unholy alliance 3
"H3x2UAd", //Unholy alliance 4
"H3x2UAe", //Unholy alliance 5
"H3x2UAf", //Unholy alliance 6
"H3x2UAg", //Unholy alliance 7
"H3x2UAh", //Unholy alliance 8
"H3x2UAi", //Unholy alliance 9
"H3x2UAj", //Unholy alliance 10
"H3x2UAk", //Unholy alliance 11
"H3x2UAl", //Unholy alliance 12
"H3x2UAm" //Unholy alliance 12end
]
}
{
"videos": [
//Restoration of Erathia
//Long live the Queen
"GOOD1A.SMK", //Good1_a
"GOOD1B.SMK", //Good1_b
"GOOD1C.SMK", //Good1_c
//Dungeons and devils
"EVIL1A.SMK", //Evil1_a
"EVIL1B.SMK", //Evil1_b
"EVIL1C.SMK", //Evil1_c
//Spoils of War
"NEUTRALA.SMK", //Neutral1_a
"NEUTRALB.SMK", //Neutral1_b
"NEUTRALC.SMK", //Neutral1_c
//Liberation
"GOOD2A.SMK", //Good2_a
"GOOD2B.SMK", //Good2_b
"GOOD2C.SMK", //Good2_c
"GOOD2D.SMK", //Good2_d
//Long Live the King
"EVIL2A.SMK", //Evil2_a
"EVIL2AP1.SMK", //Evil2ap1
"EVIL2B.SMK", //Evil2_b
"EVIL2C.SMK", //Evil2_c
"EVIL2D.SMK", //Evil2_d
//Song for the Father
"GOOD3A.SMK", //Good3_a
"GOOD3B.SMK", //Good3_b
"GOOD3C.SMK", //Good3_c
//Seeds Of Discontent
"SECRETA.SMK", //Secret_a
"SECRETB.SMK", //Secret_b
"SECRETC.SMK", //Secret_c
//Armageddon's Blade
//Armageddon's Blade
"H3ABab1.smk", //ArmageddonsBlade_a
"H3ABab2.smk", //ArmageddonsBlade_b
"H3ABab3.smk", //ArmageddonsBlade_c
"H3ABab4.smk", //ArmageddonsBlade_d
"H3ABab5.smk", //ArmageddonsBlade_e
"H3ABab6.smk", //ArmageddonsBlade_f
"H3ABab7.smk", //ArmageddonsBlade_g
"H3ABab8.smk", //ArmageddonsBlade_h
"H3ABab9.smk", //ArmageddonsBlade_end
//Dragon's Blood
"H3ABdb1.smk", //DragonsBlood_a
"H3ABdb2.smk", //DragonsBlood_b
"H3ABdb3.smk", //DragonsBlood_c
"H3ABdb4.smk", //DragonsBlood_d
"H3ABdb5.smk", //DragonsBlood_end
//Dragon Slayer
"H3ABds1.smk", //DragonSlayer_a
"H3ABds2.smk", //DragonSlayer_b
"H3ABds3.smk", //DragonSlayer_c
"H3ABds4.smk", //DragonSlayer_d
"H3ABds5.smk", //DragonSlayer_end
//Festival of Life
"H3ABfl1.smk", //FestivalOfLife_a
"H3ABfl2.smk", //FestivalOfLife_b
"H3ABfl3.smk", //FestivalOfLife_c
"H3ABfl4.smk", //FestivalOfLife_d
"H3ABfl5.smk", //FestivalOfLife_end
//Foolhardy Waywardness
"H3ABfw1.smk", //FoolhardyWaywardness_a
"H3ABfw2.smk", //FoolhardyWaywardness_b
"H3ABfw3.smk", //FoolhardyWaywardness_c
"H3ABfw4.smk", //FoolhardyWaywardness_d
"H3ABfw5.smk", //FoolhardyWaywardness_end
//Playing with Fire
"H3ABpf1.smk", //PlayingWithFire_a
"H3ABpf2.smk", //PlayingWithFire_b
"3ABpf3.smk", //PlayingWithFire_c
"H3ABpf4.smk", //PlayingWithFire_end
//Shadow of Death Campaigns
//Birth of a Barbarian
"H3x2_BBa.smk", //BirthOfABarbarian_a
"H3x2_BBb.smk", //BirthOfABarbarian_b
"H3x2_BBc.smk", //BirthOfABarbarian_c
"H3x2_BBd.smk", //BirthOfABarbarian_d
"H3x2_BBe.smk", //BirthOfABarbarian_e
"H3x2_BBf.smk", //BirthOfABarbarian_end
//Elixir of Life
"H3x2_Ela.smk", //ElixirOfLife_a
"H3x2_Elb.smk", //ElixirOfLife_b
"H3x2_Elc.smk", //ElixirOfLife_c
"H3x2_Eld.smk", //ElixirOfLife_d
"H3x2_Ele.smk", //ElixirOfLife_end
//Hack and Slash
"H3x2_HSa.smk", //HackAndSlash_a
"EVIL2C.SMK", //HackAndSlash_b
"H3x2_HSc.smk", //HackAndSlash_c
"H3x2_HSd.smk", //HackAndSlash_d
"H3x2_HSe.smk", //HackAndSlash_end
//New Beginning
"H3x2_NBa.smk", //NewBeginning_a
"H3x2_NBb.smk", //NewBeginning_b
"H3x2_Nbc.smk", //NewBeginning_c
"H3x2_Nbd.smk", //NewBeginning_d
"H3x2_Nbe.smk", //NewBeginning_end
//Rise of the Necromancer
"H3x2_RNa.smk", //RiseOfTheNecromancer_a
"H3x2_RNb.smk", //RiseOfTheNecromancer_b
"H3x2_RNc.smk", //RiseOfTheNecromancer_c
"H3x2_RNd.smk", //RiseOfTheNecromancer_d
"H3x2_RNe1.smk", //RiseOfTheNecromancer_end
//Spectre of Power
"H3x2_SPa.smk", //SpectreOfPower_a
"H3x2_SPb.smk", //SpectreOfPower_b
"H3x2_SPc.smk", //SpectreOfPower_c
"H3x2_SPd.smk", //SpectreOfPower_d
"H3x2_SPe.smk", //SpectreOfPower_end
//Unholy Alliance
"H3x2_UAa.smk", //UnholyAlliance_a
"H3x2_UAb.smk", //UnholyAlliance_b
"H3x2_UAc.smk", //UnholyAlliance_c
"H3x2_UAd.smk", //UnholyAlliance_d
"H3x2_UAe.smk", //UnholyAlliance_e
"H3x2_UAf.smk", //UnholyAlliance_f
"H3x2_UAg.smk", //UnholyAlliance_g
"H3x2_UAh.smk", //UnholyAlliance_h
"H3x2_UAi.smk", //UnholyAlliance_i
"H3x2_UAj.smk", //UnholyAlliance_j
"H3x2_UAk.smk", //UnholyAlliance_k
"H3x2_UAl.smk", //UnholyAlliance_l
"H3x2_UAm.smk", //UnholyAlliance_end //H3x2_UAm.bik?
],
"music" : [
// Use CmpMusic.txt from H3 instead
],
"voice" : [
//Restoration of Erathia
"G1A", //Long live the Queen 1
"G1B", //Long live the Queen 2
"G1C", //Long live the Queen 3
"E1A.wav", //Dungeons and Devils 1
"E1B.wav", //Dungeons and Devils 2
"E1C.wav", //Dungeons and Devils 3
"N1A", //Spoils of War 1
"N1B", //Spoils of War 2
"N1C_D", //Spoils of War 3
"G2A", //Liberation 1
"G2B", //Liberation 2
"G2C", //Liberation 3
"G2D", //Liberation 4
"E2A.wav", //Long live the King 1
"E2AE.wav", //Long live the King 1end
"E2B.wav", //Long live the King 2
"E2C.wav", //Long live the King 3
"E2D.wav", //Long live the King 4
"G3A", //Song for the Father 1
"G3B", //Song for the Father 2
"G3C", //Song for the Father 3
"S1A", //Seeds of discontent 1
"S1B", //Seeds of discontent 2
"S1C", //Seeds of discontent 3
//Armageddon's Blade
"ABvoAB1.wav", //Armageddon's Blade 1
"ABvoAB2.wav", //Armageddon's Blade 2
"ABvoAB3.wav", //Armageddon's blade 3
"ABvoAB4.wav", //Armageddon's blade 4
"ABvoAB5.wav", //Armageddon's blade 5
"ABvoAB6.wav", //Armageddon's blade 6
"ABvoAB7.wav", //Armageddon's blade 7
"ABvoAB8.wav", //Armageddon's blade 8
"ABvoAB9.wav", //Armageddon's blade 8end
"ABvoDB1.wav", //Dragon's Blood 1
"ABvoDB2.wav", //Dragon's Blood 2
"ABvoDB3.wav", //Dragon's Blood 3
"ABvoDB4.wav", //Dragon's Blood 4
"ABvoDB5.wav", //Dragon's Blood 4end
"ABvoDS1.wav", //Dragon Slayer 1
"ABvoDS2.wav", //Dragon Slayer 2
"ABvoDS3.wav", //Dragon Slayer 3
"ABvoDS4.wav", //Dragon Slayer 4
"ABvoDS5.wav", //Dragon Slayer 4end
"ABvoFL1.wav", //Festival of Life 1
"ABvoFL2.wav", //Festival of Life 2
"ABvoFL3.wav", //Festival of Life 3
"ABvoFL4.wav", //Festival of Life 4
"ABvoFL5.wav", //Festival of Life 4end
"ABvoFW1.wav", //Foolhardy Waywardness 1
"ABvoFW2.wav", //Foolhardy Waywardness 2
"ABvoFW3.wav", //Foolhardy Waywardness 3
"ABvoFW4.wav", //Foolhardy Waywardness 4
"ABvoFW5.wav", //Foolhardy Waywardness 4end
"ABvoPF1.wav", //Playing with Fire 1
"ABvoPF2.wav", //Playing with Fire 2
"ABvoPF3.wav", //Playing with Fire 3
"ABvoPF4.wav", //Playing with Fire 3end
//Shadow of Death Campaigns
"H3x2BBa", //Birth of a Barbarian 1
"H3x2BBb", //Birth of a Barbarian 2
"H3x2BBc", //Birth of a Barbarian 3
"H3x2BBd", //Birth of a Barbarian 4
"H3x2BBe", //Birth of a Barbarian 5
"H3x2BBf", //Birth of a Barbarian 5end
"H3x2ELa", //Elixir of life 1
"H3x2ELb", //Elixir of life 2
"H3x2ELc", //Elixir of life 3
"H3x2ELd", //Elixir of life 4
"H3x2ELe", //Elixir of life 4end
"H3x2HSa", //Hack and Slash 1
"H3x2HSb", //Hack and Slash 2
"H3x2HSc", //Hack and Slash 3
"H3x2HSd", //Hack and Slash 4
"H3x2HSe", //Hack and Slash 4end
"H3x2NBa", //New Beginning 1
"H3x2NBb", //New Beginning 2
"H3x2NBc", //New Beginning 3
"H3x2NBd", //New Beginning 4
"H3x2NBe", //New Beginning 4end
"H3x2RNa", //Rise of the Necromancer 1
"H3x2RNb", //Rise of the Necromancer 2
"H3x2RNc", //Rise of the Necromancer 3
"H3x2RNd", //Rise of the Necromancer 4
"H3x2RNe", //Rise of the Necromancer 4end
"H3x2SPa", //Spectre of Power 1
"H3x2Spb", //Spectre of Power 2
"H3x2Spc", //Spectre of Power 3
"H3x2Spd", //Spectre of Power 4
"H3x2Spe", //Spectre of Power 4end
"H3x2UAa", //Unholy alliance 1
"H3x2UAb", //Unholy alliance 2
"H3x2UAc", //Unholy alliance 3
"H3x2UAd", //Unholy alliance 4
"H3x2UAe", //Unholy alliance 5
"H3x2UAf", //Unholy alliance 6
"H3x2UAg", //Unholy alliance 7
"H3x2UAh", //Unholy alliance 8
"H3x2UAi", //Unholy alliance 9
"H3x2UAj", //Unholy alliance 10
"H3x2UAk", //Unholy alliance 11
"H3x2UAl", //Unholy alliance 12
"H3x2UAm" //Unholy alliance 12end
]
}

View File

@@ -1,41 +1,41 @@
{
//Commander receives these bonuses on level-up
"bonusPerLevel":
[
["CREATURE_DAMAGE", 1, 1, 0 ], //+1 minimum damage
["CREATURE_DAMAGE", 2, 2, 0 ], //+2 maximum damage
["STACK_HEALTH", 5, 0, 0 ] //+5 hp
],
//Value of bonuses given by each skill level
"skillLevels":
[
{"name": "ATTACK", "levels": [2, 5, 9, 15, 25]}, //0
{"name": "DEFENSE", "levels": [4, 10, 18, 30, 50]}, //1
{"name": "HEALTH", "levels": [10, 25, 45, 70, 100]}, //2
{"name": "DAMAGE", "levels": [10, 25, 45, 70, 100]}, //3
{"name": "SPEED", "levels": [1, 2, 3, 4, 6]}, //4
{"name": "SPELL_POWER", "levels": [1, 3, 6, 14, 29]}, //5
{"name": "CASTS", "levels": [1, 2, 3, 4, 5]},
{"name": "RESISTANCE", "levels": [5, 15, 35, 60, 90]}
],
"abilityRequirements":
//Two secondary skills needed for each special ability
[
{"ability": ["ENEMY_DEFENCE_REDUCTION", 50, 0, 0 ], "skills": [0, 1]},
{"ability": ["FEAR", 0, 0, 0 ], "skills": [0, 2]},
{"ability": ["ALWAYS_MAXIMUM_DAMAGE", 0, -1, 0 ], "skills": [0, 3]},
{"ability": ["SHOOTER", 0, 0, 0 ], "skills": [0, 4]},
{"ability": ["BLOCKS_RETALIATION", 0, 1, 0 ], "skills": [0,5]},
{"ability": ["UNLIMITED_RETALIATIONS", 0, 0, 0 ], "skills": [1, 2]},
{"ability": ["ATTACKS_ALL_ADJACENT", 0, 0, 0 ], "skills": [1, 3]},
{"ability": ["NONE", 30, 0, 0 ], "skills": [1, 4]}, // TODO: Implement bonus that gives chance to completely block one enemy attack per turn
{"ability": ["FIRE_SHIELD", 1, 1, 0 ], "skills": [1, 5]},
{"ability": ["ADDITIONAL_ATTACK", 1, 0, 0 ], "skills": [2, 3]},
{"ability": ["HP_REGENERATION", 50, 0, 0 ], "skills": [2, 4]},
{"ability": ["SPELL_AFTER_ATTACK", 30, "spell.paralyze", 0 ], "skills": [2, 5]},
{"ability": ["JOUSTING", 5, 0, 0 ], "skills": [3, 4]},
{"ability": ["DEATH_STARE", 1, 1, 0 ], "skills": [3,5]},
{"ability": ["FLYING", 0, 0, 0 ], "skills": [4,5]}
]
}
{
//Commander receives these bonuses on level-up
"bonusPerLevel":
[
["CREATURE_DAMAGE", 1, 1, 0 ], //+1 minimum damage
["CREATURE_DAMAGE", 2, 2, 0 ], //+2 maximum damage
["STACK_HEALTH", 5, 0, 0 ] //+5 hp
],
//Value of bonuses given by each skill level
"skillLevels":
[
{"name": "ATTACK", "levels": [2, 5, 9, 15, 25]}, //0
{"name": "DEFENSE", "levels": [4, 10, 18, 30, 50]}, //1
{"name": "HEALTH", "levels": [10, 25, 45, 70, 100]}, //2
{"name": "DAMAGE", "levels": [10, 25, 45, 70, 100]}, //3
{"name": "SPEED", "levels": [1, 2, 3, 4, 6]}, //4
{"name": "SPELL_POWER", "levels": [1, 3, 6, 14, 29]}, //5
{"name": "CASTS", "levels": [1, 2, 3, 4, 5]},
{"name": "RESISTANCE", "levels": [5, 15, 35, 60, 90]}
],
"abilityRequirements":
//Two secondary skills needed for each special ability
[
{"ability": ["ENEMY_DEFENCE_REDUCTION", 50, 0, 0 ], "skills": [0, 1]},
{"ability": ["FEAR", 0, 0, 0 ], "skills": [0, 2]},
{"ability": ["ALWAYS_MAXIMUM_DAMAGE", 0, -1, 0 ], "skills": [0, 3]},
{"ability": ["SHOOTER", 0, 0, 0 ], "skills": [0, 4]},
{"ability": ["BLOCKS_RETALIATION", 0, 1, 0 ], "skills": [0,5]},
{"ability": ["UNLIMITED_RETALIATIONS", 0, 0, 0 ], "skills": [1, 2]},
{"ability": ["ATTACKS_ALL_ADJACENT", 0, 0, 0 ], "skills": [1, 3]},
{"ability": ["NONE", 30, 0, 0 ], "skills": [1, 4]}, // TODO: Implement bonus that gives chance to completely block one enemy attack per turn
{"ability": ["FIRE_SHIELD", 1, 1, 0 ], "skills": [1, 5]},
{"ability": ["ADDITIONAL_ATTACK", 1, 0, 0 ], "skills": [2, 3]},
{"ability": ["HP_REGENERATION", 50, 0, 0 ], "skills": [2, 4]},
{"ability": ["SPELL_AFTER_ATTACK", 30, "spell.paralyze", 0 ], "skills": [2, 5]},
{"ability": ["JOUSTING", 5, 0, 0 ], "skills": [3, 4]},
{"ability": ["DEATH_STARE", 1, 1, 0 ], "skills": [3,5]},
{"ability": ["FLYING", 0, 0, 0 ], "skills": [4,5]}
]
}

View File

@@ -1,70 +1,70 @@
//Configured difficulty
{
"human":
{
"pawn":
{
"resources": { "wood" : 30, "mercury": 15, "ore": 30, "sulfur": 15, "crystal": 15, "gems": 15, "gold": 30000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"knight":
{
"resources": { "wood" : 20, "mercury": 10, "ore": 20, "sulfur": 10, "crystal": 10, "gems": 10, "gold": 20000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"rook":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 15000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"queen":
{
"resources": { "wood" : 10, "mercury": 4, "ore": 10, "sulfur": 4, "crystal": 4, "gems": 4, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"king":
{
"resources": { "wood" : 0, "mercury": 0, "ore": 0 , "sulfur": 0, "crystal": 0, "gems": 0, "gold": 0, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
}
},
"ai":
{
"pawn":
{
"resources": { "wood" : 5, "mercury": 2, "ore": 5, "sulfur": 2, "crystal": 2, "gems": 2, "gold": 5000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"knight":
{
"resources": { "wood" : 10, "mercury": 4, "ore": 10, "sulfur": 4, "crystal": 4, "gems": 4, "gold": 7500, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"rook":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"queen":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"king":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
}
},
}
//Configured difficulty
{
"human":
{
"pawn":
{
"resources": { "wood" : 30, "mercury": 15, "ore": 30, "sulfur": 15, "crystal": 15, "gems": 15, "gold": 30000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"knight":
{
"resources": { "wood" : 20, "mercury": 10, "ore": 20, "sulfur": 10, "crystal": 10, "gems": 10, "gold": 20000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"rook":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 15000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"queen":
{
"resources": { "wood" : 10, "mercury": 4, "ore": 10, "sulfur": 4, "crystal": 4, "gems": 4, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"king":
{
"resources": { "wood" : 0, "mercury": 0, "ore": 0 , "sulfur": 0, "crystal": 0, "gems": 0, "gold": 0, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
}
},
"ai":
{
"pawn":
{
"resources": { "wood" : 5, "mercury": 2, "ore": 5, "sulfur": 2, "crystal": 2, "gems": 2, "gold": 5000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"knight":
{
"resources": { "wood" : 10, "mercury": 4, "ore": 10, "sulfur": 4, "crystal": 4, "gems": 4, "gold": 7500, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"rook":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"queen":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
},
"king":
{
"resources": { "wood" : 15, "mercury": 7, "ore": 15, "sulfur": 7, "crystal": 7, "gems": 7, "gold": 10000, "mithril": 0 },
"globalBonuses": [],
"battleBonuses": []
}
},
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,98 +1,98 @@
{
"type" : "object",
"$schema" : "http://json-schema.org/draft-04/schema",
"title" : "VCMI skill format",
"description" : "Format used to replace bonuses provided by secondary skills in VCMI",
"definitions" : {
"skillBonus" : {
"type" : "object",
"description" : "Set of bonuses provided by skill at given level",
"required" : ["description", "effects"],
"properties" : {
"description" : {
"type" : "string",
"description" : "localizable description"
},
"images" : {
"type" : "object",
"description" : "Skill icons of varying size",
"properties" : {
"small" : {
"type" : "string",
"description" : "32x32 skill icon",
"format" : "imageFile"
},
"medium" : {
"type" : "string",
"description" : "44x44 skill icon",
"format" : "imageFile"
},
"large" : {
"type" : "string",
"description" : "82x93 skill icon",
"format" : "imageFile"
}
}
},
"effects" : {
"type" : "object",
"additionalProperties" : {
"$ref" : "bonus.json"
}
}
}
}
},
"required" : ["name", "basic", "advanced", "expert"],
"properties" : {
"name" : {
"type" : "string",
"description" : "Mandatory, localizable skill name"
},
"index" : {
"type" : "number",
"description" : "Internal, numeric id of skill, required for existing skills"
},
"obligatoryMajor" : {
"type" : "boolean",
"description" : "This skill is major obligatory (like H3 Wisdom)"
},
"obligatoryMinor" : {
"type" : "boolean",
"description" : "This skill is minor obligatory (like H3 Magic school)"
},
"gainChance" : {
"description" : "Chance for the skill to be offered on level-up (heroClass may override)",
"type" : "object",
"required" : ["might", "magic"],
"properties" : {
"might" : {
"type" : "number",
"description" : "Chance for hero classes with might affinity"
},
"magic" : {
"type" : "number",
"description" : "Chance for hero classes with magic affinity"
}
}
},
"base" : {
"type" : "object",
"description" : "will be merged with all levels",
"additionalProperties" : true
},
"basic" : {
"$ref" : "#/definitions/skillBonus"
},
"advanced" : {
"$ref" : "#/definitions/skillBonus"
},
"expert" : {
"$ref" : "#/definitions/skillBonus"
}
},
"onlyOnWaterMap" : {
"type" : "boolean",
"description" : "It true, skill won't be available on a map without water"
}
}
{
"type" : "object",
"$schema" : "http://json-schema.org/draft-04/schema",
"title" : "VCMI skill format",
"description" : "Format used to replace bonuses provided by secondary skills in VCMI",
"definitions" : {
"skillBonus" : {
"type" : "object",
"description" : "Set of bonuses provided by skill at given level",
"required" : ["description", "effects"],
"properties" : {
"description" : {
"type" : "string",
"description" : "localizable description"
},
"images" : {
"type" : "object",
"description" : "Skill icons of varying size",
"properties" : {
"small" : {
"type" : "string",
"description" : "32x32 skill icon",
"format" : "imageFile"
},
"medium" : {
"type" : "string",
"description" : "44x44 skill icon",
"format" : "imageFile"
},
"large" : {
"type" : "string",
"description" : "82x93 skill icon",
"format" : "imageFile"
}
}
},
"effects" : {
"type" : "object",
"additionalProperties" : {
"$ref" : "bonus.json"
}
}
}
}
},
"required" : ["name", "basic", "advanced", "expert"],
"properties" : {
"name" : {
"type" : "string",
"description" : "Mandatory, localizable skill name"
},
"index" : {
"type" : "number",
"description" : "Internal, numeric id of skill, required for existing skills"
},
"obligatoryMajor" : {
"type" : "boolean",
"description" : "This skill is major obligatory (like H3 Wisdom)"
},
"obligatoryMinor" : {
"type" : "boolean",
"description" : "This skill is minor obligatory (like H3 Magic school)"
},
"gainChance" : {
"description" : "Chance for the skill to be offered on level-up (heroClass may override)",
"type" : "object",
"required" : ["might", "magic"],
"properties" : {
"might" : {
"type" : "number",
"description" : "Chance for hero classes with might affinity"
},
"magic" : {
"type" : "number",
"description" : "Chance for hero classes with magic affinity"
}
}
},
"base" : {
"type" : "object",
"description" : "will be merged with all levels",
"additionalProperties" : true
},
"basic" : {
"$ref" : "#/definitions/skillBonus"
},
"advanced" : {
"$ref" : "#/definitions/skillBonus"
},
"expert" : {
"$ref" : "#/definitions/skillBonus"
}
},
"onlyOnWaterMap" : {
"type" : "boolean",
"description" : "It true, skill won't be available on a map without water"
}
}

View File

@@ -1,318 +1,318 @@
{
"type" : "object",
"$schema" : "http://json-schema.org/draft-04/schema",
"title" : "VCMI spell format",
"description" : "Format used to define new spells in VCMI",
"definitions" : {
"animationQueue" : {
"type" : "array",
"items" : {
"anyOf" :[
{
//dummy animation, pause, Value - frame count
"type" : "number"
},
{
//assumed verticalPosition: top
"type" : "string",
"format" : "defFile"
},
{
"type" : "object",
"properties" : {
"verticalPosition" : {"type" : "string", "enum" :["top","bottom"]},
"defName" : {"type" : "string", "format" : "defFile"},
"effectName" : { "type" : "string" }
},
"additionalProperties" : false
}
]
}
},
"animation" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"affect" : {"$ref" : "#/definitions/animationQueue"},
"hit" : {"$ref" : "#/definitions/animationQueue"},
"cast" : {"$ref" : "#/definitions/animationQueue"},
"projectile" : {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"defName" : {"type" : "string", "format" : "defFile"},
"minimumAngle" : {"type" : "number", "minimum" : 0}
},
"additionalProperties" : false
}
}
}
},
"flags" : {
"type" : "object",
"additionalProperties" : {
"type" : "boolean"
}
},
"levelInfo" : {
"type" : "object",
"required" :["range", "description", "cost", "power", "aiValue"],
"additionalProperties" : false,
"properties" : {
"description" : {
"type" : "string",
"description" : "Localizable description. Use {xxx} for formatting"
},
"cost" : {
"type" : "number",
"description" : "Cost in mana points"
},
"power" : {
"type" : "number"
},
"range" : {
"type" : "string",
"description" : "spell range description in SRSL"
},
"aiValue" : {
"type" : "number"
},
"effects" : {
"type" : "object",
"description" : "Timed effects (updated by prolongation)",
"additionalProperties" : {
"$ref" : "bonus.json"
}
},
"cumulativeEffects" : {
"type" : "object",
"description" : "Timed effects (updated by unique bonus)",
"additionalProperties" : {
"$ref" : "bonus.json"
}
},
"battleEffects" : {
"type" : "object",
"additionalProperties" : {
"type" : "object"
}
},
"targetModifier" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"smart" : {
"type" : "boolean",
"description" : "true: friendly/hostile based on positiveness; false: all targets"
},
"clearTarget" :
{
"type" : "boolean",
"description" : "LOCATION target only. Target hex/tile must be clear"
},
"clearAffected" :
{
"type" : "boolean",
"description" : "LOCATION target only. All affected hexes/tile must be clear"
}
}
}
}
},
"texts" : {
"type" : "object",
"additionalProperties" : false
}
},
"required" : ["type", "name", "school", "level", "power","gainChance","flags","levels"],
"additionalProperties" : false,
"properties" : {
"index" : {
"type" : "number",
"description" : "numeric id of spell required only for original spells, prohibited for new spells"
},
"name" : {
"type" : "string",
"description" : "Localizable name of this spell"
},
"type" : {
"type" : "string",
"enum" : ["adventure", "combat", "ability"],
"description" : "Spell type"
},
"school" : {
"type" : "object",
"description" : "List of spell schools this spell belongs to",
"additionalProperties" : false,
"properties" : {
"air" : {"type" : "boolean"},
"fire" : {"type" : "boolean"},
"earth" : {"type" : "boolean"},
"water" : {"type" : "boolean"}
}
},
"level" : {
"type" : "number",
"description" : "Spell level",
"minimum" : 0,
"maximum" : 5
},
"power" : {
"type" : "number",
"description" : "Base power of the spell"
},
"defaultGainChance" : {
"type" : "number",
"description" : "Gain chance by default for all factions"
},
"gainChance" : {
"type" : "object",
"description" : "Chance for this spell to appear in Mage Guild of a specific faction",
"additionalProperties" : {
"type" : "number",
"minimum" : 0
}
},
"targetType" : {
"type" : "string",
"description" : "NO_TARGET - instant cast no aiming, default; CREATURE - target is unit; OBSTACLE - target is OBSTACLE; LOCATION - target is location",
"enum" : ["NO_TARGET","CREATURE","OBSTACLE","LOCATION"]
},
"counters" : {
"$ref" : "#/definitions/flags",
"description" : "Flags structure ids of countering spells"
},
"flags" : {
"type" : "object",
"description" : "Various flags",
"additionalProperties" : false,
"properties" : {
"indifferent" : {
"type" : "boolean",
"description" : "Spell is indifferent for target"
},
"negative" : {
"type" : "boolean",
"description" : "Spell is negative for target"
},
"positive" : {
"type" : "boolean",
"description" : "Spell is positive for target"
},
"damage" : {
"type" : "boolean",
"description" : "Spell does damage (direct or indirect)"
},
"offensive" : {
"type" : "boolean",
"description" : "Spell does direct damage (implicitly sets damage and negative)"
},
"rising" : {
"type" : "boolean",
"description" : "Rising spell (implicitly sets positive)"
},
"special" : {
"type" : "boolean",
"description" : "Special spell. Can be given only by BonusType::SPELL"
},
"nonMagical" : {
"type" : "boolean",
"description" : "Non-magical ability. Usually used by some creatures. Should not be affected by sorcery and generic magic resistance. School resistances apply. Examples: dendroid bind, efreet fire shield."
}
}
},
"immunity" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, any one of these bonus grants immunity"
},
"absoluteImmunity" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names. Any one of these bonus grants immunity, can't be negated"
},
"limit" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, presence of all bonuses required to be affected by."
},
"absoluteLimit" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, presence of all bonuses required to be affected by, can't be negated."
},
"targetCondition" : {
"type" : "object",
"additionalProperties" : true
},
"animation" : {"$ref" : "#/definitions/animation"},
"graphics" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"iconBook" : {
"type" : "string",
"description" : "Resourse path of icon for spellbook" ,
"format" : "imageFile"
},
"iconScroll" : {
"type" : "string",
"description" : "Resourse path of icon for spell scrolls",
"format" : "imageFile"
},
"iconEffect" : {
"type" : "string",
"description" : "Resourse path of icon for spell effects during battle" ,
"format" : "imageFile"
},
"iconImmune" : {
"type" : "string",
"description" : "Resourse path of icon for SPELL_IMMUNITY bonus (relative to DATA or SPRITES)",
"format" : "imageFile"
},
"iconScenarioBonus" : {
"type" : "string",
"description" : "Resourse path of icon for scenario bonus" ,
"format" : "imageFile"
}
}
},
"sounds" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"cast" : {
"type" : "string",
"description" : "Resourse path of cast sound"
}
}
},
"levels" : {
"type" : "object",
"additionalProperties" : false,
"required" : ["none", "basic", "advanced", "expert"],
"properties" : {
"base" : {
"type" : "object",
"description" : "will be merged with all levels",
"additionalProperties" : true
},
"none" : {
"$ref" : "#/definitions/levelInfo"
},
"basic" : {
"$ref" : "#/definitions/levelInfo"
},
"advanced" : {
"$ref" : "#/definitions/levelInfo"
},
"expert" : {
"$ref" : "#/definitions/levelInfo"
}
}
},
"onlyOnWaterMap" : {
"type" : "boolean",
"description" : "If true, spell won't be available on a map without water"
}
}
}
{
"type" : "object",
"$schema" : "http://json-schema.org/draft-04/schema",
"title" : "VCMI spell format",
"description" : "Format used to define new spells in VCMI",
"definitions" : {
"animationQueue" : {
"type" : "array",
"items" : {
"anyOf" :[
{
//dummy animation, pause, Value - frame count
"type" : "number"
},
{
//assumed verticalPosition: top
"type" : "string",
"format" : "defFile"
},
{
"type" : "object",
"properties" : {
"verticalPosition" : {"type" : "string", "enum" :["top","bottom"]},
"defName" : {"type" : "string", "format" : "defFile"},
"effectName" : { "type" : "string" }
},
"additionalProperties" : false
}
]
}
},
"animation" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"affect" : {"$ref" : "#/definitions/animationQueue"},
"hit" : {"$ref" : "#/definitions/animationQueue"},
"cast" : {"$ref" : "#/definitions/animationQueue"},
"projectile" : {
"type" : "array",
"items" : {
"type" : "object",
"properties" : {
"defName" : {"type" : "string", "format" : "defFile"},
"minimumAngle" : {"type" : "number", "minimum" : 0}
},
"additionalProperties" : false
}
}
}
},
"flags" : {
"type" : "object",
"additionalProperties" : {
"type" : "boolean"
}
},
"levelInfo" : {
"type" : "object",
"required" :["range", "description", "cost", "power", "aiValue"],
"additionalProperties" : false,
"properties" : {
"description" : {
"type" : "string",
"description" : "Localizable description. Use {xxx} for formatting"
},
"cost" : {
"type" : "number",
"description" : "Cost in mana points"
},
"power" : {
"type" : "number"
},
"range" : {
"type" : "string",
"description" : "spell range description in SRSL"
},
"aiValue" : {
"type" : "number"
},
"effects" : {
"type" : "object",
"description" : "Timed effects (updated by prolongation)",
"additionalProperties" : {
"$ref" : "bonus.json"
}
},
"cumulativeEffects" : {
"type" : "object",
"description" : "Timed effects (updated by unique bonus)",
"additionalProperties" : {
"$ref" : "bonus.json"
}
},
"battleEffects" : {
"type" : "object",
"additionalProperties" : {
"type" : "object"
}
},
"targetModifier" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"smart" : {
"type" : "boolean",
"description" : "true: friendly/hostile based on positiveness; false: all targets"
},
"clearTarget" :
{
"type" : "boolean",
"description" : "LOCATION target only. Target hex/tile must be clear"
},
"clearAffected" :
{
"type" : "boolean",
"description" : "LOCATION target only. All affected hexes/tile must be clear"
}
}
}
}
},
"texts" : {
"type" : "object",
"additionalProperties" : false
}
},
"required" : ["type", "name", "school", "level", "power","gainChance","flags","levels"],
"additionalProperties" : false,
"properties" : {
"index" : {
"type" : "number",
"description" : "numeric id of spell required only for original spells, prohibited for new spells"
},
"name" : {
"type" : "string",
"description" : "Localizable name of this spell"
},
"type" : {
"type" : "string",
"enum" : ["adventure", "combat", "ability"],
"description" : "Spell type"
},
"school" : {
"type" : "object",
"description" : "List of spell schools this spell belongs to",
"additionalProperties" : false,
"properties" : {
"air" : {"type" : "boolean"},
"fire" : {"type" : "boolean"},
"earth" : {"type" : "boolean"},
"water" : {"type" : "boolean"}
}
},
"level" : {
"type" : "number",
"description" : "Spell level",
"minimum" : 0,
"maximum" : 5
},
"power" : {
"type" : "number",
"description" : "Base power of the spell"
},
"defaultGainChance" : {
"type" : "number",
"description" : "Gain chance by default for all factions"
},
"gainChance" : {
"type" : "object",
"description" : "Chance for this spell to appear in Mage Guild of a specific faction",
"additionalProperties" : {
"type" : "number",
"minimum" : 0
}
},
"targetType" : {
"type" : "string",
"description" : "NO_TARGET - instant cast no aiming, default; CREATURE - target is unit; OBSTACLE - target is OBSTACLE; LOCATION - target is location",
"enum" : ["NO_TARGET","CREATURE","OBSTACLE","LOCATION"]
},
"counters" : {
"$ref" : "#/definitions/flags",
"description" : "Flags structure ids of countering spells"
},
"flags" : {
"type" : "object",
"description" : "Various flags",
"additionalProperties" : false,
"properties" : {
"indifferent" : {
"type" : "boolean",
"description" : "Spell is indifferent for target"
},
"negative" : {
"type" : "boolean",
"description" : "Spell is negative for target"
},
"positive" : {
"type" : "boolean",
"description" : "Spell is positive for target"
},
"damage" : {
"type" : "boolean",
"description" : "Spell does damage (direct or indirect)"
},
"offensive" : {
"type" : "boolean",
"description" : "Spell does direct damage (implicitly sets damage and negative)"
},
"rising" : {
"type" : "boolean",
"description" : "Rising spell (implicitly sets positive)"
},
"special" : {
"type" : "boolean",
"description" : "Special spell. Can be given only by BonusType::SPELL"
},
"nonMagical" : {
"type" : "boolean",
"description" : "Non-magical ability. Usually used by some creatures. Should not be affected by sorcery and generic magic resistance. School resistances apply. Examples: dendroid bind, efreet fire shield."
}
}
},
"immunity" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, any one of these bonus grants immunity"
},
"absoluteImmunity" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names. Any one of these bonus grants immunity, can't be negated"
},
"limit" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, presence of all bonuses required to be affected by."
},
"absoluteLimit" : {
"$ref" : "#/definitions/flags",
"description" : "flags structure of bonus names, presence of all bonuses required to be affected by, can't be negated."
},
"targetCondition" : {
"type" : "object",
"additionalProperties" : true
},
"animation" : {"$ref" : "#/definitions/animation"},
"graphics" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"iconBook" : {
"type" : "string",
"description" : "Resourse path of icon for spellbook" ,
"format" : "imageFile"
},
"iconScroll" : {
"type" : "string",
"description" : "Resourse path of icon for spell scrolls",
"format" : "imageFile"
},
"iconEffect" : {
"type" : "string",
"description" : "Resourse path of icon for spell effects during battle" ,
"format" : "imageFile"
},
"iconImmune" : {
"type" : "string",
"description" : "Resourse path of icon for SPELL_IMMUNITY bonus (relative to DATA or SPRITES)",
"format" : "imageFile"
},
"iconScenarioBonus" : {
"type" : "string",
"description" : "Resourse path of icon for scenario bonus" ,
"format" : "imageFile"
}
}
},
"sounds" : {
"type" : "object",
"additionalProperties" : false,
"properties" : {
"cast" : {
"type" : "string",
"description" : "Resourse path of cast sound"
}
}
},
"levels" : {
"type" : "object",
"additionalProperties" : false,
"required" : ["none", "basic", "advanced", "expert"],
"properties" : {
"base" : {
"type" : "object",
"description" : "will be merged with all levels",
"additionalProperties" : true
},
"none" : {
"$ref" : "#/definitions/levelInfo"
},
"basic" : {
"$ref" : "#/definitions/levelInfo"
},
"advanced" : {
"$ref" : "#/definitions/levelInfo"
},
"expert" : {
"$ref" : "#/definitions/levelInfo"
}
}
},
"onlyOnWaterMap" : {
"type" : "boolean",
"description" : "If true, spell won't be available on a map without water"
}
}
}