src/misc.cpp
branchcpp_gui
changeset 6298 c30fe89622df
parent 6285 187e3ef04cc9
child 6303 84c215fc8eb8
equal deleted inserted replaced
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