1364 if (_display_opt & DO_TRANS_BUILDINGS) // show transparent depots |
1364 if (_display_opt & DO_TRANS_BUILDINGS) // show transparent depots |
1365 MAKE_TRANSPARENT(image); |
1365 MAKE_TRANSPARENT(image); |
1366 AddSortableSpriteToDraw(image, ti->x + x, ti->y + y, xsize, ysize, zsize, ti->z + z); |
1366 AddSortableSpriteToDraw(image, ti->x + x, ti->y + y, xsize, ysize, zsize, ti->z + z); |
1367 } |
1367 } |
1368 |
1368 |
|
1369 /** |
|
1370 * Draw ground sprite and track bits |
|
1371 * @param ti TileInfo |
|
1372 * @param track TrackBits to draw |
|
1373 * @param earth Draw as earth |
|
1374 * @param snow Draw as snow |
|
1375 * @param flat Always draw foundation |
|
1376 */ |
|
1377 void DrawTrackBits(TileInfo *ti, TrackBits track, bool earth, bool snow, bool flat) |
|
1378 { |
|
1379 const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
|
1380 PalSpriteID image; |
|
1381 bool junction = false; |
|
1382 |
|
1383 // Select the sprite to use. |
|
1384 (image = rti->base_sprites.track_y, track == TRACK_BIT_DIAG2) || |
|
1385 (image++, track == TRACK_BIT_DIAG1) || |
|
1386 (image++, track == TRACK_BIT_UPPER) || |
|
1387 (image++, track == TRACK_BIT_LOWER) || |
|
1388 (image++, track == TRACK_BIT_RIGHT) || |
|
1389 (image++, track == TRACK_BIT_LEFT) || |
|
1390 (image++, track == (TRACK_BIT_DIAG1 | TRACK_BIT_DIAG2)) || |
|
1391 |
|
1392 (image = rti->base_sprites.track_ns, track == (TRACK_BIT_UPPER | TRACK_BIT_LOWER)) || |
|
1393 (image++, track == (TRACK_BIT_LEFT | TRACK_BIT_RIGHT)) || |
|
1394 |
|
1395 (junction = true, false) || |
|
1396 (image = rti->base_sprites.ground, !(track & (TRACK_BIT_RIGHT | TRACK_BIT_UPPER | TRACK_BIT_DIAG1))) || |
|
1397 (image++, !(track & (TRACK_BIT_LEFT | TRACK_BIT_LOWER | TRACK_BIT_DIAG1))) || |
|
1398 (image++, !(track & (TRACK_BIT_LEFT | TRACK_BIT_UPPER | TRACK_BIT_DIAG2))) || |
|
1399 (image++, !(track & (TRACK_BIT_RIGHT | TRACK_BIT_LOWER | TRACK_BIT_DIAG2))) || |
|
1400 (image++, true); |
|
1401 |
|
1402 if (ti->tileh != 0) { |
|
1403 int foundation; |
|
1404 |
|
1405 if (flat) { |
|
1406 foundation = ti->tileh; |
|
1407 } else { |
|
1408 foundation = GetRailFoundation(ti->tileh, track); |
|
1409 } |
|
1410 |
|
1411 if (foundation != 0) |
|
1412 DrawFoundation(ti, foundation); |
|
1413 |
|
1414 // DrawFoundation() modifies ti. |
|
1415 // Default sloped sprites.. |
|
1416 if (ti->tileh != 0) |
|
1417 image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y; |
|
1418 } |
|
1419 |
|
1420 if (earth) { |
|
1421 image = (image & SPRITE_MASK) | PALETTE_TO_BARE_LAND; // Use brown palette |
|
1422 } else if (snow) { |
|
1423 image += rti->snow_offset; |
|
1424 } |
|
1425 |
|
1426 DrawGroundSprite(image); |
|
1427 |
|
1428 // Draw track pieces individually for junction tiles |
|
1429 if (junction) { |
|
1430 if (track & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y); |
|
1431 if (track & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x); |
|
1432 if (track & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n); |
|
1433 if (track & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s); |
|
1434 if (track & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w); |
|
1435 if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e); |
|
1436 } |
|
1437 |
|
1438 if (_debug_pbs_level >= 1) { |
|
1439 byte pbs = PBSTileReserved(ti->tile) & track; |
|
1440 if (pbs & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y | PALETTE_CRASH); |
|
1441 if (pbs & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x | PALETTE_CRASH); |
|
1442 if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n | PALETTE_CRASH); |
|
1443 if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s | PALETTE_CRASH); |
|
1444 if (pbs & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w | PALETTE_CRASH); |
|
1445 if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e | PALETTE_CRASH); |
|
1446 } |
|
1447 } |
|
1448 |
1369 static void DrawTile_Track(TileInfo *ti) |
1449 static void DrawTile_Track(TileInfo *ti) |
1370 { |
1450 { |
1371 byte m5; |
1451 byte m5; |
1372 const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
1452 const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
1373 uint32 image; //XXX ok why the hell is SpriteID 16 bit when all the drawing routines need 32? |
1453 PalSpriteID image; |
1374 |
1454 |
1375 _drawtile_track_palette = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile))); |
1455 _drawtile_track_palette = SPRITE_PALETTE(PLAYER_SPRITE_COLOR(GetTileOwner(ti->tile))); |
1376 |
1456 |
1377 m5 = (byte)ti->map5; |
1457 m5 = (byte)ti->map5; |
1378 if (!(m5 & RAIL_TYPE_SPECIAL)) { |
1458 if (!(m5 & RAIL_TYPE_SPECIAL)) { |
1379 bool special; |
1459 bool earth = (_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK) == RAIL_GROUND_BROWN; |
1380 |
1460 bool snow = (_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK) == RAIL_GROUND_ICE_DESERT; |
1381 m5 &= TRACK_BIT_MASK; |
1461 |
1382 |
1462 DrawTrackBits(ti, m5 & TRACK_BIT_MASK, earth, snow, false); |
1383 special = false; |
|
1384 |
|
1385 // select the sprite to use based on the map5 byte. |
|
1386 (image = rti->base_sprites.track_y, m5 == TRACK_BIT_DIAG2) || |
|
1387 (image++, m5 == TRACK_BIT_DIAG1) || |
|
1388 (image++, m5 == TRACK_BIT_UPPER) || |
|
1389 (image++, m5 == TRACK_BIT_LOWER) || |
|
1390 (image++, m5 == TRACK_BIT_RIGHT) || |
|
1391 (image++, m5 == TRACK_BIT_LEFT) || |
|
1392 (image++, m5 == (TRACK_BIT_DIAG1|TRACK_BIT_DIAG2)) || |
|
1393 |
|
1394 (image = rti->base_sprites.track_ns, m5 == (TRACK_BIT_UPPER|TRACK_BIT_LOWER)) || |
|
1395 (image++, m5 == (TRACK_BIT_LEFT|TRACK_BIT_RIGHT)) || |
|
1396 |
|
1397 (special=true, false) || |
|
1398 |
|
1399 (image = rti->base_sprites.ground, !(m5 & (TRACK_BIT_RIGHT|TRACK_BIT_UPPER|TRACK_BIT_DIAG1))) || |
|
1400 (image++, !(m5 & (TRACK_BIT_LEFT|TRACK_BIT_LOWER|TRACK_BIT_DIAG1))) || |
|
1401 (image++, !(m5 & (TRACK_BIT_LEFT|TRACK_BIT_UPPER|TRACK_BIT_DIAG2))) || |
|
1402 (image++, !(m5 & (TRACK_BIT_RIGHT|TRACK_BIT_LOWER|TRACK_BIT_DIAG2))) || |
|
1403 (image++, true); |
|
1404 |
|
1405 if (ti->tileh != 0) { |
|
1406 int f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); |
|
1407 if (f) DrawFoundation(ti, f); |
|
1408 |
|
1409 // default sloped sprites.. |
|
1410 if (ti->tileh != 0) image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y; |
|
1411 } |
|
1412 |
|
1413 if ((_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK) == RAIL_GROUND_BROWN) { |
|
1414 image = (image & SPRITE_MASK) | PALETTE_TO_BARE_LAND; // use a brown palette |
|
1415 } else if ((_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK) == RAIL_GROUND_ICE_DESERT) { |
|
1416 image += rti->snow_offset; |
|
1417 } |
|
1418 |
|
1419 DrawGroundSprite(image); |
|
1420 |
|
1421 if (special) { |
|
1422 if (m5 & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y); |
|
1423 if (m5 & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x); |
|
1424 if (m5 & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n); |
|
1425 if (m5 & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s); |
|
1426 if (m5 & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w); |
|
1427 if (m5 & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e); |
|
1428 } |
|
1429 |
|
1430 if (_debug_pbs_level >= 1) { |
|
1431 byte pbs = PBSTileReserved(ti->tile); |
|
1432 if (pbs & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y | PALETTE_CRASH); |
|
1433 if (pbs & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x | PALETTE_CRASH); |
|
1434 if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n | PALETTE_CRASH); |
|
1435 if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s | PALETTE_CRASH); |
|
1436 if (pbs & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w | PALETTE_CRASH); |
|
1437 if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e | PALETTE_CRASH); |
|
1438 } |
|
1439 |
1463 |
1440 if (_display_opt & DO_FULL_DETAIL) { |
1464 if (_display_opt & DO_FULL_DETAIL) { |
1441 _detailed_track_proc[_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK](ti); |
1465 _detailed_track_proc[_m[ti->tile].m2 & RAIL_MAP2LO_GROUND_MASK](ti); |
1442 } |
1466 } |
1443 |
1467 |