Преглед изворни кода

Created wall_pos.json from wall_pos.txt.

Frank Zago пре 14 година
родитељ
комит
e5349c58cd
3 измењених фајлова са 290 додато и 228 уклоњено
  1. 10 27
      client/Graphics.cpp
  2. 280 0
      config/wall_pos.json
  3. 0 201
      config/wall_pos.txt

+ 10 - 27
client/Graphics.cpp

@@ -367,35 +367,18 @@ void Graphics::loadHeroPortraits()
 
 void Graphics::loadWallPositions()
 {
-	std::ifstream inp;
-	inp.open(DATA_DIR "/config/wall_pos.txt", std::ios_base::in|std::ios_base::binary);
-	if(!inp.is_open())
-	{
-		tlog1<<"missing file: config/wall_pos.txt"<<std::endl;
-	}
-	else
-	{
-		const int MAX_BUF = 2000;
-		char buf[MAX_BUF+1];
-
-		// skip the first three lines because they are comment lines
-		inp.getline(buf, MAX_BUF);
-		inp.getline(buf, MAX_BUF);
-		inp.getline(buf, MAX_BUF);
-		std::string dump;
-		for(int g=0; g<ARRAY_COUNT(wallPositions); ++g)
-		{
-			inp >> dump;
-			for(int b = 0; b < 21; ++b)
-			{
-				Point pt;
-				inp >> pt.x;
-				inp >> pt.y;
-				wallPositions[g].push_back(pt);
-			}
+	const JsonNode config(DATA_DIR "/config/wall_pos.json");
+
+	BOOST_FOREACH(const JsonNode &town, config["towns"].Vector()) {
+		int townID = town["id"].Float();
+
+		BOOST_FOREACH(const JsonNode &coords, town["pos"].Vector()) {
+			Point pt(coords["x"].Float(), coords["y"].Float());
+			wallPositions[townID].push_back(pt);
 		}
+
+		assert(wallPositions[townID].size() == 21);
 	}
-	inp.close();
 }
 
 void Graphics::loadHeroAnims()

+ 280 - 0
config/wall_pos.json

@@ -0,0 +1,280 @@
+{
+
+	// Description of positions of wall parts' positions.
+	// pos is a set of coordinates (x, y):
+	//   1. background wall
+	//   2. keep
+	//   3. bottom tower
+	//   4. bottom wall
+	//   5. wall below gate
+	//   6. wall over gate
+	//   7. upper wall
+	//   8. upper tower
+	//   9. gate
+	//  10. gate arch
+	//  11. bottom static wall
+	//  12. upper static wall
+	//  13. moat
+	//  14. mlip
+	//  15. keep turret cover
+	//  16. lower turret cover
+	//  17. upper turret cover
+	//  18. keep creature
+	//  19. lower turret creature
+	//  20. upper turret creature
+	//  21. y=turret height(from top of def image); x is not used
+
+	"towns": [
+		{
+			"id": 0,
+			"name": "Castle",
+			"pos": [
+				{ "x": 600, "y": 49 },
+				{ "x": 720, "y": 158 },
+				{ "x": 602, "y": 500 },
+				{ "x": 528, "y": 350 }, 
+				{ "x": 469, "y": 291 }, 
+				{ "x": 470, "y": 127 }, 
+				{ "x": 524, "y": 32 }, 
+				{ "x": 569, "y": 35 }, 
+				{ "x": 399, "y": 274 }, 
+				{ "x": 477, "y": 238 }, 
+				{ "x": 512, "y": 347 }, 
+				{ "x": 489, "y": 79 }, 
+				{ "x": 410, "y": 90 }, 
+				{ "x": 403, "y": 80 }, 
+				{ "x": 720, "y": 158 },
+				{ "x": 602, "y": 500 }, 
+				{ "x": 557, "y": 24 }, 
+				{ "x": 526, "y": -29 },
+				{ "x": 394, "y": 299 },
+				{ "x": 342, "y": -187 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 1,
+			"name": "Rampart",
+			"pos": [
+				{ "x": 608, "y": 46 },
+				{ "x": 724, "y": 189 },
+				{ "x": 594, "y": 511 }, 
+				{ "x": 549, "y": 451 }, 
+				{ "x": 469, "y": 309 }, 
+				{ "x": 469, "y": 186 }, 
+				{ "x": 530, "y": 57 }, 
+				{ "x": 565, "y": 31 }, 
+				{ "x": 403, "y": 271 }, 
+				{ "x": 460, "y": 220 }, 
+				{ "x": 510, "y": 364 }, 
+				{ "x": 492, "y": 103 }, 
+				{ "x": 410, "y": 77 }, 
+				{ "x": 410, "y": 97 }, 
+				{ "x": 724, "y": 189 },
+				{ "x": 594, "y": 511 }, 
+				{ "x": 566, "y": 31 }, 
+				{ "x": 532, "y": -27 },
+				{ "x": 371, "y": 296 },
+				{ "x": 341, "y": -186 },
+				{ "x": 0, "y": 232 }
+			]
+		},
+
+		{
+			"id": 2,
+			"name": "Tower",
+			"pos": [
+				{ "x": 615, "y": 57 },
+				{ "x": 726, "y": 148 },
+				{ "x": 592, "y": 516 },
+				{ "x": 547, "y": 452 }, 
+				{ "x": 475, "y": 298 }, 
+				{ "x": 488, "y": 190 }, 
+				{ "x": 547, "y": 66 }, 
+				{ "x": 580, "y": 36 }, 
+				{ "x": 400, "y": 253 }, 
+				{ "x": 471, "y": 187 }, 
+				{ "x": 517, "y": 365 }, 
+				{ "x": 514, "y": 79 }, 
+				{ "x": 410, "y": 90 }, 
+				{ "x": 410, "y": 80 }, 
+				{ "x": 726, "y": 148 },
+				{ "x": 592, "y": 516 }, 
+				{ "x": 580, "y": 36 }, 
+				{ "x": 499, "y": -16 },
+				{ "x": 355, "y": 311 },
+				{ "x": 346, "y": -175 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 3,
+			"name": "Inferno",
+			"pos": [
+				{ "x": 606, "y": 52 },
+				{ "x": 730, "y": 179 },
+				{ "x": 595, "y": 514 }, 
+				{ "x": 561, "y": 451 }, 
+				{ "x": 485, "y": 316 }, 
+				{ "x": 480, "y": 151 }, 
+				{ "x": 532, "y": 71 }, 
+				{ "x": 569, "y": 27 }, 
+				{ "x": 408, "y": 254 }, 
+				{ "x": 477, "y": 221 }, 
+				{ "x": 522, "y": 376 }, 
+				{ "x": 502, "y": 92 }, 
+				{ "x": 403, "y": 68 }, 
+				{ "x": 403, "y": 68 }, 
+				{ "x": 730, "y": 179 },
+				{ "x": 595, "y": 514 }, 
+				{ "x": 569, "y": 27 }, 
+				{ "x": 511, "y": -37 },
+				{ "x": 369, "y": 298 },
+				{ "x": 341, "y": -187 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 4,
+			"name": "Necropolis",
+			"pos": [
+				{ "x": 604, "y": 58 },
+				{ "x": 730, "y": 164 },
+				{ "x": 592, "y": 512 }, 
+				{ "x": 536, "y": 445 }, 
+				{ "x": 478, "y": 323 }, 
+				{ "x": 487, "y": 164 }, 
+				{ "x": 543, "y": 66 }, 
+				{ "x": 561, "y": 26 }, 
+				{ "x": 401, "y": 262 }, 
+				{ "x": 474, "y": 240 }, 
+				{ "x": 509, "y": 372 }, 
+				{ "x": 504, "y": 97 }, 
+				{ "x": 406, "y": 77 }, 
+				{ "x": -1, "y": -1 },
+				{ "x": 730, "y": 164 },
+				{ "x": 592, "y": 512 }, 
+				{ "x": 561, "y": 26 }, 
+				{ "x": 501, "y": 98 },
+				{ "x": 371, "y": 303 },
+				{ "x": 339, "y": -177 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 5,
+			"name": "Dungeon",
+			"pos": [
+				{ "x": 608, "y": 50 },
+				{ "x": 732, "y": 162 },
+				{ "x": 560, "y": 495 }, 
+				{ "x": 559, "y": 448 }, 
+				{ "x": 471, "y": 296 }, 
+				{ "x": 477, "y": 180 }, 
+				{ "x": 523, "y": 56 }, 
+				{ "x": 565, "y": 15 }, 
+				{ "x": 395, "y": 260 }, 
+				{ "x": 471, "y": 164 }, 
+				{ "x": 522, "y": 305 }, 
+				{ "x": 494, "y": 53 }, 
+				{ "x": 283, "y": 94 }, 
+				{ "x": 283, "y": 94 }, 
+				{ "x": 732, "y": 162 },
+				{ "x": 600, "y": 495 }, 
+				{ "x": 565, "y": 15 }, 
+				{ "x": 570, "y": -50 },
+				{ "x": 410, "y": 293 },
+				{ "x": 381, "y": -187 },
+				{ "x": 0, "y": 230 }
+			]
+		},
+
+		{
+			"id": 6,
+			"name": "Stronghold",
+			"pos": [
+				{ "x": 617, "y": 62 },
+				{ "x": 731, "y": 168 },
+				{ "x": 586, "y": 508 }, 
+				{ "x": 553, "y": 440 }, 
+				{ "x": 483, "y": 304 }, 
+				{ "x": 476, "y": 189 }, 
+				{ "x": 534, "y": 69 }, 
+				{ "x": 568, "y": 30 }, 
+				{ "x": 407, "y": 266 }, 
+				{ "x": 478, "y": 235 }, 
+				{ "x": 511, "y": 380 }, 
+				{ "x": 499, "y": 107 }, 
+				{ "x": 410, "y": 90 }, 
+				{ "x": 410, "y": 91 }, 
+				{ "x": 731, "y": 168 },
+				{ "x": 586, "y": 508 }, 
+				{ "x": 568, "y": 30 }, 
+				{ "x": 531, "y": -45 },
+				{ "x": 361, "y": 290 },
+				{ "x": 342, "y": -187 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 7,
+			"name": "Fortress",
+			"pos": [
+				{ "x": 599, "y": 62 },
+				{ "x": 721, "y": 178 },
+				{ "x": 599, "y": 505 }, 
+				{ "x": 546, "y": 441 }, 
+				{ "x": 486, "y": 306 }, 
+				{ "x": 498, "y": 184 }, 
+				{ "x": 526, "y": 80 }, 
+				{ "x": 548, "y": 27 }, 
+				{ "x": 392, "y": 253 }, 
+				{ "x": 483, "y": 236 }, 
+				{ "x": 522, "y": 382 }, 
+				{ "x": 508, "y": 130 }, 
+				{ "x": 383, "y": 95 }, 
+				{ "x": 376, "y": 70 }, 
+				{ "x": 721, "y": 178 },
+				{ "x": 599, "y": 505 }, 
+				{ "x": 548, "y": 27 }, 
+				{ "x": 541, "y": -37 },
+				{ "x": 372, "y": 308 },
+				{ "x": 326, "y": -182 },
+				{ "x": 0, "y": 231 }
+			]
+		},
+
+		{
+			"id": 8,
+			"name": "Conflux",
+			"pos": [
+				{ "x": 600, "y": 50 },
+				{ "x": 736, "y": 159 },
+				{ "x": 608, "y": 505 }, 
+				{ "x": 509, "y": 346 }, 
+				{ "x": 468, "y": 299 }, 
+				{ "x": 471, "y": 147 }, 
+				{ "x": 521, "y": 41 }, 
+				{ "x": 576, "y": 28 }, 
+				{ "x": 408, "y": 254 }, 
+				{ "x": 486, "y": 232 }, 
+				{ "x": 509, "y": 346 }, 
+				{ "x": 490, "y": 97 }, 
+				{ "x": 407, "y": 80 }, 
+				{ "x": 407, "y": 80 }, 
+				{ "x": 736, "y": 159 },
+				{ "x": 608, "y": 505 }, 
+				{ "x": 576, "y": 28 }, 
+				{ "x": 529, "y": -42 },
+				{ "x": 382, "y": 308 },
+				{ "x": 341, "y": -162 },
+				{ "x": 0, "y": 229 }
+			]
+		}
+	]
+}

+ 0 - 201
config/wall_pos.txt

@@ -1,201 +0,0 @@
-//this file is a description of positions of wall parts' positions, following lines contain positions of: 1. background wall, 2. keep, 3. bottom tower, 4. bottom wall, 5. wall below gate, 
-//6. wall over gate, 7. upper wall, 8. upper tower, 9. gate, 10. gate arch, 11. bottom static wall, 12. upper static wall, 13. moat, 14. mlip, 
-//15. keep turret cover, 16. lower turret cover, 17. upper turret cover, 18. keep creature, 19. lower turret creature, 20. upper turret creature (x, y), 21. 2nd value: turret height(from top of def image), 1st value: not used
-//Castle 
-600 49
-720 158
-602 500 
-528 350 
-469 291 
-470 127 
-524 32 
-569 35 
-399 274 
-477 238 
-512 347 
-489 79 
-410 90 
-403 80 
-720 158
-602 500 
-557 24 
-526 -29
-394 299
-342 -187
-0 231
-//Rampart 
-608 46
-724 189
-594 511 
-549 451 
-469 309 
-469 186 
-530 57 
-565 31 
-403 271 
-460 220 
-510 364 
-492 103 
-410 77 
-410 97 
-724 189
-594 511 
-566 31 
-532 -27
-371 296
-341 -186
-0 232
-//Tower 
-615 57
-726 148
-592 516
-547 452 
-475 298 
-488 190 
-547 66 
-580 36 
-400 253 
-471 187 
-517 365 
-514 79 
-410 90 
-410 80 
-726 148
-592 516 
-580 36 
-499 -16
-355 311
-346 -175
-0 231
-//Inferno 
-606 52
-730 179
-595 514 
-561 451 
-485 316 
-480 151 
-532 71 
-569 27 
-408 254 
-477 221 
-522 376 
-502 92 
-403 68 
-403 68 
-730 179
-595 514 
-569 27 
-511 -37
-369 298
-341 -187
-0 231
-//Necropolis 
-604 58
-730 164
-592 512 
-536 445 
-478 323 
-487 164 
-543 66 
-561 26 
-401 262 
-474 240 
-509 372 
-504 97 
-406 77 
--1 -1
-730 164
-592 512 
-561 26 
-501 98
-371 303
-339 -177
-0 231
-//Dungeon 
-608 50
-732 162
-560 495 
-559 448 
-471 296 
-477 180 
-523 56 
-565 15 
-395 260 
-471 164 
-522 305 
-494 53 
-283 94 
-283 94 
-732 162
-600 495 
-565 15 
-570 -50
-410 293
-381 -187
-0 230
-//Stronghold 
-617 62
-731 168
-586 508 
-553 440 
-483 304 
-476 189 
-534 69 
-568 30 
-407 266 
-478 235 
-511 380 
-499 107 
-410 90 
-410 91 
-731 168
-586 508 
-568 30 
-531 -45
-361 290
-342 -187
-0 231
-//Fortress 
-599 62
-721 178
-599 505 
-546 441 
-486 306 
-498 184 
-526 80 
-548 27 
-392 253 
-483 236 
-522 382 
-508 130 
-383 95 
-376 70 
-721 178
-599 505 
-548 27 
-541 -37
-372 308
-326 -182
-0 231
-//Conflux 
-600 50
-736 159
-608 505 
-509 346 
-468 299 
-471 147 
-521 41 
-576 28 
-408 254 
-486 232 
-509 346 
-490 97 
-407 80 
-407 80 
-736 159
-608 505 
-576 28 
-529 -42
-382 308
-341 -162
-0 229