Browse Source

Reverting r2327
http://forum.vcmi.eu/viewtopic.php?t=410

Michał W. Urbańczyk 14 years ago
parent
commit
835bd1fbeb
7 changed files with 501 additions and 487 deletions
  1. 5 3
      client/CConfigHandler.cpp
  2. 447 447
      config/heroes.json
  3. 14 4
      lib/CCreatureHandler.cpp
  4. 15 10
      lib/CHeroHandler.cpp
  5. 8 2
      lib/CTownHandler.cpp
  6. 5 15
      lib/JsonNode.cpp
  7. 7 6
      lib/JsonNode.h

+ 5 - 3
client/CConfigHandler.cpp

@@ -121,10 +121,12 @@ static void setButton(ButtonInfo &button, const JsonNode &g)
 	button.playerColoured = g["playerColoured"].Float();
 	button.defName = g["graphic"].String();
 
-	const JsonVector &defs_vec = g["additionalDefs"].Vector();
+	if (!g["additionalDefs"].isNull()) {
+		const JsonVector &defs_vec = g["additionalDefs"].Vector();
 
-	BOOST_FOREACH(const JsonNode &def, defs_vec) {
-		button.additionalDefs.push_back(def.String());
+		BOOST_FOREACH(const JsonNode &def, defs_vec) {
+			button.additionalDefs.push_back(def.String());
+		}
 	}
 }
 

+ 447 - 447
config/heroes.json

@@ -1,880 +1,880 @@
 {
 	// heroes' information.
 	//   id: hero id
-	//   female: true if hero is female, false by default
-	//   skill_set: initial set of secondary abilities (skill ID, initial skil level(1 is default))
+	//   sex: male/female
+	//   skill_set: initial set of secondary abilities (skill ID, initial skil level)
 	//   spell: hero starts with that initial spell
 	"heroes": [
 		{ "id": 0,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 1, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 1, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 1, "info": 0 } ] },
 		{ "id": 1,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 1, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 1, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 2 } ] },
 		{ "id": 2,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 23, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 23, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 4 } ] },
 		{ "id": 3,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 5, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 5, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 2, "subtype": 5, "info": 1 } ] },
 		{ "id": 4,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 13, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 13, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 13, "info": 0 } ] },
 		{ "id": 5,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 6 } ] },
 		{ "id": 6,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 20, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 20, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 7,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 19, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 10 } ] },
 		{ "id": 8,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 27, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 27, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 27, "info": 0 } ] },
 		{ "id": 9,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 41,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 4, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 4, "level": 1 } ],
 		  "specialties": [ { "type":6, "val": 3, "subtype": 41, "info": 0 } ] },
 		{ "id": 10,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 45,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 13, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 13, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 45, "info": 0 } ] },
 		{ "id": 11,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 20,
 		  "skill_set": [ { "skill": 7, "level": 2 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 20, "info": 0 } ] },
 		{ "id": 12,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 42,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 8 } ] },
 		{ "id": 13,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 35,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 0 } ] },
 		{ "id": 14,
 		  "spell": 48,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 21, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 48, "info": 0 } ] },
 		{ "id": 15,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 37,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 16,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 23, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 23, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 23, "info": 0 } ] },
 		{ "id": 17,
-		  "female": false,
-		  "skill_set": [ { "skill": 9, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 9, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 16 } ] },
 		{ "id": 18,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 1, "level": 2 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 19,
-		  "female": false,
-		  "skill_set": [ { "skill": 4, },
-		  			     { "skill": 6, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 4, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 22 } ] },
 		{ "id": 20,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 26, "level": 2 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 26, "info": 0 } ] },
 		{ "id": 21,
-		  "female": false,
-		  "skill_set": [ { "skill": 1, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 1, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 18 } ] },
 		{ "id": 22,
-		  "female": false,
-		  "skill_set": [ { "skill": 0, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 0, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 24 } ] },
 		{ "id": 23,
-		  "female": true,
-		  "skill_set": [ { "skill": 1, },
-		  			     { "skill": 2, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 1, "level": 1 },
+		  			    { "skill": 2, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 2, "info": 0 } ] },
 		{ "id": 24,
 		  "spell": 55,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 18, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 55, "info": 1 } ] },
 		{ "id": 25,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 37,
 		  "skill_set": [ { "skill": 7, "level": 2 },
-		  			     { "skill": 10, } ],
+		  			    { "skill": 10, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 37, "info": 0 } ] },
 		{ "id": 26,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 42,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 24, "info": 0 } ] },
 		{ "id": 27,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 0,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 27, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 27, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 27, "info": 0 } ] },
 		{ "id": 28,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 0 } ] },
 		{ "id": 29,
 		  "spell": 51,
-		  "female": true,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 9, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 9, "level": 1 } ],
 		  "specialties": [ { "type":7, "val": 0, "subtype": 51, "info": 0 } ] },
 		{ "id": 30,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 16,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 16, "info": 0 } ] },
 		{ "id": 31,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 30,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 3, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 3, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 20 } ] },
 		{ "id": 32,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 3, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 3, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 30 } ] },
 		{ "id": 33,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 15,
 		  "skill_set": [ { "skill": 18, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 36 } ] },
 		{ "id": 34,
 		  "spell": 53,
-		  "female": true,
-		  "skill_set": [ { "skill": 8, },
-		  			     { "skill": 25, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 8, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 32 } ] },
 		{ "id": 35,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 18, },
