Browse Source

- fix uninitialized cursor
- stubs for loading heroes and classes from mods (no real code yet)
- heroes loading uses string IDs for secondary skills, some cleanup in HeroHandler

Ivan Savenko 13 years ago
parent
commit
d2ee602b29
8 changed files with 1463 additions and 1414 deletions
  1. 1 0
      client/UIFramework/CCursorHandler.cpp
  2. 1376 1376
      config/heroes.json
  3. 48 26
      lib/CHeroHandler.cpp
  4. 15 6
      lib/CHeroHandler.h
  5. 17 3
      lib/CModHandler.cpp
  6. 0 3
      lib/CModHandler.h
  7. 1 0
      lib/CTownHandler.cpp
  8. 5 0
      lib/StringConstants.h

+ 1 - 0
client/UIFramework/CCursorHandler.cpp

@@ -23,6 +23,7 @@ void CCursorHandler::initCursor()
 	xpos = ypos = 0;
 	type = ECursor::DEFAULT;
 	dndObject = nullptr;
+	currentCursor = nullptr;
 
 	help = CSDL_Ext::newSurface(40,40);
 	SDL_ShowCursor(SDL_DISABLE);

+ 1376 - 1376
config/heroes.json

@@ -12,2266 +12,2266 @@
 			"female": false,
 			"skill_set":
 			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 1, "level": 1 }
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "archery", "level": "basic" }
 			],
-		 "specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 1, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 1, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 1,
 			"class" : "knight",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 1, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "archery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 2 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 2 }
+			]
 		},
-		{
+		{
 			"id": 2,
 			"class" : "knight",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 23, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "armorer", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
+			]
 		},
-		{
+		{
 			"id": 3,
 			"class" : "knight",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 5, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "navigation", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 2, "subtype": 5, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 2, "subtype": 5, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 4,
 			"class" : "knight",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 13, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "estates", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 13, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 13, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 5,
 			"class" : "knight",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 6 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 6 }
+			]
 		},
-		{
+		{
 			"id": 6,
 			"class" : "knight",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 20, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "artillery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 7,
 			"class" : "knight",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 10 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 10 }
+			]
 		},
-		{
+		{
 			"id": 8,
 			"class" : "cleric",
 			"female": false,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 27, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "firstAid", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 27, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 27, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 9,
 			"class" : "cleric",
 			"female": true,
 			"spell": 41,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 4, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "diplomacy", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":6, "val": 3, "subtype": 41, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":6, "val": 3, "subtype": 41, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 10,
 			"class" : "cleric",
 			"female": false,
 			"spell": 45,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 13, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "estates", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 45, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 45, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 11,
 			"class" : "cleric",
 			"female": true,
 			"spell": 20,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 20, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 20, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 12,
 			"class" : "cleric",
 			"female": false,
 			"spell": 42,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 8 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 8 }
+			]
 		},
-		{
+		{
 			"id": 13,
 			"class" : "cleric",
 			"female": true,
 			"spell": 35,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 14,
 			"class" : "cleric",
 			"spell": 48,
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 48, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 48, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 15,
 			"class" : "cleric",
 			"female": true,
 			"spell": 37,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 16,
 			"class" : "ranger",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 23, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "armorer", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 17,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 9, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "luck", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 16 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 16 }
+			]
 		},
-		{
+		{
 			"id": 18,
 			"class" : "ranger",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 1, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "archery", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 19,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 4, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "diplomacy", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 22 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 22 }
+			]
 		},
-		{
+		{
 			"id": 20,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 26, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "resistance", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 26, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 26, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 21,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 1, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "archery", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 18 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 18 }
+			]
 		},
-		{
+		{
 			"id": 22,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 0, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "pathfinding", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 24 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 24 }
+			]
 		},
