Difference between revisions of "Object instance format"

From VCMI Project Wiki
Jump to: navigation, search
m (Pandoras box)
(Hero)
 
(102 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
Part of [[Map format]]
 +
 
= Base formats =  
 
= Base formats =  
 
== Owner format ==
 
== Owner format ==
All ownable objects
+
* editor {{done}}
 +
* engine {{done}}
 +
 
 +
All flaggable objects
 +
 
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 11: Line 17:
  
 
== Stack instance format ==
 
== Stack instance format ==
 +
* editor {{done}}
 +
* engine {{done}}
 +
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
"amount" : 1,
+
"amount" : 1,  
 
"type" : "skeleton",
 
"type" : "skeleton",
 +
"level": 1, //optional, for random objects
 +
"upgraded": true  //optional, for random objects
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Army format ==
 
== Army format ==
 +
* editor {{done}}
 +
* engine {{done}}
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
[
 
[
Line 28: Line 41:
  
 
== Quest format ==
 
== Quest format ==
 +
* editor {{done}}
 +
* engine {{done}}
 +
 +
<syntaxhighlight lang="javascript">
 +
{
 +
"artifacts" : [],
 +
"completedText" : "",
 +
"creatures" : [], //army format
 +
"firstVisitText" : "",
 +
"hero" : "",
 +
"heroLevel" : -1,
 +
"killTarget" : "monster_666",
 +
"missionType" : "KillCreature",//None, Level, PrimaryStat, KillHero, KillCreature, Artifact, Army, Resources, Hero, Player, Custom
 +
"nextVisitText" : "",
 +
"player" : "",
 +
"primarySkills" : {
 +
"attack" : 10,
 +
"defence" : 10,
 +
//"knowledge" : -1,
 +
//"spellpower" : -1
 +
},
 +
"resources" : {
 +
"crystal" : 0,
 +
"gems" : 0,
 +
"gold" : 0,
 +
"mercury" : 0,
 +
"mithril" : 0,
 +
"ore" : 0,
 +
"sulfur" : 0,
 +
"wood" : 0
 +
},
 +
"timeLimit" : 5,
 +
"custom_x" :{<Quest format v2>}
 +
}
 +
</syntaxhighlight>
 +
 +
== Quest format 2 ==
 +
''Proposed extension''
 +
 +
Logical condition based.
 +
 +
* editor {{todo}}
 +
* engine {{todo}}
 +
<syntaxhighlight lang="javascript">
 +
{
 +
//TODO:
 +
}
 +
</syntaxhighlight>
 +
 +
== Reward format ==
 +
''Proposed extension''
 +
 +
* editor {{done}}
 +
* engine {{todo}}
 +
** seer hut case {{done}}
 +
 +
identifier = [scope ":"] type ["." subtype]
 +
 +
Possible types
 +
* artifact
 +
* creature
 +
* resource
 +
* primarySkill
 +
* secondarySkill
 +
* spell
 +
* luck
 +
* morale
 +
* mana
 +
* movement
 +
 +
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
"army" : [
+
"resource.gold" : 1000,
],
+
"morale" : -1,
"artifacts" : [
+
"wog:creature.supremeArchangel" : 9999
],
+
//...
"completedText" : "",
 
"firstVisitText" : "",
 
"hero" : "",
 
"heroLevel" : -1,
 
"killTarget" : {
 
"l" : 0,
 
"x" : 17,
 
"y" : 4,
 
"subType" : "",
 
"type" : "monster"
 
},
 
"missionType" : "KillCreature",
 
"nextVisitText" : "",
 
"player" : "",
 
"primarySkills" : {
 
"attack" : -1,
 
"defence" : -1,
 
"knowledge" : -1,
 
"spellpower" : -1
 
},
 
"resources" : {
 
"crystal" : 0,
 
"gems" : 0,
 
"gold" : 0,
 
"mercury" : 0,
 
"mithril" : 0,
 
"ore" : 0,
 
"sulfur" : 0,
 
"wood" : 0
 
},
 
"timeLimit" : -1
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 71: Line 124:
  
 
== Abandoned mine  ==
 
== Abandoned mine  ==
* engine {{todo}}
 
 
* editor {{done}}
 
* editor {{done}}
 +
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 88: Line 141:
  
 
== Artifact ==
 
== Artifact ==
{{todo}}
+
* editor {{done}}
 
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 102: Line 155:
  
 
== Garrison ==
 
== Garrison ==
{{todo}}
+
* editor {{done}}
 +
* engine {{done}}
 +
 
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
Line 112: Line 167:
  
 
== Grail ==
 
== Grail ==
 +
* engine {{done}}
 
* editor {{done}}
 
* editor {{done}}
* engine {{todo}}
+
 
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
Line 121: Line 177:
  
 
== Hero ==
 
== Hero ==
{{todo}}
+
* also prison and random hero
 +
 
 +
* editor {{done}}
 +
* engine {{done}}
  
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
"army" : <Army format>
+
"army" : <Army format>
,
+
,
"artifacts" : {
+
"artifacts" : {
"backpack" : [
+
"backpack" : [
],
+
],
"feet" : "",
+
"feet" : "",
"head" : "",
+
"head" : "",
"leftHand" : "",
+
"leftHand" : "",
"leftRing" : "",
+
"leftRing" : "",
"mach1" : "",
+
"mach1" : "",
"mach2" : "",
+
"mach2" : "",
"mach3" : "",
+
"mach3" : "",
"mach4" : "",
+
"mach4" : "",
"misc1" : "",
+
"misc1" : "",
"misc2" : "",
+
"misc2" : "",
"misc3" : "",
+
"misc3" : "",
"misc4" : "",
+
"misc4" : "",
"misc5" : "",
+
"misc5" : "",
"neck" : "",
+
"neck" : "",
"rightHand" : "",
+
"rightHand" : "",
"rightRing" : "",
+
"rightRing" : "",
"shoulders" : "",
+
"shoulders" : "",
"spellbook" : "",
+
"spellbook" : "",
"torso" : ""
+
"torso" : ""
},
+
},
"biography" : "",
+
"biography" : "",
"experience" : 0,
+
"experience" : 0,
"type" : "galthran",
+
"name" : "",
+
//any type for prison, must match object subtype for hero, not used for random hero
 +
"type" : "galthran",
 +
"name" : "My hero",
  
//optional default none
+
//optional default - patrol disabled. 0 - stand still, > 0 - patrol radius it tiles
"patrolRadius" : 5,
+
"patrolRadius" : 5,
 
 
//optionale hero id
+
//optional, icon index (from "Portraits[Large|Small].json" ) or another hero id, default from "type"
"portrait" : "",
+
"portrait" : "izra",  
 +
 
 +
//TODO: custom portaits
 
 
//optional default inherited from configuration
+
//optional default inherited from configuration
"primarySkills" : {
+
"primarySkills" : {
"attack" : 0,
+
"attack" : 0,
"defence" : 2,
+
"defence" : 2,
"knowledge" : 0,
+
"knowledge" : 0,
"spellpower" : 3
+
"spellpower" : 3
},
+
},
"secondarySkills" : {
+
"leadership" : 3
+
"secondarySkills" : {
//...
+
"leadership" : "basic"//, "advanced", "expert"
},
+
//...
//optional, default if not set, female, male
+
},
"sex" : "",
+
 
"spellBook" : [
+
//optional, default if not set
"fortune"
+
"female" : true,//false
//...
+
"spellBook" : [
],
+
"fortune"
"tightFormation" : false
+
//...
 +
],
 +
"tightFormation" : false
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 187: Line 252:
  
 
== Event ==
 
== Event ==
{{todo}}
+
* editor {{done}}
 +
* engine {{done}}
 +
 
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
Line 206: Line 273:
 
"creatures" : [
 
"creatures" : [
 
{
 
{
"creCount" : 1,
+
"amount" : 1,
"creID" : "phoenix",
+
"&type" : "phoenix"
"randomCount" : false
 
 
}
 
}
 
],
 
],
Line 240: Line 306:
 
"spells" : [
 
"spells" : [
 
"protectFire"
 
"protectFire"
]
+
],
 +
"reward_x" : {}//reward format
  
 
}
 
}
Line 247: Line 314:
 
== Lighthouse ==
 
== Lighthouse ==
 
See owner format
 
See owner format
 +
 +
* editor {{done}}
 +
* engine {{done}}
  
 
== Mine==
 
== Mine==
See owner format
 
  
{{todo}} editor army support
+
* editor {{done}}
 +
* engine {{done}}
 +
 
 +
<syntaxhighlight lang="javascript">
 +
{
 +
"army" : [], //army format
 +
"owner" : ""
 +
}
 +
</syntaxhighlight>
  
 
== Monster ==
 
== Monster ==
* editor support {{done}}
+
* editor {{done}}
* engine support {{todo}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
 
//mandatory
 
//mandatory
"character" : 2,
+
"character" : "compliant",// friendly, aggressive, hostile, savage
  
//required if randomCount is false
+
//default random
"count" : 19,
+
"amount" : 19,
 
 
 
//optional, default false
 
//optional, default false
Line 288: Line 365:
 
"sulfur" : 0,
 
"sulfur" : 0,
 
"wood" : 0
 
"wood" : 0
}
+
},
 +
