Micropolis
micropolis.h
Go to the documentation of this file.
1 /* micropolis.h
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 
79 #ifndef H_MICROPOLIS
80 #define H_MICROPOLIS
81 
82 
84 // Includes
85 
86 
87 #include <stdio.h>
88 #include <stdlib.h>
89 #include <assert.h>
90 #include <string.h>
91 #include <ctype.h>
92 #include <errno.h>
93 #include <math.h>
94 #include <cstdarg>
95 #include <sys/stat.h>
96 #include <unistd.h>
97 #include <sys/time.h>
98 #include <sys/file.h>
99 #include <sys/types.h>
100 
101 #include <string>
102 #include <vector>
103 #include <map>
104 
105 #include <emscripten.h>
106 #include <emscripten/bind.h>
107 
108 #include "data_types.h"
109 #include "map_type.h"
110 #include "position.h"
111 #include "text.h"
112 #include "frontendmessage.h"
113 #include "tool.h"
114 #include "callback.h"
115 
116 
118 // Definitions
119 
120 
126 #define IS_INTEL 1
127 
128 
130 // Constants
131 
132 
137 static const int BITS_PER_TILE = 16;
138 
143 static const int BYTES_PER_TILE = 2;
144 
151 static const int WORLD_W_2 = WORLD_W / 2;
152 
157 static const int WORLD_H_2 = WORLD_H / 2;
158 
165 static const int WORLD_W_4 = WORLD_W / 4;
166 
171 static const int WORLD_H_4 = WORLD_H / 4;
172 
179 static const int WORLD_W_8 = WORLD_W / 8;
180 
185 static const int WORLD_H_8 = (WORLD_H + 7) / 8;
186 
190 static const int EDITOR_TILE_SIZE = 16;
191 
195 static const int PASSES_PER_CITYTIME = 16;
196 
200 static const int CITYTIMES_PER_MONTH = 4;
201 
205 static const int CITYTIMES_PER_YEAR = CITYTIMES_PER_MONTH * 12;
206 
210 static const int HISTORY_LENGTH = 480;
211 
215 static const int MISC_HISTORY_LENGTH = 240;
216 
221 static const int HISTORY_COUNT = 120;
222 
226 static const int POWER_STACK_SIZE = (WORLD_W * WORLD_H) / 4;
227 
228 
233 static const int NOWHERE = -1;
234 
235 
239 static const int ISLAND_RADIUS = 18;
240 
241 
243 // Traffic
244 
248 static const int MAX_TRAFFIC_DISTANCE = 30;
249 
253 static const int MAX_ROAD_EFFECT = 32;
254 
258 static const int MAX_POLICE_STATION_EFFECT = 1000;
259 
263 static const int MAX_FIRE_STATION_EFFECT = 1000;
264 
265 
267 // Valves
268 
269 
270 static const int RES_VALVE_RANGE = 2000;
271 static const int COM_VALVE_RANGE = 1500;
272 static const int IND_VALVE_RANGE = 1500;
273 
274 
276 // Enumerated types.
277 
278 
289 
291 };
292 
299 
301 };
302 
306 enum MapType {
322 
324 };
325 
326 /* Object & Sound Numbers */
327 
329  SPRITE_NOTUSED = 0,
330 
339 
341 };
342 
343 
345 // Tiles
346 
356 };
357 
358 
368 };
369 
370 
381 enum Tiles {
382  DIRT = 0,
383  // tile 1 ?
384 
385  /* Water */
386  RIVER = 2,
387  REDGE = 3,
388  CHANNEL = 4,
389  FIRSTRIVEDGE = 5,
390  // tile 6 -- 19 ?
391  LASTRIVEDGE = 20,
392  WATER_LOW = RIVER,
393  WATER_HIGH = LASTRIVEDGE,
394 
395  TREEBASE = 21,
396  WOODS_LOW = TREEBASE,
397  LASTTREE = 36,
398  WOODS = 37,
399  UNUSED_TRASH1 = 38,
400  UNUSED_TRASH2 = 39,
401  WOODS_HIGH = UNUSED_TRASH2, // Why is an 'UNUSED' tile used?
402  WOODS2 = 40,
403  WOODS3 = 41,
404  WOODS4 = 42,
405  WOODS5 = 43,
406 
407  /* Rubble (4 tiles) */
408  RUBBLE = 44,
409  LASTRUBBLE = 47,
410 
411  FLOOD = 48,
412  // tile 49, 50 ?
413  LASTFLOOD = 51,
414 
415  RADTILE = 52,
416 
417  UNUSED_TRASH3 = 53,
418  UNUSED_TRASH4 = 54,
419  UNUSED_TRASH5 = 55,
420 
421  /* Fire animation (8 tiles) */
422  FIRE = 56,
423  FIREBASE = FIRE,
424  LASTFIRE = 63,
425 
426  HBRIDGE = 64,
427  ROADBASE = HBRIDGE,
428  VBRIDGE = 65,
429  ROADS = 66,
430  ROADS2 = 67,
431  ROADS3 = 68,
432  ROADS4 = 69,
433  ROADS5 = 70,
434  ROADS6 = 71,
435  ROADS7 = 72,
436  ROADS8 = 73,
437  ROADS9 = 74,
438  ROADS10 = 75,
439  INTERSECTION = 76,
440  HROADPOWER = 77,
441  VROADPOWER = 78,
442  BRWH = 79,
443  LTRFBASE = 80,
444  // tile 81 -- 94 ?
445  BRWV = 95,
446  // tile 96 -- 110 ?
447  BRWXXX1 = 111,
448  // tile 96 -- 110 ?
449  BRWXXX2 = 127,
450  // tile 96 -- 110 ?
451  BRWXXX3 = 143,
452  HTRFBASE = 144,
453  // tile 145 -- 158 ?
454  BRWXXX4 = 159,
455  // tile 160 -- 174 ?
456  BRWXXX5 = 175,
457  // tile 176 -- 190 ?
458  BRWXXX6 = 191,
459  // tile 192 -- 205 ?
460  LASTROAD = 206,
461  BRWXXX7 = 207,
462 
463  /* Power lines */
464  HPOWER = 208,
465  VPOWER = 209,
466  LHPOWER = 210,
467  LVPOWER = 211,
468  LVPOWER2 = 212,
469  LVPOWER3 = 213,
470  LVPOWER4 = 214,
471  LVPOWER5 = 215,
472  LVPOWER6 = 216,
473  LVPOWER7 = 217,
474  LVPOWER8 = 218,
475  LVPOWER9 = 219,
476  LVPOWER10 = 220,
477  RAILHPOWERV = 221,
478  RAILVPOWERH = 222,
479  POWERBASE = HPOWER,
480  LASTPOWER = RAILVPOWERH,
481 
482  UNUSED_TRASH6 = 223,
483 
484  /* Rail */
485  HRAIL = 224,
486  VRAIL = 225,
487  LHRAIL = 226,
488  LVRAIL = 227,
489  LVRAIL2 = 228,
490  LVRAIL3 = 229,
491  LVRAIL4 = 230,
492  LVRAIL5 = 231,
493  LVRAIL6 = 232,
494  LVRAIL7 = 233,
495  LVRAIL8 = 234,
496  LVRAIL9 = 235,
497  LVRAIL10 = 236,
498  HRAILROAD = 237,
499  VRAILROAD = 238,
500  RAILBASE = HRAIL,
501  LASTRAIL = 238,
502 
503  ROADVPOWERH = 239, /* bogus? */
504 
505  // Residential zone tiles
506 
507  RESBASE = 240, // Empty residential, tiles 240--248
508  FREEZ = 244, // center-tile of 3x3 empty residential
509 
510  HOUSE = 249, // Single tile houses until 260
511  LHTHR = HOUSE,
512  HHTHR = 260,
513 
514  RZB = 265, // center tile first 3x3 tile residential
515 
516  HOSPITALBASE = 405, // Center of hospital (tiles 405--413)
517  HOSPITAL = 409, // Center of hospital (tiles 405--413)
518 
519  CHURCHBASE = 414, // Center of church (tiles 414--422)
520  CHURCH0BASE = 414, // numbered alias
521  CHURCH = 418, // Center of church (tiles 414--422)
522  CHURCH0 = 418, // numbered alias
523 
524  // Commercial zone tiles
525 
526  COMBASE = 423, // Empty commercial, tiles 423--431
527  // tile 424 -- 426 ?
528  COMCLR = 427,
529  // tile 428 -- 435 ?
530  CZB = 436,
531  // tile 437 -- 608 ?
532  COMLAST = 609,
533  // tile 610, 611 ?
534 
535  // Industrial zone tiles.
536  INDBASE = 612,
537  INDCLR = 616,
538  LASTIND = 620,
539 
540  // Industrial zone population 0, value 0: 621 -- 629
541  IND1 = 621,
542  IZB = 625,
543 
544  // Industrial zone population 1, value 0: 630 -- 638
545 
546  // Industrial zone population 2, value 0: 639 -- 647
547  IND2 = 641,
548  IND3 = 644,
549 
550  // Industrial zone population 3, value 0: 648 -- 656
551  IND4 = 649,
552  IND5 = 650,
553 
554  // Industrial zone population 0, value 1: 657 -- 665
555 
556  // Industrial zone population 1, value 1: 666 -- 674
557 
558  // Industrial zone population 2, value 1: 675 -- 683
559  IND6 = 676,
560  IND7 = 677,
561 
562  // Industrial zone population 3, value 1: 684 -- 692
563  IND8 = 686,
564  IND9 = 689,
565 
566  // Seaport
567  PORTBASE = 693,
568  PORT = 698,
569  LASTPORT = 708,
570 
571  AIRPORTBASE = 709,
572  // tile 710 ?
573  RADAR = 711,
574  // tile 712 -- 715 ?
575  AIRPORT = 716,
576  // tile 717 -- 744 ?
577 
578  // Coal power plant (4x4).
579  COALBASE = 745,
580  POWERPLANT = 750,
582 
583  // Fire station (3x3).
584  FIRESTBASE = 761,
585  FIRESTATION = 765,
586  // 769 last tile fire station.
587 
588  POLICESTBASE = 770,
589  // tile 771 -- 773 ?
590  POLICESTATION = 774,
591  // tile 775 -- 778 ?
592 
593  // Stadium (4x4).
594  STADIUMBASE = 779,
595  STADIUM = 784,
596  // Last tile stadium 794.
597 
598  // tile 785 -- 799 ?
599  FULLSTADIUM = 800,
600  // tile 801 -- 810 ?
601 
602  // Nuclear power plant (4x4).
603  NUCLEARBASE = 811,
604  NUCLEAR = 816,
605  LASTZONE = 826,
606 
607  LIGHTNINGBOLT = 827,
608  HBRDG0 = 828,
609  HBRDG1 = 829,
610  HBRDG2 = 830,
611  HBRDG3 = 831,
612  HBRDG_END = 832,
613  RADAR0 = 832,
614  RADAR1 = 833,
615  RADAR2 = 834,
616  RADAR3 = 835,
617  RADAR4 = 836,
618  RADAR5 = 837,
619  RADAR6 = 838,
620  RADAR7 = 839,
621  FOUNTAIN = 840,
622  // tile 841 -- 843: fountain animation.
623  INDBASE2 = 844,
624  TELEBASE = 844,
625  // tile 845 -- 850 ?
626  TELELAST = 851,
627  SMOKEBASE = 852,
628  // tile 853 -- 859 ?
629  TINYEXP = 860,
630  // tile 861 -- 863 ?
631  SOMETINYEXP = 864,
632  // tile 865 -- 866 ?
633  LASTTINYEXP = 867,
634  // tile 868 -- 882 ?
635  TINYEXPLAST = 883,
636  // tile 884 -- 915 ?
637 
638  COALSMOKE1 = 916,
640 
641  COALSMOKE2 = 920,
643 
644  COALSMOKE3 = 924,
646 
647  COALSMOKE4 = 928,
649 
650  FOOTBALLGAME1 = 932,
651  // tile 933 -- 939 ?
652  FOOTBALLGAME2 = 940,
653  // tile 941 -- 947 ?
654  VBRDG0 = 948,
655  VBRDG1 = 949,
656  VBRDG2 = 950,
657  VBRDG3 = 951,
658 
659  NUKESWIRL1 = 952,
660  NUKESWIRL2 = 953,
661  NUKESWIRL3 = 954,
662  NUKESWIRL4 = 955,
663 
664  // Tiles 956-959 unused (originally)
665 // TILE_COUNT = 960,
666 
667  // Extended zones: 956-1019
668 
669  CHURCH1BASE = 956,
670  CHURCH1 = 960,
671  CHURCH2BASE = 965,
672  CHURCH2 = 969,
673  CHURCH3BASE = 974,
674  CHURCH3 = 978,
675  CHURCH4BASE = 983,
676  CHURCH4 = 987,
677  CHURCH5BASE = 992,
678  CHURCH5 = 996,
679  CHURCH6BASE = 1001,
680  CHURCH6 = 1005,
681  CHURCH7BASE = 1010,
682  CHURCH7 = 1014,
683  CHURCH7LAST = 1018,
684 
685  // Tiles 1020-1023 unused
686 
687  TILE_COUNT = 1024,
688 
690 };
691 
692 
694 // Scenarios
695 
697 enum Scenario {
699 
708 
710 };
711 
712 
714 // Zones
715 
717 enum ZoneType {
721 
723 };
724 
725 
727 // City problems
728 
741 
743 
745 
746  PROBNUM = 10,
747 };
748 
750 enum CityClass {
757 
759 };
760 
762 enum GameLevel {
766 
768 
771 };
772 
774 // Inline functions
775 
782 template <typename T>
783 static inline T min(const T a, const T b)
784 {
785  return (a < b) ? a : b;
786 }
787 
794 template <typename T>
795 static inline T max(const T a, const T b)
796 {
797  return (a > b) ? a : b;
798 }
799 
807 template <typename T>
808 static inline T clamp(const T val, const T lower, const T upper)
809 {
810  if (val < lower) {
811  return lower;
812  }
813  if (val > upper) {
814  return upper;
815  }
816  return val;
817 }
818 
824 template <typename T>
825 static inline T absoluteValue(const T val)
826 {
827  if (val < 0) {
828  return -val;
829  }
830  return val;
831 }
832 
834 // Macros
835 
836 
842 #define LENGTH_OF(array) (sizeof(array) / sizeof((array)[0]))
843 
847 #define NOT_REACHED() not_reached(__LINE__, __FILE__)
848 
849 
857 static inline void not_reached(int line, const char *fname)
858 {
859  fprintf(stderr, "Code unexpectedly executed at line %d, at file %s\n", line, fname);
860  exit(1);
861 }
862 
863 
865 // Forward class definitions
866 
867 
868 class Micropolis;
869 class Callback;
870 class ConsoleCallback;
871 class ToolEffects;
872 class BuildingProperties;
873 
874 
876 // Classes
877 
878 
883 class SimSprite {
884 
885 public:
886 
888  std::string name;
889  int type;
890  int frame;
891  int x;
892  int y;
893  int width;
894  int height;
895  int xOffset;
896  int yOffset;
897  int xHot;
898  int yHot;
899  int origX;
900  int origY;
901  int destX;
902  int destY;
903  int count;
904  int soundCount;
905  int dir;
906  int newDir;
907  int step;
908  int flag;
909  int control;
910  int turn;
911  int accel;
912  int speed;
913 };
914 
915 
923 class Micropolis {
924 
925 
926 public:
927 
928 
930 
931 
932  Micropolis();
933 
934  ~Micropolis();
935 
936  void setCallback(Callback *callback, emscripten::val callbackVal);
937 
938 private:
939 
940  void destroy();
941 
942  void init();
943 
944 
946  // allocate.cpp
947 
948 public:
949 
950 
955 
956 
963  short roadTotal;
964 
970  short railTotal;
971 
975  short firePop;
976 
982  short resPop;
983 
989  short comPop;
990 
996  short indPop;
997 
1004  short totalPop;
1005 
1012 
1013  short resZonePop;
1014  short comZonePop;
1015  short indZonePop;
1016 
1021 
1022  short hospitalPop;
1023  short churchPop;
1024  short faith;
1025  short stadiumPop;
1026 
1031 
1036 
1041 
1046 
1050  short seaportPop;
1051 
1055  short airportPop;
1056 
1064 
1073 
1081 
1084 
1092  Quad cityTime;
1093 
1099 
1104  Quad cityYear;
1105 
1110 
1112 
1113  /* Maps */
1114 
1120  unsigned short *map[WORLD_W];
1121 
1126 
1131 
1136 
1141 
1146 
1151 
1158 
1161 
1166 
1171 
1176 
1182  Quad roadFund;
1183 
1190 
1196  Quad fireFund;
1197 
1202 
1207 
1212 
1219  Quad taxFund;
1220 
1224  short cityTax;
1225 
1237  bool taxFlag;
1238 
1240 
1243 
1249 
1256 
1263 
1270 
1277 
1282 
1291 
1302 
1307 
1318 
1323 
1331 
1333 
1334 
1337 
1341  short *resHist;
1342 
1346  short *comHist;
1347 
1351  short *indHist;
1352 
1356  short *moneyHist;
1357 
1362 
1366  short *crimeHist;
1367 
1371  short *miscHist;
1372 
1374 
1375 
1376 private:
1377 
1384 
1390  short needChurch;
1391 
1392 
1396  unsigned short *mapBase;
1397 
1398 
1399  void initMapArrays();
1400 
1401  void destroyMapArrays();
1402 
1403 
1405  // animate.cpp
1406 
1407 public:
1408 
1409 
1410  void animateTiles();
1411 
1412  static int getNextAnimatedTile(int index);
1413 
1414 
1416  // budget.cpp
1417 
1418 public:
1419 
1420 
1428 
1436 
1444 
1449 
1454 
1459 
1464 
1465 
1466  void initFundingLevel();
1467 
1468  void doBudget();
1469 
1470  void doBudgetFromMenu();
1471 
1472  void doBudgetNow(bool fromMenu);
1473 
1474  void updateBudget();
1475 
1476  void showBudgetWindowAndStartWaiting();
1477 
1478  void setCityTax(short tax);
1479 
1480 
1482  // connect.cpp
1483 
1484 private:
1485 
1486 
1487  ToolResult connectTile(short x, short y,
1488  ConnectTileCommand cmd, ToolEffects *effects);
1489 
1490  ToolResult layDoze(int x, int y, ToolEffects *effects);
1491 
1492  ToolResult layRoad(int x, int y, ToolEffects *effects);
1493 
1494  ToolResult layRail(int x, int y, ToolEffects *effects);
1495 
1496  ToolResult layWire(int x, int y, ToolEffects *effects);
1497 
1498  void fixZone(int x, int y, ToolEffects *effects);
1499 
1500  void fixSingle(int x, int y, ToolEffects *effects);
1501 
1502 
1504  // disasters.cpp
1505 
1506 public:
1507 
1508 
1512  short floodCount;
1513 
1514 
1515  void makeMeltdown();
1516 
1517  void makeFireBombs();
1518 
1519  void makeEarthquake();
1520 
1521  void makeFire();
1522 
1523  void makeFlood();
1524 
1525  void setFire();
1526 
1527  void fireBomb();
1528 
1529  private:
1530 
1531  void doDisasters();
1532 
1533  void scenarioDisaster();
1534 
1535  bool vulnerable(int tem);
1536 
1537  void doFlood(const Position &pos);
1538 
1539 
1541  // evaluate.cpp
1542 
1543 public:
1544 
1545 
1551  short cityYes;
1552 
1559  short problemVotes[PROBNUM];
1560 
1568 
1574  Quad cityPop;
1575 
1582 
1592 
1594 
1604  short cityScore;
1605 
1612 
1619 
1620 
1621  void cityEvaluation();
1622 
1623  void evalInit();
1624 
1625  void doScoreCard();
1626 
1627  void changeEval();
1628 
1629  void scoreDoer();
1630 
1631  int countProblems();
1632 
1633  int getProblemNumber(int i);
1634 
1635  int getProblemVotes(int i);
1636 
1637 
1638 private:
1639 
1640  void getAssessedValue();
1641 
1642  void doPopNum();
1643 
1644  Quad getPopulation();
1646 
1647  void doProblems(short problemTable[PROBNUM]);
1648 
1649  void voteProblems(const short problemTable[PROBNUM]);
1650 
1651  short getTrafficAverage();
1652 
1653  short getUnemployment();
1654 
1655  short getFireSeverity();
1656 
1657  void getScore(const short problemTable[PROBNUM]);
1658 
1659  void doVotes();
1660 
1662  // fileio.cpp
1663 
1664 public:
1665 
1666 
1667  bool loadFileData(const std::string &filename);
1668 
1669  bool loadFile(const std::string &filename);
1670 
1671  bool saveFile(const std::string &filename);
1672 
1673  void loadScenario(Scenario s);
1674 
1675  void didLoadScenario(int s, const std::string name, const std::string fname);
1676 
1677  bool loadCity(const std::string &filename);
1678 
1679  void didLoadCity(const std::string &filename);
1680 
1681  void didntLoadCity(const std::string &msg);
1682 
1683  void saveCity();
1684 
1685  void doSaveCityAs(const std::string &filename);
1686 
1687  void didSaveCity(const std::string &filename);
1688 
1689  void didntSaveCity(const std::string &msg);
1690 
1691  void saveCityAs(const std::string &filename);
1692 
1693 
1695  // generate.cpp
1696 
1697 public:
1698 
1712 
1718 
1724 
1730 
1736 
1737 
1742 
1743 
1744  void generateSomeRandomCity();
1745 
1746  void clearMap();
1747 
1748  void clearUnnatural();
1749 
1750  void makeIsland();
1751 
1752  void treeSplash(short xloc, short yloc);
1753 
1754  void makeSingleLake(const Position &pos);
1755 
1756  void plopBRiver(const Position &pos);
1757  void plopSRiver(const Position &pos);
1758 
1759  void generateSomeCity(int seed);
1760 
1761  void generateMap(int seed);
1762 
1763 private:
1764 
1765  void makeNakedIsland();
1766 
1767  void doTrees();
1768 
1769  bool isTree(MapValue cell);
1770 
1771  void smoothTrees();
1772 
1773  void smoothTreesAt(int x, int y, bool preserve);
1774  void smoothTreesAt(int x, int y, bool preserve, ToolEffects *effects);
1775 
1776  void makeLakes();
1777 
1778  void doRivers(const Position &terrainPos);
1779 
1780  Direction2 doBRiver(const Position &riverPos,
1781  Direction2 riverDir, Direction2 terrainDir);
1782  Direction2 doSRiver(const Position &riverPos,
1783  Direction2 riverDir, Direction2 terrainDir);
1784 
1785  void smoothRiver();
1786 
1787  void smoothWater();
1788 
1789  void putOnMap(MapValue mChar, short xLoc, short yLoc);
1790 
1792 
1794  // graph.cpp
1795 
1796 public:
1797 
1798 
1803 
1807  short graph10Max;
1808 
1813 
1814 
1815  void drawMonth(short *hist, unsigned char *s, float scale);
1816 
1817  void changeCensus();
1818 
1819  void graphDoer();
1820 
1821  void initGraphs();
1822 
1823  void initGraphMax();
1824 
1825 #ifdef SWIG
1826 // This tells SWIG that minValResult, maxValResult are output parameters,
1827 // which will be returned in a tuple of length two.
1828 %apply short *OUTPUT { short *minValResult };
1829 %apply short *OUTPUT { short *maxValResult };
1830 #endif
1831 
1832  void getHistoryRange(int historyType, int historyScale,
1833  short *minValResult, short *maxValResult);
1834 
1835  short getHistory(int historyType, int historyScale,
1836  int historyIndex);
1837 
1838  void setHistory(int historyType, int historyScale,
1839  int historyIndex, short historyValue);
1840 
1841 
1843  // initialize.cpp
1844 
1845 private:
1846 
1847 
1848  void initWillStuff();
1849 
1850  void resetMapState();
1851 
1852  void resetEditorState();
1853 
1854 
1856  // main.cpp
1857 
1858 public:
1859 
1860 
1861  int simLoops;
1862 
1867 
1871  int simPass;
1872 
1878 
1879  int simPausedSpeed;
1880 
1882 
1888 
1889  bool doMessages;
1890 
1891  bool doNotices;
1892 
1893 
1894  std::string getMicropolisVersion();
1895 
1896  void simUpdate();
1897 
1898  void simTick();
1899 
1900  void simulateRobots();
1901 
1902 public:
1903 
1904  std::string cityFileName;
1905 
1909  std::string cityName;
1910 
1915 
1920 
1925 
1930 
1931 private:
1932 
1933  short *cellSrc;
1934 
1935  short *cellDst;
1936 
1937 
1938  void simInit();
1939 
1940  void simHeat();
1941 
1942  void simLoop(bool doSim);
1943 
1944 
1946  // message.cpp
1947 
1948 public:
1949 
1950 
1953 
1960  bool autoGoto;
1961 
1962 
1963  void sendMessages();
1964 
1965  void checkGrowth();
1966 
1967  void doScenarioScore(Scenario type);
1968 
1969  void sendMessage(
1970  short Mnum,
1971  short x=NOWHERE, short y=NOWHERE,
1972  bool picture=false, bool important=false);
1973 
1974  void doMakeSound(int mesgNum, int x, int y);
1975 
1976  void doAutoGoto(short x, short y, const std::string &message);
1977 
1978  void doLoseGame();
1979  void doWinGame();
1980 
1981 
1983  // power.cpp
1984 
1985 private:
1986 
1987 
1992 
1994 
1997 
1998 
1999  void doPowerScan();
2000 
2001  bool testForConductive(const Position &pos, Direction2 testDir);
2002 
2003  void pushPowerStack(const Position &pos);
2004 
2006 
2008 
2009 
2011  // random.cpp
2012 
2013 public:
2014 
2015 
2016  UQuad nextRandom;
2017 
2018  int simRandom();
2019 
2020  short getRandom(short range);
2021 
2022  int getRandom16();
2023  int getRandom16Signed();
2024 
2025  short getERandom(short limit);
2026 
2027  void randomlySeedRandom();
2028 
2029  void seedRandom(int seed);
2030 
2031 
2033  // scan.cpp
2034 
2035 private:
2036 
2037 
2039  short newMap;
2040 
2043 
2044  short cityCenterX;
2045  short cityCenterY;
2046 
2049 
2050  short crimeMaxX;
2051  short crimeMaxY;
2052 
2057 
2058 
2059  void fireAnalysis();
2060 
2061  void populationDensityScan();
2062 
2063  int getPopulationDensity(const Position &pos, MapTile tile);
2064 
2065  void pollutionTerrainLandValueScan();
2066 
2067  int getPollutionValue(int loc);
2068 
2069  int getCityCenterDistance(int x, int y);
2070 
2071  void crimeScan();
2072 
2073  void smoothTerrain();
2074 
2075  void doSmooth1();
2076 
2077  void doSmooth2();
2078 
2079  void computeComRateMap();
2080 
2082  // simulate.cpp
2083 
2084 public:
2085 
2086 
2087  bool valveFlag;
2088 
2089  short crimeRamp;
2090 
2091  short pollutionRamp;
2092 
2093  bool resCap;
2094  bool comCap;
2095  bool indCap;
2096 
2097  short cashFlow;
2098 
2099  float externalMarket;
2100 
2103 
2105  short scoreWait;
2106 
2109 
2110  bool newPower; /* post */
2111 
2112  short cityTaxAverage;
2113 
2114  short simCycle;
2115 
2116  short phaseCycle;
2117 
2118  short speedCycle;
2119 
2121 
2123 
2124 private:
2125 
2126  short resValve;
2127  short comValve;
2128  short indValve;
2129 
2130 
2131 public:
2132 
2133  void updateFundEffects();
2134 
2135 
2136 private:
2137 
2140  {
2141  return (FIRE + (getRandom16() & 7)) | ANIMBIT;
2142  };
2143 
2146  {
2147  return (RUBBLE + (getRandom16() & 3)) | BULLBIT;
2148  };
2149 
2150  void simFrame();
2151 
2152  void simulate();
2153 
2154  void doSimInit();
2155 
2156  void doNilPower();
2157 
2158  void decTrafficMap();
2159 
2160  void decRateOfGrowthMap();
2161 
2162  void initSimMemory();
2163 
2164  void simLoadInit();
2165 
2166  void setCommonInits();
2167 
2168  void setValves();
2169 
2170  void clearCensus();
2171 
2172  void take10Census();
2173 
2174  void take120Census();
2175 
2176  void collectTax();
2177 
2178  void mapScan(int x1, int x2);
2179 
2180  void doRail(const Position &pos);
2181 
2182  void doRadTile(const Position &pos);
2183 
2184  void doRoad(const Position &pos);
2185 
2186  bool doBridge(const Position &pos, MapTile tile);
2187 
2188  int getBoatDistance(const Position &pos);
2189 
2190  void doFire(const Position &pos);
2191 
2192  void fireZone(const Position &pos, MapValue ch);
2193 
2194  void repairZone(const Position &pos, MapTile zCent, short zSize);
2195 
2196  void doSpecialZone(const Position &pos, bool PwrOn);
2197 
2198  void drawStadium(const Position &center, MapTile z);
2199 
2200  void doAirport(const Position &pos);
2201 
2202  void coalSmoke(const Position &pos);
2203 
2204  void doMeltdown(const Position &pos);
2205 
2206 
2208  // sprite.cpp
2209 
2210 public:
2211 
2212 
2214 
2215 
2216  SimSprite *newSprite(const std::string &name, int type, int x, int y);
2217 
2218  void initSprite(SimSprite *sprite, int x, int y);
2219 
2220  void destroyAllSprites();
2221 
2222  void destroySprite(SimSprite *sprite);
2223 
2224  SimSprite *getSprite(int type);
2225 
2226  SimSprite *makeSprite(int type, int x, int y);
2227 
2228 
2229 private:
2230 
2232 
2233  SimSprite *globalSprites[SPRITE_COUNT];
2234 
2235  int absDist;
2236 
2237  short spriteCycle;
2238 
2239 
2240 public:
2241 
2242  short getChar(int x, int y);
2243 
2244  short turnTo(int p, int d);
2245 
2246  bool tryOther(int Tpoo, int Told, int Tnew);
2247 
2248  bool spriteNotInBounds(SimSprite *sprite);
2249 
2250  short getDir(int orgX, int orgY, int desX, int desY);
2251 
2252  int getDistance(int x1, int y1, int x2, int y2);
2253 
2254  bool checkSpriteCollision(SimSprite *s1, SimSprite *s2);
2255 
2256  void moveObjects();
2257 
2258  void doTrainSprite(SimSprite *sprite);
2259 
2260  void doCopterSprite(SimSprite *sprite);
2261 
2262  void doAirplaneSprite(SimSprite *sprite);
2263 
2264  void doShipSprite(SimSprite *sprite);
2265 
2266  void doMonsterSprite(SimSprite *sprite);
2267 
2268  void doTornadoSprite(SimSprite *sprite);
2269 
2270  void doExplosionSprite(SimSprite *sprite);
2271 
2272  void doBusSprite(SimSprite *sprite);
2273 
2274  int canDriveOn(int x, int y);
2275 
2276  void explodeSprite(SimSprite *sprite);
2277 
2278  bool checkWet(int x);
2279 
2280  void destroyMapTile(int ox, int oy);
2281 
2282  void startFireInZone(int Xloc, int Yloc, int ch);
2283 
2284  void startFire(int x, int y);
2285 
2286  void generateTrain(int x, int y);
2287 
2288  void generateBus(int x, int y);
2289 
2290  void generateShip();
2291 
2292  void makeShipHere(int x, int y);
2293 
2294  void makeMonster();
2295 
2296  void makeMonsterAt(int x, int y);
2297 
2298  void generateCopter(const Position &pos);
2299 
2300  void generatePlane(const Position &pos);
2301 
2302  void makeTornado();
2303 
2304  void makeExplosion(int x, int y);
2305 
2306  void makeExplosionAt(int x, int y);
2307 
2308 
2310  // stubs.cpp
2311 
2312 public:
2313 
2314 
2315  Quad totalFunds;
2316 
2324 
2331 
2332  Quad messageTimeLast;
2333 
2335 
2336  short initSimLoad;
2337 
2339 
2340  short simSpeed;
2341 
2342  short simSpeedMeta;
2343 
2345 
2347 
2348  short messageNumber;
2349 
2351 
2355  short blinkFlag;
2356 
2357  emscripten::val callbackVal;
2358 
2364 
2369  void *userData;
2370 
2371 
2378  static inline bool testBounds(int wx, int wy)
2379  {
2380  return (wx >= 0 && wx < WORLD_W && wy >= 0 && wy < WORLD_H);
2381  };
2382 
2383  void spend(int dollars);
2384 
2385  void setFunds(int dollars);
2386 
2387  Quad tickCount();
2388 
2389  Ptr newPtr(int size);
2390 
2391  void freePtr(void *data);
2392 
2393  void doStartScenario(int scenario);
2394 
2395  void doStartGame();
2396 
2397  void initGame();
2398 
2399  void doEarthquake(int strength);
2400 
2401  void invalidateMaps();
2402 
2403  void makeSound(
2404  const std::string &channel,
2405  const std::string &sound,
2406  int x=-1,
2407  int y=-1);
2408 
2409  // Map
2410 
2411  int getTile(int x, int y);
2412 
2413  void setTile(int x, int y, int tile);
2414 
2415  void *getMapBuffer();
2416 
2417  // Residential.
2418 
2419  // Commercial.
2420 
2421  // Industrial.
2422 
2423  // Power.
2424 
2425  int getPowerGrid(int x, int y);
2426 
2427  void setPowerGrid(int x, int y, int power);
2428 
2429  void *getPowerGridMapBuffer();
2430 
2431  // Roads.
2432 
2433  // Population density.
2434 
2435  int getPopulationDensity(int x, int y);
2436 
2437  void setPopulationDensity(int x, int y, int density);
2438 
2440 
2441  // Rate of growth.
2442 
2443  int getRateOfGrowth(int x, int y);
2444 
2445  void setRateOfGrowth(int x, int y, int rate);
2446 
2447  void *getRateOfGrowthMapBuffer();
2448 
2449  // Traffic density.
2450 
2451  int getTrafficDensity(int x, int y);
2452 
2453  void setTrafficDensity(int x, int y, int density);
2454 
2456 
2457  // Pollution density.
2458 
2459  int getPollutionDensity(int x, int y);
2460 
2461  void setPollutionDensity(int x, int y, int density);
2462 
2464 
2465  // Crime rate.
2466 
2467  int getCrimeRate(int x, int y);
2468 
2469  void setCrimeRate(int x, int y, int rate);
2470 
2471  void *getCrimeRateMapBuffer();
2472 
2473  // Land value.
2474 
2475  int getLandValue(int x, int y);
2476 
2477  void setLandValue(int x, int y, int value);
2478 
2479  void *getLandValueMapBuffer();
2480 
2481  // Fire coverage.
2482 
2483  int getFireCoverage(int x, int y);
2484 
2485  void setFireCoverage(int x, int y, int coverage);
2486 
2487  void *getFireCoverageMapBuffer();
2488 
2489  // Police coverage.
2490 
2491  int getPoliceCoverage(int x, int y);
2492 
2493  void setPoliceCoverage(int x, int y, int coverage);
2494 
2496 
2497 
2499  // tool.cpp
2500 
2501 public:
2502 
2503  ToolResult doTool(EditingTool tool, short tileX, short tileY);
2504 
2505  void toolDown(EditingTool tool, short tileX, short tileY);
2506 
2507  void toolDrag(EditingTool tool, short fromX, short fromY,
2508  short toX, short toY);
2509 
2510  void didTool(std::string name, short x, short y);
2511 
2512 private:
2513 
2514  ToolResult queryTool(short x, short y);
2515 
2516  ToolResult bulldozerTool(short x, short y);
2517  ToolResult bulldozerTool(short x, short y, ToolEffects *effects);
2518 
2519  ToolResult roadTool(short x, short y, ToolEffects *effects);
2520 
2521  ToolResult railroadTool(short x, short y, ToolEffects *effects);
2522 
2523  ToolResult wireTool(short x, short y, ToolEffects *effects);
2524 
2525  ToolResult parkTool(short x, short y, ToolEffects *effects);
2526 
2527  ToolResult buildBuildingTool(short x, short y,
2528  const BuildingProperties *bprops,
2529  ToolEffects *effects);
2530 
2531 
2532  ToolResult networkTool(short x, short y, ToolEffects *effects);
2533 
2534  ToolResult waterTool(short x, short y, ToolEffects *effects);
2535 
2536  ToolResult landTool(short x, short y, ToolEffects *effects);
2537 
2538  ToolResult forestTool(short x, short y, ToolEffects *effects);
2539 
2540  ToolResult putDownPark(short mapH, short mapV, ToolEffects *effects);
2541 
2542  ToolResult putDownNetwork(short mapH, short mapV, ToolEffects *effects);
2543 
2544  ToolResult putDownWater(short mapH, short mapV, ToolEffects *effects);
2545 
2546  ToolResult putDownLand(short mapH, short mapV, ToolEffects *effects);
2547 
2548  ToolResult putDownForest(short mapH, short mapV, ToolEffects *effects);
2549 
2550  void doZoneStatus(short mapH, short mapV);
2551 
2552  void doShowZoneStatus(
2553  int tileCategoryIndex,
2554  int populationDensityIndex,
2555  int landValueIndex,
2556  int crimeRateIndex,
2557  int pollutionIndex,
2558  int growthRateIndex,
2559  int x,
2560  int y);
2561 
2562  void putBuilding(int leftX, int topY, int sizeX, int sizeY,
2563  MapTile baseTile, bool aniFlag,
2564  ToolEffects *effects);
2565 
2566  ToolResult prepareBuildingSite(int leftX, int topY, int sizeX, int sizeY,
2567  ToolEffects *effects);
2568 
2569  ToolResult buildBuilding(int mapH, int mapV,
2570  const BuildingProperties *bprops,
2571  ToolEffects *effects);
2572 
2573  int getDensity(short catNo, short mapH, short mapV);
2574 
2575  bool tally(short tileValue);
2576 
2577  short checkSize(short tileValue);
2578 
2579  void checkBorder(short xMap, short yMap, int sizeX, int sizeY,
2580  ToolEffects *effects);
2581 
2582  void putRubble(int x, int y, int size, ToolEffects *effects);
2583 
2584 
2586  // traffic.cpp
2587 
2588 public:
2589 
2590  short makeTrafficAt(int x, int y, ZoneType dest);
2591 
2592  short makeTraffic(int x, int y, ZoneType dest);
2593 
2594 
2595 private:
2596 
2597  short makeTraffic(const Position &startPos, ZoneType dest);
2598 
2599  /* Position stack */
2600 
2604 
2605  short trafMaxX;
2606  short trafMaxY;
2607 
2608 
2609  void addToTrafficDensityMap();
2610 
2611  void pushPos(const Position &pos);
2612 
2613  Position pullPos();
2614 
2615  bool findPerimeterRoad(Position *pos);
2616 
2617  bool findPerimeterTelecom(const Position &pos);
2618 
2619  bool tryDrive(const Position &startPos, ZoneType destZone);
2620 
2621  Direction2 tryGo(const Position &pos, Direction2 dirLast);
2622 
2623  MapTile getTileFromMap(const Position &pos,
2624  Direction2 dir, MapTile defaultTile);
2625 
2626  bool driveDone(const Position &pos, ZoneType destZone);
2627 
2628  bool roadTest(MapValue tile);
2629 
2630 
2632  // update.cpp
2633 
2634 public:
2635 
2636 
2637  bool mustUpdateFunds;
2638 
2640 
2641  Quad cityTimeLast;
2642 
2643  Quad cityYearLast;
2644 
2645  Quad cityMonthLast;
2646 
2647  Quad totalFundsLast;
2648 
2649  Quad resLast;
2650 
2651  Quad comLast;
2652 
2653  Quad indLast;
2654 
2655 
2656  void doUpdateHeads();
2657 
2658  void updateMaps();
2659 
2660  void updateGraphs();
2661 
2662  void updateEvaluation();
2663 
2664  void updateHeads();
2665 
2666  void updateFunds();
2667 
2668  void reallyUpdateFunds();
2669 
2670  void doTimeStuff();
2671 
2672  void updateDate();
2673 
2674  void showValves();
2675 
2676  void drawValve();
2677 
2678  void setDemand(float r, float c, float i);
2679 
2680  void updateOptions();
2681 
2682  void updateUserInterface();
2683 
2684 
2686  // utilities.cpp
2687 
2688 public:
2689 
2690  void pause();
2691 
2692  void resume();
2693 
2694  void setSpeed(short speed);
2695 
2696  void setPasses(int passes);
2697 
2698  void setGameLevelFunds(GameLevel level);
2699 
2700  void setGameLevel(GameLevel level);
2701 
2702  void updateGameLevel();
2703 
2704  void setCityName(const std::string &name);
2705 
2706  void setCleanCityName(const std::string &name);
2707 
2708  void setYear(int year);
2709 
2710  int currentYear();
2711 
2712  void doNewGame();
2713 
2714  void setEnableDisasters(bool value);
2715 
2716  void setAutoBudget(bool value);
2717 
2718  void setAutoBulldoze(bool value);
2719 
2720  void setAutoGoto(bool value);
2721 
2722  void setEnableSound(bool value);
2723 
2724  void setDoAnimation(bool value);
2725 
2726  void setDoMessages(bool value);
2727 
2728  void setDoNotices(bool value);
2729 
2730 #ifdef SWIG
2731 // This tells SWIG that resDemandResult, comDemandResult and indDemandResult
2732 // are output parameters, which will be returned in a tuple of length three.
2733 %apply float *OUTPUT { float *resDemandResult };
2734 %apply float *OUTPUT { float *comDemandResult };
2735 %apply float *OUTPUT { float *indDemandResult };
2736 #endif
2737 
2738  void getDemands(
2739  float *resDemandResult,
2740  float *comDemandResult,
2741  float *indDemandResult);
2742 
2743 
2744 private:
2745 
2746  std::string makeDollarDecimalStr(const std::string &numStr);
2747 
2748 
2750  // zone.cpp
2751 
2752 private:
2753 
2754 
2755  void doZone(const Position &pos);
2756 
2757  void doHospitalChurch(const Position &pos);
2758 
2759  void setSmoke(const Position &pos, bool zonePower);
2760 
2761  void makeHospital(const Position &pos);
2762 
2763  short getLandPollutionValue(const Position &pos);
2764 
2765  void incRateOfGrowth(const Position &pos, int amount);
2766 
2767  bool zonePlop(const Position &pos, int base);
2768 
2769  short doFreePop(const Position &pos);
2770 
2771  bool setZonePower(const Position& pos);
2772 
2773  void buildHouse(const Position &pos, int value);
2774 
2775  short evalLot(int x, int y);
2776 
2777  void doResidential(const Position &pos, bool zonePower);
2778 
2779  void doResIn(const Position &pos, int pop, int value);
2780 
2781  void doResOut(const Position &pos, int pop, int value);
2782 
2783  short getResZonePop(MapTile mapTile);
2784 
2785  void resPlop(const Position &pos, int Den, int Value);
2786 
2787  short evalRes(const Position &pos, int traf);
2788 
2789  // Commercial zone handling
2790 
2791  void doCommercial(const Position &pos, bool zonePower);
2792 
2793  void doComIn(const Position &pos, int pop, int value);
2794 
2795  void doComOut(const Position &pos, int pop, int value);
2796 
2797  short getComZonePop(MapTile tile);
2798 
2799  void comPlop(const Position &pos, int Den, int Value);
2800 
2801  short evalCom(const Position &pos, int traf);
2802 
2803  // Industrial zone handling
2804 
2805  void doIndustrial(const Position &pos, bool zonePower);
2806 
2807  void doIndIn(const Position &pos, int pop, int value);
2808 
2809  void doIndOut(const Position &pos, int pop, int value);
2810 
2811  short getIndZonePop(MapTile tile);
2812 
2813  void indPlop(const Position &pos, int den, int value);
2814 
2815  short evalInd(int traf);
2816 
2817 
2819 
2820 
2821 };
2822 
2823 
2825 
2826 
2827 #endif
Interface for callbacks in the Micropolis game engine.
void doScenarioScore(Scenario type)
Definition: message.cpp:313
void makeSingleLake(const Position &pos)
Definition: generate.cpp:283
void toolDown(EditingTool tool, short tileX, short tileY)
Definition: tool.cpp:1509
short crimeMaxX
X coordinate of most criminal area. Not used.
Definition: micropolis.h:2050
void doCopterSprite(SimSprite *sprite)
Definition: sprite.cpp:695
Quad roadEffect
Definition: micropolis.h:1201
void setGameLevelFunds(GameLevel level)
Definition: utilities.cpp:208
void fixZone(int x, int y, ToolEffects *effects)
Definition: connect.cpp:565
void scenarioDisaster()
Definition: disasters.cpp:158
SimSprite * spriteList
List of active sprites.
Definition: micropolis.h:2213
int terrainCreateIsland
Definition: micropolis.h:1735
short getLandPollutionValue(const Position &pos)
Definition: zone.cpp:321
void generateCopter(const Position &pos)
Definition: sprite.cpp:1969
void explodeSprite(SimSprite *sprite)
Definition: sprite.cpp:1654
void doTornadoSprite(SimSprite *sprite)
Definition: sprite.cpp:1239
short problemVotes[PROBNUM]
Definition: micropolis.h:1559
void doAirplaneSprite(SimSprite *sprite)
Definition: sprite.cpp:800
void makeMeltdown()
Definition: disasters.cpp:217
int getCrimeRate(int x, int y)
float firePercent
Definition: micropolis.h:1443
void * getPopulationDensityMapBuffer()
bool doInitialEval
Need to perform initial city evaluation.
Definition: micropolis.h:2120
void doZoneStatus(short mapH, short mapV)
Definition: tool.cpp:838
Quad roadFund
Definition: micropolis.h:1182
void didntLoadCity(const std::string &msg)
Definition: fileio.cpp:548
bool loadFileData(const std::string &filename)
Definition: fileio.cpp:213
int mustDrawBudget
Definition: micropolis.h:1463
void generateSomeCity(int seed)
Definition: generate.cpp:102
void changeEval()
Definition: evaluate.cpp:507
void makeEarthquake()
Definition: disasters.cpp:257
void doMeltdown(const Position &pos)
Definition: simulate.cpp:1682
short indPop
Definition: micropolis.h:996
void doSaveCityAs(const std::string &filename)
Definition: fileio.cpp:583
MapShort8 policeStationEffectMap
Definition: micropolis.h:1322
short getResZonePop(MapTile mapTile)
Definition: zone.cpp:709
short stadiumPop
Number of stadiums.
Definition: micropolis.h:1025
void resetMapState()
Definition: initialize.cpp:131
void initGraphs()
Definition: graph.cpp:142
bool driveDone(const Position &pos, ZoneType destZone)
Definition: traffic.cpp:453
short doFreePop(const Position &pos)
Definition: zone.cpp:407
bool checkSpriteCollision(SimSprite *s1, SimSprite *s2)
Definition: sprite.cpp:537
short indZonePop
Number of industrial zones.
Definition: micropolis.h:1015
void startFireInZone(int Xloc, int Yloc, int ch)
Definition: sprite.cpp:1764
void setTile(int x, int y, int tile)
void evalInit()
Definition: evaluate.cpp:136
void setPoliceCoverage(int x, int y, int coverage)
ToolResult buildBuilding(int mapH, int mapV, const BuildingProperties *bprops, ToolEffects *effects)
Definition: tool.cpp:711
void didSaveCity(const std::string &filename)
Definition: fileio.cpp:593
void makeHospital(const Position &pos)
Definition: zone.cpp:290
void resPlop(const Position &pos, int Den, int Value)
Definition: zone.cpp:722
Scenario scoreType
The type of score table to use.
Definition: micropolis.h:2104
Position pullPowerStack()
Definition: power.cpp:187
void coalSmoke(const Position &pos)
Definition: simulate.cpp:1662
short blinkFlag
Definition: micropolis.h:2355
short turnTo(int p, int d)
Definition: sprite.cpp:396
bool tally(short tileValue)
Definition: tool.cpp:535
void setDoAnimation(bool value)
Definition: utilities.cpp:384
Position pullPos()
Definition: traffic.cpp:223
void seedRandom(int seed)
Definition: random.cpp:177
void doRadTile(const Position &pos)
Definition: simulate.cpp:1054
bool taxFlag
Definition: micropolis.h:1237
void initSprite(SimSprite *sprite, int x, int y)
Definition: sprite.cpp:136
void simUpdate()
Definition: micropolis.cpp:783
bool findPerimeterTelecom(const Position &pos)
Definition: traffic.cpp:274
void doRivers(const Position &terrainPos)
Definition: generate.cpp:489
short indHist10Max
Definition: micropolis.h:1145
short getFireSeverity()
Definition: evaluate.cpp:361
void setHistory(int historyType, int historyScale, int historyIndex, short historyValue)
Definition: graph.cpp:348
short crimeAverage
Definition: micropolis.h:1063
void setDoNotices(bool value)
Definition: utilities.cpp:412
int terrainTreeLevel
Definition: micropolis.h:1717
void makeFireBombs()
Definition: disasters.cpp:243
Quad cityPopDelta
Definition: micropolis.h:1581
void putOnMap(MapValue mChar, short xLoc, short yLoc)
Definition: generate.cpp:593
void doZone(const Position &pos)
Definition: zone.cpp:91
GameLevel gameLevel
Difficulty level of the game (0..2)
Definition: micropolis.h:2334
ToolResult wireTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1172
Scenario scenario
Scenario being played.
Definition: micropolis.h:2338
void buildHouse(const Position &pos, int value)
Definition: zone.cpp:457
short getIndZonePop(MapTile tile)
Definition: zone.cpp:999
bool tryDrive(const Position &startPos, ZoneType destZone)
Definition: traffic.cpp:309
void pushPos(const Position &pos)
Definition: traffic.cpp:210
void generateSomeRandomCity()
Definition: generate.cpp:92
void setPollutionDensity(int x, int y, int density)
ToolResult putDownNetwork(short mapH, short mapV, ToolEffects *effects)
Definition: tool.cpp:282
Quad fireFund
Definition: micropolis.h:1196
int getTrafficDensity(int x, int y)
void doResidential(const Position &pos, bool zonePower)
Definition: zone.cpp:546
void simLoadInit()
Definition: simulate.cpp:436
short poweredZoneCount
Number of powered tiles in all zone.
Definition: micropolis.h:2107
Quad policeEffect
Definition: micropolis.h:1206
void take10Census()
Definition: simulate.cpp:726
void doLoseGame()
Definition: message.cpp:464
CityClass getCityClass(Quad cityPop)
Definition: evaluate.cpp:210
void doSpecialZone(const Position &pos, bool PwrOn)
Definition: simulate.cpp:1445
Quad tickCount()
short * resHist
Definition: micropolis.h:1341
void setTrafficDensity(int x, int y, int density)
void makeExplosion(int x, int y)
Definition: sprite.cpp:2020
void changeCensus()
Definition: graph.cpp:122
Direction2 doSRiver(const Position &riverPos, Direction2 riverDir, Direction2 terrainDir)
Definition: generate.cpp:552
Callback * callback
Definition: micropolis.h:954
int powerStackPointer
Stack counter, points to top-most item.
Definition: micropolis.h:1993
void destroySprite(SimSprite *sprite)
Definition: sprite.cpp:313
short graph10Max
Definition: micropolis.h:1807
MapByte1 powerGridMap
Definition: micropolis.h:1281
bool tilesAnimated
Definition: micropolis.h:1881
void voteProblems(const short problemTable[PROBNUM])
Definition: evaluate.cpp:288
MapTile getTileFromMap(const Position &pos, Direction2 dir, MapTile defaultTile)
Definition: traffic.cpp:407
void indPlop(const Position &pos, int den, int value)
Definition: zone.cpp:1015
MapByte2 crimeRateMap
Crime rate map.
Definition: micropolis.h:1248
void saveCity()
Definition: fileio.cpp:559
std::string cityFileName
Filename of the last loaded city.
Definition: micropolis.h:1904
void * getRateOfGrowthMapBuffer()
Quad policeValue
Definition: micropolis.h:1453
MapByte4 terrainDensityMap
Definition: micropolis.h:1255
SimSprite * freeSprites
Pool of free SimSprite objects.
Definition: micropolis.h:2231
short getDir(int orgX, int orgY, int desX, int desY)
Definition: sprite.cpp:477
short unpoweredZoneCount
Number of unpowered tiles in all zones.
Definition: micropolis.h:2108
void updateBudget()
Definition: budget.cpp:327
ToolResult networkTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1286
ToolResult railroadTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1146
void * getTrafficDensityMapBuffer()
bool setZonePower(const Position &pos)
Definition: zone.cpp:431
void scoreDoer()
Definition: evaluate.cpp:515
void doRoad(const Position &pos)
Definition: simulate.cpp:1066
void comPlop(const Position &pos, int Den, int Value)
Definition: zone.cpp:881
short newMapFlags[MAP_TYPE_COUNT]
Definition: micropolis.h:2042
short churchPop
Number of churches.
Definition: micropolis.h:1023
void checkBorder(short xMap, short yMap, int sizeX, int sizeY, ToolEffects *effects)
Definition: tool.cpp:575
bool evalChanged
The evaluation window should be shown to the user.
Definition: micropolis.h:2350
short firePop
Definition: micropolis.h:975
void simTick()
void graphDoer()
Definition: graph.cpp:132
Position powerStackXY[POWER_STACK_SIZE]
Definition: micropolis.h:1996
short * moneyHist
Definition: micropolis.h:1356
ToolResult queryTool(short x, short y)
Definition: tool.cpp:972
Quad cityTime
Definition: micropolis.h:1092
Quad fireSpend
Definition: micropolis.h:1175
short faith
Faith bias.
Definition: micropolis.h:1024
ToolResult layDoze(int x, int y, ToolEffects *effects)
Definition: connect.cpp:222
int terrainCurveLevel
Definition: micropolis.h:1729
float roadPercent
Definition: micropolis.h:1427
void makeMonster()
Definition: sprite.cpp:1917
MapShort8 comRateMap
Definition: micropolis.h:1330
short cityCenterY
Y coordinate of city center.
Definition: micropolis.h:2045
void simInit()
Definition: micropolis.cpp:743
void makeMonsterAt(int x, int y)
Definition: sprite.cpp:1956
void getDemands(float *resDemandResult, float *comDemandResult, float *indDemandResult)
Definition: utilities.cpp:424
short makeTraffic(int x, int y, ZoneType dest)
Definition: traffic.cpp:118
short evalCom(const Position &pos, int traf)
Definition: zone.cpp:895
void startFire(int x, int y)
Definition: sprite.cpp:1805
void getScore(const short problemTable[PROBNUM])
Definition: evaluate.cpp:371
MapShort8 fireStationEffectMap
Definition: micropolis.h:1306
ToolResult connectTile(short x, short y, ConnectTileCommand cmd, ToolEffects *effects)
Definition: connect.cpp:133
void loadScenario(Scenario s)
Definition: fileio.cpp:401
void * getLandValueMapBuffer()
void * getCrimeRateMapBuffer()
short resPop
Definition: micropolis.h:982
short getRandom(short range)
Definition: random.cpp:110
Position curMapStackXY[MAX_TRAFFIC_DISTANCE+1]
Position stack.
Definition: micropolis.h:2603
bool vulnerable(int tem)
Definition: disasters.cpp:330
short pollutionMaxY
Y coordinate of most polluted area.
Definition: micropolis.h:2048
void didntSaveCity(const std::string &msg)
Definition: fileio.cpp:603
void moveObjects()
Definition: sprite.cpp:553
void doIndustrial(const Position &pos, bool zonePower)
Definition: zone.cpp:915
void setAutoGoto(bool value)
Definition: utilities.cpp:356
void sendMessages()
Definition: message.cpp:87
bool doAnimation
Definition: micropolis.h:1887
int countProblems()
Definition: evaluate.cpp:528
ToolResult putDownLand(short mapH, short mapV, ToolEffects *effects)
Definition: tool.cpp:333
short getUnemployment()
Definition: evaluate.cpp:341
void fireAnalysis()
Definition: scan.cpp:120
int getBoatDistance(const Position &pos)
Definition: simulate.cpp:1264
int getRandom16()
Definition: random.cpp:130
void decRateOfGrowthMap()
Definition: simulate.cpp:369
short problemOrder[CVP_PROBLEM_COMPLAINTS]
Definition: micropolis.h:1567
void * getPowerGridMapBuffer()
bool enableDisasters
Enable disasters.
Definition: micropolis.h:2346
bool loadFile(const std::string &filename)
Definition: fileio.cpp:251
short cityScoreDelta
Definition: micropolis.h:1611
short newMap
Definition: micropolis.h:2039
ToolResult layWire(int x, int y, ToolEffects *effects)
Definition: connect.cpp:460
ToolResult putDownPark(short mapH, short mapV, ToolEffects *effects)
Definition: tool.cpp:252
void generatePlane(const Position &pos)
Definition: sprite.cpp:1985
MapByte4 tempMap3
Definition: micropolis.h:1276
int getRateOfGrowth(int x, int y)
Quad cityPopLast
Population of last city class check.
Definition: micropolis.h:1951
short getTrafficAverage()
Definition: evaluate.cpp:315
Quad roadValue
Definition: micropolis.h:1448
void doVotes()
Definition: evaluate.cpp:464
void setSmoke(const Position &pos, bool zonePower)
Definition: zone.cpp:235
int canDriveOn(int x, int y)
Definition: sprite.cpp:1626
void fireBomb()
Definition: disasters.cpp:233
Quad fireValue
Definition: micropolis.h:1458
void makeIsland()
Definition: generate.cpp:248
ToolResult putDownForest(short mapH, short mapV, ToolEffects *effects)
Definition: tool.cpp:366
void setValves()
Definition: simulate.cpp:560
void initGame()
Quad getPopulation()
Definition: evaluate.cpp:197
short graph120Max
Definition: micropolis.h:1812
void doAutoGoto(short x, short y, const std::string &message)
Definition: message.cpp:457
bool zonePlop(const Position &pos, int base)
Definition: zone.cpp:364
ToolResult layRail(int x, int y, ToolEffects *effects)
Definition: connect.cpp:364
short scoreWait
Time to wait before computing the score.
Definition: micropolis.h:2105
bool historyInitialized
Definition: micropolis.h:1802
short pollutionMaxX
X coordinate of most polluted area.
Definition: micropolis.h:2047
void * getPoliceCoverageMapBuffer()
void fireZone(const Position &pos, MapValue ch)
Definition: simulate.cpp:1357
void doDisasters()
Definition: disasters.cpp:92
short totalZonePop
Definition: micropolis.h:1020
ToolResult parkTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1198
void doShipSprite(SimSprite *sprite)
Definition: sprite.cpp:867
short resZonePop
Number of residential zones.
Definition: micropolis.h:1013
short pollutionAverage
Definition: micropolis.h:1072
void collectTax()
Definition: simulate.cpp:852
void drawStadium(const Position &center, MapTile z)
Definition: simulate.cpp:1624
Quad donDither
Definition: micropolis.h:2056
short evalRes(const Position &pos, int traf)
Definition: zone.cpp:734
short trafMaxY
Y coordinate of a position with heavy traffic.
Definition: micropolis.h:2606
void pushPowerStack(const Position &pos)
Definition: power.cpp:173
int getPollutionValue(int loc)
Definition: scan.cpp:341
short resHist120Max
Definition: micropolis.h:1130
bool indCap
Block industrial growth.
Definition: micropolis.h:2095
Quad fireEffect
Definition: micropolis.h:1211
void resetEditorState()
Definition: initialize.cpp:141
void updateUserInterface()
Definition: update.cpp:261
void computeComRateMap()
Definition: scan.cpp:585
short totalPopLast
Definition: micropolis.h:1011
void * callbackData
Definition: micropolis.h:2363
bool resCap
Block residential growth.
Definition: micropolis.h:2093
void * getMapBuffer()
short trafMaxX
X coordinate of a position with heavy traffic.
Definition: micropolis.h:2605
short * crimeHist
Definition: micropolis.h:1366
short * pollutionHist
Definition: micropolis.h:1361
void doProblems(short problemTable[PROBNUM])
Definition: evaluate.cpp:241
short airportPop
Definition: micropolis.h:1055
void doExplosionSprite(SimSprite *sprite)
Definition: sprite.cpp:1306
Quad taxFund
Definition: micropolis.h:1219
std::string cityName
Name of the city.
Definition: micropolis.h:1909
short getHistory(int historyType, int historyScale, int historyIndex)
Definition: graph.cpp:288
void setFunds(int dollars)
Quad roadSpend
Definition: micropolis.h:1165
void updateGameLevel()
Definition: utilities.cpp:244
void generateShip()
Definition: sprite.cpp:1858
short evalInd(int traf)
Definition: zone.cpp:1027
short policeStationPop
Definition: micropolis.h:1030
void updateFunds()
Definition: update.cpp:127
int getProblemNumber(int i)
Definition: evaluate.cpp:545
void makeLakes()
Definition: generate.cpp:259
void didLoadCity(const std::string &filename)
Definition: fileio.cpp:538
int currentYear()
Definition: utilities.cpp:297
void doIndIn(const Position &pos, int pop, int value)
Definition: zone.cpp:965
int generatedCitySeed
Definition: micropolis.h:1741
void doIndOut(const Position &pos, int pop, int value)
Definition: zone.cpp:979
void drawMonth(short *hist, unsigned char *s, float scale)
Definition: graph.cpp:107
MapValue randomFire()
Definition: micropolis.h:2139
void setAutoBulldoze(bool value)
Definition: utilities.cpp:342
void repairZone(const Position &pos, MapTile zCent, short zSize)
Definition: simulate.cpp:1404
short disasterWait
Count-down timer for the disaster.
Definition: micropolis.h:2102
void setEnableSound(bool value)
Definition: utilities.cpp:370
ToolResult prepareBuildingSite(int leftX, int topY, int sizeX, int sizeY, ToolEffects *effects)
Definition: tool.cpp:657
void doTrainSprite(SimSprite *sprite)
Definition: sprite.cpp:623
SimSprite * getSprite(int type)
Definition: sprite.cpp:338
int getPoliceCoverage(int x, int y)
bool mustUpdateOptions
Options displayed at user need updating.
Definition: micropolis.h:2639
void doResOut(const Position &pos, int pop, int value)
Definition: zone.cpp:653
void getAssessedValue()
Definition: evaluate.cpp:159
short checkSize(short tileValue)
Definition: tool.cpp:548
bool tryOther(int Tpoo, int Told, int Tnew)
Definition: sprite.cpp:431
void doComOut(const Position &pos, int pop, int value)
Definition: zone.cpp:844
void setEnableDisasters(bool value)
Definition: utilities.cpp:317
int getFireCoverage(int x, int y)
Quad cityPop
Definition: micropolis.h:1574
void saveCityAs(const std::string &filename)
Definition: fileio.cpp:616
short getComZonePop(MapTile tile)
Definition: zone.cpp:864
void doBudgetFromMenu()
Definition: budget.cpp:104
MapShort8 fireStationMap
Definition: micropolis.h:1301
int getDistance(int x1, int y1, int x2, int y2)
Definition: sprite.cpp:525
short cityCenterX
X coordinate of city center.
Definition: micropolis.h:2044
bool doNotices
Definition: micropolis.h:1891
short totalPop
Definition: micropolis.h:1004
void getHistoryRange(int historyType, int historyScale, short *minValResult, short *maxValResult)
Definition: graph.cpp:218
short cityYes
Definition: micropolis.h:1551
void checkGrowth()
Definition: message.cpp:250
int getLandValue(int x, int y)
void * userData
Definition: micropolis.h:2369
void setFire()
Definition: disasters.cpp:285
Quad cityAssessedValue
Definition: micropolis.h:1591
short landValueAverage
Definition: micropolis.h:1080
unsigned short * map[WORLD_W]
Definition: micropolis.h:1120
void randomlySeedRandom()
Definition: random.cpp:165
bool doMessages
Definition: micropolis.h:1889
void doPopNum()
Definition: evaluate.cpp:182
void setFireCoverage(int x, int y, int coverage)
void initMapArrays()
Definition: allocate.cpp:88
void doMakeSound(int mesgNum, int x, int y)
Definition: message.cpp:402
short makeTrafficAt(int x, int y, ZoneType dest)
Definition: traffic.cpp:95
void simHeat()
Definition: micropolis.cpp:806
Direction2 tryGo(const Position &pos, Direction2 dirLast)
Definition: traffic.cpp:356
short coalPowerPop
Definition: micropolis.h:1040
void pause()
Definition: utilities.cpp:148
void destroyAllSprites()
Definition: sprite.cpp:298
bool testForConductive(const Position &pos, Direction2 testDir)
Definition: power.cpp:104
void doStartGame()
short hospitalPop
Number of hospitals.
Definition: micropolis.h:1022
void doResIn(const Position &pos, int pop, int value)
Definition: zone.cpp:612
Quad cityMonth
Definition: micropolis.h:1098
void crimeScan()
Definition: scan.cpp:413
bool censusChanged
Definition: micropolis.h:1157
int terrainLakeLevel
Definition: micropolis.h:1723
bool simPaused
Definition: micropolis.h:1877
short * indHist
Definition: micropolis.h:1351
void generateMap(int seed)
Definition: generate.cpp:129
ToolResult doTool(EditingTool tool, short tileX, short tileY)
Definition: tool.cpp:1397
void makeTornado()
Definition: sprite.cpp:1996
void doBusSprite(SimSprite *sprite)
Definition: sprite.cpp:1342
short trafficAverage
Definition: micropolis.h:1618
void generateTrain(int x, int y)
Definition: sprite.cpp:1836
int mapSerial
The invalidateMaps method increases the map serial number every time the maps changes.
Definition: micropolis.h:2122
short comHist10Max
Definition: micropolis.h:1135
int simRandom()
Definition: random.cpp:98
void destroyMapArrays()
Definition: allocate.cpp:113
short * comHist
Definition: micropolis.h:1346
short startingYear
Definition: micropolis.h:1109
bool enableSound
Enable sound.
Definition: micropolis.h:2344
void sendMessage(short Mnum, short x=NOWHERE, short y=NOWHERE, bool picture=false, bool important=false)
Definition: message.cpp:390
void doAirport(const Position &pos)
Definition: simulate.cpp:1645
Scenario disasterEvent
The disaster for which a count-down is running.
Definition: micropolis.h:2101
void doScoreCard()
Definition: evaluate.cpp:479
unsigned short * mapBase
Definition: micropolis.h:1396
void doHospitalChurch(const Position &pos)
Definition: zone.cpp:145
MapShort8 policeStationMap
Definition: micropolis.h:1317
void makeSound(const std::string &channel, const std::string &sound, int x=-1, int y=-1)
Quad cityYear
Definition: micropolis.h:1104
bool saveFile(const std::string &filename)
Definition: fileio.cpp:337
void setGameLevel(GameLevel level)
Definition: utilities.cpp:235
MapByte2 pollutionDensityMap
Pollution density map.
Definition: micropolis.h:1246
short getChar(int x, int y)
Definition: sprite.cpp:375
int getProblemVotes(int i)
Definition: evaluate.cpp:562
int getDensity(short catNo, short mapH, short mapV)
Definition: tool.cpp:788
void generateBus(int x, int y)
Definition: sprite.cpp:1849
SimSprite * newSprite(const std::string &name, int type, int x, int y)
Definition: sprite.cpp:104
MapByte2 trafficDensityMap
Traffic density map.
Definition: micropolis.h:1245
bool autoBudget
Definition: micropolis.h:2330
void doTrees()
Definition: generate.cpp:340
ToolResult putDownWater(short mapH, short mapV, ToolEffects *effects)
Definition: tool.cpp:310
int getTile(int x, int y)
short cityScore
Definition: micropolis.h:1604
short categoryLast
City class of last city class check.
Definition: micropolis.h:1952
void toolDrag(EditingTool tool, short fromX, short fromY, short toX, short toY)
Definition: tool.cpp:1538
bool comCap
Block commercial growth.
Definition: micropolis.h:2094
void decTrafficMap()
Definition: simulate.cpp:337
void doFire(const Position &pos)
Definition: simulate.cpp:1294
int getPollutionDensity(int x, int y)
Quad policeSpend
Definition: micropolis.h:1170
void * getFireCoverageMapBuffer()
CityClass cityClass
City class, affected by city population.
Definition: micropolis.h:1593
short nuclearPowerPop
Definition: micropolis.h:1045
void resume()
Definition: utilities.cpp:164
void makeFire()
Definition: disasters.cpp:304
void spend(int dollars)
Direction2 doBRiver(const Position &riverPos, Direction2 riverDir, Direction2 terrainDir)
Definition: generate.cpp:512
static bool testBounds(int wx, int wy)
Definition: micropolis.h:2378
void makeNakedIsland()
Definition: generate.cpp:204
void invalidateMaps()
void doWinGame()
Definition: message.cpp:471
MapByte2 tempMap1
Definition: micropolis.h:1262
short floodCount
Definition: micropolis.h:1512
void fixSingle(int x, int y, ToolEffects *effects)
Definition: connect.cpp:593
void doMonsterSprite(SimSprite *sprite)
Definition: sprite.cpp:1007
void clearMap()
Definition: generate.cpp:175
void plopSRiver(const Position &pos)
Definition: generate.cpp:650
void setPopulationDensity(int x, int y, int density)
int getCityCenterDistance(int x, int y)
Definition: scan.cpp:392
void makeExplosionAt(int x, int y)
Definition: sprite.cpp:2033
ToolResult layRoad(int x, int y, ToolEffects *effects)
Definition: connect.cpp:271
short fireStationPop
Definition: micropolis.h:1035
SimSprite * makeSprite(int type, int x, int y)
Definition: sprite.cpp:355
void doBudgetNow(bool fromMenu)
Definition: budget.cpp:116
void doStartScenario(int scenario)
void freePtr(void *data)
void didLoadScenario(int s, const std::string name, const std::string fname)
Definition: fileio.cpp:494
void putRubble(int x, int y, int size, ToolEffects *effects)
Definition: tool.cpp:923
int getRandom16Signed()
Definition: random.cpp:137
void addToTrafficDensityMap()
Definition: traffic.cpp:165
Ptr newPtr(int size)
void * getPollutionDensityMapBuffer()
short curMapStackPointer
Definition: micropolis.h:2602
void treeSplash(short xloc, short yloc)
Definition: generate.cpp:310
short comPop
Definition: micropolis.h:989
void doNilPower()
Definition: simulate.cpp:321
void setCleanCityName(const std::string &name)
Definition: utilities.cpp:272
int getPowerGrid(int x, int y)
ToolResult landTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1328
void clearUnnatural()
Definition: generate.cpp:188
short needHospital
Definition: micropolis.h:1383
short evalLot(int x, int y)
Definition: zone.cpp:512
int getPopulationDensity(const Position &pos, MapTile tile)
Definition: scan.cpp:198
MapByte2 populationDensityMap
Population density map.
Definition: micropolis.h:1244
void initWillStuff()
Definition: initialize.cpp:85
bool loadCity(const std::string &filename)
Definition: fileio.cpp:508
void incRateOfGrowth(const Position &pos, int amount)
Definition: zone.cpp:349
void doCommercial(const Position &pos, bool zonePower)
Definition: zone.cpp:763
bool autoGoto
Definition: micropolis.h:1960
void makeFlood()
Definition: disasters.cpp:346
MapByte2 landValueMap
Land value map.
Definition: micropolis.h:1247
Quad policeFund
Definition: micropolis.h:1189
short needChurch
Definition: micropolis.h:1390
MapShort8 rateOfGrowthMap
Definition: micropolis.h:1290
void setRateOfGrowth(int x, int y, int rate)
void makeShipHere(int x, int y)
Definition: sprite.cpp:1905
MapByte2 tempMap2
Definition: micropolis.h:1269
void setCrimeRate(int x, int y, int rate)
void putBuilding(int leftX, int topY, int sizeX, int sizeY, MapTile baseTile, bool aniFlag, ToolEffects *effects)
Definition: tool.cpp:617
void doNewGame()
Definition: utilities.cpp:306
void smoothTreesAt(int x, int y, bool preserve)
Definition: generate.cpp:429
void didTool(std::string name, short x, short y)
Definition: tool.cpp:947
bool doBridge(const Position &pos, MapTile tile)
Definition: simulate.cpp:1139
short cityTax
Definition: micropolis.h:1224
void setPowerGrid(int x, int y, int power)
short railTotal
Definition: micropolis.h:970
short getERandom(short limit)
Definition: random.cpp:155
bool roadTest(MapValue tile)
Definition: traffic.cpp:503
MapValue randomRubble()
Definition: micropolis.h:2145
ToolResult roadTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1120
void doPowerScan()
Definition: power.cpp:125
short * miscHist
Definition: micropolis.h:1371
void initGraphMax()
Definition: graph.cpp:151
short crimeMaxY
Y coordinate of most criminal area. Not used.
Definition: micropolis.h:2051
bool spriteNotInBounds(SimSprite *sprite)
Definition: sprite.cpp:459
void updateFundEffects()
Definition: simulate.cpp:908
short comZonePop
Number of commercial zones.
Definition: micropolis.h:1014
void populationDensityScan()
Definition: scan.cpp:136
void doComIn(const Position &pos, int pop, int value)
Definition: zone.cpp:821
void doFlood(const Position &pos)
Definition: disasters.cpp:385
void plopBRiver(const Position &pos)
Definition: generate.cpp:623
void doShowZoneStatus(int tileCategoryIndex, int populationDensityIndex, int landValueIndex, int crimeRateIndex, int pollutionIndex, int growthRateIndex, int x, int y)
Definition: tool.cpp:903
short seaportPop
Definition: micropolis.h:1050
void init()
Definition: micropolis.cpp:130
short roadTotal
Definition: micropolis.h:963
void doRail(const Position &pos)
Definition: simulate.cpp:1019
float policePercent
Definition: micropolis.h:1435
Quad totalFunds
Funds of the player.
Definition: micropolis.h:2315
void updateDate()
Definition: update.cpp:159
short comHist120Max
Definition: micropolis.h:1140
void cityEvaluation()
Definition: evaluate.cpp:110
void doBudget()
Definition: budget.cpp:97
void setDoMessages(bool value)
Definition: utilities.cpp:398
void destroyMapTile(int ox, int oy)
Definition: sprite.cpp:1714
bool findPerimeterRoad(Position *pos)
Definition: traffic.cpp:239
bool autoBulldoze
Definition: micropolis.h:2323
void doEarthquake(int strength)
void doSimInit()
Definition: simulate.cpp:286
short resHist10Max
Definition: micropolis.h:1125
short indHist120Max
Definition: micropolis.h:1150
ToolResult forestTool(short x, short y, ToolEffects *effects)
Definition: tool.cpp:1351
ToolResult buildBuildingTool(short x, short y, const BuildingProperties *bprops, ToolEffects *effects)
Definition: tool.cpp:1225
void setAutoBudget(bool value)
Definition: utilities.cpp:328
void setLandValue(int x, int y, int value)
int x
X coordinate of the sprite in pixels?
Definition: micropolis.h:891
int destX
Destination X coordinate of the sprite.
Definition: micropolis.h:901
int yHot
Offset of the hot-spot relative to SimSprite::y?
Definition: micropolis.h:898
int type
Type of the sprite (TRA – BUS).
Definition: micropolis.h:889
int destY
Destination Y coordinate of the sprite.
Definition: micropolis.h:902
SimSprite * next
Pointer to next SimSprite object in the list.
Definition: micropolis.h:887
std::string name
Name of the sprite.
Definition: micropolis.h:888
int y
Y coordinate of the sprite in pixels?
Definition: micropolis.h:892
int frame
Frame (0 means non-active sprite)
Definition: micropolis.h:890
int xHot
Offset of the hot-spot relative to SimSprite::x?
Definition: micropolis.h:897
Commonly used data types in Micropolis game engine.
Defines classes for handling messages between the game engine and the GUI frontend.
Map data structures for the Micropolis game engine.
static const int WORLD_H
Definition: map_type.h:95
static const int WORLD_W
Definition: map_type.h:90
static const int CITYTIMES_PER_YEAR
Definition: micropolis.h:205
static const int WORLD_H_8
Definition: micropolis.h:185
Scenario
Definition: micropolis.h:697
@ SC_TOKYO
Tokyo (scary monster)
Definition: micropolis.h:704
@ SC_NONE
No scenario (free playing)
Definition: micropolis.h:698
@ SC_BOSTON
Boston (nuclear meltdown)
Definition: micropolis.h:706
@ SC_BERN
Bern (traffic)
Definition: micropolis.h:703
@ SC_COUNT
Number of scenarios.
Definition: micropolis.h:709
@ SC_SAN_FRANCISCO
San francisco (earthquake)
Definition: micropolis.h:701
@ SC_RIO
Rio (flooding)
Definition: micropolis.h:707
@ SC_HAMBURG
Hamburg (fire bombs)
Definition: micropolis.h:702
@ SC_DULLSVILLE
Dullsville (boredom)
Definition: micropolis.h:700
@ SC_DETROIT
Detroit (crime)
Definition: micropolis.h:705
static const int HISTORY_LENGTH
Definition: micropolis.h:210
ZoneType
Definition: micropolis.h:717
@ ZT_RESIDENTIAL
Residential zone.
Definition: micropolis.h:720
@ ZT_COMMERCIAL
Commercial zone.
Definition: micropolis.h:718
@ ZT_INDUSTRIAL
Industrial zone.
Definition: micropolis.h:719
@ ZT_NUM_DESTINATIONS
Number of available zones.
Definition: micropolis.h:722
static const int WORLD_W_2
Definition: micropolis.h:151
static const int PASSES_PER_CITYTIME
Definition: micropolis.h:195
ConnectTileCommand
Definition: micropolis.h:350
@ CONNECT_TILE_FIX
Fix zone (connect wire, road, and rail).
Definition: micropolis.h:351
@ CONNECT_TILE_ROAD
Lay road and fix zone.
Definition: micropolis.h:353
@ CONNECT_TILE_WIRE
Lay wire and fix zone.
Definition: micropolis.h:355
@ CONNECT_TILE_RAILROAD
Lay rail and fix zone.
Definition: micropolis.h:354
@ CONNECT_TILE_BULLDOZE
Bulldoze and fix zone.
Definition: micropolis.h:352
static void not_reached(int line, const char *fname)
Definition: micropolis.h:857
static const int POWER_STACK_SIZE
Definition: micropolis.h:226
MapType
Definition: micropolis.h:306
@ MAP_TYPE_POLLUTION
Pollution.
Definition: micropolis.h:316
@ MAP_TYPE_POPULATION_DENSITY
Population density.
Definition: micropolis.h:313
@ MAP_TYPE_DYNAMIC
Dynamic filter.
Definition: micropolis.h:321
@ MAP_TYPE_LAND_VALUE
Land value.
Definition: micropolis.h:318
@ MAP_TYPE_FIRE_RADIUS
Fire station coverage radius.
Definition: micropolis.h:319
@ MAP_TYPE_CRIME
Crime rate.
Definition: micropolis.h:317
@ MAP_TYPE_ALL
All zones.
Definition: micropolis.h:307
@ MAP_TYPE_IND
Industrial zones.
Definition: micropolis.h:310
@ MAP_TYPE_COM
Commercial zones.
Definition: micropolis.h:309
@ MAP_TYPE_RES
Residential zones.
Definition: micropolis.h:308
@ MAP_TYPE_ROAD
Roads.
Definition: micropolis.h:312
@ MAP_TYPE_POWER
Power connectivity.
Definition: micropolis.h:311
@ MAP_TYPE_COUNT
Number of map types.
Definition: micropolis.h:323
@ MAP_TYPE_RATE_OF_GROWTH
Rate of growth.
Definition: micropolis.h:314
@ MAP_TYPE_TRAFFIC_DENSITY
Traffic.
Definition: micropolis.h:315
@ MAP_TYPE_POLICE_RADIUS
Police station coverage radius.
Definition: micropolis.h:320
static const int CITYTIMES_PER_MONTH
Definition: micropolis.h:200
HistoryType
Definition: micropolis.h:282
@ HISTORY_TYPE_CRIME
Crime history type.
Definition: micropolis.h:287
@ HISTORY_TYPE_MONEY
Money history type.
Definition: micropolis.h:286
@ HISTORY_TYPE_POLLUTION
Pollution history type.
Definition: micropolis.h:288
@ HISTORY_TYPE_IND
Industry history type.
Definition: micropolis.h:285
@ HISTORY_TYPE_COUNT
Number of history types.
Definition: micropolis.h:290
@ HISTORY_TYPE_RES
Residiential history type.
Definition: micropolis.h:283
@ HISTORY_TYPE_COM
Commercial history type.
Definition: micropolis.h:284
static const int HISTORY_COUNT
Definition: micropolis.h:221
Tiles
Definition: micropolis.h:381
@ LASTPOWERPLANT
Last tile of coal power plant.
Definition: micropolis.h:581
@ NUCLEARBASE
First tile nuclear power plant.
Definition: micropolis.h:603
@ COALBASE
First tile of coal power plant.
Definition: micropolis.h:579
@ HTRFBASE
First tile with high traffic.
Definition: micropolis.h:452
@ WATER_LOW
First water tile.
Definition: micropolis.h:392
@ FIRESTBASE
First tile of fire station.
Definition: micropolis.h:584
@ RAILHPOWERV
Horizontal rail, vertical power.
Definition: micropolis.h:477
@ HBRIDGE
Horizontal bridge.
Definition: micropolis.h:426
@ WATER_HIGH
Last water tile (inclusive)
Definition: micropolis.h:393
@ STADIUMBASE
First tile stadium.
Definition: micropolis.h:594
@ VBRIDGE
Vertical bridge.
Definition: micropolis.h:428
@ LASTZONE
Also last tile nuclear power plant.
Definition: micropolis.h:605
@ STADIUM
'Center tile' stadium.
Definition: micropolis.h:595
@ NUCLEAR
'Center' tile nuclear power plant.
Definition: micropolis.h:604
@ PORTBASE
Top-left tile of the seaport.
Definition: micropolis.h:567
@ IZB
Center tile of first non-empty industry zone.
Definition: micropolis.h:542
@ PORT
Center tile of the seaport.
Definition: micropolis.h:568
@ COALSMOKE3
927 last animation tile for chimney at coal power plant (2, 1).
Definition: micropolis.h:644
@ POWERPLANT
'Center' tile of coal power plant.
Definition: micropolis.h:580
@ INDCLR
Center tile of empty industrial zone.
Definition: micropolis.h:537
@ COALSMOKE4
931 last animation tile for chimney at coal power plant (3, 1).
Definition: micropolis.h:647
@ RADTILE
Radio-active contaminated tile.
Definition: micropolis.h:415
@ FIRESTATION
'Center tile' of fire station.
Definition: micropolis.h:585
@ LTRFBASE
First tile with low traffic.
Definition: micropolis.h:443
@ DIRT
Clear tile.
Definition: micropolis.h:382
@ INDBASE
Top-left tile of empty industrial zone.
Definition: micropolis.h:536
@ IND1
Top-left tile of first non-empty industry zone.
Definition: micropolis.h:541
@ COALSMOKE1
919 last animation tile for chimney at coal power plant (2, 0).
Definition: micropolis.h:638
@ RAILVPOWERH
Vertical rail, horizontal power.
Definition: micropolis.h:478
@ LASTIND
Last tile of empty industrial zone.
Definition: micropolis.h:538
@ TILE_INVALID
Invalid tile (not used in the world map).
Definition: micropolis.h:689
@ LASTPORT
Last tile of the seaport.
Definition: micropolis.h:569
@ COALSMOKE2
923 last animation tile for chimney at coal power plant (3, 0).
Definition: micropolis.h:641
static const int ISLAND_RADIUS
Definition: micropolis.h:239
static const int BYTES_PER_TILE
Definition: micropolis.h:143
static const int WORLD_H_2
Definition: micropolis.h:157
CityClass
Definition: micropolis.h:750
@ CC_CAPITAL
Capital, > 50000 citizens.
Definition: micropolis.h:754
@ CC_MEGALOPOLIS
Megalopolis, > 500000 citizens.
Definition: micropolis.h:756
@ CC_METROPOLIS
Metropolis, > 100000 citizens.
Definition: micropolis.h:755
@ CC_CITY
City, > 10000 citizens.
Definition: micropolis.h:753
@ CC_VILLAGE
Village.
Definition: micropolis.h:751
@ CC_TOWN
Town, > 2000 citizens.
Definition: micropolis.h:752
@ CC_NUM_CITIES
Number of city classes.
Definition: micropolis.h:758
static const int WORLD_W_8
Definition: micropolis.h:179
static const int MAX_FIRE_STATION_EFFECT
Definition: micropolis.h:263
HistoryScale
Definition: micropolis.h:296
@ HISTORY_SCALE_SHORT
Short scale data (10 years)
Definition: micropolis.h:297
@ HISTORY_SCALE_COUNT
Number of history scales available.
Definition: micropolis.h:300
@ HISTORY_SCALE_LONG
Long scale data (120 years)
Definition: micropolis.h:298
static const int EDITOR_TILE_SIZE
Definition: micropolis.h:190
GameLevel
Definition: micropolis.h:762
@ LEVEL_FIRST
First game level value.
Definition: micropolis.h:769
@ LEVEL_MEDIUM
Intermediate game level.
Definition: micropolis.h:764
@ LEVEL_EASY
Simple game level.
Definition: micropolis.h:763
@ LEVEL_HARD
Difficult game level.
Definition: micropolis.h:765
@ LEVEL_LAST
Last game level value.
Definition: micropolis.h:770
@ LEVEL_COUNT
Number of game levels.
Definition: micropolis.h:767
ToolResult
Definition: micropolis.h:363
@ TOOLRESULT_FAILED
Cannot build here.
Definition: micropolis.h:366
@ TOOLRESULT_OK
Build succeeded.
Definition: micropolis.h:367
@ TOOLRESULT_NEED_BULLDOZE
Clear the area first.
Definition: micropolis.h:365
@ TOOLRESULT_NO_MONEY
User has not enough money for tool.
Definition: micropolis.h:364
static T min(const T a, const T b)
Definition: micropolis.h:783
static const int NOWHERE
Definition: micropolis.h:233
CityVotingProblems
Definition: micropolis.h:733
@ CVP_NUMPROBLEMS
Number of problems.
Definition: micropolis.h:742
@ CVP_FIRE
Fire.
Definition: micropolis.h:740
@ CVP_POLLUTION
Pollution.
Definition: micropolis.h:735
@ CVP_TAXES
Taxes.
Definition: micropolis.h:737
@ CVP_HOUSING
Housing.
Definition: micropolis.h:736
@ CVP_UNEMPLOYMENT
Unemployment.
Definition: micropolis.h:739
@ CVP_TRAFFIC
Traffic.
Definition: micropolis.h:738
@ CVP_PROBLEM_COMPLAINTS
Number of problems to complain about.
Definition: micropolis.h:744
@ CVP_CRIME
Crime.
Definition: micropolis.h:734
static const int MAX_ROAD_EFFECT
Definition: micropolis.h:253
SpriteType
Definition: micropolis.h:328
@ SPRITE_AIRPLANE
Airplane sprite.
Definition: micropolis.h:333
@ SPRITE_TORNADO
Tornado sprite.
Definition: micropolis.h:336
@ SPRITE_MONSTER
Scary monster.
Definition: micropolis.h:335
@ SPRITE_TRAIN
Train sprite.
Definition: micropolis.h:331
@ SPRITE_HELICOPTER
Helicopter sprite.
Definition: micropolis.h:332
@ SPRITE_BUS
Bus sprite.
Definition: micropolis.h:338
@ SPRITE_SHIP
Ship.
Definition: micropolis.h:334
@ SPRITE_EXPLOSION
Explosion sprite.
Definition: micropolis.h:337
@ SPRITE_COUNT
Number of sprite objects.
Definition: micropolis.h:340
static const int WORLD_H_4
Definition: micropolis.h:171
static const int BITS_PER_TILE
Definition: micropolis.h:137
static const int MISC_HISTORY_LENGTH
Definition: micropolis.h:215
static const int MAX_POLICE_STATION_EFFECT
Definition: micropolis.h:258
static T clamp(const T val, const T lower, const T upper)
Definition: micropolis.h:808
static T absoluteValue(const T val)
Definition: micropolis.h:825
static const int WORLD_W_4
Definition: micropolis.h:165
static const int MAX_TRAFFIC_DISTANCE
Definition: micropolis.h:248
static T max(const T a, const T b)
Definition: micropolis.h:795
Defines position handling and direction enumeration for the Micropolis game engine.
Direction2
Definition: position.h:86
Defines string identification numbers for texts used in the Micropolis game engine.
Defines tools, building properties, and tool effects for the Micropolis game.
unsigned short MapTile
Definition: tool.h:108
@ BULLBIT
bit 12, tile is bulldozable.
Definition: tool.h:123
@ ANIMBIT
bit 11, tile is animated.
Definition: tool.h:124
unsigned short MapValue
Definition: tool.h:94
EditingTool
Definition: tool.h:142