docs(cliffs): the CRATER PLACER is ADD-ONLY - the last untouched idea (#84) - #140
Merged
Conversation
…#84) wip: banner added after #139 lands, to keep the UPDATE numbering contiguous. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012VRsPwmSwjnFKVSS6jx9Mo
…empty Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012VRsPwmSwjnFKVSS6jx9Mo
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.
CliffCraterPlacer::tryToPlaceCliffAsCraterwas the third and last of UPDATE 9's untouched ideas, carried there as "ruled out for the residual by position, never ruled out as a mechanism". It is add-only, so it cannot be the mechanism.The read
tryToPlaceCliffAsCrater(Surface&, MapPosition const&, CliffPrototype const&, unsigned int)0x10160bc34— thin wrapper, a singleblto the overload belowtryToPlaceCliffAsCrater(…, CraterPlacementDefinition const&, RandomGenerator&)0x10160bcac— callscalculateCliffSegments, thenSurface::addEntityper accepted segmentCliffCraterPlacer::calculateCliffSegments0x10160be6c— callsSurface::wouldCollideand emplaces the segments that passAcross the whole
0x10160bc34..0x10160c088range there is nodestroy,removeorerasepath of any kind — the only otherbls are three PLT stubs ofoperator delete/memmoveshape and the stack-check epilogue. Callers areEntityMapGenerationTask::applyEntitiesandCliffEditor::buildCliffs.Why this closes it, and why the closing argument is DIRECTION
That bullet's own framing is why the candidate survived so long. Position arguments only say these objects are not the residual; they never say this code cannot cause it.
The ore effect is fewer cliffs when ore is present — 885 against 916 — so something has to destroy or prevent 31 of them. A function that can only add, and only where
wouldCollidereports the space free, cannot produce that sign.The crater counts corroborate rather than merely permit: 0 craters with resources on, 8 with them off, so both populations move the same way under the lever. Displacement would move them oppositely.
Where #84 stands now
All three of UPDATE 9's ideas are closed — chunk order (#137), the compute→apply queue (#138), and this one — and the ore effect is untouched by every one of them. It still reproduces at precision 1.000 with no surviving mechanism. The notes now say so explicitly, so the next person does not go looking for a fourth candidate on an empty list.
Verification
pnpm run verifygreen — 1534 app + 13 worker + 3 container tests, 0 warnings, exit 0. Documentation only; no code, fixture or test changes.🤖 Generated with Claude Code
https://claude.ai/code/session_012VRsPwmSwjnFKVSS6jx9Mo