-		{
+		{
 			"id": 23,
 			"class" : "ranger",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 1, "level": 1 },
-				{ "skill": 2, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "archery", "level": "basic" },
+				{ "skill" : "logistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 24,
 			"class" : "druid",
 			"spell": 55,
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 55, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 55, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 25,
 			"class" : "druid",
 			"female": false,
 			"spell": 37,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 },
-				{ "skill": 10, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" },
+				{ "skill" : "ballistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 37, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 37, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 26,
 			"class" : "druid",
 			"female": false,
 			"spell": 42,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 27,
 			"class" : "druid",
 			"female": true,
 			"spell": 0,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 27, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "firstAid", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 27, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 27, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 28,
 			"class" : "druid",
 			"female": false,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 29,
 			"class" : "druid",
 			"spell": 51,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 9, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "luck", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":7, "val": 0, "subtype": 51, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":7, "val": 0, "subtype": 51, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 30,
 			"class" : "druid",
 			"female": false,
 			"spell": 16,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 16, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 16, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 31,
 			"class" : "druid",
 			"female": false,
 			"spell": 30,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 3, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scouting", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 20 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 20 }
+			]
 		},
-		{
+		{
 			"id": 32,
 			"class" : "alchemist",
 			"female": false,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 3, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scouting", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 30 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 30 }
+			]
 		},
-		{
+		{
 			"id": 33,
 			"class" : "alchemist",
 			"female": false,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 18, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "scholar", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 36 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 36 }
+			]
 		},
-		{
+		{
 			"id": 34,
 			"class" : "alchemist",
 			"spell": 53,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 8, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "mysticism", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 32 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 32 }
+			]
 		},
-		{
+		{
 			"id": 35,
 			"class" : "alchemist",
 			"female": true,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 18, "level": 1 },
-				{ "skill": 23, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scholar", "level": "basic" },
+				{ "skill" : "armorer", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 36,
 			"class" : "alchemist",
 			"female": false,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 8, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "mysticism", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 37,
 			"class" : "alchemist",
 			"female": false,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 18, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scholar", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 38 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 38 }
+			]
 		},
-		{
+		{
 			"id": 38,
 			"class" : "alchemist",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 8, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "mysticism", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 1, "subtype": 1, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 1, "subtype": 1, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 39,
 			"class" : "alchemist",
 			"spell": 15,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 18, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scholar", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 36 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 36 }
+			]
 		},
-		{
+		{
 			"id": 40,
 			"class" : "wizard",
 			"female": false,
 			"spell": 60,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 60, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 60, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 41,
 			"class" : "wizard",
 			"female": false,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 42,
 			"class" : "wizard",
 			"female": true,
 			"spell": 35,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 43,
 			"class" : "wizard",
 			"female": true,
 			"spell": 51,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":7, "val": 0, "subtype": 51, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":7, "val": 0, "subtype": 51, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 44,
 			"class" : "wizard",
 			"spell": 27,
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 10, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "ballistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 34 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 34 }
+			]
 		},
-		{
+		{
 			"id": 45,
 			"class" : "wizard",
 			"female": false,
 			"spell": 19,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 19, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 19, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 46,
 			"class" : "wizard",
 			"female": true,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 4, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "diplomacy", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 47,
 			"class" : "wizard",
 			"female": true,
 			"spell": 42,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 48,
 			"class" : "demoniac",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 3, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "scouting", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 46 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 46 }
+			]
 		},
-		{
+		{
 			"id": 49,
 			"class" : "demoniac",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 52 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 52 }
+			]
 		},
-		{
+		{
 			"id": 50,
 			"class" : "demoniac",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 48 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 48 }
+			]
 		},
-		{
+		{
 			"id": 51,
 			"class" : "demoniac",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 42 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 42 }
+			]
 		},
-		{
+		{
 			"id": 52,
 			"class" : "demoniac",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 18, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scholar", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 53,
 			"class" : "demoniac",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 1, "level": 1 },
-				{ "skill": 3, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "archery", "level": "basic" },
+				{ "skill" : "scouting", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 42 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 42 }
+			]
 		},
-		{
+		{
 			"id": 54,
 			"class" : "demoniac",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 20, "level": 1 },
-				{ "skill": 2, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "artillery", "level": "basic" },
+				{ "skill" : "logistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 55,
 			"class" : "demoniac",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 50 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 50 }
+			]
 		},
-		{
+		{
 			"id": 56,
 			"class" : "heretic",
 			"spell": 3,
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 57,
 			"class" : "heretic",
 			"female": false,
 			"spell": 22,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 22, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 22, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 58,
 			"class" : "heretic",
 			"female": false,
 			"spell": 30,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 59,
 			"class" : "heretic",
 			"female": true,
 			"spell": 45,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 10, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "ballistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 45, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 45, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 60,
 			"class" : "heretic",
 			"female": false,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 1, "subtype": 3, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 1, "subtype": 3, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 61,
 			"class" : "heretic",
 			"female": true,
 			"spell": 43,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 43, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 43, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 62,
 			"class" : "heretic",
 			"female": false,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 63,
 			"class" : "heretic",
 			"female": false,
 			"spell": 21,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 21, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 21, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 64,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 58 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 58 }
+			]
 		},
