(svn r12125) -Codechange: Remove redundant signal lookup table, and document why normal electric signals are handled specially.
authorpeter1138
Tue, 12 Feb 2008 20:14:14 +0000
changeset 9043 dfcde0d0dc0a
parent 9042 28aab5504e15
child 9044 a3b59d458c03
(svn r12125) -Codechange: Remove redundant signal lookup table, and document why normal electric signals are handled specially.
src/rail_cmd.cpp
src/table/sprites.h
--- a/src/rail_cmd.cpp	Tue Feb 12 15:43:10 2008 +0000
+++ b/src/rail_cmd.cpp	Tue Feb 12 20:14:14 2008 +0000
@@ -1433,27 +1433,20 @@
 		}
 	};
 
-	static const SpriteID SignalBase[2][2][4] = {
-		{    /* Signals on left side */
-			{  0x4FB, 0x1323, 0x1333, 0x1343}, /* light signals */
-			{ 0x1353, 0x1363, 0x1373, 0x1383}  /* semaphores    */
-		}, { /* Signals on right side */
-			{  0x4FB, 0x1323, 0x1333, 0x1343}, /* light signals */
-			{ 0x1446, 0x1456, 0x1466, 0x1476}  /* semaphores    */
-		/*         |       |       |       |     */
-		/*    normal,  entry,   exit,  combo     */
-		}
-	};
-
 	uint x = TileX(tile) * TILE_SIZE + SignalPositions[side][pos].x;
 	uint y = TileY(tile) * TILE_SIZE + SignalPositions[side][pos].y;
 
 	SpriteID sprite;
 
-	if (GetSignalType(tile, track) == SIGTYPE_NORMAL && GetSignalVariant(tile, track) == SIG_ELECTRIC) {
-		sprite = SignalBase[side][GetSignalVariant(tile, track)][GetSignalType(tile, track)] + image + condition;
+	SignalType type       = GetSignalType(tile, track);
+	SignalVariant variant = GetSignalVariant(tile, track);
+
+	if (type == SIGTYPE_NORMAL && variant == SIG_ELECTRIC) {
+		/* Normal electric signals are picked from original sprites. */
+		sprite = SPR_ORIGINAL_SIGNALS_BASE + image + condition;
 	} else {
-		sprite = SPR_SIGNALS_BASE + (GetSignalType(tile, track) - 1) * 16 + GetSignalVariant(tile, track) * 64 + image + condition;
+		/* All other signals are picked from add on sprites. */
+		sprite = SPR_SIGNALS_BASE + (type - 1) * 16 + variant * 64 + image + condition;
 	}
 
 	AddSortableSpriteToDraw(sprite, PAL_NONE, x, y, 1, 1, BB_HEIGHT_UNDER_BRIDGE, GetSaveSlopeZ(x, y, track));
--- a/src/table/sprites.h	Tue Feb 12 15:43:10 2008 +0000
+++ b/src/table/sprites.h	Tue Feb 12 20:14:14 2008 +0000
@@ -263,6 +263,8 @@
 	SPR_MONO_SNOW_OFFSET        = 26,
 	SPR_MGLV_SNOW_OFFSET        = 26,
 
+	SPR_ORIGINAL_SIGNALS_BASE   = 1275,
+
 	SPR_RAIL_SINGLE_Y           = 1005,
 	SPR_RAIL_SINGLE_X           = 1006,
 	SPR_RAIL_SINGLE_NORTH       = 1007,