Fix: Correct city decay bug in simulation logic#5
Open
lloydsparkes wants to merge 2 commits intomasterfrom
Open
Fix: Correct city decay bug in simulation logic#5lloydsparkes wants to merge 2 commits intomasterfrom
lloydsparkes wants to merge 2 commits intomasterfrom
Conversation
The original C# port contained a bug in the zone growth/decay logic that was causing cities to gradually decay to zero. The comparison to determine whether a zone should grow or shrink was flawed due to a misinterpretation of the original C code's random number generation. This commit corrects the logic in the `DoResidential`, `DoCommercial`, and `DoIndustrial` methods in `Micropolis.Core/Micropolis.Zone.cs`. The incorrect comparison has been replaced with a more balanced one that correctly models the probabilistic nature of zone development, preventing the city from decaying over time.
The city decay bug was caused by a flawed implementation of the `GetRandom16Signed` method. The original C# porting attempt for this function did not correctly convert an unsigned 16-bit value to a signed one; instead, it inverted the distribution of negative numbers. This incorrect distribution broke the probabilistic calculations for zone growth and decay, making it nearly impossible for zones to grow and leading to the gradual decay of the entire city. This commit replaces the faulty logic with a standard and correct two's complement conversion by casting the unsigned 16-bit integer to a short. This restores the intended random number distribution, fixes the simulation's balance, and resolves the city decay bug.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The original C# port contained a bug in the zone growth/decay logic that was causing cities to gradually decay to zero. The comparison to determine whether a zone should grow or shrink was flawed due to a misinterpretation of the original C code's random number generation.
This commit corrects the logic in the
DoResidential,DoCommercial, andDoIndustrialmethods inMicropolis.Core/Micropolis.Zone.cs. The incorrect comparison has been replaced with a more balanced one that correctly models the probabilistic nature of zone development, preventing the city from decaying over time.