Skip to content

Own backend: the map's own triggers (step 13) and the events watch's gate - #59

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

jeany55 merged 4 commits into
trigscript-4from
triggers

Conversation

@jeany55

@jeany55 jeany55 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Step 13 of the way off eudplib: the map's own triggers in a map of our own — and, in a second commit, the events watch's gate (step 11's one loss to eudplib).

Step 13

  • The map's TRIG section and the script's trigger() records are laid out as the game's own nodes in the payload, a copy for each player whose list the game would copy them into (the slots named, All Players, a force; a player not in the game gets none), chained after the player's entry and before their gate. Conditions, actions and flags byte for byte as the TRIG section would hold them; texts and sound files among the map's strings. The TRIG section holds the start-up alone.
  • The gate is turned around: the programs run from the last player's list still there, after every player's own triggers, as eudplib's build runs them (RunTrigTrigger before the programs).
  • hyperTriggers() records are left out: a map of our own goes through its triggers every frame as it is, and the game holds a list with hyper triggers in it to every second frame (measured in the lifted game; eudplib's build too).
  • Found by the probe and fixed: the start-up left the current player at the EPD it wrote through (the first frame's Wait took nobody's slot); a deaths(P2, units.TerranGhost) read gave the current player's Marines — a deaths cell 12 to 26 dwords in is a player group's number as a player field, so it is now asked as the game's own Deaths condition of that player and unit.
  • Found in eudplib's build (not ours): it runs a trigger whose Disabled flag is set; the game does not.

Ledger: step 13's 13 rows flip to takes, nothing else moves. Numbers (lifted game, probes/own-triggers.ts, a quiet frame): ours 0.4 µs over 10 triggers, eudplib 3.3 µs over 111; the first frame 6 µs against 1,082. Every line the same at the same frame both ways (eudplib without the hyper triggers), but the disabled trigger eudplib runs.

The watch's gate (no on.order / on.morphed)

  • Four triggers before the walk over the unit places compare what the game shows with what the watch last read: the head of the free list and the place behind it (a unit made pops the head; a place freed goes in behind it), and each player's counts of units and of buildings (0x581DE4 / 0x581F34, taken off as a unit starts to die or is removed — read in the lifted game first, tools/step13/gate-research.mts). All holding, the watch is passed by; one failing says which group and the watch runs, after which the numbers are read again as far as the frame's changes reach (the head pair when a unit came on, the counts of the owners the handler marked, the failing group alone when nothing was found). A wrong number only costs the next frames the watch.
  • Numbers (probes/own-events.ts without on.order, 80 places): a quiet frame 1.9 µs (the gate 0.25 of it) against eudplib's 5.1 and 6.7 before; a frame a dead unit's place is freed 15 µs. Every line at the same frame as before.
  • Holes, in the plan's Open list: an Egg, Cocoon or Lurker Egg dying while another death is in progress; a hidden unit removed.

Not played in Remastered yet (Maps/TrigScript/own-step13-triggers.scx, own-step11-events-gated.scx). Plan: "The map's own triggers on our own backend (2026-10-23)", "The watch's gate (2026-10-23)" and the Open list.

🤖 Generated with Claude Code

https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5

jeany55 and others added 2 commits October 23, 2026 12:15
…d: step 13

The map's TRIG section and the script's trigger() records are laid out as the game's own
nodes in the payload, a copy for each player whose list the game would copy them into,
chained after the player's entry and before their gate; the TRIG section holds the
start-up alone. The gate is turned around so the programs run from the last player's list
still there, after every player's own triggers, as eudplib's build runs them.
hyperTriggers() records are left out: the map's triggers run every frame as it is, and
the game holds a list with hyper triggers in it to every second frame (measured).

Found by the probe: the start-up left the current player at the EPD it wrote through, so
the first frame's Wait took nobody's slot (the start-up now puts the player back); a
deaths() read of a cell 12 to 26 dwords into the table is a player group's number as a
player field, so such a cell is asked as the game's own Deaths condition of its player and
unit. eudplib's build runs a trigger whose Disabled flag is set where the game does not.

The ledger: step 13's 13 rows taken.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
…aces by

When a program's events are created, died and killed alone, four triggers before the
walk over the unit places compare what the game shows with what the watch last read: the
head of the free list and the place behind it (a unit made pops the head; a place freed
goes in behind it), and each player's counts of units and of buildings (0x581DE4 and
0x581F34, taken off as a unit starts to die or is removed; read in the lifted game first).
All holding, the watch is passed by; one failing says which group and the watch runs,
after which the numbers are read again as far as the frame's changes reach. A wrong number
only costs the next frames the watch.

A quiet frame of the events probe without on.order: 1.9 µs against eudplib's 5.1 and 6.7
before, the gate 0.25 µs of it; every line at the same frame as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01En4SHqafb1QFJ4xgbUkAe5
@jeany55 jeany55 changed the title Own backend: the map's own triggers (step 13) Own backend: the map's own triggers (step 13) and the events watch's gate Oct 23, 2026
jeany55 and others added 2 commits October 23, 2026 12:41
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 a001555 into trigscript-4 Oct 23, 2026
1 check passed
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