rail_cmd.c
changeset 2916 b687477adcba
parent 2911 c853342bc52e
child 2934 3f29a7212713
--- a/rail_cmd.c	Sun Jan 29 18:34:43 2006 +0000
+++ b/rail_cmd.c	Sun Jan 29 18:57:26 2006 +0000
@@ -18,9 +18,7 @@
 #include "station.h"
 #include "sprite.h"
 #include "depot.h"
-#include "pbs.h"
 #include "waypoint.h"
-#include "npf.h"
 #include "rail.h"
 #include "railtypes.h" // include table for railtypes
 
@@ -474,10 +472,6 @@
 			/* We remove the trackbit here. */
 			_m[tile].m5 &= ~trackbit;
 
-			/* Unreserve track for PBS */
-			if (PBSTileReserved(tile) & trackbit)
-				PBSClearTrack(tile, track);
-
 			if (GetTrackBits(tile)  == 0) {
 				/* The tile has no tracks left, it is no longer a rail tile */
 				DoClearSquare(tile);
@@ -766,9 +760,9 @@
 				_m[tile].m3 |= SignalOnTrack(track);
 			} else {
 				if (pre_signal) {
-					// cycle between normal -> pre -> exit -> combo -> pbs ->...
+					// cycle between normal -> pre -> exit -> combo -> ...
 					byte type = (GetSignalType(tile, track) + 1) % SIGTYPE_END;
-					SB(_m[tile].m4, 0, 3, type);
+					SB(_m[tile].m4, 0, 2, type);
 				} else {
 					// cycle between two-way -> one-way -> one-way -> ...
 					/* TODO: Rewrite switch into something more general */
@@ -799,9 +793,9 @@
 			_m[tile].m3 |= p2 & SignalOnTrack(track);
 			// convert between signal<->semaphores when dragging
 			if (semaphore) {
-				SETBIT(_m[tile].m4, 3);
+				SETBIT(_m[tile].m4, 2);
 			} else {
-				CLRBIT(_m[tile].m4, 3);
+				CLRBIT(_m[tile].m4, 2);
 			}
 		}
 
@@ -938,7 +932,7 @@
 		if (GB(_m[tile].m3, 4, 4) == 0) {
 			SB(_m[tile].m2, 4, 4, 0);
 			SB(_m[tile].m5, 6, 2, RAIL_TYPE_NORMAL >> 6); // XXX >> because the constant is meant for direct application, not use with SB
-			CLRBIT(_m[tile].m4, 3); // remove any possible semaphores
+			CLRBIT(_m[tile].m4, 2); // remove any possible semaphores
 		}
 
 		SetSignalsOnBothDir(tile, track);
@@ -1130,54 +1124,29 @@
 #include "table/track_land.h"
 
 // used for presignals
-static const SpriteID _signal_base_sprites[32] = {
+static const SpriteID _signal_base_sprites[16] = {
 	0x4FB,
 	0x1323,
 	0x1333,
 	0x1343,
 
-	// pbs signals
-	0x1393,
-	0x13A3,  // not used (yet?)
-	0x13B3,  // not used (yet?)
-	0x13C3,  // not used (yet?)
-
 	// semaphores
 	0x1353,
 	0x1363,
 	0x1373,
 	0x1383,
 
-	// pbs semaphores
-	0x13D3,
-	0x13E3,  // not used (yet?)
-	0x13F3,  // not used (yet?)
-	0x1403,  // not used (yet?)
-
-
 	// mirrored versions
 	0x4FB,
 	0x1323,
 	0x1333,
 	0x1343,
 
-	// pbs signals
-	0x1393,
-	0x13A3,  // not used (yet?)
-	0x13B3,  // not used (yet?)
-	0x13C3,  // not used (yet?)
-
 	// semaphores
 	0x1446,
 	0x1456,
 	0x1466,
 	0x1476,
-
-	// pbs semaphores
-	0x14C6,
-	0x14D6,  // not used (yet?)
-	0x14E6,  // not used (yet?)
-	0x14F6,  // not used (yet?)
 };
 
 // used to determine the side of the road for the signal
@@ -1195,7 +1164,7 @@
 	uint v = _signal_position[(image_and_pos & 0xF) + (otherside ? 12 : 0)];
 	uint x = ti->x | (v&0xF);
 	uint y = ti->y | (v>>4);
-	uint sprite = _signal_base_sprites[(_m[ti->tile].m4 & 0xF) + (otherside ? 0x10 : 0)] + (image_and_pos>>4) + ((condition != 0) ? 1 : 0);
+	uint sprite = _signal_base_sprites[(_m[ti->tile].m4 & 0x7) + (otherside ? 8 : 0)] + (image_and_pos>>4) + ((condition != 0) ? 1 : 0);
 	AddSortableSpriteToDraw(sprite, x, y, 1, 1, 10, GetSlopeZ(x,y));
 }
 
@@ -1387,16 +1356,6 @@
 		if (track & TRACK_BIT_LEFT)  DrawGroundSprite(rti->base_sprites.single_w);
 		if (track & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e);
 	}
