beyond-all-reason / beyond-all-reason/RecoilEngine
Spring.DestroyGroundDecal returns true but doesn't actually remove the decal
- Dominant language
- C++
- Stars
- 679
- Forks
- 290
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 40
Description
engine build 2401
Metal factions development version (not publicly available)
I got this when testing a new gadget that maintains an explosion scars table and each one has one decal associated that's created/updated/removed through the decals API.
When the scars are removed, the gadget calls Spring.DestroyGroundDecal to remove the decal, the call returns true, but the decal isn't actually removed from the table, as shown in the example below (debug lines i get from having 1 tank shooting at the same spot in a sandbox game with nothing else)

In a normal game, the number of decals grows up to 500, then they're all cleared (including the building decals which weren't handled by the gadget). Subsequent decals work normally until the 500 limit gets reached again. I get no error messages or logs from this.
if engine is limited to 500 decals, including building decals, then that's too low. Should be configurable and the default should be many times higher.
Contributor guide
Research direction
Start by reproducing the reported sandbox scenario with a gadget that creates, updates, and removes decals through Spring.DestroyGroundDecal, then inspect the decals API handling and the 500-decal limit. Done means the call actually removes the decal and the intended limit behavior is covered by a regression test or clearly documented configuration.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- api, computer-graphics, game-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100