96 #define VAL_VERYHIGH 4
98 #define VAL_VERYPLUS 6
100 #define VAL_VERYMINUS 8
104 #define COLOR_WHITE 0
105 #define COLOR_YELLOW 1
106 #define COLOR_ORANGE 2
108 #define COLOR_DARKRED 4
109 #define COLOR_DARKBLUE 5
110 #define COLOR_LIGHTBLUE 6
111 #define COLOR_BROWN 7
112 #define COLOR_LIGHTGREEN 8
113 #define COLOR_DARKGREEN 9
114 #define COLOR_OLIVE 10
115 #define COLOR_LIGHTBROWN 11
116 #define COLOR_LIGHTGRAY 12
117 #define COLOR_MEDIUMGRAY 13
118 #define COLOR_DARKGRAY 14
119 #define COLOR_BLACK 15
146 #define UNPOWERED COLOR_LIGHTBLUE
147 #define POWERED COLOR_RED
148 #define CONDUCTIVE COLOR_LIGHTGRAY
153 unsigned short tile; \
155 unsigned char *imageBase; \
156 unsigned char *image; \
159 int lineBytes = view->line_bytes8; \
160 int pixelBytes = view->pixel_bytes; \
162 imageBase = view->x->color ? view->data : view->data8; \
163 for (col = 0; col < WORLD_W; col++) { \
164 image = imageBase + (3 * pixelBytes * col); \
165 for (row = 0; row < WORLD_H; row++) { \
166 tile = *(mp++) & LOMASK; \
167 if (tile >= TILE_COUNT) { \
168 tile -= TILE_COUNT; \
176 image[0] = (unsigned char)(m); \
177 image[1] = (unsigned char)(m >>8); \
178 image[2] = (unsigned char)(m >>16); \
182 memcpy((char *)image, ((char *)mem) + (n * 4 * 2), (3 * 2)); \
186 memcpy((char *)image, ((char *)mem) + (n * 4 * 3), (3 * 3)); \
190 memcpy((char *)image, ((char *)mem) + (n * 4 * 4), (3 * 4)); \
196 m = (UQuad)(mem[n]); \
197 image[0] = (unsigned char)(m >>24); \
198 image[1] = (unsigned char)(m >>16); \
199 image[2] = (unsigned char)(m >>8); \
204 image[0] = (unsigned char)(m >>24); \
205 image[1] = (unsigned char)(m >>16); \
206 image[2] = (unsigned char)(m >>8); \
211 image[0] = (unsigned char)(m >>24); \
212 image[1] = (unsigned char)(m >>16); \
213 image[2] = (unsigned char)(m >>8); \
218 image[0] = (unsigned char)(m >>24); \
219 image[1] = (unsigned char)(m >>16); \
220 image[2] = (unsigned char)(m >>8); \
225 #define ROW3_8 ROW1_8(0) ROW1_8(1) ROW1_8(2)
226 #define ROW3_16 ROW1_16(0) ROW1_16(1) ROW1_16(2)
227 #define ROW3_24 ROW1_24(0) ROW1_24(1) ROW1_24(2)
228 #define ROW3_32 ROW1_32(0) ROW1_32(1) ROW1_32(2)
231 switch (view->x->depth) { \
252 mem = (UQuad *)&view->smalltiles[tile * 4 * 4 * pixelBytes]; \
258 void Micropolis::drawAll()
265 void Micropolis::drawRes()
268 if (tile >= COMBASE) {
275 void Micropolis::drawCom()
278 if ((tile > COMLAST) ||
279 ((tile >= LVRAIL6) &&
287 void Micropolis::drawInd()
291 if (((tile >= RESBASE) && (tile <
INDBASE)) ||
292 ((tile >=
PORTBASE) && (tile < SMOKEBASE)) ||
293 ((tile >= TINYEXP) && (tile <= TINYEXPLAST)) ||
294 (tile >= FOOTBALLGAME1)) {
301 void Micropolis::drawLilTransMap()
304 if ((tile >= RESBASE) ||
305 ((tile >= BRWXXX7) && (tile <= LVPOWER10)) ||
306 (tile == UNUSED_TRASH6)) {
313 void Micropolis::drawPowerGrid()
318 unsigned char *image, *imageBase;
321 int lineBytes = view->line_bytes8;
322 int pixelBytes = view->pixel_bytes;
325 int powered, unpowered, conductive;
327 if (view->x->color) {
328 powered = view->pixels[POWERED];
329 unpowered = view->pixels[UNPOWERED];
330 conductive = view->pixels[CONDUCTIVE];
340 view->x->color ? view->data : view->data8;
342 for (col = 0; col <
WORLD_W; col++) {
345 imageBase + (3 * pixelBytes * col);
347 for (row = 0; row <
WORLD_H; row++) {
350 if ((tile &
LOMASK) >= TILE_COUNT) {
354 if ((tile &
LOMASK) <= LASTFIRE) {
358 pix = (tile &
PWRBIT) ? powered : unpowered;
369 mem = (UQuad *)&view->smalltiles[tile * 4 * 4 * pixelBytes];
372 switch (view->x->depth) {
376 image[0] = image[1] = image[2] = pix;
378 image[0] = image[1] = image[2] = pix;
380 image[0] = image[1] = image[2] = pix;
387 p = (
unsigned short *)image;
388 p[0] = p[1] = p[2] = pix;
390 p = (
unsigned short *)image;
391 p[0] = p[1] = p[2] = pix;
393 p = (
unsigned short *)image;
394 p[0] = p[1] = p[2] = pix;
402 for (y = 0; y < 3; y++) {
403 unsigned char *img = image;
404 for (x = 0; x < 4; x++) {
405 *(img++) = (pix >> 0) & 0xff;
406 *(img++) = (pix >> 8) & 0xff;
407 *(img++) = (pix >> 16) & 0xff;
408 if (pixelBytes == 4) {
428 bool Micropolis::dynamicFilter(
443 ((dynamicData[0] > dynamicData[1]) ||
444 (populationDensity >= dynamicData[0]) &&
445 (populationDensity <= dynamicData[1])) &&
446 ((dynamicData[2] > dynamicData[3]) ||
447 (rateOfGrowth >= ((2 * dynamicData[2]) - 256)) &&
448 (rateOfGrowth <= ((2 * dynamicData[3]) - 256))) &&
449 ((dynamicData[4] > dynamicData[5]) ||
450 (traffic >= dynamicData[4]) &&
451 (traffic <= dynamicData[5])) &&
452 ((dynamicData[6] > dynamicData[7]) ||
453 (pollution >= dynamicData[6]) &&
454 (pollution <= dynamicData[7])) &&
455 ((dynamicData[8] > dynamicData[9]) ||
456 (crime >= dynamicData[8]) &&
457 (crime <= dynamicData[9])) &&
458 ((dynamicData[10] > dynamicData[11]) ||
459 (landValue >= dynamicData[10]) &&
460 (landValue <= dynamicData[11])) &&
461 ((dynamicData[12] > dynamicData[13]) ||
462 (police >= dynamicData[12]) &&
463 (police <= dynamicData[13])) &&
464 ((dynamicData[14] > dynamicData[15]) ||
465 (fire >= dynamicData[14]) &&
466 (fire <= dynamicData[15])));
470 void Micropolis::drawDynamic()
473 if (tile > LASTFIRE) {
474 if (!dynamicFilter(col, row)) {
482 short Micropolis::getCI(
short x)
500 void Micropolis::drawPopulationDensity()
518 void Micropolis::drawRateOfGrowth()
557 void Micropolis::drawTrafficDensityMap()
578 void Micropolis::drawPollutionMap()
598 void Micropolis::drawCrimeRateMap()
617 void Micropolis::drawLandValueMap()
637 void Micropolis::drawFireRadius()
655 void Micropolis::drawPoliceRadius()
673 void Micropolis::memDrawMap()
676 switch (view->map_state) {
699 drawLilTransMap(view);
703 drawPopulationDensity(view);
707 drawRateOfGrowth(view);
710 case MAP_TYPE_TRAFFIC:
711 drawTrafficDensityMap(view);
715 drawPollutionDensityMap(view);
719 drawCrimeRateMap(view);
723 drawLandValueMap(view);
727 drawFireRadius(view);
731 drawPoliceRadius(view);
757 void Micropolis::ditherMap()
832 void Micropolis::maybeDrawRect(
839 if (val == VAL_NONE) {
853 void Micropolis::drawRect(
DATA worldGet(int x, int y) const
const int MAP_W
Number of clusters in horizontal direction.
const int MAP_H
Number of clusters in vertical direction.
DATA get(int x, int y) const
MapShort8 policeStationEffectMap
MapByte2 crimeRateMap
Crime rate map.
MapShort8 fireStationEffectMap
unsigned short * map[WORLD_W]
MapByte2 pollutionDensityMap
Pollution density map.
MapByte2 trafficDensityMap
Traffic density map.
MapByte2 populationDensityMap
Population density map.
MapByte2 landValueMap
Land value map.
MapShort8 rateOfGrowthMap
Header file for Micropolis game engine.
@ MAP_TYPE_POLLUTION
Pollution.
@ MAP_TYPE_POPULATION_DENSITY
Population density.
@ MAP_TYPE_DYNAMIC
Dynamic filter.
@ MAP_TYPE_LAND_VALUE
Land value.
@ MAP_TYPE_FIRE_RADIUS
Fire station coverage radius.
@ MAP_TYPE_CRIME
Crime rate.
@ MAP_TYPE_IND
Industrial zones.
@ MAP_TYPE_COM
Commercial zones.
@ MAP_TYPE_RES
Residential zones.
@ MAP_TYPE_POWER
Power connectivity.
@ MAP_TYPE_RATE_OF_GROWTH
Rate of growth.
@ MAP_TYPE_POLICE_RADIUS
Police station coverage radius.
@ PORTBASE
Top-left tile of the seaport.
@ INDBASE
Top-left tile of empty industrial zone.