-		  			     { "skill": 23, } ],
+		  "skill_set": [ { "skill": 18, "level": 1 },
+		  			    { "skill": 23, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 23, "info": 0 } ] },
 		{ "id": 36,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 8, },
-		  			     { "skill": 19, } ],
+		  "skill_set": [ { "skill": 8, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 37,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 18, },
-		  			     { "skill": 26, } ],
+		  "skill_set": [ { "skill": 18, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 38 } ] },
 		{ "id": 38,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 8, },
-		  			     { "skill": 22, } ],
+		  "skill_set": [ { "skill": 8, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 1, "subtype": 1, "info": 0 } ] },
 		{ "id": 39,
 		  "spell": 15,
-		  "female": true,
-		  "skill_set": [ { "skill": 18, },
-		  			     { "skill": 24, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 18, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 36 } ] },
 		{ "id": 40,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 60,
 		  "skill_set": [ { "skill": 7, "level": 2 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 60, "info": 0 } ] },
 		{ "id": 41,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 8, "info": 1 } ] },
 		{ "id": 42,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 35,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 0 } ] },
 		{ "id": 43,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 51,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":7, "val": 0, "subtype": 51, "info": 0 } ] },
 		{ "id": 44,
 		  "spell": 27,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 10, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 10, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 34 } ] },
 		{ "id": 45,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 19,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 19, "info": 0 } ] },
 		{ "id": 46,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 4, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 4, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 53, "info": 0 } ] },
 		{ "id": 47,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 42,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 18, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 48,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 3, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 46 } ] },
 		{ "id": 49,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 18, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 52 } ] },
 		{ "id": 50,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 23, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 48 } ] },
 		{ "id": 51,
-		  "female": false,
-		  "skill_set": [ { "skill": 19, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 19, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 42 } ] },
 		{ "id": 52,
-		  "female": true,
-		  "skill_set": [ { "skill": 18, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 18, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 53,
-		  "female": false,
-		  "skill_set": [ { "skill": 1, },
-		  			     { "skill": 3, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 1, "level": 1 },
+		  			    { "skill": 3, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 42 } ] },
 		{ "id": 54,
-		  "female": true,
-		  "skill_set": [ { "skill": 20, },
-		  			     { "skill": 2, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 20, "level": 1 },
+		  			    { "skill": 2, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 55,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 22, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 50 } ] },
 		{ "id": 56,
 		  "spell": 3,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 24, "info": 0 } ] },
 		{ "id": 57,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 22,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 18, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 22, "info": 0 } ] },
 		{ "id": 58,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 30,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 8, "info": 1 } ] },
 		{ "id": 59,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 45,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 10, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 10, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 45, "info": 0 } ] },
 		{ "id": 60,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 21, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 1, "subtype": 3, "info": 0 } ] },
 		{ "id": 61,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 43,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 43, "info": 0 } ] },
 		{ "id": 62,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 63,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 21,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 6, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 21, "info": 0 } ] },
 		{ "id": 64,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 26, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 58 } ] },
 		{ "id": 65,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 20, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 20, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 62 } ] },
 		{ "id": 66,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 54,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 21, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 64 } ] },
 		{ "id": 67,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 19, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 60 } ] },
 		{ "id": 68,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 22, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 66 } ] },
 		{ "id": 69,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
 		  "skill_set": [ { "skill": 12, "level": 2 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 12, "info": 0 } ] },
 		{ "id": 70,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 22, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 71,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 23, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 23, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 56 } ] },
 		{ "id": 72,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 24,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 18, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 24, "info": 0 } ] },
 		{ "id": 73,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 23,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 7, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 7, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 23, "info": 0 } ] },
 		{ "id": 74,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 54,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 75,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 1 } ] },
 		{ "id": 76,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 39,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 39, "subtype": 0, "info": 3 } ] },
 		{ "id": 77,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 21, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 46, "info": 0 } ] },
 		{ "id": 78,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 42,
 		  "skill_set": [ { "skill": 12, "level": 2 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 12, "info": 0 } ] },
 		{ "id": 79,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 30,
-		  "skill_set": [ { "skill": 12, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 12, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 80,
-		  "female": true,
-		  "skill_set": [ { "skill": 3, },
-		  			     { "skill": 6, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 3, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 72 } ] },
 		{ "id": 81,
-		  "female": false,
-		  "skill_set": [ { "skill": 20, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 20, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 82,
-		  "female": false,
-		  "skill_set": [ { "skill": 19, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 19, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 78 } ] },
 		{ "id": 83,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 74 } ] },
 		{ "id": 84,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 22, "level": 2 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 85,
-		  "female": false,
-		  "skill_set": [ { "skill": 2, },
-		  			     { "skill": 19, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 2, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 2, "info": 0 } ] },
 		{ "id": 86,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 18, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 80 } ] },
 		{ "id": 87,
-		  "female": false,
-		  "skill_set": [ { "skill": 19, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 19, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 70 } ] },
 		{ "id": 88,
 		  "spell": 38,
-		  "female": false,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 18, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 18, "level": 1 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 38, "info": 0 } ] },
 		{ "id": 89,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 8, "info": 1 } ] },
 		{ "id": 90,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 43,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 91,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 38,
 		  "skill_set": [ { "skill": 7, "level": 2 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 38, "info": 0 } ] },
 		{ "id": 92,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 54,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 1 } ] },
 		{ "id": 93,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 23,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 3, "level": 2 } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 3, "level": 2 } ],
 		  "specialties": [ { "type":3, "val": 3, "subtype": 23, "info": 0 } ] },
 		{ "id": 94,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 30,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 1, "subtype": 4, "info": 0 } ] },
 		{ "id": 95,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 21, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 46, "info": 0 } ] },
 		{ "id": 96,
-		  "female": false,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 10, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 10, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 94 } ] },
 		{ "id": 97,
-		  "female": false,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 20, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 20, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 98,
-		  "female": false,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 1, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 1, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 88 } ] },
 		{ "id": 99,
-		  "female": true,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 3, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 3, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 92 } ] },
 		{ "id": 100,
-		  "female": true,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 0, } ] },
+		  "sex": 1,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 0, "level": 1 } ] },
 		{ "id": 101,
-		  "female": false,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 84 } ] },
 		{ "id": 102,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 22, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 90 } ] },
 		{ "id": 103,
-		  "female": false,
-		  "skill_set": [ { "skill": 22, },
-		  			     { "skill": 19, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 22, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 22, "info": 0 } ] },
 		{ "id": 104,
 		  "spell": 43,
-		  "female": true,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 86 } ] },
 		{ "id": 105,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 6, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 106,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 2, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 2, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 90 } ] },
 		{ "id": 107,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 19, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 2, "info": 0 } ] },
 		{ "id": 108,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 44,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 20, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 20, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 53, "info": 0 } ] },
 		{ "id": 109,
 		  "spell": 54,
-		  "female": true,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 44, "info": 0 } ] },
 		{ "id": 110,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 30,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 111,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 43,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 26, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 1 } ] },
 		{ "id": 112,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 26, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 26, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 1, "subtype": 5, "info": 0 } ] },
 		{ "id": 113,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 6, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 106 } ] },
 		{ "id": 114,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 1, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 1, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 98 } ] },
 		{ "id": 115,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 23, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 100 } ] },
 		{ "id": 116,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 23, "info": 0 } ] },
 		{ "id": 117,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 0, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 0, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 102 } ] },
 		{ "id": 118,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 20, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 20, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 104 } ] },
 		{ "id": 119,
-		  "female": false,
-		  "skill_set": [ { "skill": 23, },
-		  			     { "skill": 3, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 23, "level": 1 },
+		  			    { "skill": 3, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 146 } ] },
 		{ "id": 120,
 		  "spell": 45,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 7, "level": 2 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 108 } ] },
 		{ "id": 121,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 8, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 8, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 8, "info": 1 } ] },
 		{ "id": 122,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 54,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 5, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 5, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 2, "subtype": 5, "info": 1 } ] },
 		{ "id": 123,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 31,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 27, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 27, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 27, "info": 1 } ] },
 		{ "id": 124,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 21, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 46, "info": 0 } ] },
 		{ "id": 125,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 27,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 25, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 25, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 25, "info": 0 } ] },
 		{ "id": 126,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 35,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 24, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 24, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 24, "info": 0 } ] },
 		{ "id": 127,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 11, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 11, "level": 1 } ],
 		  "specialties": [ { "type":2, "val": 5, "subtype": 11, "info": 1 } ] },
 		{ "id": 128,
-		  "female": true,
-		  "skill_set": [ { "skill": 20, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 20, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 3, "subtype": 1, "info": 120 },
-		  				   { "type":4, "val": 3, "subtype": 2, "info": 120 } ] },
+		  				  { "type":4, "val": 3, "subtype": 2, "info": 120 } ] },
 		{ "id": 129,
-		  "female": true,
-		  "skill_set": [ { "skill": 13, },
-		  			     { "skill": 19, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 13, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 2, "subtype": 1, "info": 113 },
-		  				   { "type":4, "val": 1, "subtype": 2, "info": 113 },
-						   { "type":4, "val": 5, "subtype": 4, "info": 113 } ] },
+		  				  { "type":4, "val": 1, "subtype": 2, "info": 113 },
+						  	 { "type":4, "val": 5, "subtype": 4, "info": 113 } ] },
 		{ "id": 130,
-		  "female": true,
-		  "skill_set": [ { "skill": 20, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 20, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 1, "subtype": 1, "info": 114 },
-		  				   { "type":4, "val": 2, "subtype": 1, "info": 114 },
-						   { "type":4, "val": 2, "subtype": 3, "info": 114 } ] },
+		  				  { "type":4, "val": 2, "subtype": 1, "info": 114 },
+						  	 { "type":4, "val": 2, "subtype": 3, "info": 114 } ] },
 		{ "id": 131,
-		  "female": true,
+		  "sex": 1,
 		  "skill_set": [ { "skill": 19, "level": 2 } ],
 		  "specialties": [ { "type":4, "val": 2, "subtype": 1, "info": 115 } ] },
 		{ "id": 132,
-		  "female": false,
-		  "skill_set": [ { "skill": 2, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 2, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 3, "subtype": 1, "info": 120 },
-		  				   { "type":4, "val": 3, "subtype": 2, "info": 120 } ] },
+		  				  { "type":4, "val": 3, "subtype": 2, "info": 120 } ] },
 		{ "id": 133,
-		  "female": false,
-		  "skill_set": [ { "skill": 13, },
-		  			     { "skill": 19, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 13, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 2, "subtype": 1, "info": 113 },
-		  				   { "type":4, "val": 1, "subtype": 2, "info": 113 },
-						   { "type":4, "val": 5, "subtype": 4, "info": 113 } ] },
+		  				  { "type":4, "val": 1, "subtype": 2, "info": 113 },
+						  	 { "type":4, "val": 5, "subtype": 4, "info": 113 } ] },
 		{ "id": 134,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 22, "level": 2 } ],
 		  "specialties": [ { "type":4, "val": 1, "subtype": 1, "info": 114 },
-		  				   { "type":4, "val": 2, "subtype": 1, "info": 114 },
-						   { "type":4, "val": 2, "subtype": 3, "info": 114 } ] },
+		  				  { "type":4, "val": 2, "subtype": 1, "info": 114 },
+						  	 { "type":4, "val": 2, "subtype": 3, "info": 114 } ] },
 		{ "id": 135,
-		  "female": false,
-		  "skill_set": [ { "skill": 19, },
-		  			     { "skill": 21, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 19, "level": 1 },
+		  			    { "skill": 21, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 2, "subtype": 1, "info": 115 } ] },
 		{ "id": 136,
 		  "spell": 13,
-		  "female": true,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 14, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 14, "level": 1 } ],
 		  "specialties": [ { "type":5, "val": 100, "subtype": 13, "info": 0 } ] },
 		{ "id": 137,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 53,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 15, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 15, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 53, "info": 0 } ] },
 		{ "id": 138,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 16, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 16, "level": 1 } ],
 		  "specialties": [ { "type":5, "val": 50, "subtype": 15, "info": 0 } ] },
 		{ "id": 139,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 46,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 17, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 17, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 46, "info": 0 } ] },
 		{ "id": 140,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 43,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 14, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 14, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 43, "info": 0 } ] },
 		{ "id": 141,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 47,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 15, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 15, "level": 1 } ],
 		  "specialties": [ { "type":8, "val": 0, "subtype": 47, "info": 0 } ] },
 		{ "id": 142,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 35,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 16, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 16, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 143,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 54,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 17, } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 17, "level": 1 } ],
 		  "specialties": [ { "type":10, "val": 350, "subtype": 6, "info": 0 } ] },
 		{ "id": 144,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 6, "level": 2 } ],
 		  "specialties": [ { "type":12, "val": 2, "subtype": 0, "info": 0 } ] },
 		{ "id": 145,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 22,
-		  "skill_set": [ { "skill": 7, },
-		  			     { "skill": 14, "level": 3 } ],
+		  "skill_set": [ { "skill": 7, "level": 1 },
+		  			    { "skill": 14, "level": 3 } ],
 		  "specialties": [ { "type":11, "val": 14, "subtype": 0, "info": 0 } ] },
 		{ "id": 146,
-		  "female": true,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 22, } ],
+		  "sex": 1,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 4 } ] },
 		{ "id": 147,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 53,
 		  "skill_set": [ { "skill": 7, "level": 2 } ],
 		  "specialties": [ { "type":9, "val": 0, "subtype": 8, "info": 136 },
-		  				   { "type":9, "val": 0, "subtype": 34, "info": 136 } ] },
+		  				  { "type":9, "val": 0, "subtype": 34, "info": 136 } ] },
 		{ "id": 148,
-		  "female": false,
-		  "skill_set": [ { "skill": 1, },
-		  			     { "skill": 6, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 1, "level": 1 },
+		  			    { "skill": 6, "level": 1 } ],
 		  "specialties": [ { "type":9, "val": 0, "subtype": 2, "info": 137 },
-		  				   { "type":9, "val": 0, "subtype": 18, "info": 137 } ] },
+		  				  { "type":9, "val": 0, "subtype": 18, "info": 137 } ] },
 		{ "id": 149,
-		  "female": false,
+		  "sex": 0,
 		  "skill_set": [ { "skill": 22, "level": 2 } ],
 		  "specialties": [ { "type":4, "val": 5, "subtype": 1, "info": 96 },
-		  				   { "type":4, "val": 5, "subtype": 2, "info": 96 },
-						   { "type":4, "val": 10, "subtype": 3, "info": 96 } ] },
+		  				  { "type":4, "val": 5, "subtype": 2, "info": 96 },
+						  	 { "type":4, "val": 10, "subtype": 3, "info": 96 } ] },
 		{ "id": 150,
-		  "female": false,
+		  "sex": 0,
 		  "spell": 54,
 		  "skill_set": [ { "skill": 12, "level": 2 } ],
 		  "specialties": [ { "type":4, "val": 5, "subtype": 1, "info": 66 },
-		  				   { "type":4, "val": 5, "subtype": 2, "info": 66 },
-						   { "type":4, "val": 10, "subtype": 3, "info": 66 } ] },
+		  				  { "type":4, "val": 5, "subtype": 2, "info": 66 },
+						  	 { "type":4, "val": 10, "subtype": 3, "info": 66 } ] },
 		{ "id": 151,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 13, },
-		  			     { "skill": 19, } ],
+		  "skill_set": [ { "skill": 13, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":13, "val": 5, "subtype": 1, "info": 0 },
-		  				   { "type":13, "val": 5, "subtype": 2, "info": 0 } ] },
+		  				  { "type":13, "val": 5, "subtype": 2, "info": 0 } ] },
 		{ "id": 152,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 23, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 23, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 4 } ] },
 		{ "id": 153,
-		  "female": true,
+		  "sex": 1,
 		  "spell": 15,
-		  "skill_set": [ { "skill": 13, },
-		  			     { "skill": 19, } ],
+		  "skill_set": [ { "skill": 13, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":13, "val": 1, "subtype": 1, "info": 5 },
-		  				   { "type":13, "val": 1, "subtype": 1, "info": 5 } ] },
+		  				  { "type":13, "val": 1, "subtype": 1, "info": 5 } ] },
 		{ "id": 154,
-		  "female": false,
-		  "skill_set": [ { "skill": 19, },
-		  			     { "skill": 22, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 19, "level": 1 },
+		  			    { "skill": 22, "level": 1 } ],
 		  "specialties": [ { "type":1, "val": 0, "subtype": 0, "info": 90 } ] },
 		{ "id": 155,
-		  "female": false,
-		  "skill_set": [ { "skill": 6, },
-		  			     { "skill": 19, } ],
+		  "sex": 0,
+		  "skill_set": [ { "skill": 6, "level": 1 },
+		  			    { "skill": 19, "level": 1 } ],
 		  "specialties": [ { "type":4, "val": 4, "subtype": 1, "info": 54 },
-		  				   { "type":4, "val": 2, "subtype": 2, "info": 54 },
-						   { "type":4, "val": 1, "subtype": 5, "info": 54 } ] }
+		  				  { "type":4, "val": 2, "subtype": 2, "info": 54 },
+						  	 { "type":4, "val": 1, "subtype": 5, "info": 54 } ] }
 	]
 }

