|
|
||
|---|---|---|
| .. | ||
| tests | ||
| index.ludic | ||
| late.ludic | ||
| package.ludic | ||
| port.ludic | ||
| README.md | ||
| state.ludic | ||
| system.ludic | ||
| ui.ludic | ||
| verbs.ludic | ||
| verbs_ui.ludic | ||
| verbs_world.ludic | ||
| wire_read.ludic | ||
| wire_write.ludic | ||
ludic.devlink
An editor's live link into a running dev build: the wire protocol v1 frozen in
game-editor/proposals/2026-09-29-devlink/protocol-v1.md. Uses ludic.base and nothing else.
- Transport is the
DevlinkNetport (a game bindsUdp.*, a test a fake). One request a frame, read from one fixed 8 KB buffer and answered into another; nothing is made per frame. Only a loopback sender is answered (DevlinkNet.loopback); the socket opens only whenDevlinkWorld.enabled()says so (a game bindsdev_tools), so a release build never opens it. - Verbs are
DevlinkWorldmembers, every default "not offered" (err unbound):ping,hello,cam_get/cam_set/cam_release,goto,map_load,time,weather,shot,pause/resume,step.map_load,shotandstepanswer later by id (5 s at most, one at a time). Whilecoop()says a session is connected, everything butpingandhellois refused. - The interface's verbs are
DevlinkUimembers, the same default:ui_screenanswers the screen's root class and every component up;ui_model "<Class>" "<out>"andui_tree "<out>"have the game write the first instance's model, or the whole tree, to that file (no..) and answerok "<out>", so a datagram stays small;ui_override "<path>" "<file>"has the interface read a template or stylesheet from that file and reload it keeping state (""for the file clears one,"" ""clears all). All answer at once. - Call
devlink_tickonce a frame from something that runs while the game is paused (not from a system the pause stops), orresumecould never arrive.
Tests: ludic test packages/ludic.devlink (a fake transport, world and interface; each answer byte for byte).