| 1 | /* sim.h: Main include file |
| 2 | * |
| 3 | * Micropolis, Unix Version. This game was released for the Unix platform |
| 4 | * in or about 1990 and has been modified for inclusion in the One Laptop |
| 5 | * Per Child program. Copyright (C) 1989 - 2007 Electronic Arts Inc. If |
| 6 | * you need assistance with this program, you may contact: |
| 7 | * http://wiki.laptop.org/go/Micropolis or email micropolis@laptop.org. |
| 8 | * |
| 9 | * This program is free software: you can redistribute it and/or modify |
| 10 | * it under the terms of the GNU General Public License as published by |
| 11 | * the Free Software Foundation, either version 3 of the License, or (at |
| 12 | * your option) any later version. |
| 13 | * |
| 14 | * This program is distributed in the hope that it will be useful, but |
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 17 | * General Public License for more details. You should have received a |
| 18 | * copy of the GNU General Public License along with this program. If |
| 19 | * not, see <http://www.gnu.org/licenses/>. |
| 20 | * |
| 21 | * ADDITIONAL TERMS per GNU GPL Section 7 |
| 22 | * |
| 23 | * No trademark or publicity rights are granted. This license does NOT |
| 24 | * give you any right, title or interest in the trademark SimCity or any |
| 25 | * other Electronic Arts trademark. You may not distribute any |
| 26 | * modification of this program using the trademark SimCity or claim any |
| 27 | * affliation or association with Electronic Arts Inc. or its employees. |
| 28 | * |
| 29 | * Any propagation or conveyance of this program must include this |
| 30 | * copyright notice and these terms. |
| 31 | * |
| 32 | * If you convey this program (or any modifications of it) and assume |
| 33 | * contractual liability for the program to recipients of it, you agree |
| 34 | * to indemnify Electronic Arts for any liability that those contractual |
| 35 | * assumptions impose on Electronic Arts. |
| 36 | * |
| 37 | * You may not misrepresent the origins of this program; modified |
| 38 | * versions of the program must be marked as such and not identified as |
| 39 | * the original program. |
| 40 | * |
| 41 | * This disclaimer supplements the one included in the General Public |
| 42 | * License. TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, THIS |
| 43 | * PROGRAM IS PROVIDED TO YOU "AS IS," WITH ALL FAULTS, WITHOUT WARRANTY |
| 44 | * OF ANY KIND, AND YOUR USE IS AT YOUR SOLE RISK. THE ENTIRE RISK OF |
| 45 | * SATISFACTORY QUALITY AND PERFORMANCE RESIDES WITH YOU. ELECTRONIC ARTS |
| 46 | * DISCLAIMS ANY AND ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES, |
| 47 | * INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY QUALITY, |
| 48 | * FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT OF THIRD PARTY |
| 49 | * RIGHTS, AND WARRANTIES (IF ANY) ARISING FROM A COURSE OF DEALING, |
| 50 | * USAGE, OR TRADE PRACTICE. ELECTRONIC ARTS DOES NOT WARRANT AGAINST |
| 51 | * INTERFERENCE WITH YOUR ENJOYMENT OF THE PROGRAM; THAT THE PROGRAM WILL |
| 52 | * MEET YOUR REQUIREMENTS; THAT OPERATION OF THE PROGRAM WILL BE |
| 53 | * UNINTERRUPTED OR ERROR-FREE, OR THAT THE PROGRAM WILL BE COMPATIBLE |
| 54 | * WITH THIRD PARTY SOFTWARE OR THAT ANY ERRORS IN THE PROGRAM WILL BE |
| 55 | * CORRECTED. NO ORAL OR WRITTEN ADVICE PROVIDED BY ELECTRONIC ARTS OR |
| 56 | * ANY AUTHORIZED REPRESENTATIVE SHALL CREATE A WARRANTY. SOME |
| 57 | * JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF OR LIMITATIONS ON IMPLIED |
| 58 | * WARRANTIES OR THE LIMITATIONS ON THE APPLICABLE STATUTORY RIGHTS OF A |
| 59 | * CONSUMER, SO SOME OR ALL OF THE ABOVE EXCLUSIONS AND LIMITATIONS MAY |
| 60 | * NOT APPLY TO YOU. |
| 61 | */ |
| 62 | |
| 63 | /* workaround sun c compiler junk */ |
| 64 | |
| 65 | #ifdef sun |
| 66 | |
| 67 | #define _TTYCHARS_ |
| 68 | #define CTRL(c) (#c[0]&037) |
| 69 | |
| 70 | #ifndef SOLARIS2 |
| 71 | #define __sys_ioccom_h |
| 72 | #define _IOCPARM_MASK 0xff /* parameters must be < 256 bytes */ |
| 73 | #define _IOC_VOID 0x20000000 /* no parameters */ |
| 74 | #define _IOC_OUT 0x40000000 /* copy out parameters */ |
| 75 | #define _IOC_IN 0x80000000 /* copy in parameters */ |
| 76 | #define _IOC_INOUT (_IOC_IN|_IOC_OUT) |
| 77 | #define _IO(x,y) (_IOC_VOID|(#x[0]<<8)|y) |
| 78 | #define _IOR(x,y,t) (_IOC_OUT|((sizeof(t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 79 | #define _IORN(x,y,t) (_IOC_OUT|(((t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 80 | #define _IOW(x,y,t) (_IOC_IN|((sizeof(t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 81 | #define _IOWN(x,y,t) (_IOC_IN|(((t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 82 | #define _IOWR(x,y,t) (_IOC_INOUT|((sizeof(t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 83 | #define _IOWRN(x,y,t) (_IOC_INOUT|(((t)&_IOCPARM_MASK)<<16)|(#x[0]<<8)|y) |
| 84 | #endif |
| 85 | |
| 86 | #endif |
| 87 | |
| 88 | |
| 89 | #include <stdio.h> |
| 90 | #include <stdlib.h> |
| 91 | #include <assert.h> |
| 92 | #include <ctype.h> |
| 93 | #include <setjmp.h> |
| 94 | #include <errno.h> |
| 95 | #include <signal.h> |
| 96 | #include <math.h> |
| 97 | #include <unistd.h> |
| 98 | #include <sys/types.h> |
| 99 | #include <sys/time.h> |
| 100 | #include <sys/stat.h> |
| 101 | #include <sys/file.h> |
| 102 | #include <sys/ioctl.h> |
| 103 | #include <sys/resource.h> |
| 104 | #ifndef MSDOS |
| 105 | #include <sys/mman.h> |
| 106 | #include <netinet/in.h> |
| 107 | #include <arpa/inet.h> |
| 108 | #endif |
| 109 | |
| 110 | #ifdef sun |
| 111 | #ifdef __SVR4 |
| 112 | #include <sys/systeminfo.h> |
| 113 | #else |
| 114 | #include <sys/vadvise.h> |
| 115 | #endif |
| 116 | #endif |
| 117 | |
| 118 | #ifdef sgi |
| 119 | #if 0 |
| 120 | #include <audio.h> |
| 121 | #endif |
| 122 | #endif |
| 123 | |
| 124 | #include <sys/ipc.h> |
| 125 | #include <sys/shm.h> |
| 126 | #include <X11/Xlib.h> |
| 127 | #include <X11/Xutil.h> |
| 128 | #include <X11/Xatom.h> |
| 129 | #include <X11/extensions/XShm.h> |
| 130 | |
| 131 | //#include <xpmtk.h> |
| 132 | #include <X11/xpm.h> |
| 133 | |
| 134 | /* gcc compat workaround! */ |
| 135 | #define _STDDEF_H |
| 136 | |
| 137 | #include "tclxtend.h" |
| 138 | #include "tclint.h" |
| 139 | #include "tclunix.h" |
| 140 | #include "tkconfig.h" |
| 141 | #include "tkint.h" |
| 142 | |
| 143 | #include "mac.h" |
| 144 | #include "view.h" |
| 145 | #include "macros.h" |
| 146 | |
| 147 | /* Constants */ |
| 148 | |
| 149 | #define TRUE 1 |
| 150 | #define FALSE 0 |
| 151 | |
| 152 | #ifdef MEGA |
| 153 | #define SimWidth (120 * MEGA) |
| 154 | #define SimHeight (100 * MEGA) |
| 155 | #else |
| 156 | #define SimWidth 120 |
| 157 | #define SimHeight 100 |
| 158 | #endif |
| 159 | |
| 160 | #define WORLD_X SimWidth |
| 161 | #define WORLD_Y SimHeight |
| 162 | #define HWLDX (SimWidth >>1) |
| 163 | #define HWLDY (SimHeight >>1) |
| 164 | #define QWX (SimWidth >>2) |
| 165 | #define QWY (SimHeight >>2) |
| 166 | #define SmX (SimWidth >>3) |
| 167 | #define SmY ((SimHeight + 7) >>3) |
| 168 | |
| 169 | #define EDITOR_W (WORLD_X * 16) |
| 170 | #define EDITOR_H (WORLD_Y * 16) |
| 171 | #define MAP_W (WORLD_X * 3) |
| 172 | #define MAP_H (WORLD_Y * 3) |
| 173 | |
| 174 | #define NIL 0 |
| 175 | #define HORIZ 1 |
| 176 | #define VERT 0 |
| 177 | |
| 178 | #define PROBNUM 10 |
| 179 | |
| 180 | #define HISTLEN 480 |
| 181 | #define MISCHISTLEN 240 |
| 182 | |
| 183 | #define POWERMAPROW ((WORLD_X + 15) / 16) |
| 184 | |
| 185 | #ifdef MEGA |
| 186 | #define POWERMAPLEN ((QUAD)(2 * POWERMAPROW * WORLD_Y)) |
| 187 | #define POWERWORD(x, y) ((((QUAD)(x)) >>4) + (((QUAD)(y)) * POWERMAPROW)) |
| 188 | #else |
| 189 | #define POWERMAPLEN 1700 /* ??? PWRMAPSIZE */ |
| 190 | #define POWERWORD(x, y) (((x) >>4) + ((y) <<3)) |
| 191 | #endif |
| 192 | |
| 193 | #define SETPOWERBIT(x, y) PowerMap[POWERWORD((x), (y))] |= 1 << ((x) & 15) |
| 194 | #define PWRMAPSIZE (POWERMAPROW * WORLD_Y) |
| 195 | #define PWRSTKSIZE ((WORLD_X * WORLD_Y) / 4) |
| 196 | |
| 197 | #define ALMAP 0 /* all */ |
| 198 | #define REMAP 1 /* residential */ |
| 199 | #define COMAP 2 /* commercial */ |
| 200 | #define INMAP 3 /* industrial */ |
| 201 | |
| 202 | #define PRMAP 4 /* power */ |
| 203 | #define RDMAP 5 /* road */ |
| 204 | |
| 205 | #define PDMAP 6 /* population density */ |
| 206 | #define RGMAP 7 /* rate of growth */ |
| 207 | |
| 208 | #define TDMAP 8 /* traffic density */ |
| 209 | #define PLMAP 9 /* pollution */ |
| 210 | #define CRMAP 10 /* crime */ |
| 211 | #define LVMAP 11 /* land value */ |
| 212 | |
| 213 | #define FIMAP 12 /* fire radius */ |
| 214 | #define POMAP 13 /* police radius */ |
| 215 | #define DYMAP 14 /* dynamic */ |
| 216 | |
| 217 | #define NMAPS 15 |
| 218 | |
| 219 | /* These adjust frequency in Simulate() */ |
| 220 | |
| 221 | #define VALVERATE 2 |
| 222 | #define CENSUSRATE 4 |
| 223 | #define TAXFREQ 48 |
| 224 | |
| 225 | /* These are names of the 16 colors */ |
| 226 | #define COLOR_WHITE 0 |
| 227 | #define COLOR_YELLOW 1 |
| 228 | #define COLOR_ORANGE 2 |
| 229 | #define COLOR_RED 3 |
| 230 | #define COLOR_DARKRED 4 |
| 231 | #define COLOR_DARKBLUE 5 |
| 232 | #define COLOR_LIGHTBLUE 6 |
| 233 | #define COLOR_BROWN 7 |
| 234 | #define COLOR_LIGHTGREEN 8 |
| 235 | #define COLOR_DARKGREEN 9 |
| 236 | #define COLOR_OLIVE 10 |
| 237 | #define COLOR_LIGHTBROWN 11 |
| 238 | #define COLOR_LIGHTGRAY 12 |
| 239 | #define COLOR_MEDIUMGRAY 13 |
| 240 | #define COLOR_DARKGRAY 14 |
| 241 | #define COLOR_BLACK 15 |
| 242 | |
| 243 | /* Status Bits */ |
| 244 | |
| 245 | #define PWRBIT 32768 /*20 bit 15 */ |
| 246 | #define CONDBIT 16384 /*10 bit 14 */ |
| 247 | #define BURNBIT 8192 /*8 bit 13 */ |
| 248 | #define BULLBIT 4096 /*4 bit 12 */ |
| 249 | #define ANIMBIT 2048 /*2 bit 11 */ |
| 250 | #define ZONEBIT 1024 /*1 bit 10 */ |
| 251 | #define ALLBITS 64512 /* mask for upper 6 bits */ |
| 252 | #define LOMASK 1023 /* mask for low 10 bits */ |
| 253 | |
| 254 | #define BLBNBIT (BULLBIT+BURNBIT) |
| 255 | #define BLBNCNBIT (BULLBIT+BURNBIT+CONDBIT) |
| 256 | #define BNCNBIT (BURNBIT+CONDBIT) |
| 257 | |
| 258 | /* Object & Sound Numbers */ |
| 259 | |
| 260 | #define TRA 1 |
| 261 | #define COP 2 |
| 262 | #define AIR 3 |
| 263 | #define SHI 4 |
| 264 | #define GOD 5 |
| 265 | #define TOR 6 |
| 266 | #define EXP 7 |
| 267 | #define BUS 8 |
| 268 | |
| 269 | /* Max # of Objects */ |
| 270 | |
| 271 | #define OBJN 9 |
| 272 | |
| 273 | /* Graph Histories */ |
| 274 | #define RES_HIST 0 |
| 275 | #define COM_HIST 1 |
| 276 | #define IND_HIST 2 |
| 277 | #define MONEY_HIST 3 |
| 278 | #define CRIME_HIST 4 |
| 279 | #define POLLUTION_HIST 5 |
| 280 | #define HISTORIES 6 |
| 281 | #define ALL_HISTORIES ((1 <<HISTORIES) - 1) |
| 282 | |
| 283 | /* Character Mapping */ |
| 284 | |
| 285 | #define DIRT 0 |
| 286 | #define RIVER 2 |
| 287 | #define REDGE 3 |
| 288 | #define CHANNEL 4 |
| 289 | #define FIRSTRIVEDGE 5 |
| 290 | #define LASTRIVEDGE 20 |
| 291 | #define TREEBASE 21 |
| 292 | #define LASTTREE 36 |
| 293 | #define WOODS 37 |
| 294 | #define UNUSED_TRASH1 38 |
| 295 | #define UNUSED_TRASH2 39 |
| 296 | #define WOODS2 40 |
| 297 | #define WOODS3 41 |
| 298 | #define WOODS4 42 |
| 299 | #define WOODS5 43 |
| 300 | #define RUBBLE 44 |
| 301 | #define LASTRUBBLE 47 |
| 302 | #define FLOOD 48 |
| 303 | #define LASTFLOOD 51 |
| 304 | #define RADTILE 52 |
| 305 | #define UNUSED_TRASH3 53 |
| 306 | #define UNUSED_TRASH4 54 |
| 307 | #define UNUSED_TRASH5 55 |
| 308 | #define FIRE 56 |
| 309 | #define FIREBASE 56 |
| 310 | #define LASTFIRE 63 |
| 311 | #define ROADBASE 64 |
| 312 | #define HBRIDGE 64 |
| 313 | #define VBRIDGE 65 |
| 314 | #define ROADS 66 |
| 315 | #define INTERSECTION 76 |
| 316 | #define HROADPOWER 77 |
| 317 | #define VROADPOWER 78 |
| 318 | #define BRWH 79 |
| 319 | #define LTRFBASE 80 |
| 320 | #define BRWV 95 |
| 321 | #define BRWXXX1 111 |
| 322 | #define BRWXXX2 127 |
| 323 | #define BRWXXX3 143 |
| 324 | #define HTRFBASE 144 |
| 325 | #define BRWXXX4 159 |
| 326 | #define BRWXXX5 175 |
| 327 | #define BRWXXX6 191 |
| 328 | #define LASTROAD 206 |
| 329 | #define BRWXXX7 207 |
| 330 | #define POWERBASE 208 |
| 331 | #define HPOWER 208 |
| 332 | #define VPOWER 209 |
| 333 | #define LHPOWER 210 |
| 334 | #define LVPOWER 211 |
| 335 | #define RAILHPOWERV 221 |
| 336 | #define RAILVPOWERH 222 |
| 337 | #define LASTPOWER 222 |
| 338 | #define UNUSED_TRASH6 223 |
| 339 | #define RAILBASE 224 |
| 340 | #define HRAIL 224 |
| 341 | #define VRAIL 225 |
| 342 | #define LHRAIL 226 |
| 343 | #define LVRAIL 227 |
| 344 | #define HRAILROAD 237 |
| 345 | #define VRAILROAD 238 |
| 346 | #define LASTRAIL 238 |
| 347 | #define ROADVPOWERH 239 /* bogus? */ |
| 348 | #define RESBASE 240 |
| 349 | #define FREEZ 244 |
| 350 | #define HOUSE 249 |
| 351 | #define LHTHR 249 |
| 352 | #define HHTHR 260 |
| 353 | #define RZB 265 |
| 354 | #define HOSPITAL 409 |
| 355 | #define CHURCH 418 |
| 356 | #define COMBASE 423 |
| 357 | #define COMCLR 427 |
| 358 | #define CZB 436 |
| 359 | #define INDBASE 612 |
| 360 | #define INDCLR 616 |
| 361 | #define LASTIND 620 |
| 362 | #define IND1 621 |
| 363 | #define IZB 625 |
| 364 | #define IND2 641 |
| 365 | #define IND3 644 |
| 366 | #define IND4 649 |
| 367 | #define IND5 650 |
| 368 | #define IND6 676 |
| 369 | #define IND7 677 |
| 370 | #define IND8 686 |
| 371 | #define IND9 689 |
| 372 | #define PORTBASE 693 |
| 373 | #define PORT 698 |
| 374 | #define LASTPORT 708 |
| 375 | #define AIRPORTBASE 709 |
| 376 | #define RADAR 711 |
| 377 | #define AIRPORT 716 |
| 378 | #define COALBASE 745 |
| 379 | #define POWERPLANT 750 |
| 380 | #define LASTPOWERPLANT 760 |
| 381 | #define FIRESTBASE 761 |
| 382 | #define FIRESTATION 765 |
| 383 | #define POLICESTBASE 770 |
| 384 | #define POLICESTATION 774 |
| 385 | #define STADIUMBASE 779 |
| 386 | #define STADIUM 784 |
| 387 | #define FULLSTADIUM 800 |
| 388 | #define NUCLEARBASE 811 |
| 389 | #define NUCLEAR 816 |
| 390 | #define LASTZONE 826 |
| 391 | #define LIGHTNINGBOLT 827 |
| 392 | #define HBRDG0 828 |
| 393 | #define HBRDG1 829 |
| 394 | #define HBRDG2 830 |
| 395 | #define HBRDG3 831 |
| 396 | #define RADAR0 832 |
| 397 | #define RADAR1 833 |
| 398 | #define RADAR2 834 |
| 399 | #define RADAR3 835 |
| 400 | #define RADAR4 836 |
| 401 | #define RADAR5 837 |
| 402 | #define RADAR6 838 |
| 403 | #define RADAR7 839 |
| 404 | #define FOUNTAIN 840 |
| 405 | #define INDBASE2 844 |
| 406 | #define TELEBASE 844 |
| 407 | #define TELELAST 851 |
| 408 | #define SMOKEBASE 852 |
| 409 | #define TINYEXP 860 |
| 410 | #define SOMETINYEXP 864 |
| 411 | #define LASTTINYEXP 867 |
| 412 | #define COALSMOKE1 916 |
| 413 | #define COALSMOKE2 920 |
| 414 | #define COALSMOKE3 924 |
| 415 | #define COALSMOKE4 928 |
| 416 | #define FOOTBALLGAME1 932 |
| 417 | #define FOOTBALLGAME2 940 |
| 418 | #define VBRDG0 948 |
| 419 | #define VBRDG1 949 |
| 420 | #define VBRDG2 950 |
| 421 | #define VBRDG3 951 |
| 422 | |
| 423 | #define TILE_COUNT 960 |
| 424 | |
| 425 | /* |
| 426 | * These describe the wand values, the object dragged around on the screen. |
| 427 | */ |
| 428 | |
| 429 | #define residentialState 0 |
| 430 | #define commercialState 1 |
| 431 | #define industrialState 2 |
| 432 | #define fireState 3 |
| 433 | #define queryState 4 |
| 434 | #define policeState 5 |
| 435 | #define wireState 6 |
| 436 | #define dozeState 7 |
| 437 | #define rrState 8 |
| 438 | #define roadState 9 |
| 439 | #define chalkState 10 |
| 440 | #define eraserState 11 |
| 441 | #define stadiumState 12 |
| 442 | #define parkState 13 |
| 443 | #define seaportState 14 |
| 444 | #define powerState 15 |
| 445 | #define nuclearState 16 |
| 446 | #define airportState 17 |
| 447 | #define networkState 18 |
| 448 | |
| 449 | |
| 450 | #define firstState residentialState |
| 451 | #define lastState networkState |
| 452 | |
| 453 | #if 0 |
| 454 | #define specialState 16 |
| 455 | #define monsterGoalState 17 |
| 456 | #define helicopterGoalState 18 |
| 457 | #define blackState 19 |
| 458 | #define whiteState 20 |
| 459 | #define redState 21 |
| 460 | #define orangeState 23 |
| 461 | #define blueState 24 |
| 462 | #define greenState 25 |
| 463 | #define brownState 26 |
| 464 | #endif |
| 465 | |
| 466 | |
| 467 | #define STATE_CMD 0 |
| 468 | #define STATE_TILES 1 |
| 469 | #define STATE_OVERLAYS 2 |
| 470 | #define STATE_GRAPHS 3 |
| 471 | |
| 472 | |
| 473 | extern short *Map[WORLD_X]; /* Main Map 120 x 100 */ |
| 474 | extern Byte *PopDensity[HWLDX]; /* 2X2 Maps 60 x 50 */ |
| 475 | extern Byte *TrfDensity[HWLDX]; |
| 476 | extern Byte *PollutionMem[HWLDX]; |
| 477 | extern Byte *LandValueMem[HWLDX]; |
| 478 | extern Byte *CrimeMem[HWLDX]; |
| 479 | extern Byte *tem[HWLDX]; |
| 480 | extern Byte *tem2[HWLDX]; |
| 481 | extern Byte *TerrainMem[QWX]; /* 4X4 Maps 30 x 25 */ |
| 482 | extern Byte *Qtem[QWX]; |
| 483 | extern short RateOGMem[SmX][SmY]; |
| 484 | extern short FireStMap[SmX][SmY]; /* 8X8 Maps 15 x 13 */ |
| 485 | extern short PoliceMap[SmX][SmY]; |
| 486 | extern short PoliceMapEffect[SmX][SmY]; |
| 487 | extern short ComRate[SmX][SmY]; |
| 488 | extern short FireRate[SmX][SmY]; |
| 489 | extern short STem[SmX][SmY]; |
| 490 | extern short SpriteXOffset[OBJN]; |
| 491 | extern short SpriteYOffset[OBJN]; |
| 492 | extern short SMapX, SMapY; |
| 493 | extern short CChr, CChr9; |
| 494 | extern short RoadTotal, RailTotal, FirePop; |
| 495 | extern short ResPop, ComPop, IndPop, TotalPop, LastTotalPop; |
| 496 | extern short ResZPop, ComZPop, IndZPop, TotalZPop; |
| 497 | extern short HospPop, ChurchPop, StadiumPop; |
| 498 | extern short PolicePop, FireStPop; |
| 499 | extern short CoalPop, NuclearPop, PortPop, APortPop; |
| 500 | extern short NeedHosp, NeedChurch; |
| 501 | extern short CrimeAverage, PolluteAverage, LVAverage; |
| 502 | extern char *MicropolisVersion; |
| 503 | extern char *CityName; |
| 504 | extern char *CityFileName; |
| 505 | extern char *StartupName; |
| 506 | extern short StartingYear; |
| 507 | extern QUAD CityTime; |
| 508 | extern QUAD LastCityTime; |
| 509 | extern QUAD LastCityMonth; |
| 510 | extern QUAD LastCityYear; |
| 511 | extern QUAD LastFunds; |
| 512 | extern QUAD LastR, LastC, LastI; |
| 513 | extern short GameLevel; |
| 514 | extern short Cycle; |
| 515 | extern short ScenarioID; |
| 516 | extern short ShakeNow; |
| 517 | extern QUAD DonDither; |
| 518 | extern int DoOverlay; |
| 519 | |
| 520 | extern short *ResHis, ResHisMax; |
| 521 | extern short *ComHis, ComHisMax; |
| 522 | extern short *IndHis, IndHisMax; |
| 523 | extern short *MoneyHis, *CrimeHis, *PollutionHis, *MiscHis; |
| 524 | extern short *PowerMap; |
| 525 | |
| 526 | extern float roadPercent, policePercent, firePercent; |
| 527 | extern QUAD RoadSpend, PoliceSpend, FireSpend; |
| 528 | extern QUAD roadMaxValue, policeMaxValue, fireMaxValue; |
| 529 | extern QUAD TaxFund, RoadFund, PoliceFund, FireFund; |
| 530 | extern short RoadEffect, PoliceEffect, FireEffect; |
| 531 | extern short TaxFlag, CityTax; |
| 532 | extern QUAD TotalFunds; |
| 533 | |
| 534 | extern QUAD costOf[]; |
| 535 | |
| 536 | extern short flagBlink; |
| 537 | extern unsigned char tileSynch; |
| 538 | extern short aniTile[]; |
| 539 | extern unsigned char aniSynch[]; |
| 540 | extern int TilesAnimated; |
| 541 | extern int DoAnimation; |
| 542 | extern int DoMessages; |
| 543 | extern int DoNotices; |
| 544 | extern unsigned char ColorIntensities[]; |
| 545 | |
| 546 | extern short MesX, MesY; |
| 547 | extern short MesNum, MessagePort; |
| 548 | extern QUAD LastMesTime; |
| 549 | |
| 550 | extern short SimSpeed; |
| 551 | extern short SimMetaSpeed; |
| 552 | extern short NoDisasters; |
| 553 | extern short autoBulldoze; |
| 554 | extern short autoBudget; |
| 555 | extern short autoGo; |
| 556 | extern short UserSoundOn; |
| 557 | |
| 558 | extern short DisasterEvent; |
| 559 | extern short DisasterWait; |
| 560 | |
| 561 | extern short ResCap, ComCap, IndCap; |
| 562 | extern short RValve, CValve, IValve; |
| 563 | extern short PwrdZCnt; |
| 564 | extern short unPwrdZCnt; |
| 565 | |
| 566 | extern char *HomeDir, *ResourceDir, *HostName; |
| 567 | |
| 568 | extern short Graph10Max, Graph120Max; |
| 569 | extern short Res2HisMax, Com2HisMax, Ind2HisMax; |
| 570 | extern unsigned char *History10[HISTORIES], *History120[HISTORIES]; |
| 571 | extern short CityScore; |
| 572 | extern short deltaCityScore; |
| 573 | extern short ScoreType; |
| 574 | extern short ScoreWait; |
| 575 | extern short CityClass; |
| 576 | extern short PolMaxX, PolMaxY; |
| 577 | extern int PowerStackNum; |
| 578 | extern short TrafficAverage; |
| 579 | extern short PosStackN; |
| 580 | extern short SMapXStack[], SMapYStack[]; |
| 581 | extern short Zsource; |
| 582 | extern short HaveLastMessage; |
| 583 | extern short PdestX, PdestY; |
| 584 | extern short CdestX, CdestY; |
| 585 | extern int absDist; |
| 586 | extern short CopFltCnt; |
| 587 | extern short GodCnt; |
| 588 | extern short GdestX, GdestY; |
| 589 | extern short GorgX, GorgY; |
| 590 | extern short GodControl; |
| 591 | extern short CopControl; |
| 592 | extern short CdestX, CdestY; |
| 593 | extern short TrafMaxX, TrafMaxY; |
| 594 | extern short CrimeMaxX, CrimeMaxY; |
| 595 | extern short FloodX, FloodY; |
| 596 | extern short CrashX, CrashY; |
| 597 | extern short CCx, CCy; |
| 598 | extern QUAD CityPop, deltaCityPop; |
| 599 | extern char *cityClassStr[6]; |
| 600 | extern short CityYes, CityNo; |
| 601 | extern short ProblemTable[PROBNUM]; |
| 602 | extern short ProblemVotes[PROBNUM]; |
| 603 | extern short ProblemOrder[4]; |
| 604 | extern QUAD CityAssValue; |
| 605 | |
| 606 | extern short InitSimLoad; |
| 607 | extern short DoInitialEval; |
| 608 | extern int Startup; |
| 609 | extern int StartupGameLevel; |
| 610 | extern int PerformanceTiming; |
| 611 | extern double FlushTime; |
| 612 | |
| 613 | extern char *optarg; |
| 614 | extern int optind; |
| 615 | extern struct timeval start_time, now_time, beat_time, last_now_time; |
| 616 | extern Sim *sim; |
| 617 | extern int WireMode; |
| 618 | extern int MultiPlayerMode; |
| 619 | extern int SugarMode; |
| 620 | extern int sim_delay; |
| 621 | extern int sim_skips; |
| 622 | extern int sim_skip; |
| 623 | extern int sim_paused; |
| 624 | extern int sim_paused_speed; |
| 625 | extern int sim_tty; |
| 626 | #ifdef CAM |
| 627 | extern int sim_just_cam; |
| 628 | #endif |
| 629 | extern int heat_steps; |
| 630 | extern int heat_flow; |
| 631 | extern int heat_rule; |
| 632 | extern int UpdateDelayed; |
| 633 | extern int DynamicData[32]; |
| 634 | extern int Players; |
| 635 | extern int Votes; |
| 636 | extern int BobHeight; |
| 637 | extern int OverRide; |
| 638 | extern int Expensive; |
| 639 | extern int PendingTool; |
| 640 | extern int PendingX; |
| 641 | extern int PendingY; |
| 642 | extern int TreeLevel; |
| 643 | extern int LakeLevel; |
| 644 | extern int CurveLevel; |
| 645 | extern int CreateIsland; |
| 646 | extern short specialBase; |
| 647 | extern short PunishCnt; |
| 648 | extern short Dozing; |
| 649 | extern short toolSize[]; |
| 650 | extern short toolOffset[]; |
| 651 | extern QUAD toolColors[]; |
| 652 | extern char *Displays; |
| 653 | extern char *FirstDisplay; |
| 654 | extern char *dateStr[12]; |
| 655 | |
| 656 | extern short NewMap; |
| 657 | extern short NewMapFlags[NMAPS]; |
| 658 | extern short NewGraph; |
| 659 | extern short ValveFlag; |
| 660 | extern short MustUpdateFunds; |
| 661 | extern short MustUpdateOptions; |
| 662 | extern short CensusChanged; |
| 663 | extern short EvalChanged; |
| 664 | extern short MeltX, MeltY; |
| 665 | extern int NeedRest; |
| 666 | extern int ExitReturn; |
| 667 | |
| 668 | extern Tcl_Interp *tk_mainInterp; |
| 669 | extern Tk_Window MainWindow; |
| 670 | extern int FlushStyle; |
| 671 | extern int GotXError; |
| 672 | |
| 673 | extern short Rand(short range); |
| 674 | extern short RandInt(void); |
| 675 | |
| 676 | extern Sim *MakeNewSim(); |
| 677 | extern SimView *MakeNewView(); |
| 678 | extern SimSprite *GetSprite(); |
| 679 | extern SimSprite *MakeSprite(); |
| 680 | extern SimSprite *MakeNewSprite(); |
| 681 | |
| 682 | extern struct XDisplay *XDisplays; |
| 683 | |
| 684 | /* Functions referenced from other files */ |
| 685 | /* g_ani.c */ |
| 686 | void animateTiles(void); |
| 687 | /* g_bigmap.c */ |
| 688 | void WireDrawBeegMapRect(SimView *view, short x, short y, short w, short h); |
| 689 | void MemDrawBeegMapRect(SimView *view, int x, int y, int w, int h); |
| 690 | /* g_map.c */ |
| 691 | void setUpMapProcs(void); |
| 692 | void MemDrawMap(SimView *view); |
| 693 | /* g_setup.c */ |
| 694 | void GetViewTiles(SimView *view); |
| 695 | void GetPixmaps(XDisplay *xd); |
| 696 | /* g_smmaps.c */ |
| 697 | void drawAll(SimView *view); |
| 698 | void drawRes(SimView *view); |
| 699 | void drawCom(SimView *view); |
| 700 | void drawInd(SimView *view); |
| 701 | void drawLilTransMap(SimView *view); |
| 702 | void drawPower(SimView *view); |
| 703 | void drawDynamic(SimView *view); |
| 704 | /* rand.c */ |
| 705 | int sim_rand(void); |
| 706 | void sim_srand(u_int seed); |
| 707 | /* sim.c */ |
| 708 | void sim_exit(int val); |
| 709 | void sim_update_editors(void); |
| 710 | void sim_update(void); |
| 711 | void sim_init(void); |
| 712 | void sim_really_exit(int val); |
| 713 | void sim_loop(int doSim); |
| 714 | /* s_alloc.c */ |
| 715 | void initMapArrays(void); |
| 716 | /* s_disast.c */ |
| 717 | void DoDisasters(void); |
| 718 | void DoFlood(void); |
| 719 | void MakeFlood(void); |
| 720 | void MakeEarthquake(void); |
| 721 | void MakeMeltdown(void); |
| 722 | void MakeFire(void); |
| 723 | void FireBomb(void); |
| 724 | /* s_eval.c */ |
| 725 | void EvalInit(void); |
| 726 | void CityEvaluation(void); |
| 727 | int GetFire(void); |
| 728 | int GetUnemployment(void); |
| 729 | int AverageTrf(void); |
| 730 | /* s_fileio.c */ |
| 731 | int LoadCity(char *filename); |
| 732 | void SaveCity(void); |
| 733 | void SaveCityAs(char *filename); |
| 734 | void LoadScenario(short s); |
| 735 | /* s_gen.c */ |
| 736 | void ClearMap(void); |
| 737 | void SmoothTrees(void); |
| 738 | void SmoothRiver(void); |
| 739 | void GenerateSomeCity(int r); |
| 740 | void ClearUnnatural(void); |
| 741 | void SmoothWater(void); |
| 742 | void GenerateNewCity(void); |
| 743 | /* s_init.c */ |
| 744 | void ResetMapState(void); |
| 745 | void ResetEditorState(void); |
| 746 | void InitWillStuff(void); |
| 747 | /* s_msg.c */ |
| 748 | void SendMessages(void); |
| 749 | void SendMesAt(short Mnum, short x, short y); |
| 750 | void ClearMes(void); |
| 751 | int SendMes(int Mnum); |
| 752 | void SendMesAt(short Mnum, short x, short y); |
| 753 | void doMessage(void); |
| 754 | /* s_power.c */ |
| 755 | void PushPowerStack(void); |
| 756 | void DoPowerScan(void); |
| 757 | int MoveMapSim (short MDir); |
| 758 | /* s_scan.c */ |
| 759 | void FireAnalysis(void); |
| 760 | void PopDenScan(void); |
| 761 | void CrimeScan(void); |
| 762 | void PTLScan(void); |
| 763 | /* s_sim.c */ |
| 764 | void SimFrame(void); |
| 765 | void DoSimInit(void); |
| 766 | void SeedRand(int seed); |
| 767 | void DoMeltdown(int SX, int SY); |
| 768 | void FireZone(int Xloc, int Yloc, int ch); |
| 769 | int Rand16(void); |
| 770 | int Rand16Signed(void); |
| 771 | void RandomlySeedRand(); |
| 772 | void RepairZone(short ZCent, short zsize); |
| 773 | void DoSPZone(short PwrOn); |
| 774 | void UpdateFundEffects(void); |
| 775 | /* s_traf.c */ |
| 776 | int FindPRoad(void); |
| 777 | int MakeTraf(int Zt); |
| 778 | /* s_zone.c */ |
| 779 | void DoZone(void); |
| 780 | int SetZPower(void); |
| 781 | int RZPop(int Ch9); |
| 782 | int CZPop(int Ch9); |
| 783 | int IZPop(int Ch9); |
| 784 | int DoFreePop (void); |
| 785 | /* w_budget.c */ |
| 786 | void UpdateBudgetWindow(void); |
| 787 | void InitFundingLevel(void); |
| 788 | void drawCurrPercents(void); |
| 789 | void DoBudget(void); |
| 790 | void drawBudgetWindow(void); |
| 791 | void DoBudgetFromMenu(void); |
| 792 | void UpdateBudget(void); |
| 793 | /* w_con.c */ |
| 794 | int ConnecTile(short x, short y, short *TileAdrPtr, short Command); |
| 795 | /* w_date.c */ |
| 796 | void date_command_init(void); |
| 797 | /* w_editor.c */ |
| 798 | void DoUpdateEditor(SimView *view); |
| 799 | void editor_command_init(void); |
| 800 | void DoNewEditor(SimView *view); |
| 801 | /* w_eval.c */ |
| 802 | void scoreDoer(void); |
| 803 | void ChangeEval(void); |
| 804 | /* w_graph.c */ |
| 805 | void graphDoer(void); |
| 806 | void initGraphs(void); |
| 807 | void ChangeCensus(void); |
| 808 | void doAllGraphs(void); |
| 809 | void DestroyGraph(SimGraph *graph); |
| 810 | void InitGraphMax(void); |
| 811 | void graph_command_init(void); |
| 812 | int ConfigureSimGraph(Tcl_Interp *interp, SimGraph *graph, int argc, char **argv, int flags); |
| 813 | /* w_keys.c */ |
| 814 | void ResetLastKeys(void); |
| 815 | void doKeyUp(SimView *view, short charCode); |
| 816 | void doKeyDown(SimView *view, short charCode); |
| 817 | /* w_map.c */ |
| 818 | int DoUpdateMap(SimView *view); |
| 819 | void map_command_init(void); |
| 820 | void DoNewMap(SimView *view); |
| 821 | /* w_resrc.c */ |
| 822 | void GetIndString(char *str, int id, short num); |
| 823 | /* w_sim.c */ |
| 824 | void sim_command_init(void); |
| 825 | /* w_sound.c */ |
| 826 | void InitializeSound(void); |
| 827 | void MakeSound(char *channel, char *id); |
| 828 | void MakeSoundOn(SimView *view, char *channel, char *id); |
| 829 | void SoundOff(void); |
| 830 | void StartBulldozer(void); |
| 831 | void StopBulldozer(void); |
| 832 | void sound_command_init(void); |
| 833 | /* w_sprite.c */ |
| 834 | void MoveObjects(void); |
| 835 | void MakeExplosion(int x, int y); |
| 836 | void MakeExplosionAt(int x, int y); |
| 837 | void GenerateShip(void); |
| 838 | void GeneratePlane(int x, int y); |
| 839 | void GenerateCopter(int x, int y); |
| 840 | void GenerateTrain(int x, int y); |
| 841 | void MakeMonster(void); |
| 842 | void MakeTornado(void); |
| 843 | void MakeAirCrash(void); |
| 844 | void DestroyAllSprites(void); |
| 845 | void DrawObjects(SimView *view); |
| 846 | void sprite_command_init(void); |
| 847 | /* w_stubs.c */ |
| 848 | void SetFunds(int dollars); |
| 849 | void Spend(int dollars); |
| 850 | void DropFireBombs(void); |
| 851 | QUAD TickCount(void); |
| 852 | void GameStarted(void); |
| 853 | void InitGame(void); |
| 854 | void ReallyQuit(void); |
| 855 | /* w_tk.c */ |
| 856 | void tk_main(void); |
| 857 | void StopEarthquake(void); |
| 858 | void CancelRedrawView(SimView *view); |
| 859 | void RedrawMaps(void); |
| 860 | void EventuallyRedrawView(SimView *view); |
| 861 | void StopToolkit(void); |
| 862 | void InvalidateEditors(void); |
| 863 | int Eval(char *buf); |
| 864 | void DoEarthQuake(void); |
| 865 | void Kick(void); |
| 866 | void InvalidateMaps(void); |
| 867 | int ConfigureTileView(Tcl_Interp *interp, SimView *view, int argc, char **argv, int flags); |
| 868 | void DidStopPan(SimView *view); |
| 869 | void RedrawEditors(void); |
| 870 | void StartMicropolisTimer(void); |
| 871 | void StopMicropolisTimer(void); |
| 872 | /* w_tool.c */ |
| 873 | void ToolDrag(SimView *view, int px, int py); |
| 874 | void ToolUp(SimView *view, int x, int y); |
| 875 | void ChalkTo(SimView *view, int x, int y); |
| 876 | void ChalkStart(SimView *view, int x, int y, int color); |
| 877 | short tally(short tileValue); |
| 878 | int bulldozer_tool(SimView *view, short x, short y); |
| 879 | void setWandState(SimView *view, short state); |
| 880 | void ToolDown(SimView *view, int x, int y); |
| 881 | void DoTool(SimView *view, short tool, short x, short y); |
| 882 | /* w_update.c */ |
| 883 | void DoUpdateHeads(void); |
| 884 | void UpdateFunds(void); |
| 885 | void UpdateEvaluation(void); |
| 886 | void UpdateGraphs(void); |
| 887 | void UpdateEditors(void); |
| 888 | void UpdateMaps(void); |
| 889 | void UpdateHeads(void); |
| 890 | void doTimeStuff(void); |
| 891 | /* w_util.c */ |
| 892 | void DoNewGame(void); |
| 893 | void setCityName(char *name); |
| 894 | void setAnyCityName(char *name); |
| 895 | void DoSetMapState(SimView *view, short state); |
| 896 | void makeDollarDecimalStr(char *numStr, char *dollarStr); |
| 897 | int CurrentYear(void); |
| 898 | void SetYear(int year); |
| 899 | void Pause(void); |
| 900 | void Resume(void); |
| 901 | void setSpeed(short speed); |
| 902 | void setSkips(int skips); |
| 903 | void SetGameLevel(short level); |
| 904 | void SetGameLevelFunds(short level); |
| 905 | /* w_x.c */ |
| 906 | void DoTimeoutListen(void); |
| 907 | void DoStopMicropolis(void); |
| 908 | void UpdateFlush(void); |
| 909 | void DoPanTo(struct SimView *view, int x, int y); |
| 910 | void DoResizeView(SimView *view, int w, int h); |
| 911 | void DestroyView(SimView *view); |
| 912 | void ViewToPixelCoords(SimView *view, int x, int y, int *outx, int *outy); |
| 913 | void FreeInk(Ink *ink); |
| 914 | void AddInk(Ink *ink, int x, int y); |
| 915 | void StartInk(Ink *ink, int x, int y); |
| 916 | void DoPanBy(struct SimView *view, int dx, int dy); |
| 917 | void ViewToTileCoords(SimView *view, int x, int y, int *outx, int *outy); |
| 918 | void EraseOverlay(void); |
| 919 | SimView *InitNewView(SimView *view, char *title, int class, int w, int h); |
| 920 | void IncRefDisplay(XDisplay *xd); |
| 921 | void DecRefDisplay(XDisplay *xd); |