-		{
+		{
 			"id": 65,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 20, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "artillery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 62 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 62 }
+			]
 		},
-		{
+		{
 			"id": 66,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 64 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 64 }
+			]
 		},
-		{
+		{
 			"id": 67,
 			"class" : "deathknight",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 60 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 60 }
+			]
 		},
-		{
+		{
 			"id": 68,
 			"class" : "deathknight",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 66 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 66 }
+			]
 		},
-		{
+		{
 			"id": 69,
 			"class" : "deathknight",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 12, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 12, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 70,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 71,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 23, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "armorer", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 56 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 56 }
+			]
 		},
-		{
+		{
 			"id": 72,
 			"class" : "necromancer",
 			"female": true,
 			"spell": 24,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 24, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 24, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 73,
 			"class" : "necromancer",
 			"female": true,
 			"spell": 23,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 7, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "wisdom", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 23, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 23, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 74,
 			"class" : "necromancer",
 			"female": false,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 75,
 			"class" : "necromancer",
 			"female": false,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 76,
 			"class" : "necromancer",
 			"female": false,
 			"spell": 39,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 39, "subtype": 0, "info": 3 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 39, "subtype": 0, "info": 3 }
+			]
 		},
-		{
+		{
 			"id": 77,
 			"class" : "necromancer",
 			"female": true,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 78,
 			"class" : "necromancer",
 			"female": true,
 			"spell": 42,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 12, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 12, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 79,
 			"class" : "necromancer",
 			"female": false,
 			"spell": 30,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 80,
 			"class" : "warlock",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 3, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "scouting", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 72 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 72 }
+			]
 		},
-		{
+		{
 			"id": 81,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 20, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "artillery", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 82,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 78 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 78 }
+			]
 		},
-		{
+		{
 			"id": 83,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 74 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 74 }
+			]
 		},
-		{
+		{
 			"id": 84,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 85,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 2, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "logistics", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 86,
 			"class" : "warlock",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 80 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 80 }
+			]
 		},
-		{
+		{
 			"id": 87,
 			"class" : "warlock",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 70 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 70 }
+			]
 		},
-		{
+		{
 			"id": 88,
 			"class" : "overlord",
 			"spell": 38,
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 18, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scholar", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 38, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 38, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 89,
 			"class" : "overlord",
 			"female": false,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 90,
 			"class" : "overlord",
 			"female": false,
 			"spell": 43,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 91,
 			"class" : "overlord",
 			"female": true,
 			"spell": 38,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 38, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 38, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 92,
 			"class" : "overlord",
 			"female": false,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 93,
 			"class" : "overlord",
 			"female": false,
 			"spell": 23,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 3, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "scouting", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":3, "val": 3, "subtype": 23, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":3, "val": 3, "subtype": 23, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 94,
 			"class" : "overlord",
 			"female": true,
 			"spell": 30,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 1, "subtype": 4, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 1, "subtype": 4, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 95,
 			"class" : "overlord",
 			"female": false,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 96,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 10, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "ballistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 94 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 94 }
+			]
 		},
-		{
+		{
 			"id": 97,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 20, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "artillery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 98,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 1, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "archery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 88 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 88 }
+			]
 		},
-		{
+		{
 			"id": 99,
 			"class" : "barbarian",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 3, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "scouting", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 92 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 92 }
+			]
 		},
-		{
+		{
 			"id": 100,
 			"class" : "barbarian",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 0, "level": 1 }
-			]
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "pathfinding", "level": "basic" }
+			]
 		},
-		{
+		{
 			"id": 101,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 84 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 84 }
+			]
 		},
-		{
+		{
 			"id": 102,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
+			]
 		},
-		{
+		{
 			"id": 103,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 22, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 22, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 104,
 			"class" : "battlemage",
 			"spell": 43,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 86 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 86 }
+			]
 		},
-		{
+		{
 			"id": 105,
 			"class" : "battlemage",
 			"female": false,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 106,
 			"class" : "battlemage",
 			"female": true,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 2, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "logistics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
+			]
 		},
