(svn r2021) Fix: Enlarge _cur_town_ctr from byte to uint32 so that all the towns are considered when growing them even for big maps, where much more than 256 towns are around; reported by Tomasz Dubiński <uboottd@hydra.polsl.gliwice.pl>. The savegame still saves just the lowest 8 bits but that doesn't hurt so much.

This commit is contained in:
pasky 2005-03-17 23:12:23 +00:00
parent f82893680b
commit 49f769948b
3 changed files with 7 additions and 2 deletions

5
misc.c
View File

@ -772,6 +772,11 @@ static const SaveLoadGlobVarList _date_desc[] = {
{&_station_tick_ctr, SLE_UINT16, 0, 255}, {&_station_tick_ctr, SLE_UINT16, 0, 255},
{&_random_seeds[0][0], SLE_UINT32, 0, 255}, {&_random_seeds[0][0], SLE_UINT32, 0, 255},
{&_random_seeds[0][1], SLE_UINT32, 0, 255}, {&_random_seeds[0][1], SLE_UINT32, 0, 255},
/* XXX: We save only a portion of the _cur_town_ctr, this should be
* fixed in the next revision bump. It does not hurt so much since
* it just gives a small single-time penalty to the towns with higher
* IDs at the load time. _cur_town_ctr is zeroed in InitializeTowns()
* so the higher octets do not interfere at this time. */
{&_cur_town_ctr, SLE_UINT8, 0, 255}, {&_cur_town_ctr, SLE_UINT8, 0, 255},
{&_cur_player_tick_index, SLE_FILE_U8 | SLE_VAR_UINT, 0, 255}, {&_cur_player_tick_index, SLE_FILE_U8 | SLE_VAR_UINT, 0, 255},
{&_next_competitor_start, SLE_FILE_U16 | SLE_VAR_UINT, 0, 255}, {&_next_competitor_start, SLE_FILE_U16 | SLE_VAR_UINT, 0, 255},

View File

@ -442,7 +442,7 @@ void OnTick_Town(void)
for (counter += GetTownPoolSize(); for (counter += GetTownPoolSize();
counter >= TOWN_GROWTH_FREQUENCY; counter >= TOWN_GROWTH_FREQUENCY;
counter -= TOWN_GROWTH_FREQUENCY) { counter -= TOWN_GROWTH_FREQUENCY) {
int i = _cur_town_ctr; uint32 i = _cur_town_ctr;
Town *t; Town *t;
if (++_cur_town_ctr >= GetTownPoolSize()) if (++_cur_town_ctr >= GetTownPoolSize())

View File

@ -84,7 +84,7 @@ VARDEF uint32 _random_seeds[2][2];
VARDEF uint32 _player_seeds[MAX_PLAYERS][2]; VARDEF uint32 _player_seeds[MAX_PLAYERS][2];
// Iterator through all towns in OnTick_Town // Iterator through all towns in OnTick_Town
VARDEF byte _cur_town_ctr; VARDEF uint32 _cur_town_ctr;
VARDEF uint _cur_player_tick_index; VARDEF uint _cur_player_tick_index;
VARDEF uint _next_competitor_start; VARDEF uint _next_competitor_start;