+ 14 - 4
lib/CCreatureHandler.cpp

@@ -479,6 +479,7 @@ void CCreatureHandler::loadCreatures()
 	for (JsonVector::const_iterator it = creatures_vec.begin(); it!=creatures_vec.end(); ++it) {
 		const JsonNode &creature = *it;
 		int creatureID = creature["id"].Float();
+		const JsonNode *value;
 
 		/* A creature can have several names. */
 		const JsonVector &names_vec = creature["name"].Vector();
@@ -494,11 +495,20 @@ void CCreatureHandler::loadCreatures()
 		c->faction = creature["faction"].Float();
 		c->animDefName = creature["defname"].String();
 
-		c->upgrades.insert(creature["upgrade"].Float());
-		idToProjectile[creatureID] = creature["projectile_defname"].String();
-		idToProjectileSpin[creatureID] = creature["projectile_spin"].Bool();
+		value = &creature["upgrade"];
+		if (!value->isNull())
+			c->upgrades.insert(value->Float());
 
-		if (creature["turret_shooter"].Bool(false))
+		value = &creature["projectile_defname"];
+		if (!value->isNull()) {
+			idToProjectile[creatureID] = value->String();
+
+			value = &creature["projectile_spin"];
+			idToProjectileSpin[creatureID] = value->Bool();
+		}
+
+		value = &creature["turret_shooter"];
+		if (!value->isNull() && value->Bool())
 			factionToTurretCreature[c->faction] = creatureID;
 	}
 

