1051 sprite = SignalBase[side][GetSignalVariant(tile)][GetSignalType(tile)] + image + condition; |
1051 sprite = SignalBase[side][GetSignalVariant(tile)][GetSignalType(tile)] + image + condition; |
1052 } else { |
1052 } else { |
1053 sprite = _signal_base + (GetSignalType(tile) - 1) * 16 + GetSignalVariant(tile) * 64 + image + condition; |
1053 sprite = _signal_base + (GetSignalType(tile) - 1) * 16 + GetSignalVariant(tile) * 64 + image + condition; |
1054 } |
1054 } |
1055 |
1055 |
1056 AddSortableSpriteToDraw(sprite, x, y, 1, 1, 10, GetSlopeZ(x,y)); |
1056 AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, 10, GetSlopeZ(x,y)); |
1057 } |
1057 } |
1058 |
1058 |
1059 static uint32 _drawtile_track_palette; |
1059 static uint32 _drawtile_track_palette; |
1060 |
1060 |
1061 |
1061 |
1062 static void DrawTrackFence_NW(const TileInfo *ti) |
1062 static void DrawTrackFence_NW(const TileInfo *ti) |
1063 { |
1063 { |
1064 uint32 image = 0x515; |
1064 SpriteID image = 0x515; |
1065 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x519 : 0x51B; |
1065 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x519 : 0x51B; |
1066 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1066 AddSortableSpriteToDraw(image, _drawtile_track_palette, |
1067 ti->x, ti->y + 1, 16, 1, 4, ti->z); |
1067 ti->x, ti->y + 1, 16, 1, 4, ti->z); |
1068 } |
1068 } |
1069 |
1069 |
1070 static void DrawTrackFence_SE(const TileInfo *ti) |
1070 static void DrawTrackFence_SE(const TileInfo *ti) |
1071 { |
1071 { |
1072 uint32 image = 0x515; |
1072 SpriteID image = 0x515; |
1073 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x519 : 0x51B; |
1073 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x519 : 0x51B; |
1074 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1074 AddSortableSpriteToDraw(image, _drawtile_track_palette, |
1075 ti->x, ti->y + TILE_SIZE - 1, 16, 1, 4, ti->z); |
1075 ti->x, ti->y + TILE_SIZE - 1, 16, 1, 4, ti->z); |
1076 } |
1076 } |
1077 |
1077 |
1078 static void DrawTrackFence_NW_SE(const TileInfo *ti) |
1078 static void DrawTrackFence_NW_SE(const TileInfo *ti) |
1079 { |
1079 { |
1081 DrawTrackFence_SE(ti); |
1081 DrawTrackFence_SE(ti); |
1082 } |
1082 } |
1083 |
1083 |
1084 static void DrawTrackFence_NE(const TileInfo *ti) |
1084 static void DrawTrackFence_NE(const TileInfo *ti) |
1085 { |
1085 { |
1086 uint32 image = 0x516; |
1086 SpriteID image = 0x516; |
1087 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x51A : 0x51C; |
1087 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x51A : 0x51C; |
1088 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1088 AddSortableSpriteToDraw(image, _drawtile_track_palette, |
1089 ti->x + 1, ti->y, 1, 16, 4, ti->z); |
1089 ti->x + 1, ti->y, 1, 16, 4, ti->z); |
1090 } |
1090 } |
1091 |
1091 |
1092 static void DrawTrackFence_SW(const TileInfo *ti) |
1092 static void DrawTrackFence_SW(const TileInfo *ti) |
1093 { |
1093 { |
1094 uint32 image = 0x516; |
1094 SpriteID image = 0x516; |
1095 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x51A : 0x51C; |
1095 if (ti->tileh != SLOPE_FLAT) image = (ti->tileh & SLOPE_S) ? 0x51A : 0x51C; |
1096 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1096 AddSortableSpriteToDraw(image, _drawtile_track_palette, |
1097 ti->x + TILE_SIZE - 1, ti->y, 1, 16, 4, ti->z); |
1097 ti->x + TILE_SIZE - 1, ti->y, 1, 16, 4, ti->z); |
1098 } |
1098 } |
1099 |
1099 |
1100 static void DrawTrackFence_NE_SW(const TileInfo *ti) |
1100 static void DrawTrackFence_NE_SW(const TileInfo *ti) |
1101 { |
1101 { |
1105 |
1105 |
1106 static void DrawTrackFence_NS_1(const TileInfo *ti) |
1106 static void DrawTrackFence_NS_1(const TileInfo *ti) |
1107 { |
1107 { |
1108 int z = ti->z; |
1108 int z = ti->z; |
1109 if (ti->tileh & SLOPE_W) z += TILE_HEIGHT; |
1109 if (ti->tileh & SLOPE_W) z += TILE_HEIGHT; |
1110 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1110 AddSortableSpriteToDraw(0x517, _drawtile_track_palette, |
1111 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1111 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1112 } |
1112 } |
1113 |
1113 |
1114 static void DrawTrackFence_NS_2(const TileInfo *ti) |
1114 static void DrawTrackFence_NS_2(const TileInfo *ti) |
1115 { |
1115 { |
1116 int z = ti->z; |
1116 int z = ti->z; |
1117 if (ti->tileh & SLOPE_E) z += TILE_HEIGHT; |
1117 if (ti->tileh & SLOPE_E) z += TILE_HEIGHT; |
1118 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1118 AddSortableSpriteToDraw(0x517, _drawtile_track_palette, |
1119 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1119 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1120 } |
1120 } |
1121 |
1121 |
1122 static void DrawTrackFence_WE_1(const TileInfo *ti) |
1122 static void DrawTrackFence_WE_1(const TileInfo *ti) |
1123 { |
1123 { |
1124 int z = ti->z; |
1124 int z = ti->z; |
1125 if (ti->tileh & SLOPE_N) z += TILE_HEIGHT; |
1125 if (ti->tileh & SLOPE_N) z += TILE_HEIGHT; |
1126 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1126 AddSortableSpriteToDraw(0x518, _drawtile_track_palette, |
1127 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1127 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1128 } |
1128 } |
1129 |
1129 |
1130 static void DrawTrackFence_WE_2(const TileInfo *ti) |
1130 static void DrawTrackFence_WE_2(const TileInfo *ti) |
1131 { |
1131 { |
1132 int z = ti->z; |
1132 int z = ti->z; |
1133 if (ti->tileh & SLOPE_S) z += TILE_HEIGHT; |
1133 if (ti->tileh & SLOPE_S) z += TILE_HEIGHT; |
1134 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1134 AddSortableSpriteToDraw(0x518, _drawtile_track_palette, |
1135 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1135 ti->x + TILE_SIZE / 2, ti->y + TILE_SIZE / 2, 1, 1, 4, z); |
1136 } |
1136 } |
1137 |
1137 |
1138 |
1138 |
1139 static void DrawTrackDetails(const TileInfo* ti) |
1139 static void DrawTrackDetails(const TileInfo* ti) |
1163 * @param flat Always draw foundation |
1163 * @param flat Always draw foundation |
1164 */ |
1164 */ |
1165 static void DrawTrackBits(TileInfo* ti, TrackBits track) |
1165 static void DrawTrackBits(TileInfo* ti, TrackBits track) |
1166 { |
1166 { |
1167 const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
1167 const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile)); |
1168 PalSpriteID image; |
1168 SpriteID image; |
|
1169 SpriteID pal = PAL_NONE; |
1169 bool junction = false; |
1170 bool junction = false; |
1170 |
1171 |
1171 // Select the sprite to use. |
1172 // Select the sprite to use. |
1172 (image = rti->base_sprites.track_y, track == TRACK_BIT_Y) || |
1173 (image = rti->base_sprites.track_y, track == TRACK_BIT_Y) || |
1173 (image++, track == TRACK_BIT_X) || |
1174 (image++, track == TRACK_BIT_X) || |
1197 if (ti->tileh != SLOPE_FLAT) |
1198 if (ti->tileh != SLOPE_FLAT) |
1198 image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y; |
1199 image = _track_sloped_sprites[ti->tileh - 1] + rti->base_sprites.track_y; |
1199 } |
1200 } |
1200 |
1201 |
1201 switch (GetRailGroundType(ti->tile)) { |
1202 switch (GetRailGroundType(ti->tile)) { |
1202 case RAIL_GROUND_BARREN: image |= PALETTE_TO_BARE_LAND; break; |
1203 case RAIL_GROUND_BARREN: pal = PALETTE_TO_BARE_LAND; break; |
1203 case RAIL_GROUND_ICE_DESERT: image += rti->snow_offset; break; |
1204 case RAIL_GROUND_ICE_DESERT: image += rti->snow_offset; break; |
1204 default: break; |
1205 default: break; |
1205 } |
1206 } |
1206 |
1207 |
1207 DrawGroundSprite(image); |
1208 DrawGroundSprite(image, pal); |
1208 |
1209 |
1209 // Draw track pieces individually for junction tiles |
1210 // Draw track pieces individually for junction tiles |
1210 if (junction) { |
1211 if (junction) { |
1211 if (track & TRACK_BIT_X) DrawGroundSprite(rti->base_sprites.single_y); |
1212 if (track & TRACK_BIT_X) DrawGroundSprite(rti->base_sprites.single_y, PAL_NONE); |
1212 if (track & TRACK_BIT_Y) DrawGroundSprite(rti->base_sprites.single_x); |
1213 if (track & TRACK_BIT_Y) DrawGroundSprite(rti->base_sprites.single_x, PAL_NONE); |
1213 if (track & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n); |
1214 if (track & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n, PAL_NONE); |
1214 if (track & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s); |
1215 if (track & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s, PAL_NONE); |
1215 if (track & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w); |
1216 if (track & TRACK_BIT_LEFT) DrawGroundSprite(rti->base_sprites.single_w, PAL_NONE); |
1216 if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e); |
1217 if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e, PAL_NONE); |
1217 } |
1218 } |
1218 |
1219 |
1219 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti); |
1220 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti); |
1220 |
1221 |
1221 } |
1222 } |
1335 image = dts->ground_sprite + rti->total_offset; |
1336 image = dts->ground_sprite + rti->total_offset; |
1336 if (IsSnowRailGround(ti->tile)) image += rti->snow_offset; |
1337 if (IsSnowRailGround(ti->tile)) image += rti->snow_offset; |
1337 } |
1338 } |
1338 } |
1339 } |
1339 |
1340 |
1340 DrawGroundSprite(image); |
1341 DrawGroundSprite(image, PAL_NONE); |
1341 |
1342 |
1342 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti); |
1343 if (GetRailType(ti->tile) == RAILTYPE_ELECTRIC) DrawCatenary(ti); |
1343 |
1344 |
1344 foreach_draw_tile_seq(dtss, dts->seq) { |
1345 foreach_draw_tile_seq(dtss, dts->seq) { |
1345 uint32 image = dtss->image + relocation; |
1346 SpriteID image = dtss->image + relocation; |
|
1347 SpriteID pal; |
1346 |
1348 |
1347 if (_display_opt & DO_TRANS_BUILDINGS) { |
1349 if (_display_opt & DO_TRANS_BUILDINGS) { |
1348 MAKE_TRANSPARENT(image); |
1350 SETBIT(image, PALETTE_MODIFIER_TRANSPARENT); |
1349 } else if (image & PALETTE_MODIFIER_COLOR) { |
1351 pal = PALETTE_TO_TRANSPARENT; |
1350 image |= _drawtile_track_palette; |
1352 } else if (HASBIT(image, PALETTE_MODIFIER_COLOR)) { |
1351 } |
1353 pal = _drawtile_track_palette; |
|
1354 } else { |
|
1355 pal = dtss->pal; |
|
1356 } |
|
1357 |
1352 AddSortableSpriteToDraw( |
1358 AddSortableSpriteToDraw( |
1353 image, |
1359 image, pal, |
1354 ti->x + dtss->delta_x, ti->y + dtss->delta_y, |
1360 ti->x + dtss->delta_x, ti->y + dtss->delta_y, |
1355 dtss->size_x, dtss->size_y, |
1361 dtss->size_x, dtss->size_y, |
1356 dtss->size_z, ti->z + dtss->delta_z |
1362 dtss->size_z, ti->z + dtss->delta_z |
1357 ); |
1363 ); |
1358 } |
1364 } |
1359 } |
1365 } |
1360 DrawBridgeMiddle(ti); |
1366 DrawBridgeMiddle(ti); |
1361 } |
1367 } |
1362 |
1368 |
1363 |
1369 |
1364 static void DrawTileSequence(int x, int y, uint32 ground, const DrawTileSeqStruct* dtss, uint32 offset) |
1370 static void DrawTileSequence(int x, int y, SpriteID ground, const DrawTileSeqStruct* dtss, uint32 offset) |
1365 { |
1371 { |
1366 uint32 palette = PLAYER_SPRITE_COLOR(_local_player); |
1372 SpriteID palette = PLAYER_SPRITE_COLOR(_local_player); |
1367 |
1373 |
1368 DrawSprite(ground, x, y); |
1374 DrawSprite(ground, PAL_NONE, x, y); |
1369 for (; dtss->image != 0; dtss++) { |
1375 for (; dtss->image != 0; dtss++) { |
1370 Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
1376 Point pt = RemapCoords(dtss->delta_x, dtss->delta_y, dtss->delta_z); |
1371 uint32 image = dtss->image + offset; |
1377 SpriteID image = dtss->image + offset; |
1372 |
1378 |
1373 if (image & PALETTE_MODIFIER_COLOR) image |= palette; |
1379 DrawSprite(image, HASBIT(image, PALETTE_MODIFIER_COLOR) ? palette : PAL_NONE, x + pt.x, y + pt.y); |
1374 DrawSprite(image, x + pt.x, y + pt.y); |
|
1375 } |
1380 } |
1376 } |
1381 } |
1377 |
1382 |
1378 void DrawTrainDepotSprite(int x, int y, int dir, RailType railtype) |
1383 void DrawTrainDepotSprite(int x, int y, int dir, RailType railtype) |
1379 { |
1384 { |
1380 const DrawTileSprites* dts = &_depot_gfx_table[dir]; |
1385 const DrawTileSprites* dts = &_depot_gfx_table[dir]; |
1381 uint32 image = dts->ground_sprite; |
1386 SpriteID image = dts->ground_sprite; |
1382 uint32 offset = GetRailTypeInfo(railtype)->total_offset; |
1387 uint32 offset = GetRailTypeInfo(railtype)->total_offset; |
1383 |
1388 |
1384 if (image != SPR_FLAT_GRASS_TILE) image += offset; |
1389 if (image != SPR_FLAT_GRASS_TILE) image += offset; |
1385 DrawTileSequence(x + 33, y + 17, image, dts->seq, offset); |
1390 DrawTileSequence(x + 33, y + 17, image, dts->seq, offset); |
1386 } |
1391 } |