Micropolis
animate.cpp
Go to the documentation of this file.
1/* animate.cpp
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
76
77
78#include "micropolis.h"
79
80
82
92static short animatedTiles[TILE_COUNT] = {
93 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
94 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
95 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
96 48, 49, 50, 51, 52, 53, 54, 55,
97 /* Fire */
98 57, 58, 59, 60, 61, 62, 63, 56,
99 /* No Traffic */
100 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
101 /* Light Traffic */
102 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
103 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
104 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
105 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
106 /* Heavy Traffic */
107 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
108 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
109 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
110 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
111 /* Wires & Rails */
112 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
113 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
114 /* Residential */
115 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
116 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
117 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
118 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
119 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
120 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
121 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351,
122 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
123 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
124 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399,
125 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
126 416, 417, 418, 419, 420, 421, 422,
127 /* Commercial */
128 423, 424, 425, 426, 427, 428, 429, 430, 431,
129 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
130 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463,
131 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479,
132 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495,
133 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511,
134 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527,
135 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543,
136 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559,
137 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575,
138 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591,
139 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607,
140 608, 609, 610, 611,
141 /* Industrial */
142 612, 613, 614, 615, 616, 617, 618, 619, 620, 852, 622, 623,
143 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639,
144 640, 884, 642, 643, 888, 645, 646, 647, 648, 892, 896, 651, 652, 653, 654, 655,
145 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671,
146 672, 673, 674, 675, 900, 904, 678, 679, 680, 681, 682, 683, 684, 685, 908, 687,
147 688, 912, 690, 691, 692,
148 /* SeaPort */
149 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703,
150 704, 705, 706, 707, 708,
151 /* AirPort */
152 // 832 was previous value of 711, to start radar
153 // animation, but now we break the link and the
154 // simulator switches the tiles.
155 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719,
156 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735,
157 736, 737, 738, 739, 740, 741, 742, 743, 744,
158 /* Coal power */
159 745, 746, 916, 920, 749, 750, 924,
160 928, 753, 754, 755, 756, 757, 758, 759, 760,
161 /* Fire Dept */
162 761, 762, 763, 764, 765, 766, 767,
163 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778,
164 /* Stadium */
165 779, 780, 781, 782, 783,
166 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794,
167 /* Stadium Anims */
168 795, 796, 797, 798, 799,
169 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810,
170 /* Nuclear Power */
171 811, 812, 813, 814, 815,
172 816, 817, 818, 819, 952, 821, 822, 823, 824, 825, 826,
173 /* Power out + Bridges */
174 827, 828, 829, 830, 831,
175 /* Radar dish */
176 833, 834, 835, 836, 837, 838, 839, 832,
177 /* Fountain / Flag */
178 841, 842, 843, 840, 845, 846, 847, 848,
179 849, 850, 851, 844, 853, 854, 855, 856, 857, 858, 859, 852,
180 /* zone destruct & rubblize */
181 861, 862, 863, 864,
182 865, 866, 867, 867,
183 /* totally unsure */
184 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879,
185 880, 881, 882, 883,
186 /* Smoke stacks */
187 885, 886, 887, 884, 889, 890, 891, 888, 893, 894, 895, 892,
188 897, 898, 899, 896, 901, 902, 903, 900, 905, 906, 907, 904, 909, 910, 911, 908,
189 913, 914, 915, 912, 917, 918, 919, 916, 921, 922, 923, 920, 925, 926, 927, 924,
190 929, 930, 931, 928,
191 /* Stadium Playfield */
192 933, 934, 935, 936, 937, 938, 939, 932, 941, 942, 943, 944,
193 945, 946, 947, 940,
194 /* Bridge up chars */
195 948, 949, 950, 951,
196 /* Nuclear swirl */
197 953, 954, 955, 952,
198 /* Churches */
199 956, 957, 958, 959,
200 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975,
201 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991,
202 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007,
203 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
204};
205
206
208
209
210/* comefrom: moveWorld doEditWindow scoreDoer doMapInFront graphDoer */
211void Micropolis::animateTiles()
212{
213 unsigned short tilevalue, tileflags;
214 unsigned short *tMapPtr;
215 int i;
216
217 /* Animate whole world */
218 tMapPtr = (unsigned short *)&(map[0][0]);
219
220 for (i = WORLD_W * WORLD_H; i > 0; i--) {
221 tilevalue = (*tMapPtr);
222 if (tilevalue & ANIMBIT) {
223 tileflags = tilevalue & ALLBITS;
224 tilevalue &= LOMASK;
225 tilevalue = animatedTiles[tilevalue];
226 tilevalue |= tileflags;
227 (*tMapPtr) = tilevalue;
228 }
229 tMapPtr++;
230 }
231}
232
233
234int Micropolis::getNextAnimatedTile(int index)
235{
236 if ((index < 0) || (index >= TILE_COUNT)) {
237 return -1;
238 }
239
240 return animatedTiles[index];
241}
242
243
static short animatedTiles[TILE_COUNT]
Definition animate.cpp:92
unsigned short * map[WORLD_W]
static const int WORLD_H
Definition map_type.h:95
static const int WORLD_W
Definition map_type.h:90
Header file for Micropolis game engine.
@ LOMASK
Mask for the Tiles part of the tile.
Definition tool.h:129
@ ANIMBIT
bit 11, tile is animated.
Definition tool.h:124
@ ALLBITS
Mask for the bits-part of the tile.
Definition tool.h:128