From d497a3b09a612af1efe4474cc0dfb0c35ef49890 Mon Sep 17 00:00:00 2001 From: wtclaude Date: Wed, 19 Aug 2026 04:16:48 -0500 Subject: [PATCH] docs(book): name Oxide, and the question "how many sidecars" answers Follows the org lead's two corrections on docs#170. The Rust example is an OXIDE plugin - naming the framework is the difference between a design a reader can start from and one they have to go and choose for themselves - and the architecture pairs one sidecar to one game server, on that server's own host. Chapter 3 gains the general form of that second one, since it is the chapter where a reader decides what to build: if your game runs as a fleet, "how many sidecars" is answered by where the loopback boundary is, not by how many processes you would rather run. Your module holding several clients is the cheaper end of that trade, and core never learns there is more than one. Co-Authored-By: Claude --- book/03-sidecar.md | 23 ++++++++++++++++------- book/04-game-plugin.md | 6 +++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/book/03-sidecar.md b/book/03-sidecar.md index eb0a467..9cc8872 100644 --- a/book/03-sidecar.md +++ b/book/03-sidecar.md @@ -151,13 +151,22 @@ shape. That is what thin means: less code, the same architecture. **Rust is the worked example, and it is not that case.** The dry run in [`rust-dryrun.md`][dryrun] designs a module for it precisely because it shares so -little with Ultima Online — and its answer is a **mod**: a plugin loaded by the -server's own mod framework, hooking the game's events and dialling out to a -sidecar, exactly as the ServUO overlay does. The Rust server is a *binary*, where -ServUO is source a shard owner compiles, so the way in is a published hook API -rather than a file you edit. **The three-part shape survives that unchanged**, -which is the more useful finding: the plugin-dials-out arrangement is not a -property of having source access. +little with Ultima Online — and its answer is an **Oxide plugin**: C# loaded by +the mod framework a modded Rust server already runs, hooking the game's events and +dialling out to a sidecar, exactly as the ServUO overlay does. The Rust server is a +*binary*, where ServUO is source a shard owner compiles, so the way in is a +published hook API rather than a file you edit. **The three-part shape survives +that unchanged**, which is the more useful finding: the plugin-dials-out +arrangement is not a property of having source access. + +It also pairs **one sidecar to one game server**, on that server's own host, +rather than one sidecar fronting a community's several — because those servers sit +on separate machines, and a shared sidecar would be reached across a network by +plugins that are supposed to talk to it over loopback. Worth knowing before you +design yours: if your game runs as a fleet, the question "how many sidecars" is +answered by where the loopback boundary is, not by how many processes you would +rather run. Your module holding several clients is the cheaper end of that trade, +and core never learns there is more than one. That document reached the game over RCON until 2026-08-19, and before that concluded there should be **no sidecar at all**. It carries both corrections, diff --git a/book/04-game-plugin.md b/book/04-game-plugin.md index 3dc8669..c3bc865 100644 --- a/book/04-game-plugin.md +++ b/book/04-game-plugin.md @@ -12,9 +12,9 @@ rules below are what keep that something from being the reason the server froze. **That something does not have to be source you compile.** The worked example below is an overlay built into a server whose code you have; the dry run for Rust -is a **mod** loaded by a closed server's own framework, hooking published events. -Every rule in this chapter applies identically to both — they are properties of -being inside a game loop, not of how you got there. +is an **Oxide plugin**, C# loaded by a closed server's own mod framework and +hooking published events. Every rule in this chapter applies identically to both — +they are properties of being inside a game loop, not of how you got there. The worked example is `servuo-plugins`, the Ultima Online shard plugin, whose link layer is one file: `overlay/Scripts/Custom/Bridge/BridgeLink.cs`. It is C# against