-		{
+		{
 			"id": 107,
 			"class" : "battlemage",
 			"female": false,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 2, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 108,
 			"class" : "battlemage",
 			"female": false,
 			"spell": 44,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 20, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "artillery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 109,
 			"class" : "battlemage",
 			"spell": 54,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 44, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 44, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 110,
 			"class" : "battlemage",
 			"female": true,
 			"spell": 30,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 111,
 			"class" : "battlemage",
 			"female": false,
 			"spell": 43,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 112,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 26, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "resistance", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 1, "subtype": 5, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 1, "subtype": 5, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 113,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 106 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 106 }
+			]
 		},
-		{
+		{
 			"id": 114,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 1, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "archery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 98 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 98 }
+			]
 		},
-		{
+		{
 			"id": 115,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 100 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 100 }
+			]
 		},
-		{
+		{
 			"id": 116,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 23, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 117,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 0, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "pathfinding", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 102 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 102 }
+			]
 		},
-		{
+		{
 			"id": 118,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 20, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "artillery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 104 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 104 }
+			]
 		},
-		{
+		{
 			"id": 119,
 			"class" : "beastmaster",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 23, "level": 1 },
-				{ "skill": 3, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "armorer", "level": "basic" },
+				{ "skill" : "scouting", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 146 }
+			]
 		},
-		{
+		{
 			"id": 120,
 			"class" : "witch",
 			"spell": 45,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 108 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 108 }
+			]
 		},
-		{
+		{
 			"id": 121,
 			"class" : "witch",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 8, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "mysticism", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 8, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 122,
 			"class" : "witch",
 			"female": true,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 5, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "navigation", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 2, "subtype": 5, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 2, "subtype": 5, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 123,
 			"class" : "witch",
 			"female": true,
 			"spell": 31,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 27, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "firstAid", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 27, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 27, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 124,
 			"class" : "witch",
 			"female": true,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 125,
 			"class" : "witch",
 			"female": true,
 			"spell": 27,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 25, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "sorcery", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 25, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 126,
 			"class" : "witch",
 			"female": true,
 			"spell": 35,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 24, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "intelligence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 24, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 127,
 			"class" : "witch",
 			"female": true,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 11, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "eagleEye", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
-			]
+			"specialties":
+			[
+				{ "type":2, "val": 5, "subtype": 11, "info": 1 }
+			]
 		},
-		{
+		{
 			"id": 128,
 			"class" : "planeswalker",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 20, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "artillery", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "planeswalker",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 13, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "estates", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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": 5, "subtype": 4, "info": 113 }
+			]
 		},
-		{
+		{
 			"id": 130,
 			"class" : "planeswalker",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 20, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "artillery", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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": 3, "info": 114 }
+			]
 		},
-		{
+		{
 			"id": 131,
 			"class" : "planeswalker",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":4, "val": 2, "subtype": 1, "info": 115 }
-			]
+			"specialties":
+			[
+				{ "type":4, "val": 2, "subtype": 1, "info": 115 }
+			]
 		},
-		{
+		{
 			"id": 132,
 			"class" : "planeswalker",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 2, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "logistics", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "planeswalker",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 13, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "estates", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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": 5, "subtype": 4, "info": 113 }
+			]
 		},
-		{
+		{
 			"id": 134,
 			"class" : "planeswalker",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "advanced" }
 			],
-			"specialties":
-			[
+			"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": 3, "info": 114 }
+			]
 		},
-		{
+		{
 			"id": 135,
 			"class" : "planeswalker",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 1 },
-				{ "skill": 21, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "basic" },
+				{ "skill" : "learning", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":4, "val": 2, "subtype": 1, "info": 115 }
-			]
+			"specialties":
+			[
+				{ "type":4, "val": 2, "subtype": 1, "info": 115 }
+			]
 		},
-		{
+		{
 			"id": 136,
 			"class" : "elementalist",
 			"spell": 13,
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 14, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "fireMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":5, "val": 100, "subtype": 13, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":5, "val": 100, "subtype": 13, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 137,
 			"class" : "elementalist",
 			"female": true,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 15, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "airMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 53, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 138,
 			"class" : "elementalist",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 16, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "waterMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":5, "val": 50, "subtype": 15, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":5, "val": 50, "subtype": 15, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 139,
 			"class" : "elementalist",
 			"female": true,
 			"spell": 46,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 17, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "earthMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 46, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 140,
 			"class" : "elementalist",
 			"female": false,
 			"spell": 43,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 14, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "fireMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 43, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 43, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 141,
 			"class" : "elementalist",
 			"female": false,
 			"spell": 47,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 15, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "airMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":8, "val": 0, "subtype": 47, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":8, "val": 0, "subtype": 47, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 142,
 			"class" : "elementalist",
 			"female": false,
 			"spell": 35,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 16, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "waterMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 143,
 			"class" : "elementalist",
 			"female": false,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 17, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "earthMagic", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":10, "val": 350, "subtype": 6, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 144,
 			"class" : "knight",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "advanced" }
 			],
