<?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>http://stompymux.com/docs/concepts/</link><description>Recent content in Concepts on StompyMUX Documentation</description><generator>Hugo</generator><language>en</language><atom:link href="http://stompymux.com/docs/concepts/index.xml" rel="self" type="application/rss+xml"/><item><title>Source layout</title><link>http://stompymux.com/docs/concepts/source-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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>http://stompymux.com/docs/concepts/help-system/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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>BattleTech Architecture</title><link>http://stompymux.com/docs/concepts/btech-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/docs/concepts/btech-architecture/</guid><description>&lt;p&gt;BattleTech is a domain-oriented package rooted at &lt;code&gt;src/btech&lt;/code&gt;. Its public
boundary is &lt;code&gt;src/btech/include/btech&lt;/code&gt;; MUX code must not include any other
BattleTech directory.&lt;/p&gt;
&lt;h2 id="ownership"&gt;Ownership&lt;/h2&gt;
&lt;p&gt;Each domain owns both its state and the operations that change that state:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Domain&lt;/th&gt;
 &lt;th&gt;Primary ownership&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;core&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Runtime context, xoshiro256** random generator, events, and heartbeat&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;special&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Native special-object registry and typed object operations&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Battle maps, terrain, map objects, and cached LOS state&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;unit&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Mechs, templates, parts, sections, critical slots, and weapons&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;movement&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Ground, jump, aerospace, DropShip, and landing behavior&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sensors&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Contacts, LOS, scanners, ECM, C3, TAG, and spotting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;combat&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Attacks, damage, criticals, missiles, artillery, and ejection&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;repair&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Repair facilities, jobs, validation, and repair events&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;autopilot&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Autopilot state, commands, paths, targeting, and autogun&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;economy&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Stores, cargo, and part costs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;character&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Skills, experience, advantages, and personal combat&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ui&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Shared menu, notification, and presentation primitives&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;scripting&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Native XCODE-value and script-function adapters&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;persistence&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;SQLite schema and domain persistence adapters&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;integration&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Narrow adapters to MUX-owned services&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The context-owned gameplay generator is xoshiro256**, seeded once from Linux
OS entropy during BTech startup. Its runtime state is not persisted.&lt;/p&gt;</description></item><item><title>Channel administration</title><link>http://stompymux.com/docs/concepts/channel-administration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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>http://stompymux.com/docs/concepts/styled-text/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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;@attribute/set drone/Desc=A shell of [fg=#d78700]burnished amber[/] metal.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;@attribute/set dropship/Idesc=[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>http://stompymux.com/docs/concepts/text-encoding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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>http://stompymux.com/docs/concepts/telnet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/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><item><title>Player account state</title><link>http://stompymux.com/docs/concepts/player-account-state/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://stompymux.com/docs/concepts/player-account-state/</guid><description>&lt;p&gt;Player authentication and activity metadata are typed server state rather than
object attributes. The SQLite &lt;code&gt;player_state&lt;/code&gt; table stores password hashes,
aliases, the last login and site, and aggregate login counters. Login attempts
are normalized in &lt;code&gt;player_login_history&lt;/code&gt;; remembered page recipients are stored
in &lt;code&gt;player_last_page_recipients&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;All wall-clock values use signed Unix epoch seconds in SQLite. Commands that
show login history render those values as ISO 8601 UTC. Game ticks and elapsed
durations are not wall-clock timestamps and remain in their native units.&lt;/p&gt;</description></item></channel></rss>