branch | cpp_gui |
changeset 6298 | c30fe89622df |
parent 6285 | 187e3ef04cc9 |
child 6303 | 84c215fc8eb8 |
6297:4bf29d14edba | 6298:c30fe89622df |
---|---|
27 |
27 |
28 #ifdef RANDOM_DEBUG |
28 #ifdef RANDOM_DEBUG |
29 #include "network/network_data.h" |
29 #include "network/network_data.h" |
30 uint32 DoRandom(int line, const char *file) |
30 uint32 DoRandom(int line, const char *file) |
31 #else // RANDOM_DEBUG |
31 #else // RANDOM_DEBUG |
32 uint32 Random(void) |
32 uint32 Random() |
33 #endif // RANDOM_DEBUG |
33 #endif // RANDOM_DEBUG |
34 { |
34 { |
35 |
35 |
36 uint32 s; |
36 uint32 s; |
37 uint32 t; |
37 uint32 t; |
59 return GB(Random(), 0, 16) * max >> 16; |
59 return GB(Random(), 0, 16) * max >> 16; |
60 } |
60 } |
61 #endif |
61 #endif |
62 |
62 |
63 |
63 |
64 uint32 InteractiveRandom(void) |
64 uint32 InteractiveRandom() |
65 { |
65 { |
66 uint32 t = _random_seeds[1][1]; |
66 uint32 t = _random_seeds[1][1]; |
67 uint32 s = _random_seeds[1][0]; |
67 uint32 s = _random_seeds[1][0]; |
68 _random_seeds[1][0] = s + ROR(t ^ 0x1234567F, 7) + 1; |
68 _random_seeds[1][0] = s + ROR(t ^ 0x1234567F, 7) + 1; |
69 return _random_seeds[1][1] = ROR(s, 3) - 1; |
69 return _random_seeds[1][1] = ROR(s, 3) - 1; |
72 uint InteractiveRandomRange(uint max) |
72 uint InteractiveRandomRange(uint max) |
73 { |
73 { |
74 return GB(InteractiveRandom(), 0, 16) * max >> 16; |
74 return GB(InteractiveRandom(), 0, 16) * max >> 16; |
75 } |
75 } |
76 |
76 |
77 void InitializeVehicles(void); |
77 void InitializeVehicles(); |
78 void InitializeWaypoints(void); |
78 void InitializeWaypoints(); |
79 void InitializeDepots(void); |
79 void InitializeDepots(); |
80 void InitializeEngines(void); |
80 void InitializeEngines(); |
81 void InitializeOrders(void); |
81 void InitializeOrders(); |
82 void InitializeClearLand(void); |
82 void InitializeClearLand(); |
83 void InitializeRailGui(void); |
83 void InitializeRailGui(); |
84 void InitializeRoadGui(void); |
84 void InitializeRoadGui(); |
85 void InitializeAirportGui(void); |
85 void InitializeAirportGui(); |
86 void InitializeDockGui(void); |
86 void InitializeDockGui(); |
87 void InitializeIndustries(void); |
87 void InitializeIndustries(); |
88 void InitializeMainGui(void); |
88 void InitializeMainGui(); |
89 void InitializeLandscape(void); |
89 void InitializeLandscape(); |
90 void InitializeTowns(void); |
90 void InitializeTowns(); |
91 void InitializeTrees(void); |
91 void InitializeTrees(); |
92 void InitializeSigns(void); |
92 void InitializeSigns(); |
93 void InitializeStations(void); |
93 void InitializeStations(); |
94 static void InitializeNameMgr(void); |
94 static void InitializeNameMgr(); |
95 void InitializePlayers(void); |
95 void InitializePlayers(); |
96 static void InitializeCheats(void); |
96 static void InitializeCheats(); |
97 void InitializeNPF(void); |
97 void InitializeNPF(); |
98 |
98 |
99 void InitializeGame(int mode, uint size_x, uint size_y) |
99 void InitializeGame(int mode, uint size_x, uint size_y) |
100 { |
100 { |
101 AllocateMap(size_x, size_y); |
101 AllocateMap(size_x, size_y); |
102 |
102 |
103 AddTypeToEngines(); // make sure all engines have a type |
103 AddTypeToEngines(); // make sure all engines have a type |
104 |
104 |
105 SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, 0, WC_MAIN_WINDOW, 0); |
105 SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, 0, WC_MAIN_WINDOW, 0); |
106 |
106 |
107 _pause = 0; |
107 _pause_game = 0; |
108 _fast_forward = 0; |
108 _fast_forward = 0; |
109 _tick_counter = 0; |
109 _tick_counter = 0; |
110 _date_fract = 0; |
110 _date_fract = 0; |
111 _cur_tileloop_tile = 0; |
111 _cur_tileloop_tile = 0; |
112 |
112 |
168 { |
168 { |
169 return strecpy(buff, _name_array[id & ~0x600], last); |
169 return strecpy(buff, _name_array[id & ~0x600], last); |
170 } |
170 } |
171 |
171 |
172 |
172 |
173 static void InitializeCheats(void) |
173 static void InitializeCheats() |
174 { |
174 { |
175 memset(&_cheats, 0, sizeof(Cheats)); |
175 memset(&_cheats, 0, sizeof(Cheats)); |
176 } |
176 } |
177 |
177 |
178 |
178 |
179 static void InitializeNameMgr(void) |
179 static void InitializeNameMgr() |
180 { |
180 { |
181 memset(_name_array, 0, sizeof(_name_array)); |
181 memset(_name_array, 0, sizeof(_name_array)); |
182 } |
182 } |
183 |
183 |
184 StringID RealAllocateName(const char *name, byte skip, bool check_double) |
184 StringID RealAllocateName(const char *name, byte skip, bool check_double) |
202 _error_message = STR_0131_TOO_MANY_NAMES_DEFINED; |
202 _error_message = STR_0131_TOO_MANY_NAMES_DEFINED; |
203 return 0; |
203 return 0; |
204 } |
204 } |
205 } |
205 } |
206 |
206 |
207 void ConvertNameArray(void) |
207 void ConvertNameArray() |
208 { |
208 { |
209 uint i; |
209 uint i; |
210 |
210 |
211 for (i = 0; i < lengthof(_name_array); i++) { |
211 for (i = 0; i < lengthof(_name_array); i++) { |
212 const char *strfrom = _name_array[i]; |
212 const char *strfrom = _name_array[i]; |
265 |
265 |
266 return i; |
266 return i; |
267 } |
267 } |
268 |
268 |
269 |
269 |
270 static void Save_NAME(void) |
270 static void Save_NAME() |
271 { |
271 { |
272 int i; |
272 int i; |
273 |
273 |
274 for (i = 0; i != lengthof(_name_array); ++i) { |
274 for (i = 0; i != lengthof(_name_array); ++i) { |
275 if (_name_array[i][0] != '\0') { |
275 if (_name_array[i][0] != '\0') { |
277 SlArray(_name_array[i], (uint)strlen(_name_array[i]), SLE_UINT8); |
277 SlArray(_name_array[i], (uint)strlen(_name_array[i]), SLE_UINT8); |
278 } |
278 } |
279 } |
279 } |
280 } |
280 } |
281 |
281 |
282 static void Load_NAME(void) |
282 static void Load_NAME() |
283 { |
283 { |
284 int index; |
284 int index; |
285 |
285 |
286 while ((index = SlIterateArray()) != -1) { |
286 while ((index = SlIterateArray()) != -1) { |
287 SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8); |
287 SlArray(_name_array[index],SlGetFieldLength(),SLE_UINT8); |
305 SLEG_CONDVAR(_cur_town_ctr, SLE_FILE_U8 | SLE_VAR_U32, 0, 9), |
305 SLEG_CONDVAR(_cur_town_ctr, SLE_FILE_U8 | SLE_VAR_U32, 0, 9), |
306 SLEG_CONDVAR(_cur_town_ctr, SLE_UINT32, 10, SL_MAX_VERSION), |
306 SLEG_CONDVAR(_cur_town_ctr, SLE_UINT32, 10, SL_MAX_VERSION), |
307 SLEG_VAR(_cur_player_tick_index, SLE_FILE_U8 | SLE_VAR_U32), |
307 SLEG_VAR(_cur_player_tick_index, SLE_FILE_U8 | SLE_VAR_U32), |
308 SLEG_VAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32), |
308 SLEG_VAR(_next_competitor_start, SLE_FILE_U16 | SLE_VAR_U32), |
309 SLEG_VAR(_trees_tick_ctr, SLE_UINT8), |
309 SLEG_VAR(_trees_tick_ctr, SLE_UINT8), |
310 SLEG_CONDVAR(_pause, SLE_UINT8, 4, SL_MAX_VERSION), |
310 SLEG_CONDVAR(_pause_game, SLE_UINT8, 4, SL_MAX_VERSION), |
311 SLEG_CONDVAR(_cur_town_iter, SLE_UINT32, 11, SL_MAX_VERSION), |
311 SLEG_CONDVAR(_cur_town_iter, SLE_UINT32, 11, SL_MAX_VERSION), |
312 SLEG_END() |
312 SLEG_END() |
313 }; |
313 }; |
314 |
314 |
315 /* Save load date related variables as well as persistent tick counters |
315 /* Save load date related variables as well as persistent tick counters |
316 * XXX: currently some unrelated stuff is just put here */ |
316 * XXX: currently some unrelated stuff is just put here */ |
317 static void SaveLoad_DATE(void) |
317 static void SaveLoad_DATE() |
318 { |
318 { |
319 SlGlobList(_date_desc); |
319 SlGlobList(_date_desc); |
320 } |
320 } |
321 |
321 |
322 |
322 |
327 SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, 6, SL_MAX_VERSION), |
327 SLEG_CONDVAR(_saved_scrollpos_y, SLE_INT32, 6, SL_MAX_VERSION), |
328 SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8), |
328 SLEG_VAR(_saved_scrollpos_zoom, SLE_UINT8), |
329 SLEG_END() |
329 SLEG_END() |
330 }; |
330 }; |
331 |
331 |
332 static void SaveLoad_VIEW(void) |
332 static void SaveLoad_VIEW() |
333 { |
333 { |
334 SlGlobList(_view_desc); |
334 SlGlobList(_view_desc); |
335 } |
335 } |
336 |
336 |
337 static uint32 _map_dim_x; |
337 static uint32 _map_dim_x; |
341 SLEG_CONDVAR(_map_dim_x, SLE_UINT32, 6, SL_MAX_VERSION), |
341 SLEG_CONDVAR(_map_dim_x, SLE_UINT32, 6, SL_MAX_VERSION), |
342 SLEG_CONDVAR(_map_dim_y, SLE_UINT32, 6, SL_MAX_VERSION), |
342 SLEG_CONDVAR(_map_dim_y, SLE_UINT32, 6, SL_MAX_VERSION), |
343 SLEG_END() |
343 SLEG_END() |
344 }; |
344 }; |
345 |
345 |
346 static void Save_MAPS(void) |
346 static void Save_MAPS() |
347 { |
347 { |
348 _map_dim_x = MapSizeX(); |
348 _map_dim_x = MapSizeX(); |
349 _map_dim_y = MapSizeY(); |
349 _map_dim_y = MapSizeY(); |
350 SlGlobList(_map_dimensions); |
350 SlGlobList(_map_dimensions); |
351 } |
351 } |
352 |
352 |
353 static void Load_MAPS(void) |
353 static void Load_MAPS() |
354 { |
354 { |
355 SlGlobList(_map_dimensions); |
355 SlGlobList(_map_dimensions); |
356 AllocateMap(_map_dim_x, _map_dim_y); |
356 AllocateMap(_map_dim_x, _map_dim_y); |
357 } |
357 } |
358 |
358 |
359 static void Load_MAPT(void) |
359 static void Load_MAPT() |
360 { |
360 { |
361 uint size = MapSize(); |
361 uint size = MapSize(); |
362 uint i; |
362 uint i; |
363 |
363 |
364 for (i = 0; i != size;) { |
364 for (i = 0; i != size;) { |
368 SlArray(buf, lengthof(buf), SLE_UINT8); |
368 SlArray(buf, lengthof(buf), SLE_UINT8); |
369 for (j = 0; j != lengthof(buf); j++) _m[i++].type_height = buf[j]; |
369 for (j = 0; j != lengthof(buf); j++) _m[i++].type_height = buf[j]; |
370 } |
370 } |
371 } |
371 } |
372 |
372 |
373 static void Save_MAPT(void) |
373 static void Save_MAPT() |
374 { |
374 { |
375 uint size = MapSize(); |
375 uint size = MapSize(); |
376 uint i; |
376 uint i; |
377 |
377 |
378 SlSetLength(size); |
378 SlSetLength(size); |
383 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].type_height; |
383 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].type_height; |
384 SlArray(buf, lengthof(buf), SLE_UINT8); |
384 SlArray(buf, lengthof(buf), SLE_UINT8); |
385 } |
385 } |
386 } |
386 } |
387 |
387 |
388 static void Load_MAP1(void) |
388 static void Load_MAP1() |
389 { |
389 { |
390 uint size = MapSize(); |
390 uint size = MapSize(); |
391 uint i; |
391 uint i; |
392 |
392 |
393 for (i = 0; i != size;) { |
393 for (i = 0; i != size;) { |
397 SlArray(buf, lengthof(buf), SLE_UINT8); |
397 SlArray(buf, lengthof(buf), SLE_UINT8); |
398 for (j = 0; j != lengthof(buf); j++) _m[i++].m1 = buf[j]; |
398 for (j = 0; j != lengthof(buf); j++) _m[i++].m1 = buf[j]; |
399 } |
399 } |
400 } |
400 } |
401 |
401 |
402 static void Save_MAP1(void) |
402 static void Save_MAP1() |
403 { |
403 { |
404 uint size = MapSize(); |
404 uint size = MapSize(); |
405 uint i; |
405 uint i; |
406 |
406 |
407 SlSetLength(size); |
407 SlSetLength(size); |
412 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m1; |
412 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m1; |
413 SlArray(buf, lengthof(buf), SLE_UINT8); |
413 SlArray(buf, lengthof(buf), SLE_UINT8); |
414 } |
414 } |
415 } |
415 } |
416 |
416 |
417 static void Load_MAP2(void) |
417 static void Load_MAP2() |
418 { |
418 { |
419 uint size = MapSize(); |
419 uint size = MapSize(); |
420 uint i; |
420 uint i; |
421 |
421 |
422 for (i = 0; i != size;) { |
422 for (i = 0; i != size;) { |
429 ); |
429 ); |
430 for (j = 0; j != lengthof(buf); j++) _m[i++].m2 = buf[j]; |
430 for (j = 0; j != lengthof(buf); j++) _m[i++].m2 = buf[j]; |
431 } |
431 } |
432 } |
432 } |
433 |
433 |
434 static void Save_MAP2(void) |
434 static void Save_MAP2() |
435 { |
435 { |
436 uint size = MapSize(); |
436 uint size = MapSize(); |
437 uint i; |
437 uint i; |
438 |
438 |
439 SlSetLength(size * sizeof(_m[0].m2)); |
439 SlSetLength(size * sizeof(_m[0].m2)); |
444 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m2; |
444 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m2; |
445 SlArray(buf, lengthof(buf), SLE_UINT16); |
445 SlArray(buf, lengthof(buf), SLE_UINT16); |
446 } |
446 } |
447 } |
447 } |
448 |
448 |
449 static void Load_MAP3(void) |
449 static void Load_MAP3() |
450 { |
450 { |
451 uint size = MapSize(); |
451 uint size = MapSize(); |
452 uint i; |
452 uint i; |
453 |
453 |
454 for (i = 0; i != size;) { |
454 for (i = 0; i != size;) { |
458 SlArray(buf, lengthof(buf), SLE_UINT8); |
458 SlArray(buf, lengthof(buf), SLE_UINT8); |
459 for (j = 0; j != lengthof(buf); j++) _m[i++].m3 = buf[j]; |
459 for (j = 0; j != lengthof(buf); j++) _m[i++].m3 = buf[j]; |
460 } |
460 } |
461 } |
461 } |
462 |
462 |
463 static void Save_MAP3(void) |
463 static void Save_MAP3() |
464 { |
464 { |
465 uint size = MapSize(); |
465 uint size = MapSize(); |
466 uint i; |
466 uint i; |
467 |
467 |
468 SlSetLength(size); |
468 SlSetLength(size); |
473 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m3; |
473 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m3; |
474 SlArray(buf, lengthof(buf), SLE_UINT8); |
474 SlArray(buf, lengthof(buf), SLE_UINT8); |
475 } |
475 } |
476 } |
476 } |
477 |
477 |
478 static void Load_MAP4(void) |
478 static void Load_MAP4() |
479 { |
479 { |
480 uint size = MapSize(); |
480 uint size = MapSize(); |
481 uint i; |
481 uint i; |
482 |
482 |
483 for (i = 0; i != size;) { |
483 for (i = 0; i != size;) { |
487 SlArray(buf, lengthof(buf), SLE_UINT8); |
487 SlArray(buf, lengthof(buf), SLE_UINT8); |
488 for (j = 0; j != lengthof(buf); j++) _m[i++].m4 = buf[j]; |
488 for (j = 0; j != lengthof(buf); j++) _m[i++].m4 = buf[j]; |
489 } |
489 } |
490 } |
490 } |
491 |
491 |
492 static void Save_MAP4(void) |
492 static void Save_MAP4() |
493 { |
493 { |
494 uint size = MapSize(); |
494 uint size = MapSize(); |
495 uint i; |
495 uint i; |
496 |
496 |
497 SlSetLength(size); |
497 SlSetLength(size); |
502 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m4; |
502 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m4; |
503 SlArray(buf, lengthof(buf), SLE_UINT8); |
503 SlArray(buf, lengthof(buf), SLE_UINT8); |
504 } |
504 } |
505 } |
505 } |
506 |
506 |
507 static void Load_MAP5(void) |
507 static void Load_MAP5() |
508 { |
508 { |
509 uint size = MapSize(); |
509 uint size = MapSize(); |
510 uint i; |
510 uint i; |
511 |
511 |
512 for (i = 0; i != size;) { |
512 for (i = 0; i != size;) { |
516 SlArray(buf, lengthof(buf), SLE_UINT8); |
516 SlArray(buf, lengthof(buf), SLE_UINT8); |
517 for (j = 0; j != lengthof(buf); j++) _m[i++].m5 = buf[j]; |
517 for (j = 0; j != lengthof(buf); j++) _m[i++].m5 = buf[j]; |
518 } |
518 } |
519 } |
519 } |
520 |
520 |
521 static void Save_MAP5(void) |
521 static void Save_MAP5() |
522 { |
522 { |
523 uint size = MapSize(); |
523 uint size = MapSize(); |
524 uint i; |
524 uint i; |
525 |
525 |
526 SlSetLength(size); |
526 SlSetLength(size); |
531 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m5; |
531 for (j = 0; j != lengthof(buf); j++) buf[j] = _m[i++].m5; |
532 SlArray(buf, lengthof(buf), SLE_UINT8); |
532 SlArray(buf, lengthof(buf), SLE_UINT8); |
533 } |
533 } |
534 } |
534 } |
535 |
535 |
536 static void Load_MAP6(void) |
536 static void Load_MAP6() |
537 { |
537 { |
538 /* Still available for loading old games */ |
538 /* Still available for loading old games */ |
539 uint size = MapSize(); |
539 uint size = MapSize(); |
540 uint i; |
540 uint i; |
541 |
541 |
561 for (j = 0; j != lengthof(buf); j++) _m[i++].m6 = buf[j]; |
561 for (j = 0; j != lengthof(buf); j++) _m[i++].m6 = buf[j]; |
562 } |
562 } |
563 } |
563 } |
564 } |
564 } |
565 |
565 |
566 static void Save_MAP6(void) |
566 static void Save_MAP6() |
567 { |
567 { |
568 uint size = MapSize(); |
568 uint size = MapSize(); |
569 uint i; |
569 uint i; |
570 |
570 |
571 SlSetLength(size); |
571 SlSetLength(size); |
577 SlArray(buf, lengthof(buf), SLE_UINT8); |
577 SlArray(buf, lengthof(buf), SLE_UINT8); |
578 } |
578 } |
579 } |
579 } |
580 |
580 |
581 |
581 |
582 static void Save_CHTS(void) |
582 static void Save_CHTS() |
583 { |
583 { |
584 byte count = sizeof(_cheats)/sizeof(Cheat); |
584 byte count = sizeof(_cheats)/sizeof(Cheat); |
585 Cheat* cht = (Cheat*) &_cheats; |
585 Cheat* cht = (Cheat*) &_cheats; |
586 Cheat* cht_last = &cht[count]; |
586 Cheat* cht_last = &cht[count]; |
587 |
587 |
590 SlWriteByte(cht->been_used); |
590 SlWriteByte(cht->been_used); |
591 SlWriteByte(cht->value); |
591 SlWriteByte(cht->value); |
592 } |
592 } |
593 } |
593 } |
594 |
594 |
595 static void Load_CHTS(void) |
595 static void Load_CHTS() |
596 { |
596 { |
597 Cheat* cht = (Cheat*)&_cheats; |
597 Cheat* cht = (Cheat*)&_cheats; |
598 uint count = SlGetFieldLength() / 2; |
598 uint count = SlGetFieldLength() / 2; |
599 uint i; |
599 uint i; |
600 |
600 |