tottranspstr_alt.patch applied instead

Index: viewport.c
===================================================================
--- viewport.c	(revision 836)
+++ viewport.c	(working copy)
@@ -1070,8 +1070,7 @@
 	dp.height >>= zoom;
 
 	do {
-
-		if (ss->width != 0) {
+		if ((_display_opt & DO_TRANS_BUILDINGS) && ss->width != 0) {
 			int x, y, w, bottom;
 			
 			x = (ss->x >> zoom) - 1;
@@ -1092,7 +1091,26 @@
 
 		SET_DPARAM32(0, ss->params[0]);
 		SET_DPARAM32(1, ss->params[1]);
-		DrawString(ss->x >> zoom, (ss->y >> zoom) - (ss->width&0x8000?2:0), ss->string, 0);
+		DrawString(ss->x >> zoom, (ss->y >> zoom) - (ss->width&0x8000?2:0), ss->string, 16);
+
+		if (!(_display_opt & DO_TRANS_BUILDINGS) && ss->width != 0) {
+			/* This is such a frustrating mess - I need to convert
+			 * from real color codes to string color codes and guess
+			 * what, they are completely different. --pasky */
+			static const byte ci2sci[17] = {
+				/*  0 */ 16, /*  1 */  0, /*  2 */  5,
+				/*  3X*/  2, /*  4 */  8, /*  5 */  3,
+				/*  6X*/ 14, /*  7 */  7, /*  8 */  9,
+				/*  9 */ 13, /* 10 */ 10, /* 11 */ 15,
+				/* 12 */  4, /* 13 */  6, /* 14 */ 11,
+				/* 15 */  1, /* 16 */ 12
+			};
+			byte color = ci2sci[ss->color + 1];
+
+			SET_DPARAM32(0, ss->params[0]);
+			SET_DPARAM32(1, ss->params[1]);
+			DrawString((ss->x >> zoom) - 1, (ss->y >> zoom) - (ss->width&0x8000?2:0) - 1, ss->string, color);
+		}
 	} while ( (ss = ss->next) != NULL);
 
 	_cur_dpi = dpi;