"reward_x" : {}//reward format
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Ocean bottle ==
+
== Sign/Ocean bottle ==
  
 
* editor {{done}}
 
* editor {{done}}
* engine {{todo}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 304: Line 382:
  
 
== Pandoras box ==
 
== Pandoras box ==
{{todo}}
+
* editor {{done}}
 +
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 311: Line 390:
 
"powerOfTheDragonFather"
 
"powerOfTheDragonFather"
 
],
 
],
"creatures" : [
+
"creatures" : [], //army format
{
 
"creCount" : 99,
 
"creID" : "angel"
 
},
 
{
 
"creCount" : 1,
 
"creID" : "archangel"
 
}
 
],
 
 
"experience" : 1000000,
 
"experience" : 1000000,
 
"guardMessage" : "Prepare to fight...",
 
"guardMessage" : "Prepare to fight...",
Line 344: Line 414:
 
},
 
},
 
"secondarySkills" : {
 
"secondarySkills" : {
"logistics" : 1
+
"logistics" : "basic"//, "advanced", "expert"
 
},
 
},
 
"spells" : [
 
"spells" : [
 
"townPortal"
 
"townPortal"
]
+
],
 +
"reward_x" : {}//reward format
  
 
}
 
}
Line 354: Line 425:
  
 
== Quest guard ==
 