+ 15 - 10
lib/CHeroHandler.cpp

@@ -290,24 +290,29 @@ void CHeroHandler::loadHeroes()
 		int hid = hero["id"].Float();
 		const JsonNode *value;
 
-		//sex: 0=male, 1=female
-		heroes[hid]->sex = !hero["female"].Bool(false);
+		heroes[hid]->sex = hero["sex"].Float();
 
 		BOOST_FOREACH(const JsonNode &set, hero["skill_set"].Vector()) {
-			heroes[hid]->secSkillsInit.push_back(std::make_pair(set["skill"].Float(), set["level"].Float(1)));
+			heroes[hid]->secSkillsInit.push_back(std::make_pair(set["skill"].Float(), set["level"].Float()));
 		}
 
-		heroes[hid]->startingSpell = hero["spell"].Float(-1);
+		value = &hero["spell"];
+		if (!value->isNull()) {
+			heroes[hid]->startingSpell = value->Float();
+		}
 
-		BOOST_FOREACH(const JsonNode &specialty, hero["specialties"].Vector()) {
-			SSpecialtyInfo dummy;
+		value = &hero["specialties"];
+		if (!value->isNull()) {
+			BOOST_FOREACH(const JsonNode &specialty, value->Vector()) {
+				SSpecialtyInfo dummy;
 
-			dummy.type = specialty["type"].Float();
-			dummy.val = specialty["val"].Float(0);
-			dummy.subtype = specialty["subtype"].Float(0);
-			dummy.additionalinfo = specialty["info"].Float(0);
+				dummy.type = specialty["type"].Float();
+				dummy.val = specialty["val"].Float();
+				dummy.subtype = specialty["subtype"].Float();
+				dummy.additionalinfo = specialty["info"].Float();
 
 				heroes[hid]->spec.push_back(dummy); //put a copy of dummy
+			}
 		}
 	}
 

