]> cvs.zerfleddert.de Git - micropolis/blame - src/sim/w_util.c
encapsulate sdl_mixer stuff in #ifdef WITH_SDL_MIXER
[micropolis] / src / sim / w_util.c
CommitLineData
6a5fa4e0
MG
1/* w_util.c
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#include "sim.h"
63
64
65/* comefrom: drawTaxesCollected incBoxValue decBoxValue drawCurrentFunds
66 drawActualBox UpdateFunds updateCurrentCost */
67makeDollarDecimalStr(char *numStr, char *dollarStr)
68{
69 register short leftMostSet;
70 short numOfDigits;
71 short numOfChars;
72 register short numOfCommas;
73 register short dollarIndex = 0;
74 register short numIndex = 0;
75 register short x;
76
77 numOfDigits = strlen(numStr);
78
79 if (numOfDigits == 1) {
80 dollarStr[0] = '$';
81 dollarStr[1] = numStr[ 0 ];
82 dollarStr[2] = 0;
83 return;
84 } else if (numOfDigits == 2) {
85 dollarStr[0] = '$';
86 dollarStr[1] = numStr[0];
87 dollarStr[2] = numStr[1];
88 dollarStr[3] = 0;
89 return;
90 } else if (numOfDigits == 3) {
91 dollarStr[0] = '$';
92 dollarStr[1] = numStr[0];
93 dollarStr[2] = numStr[1];
94 dollarStr[3] = numStr[2];
95 dollarStr[4] = 0;
96 } else {
97 leftMostSet = numOfDigits % 3;
98 if (leftMostSet == 0)
99 leftMostSet = 3;
100
101 numOfCommas = (numOfDigits - 1) / 3;
102
103 /* add 1 for the dollar sign */
104 numOfChars = numOfDigits + numOfCommas + 1;
105
106 dollarStr[numOfChars] = 0;
107
108 dollarStr[dollarIndex++] = '$';
109
110 for (x = 1; x <= leftMostSet; x++) {
111 dollarStr[dollarIndex++] = numStr[numIndex++];
112 }
113
114 for (x = 1; x <= numOfCommas; x++) {
115 dollarStr[dollarIndex++] = ',';
116 dollarStr[dollarIndex++] = numStr[numIndex++];
117 dollarStr[dollarIndex++] = numStr[numIndex++];
118 dollarStr[dollarIndex++] = numStr[numIndex++];
119 }
120 }
121}
122
123
124Pause()
125{
126 if (!sim_paused) {
127 sim_paused_speed = SimMetaSpeed;
128 setSpeed(0);
129 sim_paused = 1;
130 }
131}
132
133
134Resume()
135{
136 if (sim_paused) {
137 sim_paused = 0;
138 setSpeed(sim_paused_speed);
139 }
140}
141
142
143setSpeed(short speed)
144{
145 if (speed < 0) speed = 0;
146 else if (speed > 3) speed = 3;
147
148 SimMetaSpeed = speed;
149
150 if (sim_paused) {
151 sim_paused_speed = SimMetaSpeed;
152 speed = 0;
153 }
154
155 SimSpeed = speed;
156
157 if (speed == 0) {
158 StopMicropolisTimer();
159 } else {
160 StartMicropolisTimer();
161 }
162
163 { char buf[256];
164 sprintf(buf, "UISetSpeed %d", sim_paused ? 0 : SimMetaSpeed);
165 Eval(buf);
166 }
167}
168
169
170setSkips(int skips)
171{
172 sim_skips = skips;
173 sim_skip = 0;
174}
175
176
177SetGameLevelFunds(short level)
178{
179 switch (level) {
180 default:
181 case 0:
182 SetFunds(20000);
183 SetGameLevel(0);
184 break;
185 case 1:
186 SetFunds(10000);
187 SetGameLevel(1);
188 break;
189 case 2:
190 SetFunds(5000);
191 SetGameLevel(2);
192 break;
193 }
194}
195
196
197SetGameLevel(short level)
198{
199 GameLevel = level;
200 UpdateGameLevel();
201}
202
203
204UpdateGameLevel()
205{
206 char buf[256];
207
208 sprintf(buf, "UISetGameLevel %d", GameLevel);
209 Eval(buf);
210}
211
212
213setCityName(char *name)
214{
215 char *cp = name;
216
217 while (*cp) {
218 if (!isalnum(*cp))
219 *cp = '_';
220 cp++;
221 }
222 setAnyCityName(name);
223}
224
225
226setAnyCityName(char *name)
227{
228 char buf[1024];
229
230 CityName = name;
231 sprintf(buf, "UISetCityName {%s}", CityName);
232 Eval(buf);
233}
234
235
236SetYear(int year)
237{
238 // Must prevent year from going negative, since it screws up the non-floored modulo arithmetic.
239 if (year < StartingYear) {
240 year = StartingYear;
241 }
242
243 year = (year - StartingYear) - (CityTime / 48);
244 CityTime += year * 48;
245 doTimeStuff();
246}
247
248
249int
250CurrentYear()
251{
252 return (CityTime/48 + StartingYear);
253}
254
255
256DoSetMapState(SimView *view, short state)
257{
258 char buf[256];
259
260 view->map_state = state;
261 view->invalid = 1;
262 EventuallyRedrawView(view);
263
264 sprintf(buf, "UISetMapState %s %d", Tk_PathName(view->tkwin), state);
265 Eval(buf);
266}
267
268
269DoNewGame()
270{
271 Eval("UINewGame");
272}
273
274
275DoGeneratedCityImage(char *name, int time, int pop, char *class, int score)
276{
277 /* XXX: TODO: print city */
278}
279
280
281DoStartElmd()
282{
283 /* XXX: TODO: start elm daemon */
284}
285
286
287DoPopUpMessage(char *msg)
288{
289 char buf[1024];
290
291 sprintf(buf, "UIPopUpMessage {%s}", msg);
292 Eval(buf);
293}
294
295
Impressum, Datenschutz