== Quest guard ==
{{todo}}
+
* editor {{done}}
 +
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 364: Line 436:
 
== Random dwelling ==
 
== Random dwelling ==
 
* editor {{done}}
 
* editor {{done}}
* engine {{todo}}
+
* engine {{done}}
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
"allowedFactions" : [
+
"allowedFactions" :{<logical id condition>},
"castle",
+
"maxLevel" : 7,
"conflux",
+
"minLevel" : 1,
"dungeon",
+
"sameAsTown" : "town_42"
"fortress",
 
"inferno",
 
"necropolis",
 
"neutral",
 
"rampart",
 
"stronghold",
 
"tower"
 
],
 
"linked" : true,
 
"maxLevel" : 6,
 
"minLevel" : 0,
 
"sameAsTown" : {
 
"l" : 1,
 
"x" : 43,
 
"y" : 14,
 
"subType" : "",
 
"type" : "town"
 
}
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Resource ==
 
== Resource ==
{{todo}}
+
* editor {{done}}
 +
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 405: Line 460:
 
== Scholar ==
 
== Scholar ==
 
* editor {{done}}
 
* editor {{done}}
* engine {{todo}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 412: Line 467:
 
"rewardSkill" : "wisdom",
 
"rewardSkill" : "wisdom",
 
"rewardSpell" : "",
 
"rewardSpell" : "",
 +
"reward_x" : {}//reward format
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
== Seer hut ==
 
== Seer hut ==
* editor {{todo}}
+
* editor {{done}}
* engine {{todo}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
 
"quest" : {}, //quest format
 
"quest" : {}, //quest format
"reward" : "",
+
"reward" : {}//reward format
"rewardType" : "experience",
 
"rewardValue" : 9999
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 430: Line 484:
 
== Shipyard ==
 
== Shipyard ==
 
See owner format
 
See owner format
 +
 +
* editor {{done}}
 +
* engine {{done}}
  
 
== Shrine of magic ==
 
== Shrine of magic ==
* engine support {{todo}}
+
* editor {{done}}
* editor support {{done}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
Line 443: Line 500:
  
 
== Spell scroll ==
 
== Spell scroll ==
{{todo}}
+
* engine {{done}}
 +
* editor {{done}}
 +
 
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
"guardMessage" : "",
 
"guardMessage" : "",
Line 452: Line 511:
  
 
== Town ==
 
== Town ==
{{todo}}
+
* engine {{done}}
 +
* editor {{done}}
 +
 
 +
* castle events {{todo}}
 +
 
 +
<syntaxhighlight lang="javascript">
 +
"army" : [], //army format
 +
"tightFormation" : false
 +
 
 +
"name" : "",
 +
"buildings" : {<Logical Id Condition>}
 +
"spells" : {<Logical Id Condition>}
 +
 
 +
"events" : nil, //TODO
 +
 
 +
}
 +
</syntaxhighlight>
  
 
== Witch hut ==
 
== Witch hut ==
 
* editor {{done}}
 
* editor {{done}}
* engine {{todo}}
+
* engine {{done}}
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">
 
{
 
{
"allowedSkills" : [
+
"allowedSkills" : {<Logical Id Condition>}
"airMagic",
 
"archery",
 
"armorer",
 
"artillery",
 
"ballistics",
 
"diplomacy",
 
"eagleEye",
 
"earthMagic"
 
]
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 20:26, 24 December 2016

Part of Map format

Base formats

Owner format

  • editor [Done]
  • engine [Done]

All flaggable objects


{
	//optional, default neutral
	"owner": "red"
}

Stack instance format

  • editor [Done]
  • engine [Done]
{
	"amount" : 1, 
	"type" : "skeleton",
	"level": 1, //optional, for random objects
	"upgraded": true  //optional, for random objects
}

Army format

  • editor [Done]
  • engine [Done]
[
  {< Stack instance format>}, 
  {}
  //...
]

Quest format

  • editor [Done]
  • engine [Done]
{
	"artifacts" : [],
	"completedText" : "",
	"creatures" : [], //army format
	"firstVisitText" : "",
	"hero" : "",
	"heroLevel" : -1,
	"killTarget" : "monster_666",
	"missionType" : "KillCreature",//None, Level, PrimaryStat, KillHero, KillCreature, Artifact, Army, Resources, Hero, Player, Custom
	"nextVisitText" : "",
	"player" : "",
	"primarySkills" : {
		"attack" : 10,
		"defence" : 10,
		//"knowledge" : -1,
		//"spellpower" : -1
	},
	"resources" : {
		"crystal" : 0,
		"gems" : 0,
		"gold" : 0,
		"mercury" : 0,
		"mithril" : 0,
		"ore" : 0,
		"sulfur" : 0,
		"wood" : 0
	},
	"timeLimit" : 5,
	"custom_x" :{<Quest format v2>}
}

Quest format 2

Proposed extension

Logical condition based.

  • editor [Todo]
  • engine [Todo]
{
//TODO:
}

Reward format

Proposed extension

  • editor [Done]
  • engine [Todo]
    • seer hut case [Done]

identifier = [scope ":"] type ["." subtype]

Possible types

  • artifact
  • creature
  • resource
  • primarySkill
  • secondarySkill
  • spell
  • luck
  • morale
  • mana
  • movement


{
	"resource.gold" : 1000,
 	"morale" : -1,
 	"wog:creature.supremeArchangel" : 9999
//...
}

OH3 objects

Abandoned mine

  • editor [Done]
  • engine [Done]
{
	"possibleResources" : [
		"crystal",
		"gems",
		"gold",
		"mercury",
		"ore",
		"sulfur"
	]
}

Artifact

  • editor [Done]
  • engine [Done]
{
	"guardMessage" : "",
	"guards" : []//Army format	
}

Creature generator

See owner format

Garrison

  • editor [Done]
  • engine [Done]
{
	"army" : [], //army format
	"owner" : "",
	"removableUnits" : true
}

Grail

  • engine [Done]
  • editor [Done]
{
	"radius" : 0
}

Hero

  • also prison and random hero
  • editor [Done]
  • engine [Done]


{
	"army" : <Army format>
	,
	"artifacts" : {
		"backpack" : [
		],
		"feet" : "",
		"head" : "",
		"leftHand" : "",
		"leftRing" : "",
		"mach1" : "",
		"mach2" : "",
		"mach3" : "",
		"mach4" : "",
		"misc1" : "",
		"misc2" : "",
		"misc3" : "",
		"misc4" : "",
		"misc5" : "",
		"neck" : "",
		"rightHand" : "",
		"rightRing" : "",
		"shoulders" : "",
		"spellbook" : "",
		"torso" : ""
	},
	"biography" : "",
	"experience" : 0,
	
	//any type for prison, must match object subtype for hero, not used for random hero
	"type" : "galthran",
	"name" : "My hero",

	//optional default - patrol disabled. 0 - stand still, > 0 - patrol radius it tiles
	"patrolRadius" : 5,
			
	//optional, icon index (from "Portraits[Large|Small].json" ) or another hero id, default from "type"
	"portrait" : "izra", 

	//TODO: custom portaits
			
	//optional default inherited from configuration
	"primarySkills" : {
		"attack" : 0,
		"defence" : 2,
		"knowledge" : 0,
		"spellpower" : 3
	},
			
	"secondarySkills" : {
		"leadership" : "basic"//, "advanced", "expert"
		//...
	},

	//optional, default if not set
	"female" : true,//false
	"spellBook" : [
		"fortune"
		//...
	],
	"tightFormation" : false
}

Hero placeholder

[Todo]

Event

  • editor [Done]
  • engine [Done]
{
	"aIActivable" : false,
	"artifacts" : [
		"swordOfHellfire"
	],
	"availableFor" : [
		"red",
		"blue",
		"tan",
		"green",
		"orange",
		"purple",
		"teal",
		"pink"
	],
	"creatures" : [
		{
			"amount" : 1,
			"&type" : "phoenix"
		}
	],
	"experience" : 1,
	"guardMessage" : "...",
	"guards" : [],//army format
	"humanActivable" : true,
	"luck" : -1,
	"mana" : -1,
	"morale" : -1,
	"primarySkills" : {
		"attack" : 1,
		"defence" : 1,
		"knowledge" : 1,
		"spellpower" : 1
	},
	"removeAfterVisit" : true,
	"resources" : {
		"crystal" : -1,
		"gems" : -1,
		"gold" : -1,
		"mercury" : -1,
		"mithril" : 0,
		"ore" : -1,
		"sulfur" : -1,
		"wood" : -1
	},
	"secondarySkills" : {
		"fireMagic" : 1
	},
	"spells" : [
		"protectFire"
	],
	"reward_x" : {}//reward format

}

Lighthouse

See owner format

  • editor [Done]
  • engine [Done]

Mine

  • editor [Done]
  • engine [Done]
{
	"army" : [], //army format
	"owner" : ""
}

Monster

  • editor [Done]
  • engine [Done]
{
	//mandatory
	"character" : "compliant",// friendly, aggressive, hostile, savage

	//default random
	"amount" : 19,
	
	//optional, default false
	"noGrowing" : true

	//optional, default false
	"neverFlees" : false,

	//optional, artifact id
	"rewardArtifact" : "",

	//optional,
	"rewardMessage" : "",

	//all fields optional
	"rewardResources" : {
	
		"crystal" : 0,
		"gems" : 0,
		"gold" : 0,
		"mercury" : 0,
		"mithril" : 0,
		"ore" : 0,
		"sulfur" : 0,
		"wood" : 0
	},
	"reward_x" : {}//reward format
}

Sign/Ocean bottle

  • editor [Done]
  • engine [Done]
{
	"text": "Hello world!!!1111"
}

Pandoras box

  • editor [Done]
  • engine [Done]
{
	"artifacts" : [
		"powerOfTheDragonFather"
	],
	"creatures" : [], //army format
	"experience" : 1000000,
	"guardMessage" : "Prepare to fight...",
	"guards" : [], //army format
	"luck" : 2,
	"mana" : 100,
	"morale" : 2,
	"primarySkills" : {
		"attack" : 1,
		"defence" : 1,
		"knowledge" : 1,
		"spellpower" : 1
	},
	"resources" : {
		"crystal" : -1,
		"gems" : -1,
		"gold" : -1,
		"mercury" : -1,
		"mithril" : 0,
		"ore" : -1,
		"sulfur" : -1,
		"wood" : -1
	},
	"secondarySkills" : {
		"logistics" : "basic"//, "advanced", "expert"
	},
	"spells" : [
		"townPortal"
	],
	"reward_x" : {}//reward format

}

Quest guard

  • editor [Done]
  • engine [Done]
{
	"quest" : {} //quest format
}

Random dwelling

  • editor [Done]
  • engine [Done]
{
	"allowedFactions" :{<logical id condition>},
	"maxLevel" : 7,
	"minLevel" : 1,
	"sameAsTown" : "town_42"
}

Resource

  • editor [Done]
  • engine [Done]
{
	"amount" : 99999,
	"guardMessage" : "",
	"guards" : [] //army format
}

Scholar

  • editor [Done]
  • engine [Done]
{
	"rewardPrimSkill" : "",
	"rewardSkill" : "wisdom",
	"rewardSpell" : "",
	"reward_x" : {}//reward format
}

Seer hut

  • editor [Done]
  • engine [Done]
{
	"quest" : {}, //quest format
	"reward" : {}//reward format
}

Shipyard

See owner format

  • editor [Done]
  • engine [Done]

Shrine of magic

  • editor [Done]
  • engine [Done]
{
	//optional, random spell if not set
	"spell" : ""
}

Spell scroll

  • engine [Done]
  • editor [Done]
	"guardMessage" : "",
	"guards" : [], //army format
	"spell" : "magicArrow"
}

Town

  • engine [Done]
  • editor [Done]
  • castle events [Todo]
	"army" : [], //army format
	"tightFormation" : false

	"name" : "", 
	"buildings" : {<Logical Id Condition>}
	"spells" : {<Logical Id Condition>}

	"events" : nil, //TODO

}

Witch hut

  • editor [Done]
  • engine [Done]
{
	"allowedSkills" : {<Logical Id Condition>}
}