<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Concepts on StompyMUX Documentation</title><link>https://gtaylor.github.io/stompymux/docs/concepts/</link><description>Recent content in Concepts on StompyMUX Documentation</description><generator>Hugo</generator><language>en</language><atom:link href="https://gtaylor.github.io/stompymux/docs/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Source layout</title><link>https://gtaylor.github.io/stompymux/docs/concepts/source-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/source-layout/</guid><description>&lt;p&gt;The MUX server is organized by responsibility beneath &lt;code&gt;src/mux&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;server&lt;/code&gt; contains platform definitions, configuration parsing, server state,
lifecycle, logging, timers, signals, and file caches.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;support&lt;/code&gt; contains reusable containers, buffer helpers, and string utilities.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;objects&lt;/code&gt; owns game objects, exact-name Lua storage, flags, and powers.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;world&lt;/code&gt; owns player, object, matching, movement, and presentation behavior.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commands&lt;/code&gt; owns native command dispatch, queues, literal parsing, and macros.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;communication&lt;/code&gt; owns channels and speech.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;network&lt;/code&gt; owns client descriptors, Telnet, sockets, and event scheduling.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;persistence&lt;/code&gt; owns SQLite-backed MUX data.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lua&lt;/code&gt; owns the Lua runtime integration.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;help&lt;/code&gt; owns indexing, rendering, and command handlers for the markdown help
system (see &lt;a href="../help-system/"&gt;Help system&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Project code includes MUX interfaces through paths rooted at &lt;code&gt;mux/&lt;/code&gt;; it does
not depend on the include-directory search order. Types exposed by MUX use
descriptive PascalCase names. Functions use snake_case, and implementation
details remain private to their owning module unless another translation unit
needs them.&lt;/p&gt;</description></item><item><title>Help system</title><link>https://gtaylor.github.io/stompymux/docs/concepts/help-system/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/help-system/</guid><description>&lt;p&gt;The &lt;code&gt;help&lt;/code&gt; command serves markdown articles with TOML frontmatter, indexed
and rendered entirely inside &lt;code&gt;stompymux&lt;/code&gt; (see &lt;code&gt;src/mux/help&lt;/code&gt;). There is no
separate indexing binary and no distinction between &lt;code&gt;help&lt;/code&gt; and &lt;code&gt;wizhelp&lt;/code&gt; -
per-article visibility is controlled by the &lt;code&gt;wizard_only&lt;/code&gt; frontmatter key
instead.&lt;/p&gt;
&lt;p&gt;This page documents the engine side of the system, for contributors to the
StompyMUX codebase itself. It is not the place to document any particular
game&amp;rsquo;s help content - that content lives in &lt;code&gt;game/help/&lt;/code&gt; and is up to each
game&amp;rsquo;s admins to write and maintain.&lt;/p&gt;</description></item><item><title>Channel administration</title><link>https://gtaylor.github.io/stompymux/docs/concepts/channel-administration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/channel-administration/</guid><description>&lt;p&gt;Wizards administer communication channels with &lt;code&gt;@chan&lt;/code&gt;. Running it without a
self-management must provide Lua commands that enforce its desired policy and
switch prints the available operations. Mortals cannot invoke &lt;code&gt;@chan&lt;/code&gt;. A game
that wants to offer mortal self-management must provide Lua commands that
enforce its desired policy and
self-management must provide Lua commands that enforce its desired policy and
call the appropriate channel functionality.&lt;/p&gt;
&lt;h2 id="create-and-inspect-channels"&gt;Create and inspect channels&lt;/h2&gt;
&lt;p&gt;Create a channel, make it public if desired, and inspect the result:&lt;/p&gt;</description></item><item><title>Styled object text</title><link>https://gtaylor.github.io/stompymux/docs/concepts/styled-text/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/styled-text/</guid><description>&lt;p&gt;Object names, descriptions, and inside descriptions support a small,
declarative markup language. It replaces the old dependency on softcode color
escapes without restoring softcode evaluation; OSC link actions occur only
when a user activates a rendered link.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@name drone=[fg=bright-cyan]Aegis[/]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@desc drone=A shell of [fg=#d78700]burnished amber[/] metal.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@idesc dropship=[fg=#8090ff bold]Cool blue light[/] fills the cabin.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="syntax"&gt;Syntax&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;[color=COLOR]&lt;/code&gt; changes the foreground; the existing &lt;code&gt;fg&lt;/code&gt; name remains an
alias. &lt;code&gt;[bg=COLOR]&lt;/code&gt; changes the background.
&lt;code&gt;[bold]&lt;/code&gt;, &lt;code&gt;[blink]&lt;/code&gt;, &lt;code&gt;[underline]&lt;/code&gt;, and &lt;code&gt;[inverse]&lt;/code&gt; enable formatting. Multiple
directives can share one tag when separated by whitespace, for example
&lt;code&gt;[fg=blue bg=white bold]&lt;/code&gt;. A grouped tag creates one style scope, so one &lt;code&gt;[/]&lt;/code&gt;
restores every setting that it changed. &lt;code&gt;[reset]&lt;/code&gt; restores terminal defaults
and closes all open styles. Use &lt;code&gt;[[&lt;/code&gt; for a literal opening bracket.&lt;/p&gt;</description></item><item><title>Text encoding</title><link>https://gtaylor.github.io/stompymux/docs/concepts/text-encoding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/text-encoding/</guid><description>&lt;p&gt;The server uses UTF-8 for all client text. Telnet connections default to UTF-8
and negotiate &lt;code&gt;UTF-8&lt;/code&gt; with the CHARSET option when the client supports it.
Malformed UTF-8 commands are rejected instead of being partially interpreted.&lt;/p&gt;
&lt;p&gt;Messages, descriptions, attribute values, room and thing names, exit names and
aliases, macro expansions, channel history, help files, and Lua-generated text
may contain UTF-8. SQLite text loaded by the server must contain valid UTF-8.
Legacy ANSI styling remains supported because its escape sequences are ASCII
bytes within the UTF-8 stream.&lt;/p&gt;</description></item><item><title>Telnet negotiation</title><link>https://gtaylor.github.io/stompymux/docs/concepts/telnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://gtaylor.github.io/stompymux/docs/concepts/telnet/</guid><description>&lt;p&gt;The game uses libtelnet for Telnet command framing and option negotiation. A
new connection negotiates terminal type (TTYPE), window size (NAWS), UTF-8
character set, server status (MSSP), output compression (MCCP2), GMCP, and the
RFC 1572 NEW-ENVIRON option.&lt;/p&gt;
&lt;h2 id="ttype-and-mtts"&gt;TTYPE and MTTS&lt;/h2&gt;
&lt;p&gt;The server requests the &lt;a href="https://www.rfc-editor.org/rfc/rfc1091"&gt;Telnet Terminal-Type option&lt;/a&gt; and sends up to
three &lt;code&gt;TTYPE SEND&lt;/code&gt; sub-negotiations after the client agrees. This follows the
&lt;a href="https://mudstandards.org/mud/mtts/"&gt;MUD Terminal Type Standard (MTTS)&lt;/a&gt; convention: the first response names
the MUD client, the second identifies its terminal emulation, and the third can
be an &lt;code&gt;MTTS &amp;lt;bitvector&amp;gt;&lt;/code&gt; capability report.&lt;/p&gt;</description></item></channel></rss>