Skip to content

Conversation

@lloydsparkes
Copy link
Owner

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 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants