Skip to content

Scenarios: skip destroyed ships before calling their methods - #2908

Open
dj803 wants to merge 1 commit into
daid:masterfrom
dj803:pr/scenario-destroyed-entity-guards
Open

dj803 wants to merge 1 commit into
daid:masterfrom
dj803:pr/scenario-destroyed-entity-guards

Conversation

@dj803

@dj803 dj803 commented Oct 31, 2026

Copy link
Copy Markdown
Contributor

A destroyed entity still answers isValid(), but its other methods and fields are gone, so calling them errors. When this happens inside update(), the same line usually fails every frame. After 5 errors in a row GameGlobalInfo::update stops calling update() for the rest of the game, so there is no more plot, no more waves and no win or loss check.

Scenario Trigger Fix
27 Liberation Day an object is destroyed after its nova distance was measured the nova loops skip invalid objects
39 Locust Swarm a swarm ship is killed while the swarm gathers gatherSwarm skips invalid ships
47 Scurvy Scavenger the player ship is lost setPlayer returns early
58 Fermi 500 an empty getPlayerShip(i) slot (non-nil, not valid) gatherStats checks isValid()
79 Kessler player1 is destroyed mission_start_state checks isValid()
81 Clash in Shangri-La a flagship is destroyed (20 s respawn gap) reputation is only added to a valid flagship

Testing: each error was reproduced by automated headless runs, which then finished with no Lua errors after the fix (81 ran to victory). I did not try these by hand on a release build.

🤖 Generated with Claude Code

A destroyed entity still answers isValid(), but every other method and
field is gone, so these calls error. In update(), five errors in a row
stop update() for the rest of the game: no more plot, waves or win check.

- 27 Liberation Day: nova loops skip objects destroyed since measured
- 39 Locust Swarm: gatherSwarm skips destroyed swarm ships
- 47 Scurvy Scavenger: setPlayer returns when the player ship is gone
- 58 Fermi 500: gatherStats skips a vacant getPlayerShip slot
- 79 Kessler: mission_start_state checks player1 is valid
- 81 Clash in Shangri-La: no reputation for a destroyed flagship during
  the respawn gap

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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.

1 participant