-			"specialties":
-			[
-				{ "type":12, "val": 2, "subtype": 0, "info": 0 }
-			]
+			"specialties":
+			[
+				{ "type":12, "val": 2, "subtype": 0, "info": 0 }
+			]
 		},
-		{
+		{
 			"id": 145,
 			"class" : "witch",
 			"female": true,
 			"spell": 22,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 1 },
-				{ "skill": 14, "level": 3 } ],
-			"specialties":
-			[
-				{ "type":11, "val": 14, "subtype": 0, "info": 0 }
-			]
-		},
-		{
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "basic" },
+				{ "skill" : "fireMagic", "level": "expert" } ],
+			"specialties":
+			[
+				{ "type":11, "val": 14, "subtype": 0, "info": 0 }
+			]
+		},
+		{
 			"id": 146,
 			"class" : "knight",
 			"female": true,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
+			]
 		},
-		{
+		{
 			"id": 147,
 			"class" : "wizard",
 			"female": false,
 			"spell": 53,
-			"skill_set":
-			[
-				{ "skill": 7, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "wisdom", "level": "advanced" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "ranger",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 1, "level": 1 },
-				{ "skill": 6, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "archery", "level": "basic" },
+				{ "skill" : "leadership", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 22, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "offence", "level": "advanced" }
 			],
-			"specialties":
-			[
+			"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": 10, "subtype": 3, "info": 96 }
+			]
 		},
-		{
+		{
 			"id": 150,
 			"class" : "deathknight",
 			"female": false,
 			"spell": 54,
-			"skill_set":
-			[
-				{ "skill": 12, "level": 2 }
+			"skill_set":
+			[
+				{ "skill" : "necromancy", "level": "advanced" }
 			],
-			"specialties":
-			[
+			"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": 10, "subtype": 3, "info": 66 }
+			]
 		},
-		{
+		{
 			"id": 151,
 			"class" : "warlock",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 13, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "estates", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "knight",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 23, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "armorer", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 4 }
+			]
 		},
