rail_cmd.c
changeset 2436 7d5df545bd5d
parent 2425 e755ee29133a
child 2472 2711a54b0498
equal deleted inserted replaced
2435:9b9d43988058 2436:7d5df545bd5d
  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);
  1221 }
  1221 }
  1222 
  1222 
  1223 static uint32 _drawtile_track_palette;
  1223 static uint32 _drawtile_track_palette;
  1224 
  1224 
  1225 
  1225 
  1226 static void DrawTrackFence_NW(TileInfo *ti)
  1226 static void DrawTrackFence_NW(const TileInfo *ti)
  1227 {
  1227 {
  1228 	uint32 image = 0x515;
  1228 	uint32 image = 0x515;
  1229 	if (ti->tileh != 0) {
  1229 	if (ti->tileh != 0) {
  1230 		image = 0x519;
  1230 		image = 0x519;
  1231 		if (!(ti->tileh & 2)) {
  1231 		if (!(ti->tileh & 2)) {
  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);
  2144 				STR_1023_RAILROAD_TRAIN_DEPOT : STR_LANDINFO_WAYPOINT;
  2144 				STR_1023_RAILROAD_TRAIN_DEPOT : STR_LANDINFO_WAYPOINT;
  2145 			break;
  2145 			break;
  2146 	}
  2146 	}
  2147 }
  2147 }
  2148 
  2148 
  2149 static void ChangeTileOwner_Track(TileIndex tile, byte old_player, byte new_player)
  2149 static void ChangeTileOwner_Track(TileIndex tile, PlayerID old_player, PlayerID new_player)
  2150 {
  2150 {
  2151 	if (!IsTileOwner(tile, old_player)) return;
  2151 	if (!IsTileOwner(tile, old_player)) return;
  2152 
  2152 
  2153 	if (new_player != 255) {
  2153 	if (new_player != 255) {
  2154 		SetTileOwner(tile, new_player);
  2154 		SetTileOwner(tile, new_player);