+ 8 - 2
lib/CTownHandler.cpp

@@ -62,6 +62,7 @@ void CTownHandler::loadStructures()
 		// Read buildings coordinates for that city
 		BOOST_FOREACH(const JsonNode &node, town_node["defnames"].Vector()) {
 			Structure *vinya = new Structure;
+			const JsonNode *value;
 
 			vinya->group = -1;
 			vinya->townID = townID;
@@ -72,8 +73,13 @@ void CTownHandler::loadStructures()
 			vinya->pos.y = node["y"].Float();
 			vinya->pos.z = 0;
 			
-			vinya->borderName = node["border"].String();
-			vinya->areaName = node["area"].String();
+			value = &node["border"];
+			if (!value->isNull())
+				vinya->borderName = value->String();
+
+			value = &node["area"];
+			if (!value->isNull())
+				vinya->areaName = value->String();
 
 			town[vinya->ID] = vinya;
 		}

+ 5 - 15
lib/JsonNode.cpp

@@ -125,42 +125,32 @@ JsonMap & JsonNode::Struct()
 }
 
 
-const bool & JsonNode::Bool(const bool &value) const
+const bool & JsonNode::Bool() const
 {
-	if (isNull())
-		return value;
 	assert(type == DATA_BOOL);
 	return data.Bool;
 }
 