-		{
+		{
 			"id": 153,
 			"class" : "warlock",
 			"female": true,
 			"spell": 15,
-			"skill_set":
-			[
-				{ "skill": 13, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "estates", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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,
 			"class" : "barbarian",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 19, "level": 1 },
-				{ "skill": 22, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "tactics", "level": "basic" },
+				{ "skill" : "offence", "level": "basic" }
 			],
-			"specialties":
-			[
-				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
-			]
+			"specialties":
+			[
+				{ "type":1, "val": 0, "subtype": 0, "info": 90 }
+			]
 		},
-		{
+		{
 			"id": 155,
 			"class" : "demoniac",
 			"female": false,
-			"skill_set":
-			[
-				{ "skill": 6, "level": 1 },
-				{ "skill": 19, "level": 1 }
+			"skill_set":
+			[
+				{ "skill" : "leadership", "level": "basic" },
+				{ "skill" : "tactics", "level": "basic" }
 			],
-			"specialties":
-			[
+			"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 }

+ 48 - 26
lib/CHeroHandler.cpp

@@ -8,6 +8,7 @@
 #include "StringConstants.h"
 #include "BattleHex.h"
 #include "CModHandler.h"
+#include "CTownHandler.h"
 
 /*
  * CHeroHandler.cpp, part of VCMI engine
@@ -125,7 +126,7 @@ void CHeroClassHandler::load(const JsonNode & classes)
 	//TODO
 }
 
-void CHeroClassHandler::loadClass(const JsonNode & heroClass)
+CHeroClass *CHeroClassHandler::loadClass(const JsonNode & heroClass)
 {
 	//TODO
 }
@@ -147,11 +148,49 @@ CHeroHandler::~CHeroHandler()
 CHeroHandler::CHeroHandler()
 {}
 
+void CHeroHandler::load(const JsonNode & heroes)
+{
+	//TODO
+}
+
+CHero * CHeroHandler::loadHero(const JsonNode & hero)
+{
+	//TODO
+}
+
 void CHeroHandler::load()
 {
 	classes.load();
 	loadHeroes();
 	loadObstacles();
+	loadTerrains();
+	loadBallistics();
+	loadExperience();
+}
+
+void CHeroHandler::loadExperience()
+{
+	expPerLevel.push_back(0);
+	expPerLevel.push_back(1000);
+	expPerLevel.push_back(2000);
+	expPerLevel.push_back(3200);
+	expPerLevel.push_back(4600);
+	expPerLevel.push_back(6200);
+	expPerLevel.push_back(8000);
+	expPerLevel.push_back(10000);
+	expPerLevel.push_back(12200);
+	expPerLevel.push_back(14700);
+	expPerLevel.push_back(17500);
+	expPerLevel.push_back(20600);
+	expPerLevel.push_back(24320);
+	expPerLevel.push_back(28784);
+	expPerLevel.push_back(34140);
+	while (expPerLevel[expPerLevel.size() - 1] > expPerLevel[expPerLevel.size() - 2])
+	{
+		int i = expPerLevel.size() - 1;
+		expPerLevel.push_back (expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2);
+	}
+	expPerLevel.pop_back();//last value is broken
 }
 
 void CHeroHandler::loadObstacles()
@@ -220,8 +259,11 @@ void CHeroHandler::loadHeroes()
 		// sex: 0=male, 1=female
 		currentHero->sex = !!hero["female"].Bool();
 
-		BOOST_FOREACH(const JsonNode &set, hero["skill_set"].Vector()) {
-			currentHero->secSkillsInit.push_back(std::make_pair(set["skill"].Float(), set["level"].Float()));
+		BOOST_FOREACH(const JsonNode &set, hero["skill_set"].Vector())
+		{
+			int skillID    = boost::range::find(SecondarySkill::names,  set["skill"].String()) - boost::begin(SecondarySkill::names);
+			int skillLevel = boost::range::find(SecondarySkill::levels, set["level"].String()) - boost::begin(SecondarySkill::levels);
+			currentHero->secSkillsInit.push_back(std::make_pair(skillID, skillLevel));
 		}
 
 		value = &hero["spell"];
@@ -247,30 +289,10 @@ void CHeroHandler::loadHeroes()
 			currentHero->heroClass = classes.heroClasses[classID];
 		});
 	}
+}
 
-	loadTerrains();
-	expPerLevel.push_back(0);
-	expPerLevel.push_back(1000);
-	expPerLevel.push_back(2000);
-	expPerLevel.push_back(3200);
-	expPerLevel.push_back(4600);
-	expPerLevel.push_back(6200);
-	expPerLevel.push_back(8000);
-	expPerLevel.push_back(10000);
-	expPerLevel.push_back(12200);
-	expPerLevel.push_back(14700);
-	expPerLevel.push_back(17500);
-	expPerLevel.push_back(20600);
-	expPerLevel.push_back(24320);
-	expPerLevel.push_back(28784);
-	expPerLevel.push_back(34140);
-	while (expPerLevel[expPerLevel.size() - 1] > expPerLevel[expPerLevel.size() - 2])
-	{
-		int i = expPerLevel.size() - 1;
-		expPerLevel.push_back (expPerLevel[i] + (expPerLevel[i] - expPerLevel[i-1]) * 1.2);
-	}
-	expPerLevel.pop_back();//last value is broken
-
+void CHeroHandler::loadBallistics()
+{
 	CLegacyConfigParser ballParser("DATA/BALLIST.TXT");
 
 	ballParser.endLine(); //header

+ 15 - 6
lib/CHeroHandler.h

@@ -56,7 +56,6 @@ public:
 	std::vector<SSpecialtyInfo> spec;
 	si32 startingSpell; //-1 if none
 	ui8 sex; // default sex: 0=male, 1=female
-	//bool operator<(CHero& drugi){if (ID < drugi.ID) return true; else return false;}
 
 	CHero();
 	~CHero();
@@ -131,7 +130,7 @@ public:
 	void load(const JsonNode & classes);
 
 	/// load one class from json
-	void loadClass(const JsonNode & heroClass);
+	CHeroClass * loadClass(const JsonNode & heroClass);
 
 	~CHeroClassHandler();
 
@@ -148,9 +147,9 @@ class DLL_LINKAGE CHeroHandler
 public:
 	CHeroClassHandler classes;
 
-	std::vector< ConstTransitivePtr<CHero> > heroes; //changed from nodrze
+	std::vector< ConstTransitivePtr<CHero> > heroes;
 
-	//default costs of going through terrains: dirt, sand, grass, snow, swamp, rough, subterranean, lava, water, rock; -1 means terrain is imapassable
+	//default costs of going through terrains. -1 means terrain is impassable
 	std::vector<int> terrCosts;
 	
 	struct SBallisticsLevelInfo
@@ -169,14 +168,24 @@ public:
 	std::map<int, CObstacleInfo> obstacles; //info about obstacles that may be placed on battlefield
 	std::map<int, CObstacleInfo> absoluteObstacles; //info about obstacles that may be placed on battlefield
 
-	void loadObstacles(); //loads info about obstacles
-
 	ui32 level(ui64 experience) const; //calculates level corresponding to given experience amount
 	ui64 reqExp(ui32 level) const; //calculates experience required for given level
 
+	/// Load multiple heroes from json
+	void load(const JsonNode & heroes);
+
+	/// Load single hero from json
+	CHero * loadHero(const JsonNode & hero);
+
+	/// Load everything (calls functions below + classes.load())
 	void load();
+
 	void loadHeroes();
+	void loadExperience();
+	void loadBallistics();
 	void loadTerrains();
+	void loadObstacles();
+
 	CHeroHandler(); //c-tor
 	~CHeroHandler(); //d-tor
 

+ 17 - 3
lib/CModHandler.cpp

@@ -5,6 +5,11 @@
 #include "Filesystem/CResourceLoader.h"
 #include "Filesystem/ISimpleResourceLoader.h"
 
+#include "CCreatureHandler.h"
+#include "CArtHandler.h"
+#include "CTownHandler.h"
+#include "CHeroHandler.h"
+
 /*
  * CModHandler.h, part of VCMI engine
  *
@@ -131,6 +136,12 @@ std::vector<std::string> CModHandler::getActiveMods()
 	return activeMods;
 }
 
+template<typename Handler>
+void handleData(Handler handler, const JsonNode & config)
+{
+	handler->load(JsonUtils::assembleFromFiles(config.convertTo<std::vector<std::string> >()));
+}
+
 void CModHandler::loadActiveMods()
 {
 	BOOST_FOREACH(std::string & modName, activeMods)
@@ -139,9 +150,12 @@ void CModHandler::loadActiveMods()
 
 		const JsonNode config = JsonNode(ResourceID(modFileName));
 
-		VLC->townh->load(JsonUtils::assembleFromFiles(config ["factions"].convertTo<std::vector<std::string> >()));
-		VLC->creh->load( JsonUtils::assembleFromFiles(config["creatures"].convertTo<std::vector<std::string> >()));
-		VLC->arth->load( JsonUtils::assembleFromFiles(config["artifacts"].convertTo<std::vector<std::string> >()));
+		handleData(VLC->townh, config["factions"]);
+		handleData(VLC->creh, config["creatures"]);
+		handleData(VLC->arth, config["artifacts"]);
+
+		handleData(&VLC->heroh->classes, config["heroClasses"]);
+		handleData(VLC->heroh, config["heroes"]);
 	}
 
 	VLC->creh->buildBonusTreeForTiers(); //do that after all new creatures are loaded

+ 0 - 3
lib/CModHandler.h

@@ -3,9 +3,6 @@
 #include "Filesystem/CResourceLoader.h"
 
 #include "VCMI_Lib.h"
-#include "CCreatureHandler.h"
-#include "CArtHandler.h"
-#include "CTownHandler.h"
 
 /*
  * CModHandler.h, part of VCMI engine

+ 1 - 0
lib/CTownHandler.cpp

@@ -6,6 +6,7 @@
 #include "JsonNode.h"
 #include "StringConstants.h"
 #include "CModHandler.h"
+#include "CArtHandler.h"
 #include "Filesystem/CResourceLoader.h"
 
 /*

+ 5 - 0
lib/StringConstants.h

@@ -54,6 +54,11 @@ namespace SecondarySkill
 		"artillery",    "learning",     "offence",      "armorer",      "intelligence", // 25
 		"sorcery",      "resistance",   "firstAid"
 	};
+
+	const std::string levels [4] =
+	{
+	    "none", "basic", "advanced", "expert"
+	};
 }
 
 namespace ETownType