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

Large changeset, first part of editing H3 objects via mods feature. Changes:

- loading of all objects (including H3 objects) will be directed by mod handlers
- common base for all handlers accessible from mod system (IHanderBase)
- json format changes: use struct with string ID's instead of vector

- fixed some gcc/clang errors and warnings
- fixed several cases of memory leaks and invalid memory access (mostly related to usage of bonus system and/or identifiers resolution)

Note that right now loading is much slower than before due to excessive json validation (or not fast enough validator)
This commit is contained in:
Ivan Savenko
2013-04-21 12:49:26 +00:00
parent 8a4f81b981
commit c6cc6e6301
85 changed files with 4714 additions and 4441 deletions

View File

@@ -74,46 +74,46 @@
"capitol" : "AVCFORZ0.DEF"
},
"structures" :
[
{ "animation" : "TBFREXT2.def", "x" : 372, "y" : 227 },
{ "id" : 0, "animation" : "TBFRMAGE.def", "x" : 0, "y" : 200, "z" : -1, "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" },
{ "id" : 1, "animation" : "TBFRMAG2.def", "x" : 0, "y" : 177, "z" : -1, "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" },
{ "id" : 2, "animation" : "TBFRMAG3.def", "x" : 0, "y" : 135, "z" : -1, "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" },
{ "id" : 5, "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3, "border" : "TOFTAVA.bmp", "area" : "TZFTAVA.bmp" },
{ "id" : 6, "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "border" : "TOFDCK2.bmp", "area" : "TZFDCK2.bmp" },
{ "id" : 7, "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -1, "border" : "TOFCAS1.bmp", "area" : "TZFCAS1.bmp" },
{ "id" : 8, "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98, "z" : -1, "border" : "TOFCAS2.bmp", "area" : "TZFCAS2.bmp" },
{ "id" : 9, "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55, "z" : -1, "border" : "TOFCAS3.bmp", "area" : "TZFCAS3.bmp" },
{ "id" : 10, "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 1, "border" : "TOFHAL1.bmp", "area" : "TZFHAL1.bmp" },
{ "id" : 11, "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97, "z" : 1, "border" : "TOFHAL2.bmp", "area" : "TZFHAL2.bmp" },
{ "id" : 12, "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51, "z" : 1, "border" : "TOFHAL3.bmp", "area" : "TZFHAL3.bmp" },
{ "id" : 13, "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2, "z" : 1, "border" : "TOFHAL4.bmp", "area" : "TZFHAL4.bmp" },
{ "id" : 14, "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4, "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" },
{ "id" : 15, "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2, "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" },
{ "id" : 16, "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "border" : "TOFAIDA.bmp", "area" : "TZFAIDA.bmp" },
{ "id" : 17, "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36, "border" : "TOFCAGE.bmp", "area" : "TZFCAGE.bmp" },
{ "id" : 18, "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1, "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true },
{ "id" : 19, "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68, "z" : 1, "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : 18 },
{ "id" : 20, "animation" : "TBFRBOAT.def", "x" : 197, "y" : 294, "z" : 1, "border" : "TOFDCK1.bmp", "area" : "TZFDCK1.bmp", "hidden" : true },
{ "id" : 21, "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "border" : "TOFCASD.bmp", "area" : "TZFCASD.bmp" },
{ "id" : 22, "animation" : "TBFREXT1.def", "x" : 349, "y" : 79, "z" : -2, "border" : "TOFCASA.bmp", "area" : "TZFCASA.bmp" },
{ "id" : 26, "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5, "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" },
{ "id" : 29, "animation" : "TBFRWTRW.def", "x" : 320, "y" : 141 },
{ "id" : 30, "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1, "border" : "TOFGNL1.bmp", "area" : "TZFGNL1.bmp" },
{ "id" : 31, "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178, "border" : "TOFLIZ1.bmp", "area" : "TZFLIZ1.bmp" },
{ "id" : 32, "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85, "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" },
{ "id" : 33, "animation" : "TBFRDW_4.def", "x" : 0, "y" : 292, "border" : "TOFBAS1.bmp", "area" : "TZFBAS1.bmp" },
{ "id" : 34, "animation" : "TBFRDW_2.def", "x" : 15, "y" : 127, "z" : -2, "border" : "TOFGOR1.bmp", "area" : "TZFGOR1.bmp" },
{ "id" : 35, "animation" : "TBFRDW_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV1.bmp", "area" : "TZFWYV1.bmp" },
{ "id" : 36, "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5, "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" },
{ "id" : 37, "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1, "border" : "TOFGNL2.bmp", "area" : "TZFGNL2.bmp" },
{ "id" : 38, "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163, "border" : "TOFLIZ2.bmp", "area" : "TZFLIZ2.bmp" },
{ "id" : 39, "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19, "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" },
{ "id" : 40, "animation" : "TBFRUP_4.def", "x" : 0, "y" : 257, "border" : "TOFBAS2.bmp", "area" : "TZFBAS2.bmp" },
{ "id" : 41, "animation" : "TBFRUP_2.def", "x" : 15, "y" : 69, "z" : -2, "border" : "TOFGOR2.bmp", "area" : "TZFGOR2.bmp" },
{ "id" : 42, "animation" : "TBFRUP_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV2.bmp", "area" : "TZFWYV2.bmp" },
{ "id" : 43, "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5, "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" }
],
{
"extraAnimation": { "animation" : "TBFREXT2.def", "x" : 372, "y" : 227 },
"mageGuild1": { "id" : 0, "animation" : "TBFRMAGE.def", "x" : 0, "y" : 200, "z" : -1, "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" },
"mageGuild2": { "id" : 1, "animation" : "TBFRMAG2.def", "x" : 0, "y" : 177, "z" : -1, "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" },
"mageGuild3": { "id" : 2, "animation" : "TBFRMAG3.def", "x" : 0, "y" : 135, "z" : -1, "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" },
"tavern": { "id" : 5, "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3, "border" : "TOFTAVA.bmp", "area" : "TZFTAVA.bmp" },
"shipyard": { "id" : 6, "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "border" : "TOFDCK2.bmp", "area" : "TZFDCK2.bmp" },
"fort": { "id" : 7, "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -1, "border" : "TOFCAS1.bmp", "area" : "TZFCAS1.bmp" },
"citadel": { "id" : 8, "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98, "z" : -1, "border" : "TOFCAS2.bmp", "area" : "TZFCAS2.bmp" },
"castle": { "id" : 9, "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55, "z" : -1, "border" : "TOFCAS3.bmp", "area" : "TZFCAS3.bmp" },
"villageHall": { "id" : 10, "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 1, "border" : "TOFHAL1.bmp", "area" : "TZFHAL1.bmp" },
"townHall": { "id" : 11, "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97, "z" : 1, "border" : "TOFHAL2.bmp", "area" : "TZFHAL2.bmp" },
"cityHall": { "id" : 12, "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51, "z" : 1, "border" : "TOFHAL3.bmp", "area" : "TZFHAL3.bmp" },
"capitol": { "id" : 13, "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2, "z" : 1, "border" : "TOFHAL4.bmp", "area" : "TZFHAL4.bmp" },
"marketplace": { "id" : 14, "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4, "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" },
"resourceSilo": { "id" : 15, "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2, "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" },
"blacksmith": { "id" : 16, "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "border" : "TOFAIDA.bmp", "area" : "TZFAIDA.bmp" },
"special1": { "id" : 17, "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36, "border" : "TOFCAGE.bmp", "area" : "TZFCAGE.bmp" },
"horde1": { "id" : 18, "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1, "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true },
"horde1Upgr": { "id" : 19, "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68, "z" : 1, "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : 18 },
"ship": { "id" : 20, "animation" : "TBFRBOAT.def", "x" : 197, "y" : 294, "z" : 1, "border" : "TOFDCK1.bmp", "area" : "TZFDCK1.bmp", "hidden" : true },
"special2": { "id" : 21, "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "border" : "TOFCASD.bmp", "area" : "TZFCASD.bmp" },
"special3": { "id" : 22, "animation" : "TBFREXT1.def", "x" : 349, "y" : 79, "z" : -2, "border" : "TOFCASA.bmp", "area" : "TZFCASA.bmp" },
"grail": { "id" : 26, "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5, "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" },
"extraCapitol": { "id" : 29, "animation" : "TBFRWTRW.def", "x" : 320, "y" : 141 },
"dwellingLvl1": { "id" : 30, "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1, "border" : "TOFGNL1.bmp", "area" : "TZFGNL1.bmp" },
"dwellingLvl2": { "id" : 31, "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178, "border" : "TOFLIZ1.bmp", "area" : "TZFLIZ1.bmp" },
"dwellingLvl3": { "id" : 32, "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85, "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" },
"dwellingLvl4": { "id" : 33, "animation" : "TBFRDW_4.def", "x" : 0, "y" : 292, "border" : "TOFBAS1.bmp", "area" : "TZFBAS1.bmp" },
"dwellingLvl5": { "id" : 34, "animation" : "TBFRDW_2.def", "x" : 15, "y" : 127, "z" : -2, "border" : "TOFGOR1.bmp", "area" : "TZFGOR1.bmp" },
"dwellingLvl6": { "id" : 35, "animation" : "TBFRDW_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV1.bmp", "area" : "TZFWYV1.bmp" },
"dwellingLvl7": { "id" : 36, "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5, "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" },
"dwellingUpLvl1": { "id" : 37, "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1, "border" : "TOFGNL2.bmp", "area" : "TZFGNL2.bmp" },
"dwellingUpLvl2": { "id" : 38, "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163, "border" : "TOFLIZ2.bmp", "area" : "TZFLIZ2.bmp" },
"dwellingUpLvl3": { "id" : 39, "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19, "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" },
"dwellingUpLvl4": { "id" : 40, "animation" : "TBFRUP_4.def", "x" : 0, "y" : 257, "border" : "TOFBAS2.bmp", "area" : "TZFBAS2.bmp" },
"dwellingUpLvl5": { "id" : 41, "animation" : "TBFRUP_2.def", "x" : 15, "y" : 69, "z" : -2, "border" : "TOFGOR2.bmp", "area" : "TZFGOR2.bmp" },
"dwellingUpLvl6": { "id" : 42, "animation" : "TBFRUP_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV2.bmp", "area" : "TZFWYV2.bmp" },
"dwellingUpLvl7": { "id" : 43, "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5, "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" }
},
"icons" :
{
"village" : {"normal" : 32, "built" : 33 },
@@ -149,49 +149,51 @@
"moatDamage" : 90,
"buildings" :
[
{ "id" : 0 },
{ "id" : 1, "upgrades" : 0 },
{ "id" : 2, "upgrades" : 1 },
{ "id" : 3, "upgrades" : 2 },
{ "id" : 4, "upgrades" : 3 },
{ "id" : 5 },
{ "id" : 6 },
{ "id" : 7 },
{ "id" : 8, "upgrades" : 7 },
{ "id" : 9, "upgrades" : 8 },
{ "id" : 10, "mode" : "auto" },
{ "id" : 11, "upgrades" : 10, "requires" : [ 5 ] },
{ "id" : 12, "upgrades" : 11, "requires" : [ 0, 14, 16 ] },
{ "id" : 13, "upgrades" : 12, "requires" : [ 9 ] },
{ "id" : 14 },
{ "id" : 15, "requires" : [ 14 ] },
{ "id" : 16 },
{ "id" : 17, "requires" : [ 11, 21 ] },
{ "id" : 18, "upgrades" : 30 },
{ "id" : 19, "upgrades" : 37, "requires" : [ 18 ], "mode" : "auto" },
{ "id" : 20, "upgrades" : 6 },
{ "id" : 21, "requires" : [ 7 ] },
{ "id" : 22, "requires" : [ 21 ] },
{ "id" : 26, "mode" : "grail"},
{ "id" : 27, "requires" : [ 11 ], "mode" : "auto" },
{ "id" : 28, "requires" : [ 12 ], "mode" : "auto" },
{ "id" : 29, "requires" : [ 13 ], "mode" : "auto" },
{ "id" : 30, "requires" : [ 7 ] },
{ "id" : 31, "requires" : [ 30 ] },
{ "id" : 32, "requires" : [ 30 ] },
{ "id" : 33, "requires" : [ 32 ] },
{ "id" : 34, "requires" : [ 31, 32 ] },
{ "id" : 35, "requires" : [ 31 ] },
{ "id" : 36, "requires" : [ 33, 35 ] },
{ "id" : 37, "upgrades" : 30, "requires" : [ 5 ] },
{ "id" : 38, "upgrades" : 31 },
{ "id" : 39, "upgrades" : 32 },
{ "id" : 40, "upgrades" : 33 },
{ "id" : 41, "upgrades" : 34, "requires" : [ 15 ] },
{ "id" : 42, "upgrades" : 35 },
{ "id" : 43, "upgrades" : 36 }
],
{
"mageGuild1": { "id" : 0 },
"mageGuild2": { "id" : 1, "upgrades" : 0 },
"mageGuild3": { "id" : 2, "upgrades" : 1 },
"tavern": { "id" : 5 },
"shipyard": { "id" : 6 },
"fort": { "id" : 7 },
"citadel": { "id" : 8, "upgrades" : 7 },
"castle": { "id" : 9, "upgrades" : 8 },
"villageHall": { "id" : 10, "mode" : "auto" },
"townHall": { "id" : 11, "upgrades" : 10, "requires" : [ 5 ] },
"cityHall": { "id" : 12, "upgrades" : 11, "requires" : [ 0, 14, 16 ] },
"capitol": { "id" : 13, "upgrades" : 12, "requires" : [ 9 ] },
"marketplace": { "id" : 14 },
"resourceSilo": { "id" : 15, "requires" : [ 14 ] },
"blacksmith": { "id" : 16 },
"special1": { "id" : 17, "requires" : [ 11, 21 ] },
"horde1": { "id" : 18, "upgrades" : 30 },
"horde1Upgr": { "id" : 19, "upgrades" : 37, "requires" : [ 18 ], "mode" : "auto" },
"ship": { "id" : 20, "upgrades" : 6 },
"special2": { "id" : 21, "requires" : [ 7 ] },
"special3": { "id" : 22, "requires" : [ 21 ] },
"grail": { "id" : 26, "mode" : "grail"},
"extraCapitol": { "id" : 29, "requires" : [ 13 ], "mode" : "auto" },
"dwellingLvl1": { "id" : 30, "requires" : [ 7 ] },
"dwellingLvl2": { "id" : 31, "requires" : [ 30 ] },
"dwellingLvl3": { "id" : 32, "requires" : [ 30 ] },
"dwellingLvl4": { "id" : 33, "requires" : [ 32 ] },
"dwellingLvl5": { "id" : 34, "requires" : [ 31, 32 ] },
"dwellingLvl6": { "id" : 35, "requires" : [ 31 ] },
"dwellingLvl7": { "id" : 36, "requires" : [ 33, 35 ] },
"dwellingUpLvl1": { "id" : 37, "upgrades" : 30, "requires" : [ 5 ] },
"dwellingUpLvl2": { "id" : 38, "upgrades" : 31 },
"dwellingUpLvl3": { "id" : 39, "upgrades" : 32 },
"dwellingUpLvl4": { "id" : 40, "upgrades" : 33 },
"dwellingUpLvl5": { "id" : 41, "upgrades" : 34, "requires" : [ 15 ] },
"dwellingUpLvl6": { "id" : 42, "upgrades" : 35 },
"dwellingUpLvl7": { "id" : 43, "upgrades" : 36 },
"horde2" : null,
"horde2Upgr" : null,
"mageGuild4" : null,
"mageGuild5" : null,
"special4" : null
},
"siege" :
{