Mercurial > hg > openttd
changeset 11925:fa2b09b44490 draft
(svn r16328) -Fix: desync when removing lots of stations
author | rubidium <rubidium@openttd.org> |
---|---|
date | Sun, 17 May 2009 10:19:00 +0000 |
parents | fccc9cea27a7 |
children | dd6202262c94 |
files | src/saveload/misc_sl.cpp src/saveload/oldloader_sl.cpp src/saveload/station_sl.cpp src/station_cmd.cpp src/variables.h |
diffstat | 5 files changed, 8 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -65,7 +65,7 @@ SLEG_CONDVAR(_cur_tileloop_tile, SLE_FILE_U16 | SLE_VAR_U32, 0, 5), SLEG_CONDVAR(_cur_tileloop_tile, SLE_UINT32, 6, SL_MAX_VERSION), SLEG_VAR(_disaster_delay, SLE_UINT16), - SLEG_VAR(_station_tick_ctr, SLE_UINT16), + SLE_CONDNULL(2, 0, 119), SLEG_VAR(_random.state[0], SLE_UINT32), SLEG_VAR(_random.state[1], SLE_UINT32), SLEG_CONDVAR(_cur_town_ctr, SLE_FILE_U8 | SLE_VAR_U32, 0, 9),
--- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -1707,8 +1707,7 @@ OCL_CNULL( OC_TTD, 144 ), ///< AI cargo-stuff, calculated in InitializeLandscapeVariables OCL_NULL( 2 ), ///< Company indexes of companies, no longer in use - - OCL_VAR ( OC_FILE_U8 | OC_VAR_U16, 1, &_station_tick_ctr ), + OCL_NULL( 1 ), ///< Station tick counter, no longer in use OCL_VAR ( OC_UINT8, 1, &_settings_game.locale.currency ), OCL_VAR ( OC_UINT8, 1, &_settings_game.locale.units ),
--- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -195,9 +195,6 @@ SaveLoad_STNS(st); } - - /* This is to ensure all pointers are within the limits of _stations_size */ - if (_station_tick_ctr > GetMaxStationIndex()) _station_tick_ctr = 0; } static void Save_ROADSTOP()
--- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2699,7 +2699,11 @@ return VETSB_CONTINUE; } -/* this function is called for one station each tick */ +/** + * This function is called for each station once every 250 ticks. + * Not all stations will get the tick at the same time. + * @param st the station receiving the tick. + */ static void StationHandleBigTick(Station *st) { UpdateStationAcceptance(st, true); @@ -2839,11 +2843,6 @@ { if (_game_mode == GM_EDITOR) return; - uint i = _station_tick_ctr; - if (++_station_tick_ctr > GetMaxStationIndex()) _station_tick_ctr = 0; - - if (Station::IsValidID(i)) StationHandleBigTick(Station::Get(i)); - Station *st; FOR_ALL_STATIONS(st) { StationHandleSmallTick(st); @@ -2852,6 +2851,7 @@ * Station index is included so that triggers are not all done * at the same time. */ if ((_tick_counter + st->index) % 250 == 0) { + StationHandleBigTick(st); StationAnimationTrigger(st, st->xy, STAT_ANIM_250_TICKS); } } @@ -3211,8 +3211,6 @@ /* Clean the roadstop pool and create 1 block in it */ _RoadStop_pool.CleanPool(); _RoadStop_pool.AddBlockToPool(); - - _station_tick_ctr = 0; } static CommandCost TerraformTile_Station(TileIndex tile, DoCommandFlag flags, uint z_new, Slope tileh_new)
--- a/src/variables.h +++ b/src/variables.h @@ -18,10 +18,6 @@ /* Also save scrollpos_x, scrollpos_y and zoom */ VARDEF uint16 _disaster_delay; -/* Determines what station to operate on in the - * tick handler. */ -VARDEF uint16 _station_tick_ctr; - /* Determines how often to run the tree loop */ VARDEF byte _trees_tick_ctr;