Skip to content

Own backend: the players' input carried by the map itself (step 12) - #58

Merged
jeany55 merged 5 commits into
trigscript-4from
input
Oct 23, 2026
Merged

jeany55 merged 5 commits into
trigscript-4from
input

Conversation

@jeany55

@jeany55 jeany55 commented Oct 23, 2026

Copy link
Copy Markdown
Contributor

Step 12 of the way off eudplib: the players' input carried by the map itself, in place of MSQC and chatEvent. Ledger: 26 of 26 rows taken. Played in Remastered (two recordings, 2026-10-23), every line of the sheet as expected.

Part 1 — keys, clicks, the mouse, sync(), local.selected, underMouse(). What a map can carry to every computer is a game command. The carrier is a unit, as MSQC's, but the send is a Select of the next of a ring of six hidden carriers a human and a targeted Move whose point is the value, read back from the carrier's order target on every computer. A receive pass before the programs' turns and a send pass after them (a new Graph.after block in the emitter and layout). Keys and buttons go as a state sent when it changes and paid out a frame at a time, so a held key is held for exactly as long and a one-frame tap is a press; the mouse on a ring of its own; sync() makes the trip in two frames (six through MSQC in the same lifted run). Unit walks pass the carrier type over.

Part 2 — typed lines. Read where typed: the send pass watches the text ring's byte (0x640B58), scans the thirteen lines for the player's name prefix, copies the text into cells, marks the line as chatEvent does (two bytes swapped after the colon; the line reads the same), and matches the patterns in order — text byte for byte, digits kept to what a point carries, a word or a unit's name by hash (the 455 names as a sorted table in cells, searched by halves). The first fit goes as a chat message: the pattern's number, then its values, all or none. chatted() and on.chat are cell reads.

Found in play: Remastered's key table drops a held key for one frame when it begins to repeat (MSQC's grace hid it). The send pass keeps a bit up through one frame it reads down when it was up the two frames before; a release goes one frame late, a tap stays a tap. Re-tested.

Also: an emitter fault found on the way (a sum of bit-slices of one read with a negative constant folds wrongly) is sidestepped in the decode and listed in the plan's Open list, with carrier respawn and the passes' weight.

Tests: harness tests playing the game's side of the channel (9), the ledger, the lifted-game probe probes/own-input.ts both ways.

🤖 Generated with Claude Code

https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5

jeany55 and others added 5 commits October 22, 2026 23:01
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
…art 1

Keys, clicks, the mouse, sync(), select(), local.selected and underMouse() in a
map of our own, with no chatEvent and no MSQC: for each human a ring of hidden
carrier units (made at the first frame in transit, given to Player 12, the owner
byte put back), a send a Select of the next carrier and a targeted Move to a
point that is the value, read back from the carrier's order target on every
computer by a receive pass before the programs' turns; a send pass after the last
run (Graph.after) queues what this computer's player did and puts their selection
back. A state of key and button bits sent when it changes and paid out a frame at
a time, the mouse as a point on a ring of its own, a sync as a header and a
value. Unit walks pass the carrier type over. The ledger's step 12: 21 of 26
rows taken; the 5 chat rows are part 2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
The send pass watches the text ring's byte (0x640B58); when it moves, the
thirteen text lines are scanned for this player's name prefix, the line's
text copied into cells, the two bytes after the colon swapped (chatEvent's
mark) and the text matched against the patterns in order: bytes, digits
kept to what a point carries, a word or a unit's name by hash (the names'
hashes sorted in cells, searched by halves). The first fit goes as a chat
message of the ring (the pattern's number, then its values, all or none);
on arrival the pattern's flag is up for a frame and its values are cells,
so chatted() and on.chat are cell reads. The packet's queue-room check now
covers the whole message. Step 12: 26 of 26 ledger rows taken; harness
test; the lifted-game probe equal to eudplib's chatEvent+MSQC on every
typed line.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
…12 played in Remastered

Remastered's key table drops a held key for one frame when it begins to
repeat (a hold of F7 gave a second press after 17 frames in play). The
send pass keeps a bit up through one frame it reads down when it was up
the two frames before, so a release goes one frame late and the gap is
passed over. The plan records the play: every other line of the sheet as
expected, typed lines included.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
@jeany55
jeany55 merged commit d227d15 into trigscript-4 Oct 23, 2026
1 check passed
@jeany55
jeany55 deleted the input branch October 23, 2026 17:01
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