-
-	if (_debug_pbs_level >= 1) {
-		byte pbs = PBSTileReserved(ti->tile) & track;
-		if (pbs & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y | PALETTE_CRASH);
-		if (pbs & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x | PALETTE_CRASH);
-		if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n | PALETTE_CRASH);
-		if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s | PALETTE_CRASH);
-		if (pbs & TRACK_BIT_LEFT)  DrawGroundSprite(rti->base_sprites.single_w | PALETTE_CRASH);
-		if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e | PALETTE_CRASH);
-	}
 }
 
 static void DrawTile_Track(TileInfo *ti)
@@ -1526,16 +1485,6 @@
 
 		DrawGroundSprite(image);
 
-		if (_debug_pbs_level >= 1) {
-			byte pbs = PBSTileReserved(ti->tile);
-			if (pbs & TRACK_BIT_DIAG1) DrawGroundSprite(rti->base_sprites.single_y | PALETTE_CRASH);
-			if (pbs & TRACK_BIT_DIAG2) DrawGroundSprite(rti->base_sprites.single_x | PALETTE_CRASH);
-			if (pbs & TRACK_BIT_UPPER) DrawGroundSprite(rti->base_sprites.single_n | PALETTE_CRASH);
-			if (pbs & TRACK_BIT_LOWER) DrawGroundSprite(rti->base_sprites.single_s | PALETTE_CRASH);
-			if (pbs & TRACK_BIT_LEFT)  DrawGroundSprite(rti->base_sprites.single_w | PALETTE_CRASH);
-			if (pbs & TRACK_BIT_RIGHT) DrawGroundSprite(rti->base_sprites.single_e | PALETTE_CRASH);
-		}
-
 		for (; drss->image != 0; drss++) {
 			DrawSpecialBuilding(drss->image, type < 4 ? rti->total_offset : 0, ti,
 			                    drss->subcoord_x, drss->subcoord_y, 0,
@@ -1595,11 +1544,6 @@
 	bool stop;
 	bool has_presignal;
 
-	bool has_pbssignal;
-		// lowest 2 bits = amount of pbs signals in the block, clamped at 2
-		// bit 2 = there is a pbs entry signal in this block
-		// bit 3 = there is a pbs exit signal in this block
-
 	// presignal info
 	int presignal_exits;
 	int presignal_exits_free;
@@ -1608,10 +1552,6 @@
 	byte bit[NUM_SSD_ENTRY];
 	TileIndex tile[NUM_SSD_ENTRY];
 
-	int pbs_cur;
-	// these are used to keep track of all signals in the block
-	TileIndex pbs_tile[NUM_SSD_ENTRY];
-
 	// these are used to keep track of the stack that modifies presignals recursively
 	TileIndex next_tile[NUM_SSD_STACK];
 	byte next_dir[NUM_SSD_STACK];
@@ -1631,32 +1571,15 @@
 					ssd->cur++;
 				}
 
-				if (PBSIsPbsSignal(tile, ReverseTrackdir(track)))
-					SETBIT(ssd->has_pbssignal, 2);
-
 				// remember if this block has a presignal.
 				ssd->has_presignal |= (_m[tile].m4&1);
 			}
 