-const float & JsonNode::Float(const float &value) const
+const float & JsonNode::Float() const
 {
-	if (isNull())
-		return value;
 	assert(type == DATA_FLOAT);
 	return data.Float;
 }
 
-const std::string & JsonNode::String(const std::string &value) const
+const std::string & JsonNode::String() const
 {
-	if (isNull())
-		return value;
 	assert(type == DATA_STRING);
 	return *data.String;
 }
 
-const JsonVector & JsonNode::Vector(const JsonVector &value) const
+const JsonVector & JsonNode::Vector() const
 {
-	if (isNull())
-		return value;
 	assert(type == DATA_VECTOR);
 	return *data.Vector;
 }
 
-const JsonMap & JsonNode::Struct(const JsonMap &value) const
+const JsonMap & JsonNode::Struct() const
 {
-	if (isNull())
-		return value;
 	assert(type == DATA_STRUCT);
 	return *data.Struct;
 }

+ 7 - 6
lib/JsonNode.h

@@ -60,18 +60,19 @@ public:
 
 	//non-const accessors, node will change type on type mismatch
 	bool & Bool();
+	int & Int();
 	float & Float();
 	std::string & String();
 	JsonVector & Vector();
 	JsonMap & Struct();
 
 	//const accessors, will cause assertion failure on type mismatch
-	//if node is null then default value will be returned instead
-	const bool & Bool(const bool &value = false) const;
-	const float & Float(const float &value = 0) const;
-	const std::string & String(const std::string &value = "") const;
-	const JsonVector & Vector(const JsonVector &value = JsonVector()) const;
-	const JsonMap & Struct(const JsonMap &value = JsonMap()) const;
+	const bool & Bool() const;
+	const int & Int() const;
+	const float & Float() const;
+	const std::string & String() const;
+	const JsonVector & Vector() const;
+	const JsonMap & Struct() const;
 
 	//formatted output of this node in JSON format
 	void write(std::ostream &out, std::string prefix="") const;