SimCityがオープンソースになったのでコンパイルしてみた

http://www.donhopkins.com/home/micropolis/ からダウンロード。Linux 用バイナリ micropolis-activity.tgz を試したら、浮動小数点演算例外とか言われていきなり終了する。なのでソース micropolis-activity-source.tgz からビルドする。
ソースの展開

tar zxvf ../micropolis-activity-source.tgz
cd micropolis-activity

yaccsyntax error, unexpected = とか error: conflicting types for 'yyerror' というエラーを出してコンパイルできない。よく分かってないけどテキトーに修正してエラーは出ないようにしてみる。追記: Berkeley Yacc なら大丈夫っぽい。

patch -p1 < ../下の方にあるパッチ

コンパイルする。リンカが -lX11 を見つけてくれなかったので LIBRARY_PATH を指定した。

cd src/
env LIBRARY_PATH=/usr/X11/lib make
make install
cd ..

実行は

./Micropolis

だと思うのだが、建物を建てると金が減ったり人口が増えたりはするものの、画像がちゃんと表示されない。シナリオの方をやってみると、何もない空間を電車だけが走り回っていたりする。
以下パッチ

diff -ur micropolis-activity/src/tclx/src/tclxgdat.y micropolis-activity-patch/src/tclx/src/tclxgdat.y
--- micropolis-activity/src/tclx/src/tclxgdat.y	2007-12-01 11:49:55.000000000 +0900
+++ micropolis-activity-patch/src/tclx/src/tclxgdat.y	2008-01-13 20:25:02.000000000 +0900
@@ -64,78 +64,78 @@
 timedate:               /* empty */
         | timedate item;
 
-item:   tspec =
+item:   tspec 
                 {timeflag++;}
-        | zone =
+        | zone 
                 {zoneflag++;}
-        | dtspec =
+        | dtspec 
                 {dateflag++;}
-        | dyspec =
+        | dyspec 
                 {dayflag++;}
-        | rspec =
+        | rspec 
                 {relflag++;}
         | nspec;
 
-nspec:  NUMBER =
+nspec:  NUMBER 
                 {if (timeflag && dateflag && !relflag) year = $1;
                 else {timeflag++;hh = $1/100;mm = $1%100;ss = 0;merid = 24;}};
 
-tspec:  NUMBER MERIDIAN =
+tspec:  NUMBER MERIDIAN 
                 {hh = $1; mm = 0; ss = 0; merid = $2;}
-        | NUMBER ':' NUMBER =
+        | NUMBER ':' NUMBER 
                 {hh = $1; mm = $3; merid = 24;}
-        | NUMBER ':' NUMBER MERIDIAN =
+        | NUMBER ':' NUMBER MERIDIAN 
                 {hh = $1; mm = $3; merid = $4;}
-        | NUMBER ':' NUMBER NUMBER =
+        | NUMBER ':' NUMBER NUMBER 
                 {hh = $1; mm = $3; merid = 24;
                 dayLight = STANDARD; ourzone = -($4%100 + 60*$4/100);}
-        | NUMBER ':' NUMBER ':' NUMBER =
+        | NUMBER ':' NUMBER ':' NUMBER 
                 {hh = $1; mm = $3; ss = $5; merid = 24;}
-        | NUMBER ':' NUMBER ':' NUMBER MERIDIAN =
+        | NUMBER ':' NUMBER ':' NUMBER MERIDIAN 
                 {hh = $1; mm = $3; ss = $5; merid = $6;}
-        | NUMBER ':' NUMBER ':' NUMBER NUMBER =
+        | NUMBER ':' NUMBER ':' NUMBER NUMBER 
                 {hh = $1; mm = $3; ss = $5; merid = 24;
                 dayLight = STANDARD; ourzone = -($6%100 + 60*$6/100);};
 
-zone:   ZONE =
+zone:   ZONE 
                 {ourzone = $1; dayLight = STANDARD;}
-        | DAYZONE =
+        | DAYZONE 
                 {ourzone = $1; dayLight = DAYLIGHT;};
 
-dyspec: DAY =
+dyspec: DAY 
                 {dayord = 1; dayreq = $1;}
-        | DAY ',' =
+        | DAY ',' 
                 {dayord = 1; dayreq = $1;}
-        | NUMBER DAY =
+        | NUMBER DAY 
                 {dayord = $1; dayreq = $2;};
 
-dtspec: NUMBER '/' NUMBER =
+dtspec: NUMBER '/' NUMBER 
                 {month = $1; day = $3;}
-        | NUMBER '/' NUMBER '/' NUMBER =
+        | NUMBER '/' NUMBER '/' NUMBER 
                 {month = $1; day = $3; year = $5;}
-        | MONTH NUMBER =
+        | MONTH NUMBER 
                 {month = $1; day = $2;}
-        | MONTH NUMBER ',' NUMBER =
+        | MONTH NUMBER ',' NUMBER 
                 {month = $1; day = $2; year = $4;}
-        | NUMBER MONTH =
+        | NUMBER MONTH 
                 {month = $2; day = $1;}
-        | NUMBER MONTH NUMBER =
+        | NUMBER MONTH NUMBER 
                 {month = $2; day = $1; year = $3;};
 
 
-rspec:  NUMBER UNIT =
+rspec:  NUMBER UNIT 
                 {relsec +=  60L * $1 * $2;}
-        | NUMBER MUNIT =
+        | NUMBER MUNIT 
                 {relmonth += $1 * $2;}
-        | NUMBER SUNIT =
+        | NUMBER SUNIT 
                 {relsec += $1;}
-        | UNIT =
+        | UNIT 
                 {relsec +=  60L * $1;}
-        | MUNIT =
+        | MUNIT 
                 {relmonth += $1;}
-        | SUNIT =
+        | SUNIT 
                 {relsec++;}
-        | rspec AGO =
+        | rspec AGO 
                 {relsec = -relsec; relmonth = -relmonth;};
 %%
 
@@ -580,7 +580,7 @@
  * Error message are not used, so discard with dummy function.
  */
 
-void
+int
 yyerror(msg)
     char *msg;
 {