-			if (PBSIsPbsSignal(tile, ReverseTrackdir(track)) || PBSIsPbsSignal(tile, track)) {
-				byte num = ssd->has_pbssignal & 3;
-				num = clamp(num + 1, 0, 2);
-				ssd->has_pbssignal &= ~3;
-				ssd->has_pbssignal |= num;
-			}
-
-			ssd->pbs_tile[ssd->pbs_cur] = tile; // remember the tile index
-			ssd->pbs_cur++;
-
-			if (HasSignalOnTrackdir(tile, track)) {
-				if (_m[tile].m4&2) {
-					// this is an exit signal that points out from the segment
-					ssd->presignal_exits++;
-					if (GetSignalState(tile, track) != SIGNAL_STATE_RED)
-						ssd->presignal_exits_free++;
-				}
-				if (PBSIsPbsSignal(tile, track))
-					SETBIT(ssd->has_pbssignal, 3);
+			if (HasSignalOnTrackdir(tile, track) && (_m[tile].m4 & 2)) {
+				// this is an exit signal that points out from the segment
+				ssd->presignal_exits++;
+				if (GetSignalState(tile, track) != SIGNAL_STATE_RED)
+					ssd->presignal_exits_free++;
 			}
 
 			return true;
@@ -1791,14 +1714,6 @@
 	//   there is at least one green exit signal OR
 	//   there are no exit signals in the segment
 
-	// convert the block to pbs, if needed
-	if (_patches.auto_pbs_placement && !(ssd->stop) && (ssd->has_pbssignal == 0xE) && !ssd->has_presignal && (ssd->presignal_exits == 0)) // 0xE means at least 2 pbs signals, and at least 1 entry and 1 exit, see comments ssd->has_pbssignal
-	for (i = 0; i != ssd->pbs_cur; i++) {
-		TileIndex tile = ssd->pbs_tile[i];
-		SB(_m[tile].m4, 0, 3, SIGTYPE_PBS);
-		MarkTileDirtyByTile(tile);
-	};
-
 	// then mark the signals in the segment accordingly
 	for (i = 0; i != ssd->cur; i++) {
 		TileIndex tile = ssd->tile[i];
@@ -1859,9 +1774,8 @@
 
 	for(;;) {
 		// go through one segment and update all signals pointing into that segment.
-		ssd.cur = ssd.pbs_cur = ssd.presignal_exits = ssd.presignal_exits_free = 0;
+		ssd.cur = ssd.presignal_exits = ssd.presignal_exits_free = 0;
 		ssd.has_presignal = false;
-		ssd.has_pbssignal = false;
 
 		FollowTrack(tile, 0xC000 | TRANSPORT_RAIL, direction, (TPFEnumProc*)SetSignalsEnumProc, SetSignalsAfterProc, &ssd);
 		ChangeSignalStates(&ssd);
@@ -2126,16 +2040,14 @@
 			break;
 
 		case RAIL_TYPE_SIGNALS: {
-			const StringID signal_type[7] = {
+			const StringID signal_type[] = {
 				STR_RAILROAD_TRACK_WITH_NORMAL_SIGNALS,
 				STR_RAILROAD_TRACK_WITH_PRESIGNALS,
 				STR_RAILROAD_TRACK_WITH_EXITSIGNALS,
-				STR_RAILROAD_TRACK_WITH_COMBOSIGNALS,
-				STR_RAILROAD_TRACK_WITH_PBSSIGNALS,
-				STR_NULL, STR_NULL
+				STR_RAILROAD_TRACK_WITH_COMBOSIGNALS
 			};
 
-			td->str = signal_type[GB(_m[tile].m4, 0, 3)];
+			td->str = signal_type[GB(_m[tile].m4, 0, 2)];
 			break;
 		}
 
@@ -2199,8 +2111,6 @@
 	} else if (_fractcoords_enter[dir] == fract_coord) {
 		if (_enter_directions[dir] == v->direction) {
 			/* enter the depot */
-			if (v->next == NULL)
-				PBSClearTrack(v->tile, FIND_FIRST_BIT(v->u.rail.track));
 			v->u.rail.track = 0x80,
 			v->vehstatus |= VS_HIDDEN; /* hide it */
 			v->direction ^= 4;