Jelajahi Sumber

Created puzzle_map.json from puzzle_map.txt.

Frank Zago 14 tahun lalu
induk
melakukan
f9b14ba282
3 mengubah file dengan 500 tambahan dan 473 penghapusan
  1. 472 0
      config/puzzle_map.json
  2. 0 442
      config/puzzle_map.txt
  3. 28 31
      lib/CHeroHandler.cpp

+ 472 - 0
config/puzzle_map.json

@@ -0,0 +1,472 @@
+{
+	// Description of puzzle's pieces positions and order of discovering.
+	"puzzles": [
+		[
+			//Castle
+			{ "x": 7, "y": 8, "order": 39 },
+			{ "x": 7, "y": 30, "order": 41 },
+			{ "x": 7, "y": 102, "order": 1 },
+			{ "x": 7, "y": 156, "order": 23 },
+			{ "x": 7, "y": 202, "order": 6 },
+			{ "x": 7, "y": 320, "order": 13 },
+			{ "x": 16, "y": 8, "order": 39 },
+			{ "x": 22, "y": 406, "order": 2 },
+			{ "x": 70, "y": 301, "order": 22 },
+			{ "x": 72, "y": 194, "order": 11 },
+			{ "x": 101, "y": 332, "order": 8 },
+			{ "x": 106, "y": 8, "order": 9 },
+			{ "x": 106, "y": 31, "order": 29 },
+			{ "x": 114, "y": 60, "order": 7 },
+			{ "x": 126, "y": 329, "order": 17 },
+			{ "x": 128, "y": 191, "order": 21 },
+			{ "x": 152, "y": 347, "order": 27 },
+			{ "x": 154, "y": 239, "order": 31 },
+			{ "x": 157, "y": 429, "order": 34 },
+			{ "x": 166, "y": 470, "order": 4 },
+			{ "x": 185, "y": 127, "order": 30 },
+			{ "x": 212, "y": 335, "order": 36 },
+			{ "x": 214, "y": 191, "order": 48 },
+			{ "x": 217, "y": 226, "order": 43 },
+			{ "x": 235, "y": 147, "order": 35 },
+			{ "x": 245, "y": 77, "order": 16 },
+			{ "x": 266, "y": 384, "order": 42 },
+			{ "x": 288, "y": 288, "order": 45 },
+			{ "x": 298, "y": 8, "order": 26 },
+			{ "x": 321, "y": 177, "order": 46 },
+			{ "x": 346, "y": 67, "order": 38 },
+			{ "x": 354, "y": 459, "order": 20 },
+			{ "x": 355, "y": 397, "order": 25 },
+			{ "x": 375, "y": 162, "order": 28 },
+			{ "x": 382, "y": 255, "order": 32 },
+			{ "x": 408, "y": 32, "order": 37 },
+			{ "x": 408, "y": 111, "order": 14 },
+			{ "x": 421, "y": 147, "order": 19 },
+			{ "x": 422, "y": 466, "order": 12 },
+			{ "x": 426, "y": 8, "order": 15 },
+			{ "x": 436, "y": 238, "order": 24 },
+			{ "x": 458, "y": 336, "order": 44 },
+			{ "x": 486, "y": 8, "order": 40 },
+			{ "x": 487, "y": 144, "order": 33 },
+			{ "x": 517, "y": 145, "order": 18 },
+			{ "x": 520, "y": 68, "order": 5 },
+			{ "x": 524, "y": 234, "order": 10 },
+			{ "x": 525, "y": 327, "order": 3 }
+		],
+
+		[
+			//Rampart
+			{ "x": 7, "y": 8, "order": 2 },
+			{ "x": 7, "y": 101, "order": 13 },
+			{ "x": 7, "y": 195, "order": 20 },
+			{ "x": 7, "y": 310, "order": 6 },
+			{ "x": 7, "y": 378, "order": 22 },
+			{ "x": 7, "y": 449, "order": 21 },
+			{ "x": 61, "y": 8, "order": 19 },
+			{ "x": 97, "y": 42, "order": 8 },
+			{ "x": 98, "y": 201, "order": 24 },
+			{ "x": 108, "y": 308, "order": 36 },
+			{ "x": 115, "y": 461, "order": 1 },
+			{ "x": 129, "y": 366, "order": 7 },
+			{ "x": 134, "y": 8, "order": 4 },
+			{ "x": 157, "y": 188, "order": 25 },
+			{ "x": 160, "y": 309, "order": 39 },
+			{ "x": 162, "y": 441, "order": 11 },
+			{ "x": 164, "y": 126, "order": 28 },
+			{ "x": 174, "y": 390, "order": 33 },
+			{ "x": 178, "y": 188, "order": 46 },
+			{ "x": 187, "y": 258, "order": 41 },
+			{ "x": 190, "y": 24, "order": 38 },
+			{ "x": 215, "y": 272, "order": 45 },
+			{ "x": 255, "y": 443, "order": 9 },
+			{ "x": 265, "y": 323, "order": 40 },
+			{ "x": 277, "y": 45, "order": 47 },
+			{ "x": 278, "y": 383, "order": 27 },
+			{ "x": 292, "y": 196, "order": 43 },
+			{ "x": 294, "y": 266, "order": 48 },
+			{ "x": 310, "y": 8, "order": 17 },
+			{ "x": 330, "y": 493, "order": 16 },
+			{ "x": 339, "y": 8, "order": 12 },
+			{ "x": 339, "y": 167, "order": 29 },
+			{ "x": 344, "y": 108, "order": 35 },
+			{ "x": 361, "y": 239, "order": 31 },
+			{ "x": 363, "y": 385, "order": 44 },
+			{ "x": 398, "y": 310, "order": 42 },
+			{ "x": 400, "y": 130, "order": 23 },
+			{ "x": 404, "y": 436, "order": 32 },
+			{ "x": 421, "y": 127, "order": 26 },
+			{ "x": 429, "y": 8, "order": 37 },
+			{ "x": 430, "y": 106, "order": 30 },
+			{ "x": 462, "y": 393, "order": 14 },
+			{ "x": 469, "y": 270, "order": 10 },
+			{ "x": 486, "y": 8, "order": 3 },
+			{ "x": 499, "y": 481, "order": 15 },
+			{ "x": 511, "y": 255, "order": 34 },
+			{ "x": 516, "y": 48, "order": 18 },
+			{ "x": 525, "y": 169, "order": 5 }
+		],
+
+		[
+			//Tower
+			{ "x": 7, "y": 8, "order": 1 },
+			{ "x": 7, "y": 52, "order": 13 },
+			{ "x": 7, "y": 243, "order": 8 },
+			{ "x": 7, "y": 486, "order": 22 },
+			{ "x": 26, "y": 391, "order": 7 },
+			{ "x": 27, "y": 31, "order": 23 },
+			{ "x": 27, "y": 89, "order": 31 },
+			{ "x": 28, "y": 303, "order": 20 },
+			{ "x": 28, "y": 336, "order": 25 },
+			{ "x": 37, "y": 234, "order": 33 },
+			{ "x": 59, "y": 77, "order": 6 },
+			{ "x": 76, "y": 462, "order": 15 },
+			{ "x": 91, "y": 245, "order": 34 },
+			{ "x": 114, "y": 31, "order": 19 },
+			{ "x": 118, "y": 323, "order": 42 },
+			{ "x": 132, "y": 87, "order": 36 },
+			{ "x": 163, "y": 370, "order": 40 },
+			{ "x": 171, "y": 255, "order": 21 },
+			{ "x": 192, "y": 8, "order": 28 },
+			{ "x": 212, "y": 483, "order": 38 },
+			{ "x": 228, "y": 95, "order": 44 },
+			{ "x": 231, "y": 205, "order": 46 },
+			{ "x": 293, "y": 380, "order": 10 },
+			{ "x": 297, "y": 190, "order": 43 },
+			{ "x": 297, "y": 260, "order": 48 },
+			{ "x": 298, "y": 8, "order": 17 },
+			{ "x": 298, "y": 89, "order": 35 },
+			{ "x": 312, "y": 462, "order": 29 },
+			{ "x": 320, "y": 261, "order": 45 },
+			{ "x": 340, "y": 17, "order": 37 },
+			{ "x": 350, "y": 121, "order": 12 },
+			{ "x": 350, "y": 174, "order": 41 },
+			{ "x": 355, "y": 371, "order": 27 },
+			{ "x": 357, "y": 469, "order": 3 },
+			{ "x": 376, "y": 289, "order": 11 },
+			{ "x": 388, "y": 8, "order": 4 },
+			{ "x": 407, "y": 45, "order": 47 },
+			{ "x": 421, "y": 284, "order": 30 },
+			{ "x": 436, "y": 159, "order": 39 },
+			{ "x": 445, "y": 8, "order": 18 },
+			{ "x": 445, "y": 211, "order": 26 },
+			{ "x": 463, "y": 422, "order": 24 },
+			{ "x": 477, "y": 29, "order": 2 },
+			{ "x": 497, "y": 153, "order": 5 },
+			{ "x": 499, "y": 108, "order": 14 },
+			{ "x": 503, "y": 281, "order": 16 },
+			{ "x": 537, "y": 418, "order": 9 },
+			{ "x": 556, "y": 215, "order": 32 }
+		],
+
+		[
+			//Inferno
+			{ "x": 7, "y": 8, "order": 30 },
+			{ "x": 7, "y": 16, "order": 2 },
+			{ "x": 7, "y": 95, "order": 12 },
+			{ "x": 7, "y": 271, "order": 27 },
+			{ "x": 7, "y": 308, "order": 8 },
+			{ "x": 7, "y": 464, "order": 1 },
+			{ "x": 16, "y": 164, "order": 26 },
+			{ "x": 41, "y": 378, "order": 39 },
+			{ "x": 50, "y": 471, "order": 13 },
+			{ "x": 51, "y": 101, "order": 17 },
+			{ "x": 80, "y": 260, "order": 35 },
+			{ "x": 81, "y": 48, "order": 4 },
+			{ "x": 91, "y": 143, "order": 47 },
+			{ "x": 115, "y": 8, "order": 25 },
+			{ "x": 141, "y": 360, "order": 28 },
+			{ "x": 153, "y": 269, "order": 41 },
+			{ "x": 164, "y": 55, "order": 44 },
+			{ "x": 173, "y": 101, "order": 36 },
+			{ "x": 173, "y": 492, "order": 6 },
+			{ "x": 187, "y": 160, "order": 48 },
+			{ "x": 194, "y": 388, "order": 19 },
+			{ "x": 200, "y": 373, "order": 20 },
+			{ "x": 204, "y": 282, "order": 45 },
+			{ "x": 239, "y": 469, "order": 11 },
+			{ "x": 240, "y": 8, "order": 32 },
+			{ "x": 271, "y": 163, "order": 43 },
+			{ "x": 276, "y": 255, "order": 46 },
+			{ "x": 296, "y": 428, "order": 3 },
+			{ "x": 297, "y": 281, "order": 16 },
+			{ "x": 306, "y": 8, "order": 10 },
+			{ "x": 317, "y": 17, "order": 15 },
+			{ "x": 327, "y": 84, "order": 29 },
+			{ "x": 348, "y": 142, "order": 40 },
+			{ "x": 348, "y": 342, "order": 21 },
+			{ "x": 370, "y": 405, "order": 22 },
+			{ "x": 401, "y": 103, "order": 18 },
+			{ "x": 407, "y": 40, "order": 31 },
+			{ "x": 421, "y": 508, "order": 7 },
+			{ "x": 453, "y": 215, "order": 33 },
+			{ "x": 455, "y": 377, "order": 34 },
+			{ "x": 460, "y": 170, "order": 38 },
+			{ "x": 475, "y": 319, "order": 42 },
+			{ "x": 488, "y": 412, "order": 37 },
+			{ "x": 504, "y": 8, "order": 24 },
+			{ "x": 515, "y": 67, "order": 5 },
+			{ "x": 517, "y": 211, "order": 14 },
+			{ "x": 532, "y": 305, "order": 23 },
+			{ "x": 556, "y": 335, "order": 9 }
+		],
+
+		[
+			//Necropolis
+			{ "x": 7, "y": 8, "order": 22 },
+			{ "x": 7, "y": 188, "order": 1 },
+			{ "x": 7, "y": 329, "order": 20 },
+			{ "x": 7, "y": 403, "order": 24 },
+			{ "x": 8, "y": 8, "order": 47 },
+			{ "x": 14, "y": 138, "order": 30 },
+			{ "x": 15, "y": 8, "order": 9 },
+			{ "x": 34, "y": 374, "order": 31 },
+			{ "x": 55, "y": 82, "order": 25 },
+			{ "x": 55, "y": 150, "order": 38 },
+			{ "x": 57, "y": 281, "order": 8 },
+			{ "x": 94, "y": 188, "order": 36 },
+			{ "x": 108, "y": 344, "order": 6 },
+			{ "x": 119, "y": 424, "order": 13 },
+			{ "x": 124, "y": 256, "order": 37 },
+			{ "x": 131, "y": 8, "order": 7 },
+			{ "x": 139, "y": 92, "order": 11 },
+			{ "x": 145, "y": 371, "order": 29 },
+			{ "x": 148, "y": 42, "order": 21 },
+			{ "x": 175, "y": 200, "order": 44 },
+			{ "x": 200, "y": 291, "order": 45 },
+			{ "x": 201, "y": 66, "order": 42 },
+			{ "x": 210, "y": 482, "order": 18 },
+			{ "x": 247, "y": 98, "order": 28 },
+			{ "x": 250, "y": 227, "order": 48 },
+			{ "x": 262, "y": 8, "order": 15 },
+			{ "x": 293, "y": 373, "order": 32 },
+			{ "x": 303, "y": 286, "order": 46 },
+			{ "x": 318, "y": 173, "order": 43 },
+			{ "x": 345, "y": 444, "order": 2 },
+			{ "x": 356, "y": 8, "order": 5 },
+			{ "x": 357, "y": 386, "order": 17 },
+			{ "x": 362, "y": 38, "order": 40 },
+			{ "x": 382, "y": 8, "order": 19 },
+			{ "x": 382, "y": 119, "order": 35 },
+			{ "x": 421, "y": 164, "order": 27 },
+			{ "x": 422, "y": 249, "order": 4 },
+			{ "x": 428, "y": 52, "order": 14 },
+			{ "x": 429, "y": 101, "order": 10 },
+			{ "x": 443, "y": 132, "order": 41 },
+			{ "x": 452, "y": 239, "order": 34 },
+			{ "x": 465, "y": 441, "order": 23 },
+			{ "x": 469, "y": 300, "order": 39 },
+			{ "x": 476, "y": 20, "order": 3 },
+			{ "x": 537, "y": 249, "order": 33 },
+			{ "x": 547, "y": 430, "order": 12 },
+			{ "x": 559, "y": 140, "order": 26 },
+			{ "x": 558, "y": 8, "order": 16 }
+		],
+
+		[
+			//Dungeon
+			{ "x": 7, "y": 8, "order": 31 },
+			{ "x": 7, "y": 125, "order": 1 },
+			{ "x": 7, "y": 353, "order": 33 },
+			{ "x": 7, "y": 394, "order": 6 },
+			{ "x": 30, "y": 101, "order": 36 },
+			{ "x": 33, "y": 219, "order": 16 },
+			{ "x": 57, "y": 171, "order": 13 },
+			{ "x": 62, "y": 8, "order": 47 },
+			{ "x": 63, "y": 90, "order": 41 },
+			{ "x": 83, "y": 471, "order": 10 },
+			{ "x": 94, "y": 117, "order": 21 },
+			{ "x": 99, "y": 8, "order": 5 },
+			{ "x": 113, "y": 258, "order": 32 },
+			{ "x": 156, "y": 146, "order": 28 },
+			{ "x": 165, "y": 288, "order": 42 },
+			{ "x": 172, "y": 388, "order": 44 },
+			{ "x": 177, "y": 36, "order": 39 },
+			{ "x": 194, "y": 235, "order": 46 },
+			{ "x": 204, "y": 502, "order": 3 },
+			{ "x": 236, "y": 320, "order": 23 },
+			{ "x": 238, "y": 8, "order": 20 },
+			{ "x": 245, "y": 75, "order": 25 },
+			{ "x": 247, "y": 396, "order": 29 },
+			{ "x": 247, "y": 459, "order": 14 },
+			{ "x": 253, "y": 152, "order": 48 },
+			{ "x": 301, "y": 233, "order": 43 },
+			{ "x": 323, "y": 8, "order": 12 },
+			{ "x": 323, "y": 178, "order": 45 },
+			{ "x": 328, "y": 342, "order": 30 },
+			{ "x": 329, "y": 428, "order": 19 },
+			{ "x": 339, "y": 8, "order": 26 },
+			{ "x": 357, "y": 141, "order": 27 },
+			{ "x": 374, "y": 8, "order": 15 },
+			{ "x": 374, "y": 236, "order": 34 },
+			{ "x": 392, "y": 439, "order": 35 },
+			{ "x": 400, "y": 291, "order": 40 },
+			{ "x": 401, "y": 103, "order": 18 },
+			{ "x": 422, "y": 381, "order": 37 },
+			{ "x": 436, "y": 8, "order": 17 },
+			{ "x": 438, "y": 336, "order": 24 },
+			{ "x": 449, "y": 131, "order": 9 },
+			{ "x": 453, "y": 161, "order": 11 },
+			{ "x": 471, "y": 267, "order": 38 },
+			{ "x": 477, "y": 64, "order": 22 },
+			{ "x": 480, "y": 456, "order": 8 },
+			{ "x": 485, "y": 8, "order": 2 },
+			{ "x": 536, "y": 197, "order": 4 },
+			{ "x": 541, "y": 22, "order": 7 }
+		],
+
+		[
+			//Stronghold
+			{ "x": 7, "y": 8, "order": 6 },
+			{ "x": 7, "y": 229, "order": 14 },
+			{ "x": 7, "y": 405, "order": 15 },
+			{ "x": 7, "y": 465, "order": 10 },
+			{ "x": 12, "y": 8, "order": 9 },
+			{ "x": 32, "y": 245, "order": 21 },
+			{ "x": 32, "y": 277, "order": 33 },
+			{ "x": 36, "y": 337, "order": 19 },
+			{ "x": 39, "y": 15, "order": 36 },
+			{ "x": 47, "y": 115, "order": 23 },
+			{ "x": 49, "y": 178, "order": 25 },
+			{ "x": 70, "y": 8, "order": 1 },
+			{ "x": 101, "y": 35, "order": 41 },
+			{ "x": 111, "y": 311, "order": 44 },
+			{ "x": 123, "y": 156, "order": 45 },
+			{ "x": 138, "y": 423, "order": 32 },
+			{ "x": 140, "y": 224, "order": 43 },
+			{ "x": 144, "y": 136, "order": 11 },
+			{ "x": 149, "y": 452, "order": 18 },
+			{ "x": 158, "y": 475, "order": 5 },
+			{ "x": 191, "y": 68, "order": 7 },
+			{ "x": 202, "y": 12, "order": 39 },
+			{ "x": 218, "y": 349, "order": 34 },
+			{ "x": 219, "y": 285, "order": 42 },
+			{ "x": 222, "y": 96, "order": 28 },
+			{ "x": 262, "y": 8, "order": 8 },
+			{ "x": 279, "y": 166, "order": 48 },
+			{ "x": 279, "y": 425, "order": 22 },
+			{ "x": 303, "y": 314, "order": 27 },
+			{ "x": 320, "y": 109, "order": 16 },
+			{ "x": 326, "y": 146, "order": 47 },
+			{ "x": 333, "y": 160, "order": 46 },
+			{ "x": 362, "y": 26, "order": 4 },
+			{ "x": 365, "y": 441, "order": 17 },
+			{ "x": 380, "y": 297, "order": 38 },
+			{ "x": 392, "y": 242, "order": 29 },
+			{ "x": 427, "y": 275, "order": 40 },
+			{ "x": 445, "y": 85, "order": 2 },
+			{ "x": 446, "y": 424, "order": 30 },
+			{ "x": 459, "y": 347, "order": 37 },
+			{ "x": 463, "y": 53, "order": 24 },
+			{ "x": 484, "y": 210, "order": 20 },
+			{ "x": 488, "y": 8, "order": 26 },
+			{ "x": 489, "y": 303, "order": 35 },
+			{ "x": 529, "y": 8, "order": 31 },
+			{ "x": 529, "y": 421, "order": 3 },
+			{ "x": 558, "y": 87, "order": 13 },
+			{ "x": 563, "y": 261, "order": 12 }
+		],
+
+		[
+			//Fortress
+			{ "x": 7, "y": 8, "order": 36 },
+			{ "x": 7, "y": 152, "order": 25 },
+			{ "x": 7, "y": 306, "order": 34 },
+			{ "x": 7, "y": 388, "order": 23 },
+			{ "x": 7, "y": 434, "order": 15 },
+			{ "x": 23, "y": 417, "order": 37 },
+			{ "x": 32, "y": 232, "order": 38 },
+			{ "x": 42, "y": 137, "order": 39 },
+			{ "x": 47, "y": 440, "order": 8 },
+			{ "x": 56, "y": 19, "order": 47 },
+			{ "x": 71, "y": 8, "order": 1 },
+			{ "x": 87, "y": 219, "order": 30 },
+			{ "x": 90, "y": 26, "order": 41 },
+			{ "x": 104, "y": 397, "order": 33 },
+			{ "x": 116, "y": 345, "order": 40 },
+			{ "x": 134, "y": 215, "order": 11 },
+			{ "x": 175, "y": 168, "order": 19 },
+			{ "x": 191, "y": 428, "order": 13 },
+			{ "x": 200, "y": 326, "order": 24 },
+			{ "x": 216, "y": 98, "order": 18 },
+			{ "x": 221, "y": 398, "order": 20 },
+			{ "x": 225, "y": 235, "order": 46 },
+			{ "x": 239, "y": 8, "order": 9 },
+			{ "x": 245, "y": 40, "order": 7 },
+			{ "x": 248, "y": 208, "order": 48 },
+			{ "x": 261, "y": 439, "order": 5 },
+			{ "x": 262, "y": 134, "order": 26 },
+			{ "x": 297, "y": 352, "order": 22 },
+			{ "x": 309, "y": 99, "order": 16 },
+			{ "x": 320, "y": 262, "order": 43 },
+			{ "x": 323, "y": 404, "order": 10 },
+			{ "x": 326, "y": 200, "order": 45 },
+			{ "x": 331, "y": 20, "order": 17 },
+			{ "x": 345, "y": 178, "order": 21 },
+			{ "x": 353, "y": 8, "order": 3 },
+			{ "x": 358, "y": 290, "order": 42 },
+			{ "x": 381, "y": 399, "order": 14 },
+			{ "x": 400, "y": 65, "order": 12 },
+			{ "x": 428, "y": 160, "order": 35 },
+			{ "x": 448, "y": 293, "order": 29 },
+			{ "x": 451, "y": 94, "order": 27 },
+			{ "x": 453, "y": 424, "order": 2 },
+			{ "x": 462, "y": 397, "order": 32 },
+			{ "x": 465, "y": 8, "order": 4 },
+			{ "x": 486, "y": 163, "order": 44 },
+			{ "x": 492, "y": 184, "order": 31 },
+			{ "x": 517, "y": 304, "order": 6 },
+			{ "x": 549, "y": 8, "order": 28 }
+		],
+
+		[
+			//Conflux
+			{ "x": 7, "y": 8, "order": 1 },
+			{ "x": 7, "y": 54, "order": 6 },
+			{ "x": 7, "y": 227, "order": 16 },
+			{ "x": 7, "y": 426, "order": 9 },
+			{ "x": 15, "y": 48, "order": 22 },
+			{ "x": 45, "y": 375, "order": 32 },
+			{ "x": 48, "y": 249, "order": 28 },
+			{ "x": 86, "y": 500, "order": 15 },
+			{ "x": 93, "y": 55, "order": 37 },
+			{ "x": 99, "y": 245, "order": 7 },
+			{ "x": 101, "y": 354, "order": 27 },
+			{ "x": 104, "y": 175, "order": 35 },
+			{ "x": 107, "y": 14, "order": 21 },
+			{ "x": 124, "y": 296, "order": 38 },
+			{ "x": 134, "y": 8, "order": 4 },
+			{ "x": 181, "y": 466, "order": 26 },
+			{ "x": 182, "y": 200, "order": 40 },
+			{ "x": 189, "y": 381, "order": 33 },
+			{ "x": 192, "y": 40, "order": 8 },
+			{ "x": 192, "y": 364, "order": 11 },
+			{ "x": 201, "y": 124, "order": 48 },
+			{ "x": 203, "y": 330, "order": 42 },
+			{ "x": 228, "y": 293, "order": 45 },
+			{ "x": 235, "y": 39, "order": 25 },
+			{ "x": 242, "y": 335, "order": 44 },
+			{ "x": 275, "y": 488, "order": 5 },
+			{ "x": 278, "y": 202, "order": 46 },
+			{ "x": 290, "y": 80, "order": 13 },
+			{ "x": 291, "y": 115, "order": 20 },
+			{ "x": 308, "y": 225, "order": 43 },
+			{ "x": 310, "y": 158, "order": 39 },
+			{ "x": 312, "y": 24, "order": 12 },
+			{ "x": 317, "y": 8, "order": 2 },
+			{ "x": 323, "y": 443, "order": 10 },
+			{ "x": 327, "y": 253, "order": 41 },
+			{ "x": 330, "y": 36, "order": 36 },
+			{ "x": 349, "y": 330, "order": 34 },
+			{ "x": 349, "y": 426, "order": 17 },
+			{ "x": 407, "y": 191, "order": 47 },
+			{ "x": 421, "y": 430, "order": 31 },
+			{ "x": 428, "y": 246, "order": 23 },
+			{ "x": 467, "y": 90, "order": 29 },
+			{ "x": 481, "y": 13, "order": 30 },
+			{ "x": 489, "y": 346, "order": 18 },
+			{ "x": 504, "y": 113, "order": 19 },
+			{ "x": 504, "y": 190, "order": 24 },
+			{ "x": 507, "y": 8, "order": 14 },
+			{ "x": 542, "y": 436, "order": 3 }
+		]
+	]
+}

