1207 0x58,0x1E,0xE1,0xB9,0x01,0xA3,0x4B,0xEE,0x3B,0xD4,0x43,0xBD, |
1207 0x58,0x1E,0xE1,0xB9,0x01,0xA3,0x4B,0xEE,0x3B,0xD4,0x43,0xBD, |
1208 /* patch: ride side position */ |
1208 /* patch: ride side position */ |
1209 0x1E,0xAC,0x64,0xE1,0x4A,0x10,0xEE,0xC5,0xDB,0x34,0x4D,0xB3 |
1209 0x1E,0xAC,0x64,0xE1,0x4A,0x10,0xEE,0xC5,0xDB,0x34,0x4D,0xB3 |
1210 }; |
1210 }; |
1211 |
1211 |
1212 static void DrawSignalHelper(TileInfo *ti, byte condition, uint32 image_and_pos) |
1212 static void DrawSignalHelper(const TileInfo *ti, byte condition, uint32 image_and_pos) |
1213 { |
1213 { |
1214 bool otherside = _opt.road_side & _patches.signal_side; |
1214 bool otherside = _opt.road_side & _patches.signal_side; |
1215 |
1215 |
1216 uint v = _signal_position[(image_and_pos & 0xF) + (otherside ? 12 : 0)]; |
1216 uint v = _signal_position[(image_and_pos & 0xF) + (otherside ? 12 : 0)]; |
1217 uint x = ti->x | (v&0xF); |
1217 uint x = ti->x | (v&0xF); |
1234 } |
1234 } |
1235 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1235 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1236 ti->x, ti->y+1, 16, 1, 4, ti->z); |
1236 ti->x, ti->y+1, 16, 1, 4, ti->z); |
1237 } |
1237 } |
1238 |
1238 |
1239 static void DrawTrackFence_SE(TileInfo *ti) |
1239 static void DrawTrackFence_SE(const TileInfo *ti) |
1240 { |
1240 { |
1241 uint32 image = 0x515; |
1241 uint32 image = 0x515; |
1242 if (ti->tileh != 0) { |
1242 if (ti->tileh != 0) { |
1243 image = 0x519; |
1243 image = 0x519; |
1244 if (!(ti->tileh & 2)) { |
1244 if (!(ti->tileh & 2)) { |
1247 } |
1247 } |
1248 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1248 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1249 ti->x, ti->y+15, 16, 1, 4, ti->z); |
1249 ti->x, ti->y+15, 16, 1, 4, ti->z); |
1250 } |
1250 } |
1251 |
1251 |
1252 static void DrawTrackFence_NW_SE(TileInfo *ti) |
1252 static void DrawTrackFence_NW_SE(const TileInfo *ti) |
1253 { |
1253 { |
1254 DrawTrackFence_NW(ti); |
1254 DrawTrackFence_NW(ti); |
1255 DrawTrackFence_SE(ti); |
1255 DrawTrackFence_SE(ti); |
1256 } |
1256 } |
1257 |
1257 |
1258 static void DrawTrackFence_NE(TileInfo *ti) |
1258 static void DrawTrackFence_NE(const TileInfo *ti) |
1259 { |
1259 { |
1260 uint32 image = 0x516; |
1260 uint32 image = 0x516; |
1261 if (ti->tileh != 0) { |
1261 if (ti->tileh != 0) { |
1262 image = 0x51A; |
1262 image = 0x51A; |
1263 if (!(ti->tileh & 2)) { |
1263 if (!(ti->tileh & 2)) { |
1266 } |
1266 } |
1267 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1267 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1268 ti->x+1, ti->y, 1, 16, 4, ti->z); |
1268 ti->x+1, ti->y, 1, 16, 4, ti->z); |
1269 } |
1269 } |
1270 |
1270 |
1271 static void DrawTrackFence_SW(TileInfo *ti) |
1271 static void DrawTrackFence_SW(const TileInfo *ti) |
1272 { |
1272 { |
1273 uint32 image = 0x516; |
1273 uint32 image = 0x516; |
1274 if (ti->tileh != 0) { |
1274 if (ti->tileh != 0) { |
1275 image = 0x51A; |
1275 image = 0x51A; |
1276 if (!(ti->tileh & 2)) { |
1276 if (!(ti->tileh & 2)) { |
1279 } |
1279 } |
1280 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1280 AddSortableSpriteToDraw(image | _drawtile_track_palette, |
1281 ti->x+15, ti->y, 1, 16, 4, ti->z); |
1281 ti->x+15, ti->y, 1, 16, 4, ti->z); |
1282 } |
1282 } |
1283 |
1283 |
1284 static void DrawTrackFence_NE_SW(TileInfo *ti) |
1284 static void DrawTrackFence_NE_SW(const TileInfo *ti) |
1285 { |
1285 { |
1286 DrawTrackFence_NE(ti); |
1286 DrawTrackFence_NE(ti); |
1287 DrawTrackFence_SW(ti); |
1287 DrawTrackFence_SW(ti); |
1288 } |
1288 } |
1289 |
1289 |
1290 static void DrawTrackFence_NS_1(TileInfo *ti) |
1290 static void DrawTrackFence_NS_1(const TileInfo *ti) |
1291 { |
1291 { |
1292 int z = ti->z; |
1292 int z = ti->z; |
1293 if (ti->tileh & 1) |
1293 if (ti->tileh & 1) |
1294 z += 8; |
1294 z += 8; |
1295 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1295 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1296 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1296 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1297 } |
1297 } |
1298 |
1298 |
1299 static void DrawTrackFence_NS_2(TileInfo *ti) |
1299 static void DrawTrackFence_NS_2(const TileInfo *ti) |
1300 { |
1300 { |
1301 int z = ti->z; |
1301 int z = ti->z; |
1302 if (ti->tileh & 4) |
1302 if (ti->tileh & 4) |
1303 z += 8; |
1303 z += 8; |
1304 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1304 AddSortableSpriteToDraw(0x517 | _drawtile_track_palette, |
1305 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1305 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1306 } |
1306 } |
1307 |
1307 |
1308 static void DrawTrackFence_WE_1(TileInfo *ti) |
1308 static void DrawTrackFence_WE_1(const TileInfo *ti) |
1309 { |
1309 { |
1310 int z = ti->z; |
1310 int z = ti->z; |
1311 if (ti->tileh & 8) |
1311 if (ti->tileh & 8) |
1312 z += 8; |
1312 z += 8; |
1313 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1313 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1314 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1314 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1315 } |
1315 } |
1316 |
1316 |
1317 static void DrawTrackFence_WE_2(TileInfo *ti) |
1317 static void DrawTrackFence_WE_2(const TileInfo *ti) |
1318 { |
1318 { |
1319 int z = ti->z; |
1319 int z = ti->z; |
1320 if (ti->tileh & 2) |
1320 if (ti->tileh & 2) |
1321 z += 8; |
1321 z += 8; |
1322 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1322 AddSortableSpriteToDraw(0x518 | _drawtile_track_palette, |
1323 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1323 ti->x + 8, ti->y + 8, 1, 1, 4, z); |
1324 } |
1324 } |
1325 |
1325 |
1326 static void DetTrackDrawProc_Null(TileInfo *ti) |
1326 static void DetTrackDrawProc_Null(const TileInfo *ti) |
1327 { |
1327 { |
1328 /* nothing should be here */ |
1328 /* nothing should be here */ |
1329 } |
1329 } |
1330 |
1330 |
1331 typedef void DetailedTrackProc(TileInfo *ti); |
1331 typedef void DetailedTrackProc(const TileInfo *ti); |
1332 DetailedTrackProc * const _detailed_track_proc[16] = { |
1332 DetailedTrackProc * const _detailed_track_proc[16] = { |
1333 DetTrackDrawProc_Null, |
1333 DetTrackDrawProc_Null, |
1334 DetTrackDrawProc_Null, |
1334 DetTrackDrawProc_Null, |
1335 |
1335 |
1336 DrawTrackFence_NW, |
1336 DrawTrackFence_NW, |
1941 return GetPartialZ(ti->x&0xF, ti->y&0xF, th) + z; |
1941 return GetPartialZ(ti->x&0xF, ti->y&0xF, th) + z; |
1942 } |
1942 } |
1943 return z; |
1943 return z; |
1944 } |
1944 } |
1945 |
1945 |
1946 static uint GetSlopeTileh_Track(TileInfo *ti) |
1946 static uint GetSlopeTileh_Track(const TileInfo *ti) |
1947 { |
1947 { |
1948 // check if it's a foundation |
1948 // check if it's a foundation |
1949 if (ti->tileh != 0) { |
1949 if (ti->tileh != 0) { |
1950 if ((ti->map5 & 0x80) == 0) { |
1950 if ((ti->map5 & 0x80) == 0) { |
1951 uint f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); |
1951 uint f = GetRailFoundation(ti->tileh, ti->map5 & 0x3F); |