From 91b3736886419bff0605be1be39cf75840248109 Mon Sep 17 00:00:00 2001 From: "jason@long.name" Date: Sat, 20 Jul 2013 21:10:29 +0000 Subject: [PATCH] tiles: transfer ZONEBIT knowledge to tiles.rc and synthesize ZONEBIT when saving (for compatibility) git-svn-id: https://micropolis.googlecode.com/svn/trunk/micropolis-java@740 d9718cc8-9f43-0410-858b-315f434eb58c --- graphics/tiles.rc | 114 +++++++++--------- src/micropolisj/engine/MapScanner.java | 6 +- src/micropolisj/engine/Micropolis.java | 5 +- src/micropolisj/engine/TileConstants.java | 9 +- src/micropolisj/engine/TileSpec.java | 12 +- src/micropolisj/engine/ToolStroke.java | 3 +- .../gui/MicropolisDrawingArea.java | 2 +- src/micropolisj/gui/OverlayMapView.java | 2 +- 8 files changed, 83 insertions(+), 70 deletions(-) diff --git a/graphics/tiles.rc b/graphics/tiles.rc index a86c301..8818ceb 100644 --- a/graphics/tiles.rc +++ b/graphics/tiles.rc @@ -248,7 +248,7 @@ 241 res_zones@16,0 242 res_zones@32,0 243 res_zones@0,16 -244 res_zones@16,16 +244 res_zones@16,16 (zone) 245 res_zones@32,16 246 res_zones@0,32 247 res_zones@16,32 @@ -269,7 +269,7 @@ 262 res_zones@16,48 263 res_zones@32,48 264 res_zones@0,64 -265 res_zones@16,64 +265 res_zones@16,64 (zone) 266 res_zones@32,64 267 res_zones@0,80 268 res_zones@16,80 @@ -278,7 +278,7 @@ 271 res_zones@16,96 272 res_zones@32,96 273 res_zones@0,112 -274 res_zones@16,112 +274 res_zones@16,112 (zone) 275 res_zones@32,112 276 res_zones@0,128 277 res_zones@16,128 @@ -287,7 +287,7 @@ 280 res_zones@16,144 281 res_zones@32,144 282 res_zones@0,160 -283 res_zones@16,160 +283 res_zones@16,160 (zone) 284 res_zones@32,160 285 res_zones@0,176 286 res_zones@16,176 @@ -296,7 +296,7 @@ 289 res_zones@16,192 290 res_zones@32,192 291 res_zones@0,208 -292 res_zones@16,208 +292 res_zones@16,208 (zone) 293 res_zones@32,208 294 res_zones@0,224 295 res_zones@16,224 @@ -305,7 +305,7 @@ 298 res_zones@16,240 299 res_zones@32,240 300 res_zones@0,256 -301 res_zones@16,256 +301 res_zones@16,256 (zone) 302 res_zones@32,256 303 res_zones@0,272 304 res_zones@16,272 @@ -314,7 +314,7 @@ 307 res_zones@16,288 308 res_zones@32,288 309 res_zones@0,304 -310 res_zones@16,304 +310 res_zones@16,304 (zone) 311 res_zones@32,304 312 res_zones@0,320 313 res_zones@16,320 @@ -323,7 +323,7 @@ 316 res_zones@16,336 317 res_zones@32,336 318 res_zones@0,352 -319 res_zones@16,352 +319 res_zones@16,352 (zone) 320 res_zones@32,352 321 res_zones@0,368 322 res_zones@16,368 @@ -332,7 +332,7 @@ 325 res_zones@16,384 326 res_zones@32,384 327 res_zones@0,400 -328 res_zones@16,400 +328 res_zones@16,400 (zone) 329 res_zones@32,400 330 res_zones@0,416 331 res_zones@16,416 @@ -341,7 +341,7 @@ 334 res_zones@16,432 335 res_zones@32,432 336 res_zones@0,448 -337 res_zones@16,448 +337 res_zones@16,448 (zone) 338 res_zones@32,448 339 res_zones@0,464 340 res_zones@16,464 @@ -350,7 +350,7 @@ 343 res_zones@16,480 344 res_zones@32,480 345 res_zones@0,496 -346 res_zones@16,496 +346 res_zones@16,496 (zone) 347 res_zones@32,496 348 res_zones@0,512 349 res_zones@16,512 @@ -359,7 +359,7 @@ 352 res_zones@16,528 353 res_zones@32,528 354 res_zones@0,544 -355 res_zones@16,544 +355 res_zones@16,544 (zone) 356 res_zones@32,544 357 res_zones@0,560 358 res_zones@16,560 @@ -368,7 +368,7 @@ 361 res_zones@16,576 362 res_zones@32,576 363 res_zones@0,592 -364 res_zones@16,592 +364 res_zones@16,592 (zone) 365 res_zones@32,592 366 res_zones@0,608 367 res_zones@16,608 @@ -377,7 +377,7 @@ 370 res_zones@16,624 371 res_zones@32,624 372 res_zones@0,640 -373 res_zones@16,640 +373 res_zones@16,640 (zone) 374 res_zones@32,640 375 res_zones@0,656 376 res_zones@16,656 @@ -386,7 +386,7 @@ 379 res_zones@16,672 380 res_zones@32,672 381 res_zones@0,688 -382 res_zones@16,688 +382 res_zones@16,688 (zone) 383 res_zones@32,688 384 res_zones@0,704 385 res_zones@16,704 @@ -395,7 +395,7 @@ 388 res_zones@16,720 389 res_zones@32,720 390 res_zones@0,736 -391 res_zones@16,736 +391 res_zones@16,736 (zone) 392 res_zones@32,736 393 res_zones@0,752 394 res_zones@16,752 @@ -404,7 +404,7 @@ 397 res_zones@16,768 398 res_zones@32,768 399 res_zones@0,784 -400 res_zones@16,784 +400 res_zones@16,784 (zone) 401 res_zones@32,784 402 res_zones@0,800 403 res_zones@16,800 @@ -413,7 +413,7 @@ 406 res_zones@16,816 407 res_zones@32,816 408 res_zones@0,832 -409 res_zones@16,832 +409 res_zones@16,832 (zone) 410 res_zones@32,832 411 res_zones@0,848 412 res_zones@16,848 @@ -422,7 +422,7 @@ 415 res_zones@16,864 416 res_zones@32,864 417 res_zones@0,880 -418 res_zones@16,880 +418 res_zones@16,880 (zone) 419 res_zones@32,880 420 res_zones@0,896 421 res_zones@16,896 @@ -432,7 +432,7 @@ 424 com_zones@16,0 425 com_zones@32,0 426 com_zones@0,16 -427 com_zones@16,16 +427 com_zones@16,16 (zone) 428 com_zones@32,16 429 com_zones@0,32 430 com_zones@16,32 @@ -441,7 +441,7 @@ 433 com_zones@16,48 434 com_zones@32,48 435 com_zones@0,64 -436 com_zones@16,64 +436 com_zones@16,64 (zone) 437 com_zones@32,64 438 com_zones@0,80 439 com_zones@16,80 @@ -450,7 +450,7 @@ 442 com_zones@16,96 443 com_zones@32,96 444 com_zones@0,112 -445 com_zones@16,112 +445 com_zones@16,112 (zone) 446 com_zones@32,112 447 com_zones@0,128 448 com_zones@16,128 @@ -459,7 +459,7 @@ 451 com_zones@16,144 452 com_zones@32,144 453 com_zones@0,160 -454 com_zones@16,160 +454 com_zones@16,160 (zone) 455 com_zones@32,160 456 com_zones@0,176 457 com_zones@16,176 @@ -468,7 +468,7 @@ 460 com_zones@16,192 461 com_zones@32,192 462 com_zones@0,208 -463 com_zones@16,208 +463 com_zones@16,208 (zone) 464 com_zones@32,208 465 com_zones@0,224 466 com_zones@16,224 @@ -477,7 +477,7 @@ 469 com_zones@16,240 470 com_zones@32,240 471 com_zones@0,256 -472 com_zones@16,256 +472 com_zones@16,256 (zone) 473 com_zones@32,256 474 com_zones@0,272 475 com_zones@16,272 @@ -486,7 +486,7 @@ 478 com_zones@16,288 479 com_zones@32,288 480 com_zones@0,304 -481 com_zones@16,304 +481 com_zones@16,304 (zone) 482 com_zones@32,304 483 com_zones@0,320 484 com_zones@16,320 @@ -495,7 +495,7 @@ 487 com_zones@16,336 488 com_zones@32,336 489 com_zones@0,352 -490 com_zones@16,352 +490 com_zones@16,352 (zone) 491 com_zones@32,352 492 com_zones@0,368 493 com_zones@16,368 @@ -504,7 +504,7 @@ 496 com_zones@16,384 497 com_zones@32,384 498 com_zones@0,400 -499 com_zones@16,400 +499 com_zones@16,400 (zone) 500 com_zones@32,400 501 com_zones@0,416 502 com_zones@16,416 @@ -513,7 +513,7 @@ 505 com_zones@16,432 506 com_zones@32,432 507 com_zones@0,448 -508 com_zones@16,448 +508 com_zones@16,448 (zone) 509 com_zones@32,448 510 com_zones@0,464 511 com_zones@16,464 @@ -522,7 +522,7 @@ 514 com_zones@16,480 515 com_zones@32,480 516 com_zones@0,496 -517 com_zones@16,496 +517 com_zones@16,496 (zone) 518 com_zones@32,496 519 com_zones@0,512 520 com_zones@16,512 @@ -531,7 +531,7 @@ 523 com_zones@16,528 524 com_zones@32,528 525 com_zones@0,544 -526 com_zones@16,544 +526 com_zones@16,544 (zone) 527 com_zones@32,544 528 com_zones@0,560 529 com_zones@16,560 @@ -540,7 +540,7 @@ 532 com_zones@16,576 533 com_zones@32,576 534 com_zones@0,592 -535 com_zones@16,592 +535 com_zones@16,592 (zone) 536 com_zones@32,592 537 com_zones@0,608 538 com_zones@16,608 @@ -549,7 +549,7 @@ 541 com_zones@16,624 542 com_zones@32,624 543 com_zones@0,640 -544 com_zones@16,640 +544 com_zones@16,640 (zone) 545 com_zones@32,640 546 com_zones@0,656 547 com_zones@16,656 @@ -558,7 +558,7 @@ 550 com_zones@16,672 551 com_zones@32,672 552 com_zones@0,688 -553 com_zones@16,688 +553 com_zones@16,688 (zone) 554 com_zones@32,688 555 com_zones@0,704 556 com_zones@16,704 @@ -567,7 +567,7 @@ 559 com_zones@16,720 560 com_zones@32,720 561 com_zones@0,736 -562 com_zones@16,736 +562 com_zones@16,736 (zone) 563 com_zones@32,736 564 com_zones@0,752 565 com_zones@16,752 @@ -576,7 +576,7 @@ 568 com_zones@16,768 569 com_zones@32,768 570 com_zones@0,784 -571 com_zones@16,784 +571 com_zones@16,784 (zone) 572 com_zones@32,784 573 com_zones@0,800 574 com_zones@16,800 @@ -585,7 +585,7 @@ 577 com_zones@16,816 578 com_zones@32,816 579 com_zones@0,832 -580 com_zones@16,832 +580 com_zones@16,832 (zone) 581 com_zones@32,832 582 com_zones@0,848 583 com_zones@16,848 @@ -594,7 +594,7 @@ 586 com_zones@16,864 587 com_zones@32,864 588 com_zones@0,880 -589 com_zones@16,880 +589 com_zones@16,880 (zone) 590 com_zones@32,880 591 com_zones@0,896 592 com_zones@16,896 @@ -603,7 +603,7 @@ 595 com_zones@16,912 596 com_zones@32,912 597 com_zones@0,928 -598 com_zones@16,928 +598 com_zones@16,928 (zone) 599 com_zones@32,928 600 com_zones@0,944 601 com_zones@16,944 @@ -612,7 +612,7 @@ 604 com_zones@16,960 605 com_zones@32,960 606 com_zones@0,976 -607 com_zones@16,976 +607 com_zones@16,976 (zone) 608 com_zones@32,976 609 com_zones@0,992 610 com_zones@16,992 @@ -622,7 +622,7 @@ 613 ind_zones@16,0 614 ind_zones@32,0 615 ind_zones@0,16 -616 ind_zones@16,16 +616 ind_zones@16,16 (zone) 617 ind_zones@32,16 618 ind_zones@0,32 619 ind_zones@16,32 @@ -631,7 +631,7 @@ 622 ind_zones@16,48 623 ind_zones@32,48 624 ind_zones@0,64 -625 ind_zones@16,64 +625 ind_zones@16,64 (zone) 626 ind_zones@32,64 627 ind_zones@0,80 628 ind_zones@16,80 @@ -640,7 +640,7 @@ 631 ind_zones@16,96 632 ind_zones@32,96 633 ind_zones@0,112 -634 ind_zones@16,112 +634 ind_zones@16,112 (zone) 635 ind_zones@32,112 636 ind_zones@0,128 637 ind_zones@16,128 @@ -649,7 +649,7 @@ 640 ind_zones@16,144 641 ind_zones@32,144 642 ind_zones@0,160 -643 ind_zones@16,160 +643 ind_zones@16,160 (zone) 644 ind_zones@32,160 645 ind_zones@0,176 646 ind_zones@16,176 @@ -658,7 +658,7 @@ 649 ind_zones@16,192 650 ind_zones@32,192 651 ind_zones@0,208 -652 ind_zones@16,208 +652 ind_zones@16,208 (zone) 653 ind_zones@32,208 654 ind_zones@0,224 655 ind_zones@16,224 @@ -667,7 +667,7 @@ 658 ind_zones@16,240 659 ind_zones@32,240 660 ind_zones@0,256 -661 ind_zones@16,256 +661 ind_zones@16,256 (zone) 662 ind_zones@32,256 663 ind_zones@0,272 664 ind_zones@16,272 @@ -676,7 +676,7 @@ 667 ind_zones@16,288 668 ind_zones@32,288 669 ind_zones@0,304 -670 ind_zones@16,304 +670 ind_zones@16,304 (zone) 671 ind_zones@32,304 672 ind_zones@0,320 673 ind_zones@16,320 @@ -685,7 +685,7 @@ 676 ind_zones@16,336 677 ind_zones@32,336 678 ind_zones@0,352 -679 ind_zones@16,352 +679 ind_zones@16,352 (zone) 680 ind_zones@32,352 681 ind_zones@0,368 682 ind_zones@16,368 @@ -694,7 +694,7 @@ 685 ind_zones@16,384 686 ind_zones@32,384 687 ind_zones@0,400 -688 ind_zones@16,400 +688 ind_zones@16,400 (zone) 689 ind_zones@32,400 690 ind_zones@0,416 691 ind_zones@16,416 @@ -705,7 +705,7 @@ 695 seaport@32,0 696 seaport@48,0 697 seaport@0,16 -698 seaport@16,16 +698 seaport@16,16 (zone) 699 seaport@32,16 700 seaport@48,16 701 seaport@0,32 @@ -724,7 +724,7 @@ 713 airport@64,0 714 airport@80,0 715 airport@0,16 -716 airport@16,16 +716 airport@16,16 (zone) 717 airport@32,16 718 airport@48,16 719 airport@64,16 @@ -759,7 +759,7 @@ 747 coal@32,0 (becomes=916) 748 coal@48,0 (becomes=920) 749 coal@0,16 -750 coal@16,16 +750 coal@16,16 (zone) 751 coal@32,16 (becomes=924) 752 coal@48,16 (becomes=928) 753 coal@0,32 @@ -775,7 +775,7 @@ 762 firestation@16,0 763 firestation@32,0 764 firestation@0,16 -765 firestation@16,16 +765 firestation@16,16 (zone) 766 firestation@32,16 767 firestation@0,32 768 firestation@16,32 @@ -784,7 +784,7 @@ 771 police@16,0 772 police@32,0 773 police@0,16 -774 police@16,16 +774 police@16,16 (zone) 775 police@32,16 776 police@0,32 777 police@16,32 @@ -795,7 +795,7 @@ 781 stadium@32,0 782 stadium@48,0 783 stadium@0,16 -784 stadium@16,16 +784 stadium@16,16 (zone) 785 stadium@32,16 786 stadium@48,16 787 stadium@0,32 @@ -812,7 +812,7 @@ 797 stadium2@32,0 798 stadium2@48,0 799 stadium2@0,16 -800 stadium2@16,16 +800 stadium2@16,16 (zone) 801 stadium2@32,16 802 stadium2@48,16 803 stadium2@0,32 @@ -829,7 +829,7 @@ 813 nuclear@32,0 814 nuclear@48,0 815 nuclear@0,16 -816 nuclear@16,16 +816 nuclear@16,16 (zone) 817 nuclear@32,16 818 nuclear@48,16 819 nuclear@0,32 diff --git a/src/micropolisj/engine/MapScanner.java b/src/micropolisj/engine/MapScanner.java index b5bba0b..828f3c3 100644 --- a/src/micropolisj/engine/MapScanner.java +++ b/src/micropolisj/engine/MapScanner.java @@ -509,7 +509,7 @@ class MapScanner { for (int x = xpos-1; x <= xpos+1; x++) { - city.setTile(x, y, (char)(base | BNCNBIT | (x == xpos && y == ypos ? ZONEBIT + BULLBIT : 0))); + city.setTile(x, y, (char)(base | BNCNBIT | (x == xpos && y == ypos ? BULLBIT : 0))); base++; } } @@ -1207,7 +1207,7 @@ class MapScanner { // downgrade from full-size zone to 8 little houses - city.setTile(xpos, ypos, (char)(FREEZ | BLBNCNBIT | ZONEBIT)); + city.setTile(xpos, ypos, (char)(FREEZ | BLBNCNBIT)); for (int x = xpos-1; x <= xpos+1; x++) { for (int y = ypos-1; y <= ypos+1; y++) @@ -1374,7 +1374,7 @@ class MapScanner for (int x = 0; x < 4; x++, zoneBase++) { city.setTile(xpos - 1 + x, ypos - 1 + y, - (char) (zoneBase | BNCNBIT | (x == 1 && y == 1 ? (ZONEBIT|PWRBIT) : 0))); + (char) (zoneBase | BNCNBIT | (x == 1 && y == 1 ? (PWRBIT) : 0))); } } } diff --git a/src/micropolisj/engine/Micropolis.java b/src/micropolisj/engine/Micropolis.java index 2227e8d..a90194c 100644 --- a/src/micropolisj/engine/Micropolis.java +++ b/src/micropolisj/engine/Micropolis.java @@ -1965,7 +1965,7 @@ public class Micropolis for (int y = 0; y < DEFAULT_HEIGHT; y++) { int z = dis.readShort(); - z &= ~(2048); // clear ANIMBIT on import + z &= ~(1024 | 2048); // clear ZONEBIT,ANIMBIT on import map[y][x] = (char) z; } } @@ -1982,6 +1982,9 @@ public class Micropolis if (isAnimated(z)) { z |= 2048; //synthesize ANIMBIT on export } + if (isZoneCenter(z)) { + z |= 1024; //synthesize ZONEBIT + } out.writeShort(z); } } diff --git a/src/micropolisj/engine/TileConstants.java b/src/micropolisj/engine/TileConstants.java index 1fa16a4..73978de 100644 --- a/src/micropolisj/engine/TileConstants.java +++ b/src/micropolisj/engine/TileConstants.java @@ -213,7 +213,7 @@ public class TileConstants public static final char BURNBIT = 8192; // bit 13 ... is combustible public static final char BULLBIT = 4096; // bit 12 ... is bulldozable // bit 11 ... unused - public static final char ZONEBIT = 1024; // bit 10 ... is the special tile for a zone + // bit 10 ... unused public static final char ALLBITS = 64512; // mask for upper 6 bits public static final char LOMASK = 1023; //mask for low 10 bits @@ -290,7 +290,7 @@ public class TileConstants public static boolean isArsonable(int tile) { return ( - (tile & ZONEBIT) == 0 && + !isZoneCenter(tile) && (tile & LOMASK) >= LHTHR && (tile & LOMASK) <= LASTZONE ); @@ -372,7 +372,7 @@ public class TileConstants int tem2 = tile & LOMASK; if (tem2 < RESBASE || tem2 > LASTZONE || - (tile & ZONEBIT) != 0 + isZoneCenter(tile) ) { return false; } else { @@ -473,7 +473,8 @@ public class TileConstants public static boolean isZoneCenter(int tile) { - return tile >= 0 && (tile & ZONEBIT) != 0; + TileSpec spec = Tiles.get(tile & LOMASK); + return spec != null && spec.zone; } /** diff --git a/src/micropolisj/engine/TileSpec.java b/src/micropolisj/engine/TileSpec.java index ab49efc..d8dc464 100644 --- a/src/micropolisj/engine/TileSpec.java +++ b/src/micropolisj/engine/TileSpec.java @@ -6,6 +6,8 @@ public class TileSpec { int tileNumber; TileSpec animNext; + boolean zone; + Map attributes; List images; @@ -28,6 +30,12 @@ public class TileSpec return attributes.get(key); } + public boolean getBooleanAttribute(String key) + { + String v = getAttribute(key); + return (v != null && v.equals("true")); + } + public String [] getImages() { return images.toArray(new String[0]); @@ -42,7 +50,7 @@ public class TileSpec if (in.peekChar() == '(') { in.eatChar('('); String k = in.readAttributeKey(); - String v = "1"; + String v = "true"; if (in.peekChar() == '=') { in.eatChar('='); v = in.readAttributeValue(); @@ -60,6 +68,8 @@ public class TileSpec images.add(v); } } + + this.zone = getBooleanAttribute("zone"); } static class Scanner diff --git a/src/micropolisj/engine/ToolStroke.java b/src/micropolisj/engine/ToolStroke.java index 84cb51f..f3775f0 100644 --- a/src/micropolisj/engine/ToolStroke.java +++ b/src/micropolisj/engine/ToolStroke.java @@ -182,8 +182,7 @@ public class ToolStroke for (int columnNum = 0; columnNum < width; columnNum++) { eff.setTile(columnNum, rowNum, (char) ( - tileBase + BNCNBIT + - (columnNum == centerColNum && rowNum == centerRowNum ? ZONEBIT : 0) + tileBase + BNCNBIT )); tileBase++; } diff --git a/src/micropolisj/gui/MicropolisDrawingArea.java b/src/micropolisj/gui/MicropolisDrawingArea.java index 715a5e1..1cb4aca 100644 --- a/src/micropolisj/gui/MicropolisDrawingArea.java +++ b/src/micropolisj/gui/MicropolisDrawingArea.java @@ -164,7 +164,7 @@ public class MicropolisDrawingArea extends JComponent { int cell = m.getTile(x,y); if (blinkUnpoweredZones && - (cell & ZONEBIT) != 0 && + isZoneCenter(cell) && (cell & PWRBIT) == 0) { unpoweredZones.add(new Point(x,y)); diff --git a/src/micropolisj/gui/OverlayMapView.java b/src/micropolisj/gui/OverlayMapView.java index c6c6b42..1746b89 100644 --- a/src/micropolisj/gui/OverlayMapView.java +++ b/src/micropolisj/gui/OverlayMapView.java @@ -256,7 +256,7 @@ public class OverlayMapView extends JComponent if ((rawTile & LOMASK) <= 63) { return rawTile & LOMASK; } - else if ((rawTile & ZONEBIT) != 0) { + else if (isZoneCenter(rawTile)) { // zone pix = ((rawTile & PWRBIT) != 0) ? POWERED : UNPOWERED; }