Ask the game whether a blueprint grid position moves its entities, and pin it - #230
Merged
wormeyman merged 1 commit intoAug 17, 2026
Merged
Conversation
…d pin it PR #222 adds a second X/Y pair to the alignment dialog, "Grid position", on the premise that the game's own control writes no blueprint field and instead moves every entity by the negation of what is typed. That premise was inferred from a screenshot of the game's dialog, not measured, and it is why Blueprint.translateEntities and Entity.forceMoveBy exist. Measured on 2.0.77, the binary #226 used. Setting a grid position moves no entity: not in get_blueprint_entities(), not in the exported string, not after importing that string back. The game writes position-relative-to-grid and leaves every coordinate where it was, over positions of {3, 5} and {10, -7}. So there is no second thing to model, and #226 already measured all of it. The positive control is what makes a null result mean anything. Four of the seven cases report "nothing changed" whether the probe is right or comparing a value with itself, so shifted-entities places the same two chests three tiles left and four up through set_blueprint_entities, touching no snapping property. Its exported coordinates differ from the baseline, which is the only reason the zeros count as evidence. The #133 item 4 lesson in null-result form. One new API fact, which confirms #226 from the other end. That probe found that setting blueprint_position_relative_to_grid turns blueprint_absolute_snapping on. This one found the reverse: setting blueprint_absolute_snapping to false clears the position. The readback control caught it on the one relative row, which holds no position by the time anything is read, so that row is recorded and left unscored rather than counted as "did not move". Relative snapping cannot carry a position because the game takes it away, not only because the exporter drops it. Two consecutive captures are byte-identical, so a third that disagrees is a finding rather than noise. Also adds the probe-blueprint-snapping.mjs row that #226 left out of the script table. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DxZFeyzpXmxjwVHXxDo8zb
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.
PR #222 adds a second X/Y pair to the alignment dialog, "Grid position", separate from the pair beside Absolute. Its premise, written into
Blueprint.translateEntitiesandtests/blueprint-grid-position.spec.ts:That was inferred from a screenshot of the game's dialog rather than measured, and it is the whole reason
translateEntitiesandEntity.forceMoveByexist. #226 measured which snapping mode carriesposition-relative-to-grid; it never touched this.The answer
Measured on 2.0.77, the binary #226 used. Two chests at (0.5, 0.5) and (8.5, 8.5), snapping on, absolute:
position-relative-to-gridSetting a grid position moves no entity. The game writes the key and leaves every coordinate alone. So
position-relative-to-gridis the whole feature and there is no second thing to model.The control is the part worth reading
A result like this is mostly zeros, and zeros are what a broken probe produces too. The
shifted-entitiescase places the same two chests three tiles left and four up throughset_blueprint_entities, touching no snapping property:Without it, "the coordinates never changed" reads identically whether the finding is real or the probe is comparing a value with itself. That is the #133 item 4 lesson in its null-result form, and it is the only reason the zeros above are evidence.
One new API fact
#226 found that setting
blueprint_position_relative_to_gridturnsblueprint_absolute_snappingon, and warned to set position before absolute.This found the reverse: setting
blueprint_absolute_snapping = falseclears the position. The readback control caught it on the one relative row in the sweep, which came back holding no position at all. That row is recorded and left unscored rather than counted as "did not move", per #133 item 4, since asking whether its grid position moved anything is a question about a value that is not there.It also confirms #226 from the opposite direction: relative snapping cannot carry a position because the game takes the position away, not only because the exporter drops it.
What it changes
Nothing in
packages/. This is measurement, andtests/stays offline as always.What it changes is #222, where two blockers I raised turn out to resolve by deleting code rather than fixing it. That is written up in the PR.
Also adds the
probe-blueprint-snapping.mjsrow that #226 left out of the script table.Verification
Two consecutive captures of the fixture are byte-identical, so a third that disagrees is a finding rather than noise.
🤖 Generated with Claude Code
https://claude.ai/code/session_01DxZFeyzpXmxjwVHXxDo8zb