From 6f963a12688c178b7c23ce46ee23e63ea95c27e3 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 13 Nov 2022 11:53:16 +0000 Subject: [PATCH] Include company infrastructure totals in state checksum --- src/core/checksum_func.hpp | 2 +- src/openttd.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/core/checksum_func.hpp b/src/core/checksum_func.hpp index 049460b260..a70911bc4c 100644 --- a/src/core/checksum_func.hpp +++ b/src/core/checksum_func.hpp @@ -35,7 +35,7 @@ extern SimpleChecksum64 _state_checksum; inline void UpdateStateChecksum(uint64 input) { - _state_checksum.Update(input); + if (_networking) _state_checksum.Update(input); } #ifdef RANDOM_DEBUG diff --git a/src/openttd.cpp b/src/openttd.cpp index 4c6aff8354..a9fcd6845e 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1985,9 +1985,28 @@ void StateGameLoop() CallWindowGameTickEvent(); NewsLoop(); - for (Company *c : Company::Iterate()) { - DEBUG_UPDATESTATECHECKSUM("Company: %u, Money: " OTTD_PRINTF64, c->index, (int64)c->money); - UpdateStateChecksum(c->money); + if (_networking) { + for (Company *c : Company::Iterate()) { + DEBUG_UPDATESTATECHECKSUM("Company: %u, Money: " OTTD_PRINTF64, c->index, (int64)c->money); + UpdateStateChecksum(c->money); + + for (uint i = 0; i < ROADTYPE_END; i++) { + DEBUG_UPDATESTATECHECKSUM("Company: %u, road[%u]: %u", c->index, i, c->infrastructure.road[i]); + UpdateStateChecksum(c->infrastructure.road[i]); + } + + for (uint i = 0; i < RAILTYPE_END; i++) { + DEBUG_UPDATESTATECHECKSUM("Company: %u, rail[%u]: %u", c->index, i, c->infrastructure.rail[i]); + UpdateStateChecksum(c->infrastructure.rail[i]); + } + + DEBUG_UPDATESTATECHECKSUM("Company: %u, signal: %u, water: %u, station: %u, airport: %u", + c->index, c->infrastructure.signal, c->infrastructure.water, c->infrastructure.station, c->infrastructure.airport); + UpdateStateChecksum(c->infrastructure.signal); + UpdateStateChecksum(c->infrastructure.water); + UpdateStateChecksum(c->infrastructure.station); + UpdateStateChecksum(c->infrastructure.airport); + } } cur_company.Restore(); }