Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codechange: Make HouseSpec list and cached building counts dynamic. #12287

Merged
merged 2 commits into from Mar 28, 2024

Conversation

PeterN
Copy link
Member

@PeterN PeterN commented Mar 12, 2024

Motivation / Problem

HouseSpecs and cached building counts use fixed size arrays. These arrays are

  1. larger than necessary with default houses and
  2. would be even larger if the house type limits were to be increased.

There are also some loops that go through all 512 possible House IDs, even though by default only 110 are used.

Description

Replace HouseSpecs array with a vector, allocated as needed.

Change BuildingCounts to use vectors too -- these now require a bit of extra management to make sure they are initialized to the correct size when created.

This is based on how ObjectSpecs are dynamically allocated.

Limitations

TownCache is now 96 bytes + vector allocation, instead of a fixed 1880 bytes, however it now needs to allocate extra memory for each town, 2 bytes for each house type and 2 bytes for each class. By default this is 220 bytes and 2 bytes (there are no classes by default).

BuildingCounts could perhaps be resized on-demand in IncreaseBuildingCount which might reduce the (default) 220 bytes a little but means there'd be random allocations occurring.

Checklist for review

Some things are not automated, and forgotten often. This list is a reminder for the reviewers.

  • The bug fix is important enough to be backported? (label: 'backport requested')
  • This PR touches english.txt or translations? Check the guidelines
  • This PR affects the save game format? (label 'savegame upgrade')
  • This PR affects the GS/AI API? (label 'needs review: Script API')
    • ai_changelog.hpp, game_changelog.hpp need updating.
    • The compatibility wrappers (compat_*.nut) need updating.
  • This PR affects the NewGRF API? (label 'needs review: NewGRF')

@michicc michicc merged commit e16b982 into OpenTTD:master Mar 28, 2024
15 checks passed
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.

None yet

3 participants