+ 0 - 442
config/puzzle_map.txt

@@ -1,442 +0,0 @@
-//description of puzzle's positions and order of discovering. x pos -> y pos -> when discovered
-//Castle
-7	8	39
-7	30	41
-7	102	1
-7	156	23
-7	202	6
-7	320	13
-16	8	39
-22	406	2
-70	301	22
-72	194	11
-101	332	8
-106	8	9
-106	31	29
-114	60	7
-126	329	17
-128	191	21
-152	347	27
-154	239	31
-157	429	34
-166	470	4
-185	127	30
-212	335	36
-214	191	48
-217	226	43
-235	147	35
-245	77	16
-266	384	42
-288	288	45
-298	8	26
-321	177	46
-346	67	38
-354	459	20
-355	397	25
-375	162	28
-382	255	32
-408	32	37
-408	111	14
-421	147	19
-422	466	12
-426	8	15
-436	238	24
-458	336	44
-486	8	40
-487	144	33
-517	145	18
-520	68	5
-524	234	10
-525	327	3
-//Rampart
-7	8	2
-7	101	13
-7	195	20
-7	310	6
-7	378	22
-7	449	21
-61	8	19
-97	42	8
-98	201	24
-108	308	36
-115	461	1
-129	366	7
-134	8	4
-157	188	25
-160	309	39
-162	441	11
-164	126	28
-174	390	33
-178	188	46
-187	258	41
-190	24	38
-215	272	45
-255	443	9
-265	323	40
-277	45	47
-278	383	27
-292	196	43
-294	266	48
-310	8	17
-330	493	16
-339	8	12
-339	167	29
-344	108	35
-361	239	31
-363	385	44
-398	310	42
-400	130	23
-404	436	32
-421	127	26
-429	8	37
-430	106	30
-462	393	14
-469	270	10
-486	8	3
-499	481	15
-511	255	34
-516	48	18
-525	169	5
-//Tower
-7	8	1
-7	52	13
-7	243	8
-7	486	22
-26	391	7
-27	31	23
-27	89	31
-28	303	20
-28	336	25
-37	234	33
-59	77	6
-76	462	15
-91	245	34
-114	31	19
-118	323	42
-132	87	36
-163	370	40
-171	255	21
-192	8	28
-212	483	38
-228	95	44
-231	205	46
-293	380	10
-297	190	43
-297	260	48
-298	8	17
-298	89	35
-312	462	29
-320	261	45
-340	17	37
-350	121	12
-350	174	41
-355	371	27
-357	469	3
-376	289	11
-388	8	4
-407	45	47
-421	284	30
-436	159	39
-445	8	18
-445	211	26
-463	422	24
-477	29	2
-497	153	5
-499	108	14
-503	281	16
-537	418	9
-556	215	32
-//Inferno
-7	8	30
-7	16	2
-7	95	12
-7	271	27
-7	308	8
-7	464	1
-16	164	26
-41	378	39
-50	471	13
-51	101	17
-80	260	35
-81	48	4
-91	143	47
-115	8	25
-141	360	28
-153	269	41
-164	55	44
-173	101	36
-173	492	6
-187	160	48
-194	388	19
-200	373	20
-204	282	45
-239	469	11
-240	8	32
-271	163	43
-276	255	46
-296	428	3
-297	281	16
-306	8	10
-317	17	15
-327	84	29
-348	142	40
-348	342	21
-370	405	22
-401	103	18
-407	40	31
-421	508	7
-453	215	33
-455	377	34
-460	170	38
-475	319	42
-488	412	37
-504	8	24
-515	67	5
-517	211	14
-532	305	23
-556	335	9
-//Necropolis
-7	8	22
-7	188	1
-7	329	20
-7	403	24
-8	8	47
-14	138	30
-15	8	9
-34	374	31
-55	82	25
-55	150	38
-57	281	8
-94	188	36
-108	344	6
-119	424	13
-124	256	37
-131	8	7
-139	92	11
-145	371	29
-148	42	21
-175	200	44
-200	291	45
-201	66	42
-210	482	18
-247	98	28
-250	227	48
-262	8	15
-293	373	32
-303	286	46
-318	173	43
-345	444	2
-356	8	5
-357	386	17
-362	38	40
-382	8	19
-382	119	35
-421	164	27
-422	249	4
-428	52	14
-429	101	10
-443	132	41
-452	239	34
-465	441	23
-469	300	39
-476	20	3
-537	249	33
-547	430	12
-559	140	26
-558	8	16
-//Dungeon
-7	8	31
-7	125	1
-7	353	33
-7	394	6
-30	101	36
-33	219	16
-57	171	13
-62	8	47
-63	90	41
-83	471	10
-94	117	21
-99	8	5
-113	258	32
-156	146	28
-165	288	42
-172	388	44
-177	36	39
-194	235	46
-204	502	3
-236	320	23
-238	8	20
-245	75	25
-247	396	29
-247	459	14
-253	152	48
-301	233	43
-323	8	12
-323	178	45
-328	342	30
-329	428	19
-339	8	26
-357	141	27
-374	8	15
-374	236	34
-392	439	35
-400	291	40
-401	103	18
-422	381	37
-436	8	17
-438	336	24
-449	131	9
-453	161	11
-471	267	38
-477	64	22
-480	456	8
-485	8	2
-536	197	4
-541	22	7
-//Stronghold
-7	8	6
-7	229	14
-7	405	15
-7	465	10
-12	8	9
-32	245	21
-32	277	33
-36	337	19
-39	15	36
-47	115	23
-49	178	25
-70	8	1
-101	35	41
-111	311	44
-123	156	45
-138	423	32
-140	224	43
-144	136	11
-149	452	18
-158	475	5
-191	68	7
-202	12	39
-218	349	34
-219	285	42
-222	96	28
-262	8	8
-279	166	48
-279	425	22
-303	314	27
-320	109	16
-326	146	47
-333	160	46
-362	26	4
-365	441	17
-380	297	38
-392	242	29
-427	275	40
-445	85	2
-446	424	30
-459	347	37
-463	53	24
-484	210	20
-488	8	26
-489	303	35
-529	8	31
-529	421	3
-558	87	13
-563	261	12
-//Fortress
-7	8	36
-7	152	25
-7	306	34
-7	388	23
-7	434	15
-23	417	37
-32	232	38
-42	137	39
-47	440	8
-56	19	47
-71	8	1
-87	219	30
-90	26	41
-104	397	33
-116	345	40
-134	215	11
-175	168	19
-191	428	13
-200	326	24
-216	98	18
-221	398	20
-225	235	46
-239	8	9
-245	40	7
-248	208	48
-261	439	5
-262	134	26
-297	352	22
-309	99	16
-320	262	43
-323	404	10
-326	200	45
-331	20	17
-345	178	21
-353	8	3
-358	290	42
-381	399	14
-400	65	12
-428	160	35
-448	293	29
-451	94	27
-453	424	2
-462	397	32
-465	8	4
-486	163	44
-492	184	31
-517	304	6
-549	8	28
-//Conflux
-7	8	1
-7	54	6
-7	227	16
-7	426	9
-15	48	22
-45	375	32
-48	249	28
-86	500	15
-93	55	37
-99	245	7
-101	354	27
-104	175	35
-107	14	21
-124	296	38
-134	8	4
-181	466	26
-182	200	40
-189	381	33
-192	40	8
-192	364	11
-201	124	48
-203	330	42
-228	293	45
-235	39	25
-242	335	44
-275	488	5
-278	202	46
-290	80	13
-291	115	20
-308	225	43
-310	158	39
-312	24	12
-317	8	2
-323	443	10
-327	253	41
-330	36	36
-349	330	34
-349	426	17
-407	191	47
-421	430	31
-428	246	23
-467	90	29
-481	13	30
-489	346	18
-504	113	19
-504	190	24
-507	8	14
-542	436	3

+ 28 - 31
lib/CHeroHandler.cpp

@@ -162,45 +162,42 @@ void CHeroHandler::loadObstacles()
 
 void CHeroHandler::loadPuzzleInfo()
 {
-	std::ifstream inp;
-	inp.open(DATA_DIR "/config/puzzle_map.txt", std::ios_base::in|std::ios_base::binary);
-	if(!inp.is_open())
-	{
-		tlog1<<"missing file: config/puzzle_map.txt"<<std::endl;
-	}
-	else
-	{
-		const int MAX_DUMP = 10000;
-		char dump[MAX_DUMP+1];
+	const JsonNode config(DATA_DIR "/config/puzzle_map.json");
 
-		inp.getline(dump, MAX_DUMP);
+	int faction = 0;
 
-		for(int fct = 0; fct < F_NUMBER; ++fct)
-		{
-			std::string dmp;
-			inp >> dmp;
+	BOOST_FOREACH(const JsonNode &puzzle, config["puzzles"].Vector()) {
 
-			for(int g=0; g<PUZZLES_PER_FACTION; ++g)
-			{
-				SPuzzleInfo spi;
-				inp >> spi.x;
-				inp >> spi.y;
-				inp >> spi.whenUncovered;
-				spi.number = g;
+		int idx = 0;
+
+		BOOST_FOREACH(const JsonNode &piece, puzzle.Vector()) {
+
+			SPuzzleInfo spi;
+
+			spi.x = piece["x"].Float();
+			spi.y = piece["y"].Float();
+			spi.whenUncovered = piece["order"].Float();
+			spi.number = idx;
 				
-				//filename calculation
-				std::ostringstream suffix;
-				suffix << std::setfill('0') << std::setw(2);
-				suffix << g << ".BMP";
+			// filename calculation
+			std::ostringstream suffix;
+			suffix << std::setfill('0') << std::setw(2);
+			suffix << idx << ".BMP";
 
-				static const std::string factionToInfix[F_NUMBER] = {"CAS", "RAM", "TOW", "INF", "NEC", "DUN", "STR", "FOR", "ELE"};
-				spi.filename = "PUZ" + factionToInfix[fct] + suffix.str();
+			static const std::string factionToInfix[F_NUMBER] = {"CAS", "RAM", "TOW", "INF", "NEC", "DUN", "STR", "FOR", "ELE"};
+			spi.filename = "PUZ" + factionToInfix[faction] + suffix.str();
 
-				puzzleInfo[fct].push_back(spi);
-			}
+			puzzleInfo[faction].push_back(spi);
+
+			idx ++;
 		}
-		inp.close();
+
+		assert(idx == PUZZLES_PER_FACTION);
+
+		faction ++;
 	}
+
+	assert(faction == F_NUMBER);
 }
 
 void CHeroHandler::loadHeroes()