clear_cmd.c
changeset 2221 de4a862fa8e2
parent 2220 cacd492f3c1c
child 2436 7d5df545bd5d
equal deleted inserted replaced
2220:cacd492f3c1c 2221:de4a862fa8e2
   568 	/* unused */
   568 	/* unused */
   569 }
   569 }
   570 
   570 
   571 void TileLoopClearHelper(TileIndex tile)
   571 void TileLoopClearHelper(TileIndex tile)
   572 {
   572 {
   573 	byte img_1;
   573 	byte self;
   574 	byte img_2;
   574 	byte neighbour;
   575 	static const byte img_by_map5[] = { 0, 0, 0, 2, 1, 1, 0, 0 };
       
   576 	TileIndex dirty = INVALID_TILE;
   575 	TileIndex dirty = INVALID_TILE;
   577 
   576 
   578 	switch (GetTileType(tile)) {
   577 	switch (GetTileType(tile)) {
   579 		case MP_CLEAR:
   578 		case MP_CLEAR:
   580 			img_1 = img_by_map5[(_m[tile].m5 & 0x1C) >> 2];
   579 			self = (GB(_m[tile].m5, 0, 5) == 15);
   581 			break;
   580 			break;
   582 
   581 
   583 		case MP_TREES:
       
   584 			if ((_m[tile].m2 & 0x30) == 0x20)
       
   585 				img_1 = 1;
       
   586 			else
       
   587 				img_1 = 0;
       
   588 			break;
       
   589 
       
   590 		default:
   582 		default:
   591 			img_1 = 0;
   583 			self = 0;
   592 			break;
   584 			break;
   593 	}
   585 	}
   594 
   586 
   595 	switch (GetTileType(TILE_ADDXY(tile, 1, 0))) {
   587 	switch (GetTileType(TILE_ADDXY(tile, 1, 0))) {
   596 		case MP_CLEAR:
   588 		case MP_CLEAR:
   597 			img_2 = img_by_map5[(_m[TILE_ADDXY(tile, 1, 0)].m5 & 0x1C) >> 2];
   589 			neighbour = (GB(_m[TILE_ADDXY(tile, 1, 0)].m5, 0, 5) == 15);
   598 			break;
   590 			break;
   599 
   591 
   600 		case MP_TREES:
   592 		default:
   601 			if ((_m[TILE_ADDXY(tile, 1, 0)].m2 & 0x30) == 0x20)
   593 			neighbour = 0;
   602 				img_2 = 1;
       
   603 			else
       
   604 				img_2 = 0;
       
   605 			break;
   594 			break;
   606 
   595 	}
   607 		default:
   596 
   608 			img_2 = 0;
   597 	if (GB(_m[tile].m4, 5, 3) == 0) {
   609 			break;
   598 		if (self != neighbour) {
   610 	}
   599 			SB(_m[tile].m4, 5, 3, 3);
   611 
       
   612 	if ((_m[tile].m4 & 0xE0) == 0) {
       
   613 		if ((img_1 & 2) != (img_2 & 2)) {
       
   614 			_m[tile].m4 |= 3 << 5;
       
   615 			dirty = tile;
   600 			dirty = tile;
   616 		}
   601 		}
   617 	} else {
   602 	} else {
   618 		if (img_1 == 1 && img_2 == 1) {
   603 		if (self == 0 && neighbour == 0) {
   619 			_m[tile].m4 &= ~(3 << 5);
   604 			SB(_m[tile].m4, 5, 3, 0);
   620 			dirty = tile;
   605 			dirty = tile;
   621 		}
   606 		}
   622 	}
   607 	}
   623 
   608 
   624 	switch (GetTileType(TILE_ADDXY(tile, 0, 1))) {
   609 	switch (GetTileType(TILE_ADDXY(tile, 0, 1))) {
   625 		case MP_CLEAR:
   610 		case MP_CLEAR:
   626 			img_2 = img_by_map5[(_m[TILE_ADDXY(tile, 0, 1)].m5 & 0x1C) >> 2];
   611 			neighbour = (GB(_m[TILE_ADDXY(tile, 0, 1)].m5, 0, 5) == 15);
   627 			break;
   612 			break;
   628 
   613 
   629 		case MP_TREES:
   614 		default:
   630 			if ((_m[TILE_ADDXY(tile, 0, 1)].m2 & 0x30) == 0x20)
   615 			neighbour = 0;
   631 				img_2 = 1;
       
   632 			else
       
   633 				img_2 = 0;
       
   634 			break;
   616 			break;
   635 
   617 	}
   636 		default:
   618 
   637 			img_2 = 0;
   619 	if (GB(_m[tile].m4, 2, 3) == 0) {
   638 			break;
   620 		if (self != neighbour) {
   639 	}
   621 			SB(_m[tile].m4, 2, 3, 3);
   640 
       
   641 	if ((_m[tile].m4 & 0x1C) == 0) {
       
   642 		if ((img_1 & 2) != (img_2 & 2)) {
       
   643 			_m[tile].m4 |= 3 << 2;
       
   644 			dirty = tile;
   622 			dirty = tile;
   645 		}
   623 		}
   646 	} else {
   624 	} else {
   647 		if (img_1 == 1 && img_2 == 1) {
   625 		if (self == 0 && neighbour == 0) {
   648 			_m[tile].m4 &= ~(3 << 2);
   626 			SB(_m[tile].m4, 2, 3, 0);
   649 			dirty = tile;
   627 			dirty = tile;
   650 		}
   628 		}
   651 	}
   629 	}
   652 
   630 
   653 	if (dirty != INVALID_TILE)
   631 	if (dirty != INVALID_TILE) MarkTileDirtyByTile(dirty);
   654 		MarkTileDirtyByTile(dirty);
       
   655 }
   632 }
   656 
   633 
   657 
   634 
   658 /* convert into snowy tiles */
   635 /* convert into snowy tiles */
   659 static void TileLoopClearAlps(TileIndex tile)
   636 static void TileLoopClearAlps(TileIndex tile)