From cbf48c4dd9aa4268df835e6ac1207db8094a935d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 12 Dec 2022 11:17:55 +0000 Subject: [PATCH] Change: Add extra random seed to StartupEngines(). This means that calling reset_engines will rerandomise introduction dates and reliability. Probably not necessary. --- src/engine.cpp | 10 ++++++---- src/engine_func.h | 2 +- src/saveload/oldloader_sl.cpp | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/engine.cpp b/src/engine.cpp index 8bd14849ad..3423c7f40f 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -648,8 +648,9 @@ void SetYearEngineAgingStops() * Start/initialise one engine. * @param e The engine to initialise. * @param aging_date The date used for age calculations. + * @param seed Random seed. */ -void StartupOneEngine(Engine *e, Date aging_date) +void StartupOneEngine(Engine *e, Date aging_date, uint32 seed) { const EngineInfo *ei = &e->info; @@ -662,7 +663,7 @@ void StartupOneEngine(Engine *e, Date aging_date) * Make sure they use the same randomisation of the date. */ SavedRandomSeeds saved_seeds; SaveRandomSeeds(&saved_seeds); - SetRandomSeed(_settings_game.game_creation.generation_seed ^ + SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^ ei->base_intro ^ e->type ^ e->GetGRFID()); @@ -684,7 +685,7 @@ void StartupOneEngine(Engine *e, Date aging_date) re = Engine::Get(re->info.variant_id); } - SetRandomSeed(_settings_game.game_creation.generation_seed ^ + SetRandomSeed(_settings_game.game_creation.generation_seed ^ seed ^ (re->index << 16) ^ (re->info.base_intro << 12) ^ (re->info.decay_speed << 8) ^ (re->info.lifelength << 4) ^ re->info.retire_early ^ e->type ^ @@ -719,9 +720,10 @@ void StartupEngines() { /* Aging of vehicles stops, so account for that when starting late */ const Date aging_date = std::min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1)); + uint32 seed = Random(); for (Engine *e : Engine::Iterate()) { - StartupOneEngine(e, aging_date); + StartupOneEngine(e, aging_date, seed); } for (Engine *e : Engine::Iterate()) { CalcEngineReliability(e, false); diff --git a/src/engine_func.h b/src/engine_func.h index f7d7dad9f8..0d69743bfe 100644 --- a/src/engine_func.h +++ b/src/engine_func.h @@ -27,7 +27,7 @@ bool IsEngineRefittable(EngineID engine); void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, CargoTypes *refits, CargoID cargo_type, uint cargo_capacity); void SetYearEngineAgingStops(); void CalcEngineReliability(Engine *e, bool new_month); -void StartupOneEngine(Engine *e, Date aging_date); +void StartupOneEngine(Engine *e, Date aging_date, uint32 seed); uint GetTotalCapacityOfArticulatedParts(EngineID engine); diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 74a2996601..fc09c7e787 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -401,7 +401,7 @@ static bool FixTTOEngines() if (oi == 255) { /* Default engine is used */ _date += DAYS_TILL_ORIGINAL_BASE_YEAR; - StartupOneEngine(e, aging_date); + StartupOneEngine(e, aging_date, 0); CalcEngineReliability(e, false); e->intro_date -= DAYS_TILL_ORIGINAL_BASE_YEAR; _date -= DAYS_TILL_ORIGINAL_BASE_YEAR;