<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://fightorder.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FightorderAdmin</id>
	<title>FIGHTORDER - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://fightorder.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=FightorderAdmin"/>
	<link rel="alternate" type="text/html" href="https://fightorder.net/wiki/Special:Contributions/FightorderAdmin"/>
	<updated>2026-11-08T09:24:05Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30403</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30403"/>
		<updated>2026-07-24T00:44:40Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl ul{columns:3;column-gap:26px;margin:0;padding:0;list-style:none}&lt;br /&gt;
@media(max-width:900px){.fo-dpl ul{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl ul{columns:1}}&lt;br /&gt;
.fo-dpl li{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
.fo-recent ul{list-style:none;margin:0;padding:0}&lt;br /&gt;
.fo-recent li{padding:9px 0;border-bottom:1px solid var(--fo-line);font-size:.85rem;display:flex;gap:10px;align-items:baseline}&lt;br /&gt;
.fo-recent li:last-child{border-bottom:none}&lt;br /&gt;
.fo-recent li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-recent li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
.fo-card-ic.fo-logo{background-color:transparent;background-size:contain;background-position:center;background-repeat:no-repeat;padding:0}&lt;br /&gt;
.fo-logo-zerok{background-image:url(/resources/fo/logo-zerok.png)}&lt;br /&gt;
.fo-logo-bar{background-image:url(/resources/fo/logo-bar.png)}&lt;br /&gt;
.fo-logo-recoil{background-image:url(/resources/fo/logo-recoil.svg);filter:invert(1)}&lt;br /&gt;
.fo-logo-spring{background-image:url(/resources/fo/logo-spring.png);border-radius:var(--radius-md)}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=30402</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=30402"/>
		<updated>2026-07-24T00:38:15Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[The Complete Guide To Making A Spring Game]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;A full walkthrough of building a game from scratch on the engine — structure, content, and pitfalls.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Gamedev:UnitDefs|Unit definitions reference]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;The complete UnitDef field reference — every property that defines how a unit behaves.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Engine Profiling]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Finding and diagnosing performance bottlenecks in engine and game code.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-recent&amp;quot;&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|addeditdate=true&lt;br /&gt;
|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No edits yet — start writing the wiki!&amp;lt;/span&amp;gt;&lt;br /&gt;
|noresultsfooter=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic fo-logo fo-logo-zerok&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic fo-logo fo-logo-bar&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic fo-logo fo-logo-recoil&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic fo-logo fo-logo-spring&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30401</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30401"/>
		<updated>2026-07-24T00:38:13Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl ul{columns:3;column-gap:26px;margin:0;padding:0;list-style:none}&lt;br /&gt;
@media(max-width:900px){.fo-dpl ul{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl ul{columns:1}}&lt;br /&gt;
.fo-dpl li{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
.fo-recent ul{list-style:none;margin:0;padding:0}&lt;br /&gt;
.fo-recent li{padding:9px 0;border-bottom:1px solid var(--fo-line);font-size:.85rem;display:flex;gap:10px;align-items:baseline}&lt;br /&gt;
.fo-recent li:last-child{border-bottom:none}&lt;br /&gt;
.fo-recent li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-recent li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
.fo-card-ic.fo-logo{background-color:transparent;background-size:contain;background-position:center;background-repeat:no-repeat;padding:0}&lt;br /&gt;
.fo-logo-zerok{background-image:url(/resources/fo/logo-zerok.png)}&lt;br /&gt;
.fo-logo-bar{background-image:url(/resources/fo/logo-bar.png)}&lt;br /&gt;
.fo-logo-recoil{background-image:url(/resources/fo/logo-recoil.svg)}&lt;br /&gt;
.fo-logo-spring{background-image:url(/resources/fo/logo-spring.png);border-radius:var(--radius-md)}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=30399</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=30399"/>
		<updated>2026-07-24T00:24:12Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[The Complete Guide To Making A Spring Game]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;A full walkthrough of building a game from scratch on the engine — structure, content, and pitfalls.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Gamedev:UnitDefs|Unit definitions reference]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;The complete UnitDef field reference — every property that defines how a unit behaves.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Engine Profiling]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Finding and diagnosing performance bottlenecks in engine and game code.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-recent&amp;quot;&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|addeditdate=true&lt;br /&gt;
|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No edits yet — start writing the wiki!&amp;lt;/span&amp;gt;&lt;br /&gt;
|noresultsfooter=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/resources/fo/logo-zerok.png&amp;quot; alt=&amp;quot;Zero-K&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/resources/fo/logo-bar.png&amp;quot; alt=&amp;quot;Beyond All Reason&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/resources/fo/logo-recoil.svg&amp;quot; alt=&amp;quot;Recoil Engine&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;/resources/fo/logo-spring.png&amp;quot; alt=&amp;quot;Spring RTS&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30398</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30398"/>
		<updated>2026-07-24T00:24:09Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl ul{columns:3;column-gap:26px;margin:0;padding:0;list-style:none}&lt;br /&gt;
@media(max-width:900px){.fo-dpl ul{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl ul{columns:1}}&lt;br /&gt;
.fo-dpl li{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
.fo-recent ul{list-style:none;margin:0;padding:0}&lt;br /&gt;
.fo-recent li{padding:9px 0;border-bottom:1px solid var(--fo-line);font-size:.85rem;display:flex;gap:10px;align-items:baseline}&lt;br /&gt;
.fo-recent li:last-child{border-bottom:none}&lt;br /&gt;
.fo-recent li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-recent li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
.fo-card-ic img{width:22px;height:22px;object-fit:contain;border-radius:4px}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=30396</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=30396"/>
		<updated>2026-07-24T00:14:57Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[The Complete Guide To Making A Spring Game]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;A full walkthrough of building a game from scratch on the engine — structure, content, and pitfalls.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Gamedev:UnitDefs|Unit definitions reference]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;The complete UnitDef field reference — every property that defines how a unit behaves.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Engine Profiling]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Finding and diagnosing performance bottlenecks in engine and game code.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-recent&amp;quot;&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|addeditdate=true&lt;br /&gt;
|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No edits yet — start writing the wiki!&amp;lt;/span&amp;gt;&lt;br /&gt;
|noresultsfooter=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30395</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=30395"/>
		<updated>2026-07-24T00:14:53Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl ul{columns:3;column-gap:26px;margin:0;padding:0;list-style:none}&lt;br /&gt;
@media(max-width:900px){.fo-dpl ul{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl ul{columns:1}}&lt;br /&gt;
.fo-dpl li{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
.fo-recent ul{list-style:none;margin:0;padding:0}&lt;br /&gt;
.fo-recent li{padding:9px 0;border-bottom:1px solid var(--fo-line);font-size:.85rem;display:flex;gap:10px;align-items:baseline}&lt;br /&gt;
.fo-recent li:last-child{border-bottom:none}&lt;br /&gt;
.fo-recent li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-recent li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Zero-K&amp;diff=22247</id>
		<title>Zero-K</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Zero-K&amp;diff=22247"/>
		<updated>2026-07-23T23:35:16Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy Zero-K portal (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Zero-K portal. Managed in the repo at content/Zero_K.wikitext and deployed&lt;br /&gt;
     via .github/workflows/import-zerok.yml. Same DPL-driven pattern as the&lt;br /&gt;
     Spring RTS and Recoil Engine portals — self-updating as pages are added&lt;br /&gt;
     or recategorized. Styling is in MediaWiki:Common.css. --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero fo-hero--sub&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Zero-K&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Open-source RTS with physics-driven combat, unrestricted unit building, and deep commander customization — built on the Spring/Recoil engine lineage. Content below is imported verbatim from the [https://zero-k.info/mediawiki official Zero-K wiki] (CC BY-SA).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[https://zero-k.info Zero-K official site]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:Categories|All categories]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Manual &amp;amp;amp; Commands&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Manual|Commands|Mission Editor|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Units&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Units|Riots|Raiders|Assaults|Skirmishers|Artillery|Anti-Air|Scouts|Bombs|Constructors|namespace=Main|count=200|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Buildings&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Buildings|namespace=Main|count=100|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Economy&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Energy|Resources|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;PlanetWars&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=PlanetWars|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Modding &amp;amp;amp; Templates&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Development|Lua|Lua-based templates|Infobox templates|Layout templates|ZK Infoboxes|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Community Discussion&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Cold Takes|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Beyond_All_Reason&amp;diff=21896</id>
		<title>Beyond All Reason</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Beyond_All_Reason&amp;diff=21896"/>
		<updated>2026-07-23T04:29:35Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Beyond All Reason overview page. Original content written from publicly&lt;br /&gt;
     available facts about the game (beyondallreason.info), not copied text.&lt;br /&gt;
     Managed in the repo at content/Beyond_All_Reason.wikitext, deployed via&lt;br /&gt;
     the import_content workflow step. --&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Beyond All Reason&#039;&#039;&#039; (commonly abbreviated &#039;&#039;&#039;BAR&#039;&#039;&#039;) is a free, open-source real-time strategy game built on the [[Recoil Engine]]. It carries forward the large-scale, physically-simulated combat style of the original &#039;&#039;Total Annihilation&#039;&#039; and &#039;&#039;Spring RTS&#039;&#039; lineage: full unit and projectile simulation, deformable terrain, and battles that can scale from small skirmishes to hundreds of units per side.&lt;br /&gt;
&lt;br /&gt;
The game is under active, community-driven development and is free to download for Windows and Linux.&lt;br /&gt;
&lt;br /&gt;
== Factions ==&lt;br /&gt;
BAR currently has two complete factions, with a third in development:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Armada&#039;&#039;&#039; — one of the two core playable factions.&lt;br /&gt;
* &#039;&#039;&#039;Cortex&#039;&#039;&#039; — the other core playable faction.&lt;br /&gt;
* &#039;&#039;&#039;Legion&#039;&#039;&#039; — a newer faction, still a work in progress.&lt;br /&gt;
&lt;br /&gt;
(See [[Beyond All Reason/Armada|Armada]] and [[Beyond All Reason/Cortex|Cortex]] for faction-specific pages as they&#039;re written.)&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
* Terrain affects tactics directly — for example, radar cannot see through mountains, so terrain shapes scouting and ambush play.&lt;br /&gt;
* Unit rosters span many classes: bots, vehicles, aircraft, ships, hovercraft, factories, and static defenses, including experimental/late-game units.&lt;br /&gt;
* The economy is built around balancing resource production against unit output, the same metal/energy foundation as the Spring RTS lineage this wiki already documents (see [[Spring RTS]]).&lt;br /&gt;
* Powerful late-game weapons (including nuclear weapons) can physically alter the terrain.&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
* The game is downloaded and played through BAR&#039;s own launcher/client from the official site.&lt;br /&gt;
* Matches, replays, and leaderboards are tracked centrally, and the game includes in-client guides and a command reference.&lt;br /&gt;
* The community is active on Discord, and the project is open-source on GitHub.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Recoil Engine]] — the engine BAR is built on.&lt;br /&gt;
* [[Spring RTS]] — the engine lineage BAR descends from.&lt;br /&gt;
* [[Zero-K]] — another actively-developed game in the same engine family.&lt;br /&gt;
&lt;br /&gt;
[[Category:Games]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21895</id>
		<title>Spring RTS</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21895"/>
		<updated>2026-07-23T04:29:33Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Spring RTS portal. Managed in the repo at content/Spring_RTS.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     Each section lists its category members live via DynamicPageList3, so the&lt;br /&gt;
     portal reorganizes itself as pages are (re)categorized. Styling is in&lt;br /&gt;
     MediaWiki:Common.css (.fo-* classes). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero fo-hero--sub&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Spring RTS&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The original &amp;lt;strong&amp;gt;Spring&amp;lt;/strong&amp;gt; engine knowledge base — {{NUMBEROFARTICLES}} articles on strategy, games, maps, modding, Lua, AI, and engine internals, imported and preserved from the Spring wiki. Every section below is built live from the wiki&#039;s categories.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:Categories|All categories]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:RecentChanges|Recent changes]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Getting Started&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Tutorial|FAQ|Help|Playing|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Strategy &amp;amp;amp; Gameplay&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Strategy|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games &amp;amp;amp; Mods&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Games|Mods|Balanced Annihilation|Xta|Expand and Exterminate|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Maps&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Map Dev|Map making|Maps|Map Tools|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Content Development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Game Dev|Gamedata|3D Models|Animation|CEG|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lua Scripting&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lua|Libraries|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;AI&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=AI|AI Dev|AIWrapper|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engine &amp;amp;amp; Core Dev&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Spring|Engine Dev|Development|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lobby &amp;amp;amp; Infrastructure&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lobby|Download Systems|Autohosts|Buildbot|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=21894</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=21894"/>
		<updated>2026-07-23T04:29:32Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Fight|The Fight command]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Move-and-engage: how attack-move differs from raw move, and when to queue it.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Commander|D-gun &amp;amp; commander play]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Timing the disintegrator, avoiding com-drops, and reclaim micro.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--factory&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Economy|Economy fundamentals]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Metal vs energy, overdrive, and expanding without stalling.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|mode=userformat&lt;br /&gt;
|noresultsheader=&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;wiki&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;No edits yet — start writing the wiki!&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|listseparators=,&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;edit&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;,&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil_Engine&amp;diff=21889</id>
		<title>Recoil Engine</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil_Engine&amp;diff=21889"/>
		<updated>2026-07-23T02:57:57Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy Recoil Engine portal (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Recoil Engine portal. Managed in the repo at content/Recoil_Engine.wikitext&lt;br /&gt;
     and deployed via .github/workflows/import-recoil.yml. Each section lists&lt;br /&gt;
     its category members live via DynamicPageList3, same pattern as the&lt;br /&gt;
     Spring RTS portal (content/Spring_RTS.wikitext) — self-updating as pages&lt;br /&gt;
     are added or recategorized. Styling is in MediaWiki:Common.css. --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero fo-hero--sub&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Recoil Engine&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The actively-developed engine powering &amp;lt;strong&amp;gt;Beyond All Reason&amp;lt;/strong&amp;gt; and other modern titles — a continuation and significant extension of the original Spring RTS engine. Documentation below is imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki official RecoilEngine wiki] on GitHub.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[https://github.com/beyond-all-reason/RecoilEngine RecoilEngine on GitHub]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:Categories|All categories]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Building the Engine&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Building|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lua Scripting&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Lua|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Configuration&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Configuration|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engine Internals&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Engine Internals|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Reference&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Reference|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Development &amp;amp;amp; Releases&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Development|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Profiling &amp;amp;amp; Debugging&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Recoil Profiling|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Windows_build_environment,_step_by_step&amp;diff=21888</id>
		<title>Recoil:Windows build environment, step by step</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Windows_build_environment,_step_by_step&amp;diff=21888"/>
		<updated>2026-07-23T02:57:55Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;preamble&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Preamble =&lt;br /&gt;
&lt;br /&gt;
This page is intended for users looking for step-by-step instructions to set up a Windows build environment. If you are already proficient with Git and Unix shell in general, [https://github.com/beyond-all-reason/spring/wiki/SpringRTS-Build-Environment-(Docker)#quickstart you will probably want to follow the Quickstart instead].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;quick-primer&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Quick primer =&lt;br /&gt;
&lt;br /&gt;
Recoil must be compiled to an executable (e.g. &amp;lt;code&amp;gt;spring.exe&amp;lt;/code&amp;gt;) for it to actually run on a target platform (e.g. Windows), and the compilation process itself is actually easier from Linux for both Linux and Windows targets. In the past, this situation would have been handled with Linux virtual machines or a dual boot, but fortunately, nowadays we have access to WSL and Docker.&lt;br /&gt;
&lt;br /&gt;
WSL (Windows Subsystem for Linux) allows developers to run a GNU/Linux environment directly on Windows. Under the hood, WSL is actually a lightweight virtual machine automatically managed by Windows, which automatically handles everything (such as how to transfer files between WSL and Windows).&lt;br /&gt;
&lt;br /&gt;
Docker allows to build lightweight executable packages called container images, which include everything needed to run an application. In our case, it is used for the compilation toolchain.&lt;br /&gt;
&lt;br /&gt;
In this tutorial, we will:&lt;br /&gt;
&lt;br /&gt;
* [[#install-prerequisites|Install prerequisites]]&lt;br /&gt;
* [[#clone-recoil-in-wsl|Clone Recoil in WSL]]&lt;br /&gt;
* [[#build-recoil-for-windows-from-wsl|Build Recoil for Windows from WSL]]&lt;br /&gt;
* [[#automatically-using-latest-build-in-windows-game|Automatically using latest build in Windows game]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;install-prerequisites&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Install prerequisites =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;docker-desktop-and-wsl&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Docker Desktop and WSL ==&lt;br /&gt;
&lt;br /&gt;
* Download and install [https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2 Docker Desktop for WSL 2].&lt;br /&gt;
* During the installation process, Docker Desktop will prompt you to install WSL 2. Follow the instructions.&lt;br /&gt;
* Once installed, launch Docker Desktop, go to &amp;lt;code&amp;gt;Settings&amp;lt;/code&amp;gt; &amp;amp;gt; &amp;lt;code&amp;gt;General&amp;lt;/code&amp;gt;, and make sure &amp;lt;code&amp;gt;Use WSL 2 based engine&amp;lt;/code&amp;gt; is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vs-code&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== VS Code ==&lt;br /&gt;
&lt;br /&gt;
* Download and install [https://code.visualstudio.com/download VS Code].&lt;br /&gt;
* When prompted to &amp;lt;code&amp;gt;Select Additional Tasks&amp;lt;/code&amp;gt; during installation, make sure to check the &amp;lt;code&amp;gt;Add to PATH&amp;lt;/code&amp;gt; option so you can easily open VS Code from WSL using the &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; command.&lt;br /&gt;
* Install the [https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack Remote Development] extension pack.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;clone-recoil-in-wsl&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Clone Recoil in WSL =&lt;br /&gt;
&lt;br /&gt;
* Open a Terminal and then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;wsl&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/beyond-all-reason/spring --recursive&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* The Recoil repository is now cloned in WSL. You can access it in multiple ways:&lt;br /&gt;
** From the Terminal: &amp;lt;code&amp;gt;wsl&amp;lt;/code&amp;gt; and then &amp;lt;code&amp;gt;cd ~/spring&amp;lt;/code&amp;gt; (shorthand for &amp;lt;code&amp;gt;/home/&amp;amp;lt;username&amp;amp;gt;/spring&amp;lt;/code&amp;gt;).&lt;br /&gt;
*** You can then use &amp;lt;code&amp;gt;code .&amp;lt;/code&amp;gt; to open the repository in a VS Code WSL window.&lt;br /&gt;
** From the Windows File Explorer: navigate to &amp;lt;code&amp;gt;\\wsl$\Ubuntu\home\&amp;amp;lt;username&amp;amp;gt;\spring&amp;lt;/code&amp;gt; (also available under &amp;lt;code&amp;gt;Linux&amp;lt;/code&amp;gt; from the sidebar on the left).&lt;br /&gt;
*** Note that if you try to open &amp;lt;code&amp;gt;\\wsl$\Ubuntu\home\&amp;amp;lt;username&amp;amp;gt;\spring&amp;lt;/code&amp;gt; in VS Code, a notification recommending you to switch to a WSL window will be displayed, with the option to &amp;lt;code&amp;gt;Reopen Folder in WSL&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;build-recoil-for-windows-from-wsl&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Build Recoil for Windows from WSL =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;first-compilation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== First compilation ==&lt;br /&gt;
&lt;br /&gt;
* Open a Terminal and then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;wsl&lt;br /&gt;
cd ~/spring/docker-build&lt;br /&gt;
./init_container.sh&lt;br /&gt;
./build.sh&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* This will take a long time.&lt;br /&gt;
* After the compilation is done, the build artifacts will be located in &amp;lt;code&amp;gt;~/spring/build-windows-64-RELWITHDEBINFO/install&amp;lt;/code&amp;gt;. Check that everything is sound by running the &amp;lt;code&amp;gt;ls ~/spring/build-windows-64-RELWITHDEBINFO/install&amp;lt;/code&amp;gt; command, which should output something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;$ ls ~/spring/build-windows-64-RELWITHDEBINFO/install&lt;br /&gt;
AI              base           fonts       libIL.dll       libfontconfig-1.dll  libiconv-2.dll   libvorbis-0.dll      maps                  spring-headless.exe&lt;br /&gt;
LuaUI           cmdcolors.txt  games       libILU.dll      libfreetype-6.dll    libintl-8.dll    libvorbisenc-2.dll   pr-downloader.exe     spring.exe&lt;br /&gt;
OpenAL32.dll    ctrlpanel.txt  glew32.dll  libbz2.dll      libgcc_s_seh-1.dll   libogg-0.dll     libvorbisfile-3.dll  share                 springsettings.cfg&lt;br /&gt;
README-SDL.txt  doc            include     libcurl.dll     libglib-2.0-0.dll    libpcre-1.dll    libwinpthread-1.dll  socket.lua            unitsync.dll&lt;br /&gt;
SDL2.dll        examples       lib         libexpat-1.dll  libharfbuzz-0.dll    libpng16-16.dll  luaui.lua            spring-dedicated.exe  zlib1.dll&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Note the presence of &amp;lt;code&amp;gt;spring.exe&amp;lt;/code&amp;gt; there. Congratulations, you now have successfully compiled Recoil!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;recompiling&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Recompiling ==&lt;br /&gt;
&lt;br /&gt;
Recompilations are much faster as the compilation cache is stored locally. After making changes in the repository (or switching to another branch, etc.), you can recompile by re-running &amp;lt;code&amp;gt;./build.sh&amp;lt;/code&amp;gt; in almost the same way as above:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;wsl&lt;br /&gt;
cd ~/spring/docker-build&lt;br /&gt;
./build.sh&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that &amp;lt;code&amp;gt;./init_container.sh&amp;lt;/code&amp;gt; does not need to be run again, &amp;lt;code&amp;gt;./build.sh&amp;lt;/code&amp;gt; will automatically detect if the container image is outdated and will tell you to run &amp;lt;code&amp;gt;./init_container.sh&amp;lt;/code&amp;gt; again when needed.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s try to make a simple change and recompile:&lt;br /&gt;
&lt;br /&gt;
* From VS Code, open the file &amp;lt;code&amp;gt;rts/System/SpringApp.cpp&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Ctrl&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;InitWindow&amp;lt;/code&amp;gt;, then change the default window name to something else (e.g. &amp;lt;code&amp;gt;HelloSpring&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Now recompile using the instructions above, and notice how much faster it is.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;automatically-using-latest-build-in-windows-game&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Automatically using latest build in Windows game =&lt;br /&gt;
&lt;br /&gt;
The build artifacts located in WSL at &amp;lt;code&amp;gt;~/spring/build-windows-64-RELWITHDEBINFO/install&amp;lt;/code&amp;gt; can automatically be made available in your local Windows game environment by creating a symbolic link that points to them under &amp;lt;code&amp;gt;&amp;amp;lt;game directory&amp;amp;gt;\data\engine\local-build&amp;lt;/code&amp;gt;, exploiting the fact WSL exposes them to Windows via &amp;lt;code&amp;gt;\\wsl$\Ubuntu\home\&amp;amp;lt;username&amp;amp;gt;\spring\build-windows-64-RELWITHDEBINFO\install&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Open a Powershell Terminal in administrator mode, and then run the following command replacing &amp;lt;code&amp;gt;&amp;amp;lt;game directory&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;username&amp;amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;New-Item -ItemType SymbolicLink -Path &amp;quot;&amp;lt;game directory&amp;gt;\data\engine\local-build&amp;quot; -Target &amp;quot;\\wsl$\Ubuntu\home\&amp;lt;username&amp;gt;\spring\build-windows-64-RELWITHDEBINFO\install&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* After the symbolic link has been created, the latest locally compiled engine build will always be available to use with the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Building]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Tracy_Profiling&amp;diff=21887</id>
		<title>Recoil:Tracy Profiling</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Tracy_Profiling&amp;diff=21887"/>
		<updated>2026-07-23T02:57:54Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;how-to-profile-the-engine-using-tracy&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= How to profile the engine using tracy =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preparation-steps&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Preparation steps: ==&lt;br /&gt;
&lt;br /&gt;
# Download Tracy, unzip it anywhere: https://github.com/wolfpld/tracy/releases/tag/v0.11.1&lt;br /&gt;
# Get the tracy engine version we are currently using from https://github.com/beyond-all-reason/RecoilEngine/releases/tag/2025.04.04&lt;br /&gt;
# Find the exact engine version folder we are currently using in BAR/data/engine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;method-a-simple&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Method A simple ===&lt;br /&gt;
&lt;br /&gt;
4A. Rename the old spring.exe to spring_vanilla.exe, and extract spring.exe from the archive to this engine folder.&lt;br /&gt;
&lt;br /&gt;
5A. Start BAR as you would otherwise via the lancher.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;method-b-advanced&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Method B advanced ===&lt;br /&gt;
&lt;br /&gt;
4B. Unzip the engine to BAR/data/engine&lt;br /&gt;
&lt;br /&gt;
5B. Get the BAR Debug Launcher exe file from here: https://github.com/beyond-all-reason/bar_debug_launcher/tree/main . Install it to BAR root folder (next to beyond-all-reason.exe)&lt;br /&gt;
&lt;br /&gt;
6B. In the BAR Debug launcher, select the tracy engine build you unzipped in step 2, and select &amp;amp;quot;Spring-launcher with rapid://byar-chobby:test&amp;amp;quot;&lt;br /&gt;
&lt;br /&gt;
6B. Hit Start in the BAR Debug launcher&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/beyond-all-reason/spring/assets/109391/dfa95d82-f132-4f86-b1db-f4d532340ba7|image]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;7&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Launch Tracy.exe, and hit connect. If it throws an instrumentation error, connect again.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/beyond-all-reason/spring/assets/109391/830e5c6e-b37f-48ab-9adc-cc297cefff46|image]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;8&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Analyze profile.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;instrumentation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Instrumentation =&lt;br /&gt;
&lt;br /&gt;
Tracy can benefit from additional manual instrumentation to allow for very accurate profiling. By default, the engine does provide a good coverage of of zones. On the image below, the yellow zones are mostly from the engine, while the blue zones are generally from BAR&#039;s widgethandler.&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/user-attachments/assets/52ce04a6-6528-4bfb-a5cb-13f5acf580c8|image]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;building-the-engine-with-tracy-enabled&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Building the engine with Tracy enabled ==&lt;br /&gt;
&lt;br /&gt;
Using the provided docker build environment, enable tracy via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;./build.sh -o -t RELEASE -C -DTRACY_ENABLE=1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;adding-zones-in-lua&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Adding Zones in Lua ==&lt;br /&gt;
&lt;br /&gt;
The rules of adding zones are the following:&lt;br /&gt;
&lt;br /&gt;
# Always call &amp;lt;code&amp;gt;tracy.ZoneEnd()&amp;lt;/code&amp;gt;, if you have multiple return paths from a function, then add &amp;lt;code&amp;gt;tracy.ZoneEnd()&amp;lt;/code&amp;gt; to all of them&lt;br /&gt;
# The lines with &amp;lt;code&amp;gt;tracy.*&amp;lt;/code&amp;gt; get removed from the lua files in non-tracy enabled builds, so they dont cost performance.&lt;br /&gt;
# Remember to name your zones in &amp;lt;code&amp;gt;tracy.ZoneBeginN()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below is an example of nesting zones:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;function gadgetHandler:GameFrame(frameNum)&lt;br /&gt;
    -- Since GameGrame should never be called nested ensure here the callinDepth&lt;br /&gt;
    -- is ok. We set it to 1 so after the run it will be set to 0 again.&lt;br /&gt;
    callinDepth = 1&lt;br /&gt;
    tracy.ZoneBeginN(&amp;quot;G:GameFrame&amp;quot;)&lt;br /&gt;
    for _, g in ipairs(self.GameFrameList) do&lt;br /&gt;
        tracy.ZoneBeginN(&amp;quot;G:GameFrame:&amp;quot; .. g.ghInfo.name)&lt;br /&gt;
        g:GameFrame(frameNum)&lt;br /&gt;
        tracy.ZoneEnd()&lt;br /&gt;
    end&lt;br /&gt;
    tracy.ZoneEnd()&lt;br /&gt;
    return&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Here is the result of the above annotation:&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/user-attachments/assets/a020ff22-a7c1-49e9-adb8-71e141e3c7d3|image]]&lt;br /&gt;
&lt;br /&gt;
Note that there are two consecutive G:GameFrame zones, one for synced and one for unsynced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;adding-messages-to-tracy&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Adding Messages to Tracy ==&lt;br /&gt;
&lt;br /&gt;
By default, all messages that go through Recoil&#039;s logging system, including &amp;lt;code&amp;gt;Spring.Echo()&amp;lt;/code&amp;gt; also generate tracy messages. This is very useful because the exact time stamp and approximate call stack of the message can be inferred from this. Also, messages can be searched.&lt;br /&gt;
&lt;br /&gt;
To use, specify a message in Lua like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if tracy then&lt;br /&gt;
    tracy.Message(string.format(&amp;quot;spawnCreepStructure: Failed to spawn %s at %d*%d*%d &amp;quot;, unitDefName, spawnPosX, spawnPosY, spawnPosZ ))&lt;br /&gt;
end&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Messages can be viewed and clicked in the messages tab of the Tracy UI, see: [[File:https://github.com/user-attachments/assets/f739bc4f-e6ff-48b1-bea6-29642206ff5f|image]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;adding-plots-to-tracy&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Adding Plots to Tracy. ==&lt;br /&gt;
&lt;br /&gt;
You can plot data in an extremely accurate way (and quickly) and view it side-by-side with the traces by initializing and plotting data.&lt;br /&gt;
&lt;br /&gt;
Note that initialization via &amp;lt;code&amp;gt;tracy.LuaTracyPlotConfig&amp;lt;/code&amp;gt; is optional. You can just &amp;lt;code&amp;gt;tracy.LuaTracyPlot&amp;lt;/code&amp;gt; if you want&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;/*** Initialize a plot in Tracy for use in debugging or profiling&lt;br /&gt;
 *&lt;br /&gt;
 * @function tracy.LuaTracyPlotConfig&lt;br /&gt;
 * @string plotName which should be initialized&lt;br /&gt;
 * @string[opt] plotFormatType &amp;quot;Number&amp;quot;|&amp;quot;Percentage&amp;quot;|&amp;quot;Memory&amp;quot;, default &amp;quot;Number&amp;quot;&lt;br /&gt;
 * @bool[opt] step stepwise chart, default true is stepwise&lt;br /&gt;
 * @bool[opt] fill color fill, default false is no fill&lt;br /&gt;
 * @number[opt] color unit32 number as BGR color, default white&lt;br /&gt;
 * @treturn nil&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/*** Update a Tracy Plot with a value&lt;br /&gt;
 *&lt;br /&gt;
 * @function tracy.LuaTracyPlot&lt;br /&gt;
 * @string plotName which LuaPlot should be updated (must have been initialized via LuaTracyPlotConfig)&lt;br /&gt;
 * @number plotvalue the number to show on the Tracy plot&lt;br /&gt;
 * @treturn nil&lt;br /&gt;
 */&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
For example, lets say we wanted to plot the lua memory usage of the engine on every update:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;if tracy and tracy.LuaTracyPlotConfig then &lt;br /&gt;
    tracy.LuaTracyPlotConfig(&amp;quot;LuaRAM&amp;quot;, &amp;quot;memory&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
function widgetHandler:Update()&lt;br /&gt;
    if tracy and tracy.LuaTracyPlot then &lt;br /&gt;
        tracy.LuaTracyPlot(&amp;quot;LuaRAM&amp;quot;, collectgarbage(&amp;quot;count&amp;quot;))&lt;br /&gt;
    end&lt;br /&gt;
        ...&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
See a wide view of the plot:&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/user-attachments/assets/566944e0-29b5-4ce7-9cf8-d84c159aab78|image]]&lt;br /&gt;
&lt;br /&gt;
See how accurate the plot is, also giving us a delta value on mouseover:&lt;br /&gt;
&lt;br /&gt;
[[File:https://github.com/user-attachments/assets/6f888782-f05c-4229-9015-d78dff6fdc4c|image]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Profiling]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Build_Environment_(Docker)&amp;diff=21886</id>
		<title>Recoil:Build Environment (Docker)</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Build_Environment_(Docker)&amp;diff=21886"/>
		<updated>2026-07-23T02:57:53Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The article migrated to https://recoilengine.org/development/building-with-docker/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Building]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Profiling_Linux_Builds_with_Perf&amp;diff=21885</id>
		<title>Recoil:Profiling Linux Builds with Perf</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Profiling_Linux_Builds_with_Perf&amp;diff=21885"/>
		<updated>2026-07-23T02:57:52Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;for-profiling-running-instances-spring-dedicated-and-spring-headless&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= For profiling running instances spring-dedicated and spring-headless =&lt;br /&gt;
&lt;br /&gt;
If you want to profile spring-dedicated, while it is running, there is one good way of doing so, using linux perf tools, which can be installed on most ubuntu/debian based systems easily.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preparing-for-a-profile-capture&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Preparing for a profile capture ==&lt;br /&gt;
&lt;br /&gt;
Find out the PID of the spring-dedicated process you wish to attach to. The process seems to have two threads, with approximately equal shares of CPU usage. Find it with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ps aux | grep spring&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember the process ID of the main thread (generally the smaller one)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;get-the-debug-symbols&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Get the debug symbols ===&lt;br /&gt;
&lt;br /&gt;
* Create a working directory for where you will store your captures.&lt;br /&gt;
* Download the debug symbols from the releases page here on github (take care to select linux, and the correct version too).&lt;br /&gt;
* Unpack the debug symbols, and make sure the symbols (e.g. spring-dedicated.dbg) are unzipped into your working directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;starting-the-profiler&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Starting the profiler ==&lt;br /&gt;
&lt;br /&gt;
Often you will need sudo permissions to perform this capture. perf will warn you otherwise.&lt;br /&gt;
&lt;br /&gt;
Example command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo perf record --pid=3140530 --freq=1000 -m 10M -o spring-dedicated_6cg_lag1.perfoutput --stat -g --call-graph dwarf -e cpu-cycles&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arguments:&lt;br /&gt;
&lt;br /&gt;
* --pid= the process id for spring-dedicated, can pass multiple pids comma separated list. This will sample every thread of the given process.&lt;br /&gt;
* --tid= the thread id of an individual thread you wish to sample (rather than the whole process). Typically the main thread has the same tid as the pid of the process.&lt;br /&gt;
* --freq= the number of samples per second to take. For higher frequencies or on slower machines, you can set the -m flag to increase perf&#039;s memory.&lt;br /&gt;
* -m (# | #M) - number of mmap data pages OR size specification with appended unit character. This memory acts as a ring buffer of perf samples the kernel writes, read from by userspace to be written to disk. Larger values can allow high resolution sampling for longer periods before dropping samples.&lt;br /&gt;
* -o the name of the output file, if you dont name it, it will overwrite previous captures&lt;br /&gt;
* -g enable call graphs (this is implied by below)&lt;br /&gt;
* --stat Record per-thread event counts. Use it with perf report -T to&lt;br /&gt;
* -e eventtype1,eventtype2 - a comma separated list of events to record. A list of supported events on your system can be found with &amp;lt;code&amp;gt;perf list&amp;lt;/code&amp;gt;. Typically, we recommend hardware events like cpu-cycles, cache-misses, and branch-misses. Be aware, the more events you specify, the more data you&#039;ll save on disk.&lt;br /&gt;
* --call-graph dwarf : the format of the call graphs. I am unsure if &#039;fp&#039; or &#039;dwarf&#039; is the correct argument here, but it seems like dwarf is better.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               When &amp;amp;quot;dwarf&amp;amp;quot; recording is used, perf also records (user) stack dump&lt;br /&gt;
               when sampled.  Default size of the stack dump is 8192 (bytes).&lt;br /&gt;
               User can change the size by passing the size after comma like&lt;br /&gt;
               &amp;amp;quot;--call-graph dwarf,4096&amp;amp;quot;.&lt;br /&gt;
               When &amp;amp;quot;fp&amp;amp;quot; recording is used, perf tries to save stack enties&lt;br /&gt;
               up to the number specified in sysctl.kernel.perf_event_max_stack&lt;br /&gt;
               by default.  User can change the number by passing it after comma&lt;br /&gt;
               like &amp;amp;quot;--call-graph fp,32&amp;amp;quot;.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;stop-the-profiler&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Stop the profiler: ==&lt;br /&gt;
&lt;br /&gt;
Press CTRL+C to stop the profiler, or send it a SIGTERM signal from code, if you are doing this automatically&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displaying-the-results-in-hostpot&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Displaying the results in hostpot ==&lt;br /&gt;
&lt;br /&gt;
# build or install hotspot following steps here: https://github.com/KDAB/hotspot#getting-hotspot&lt;br /&gt;
# run hotspot via &amp;lt;code&amp;gt;$ hotspot&amp;lt;/code&amp;gt;&lt;br /&gt;
# open the perf data file you saved from &amp;lt;code&amp;gt;perf record&amp;lt;/code&amp;gt;&lt;br /&gt;
# Enjoy! Example ui: [[File:https://github.com/beyond-all-reason/spring/assets/8520801/ad278744-9aca-44bf-ac71-2830611f56d3|image]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;displaying-the-results-in-a-browsable-format&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Displaying the results in a browsable format: ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo perf report -i spring-dedicated_6cg_lag1.perfoutput &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use the &#039;+&#039; key on your keyboard to expand call graphs within perf&lt;br /&gt;
&lt;br /&gt;
Drawing a full-on call graph:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo perf report -T -i spring-dedicated_6cg_lag1.perfoutput &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Profiling]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Pre-release_testing_and_release_checklist&amp;diff=21884</id>
		<title>Recoil:Pre-release testing and release checklist</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Pre-release_testing_and_release_checklist&amp;diff=21884"/>
		<updated>2026-07-23T02:57:51Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;pre-release-testing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Pre-release testing =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;preparation&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;0&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Get an engine version that isn&#039;t obviously broken in known ways preventing release with help from #engine. The latest ones can be downloaded from the [https://github.com/beyond-all-reason/spring/releases releases page]&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Build and release an engine. Only developers can trigger a new build, testers only need to download from above.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Release is needed so that cluster can easily grab engine.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Trigger &amp;amp;quot;Build engine (Docker)&amp;amp;quot; GitHub Actions workflow. No need to change any input boxes, just click the Run button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Trigger &amp;amp;quot;Release Engine&amp;amp;quot; workflow after the above finishes, which will automatically use the result of that build (no need to alter any input either)&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Set up engine testing host. Devs only.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Choose a cluster, and update the engine by grabbing the URL of the Linux build from the releases page (so that wget can download it)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the cluster, run&lt;br /&gt;
&amp;lt;pre&amp;gt;$ ~/spads/spads_config_bar/python3 spads_config_bar_updater.py -u [engine url from github]&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Edit &amp;lt;code&amp;gt;springServer&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;unitsyncDir&amp;lt;/code&amp;gt; parameters in &amp;lt;code&amp;gt;~/spads/etc/latest_engine_spads.conf&amp;lt;/code&amp;gt;. It&#039;s a file analogous to regular [https://github.com/beyond-all-reason/spads_config_bar/blob/main/etc/spads.conf &amp;lt;code&amp;gt;spads.conf&amp;lt;/code&amp;gt;] for the testing engine room. Ensure that &amp;lt;code&amp;gt;springServerType&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;spring-headless&amp;lt;/code&amp;gt;. Dedicated servers dont run sim code, headless does.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;private-testing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Private testing ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;start-chobby&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Start Chobby ===&lt;br /&gt;
&lt;br /&gt;
Download engine, unpack in &amp;lt;code&amp;gt;engines/&amp;lt;/code&amp;gt; and use [https://github.com/beyond-all-reason/bar_debug_launcher BAR Debug Launcher] to start Chobby using new engine version.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;details&amp;gt;&amp;lt;summary&amp;gt;Alternative methods without debug launcher&amp;lt;/summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;using-spring-launcher&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== Using spring launcher ====&lt;br /&gt;
&lt;br /&gt;
Create a &amp;lt;code&amp;gt;config-dev.json&amp;lt;/code&amp;gt; file in the &amp;lt;code&amp;gt;data/&amp;lt;/code&amp;gt; folder with contents like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{&lt;br /&gt;
    &amp;amp;quot;title&amp;amp;quot; : &amp;amp;quot;Beyond All Reason&amp;amp;quot;,&lt;br /&gt;
    &amp;amp;quot;setups&amp;amp;quot; : [&lt;br /&gt;
        {&lt;br /&gt;
            &amp;amp;quot;package&amp;amp;quot;: {&lt;br /&gt;
                &amp;amp;quot;id&amp;amp;quot;: &amp;amp;quot;engine-test&amp;amp;quot;,&lt;br /&gt;
                &amp;amp;quot;display&amp;amp;quot;: &amp;amp;quot;Engine Test&amp;amp;quot;&lt;br /&gt;
            },&lt;br /&gt;
            &amp;amp;quot;no_start_script&amp;amp;quot; : true,&lt;br /&gt;
            &amp;amp;quot;no_downloads&amp;amp;quot; : true,&lt;br /&gt;
            &amp;amp;quot;auto_start&amp;amp;quot;: true,&lt;br /&gt;
            &amp;amp;quot;launch&amp;amp;quot;: {&lt;br /&gt;
                &amp;amp;quot;start_args&amp;amp;quot; : [&amp;amp;quot;--menu&amp;amp;quot;, &amp;amp;quot;rapid://byar-chobby:test&amp;amp;quot;]&lt;br /&gt;
                &amp;amp;quot;engine&amp;amp;quot;: &amp;amp;quot;VERSION_TO_TEST&amp;amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    ]&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
Replace &amp;lt;code&amp;gt;VERSION_TO_TEST&amp;lt;/code&amp;gt; with the name of directory in &amp;lt;code&amp;gt;engines/&amp;lt;/code&amp;gt; that contains the engine version you want to test, e.g. &amp;lt;code&amp;gt;105.1.1-1214-gcf8d087 bar&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Finally, launch the launcher pointing at this config: &amp;lt;code&amp;gt;C:\Users\*\AppData\Local\Programs\Beyond-All-Reason\Beyond-All-Reason.exe -c C:\Users\*\AppData\Local\Programs\Beyond-All-Reason\data\config-dev.json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;run-engine-from-command-line&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== Run engine from command line ====&lt;br /&gt;
&lt;br /&gt;
Manually start new engine version from command line like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ {SPRING_BINARY} --write-dir {DATA_DIR} --isolation --menu rapid://byar-chobby:test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: Downloads in Chobby won&#039;t work in this method, as downloads require working launcher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/details&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;tests&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Tests ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Test local skirmish game:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Starting&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Saving&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Loading&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;AI does stuff&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Sync test online&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Join the engine testing autohost (set up during preparation) and run game with plenty of Barbarian AIs on a mixed mode map such as Pentos to check if there are any sync issues.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Check for any visual bugs or artifacts.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Check infolog for any unusual messages&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;public-testing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Public testing ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;publish-testing-engine&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Publish testing engine ===&lt;br /&gt;
&lt;br /&gt;
# Create/Update a &amp;amp;quot;Engine Test&amp;amp;quot; entries in the launcher [https://github.com/beyond-all-reason/BYAR-Chobby/blob/master/dist_cfg/config.json &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt;] that have the same options as production config, but new testing engine version.&lt;br /&gt;
# Launch &amp;lt;code&amp;gt;Publish launcher config.json&amp;lt;/code&amp;gt; GitHub Actions workflow in the &amp;lt;code&amp;gt;BYAR-Chobby&amp;lt;/code&amp;gt; repo to publish the &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt; update to all players.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;testing&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
Write announce message in the #dev-main channel tagging testers to test the new engine version using the &amp;amp;quot;Engine Test&amp;amp;quot; launcher config option.&lt;br /&gt;
&lt;br /&gt;
The message should contain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Basic local game testing instructions similar to private testing, just play some games locally and in engine testing room.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Special testing instruction for features/changes that were done in the engine since last release. This should be gathered from developers in the #engine room into a document that will be then also used as a base for the release message announcement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;E.g.: If there were changes to minimap, mention what is expected/unexpected in testing instructions to get better feedback from players to look for issues there.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Reaction button for each of the graphics configurations to ensure testing covered all of them:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Linux/Intel&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Linux/AMD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Linux/NVIDIA&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Windows/Intel&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Windows/AMD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Windows/NVIDIA&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommendation&#039;&#039;&#039;: If a lot of changes were being made to graphics, to make it easier for players to point issues, it&#039;s highly recommended to prepare a replay of a game showcasing those features and a video recording of that replay from system that showcases how it should look like when rendered correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;release&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Release =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;0&amp;quot; style=&amp;quot;list-style-type: decimal;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Verify all the bug reports from testers and ensure that &#039;&#039;&#039;all&#039;&#039;&#039; of the graphics configurations were tested.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Prepare engine release announcement message with promo team. Announce in #spads lobby channel to all hosts with &amp;amp;quot;!say Engine update coming in, this lobby will close after the game is finished, please restart your clients after to update&amp;amp;quot;.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update all clusters by shutting down cluster managers, by typing !quit into #spads lobby channel. This will exit all managers and non-ingame instances, as well as tell running instances to exit once their games are over.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update their engine and configs with:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$ ~/spads/spads_config_bar/python3 spads_config_bar_updater.py -c -u [engine url from github]&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Restart AU, US, EU and EU1 clusters via ~/spads/etc/spads_cluster_launcher.sh&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update debug symbols for engine on [https://github.com/beyond-all-reason/stacktrace_translator stacktrace translator]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$ python update_debug_symbols.py [windows debug symbol.tgz url]&amp;lt;/pre&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Update [https://github.com/beyond-all-reason/BYAR-Chobby/blob/master/dist_cfg/config.json &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt;] entries with new engine version.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Launch &amp;lt;code&amp;gt;Publish launcher config.json&amp;lt;/code&amp;gt; GitHub Actions workflow in &amp;lt;code&amp;gt;BYAR-Chobby&amp;lt;/code&amp;gt; repo to publish the &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt; update to all players.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Publish new engine release announcement.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Development]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Move_Definitions&amp;diff=21883</id>
		<title>Recoil:Move Definitions</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Move_Definitions&amp;diff=21883"/>
		<updated>2026-07-23T02:57:51Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;move-definitions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Move Definitions =&lt;br /&gt;
&lt;br /&gt;
A Move Definition holds information that determines accessibility of areas of a map for any unit that uses that Move Definition; this information is used for path finding and for unit movement-based collisions. Many unit types typically share a Move Definition. The more Move Definitions you have in a game the more memory and CPU power the engine has to use to maintain the pathing data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;new-values-for-move-definitions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== New values for Move Definitions ==&lt;br /&gt;
&lt;br /&gt;
Some values used for unit movement were defined per-unit-type. However that means the pathing system, which only works on Move Definitions, was unable to correctly determine pathable areas. So, for movement purposes-only, these new values are used instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt; is defined in Elmos and is used to determine vertical collisions in water. This does not affect projectile collisions, it only affects unit movement. The engine will default this value to the calculated width of the units move step in elmos and for Bots it is assumed to be as tall as it is wide, and half that for other unit types.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: minimum height is 1&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;waterline&amp;lt;/code&amp;gt; is defined in positive Elmos and ise used to determine the maximum depth the unit will sink. If the ground goes deeper than this, then the unit will not drop further. By default, bot and tank units are assumed to sink to the bottom of the water; hovercraft default to 0, ships are defaulted to 1, and submarines to double their height.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: using negative values get converted to positive numbers.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Configuration]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Mod_Rules&amp;diff=21882</id>
		<title>Recoil:Mod Rules</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Mod_Rules&amp;diff=21882"/>
		<updated>2026-07-23T02:57:50Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mod Rules can be used to configure the behaviour of the simulation systems within the engine. As they get added to the engine they will be documented here.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;int flankingBonus.defaultMode&amp;lt;/code&amp;gt; use to specify the method of flanking bonus to apply for units. Set to zero to deactivate flanking bonus. &amp;lt;code&amp;gt;default = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float flankingBonus.defaultMax&amp;lt;/code&amp;gt; use to specify the maximum damage bonus used by the flanking bonus (unless overriden at unit def level.) &amp;lt;code&amp;gt;default = 1.9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float flankingBonus.defaultMin&amp;lt;/code&amp;gt; use to specify the minimum damage bonus used by the flanking bonus (unless overriden at unit def level.) &amp;lt;code&amp;gt;default = 0.9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;int movement.groundUnitCollisionAvoidanceUpdateRate&amp;lt;/code&amp;gt; use to control the rate in sim frames that ground/sea units update their unit collision avoidance vectors. A lower number will increase CPU load, but improve reaction time of collision avoidance. &amp;lt;code&amp;gt;Default = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float movement.maxCollisionPushMultiplier&amp;lt;/code&amp;gt; use to restrict the maximum distance, relative to a unit&#039;s max speed, a unit can be pushed as a result of collision deconfliction in a single frame. Setting to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; cuts down the ability of many fast units pushing a slow unit faster than it should go. &amp;lt;code&amp;gt;Default = infinity&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;int movement.unitQuadPositionUpdateRate&amp;lt;/code&amp;gt; use to control the rate in sim frames that a unit&#039;s position in the quad grid is updated. A lower number will increase CPU load, but increase accuracy of collision detection. &amp;lt;code&amp;gt;Default = 3&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bool system.enableSmoothMesh&amp;lt;/code&amp;gt; use to enable/disable the SmoothGroundMesh, often used to help aircraft navigate drastic changes in terrain. &amp;lt;code&amp;gt;Default = true&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;int system.quadFieldQuadSizeInElmos&amp;lt;/code&amp;gt; use to adjust the size (in Elmos) of the quads used for grouping objects for collision detection. Objects get registered in all quads they overlap, so you want to avoid making the quads too small. Also, the collision queries have to assess all unique units that come up in all quads that overlap a collision query area, so the larger the quad size the more unwanted objects that will have to be checked. &amp;lt;code&amp;gt;default = 128&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float system.pathFinderUpdateRate&amp;lt;/code&amp;gt; is removed in engine release after 1821.&lt;br /&gt;
* &amp;lt;code&amp;gt;float system.pathFinderUpdateRateScale&amp;lt;/code&amp;gt; use to adjust the rate in which to apply map changes to the pathing system. &amp;amp;gt; 1.0f to increase the intensisty, &amp;amp;lt;1.f to reduce it. Increasing the rate will mean the pathing system responds to changes faster, but at the cost of increased CPU usage. Likewise, reducing the rate will decrease CPU usage, but slow down the response time of the pathing reacting to map changes.&lt;br /&gt;
&lt;br /&gt;
Mod Rules for debugging purposes: &#039;&#039;(removed in next engine release after 1821)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bool system.pfForceSingleThreaded&amp;lt;/code&amp;gt; use to force pathing system to send pathing requests single threaded. This is for debugging purposes. &amp;lt;code&amp;gt;Default = false&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bool system.pfForceUpdateSingleThreaded&amp;lt;/code&amp;gt; use to force pathing vertex updates to be processed single threaded. This is for debugging purposes. &amp;lt;code&amp;gt;Default = false&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bool movement.forceCollisionsSingleThreaded&amp;lt;/code&amp;gt; use to force collisions system to use only a single thread. This is for debugging purposes. &amp;lt;code&amp;gt;Default = false&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;bool movement.forceCollisionAvoidanceSingleThreaded&amp;lt;/code&amp;gt; use to force collision avoidance system to use only a single thread. This is for debugging purposes. &amp;lt;code&amp;gt;Default = false&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mod Rules coming up: &#039;&#039;Engine version 2208+&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;int system.qtMaxNodesSearched&amp;lt;/code&amp;gt; limits how many nodes the QTPFS pathing system is permitted to search. A smaller number improves CPU performance, but a larger number will resolve longer paths better, without needing to refresh the path. &amp;lt;code&amp;gt;Default = 8192&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float system.qtRefreshPathMinDist&amp;lt;/code&amp;gt; minimum size, in elmos, an incomplete path has to be to allow the path to be refreshed. Once the path is smaller than this distance then the system assumes the path cannot be improved further. A larger number reduces CPU usage, but also increses the chance that a unit will become trapped in a complex terrain/base setup even if there&#039;s a route that would bring the unit nearer to the goal. &amp;lt;code&amp;gt;Default = 2000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;float system.qtMaxNodesSearchedRelativeToMapOpenNodes&amp;lt;/code&amp;gt; limits how many nodes the QTPFS pathing system is permitted to search, like qtMaxNodesSearched, except that it calculated based off a relative to walkable nodes in the map. The larger of this and qtMaxNodesSearched will be used. &amp;lt;code&amp;gt;Default = 0.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Configuration]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:MINGW64_Setup_(Windows_x64)&amp;diff=21881</id>
		<title>Recoil:MINGW64 Setup (Windows x64)</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:MINGW64_Setup_(Windows_x64)&amp;diff=21881"/>
		<updated>2026-07-23T02:57:49Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;[!WARNING]&amp;lt;br /&amp;gt;&lt;br /&gt;
This page might be a bit hard to follow, if you are just starting out prefer to follow references [https://github.com/beyond-all-reason/RecoilEngine/blob/master/README.markdown#compiling from the main project readme] before trying this method.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Create a fork of or clone of the recoil engine https://github.com/beyond-all-reason/spring.git&lt;br /&gt;
&lt;br /&gt;
Recursively clone the submodules: &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you clone your fork, download the tags: &amp;lt;code&amp;gt;git remote add upstream https://github.com/beyond-all-reason/spring.git&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git fetch --all --tags&amp;lt;/pre&amp;gt;&lt;br /&gt;
Clone mingwlibs64 into the engine directory : https://github.com/beyond-all-reason/mingwlibs64&lt;br /&gt;
&lt;br /&gt;
Launch cmake with cmake-gui .&lt;br /&gt;
&lt;br /&gt;
Set source code to the cloned spring repository.&lt;br /&gt;
&lt;br /&gt;
Pick the build dir separate from the main spring dir (for example spring/build)&lt;br /&gt;
&lt;br /&gt;
In the CMAKELIST file in spring change (AI_TYPES = ALL) to (AI_TYPES = NATIVE). [copied from MSVC tutorial,perhaps not necessary]&lt;br /&gt;
&lt;br /&gt;
Choose MinGW Makefiles as the generator and then Generate&lt;br /&gt;
&lt;br /&gt;
Use mingw32-make to build the project : &amp;lt;code&amp;gt;mingw32-make.exe -j {substitute computer logical cores - 1} engine-legacy engine-headless engine-dedicated&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy all the dlls from mingwlibs64/dll into the build directory&lt;br /&gt;
&lt;br /&gt;
You should be able to open spring.exe&lt;br /&gt;
&lt;br /&gt;
In the build directory add games/ and maps/ folder. The games and maps you place respectively will appear within the spring engine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Building]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_UnsyncedRead&amp;diff=21880</id>
		<title>Recoil:Lua UnsyncedRead</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_UnsyncedRead&amp;diff=21880"/>
		<updated>2026-07-23T02:57:49Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;springgetnanoprojectileparams---startrot-number-speed-number-accel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.GetNanoProjectileParams() -&amp;amp;gt; startRot, number speed, number accel. ===&lt;br /&gt;
&lt;br /&gt;
Gets the rotation params of the nano-building projectile. speed: deg/s, accel: deg/s2, startRot: deg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springgetrenderfeaturesdrawflagchangedbool-senddrawflags---table-featureids--table-drawflags&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.GetRenderFeaturesDrawFlagChanged(bool sendDrawFlags) -&amp;amp;gt; table featureIds [, table drawFlags] ===&lt;br /&gt;
&lt;br /&gt;
Gets a list of feature Ids whose DrawFlags have changed since the last render frame. Set sendDrawFlags = true to also get a the current DrawFlags for each of those features. The index positions of the featureIds and drawFlags tables correlate to the same feature.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springgetrenderunitsdrawflagchangedbool-senddrawflags---table-unitids--table-drawflags&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.GetRenderUnitsDrawFlagChanged(bool sendDrawFlags) -&amp;amp;gt; table unitIds [, table drawFlags] ===&lt;br /&gt;
&lt;br /&gt;
Gets a list of unit Ids whose DrawFlags have changed since the last render frame. Set sendDrawFlags = true to also get a the current DrawFlags for each of those units. The index positions of the unitIds and drawFlags tables correlate to the same unit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_UnsyncedCtrl&amp;diff=21879</id>
		<title>Recoil:Lua UnsyncedCtrl</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_UnsyncedCtrl&amp;diff=21879"/>
		<updated>2026-07-23T02:57:48Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;springsetnanoprojectileparamsnumber-startrot-number-speed-number-accel&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.SetNanoProjectileParams(number startRot, number speed, number accel) ===&lt;br /&gt;
&lt;br /&gt;
Sets the rotation params of the nano-building projectile. Speed: deg/s, Acceleration: deg/s2, StartRot: deg.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springyieldnumber-ms---boolean&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.Yield(number ms) -&amp;amp;gt; boolean ===&lt;br /&gt;
&lt;br /&gt;
To be (optionally) used as assistance mean with async loading (&amp;lt;code&amp;gt;LoadingMT = 1&amp;lt;/code&amp;gt; re-implementation). &amp;lt;code&amp;gt;ms&amp;lt;/code&amp;gt; - specifies the amount of time in ms to sleep (default is 10). The purpose of the call is to give back OpenGL context from game-loading thread back to main thread to process events and draw with LuaIntro. Boolean return indicates if Spring.Yield() should be called moving on.&lt;br /&gt;
&lt;br /&gt;
Ideally Spring.Yield() should be called from widgethandler/gadgethandler:Initialize() like following (gadgethandler example):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;function gadgetHandler:Initialize()&lt;br /&gt;
  local doMoreYield = (Spring.Yield ~= nil);&lt;br /&gt;
..........&lt;br /&gt;
  for k, gf in ipairs(gadgetFiles) do&lt;br /&gt;
    local gadget = self:LoadGadget(gf)&lt;br /&gt;
    if (gadget) then&lt;br /&gt;
      table.insert(unsortedGadgets, gadget)&lt;br /&gt;
      if not IsSyncedCode() and doMoreYield then&lt;br /&gt;
        doMoreYield = doMoreYield and Spring.Yield()&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_SyncedControl&amp;diff=21878</id>
		<title>Recoil:Lua SyncedControl</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_SyncedControl&amp;diff=21878"/>
		<updated>2026-07-23T02:57:47Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;original-height-map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Original Height Map ==&lt;br /&gt;
&lt;br /&gt;
The original height map represents the correct levels that the map should have if the map has sustained no damage and used by the restore terrain command to determine what the correct height levels should be.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note that this does not affect the current height map. You will need to call functions such as LevelHeightMap to change the map&#039;s current terrain levels.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springadjustoriginalheightmap-number-x1-number-z1--number-x2-number-z2--number-height-&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.AdjustOriginalHeightMap( number x1, number z1 [, number x2, number z2 ], number height ) ===&lt;br /&gt;
&lt;br /&gt;
Adds the given height (which can be negative) the original height map in the specified area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springleveloriginalheightmap-number-x1-number-z1--number-x2-number-z2--number-height-&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.LevelOriginalHeightMap( number x1, number z1 [, number x2, number z2 ], number height ) ===&lt;br /&gt;
&lt;br /&gt;
Change the original height map to a specific value in the specified area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springrevertoriginalheightmap-number-x1-number-z1--number-x2-number-z2--number-origfactor-&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.RevertOriginalHeightMap( number x1, number z1 [, number x2, number z2 ], number origFactor ) ===&lt;br /&gt;
&lt;br /&gt;
Restore an area of the original height map to the levels as first read from the map file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springsetoriginalheightmapfunc-lua_function--arg1--arg2-------nil--number-abstotaloriginalheightmapamountchanged&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.SetOriginalHeightMapFunc( lua_function [, arg1 [, arg2 [, ... ]]] ) -&amp;amp;gt; nil | number absTotalOriginalHeightMapAmountChanged ===&lt;br /&gt;
&lt;br /&gt;
Use a custom function to change the original height map. These custom functions have to use special function to apply the changes to the original height map: AddOriginalHeightMap and SetOriginalHeightMap (see the following functions)&lt;br /&gt;
&lt;br /&gt;
Example code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Spring.SetOriginalHeightMapFunc(function()&lt;br /&gt;
    for z=0,Game.mapSizeZ, Game.squareSize do&lt;br /&gt;
        for x=0,Game.mapSizeX, Game.squareSize do&lt;br /&gt;
            Spring.SetOriginalHeightMap( x, z, 200 + 20 * math.cos((x + z) / 90) )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;springaddoriginalheightmap-number-x-number-z-number-height----nil--number-newheight&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.AddOriginalHeightMap( number x, number z, number height ) -&amp;amp;gt; nil | number newHeight ===&lt;br /&gt;
&lt;br /&gt;
Can only be called in SetOriginalHeightMapFunc(). Adds the given height (which can be negative) the original height map in the specified area.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;springsetoriginalheightmap-number-x-number-z-number-height--number-terraform--1-----nil--number-absheightdiff&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Spring.SetOriginalHeightMap( number x, number z, number height [, number terraform = 1 ] ) -&amp;amp;gt; nil | number absHeightDiff ===&lt;br /&gt;
&lt;br /&gt;
Can only be called in SetOriginalHeightMapFunc(). Change the original height map to a specific value in the specified area. The terraform argument is a scaling factor. It represents how much towards the specified height the current height map should be changed, for exmaple:&lt;br /&gt;
&lt;br /&gt;
If =0 nothing will be changed (the terraform starts) and if =1 the terraform will be finished and the specific height value will be the new current height map level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_Handle&amp;diff=21877</id>
		<title>Recoil:Lua Handle</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_Handle&amp;diff=21877"/>
		<updated>2026-07-23T02:57:46Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;unitfeaturecollisionnumber-colliderunitid-number-collideefeatureid&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== UnitFeatureCollision(number colliderUnitId, number collideeFeatureId) ===&lt;br /&gt;
&lt;br /&gt;
This callback is triggered whenever a unit collides with a feature.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: this function used to allow a bool to be returned. When set to true it would prevent the engine from processing the collision. This is now &#039;&#039;&#039;deprecated&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unitunitcollisionnumber-colliderunitid-number-collideeunitid&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== UnitUnitCollision(number colliderUnitId, number collideeUnitId) ===&lt;br /&gt;
&lt;br /&gt;
This callback is triggered whenever a unit collides with another unit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: this function used to allow a bool to be returned. When set to true it would prevent the engine from processing the collision. This is now &#039;&#039;&#039;deprecated&#039;&#039;&#039;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_annotations_convention&amp;diff=21876</id>
		<title>Recoil:Lua annotations convention</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_annotations_convention&amp;diff=21876"/>
		<updated>2026-07-23T02:57:45Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;[!NOTE] This is just a WIP document to contain information that should be extracted and ported to the new Recoil official site, when we do document enginedev concerns&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Here&#039;s an example of using the documentation header to provide for table of contents support:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;/***&lt;br /&gt;
 *&lt;br /&gt;
 * @function VBO:CopyTo&lt;br /&gt;
 *&lt;br /&gt;
 * Copies the current content of the buffer to another buffer. That another buffer is expected to have sufficient allocation.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This would look on a table of contents (when we implement a proper index/toc), and on the documentation body later, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;md&amp;quot;&amp;gt;{toc}&lt;br /&gt;
- VBO:CopyTo Copies the current content of the buffer to another buffer. That another buffer is expected to have sufficient allocation.&lt;br /&gt;
&lt;br /&gt;
{below}&lt;br /&gt;
### function VBO:CopyTo&lt;br /&gt;
&lt;br /&gt;
Copies the current content of the buffer to another buffer. That another buffer is expected to have sufficient allocation.&amp;lt;/pre&amp;gt;&lt;br /&gt;
Suggestion is something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;/*** Copy the contents of the VBO to another VBO.&lt;br /&gt;
 *&lt;br /&gt;
 * @function VBO:CopyTo&lt;br /&gt;
 *&lt;br /&gt;
 * Destination VBO is expected to have sufficient allocation size. When that&#039;s not the case, &amp;lt;shit&amp;gt; happens.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Would look rendered like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;md&amp;quot;&amp;gt;{toc}&lt;br /&gt;
- VBO:CopyTo Copy the contents of the VBO to another VBO.&lt;br /&gt;
&lt;br /&gt;
{below}&lt;br /&gt;
### function VBO:CopyTo&lt;br /&gt;
&lt;br /&gt;
{highlighted brief description}&lt;br /&gt;
Copy the contents of the VBO to another VBO.&lt;br /&gt;
&lt;br /&gt;
{further description}&lt;br /&gt;
Destination VBO is expected to have sufficient allocation size. When that&#039;s not the case, &amp;amp;lt;shit&amp;amp;gt; happens.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;(I took some liberty to rewrite a little bit, &amp;lt;code&amp;gt;VBO:&amp;lt;/code&amp;gt; already indicates that it operates on self, and we should know VBO is a buffer already. So I simplified it a little bit, feel free to ignore the rewrite and just consider the &amp;lt;code&amp;gt;brief_description|more_description&amp;lt;/code&amp;gt; concept I want to illustrate)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I know when coding we don&#039;t care too much about these things with the most detail, and that&#039;s perfectly fine. Just wanted to provide information, so we can support the format we want and will support in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Lua_VBO_and_VAO&amp;diff=21875</id>
		<title>Recoil:Lua VBO and VAO</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Lua_VBO_and_VAO&amp;diff=21875"/>
		<updated>2026-07-23T02:57:44Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Previously hosted at this wiki, the guide is now accessible as a guide on the site: https://beyond-all-reason.github.io/spring/guides/lua-vbo-vao&lt;br /&gt;
&lt;br /&gt;
Alternatively one can find it here: https://github.com/beyond-all-reason/spring/blob/BAR105/doc/site/guides/lua-vbo-vao.markdown&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Lua]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Known_games&amp;diff=21874</id>
		<title>Recoil:Known games</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Known_games&amp;diff=21874"/>
		<updated>2026-07-23T02:57:44Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Because the list at springrts wiki is unreliable and I want to know where and when to send PRs if I make a backwards-incompatible engine change. (Or just for discovery.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;alive-current-engine-version&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== alive (current engine version) ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/ZeroK-RTS/Zero-K (2314)&lt;br /&gt;
* https://github.com/beyond-all-reason/Beyond-All-Reason ([https://github.com/beyond-all-reason/BYAR-Chobby/commits/master/dist_cfg/config.json see here])&lt;br /&gt;
* https://github.com/SplinterFaction/SplinterFaction (2472 no autohost. Core game is very nearly complete. Unfortunately development is slow due to career job)&lt;br /&gt;
* https://github.com/FluidPlay/TAP (2438)&lt;br /&gt;
* https://github.com/springraaar/metal_factions (2438)&lt;br /&gt;
* https://github.com/techannihilation/TA (2438)&lt;br /&gt;
* https://github.com/GoogleFrog/spring1944 (matches ZK)&lt;br /&gt;
* https://github.com/PicassoCT/MOSAIC (1544-g058c8ea BAR105)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;unsure-if-alive&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== unsure if alive ===&lt;br /&gt;
&lt;br /&gt;
* https://github.com/spring1944/spring1944&lt;br /&gt;
* https://github.com/azaremoth/cursed&lt;br /&gt;
* https://github.com/sprunk/kernel-panic (2004)&lt;br /&gt;
* https://github.com/DarkBlueDiamond/VroomRTS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;interesting-breakpoints-that-allow-prs&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== interesting breakpoints that allow PRs ===&lt;br /&gt;
&lt;br /&gt;
* 1801 - unit defs / UnitDefs keys unification&lt;br /&gt;
* 1873 - recursive VFS.DirList&lt;br /&gt;
* 2322 - GetUnitHeading radians&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Reference]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Engine_Settings_Config_File&amp;diff=21873</id>
		<title>Recoil:Engine Settings Config File</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Engine_Settings_Config_File&amp;diff=21873"/>
		<updated>2026-07-23T02:57:43Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;engine-settings-config-file-springsettingscfg&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Engine Settings Config File (SpringSettings.cfg) =&lt;br /&gt;
&lt;br /&gt;
This configration file is used to configure the non-simulation aspects of the engine. (For Simulation Configure see Mod Rules)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;additions-since-the-fork-of-the-spring-engine&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Additions since the fork of the Spring Engine ==&lt;br /&gt;
&lt;br /&gt;
The following settings have been added to the engine since the fork of the Spring Engine.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;DumpGameStateOnDesync&amp;lt;/code&amp;gt;. When set to true (1) on the server, the server will request all clients to produce a local copy of the current game state the first time a desync is detected in a match (effectively calling /dumpstate.) &amp;lt;code&amp;gt;Default: false (0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Configuration]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Engine_Configuration_Overview&amp;diff=21872</id>
		<title>Recoil:Engine Configuration Overview</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Engine_Configuration_Overview&amp;diff=21872"/>
		<updated>2026-07-23T02:57:42Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the ways to configure games running on the Recoil Engine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;mod-rules&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Mod Rules =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/beyond-all-reason/spring/wiki/Mod-Rules Mod Rules]&lt;br /&gt;
&lt;br /&gt;
For all configuration changes that impact only the Simulation, whether synced or unsynced.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;spring-settings&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Spring Settings =&lt;br /&gt;
&lt;br /&gt;
[https://github.com/beyond-all-reason/spring/wiki/Engine-Settings-Config-File Spring Settings]&lt;br /&gt;
&lt;br /&gt;
For client-side only configuration that does not impact the simulation. Drawing configuration for example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;start-up-script&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Start Up Script =&lt;br /&gt;
&lt;br /&gt;
(No link yet)&lt;br /&gt;
&lt;br /&gt;
For per-game configuration, such as map, number of players. These need to be matched for each client and can change on a per game basis.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Configuration]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Determinism_in_Engine&amp;diff=21871</id>
		<title>Recoil:Determinism in Engine</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Determinism_in_Engine&amp;diff=21871"/>
		<updated>2026-07-23T02:57:41Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The synchronised code in the Recoil Engine is deterministic. Therefore certain considerations must be observed when working in these areas of code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;general-programming&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== General Programming ==&lt;br /&gt;
&lt;br /&gt;
There are a few programming practices that should be observed in the engine simulation code to help avoid introducing desyncs.&lt;br /&gt;
&lt;br /&gt;
* Use the Recoil provided RNG function.&lt;br /&gt;
* Use only stable sorting algorithms i.e. a sorting algorithm that maintains the relative order of the items with equal sort keys.&lt;br /&gt;
* Avoid relying on sort of order of strings - different locales can have different sort orders.&lt;br /&gt;
* Do not call functions as arguments to other functions - the order of the calls are not guaranteed. Instead, call them before the function and store the return value in a local variable.&lt;br /&gt;
&lt;br /&gt;
This example will risk a desync:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;DoSomething(GetRNG(), GetRNG());&amp;lt;/pre&amp;gt;&lt;br /&gt;
Instead do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;int firstNumber = GetRNG();&lt;br /&gt;
int secondNumber = GetRNG();&lt;br /&gt;
DoSomething(firstNumber, secondNumber);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;multi-threading&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Multi-threading ==&lt;br /&gt;
&lt;br /&gt;
Multi-threading parts of the engine may offer the opportunity for better performance; however, there are several situations that can cause the engine to desync. So avoid the following:&lt;br /&gt;
&lt;br /&gt;
* Do not trigger script call-backs during an MT section. Scripts, whether COB, BOS, Lua, or LUS, are not thread-safe. Collect the calls that need to be made and issue them in a proceeding single-threaded section.&lt;br /&gt;
* Synced parameters must not be modified in an MT section because they update the sync checksum on update. Store the new value in a separate parameter and apply the new value in a proceeding single-threaded section.&lt;br /&gt;
* When a parameter is updated when visited per job, the parameter needs to be expanded in an array with a number of entries equal to &amp;lt;code&amp;gt;ThreadPool::MAX_THREADS&amp;lt;/code&amp;gt;. This allows each thread to tracking visiting the parameter without interfering with other threads&#039; visits by using an &amp;lt;code&amp;gt;index == thread number&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pay careful attention to whether a job output can influence an input into another job. For example, don&#039;t move units if the jobs also check the unit&#039;s position.&lt;br /&gt;
* Beware of lists resizing and potentially reordering their elements as a result.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;sse-instructions&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== SSE Instructions ==&lt;br /&gt;
&lt;br /&gt;
Do not use the reciprocal functions: Intel specified a maximum error guarantee, which allowed them to use make adjustments depending on the needs of each processor family, but that can result in different results at the bit level.&lt;br /&gt;
&lt;br /&gt;
As a result, do not use the following SSE functions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;_mm_rcp_ps()&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;_mm_rcp_ss()&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;_mm_rsqrt_ps()&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;_mm_rsqrt_ss()&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;fpu-x87&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== FPU (x87) ==&lt;br /&gt;
&lt;br /&gt;
The engine uses the strepflop library to setup all FPU-related CPU-bound hardware to ensure that regardless of whether a compiler has used SSE or FPU, general floating point calculations will conform to IEEE754. This is important because most third party libraries are pre-compiled to use the FPU rather than SSE.&lt;br /&gt;
&lt;br /&gt;
The engine also checks multiple times in each sim frame that the FPU options are correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;hints-for-debugging-a-desync&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== Hints for debugging a desync ===&lt;br /&gt;
&lt;br /&gt;
https://springrts.com/wiki/Debugging_sync_errors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Engine Internals]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Console_Commands&amp;diff=21870</id>
		<title>Recoil:Console Commands</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Console_Commands&amp;diff=21870"/>
		<updated>2026-07-23T02:57:40Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;During a match, if you start a chat message with a forward slash (/) you will issue a console command. Documentated here are the console commands the engine responds to.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/cheat&amp;lt;/code&amp;gt; - activates console commands that have the potential to be used for cheating.&lt;br /&gt;
* &amp;lt;code&amp;gt;/airmesh&amp;lt;/code&amp;gt; - shows the Smooth Height Mesh that is available to aircraft. This now requires &amp;lt;code&amp;gt;/cheat&amp;lt;/code&amp;gt; to be activated because the air mesh responds to changes to the height map during a match (https://github.com/beyond-all-reason/spring/pull/289)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Reference]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:ClientGameState_and_ServerGameState_state_dumps&amp;diff=21869</id>
		<title>Recoil:ClientGameState and ServerGameState state dumps</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:ClientGameState_and_ServerGameState_state_dumps&amp;diff=21869"/>
		<updated>2026-07-23T02:57:39Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In case a server instance of Recoil has a springsetting &amp;lt;code&amp;gt;DumpGameStateOnDesync = 1&amp;lt;/code&amp;gt; (see https://github.com/beyond-all-reason/spring/wiki/Engine-Settings-Config-File) this will force creation of local state dump files for a desync frame (when the first desync in a particular game is detected).&lt;br /&gt;
&lt;br /&gt;
The files will be named &amp;lt;code&amp;gt;ServerGameState&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ClientGameState&amp;lt;/code&amp;gt; followed by a random negative or positive number (will be unique for all game participants), followed by two numbers representing a desync frame number.&lt;br /&gt;
&lt;br /&gt;
Example filenames for the same desynced game from different players: &amp;lt;code&amp;gt;ClientGameState-216428739-4589-4589.txt&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;ClientGameState--398141872-4589-4589.txt&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/beyond-all-reason/spring/files/13701364/ClientGameState--398141872-4589-4589.zip Example of a game state dump file]&lt;br /&gt;
&lt;br /&gt;
Upon a desync event or request deliver the following files to the engine devs (via an engine Github issue or through Discord):&lt;br /&gt;
&lt;br /&gt;
# One &amp;lt;code&amp;gt;(Server|Client)GameState&amp;lt;/code&amp;gt; file from a player or the server representing a majority &amp;amp;quot;version&amp;amp;quot; of the simulation (not reporting as desynced).&lt;br /&gt;
# One or more files from a desynced player/players (as reported by the majority).&lt;br /&gt;
&lt;br /&gt;
Examining the differences in these files helps trace the possible desync sources in the engine or game code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Engine Internals]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Building_on_MSVC&amp;diff=21868</id>
		<title>Recoil:Building on MSVC</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Building_on_MSVC&amp;diff=21868"/>
		<updated>2026-07-23T02:57:37Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span id=&amp;quot;clone&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Clone ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;git clone --recursive https://github.com/beyond-all-reason/RecoilEngine RecoilEngine&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If you cloned before without --recursive, you can apply --recursive with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;cd RecoilEngine&lt;br /&gt;
git submodule update --init --recursive&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;span id=&amp;quot;msvc---x64&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== MSVC - x64 ===&lt;br /&gt;
&lt;br /&gt;
Once RecoilEngine is cloned.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;cd RecoilEngine&lt;br /&gt;
git clone https://github.com/beyond-all-reason/vclibs64 vclibs64&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Dont change path name of vclibs64 or cmake won´t find the libs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;vcpkg-optional&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== VCPkg (optional?) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;./vcpkg install jsoncpp&lt;br /&gt;
./vcpkg install minizip&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Warning: the above mentioned commands are powershell only&lt;br /&gt;
&lt;br /&gt;
the main command for setting up vcpkg for handing env vars within cmake for downloadable libraries is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;cmake -B ../RecoilEngine -S . -DCMAKE_TOOLCHAIN_FILE=../vcpkg/scripts/buildsystems/vcpkg.cmake&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Inside the &amp;lt;code&amp;gt;./RecoilEngine&amp;lt;/code&amp;gt; folder&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;dependencies&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
* MSVC 2022 community edition, tested, works with almost no issues. Download and install here: https://visualstudio.microsoft.com/vs/community/&lt;br /&gt;
* CMake Any recent version should suffice, this one for example https://github.com/Kitware/CMake/releases/tag/v3.23.4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;windows-environmental-variables&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
= Windows Environmental variables =&lt;br /&gt;
&lt;br /&gt;
Env variables can be used to avoid copying potentially large maps and games folders into the same folder as the build sizes grow with prod.&lt;br /&gt;
&lt;br /&gt;
The easiest way is using the debug launcher found at https://github.com/beyond-all-reason/bar_debug_launcher&lt;br /&gt;
&lt;br /&gt;
or you can add to environmental variables in Windows settings (or [advanced] use script to set them up each time the engine is launched) In Powershell cmd&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;set SPRING_DATADIR=&amp;amp;lt;place to where your content root is&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;set SPRING_WRITEDIR=&amp;amp;lt;place to where your content root is&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;E.g. your RecoilEngine maps are at &amp;lt;code&amp;gt;E:\RecoilEngine\maps&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;amp;lt;place to where your content root is&amp;amp;gt;&amp;lt;/code&amp;gt; should be &amp;lt;code&amp;gt;E:\RecoilEngine&amp;lt;/code&amp;gt;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Note &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt; is only needed if you launch from script, Windows environment variables dialog needs no &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;building&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
* Launch cmake with &amp;lt;code&amp;gt;cmake-gui .&amp;lt;/code&amp;gt;&lt;br /&gt;
* Set source code to the cloned RecoilEngine repository.&lt;br /&gt;
* Pick the build dir separate from the main RecoilEngine dir (for example &amp;lt;code&amp;gt;RecoilEngine/build-msvc&amp;lt;/code&amp;gt;)&lt;br /&gt;
* In the CMAKELIST file in RecoilEngine change (&amp;lt;code&amp;gt;AI_TYPES = ALL&amp;lt;/code&amp;gt;) to (&amp;lt;code&amp;gt;AI_TYPES = NATIVE&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Ensure that &amp;lt;code&amp;gt;MINGWLIBS&amp;lt;/code&amp;gt; points to the cloned vclibs64 repository (it should already be set correct if vclibs64 was cloned to RecoilEngine).&lt;br /&gt;
* Under Tools, press Configure, choose MSVC 2022 / x64 when asked, then press Generate.&lt;br /&gt;
* Go to the build directory and open the project file Spring.sln.&lt;br /&gt;
* Find engine-legacy in the the projects list and set it to be the Startup Project&lt;br /&gt;
* Build the project in MSVC&lt;br /&gt;
* Copy *.dll from vclibs64/dll into the builddir (Debug/Release/etc)&lt;br /&gt;
* Copy unitsync.dll from somewhere or just create an empty file in the builddir (Debug/Release/etc)*&lt;br /&gt;
* If you did not set the SPRING_DATADIR and SPRING_WRITEDIR env variables, copy maps, games, base and fonts from an existing spring install into builddir.&lt;br /&gt;
* Launch the engine right from the debugger (MSVC environment variables (as set from the debugger menu) are broken, use some .bat script to set env variables (in case not set globally) and launch spring.exe&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;common-gotchas&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
== Common gotchas ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;archivedataempty-assertion-failure&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
=== !archiveData.empty() assertion failure ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;the-cause&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== The cause ====&lt;br /&gt;
&lt;br /&gt;
Missing unitsync.dll prevents the engine directory from being treated as data directory. Happens on full clean up of the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;solution&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
&lt;br /&gt;
Copy over unitsync.dll from somewhere else&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Building]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Recoil:Building_the_engine_without_Docker&amp;diff=21867</id>
		<title>Recoil:Building the engine without Docker</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Recoil:Building_the_engine_without_Docker&amp;diff=21867"/>
		<updated>2026-07-23T02:57:36Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Verbatim import from RecoilEngine wiki (GitHub)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This documentation page was migrated to https://recoilengine.org/development/building-without-docker/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Imported verbatim from the [https://github.com/beyond-all-reason/RecoilEngine/wiki RecoilEngine wiki] on GitHub ([https://github.com/beyond-all-reason/RecoilEngine beyond-all-reason/RecoilEngine]). See the source repository for full page history and authorship.&#039;&#039;&lt;br /&gt;
[[Category:Recoil Building]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21855</id>
		<title>Spring RTS</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21855"/>
		<updated>2026-07-23T00:31:55Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Spring RTS portal. Managed in the repo at content/Spring_RTS.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     Each section lists its category members live via DynamicPageList3, so the&lt;br /&gt;
     portal reorganizes itself as pages are (re)categorized. Styling is in&lt;br /&gt;
     MediaWiki:Common.css (.fo-* classes). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero fo-hero--sub&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Spring RTS&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The original &amp;lt;strong&amp;gt;Spring&amp;lt;/strong&amp;gt; engine knowledge base — {{NUMBEROFARTICLES}} articles on strategy, games, maps, modding, Lua, AI, and engine internals, imported and preserved from the Spring wiki. Every section below is built live from the wiki&#039;s categories.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:Categories|All categories]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:RecentChanges|Recent changes]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Getting Started&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Tutorial|FAQ|Help|Playing|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Strategy &amp;amp;amp; Gameplay&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Strategy|namespace=Main|count=50|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games &amp;amp;amp; Mods&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Games|Mods|Balanced Annihilation|Xta|Expand and Exterminate|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Maps&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Map Dev|Map making|Maps|Map Tools|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Content Development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Game Dev|Gamedata|3D Models|Animation|CEG|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lua Scripting&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lua|Libraries|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;AI&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=AI|AI Dev|AIWrapper|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engine &amp;amp;amp; Core Dev&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Spring|Engine Dev|Development|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lobby &amp;amp;amp; Infrastructure&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lobby|Download Systems|Autohosts|Buildbot|namespace=Main|count=80|ordermethod=title|order=ascending|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;|noresultsfooter=}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=21854</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=21854"/>
		<updated>2026-07-23T00:31:52Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl ul{columns:3;column-gap:26px;margin:0;padding:0;list-style:none}&lt;br /&gt;
@media(max-width:900px){.fo-dpl ul{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl ul{columns:1}}&lt;br /&gt;
.fo-dpl li{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl li a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl li a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Modding&amp;diff=21853</id>
		<title>Modding</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Modding&amp;diff=21853"/>
		<updated>2026-07-23T00:21:18Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Brand redirect (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Gamedev:Main]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21852</id>
		<title>Spring RTS</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21852"/>
		<updated>2026-07-23T00:21:16Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Spring RTS portal. Managed in the repo at content/Spring_RTS.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     Each section lists its category members live via DynamicPageList3, so the&lt;br /&gt;
     portal reorganizes itself as pages are (re)categorized. Styling is in&lt;br /&gt;
     MediaWiki:Common.css (.fo-* classes). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero fo-hero--sub&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Spring RTS&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The original &amp;lt;strong&amp;gt;Spring&amp;lt;/strong&amp;gt; engine knowledge base — {{NUMBEROFARTICLES}} articles on strategy, games, maps, modding, Lua, AI, and engine internals, imported and preserved from the Spring wiki. Every section below is built live from the wiki&#039;s categories.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:Categories|All categories]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:RecentChanges|Recent changes]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--book-open&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Getting Started&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Tutorial|FAQ|Help|Playing|namespace=Main|count=50|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Strategy &amp;amp;amp; Gameplay&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Strategy|namespace=Main|count=50|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games &amp;amp;amp; Mods&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Games|Mods|Balanced Annihilation|Xta|Expand and Exterminate|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Maps&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Map Dev|Map making|Maps|Map Tools|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Content Development&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Game Dev|Gamedata|3D Models|Animation|CEG|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lua Scripting&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lua|Libraries|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;AI&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=AI|AI Dev|AIWrapper|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engine &amp;amp;amp; Core Dev&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Spring|Engine Dev|Development|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Lobby &amp;amp;amp; Infrastructure&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-dpl&amp;quot;&amp;gt;{{#dpl:|category=Lobby|Download Systems|Autohosts|Buildbot|namespace=Main|count=80|ordermethod=title|order=ascending|mode=userformat|listseparators=,&amp;lt;div class=&amp;quot;fo-dpl-item&amp;quot;&amp;gt;,&amp;lt;/div&amp;gt;,|noresultsheader=&amp;lt;span class=&amp;quot;fo-dim&amp;quot;&amp;gt;No pages yet.&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Sidebar&amp;diff=21851</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Sidebar&amp;diff=21851"/>
		<updated>2026-07-23T00:21:14Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;# MediaWiki:Sidebar — Citizen reads this for the left navigation on every page.&lt;br /&gt;
# Managed in the repo (content/Sidebar.wikitext), deployed via import_content.&lt;br /&gt;
* navigation&lt;br /&gt;
** Main Page|Home&lt;br /&gt;
** Spring RTS|Spring RTS&lt;br /&gt;
** Special:RecentChanges|Recent changes&lt;br /&gt;
** Special:Random|Random page&lt;br /&gt;
** Special:Categories|All categories&lt;br /&gt;
&lt;br /&gt;
* Spring RTS&lt;br /&gt;
** Spring RTS|Portal home&lt;br /&gt;
** Category:Tutorial|Getting started&lt;br /&gt;
** Category:Strategy|Strategy &amp;amp;amp; gameplay&lt;br /&gt;
** Category:Mods|Games &amp;amp;amp; mods&lt;br /&gt;
** Category:Map Dev|Maps&lt;br /&gt;
** Category:Game Dev|Content development&lt;br /&gt;
** Category:Lua|Lua scripting&lt;br /&gt;
** Category:AI|AI&lt;br /&gt;
** Category:Spring|Engine &amp;amp;amp; core&lt;br /&gt;
** Category:Lobby|Lobby &amp;amp;amp; infrastructure&lt;br /&gt;
&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=21850</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=21850"/>
		<updated>2026-07-23T00:21:13Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Spring RTS portal ---------------------------------------------------- */&lt;br /&gt;
.fo-hero--sub{padding:28px 32px}&lt;br /&gt;
.fo-hero--sub h1{font-size:clamp(2rem,3.6vw,2.8rem)}&lt;br /&gt;
.fo-dpl{columns:3;column-gap:26px;margin:0}&lt;br /&gt;
@media(max-width:900px){.fo-dpl{columns:2}}&lt;br /&gt;
@media(max-width:600px){.fo-dpl{columns:1}}&lt;br /&gt;
.fo-dpl .fo-dpl-item{break-inside:avoid;padding:5px 0;font-size:.9rem;line-height:1.3;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-dpl .fo-dpl-item a{color:var(--fo-glow)}&lt;br /&gt;
.fo-dpl .fo-dpl-item a:hover{color:var(--fo-purple-400)}&lt;br /&gt;
.fo-sec-count{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);margin-left:8px;font-weight:400}&lt;br /&gt;
.fo-dim{color:var(--fo-text-dim)}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Modding&amp;diff=21848</id>
		<title>Modding</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Modding&amp;diff=21848"/>
		<updated>2026-07-23T00:12:41Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Brand redirect (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Mod and Unit development]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Commands&amp;diff=21847</id>
		<title>Commands</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Commands&amp;diff=21847"/>
		<updated>2026-07-23T00:12:39Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Brand redirect (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Command Reference]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Lua_API&amp;diff=21846</id>
		<title>Lua API</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Lua_API&amp;diff=21846"/>
		<updated>2026-07-23T00:12:37Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Brand redirect (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Lua:Main]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21845</id>
		<title>Spring RTS</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Spring_RTS&amp;diff=21845"/>
		<updated>2026-07-23T00:12:36Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Brand redirect (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Spring]]&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=21844</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=21844"/>
		<updated>2026-07-23T00:12:34Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Fight|The Fight command]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Move-and-engage: how attack-move differs from raw move, and when to queue it.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Commander|D-gun &amp;amp; commander play]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Timing the disintegrator, avoiding com-drops, and reclaim micro.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--factory&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Economy|Economy fundamentals]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Metal vs energy, overdrive, and expanding without stalling.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|mode=userformat&lt;br /&gt;
|noresultsheader=&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;wiki&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;No edits yet — start writing the wiki!&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|listseparators=,&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;edit&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;,&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=8</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=8"/>
		<updated>2026-07-21T11:42:23Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). The Recent changes&lt;br /&gt;
     list is generated live by the DynamicPageList3 extension ({{#dpl:}}). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;FIGHTORDER&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Fight|The Fight command]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Move-and-engage: how attack-move differs from raw move, and when to queue it.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Commander|D-gun &amp;amp; commander play]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Timing the disintegrator, avoiding com-drops, and reclaim micro.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--factory&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Economy|Economy fundamentals]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Metal vs energy, overdrive, and expanding without stalling.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#dpl:&lt;br /&gt;
|namespace=Main&lt;br /&gt;
|ordermethod=lastedit&lt;br /&gt;
|order=descending&lt;br /&gt;
|count=7&lt;br /&gt;
|mode=userformat&lt;br /&gt;
|noresultsheader=&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;wiki&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;No edits yet — start writing the wiki!&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|listseparators=,&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;edit&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;,&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;,&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Games&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Zero-K]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Open-source RTS with physics projectiles, no unit build limits, and deep commander customization.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Beyond All Reason]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;BAR — large-scale modern RTS on the Recoil engine, free and community-driven.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[NOTA]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;None Of The Above — a tightly-balanced annihilation-style total conversion.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Kernel Panic]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Minimalist computer-themed RTS — three sides, no economy, pure tactics.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage this wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=7</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=7"/>
		<updated>2026-07-21T11:42:22Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-body);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=Main_Page&amp;diff=5</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=Main_Page&amp;diff=5"/>
		<updated>2026-07-21T11:12:07Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- FIGHTORDER main page. Managed in the repo at content/Main_Page.wikitext and&lt;br /&gt;
     deployed via GitHub Actions (workflow_dispatch -&amp;gt; import_content=true).&lt;br /&gt;
     In-wiki edits to this page are overwritten on the next content import.&lt;br /&gt;
     Styling lives in MediaWiki:Common.css (.fo-* classes). --&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-main&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-hero&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;The Fightorder Wiki&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The community knowledge base for the &amp;lt;strong&amp;gt;Spring RTS&amp;lt;/strong&amp;gt; and &amp;lt;strong&amp;gt;Recoil&amp;lt;/strong&amp;gt; engines and the games built on them — commands, units, mechanics, maps, and modding.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-cta&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--p&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--rocket&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Getting Started]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-btn fo-btn--s&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--list&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;[[Special:AllPages|Browse all pages]]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-stat&amp;quot;&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFARTICLES}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Articles&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFEDITS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Edits&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;b&amp;gt;{{NUMBEROFACTIVEUSERS}}&amp;lt;/b&amp;gt;&amp;lt;span&amp;gt;Editors&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--compass&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Explore&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Commands]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Fight, Guard, Patrol, Repair, Reclaim — every order and its hotkey.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Fight&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Guard&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;D-gun&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--box&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Units]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Commanders, constructors, and combat units across every faction.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Com&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Eco&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--map&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Maps]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Terrain, metal spots, and start positions for competitive play.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;1v1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;FFA&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--gamepad-2&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Games]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Zero-K, Beyond All Reason, and other engine derivatives.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Zero-K&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;BAR&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-sec-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Engines&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;hr class=&amp;quot;fo-rule&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-grid&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--cpu&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Recoil Engine]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The actively-developed fork powering Beyond All Reason and modern titles.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Active&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Lua&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--git-branch&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Spring RTS]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;The original engine and the heritage the wiki is preserving.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Legacy&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Archive&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--terminal&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Lua API]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Synced, unsynced, and gadget/widget entry points for modders.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Synced&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Gadgets&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-card-ic&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--wrench&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;fo-card-h&amp;quot;&amp;gt;[[Modding]]&amp;lt;/div&amp;gt;&amp;lt;p class=&amp;quot;fo-card-p&amp;quot;&amp;gt;Building games on the engine — content, balance, and packaging.&amp;lt;/p&amp;gt;&amp;lt;div class=&amp;quot;fo-tags&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Games&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;fo-tag&amp;quot;&amp;gt;Widgets&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-two&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--star&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Featured articles&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--swords&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Fight|The Fight command]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Move-and-engage: how attack-move differs from raw move, and when to queue it.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--zap&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Commander|D-gun &amp;amp; commander play]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Timing the disintegrator, avoiding com-drops, and reclaim micro.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-feat&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fo-feat-th&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--factory&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;&amp;lt;h4&amp;gt;[[Economy|Economy fundamentals]]&amp;lt;/h4&amp;gt;&amp;lt;p&amp;gt;Metal vs energy, overdrive, and expanding without stalling.&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-panel-h&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-ic fo-ic--history&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Recent changes&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;wiki&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;Every edit shows up here as the wiki grows. This section is currently a static seed.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;seed&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;[[Fight]] — write the flagship command article&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;seed&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;[[Recoil Engine]] — port the engine overview from Spring&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;fo-upd&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fo-upd-t&amp;quot;&amp;gt;seed&amp;lt;/span&amp;gt;&amp;lt;div&amp;gt;[[Lua API]] — Spring.GiveOrder and friends&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;fo-more&amp;quot;&amp;gt;[[Special:RecentChanges|→ See all recent changes]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
	<entry>
		<id>https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=4</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://fightorder.net/index.php?title=MediaWiki:Common.css&amp;diff=4"/>
		<updated>2026-07-21T11:12:05Z</updated>

		<summary type="html">&lt;p&gt;FightorderAdmin: Deploy from repo (GitHub Actions)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ============================================================================&lt;br /&gt;
 * FIGHTORDER — sitewide theme (MediaWiki:Common.css)&lt;br /&gt;
 * Purple-glow-on-black RTS-wiki aesthetic, layered over the Citizen skin.&lt;br /&gt;
 * Managed in the repo at content/Common.css and deployed via GitHub Actions&lt;br /&gt;
 * (workflow_dispatch -&amp;gt; import_content=true). Edits made here in-wiki will be&lt;br /&gt;
 * overwritten on the next content import.&lt;br /&gt;
 *&lt;br /&gt;
 * Fonts (Michroma / Saira / JetBrains Mono) are loaded from Google Fonts as&lt;br /&gt;
 * stand-ins per the design system; swap for self-hosted files if desired.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Michroma&amp;amp;family=Saira:wght@400;500;600;700&amp;amp;family=JetBrains+Mono:wght@400;600&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/* --- Design tokens (ported from the Fightorder design system) ------------- */&lt;br /&gt;
:root{&lt;br /&gt;
  --fo-black:#07060b; --fo-void:#0b0a12; --fo-ink:#12101c;&lt;br /&gt;
  --fo-panel:#181528; --fo-panel-2:#1f1b31;&lt;br /&gt;
  --fo-line:#2b2542; --fo-line-strong:#3a3158;&lt;br /&gt;
  --fo-purple-050:#f3ebff; --fo-purple-200:#d5b8ff; --fo-purple-400:#b98cff;&lt;br /&gt;
  --fo-purple-500:#a855f7; --fo-purple-600:#9333ea; --fo-purple-700:#7322c7;&lt;br /&gt;
  --fo-purple-900:#3d1266;&lt;br /&gt;
  --fo-glow:#c084fc; --fo-glow-cyan:#67e8f9;&lt;br /&gt;
  --fo-text:#ece9f5; --fo-text-muted:#a49cc4; --fo-text-dim:#6f688c;&lt;br /&gt;
  --fo-text-on-purple:#faf6ff;&lt;br /&gt;
  --fo-success:#4ade80; --fo-warning:#fbbf24; --fo-danger:#f87171;&lt;br /&gt;
&lt;br /&gt;
  --glow-sm:0 0 8px rgba(168,85,247,.45);&lt;br /&gt;
  --glow-md:0 0 16px rgba(168,85,247,.55),0 0 2px rgba(192,132,252,.8);&lt;br /&gt;
  --glow-lg:0 0 32px rgba(168,85,247,.6),0 0 8px rgba(192,132,252,.5);&lt;br /&gt;
  --glow-text:0 0 12px rgba(192,132,252,.7);&lt;br /&gt;
  --shadow-card:0 2px 4px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.4);&lt;br /&gt;
  --bg-bloom:radial-gradient(1200px 600px at 70% -10%,rgba(115,34,199,.28),transparent 60%),radial-gradient(800px 500px at 10% 110%,rgba(147,51,234,.18),transparent 55%),var(--fo-black);&lt;br /&gt;
  --gradient-purple:linear-gradient(135deg,var(--fo-purple-600),var(--fo-purple-500) 55%,var(--fo-glow));&lt;br /&gt;
  --hairline-purple:linear-gradient(90deg,transparent,var(--fo-purple-500),transparent);&lt;br /&gt;
  --ease-out:cubic-bezier(.22,.61,.36,1); --dur:200ms;&lt;br /&gt;
&lt;br /&gt;
  --font-display:&#039;Michroma&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-body:&#039;Saira&#039;,&#039;Bahnschrift&#039;,system-ui,sans-serif;&lt;br /&gt;
  --font-mono:&#039;JetBrains Mono&#039;,ui-monospace,monospace;&lt;br /&gt;
  --fs-hero:clamp(2.4rem,4.6vw,3.6rem); --fs-h2:1.6rem;&lt;br /&gt;
  --radius-sm:6px; --radius-md:10px; --radius-lg:16px; --radius-pill:999px;&lt;br /&gt;
  --container:1180px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Nudge Citizen&#039;s accents toward the brand ---------------------------- */&lt;br /&gt;
/* Citizen exposes these custom properties; recolour links/accents to purple. */&lt;br /&gt;
:root .skin-citizen,&lt;br /&gt;
:root{&lt;br /&gt;
  --color-progressive:var(--fo-purple-500);&lt;br /&gt;
  --color-progressive--hover:var(--fo-purple-400);&lt;br /&gt;
  --color-progressive--active:var(--fo-purple-600);&lt;br /&gt;
  --color-link:var(--fo-glow);&lt;br /&gt;
  --color-link--hover:var(--fo-purple-400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Content links across the wiki pick up the glow-violet. */&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new){color:var(--fo-glow)}&lt;br /&gt;
.mw-body a:not(.fo-btn):not(.new):hover{color:var(--fo-purple-400)}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
 * Main Page components — all scoped under .fo-main so they never leak into&lt;br /&gt;
 * ordinary articles or the skin chrome.&lt;br /&gt;
 * ========================================================================== */&lt;br /&gt;
.fo-main{font-family:var(--font-body);color:var(--fo-text);line-height:1.6;max-width:var(--container)}&lt;br /&gt;
.fo-main :is(h1,h2,h3,h4){font-family:var(--font-display);letter-spacing:.02em;font-weight:400}&lt;br /&gt;
&lt;br /&gt;
/* Hero */&lt;br /&gt;
.fo-hero{position:relative;border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:40px 36px;background:radial-gradient(600px 300px at 85% -20%,rgba(115,34,199,.35),transparent 60%),var(--fo-ink);overflow:hidden;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-hero h1{font-size:var(--fs-hero);line-height:1.1;margin:0 0 10px;text-shadow:var(--glow-text)}&lt;br /&gt;
.fo-hero p{max-width:600px;color:var(--fo-text-muted);font-size:1.05rem;margin:0 0 22px}&lt;br /&gt;
.fo-hero strong{color:var(--fo-text);font-weight:600}&lt;br /&gt;
.fo-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}&lt;br /&gt;
.fo-btn{position:relative;display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;padding:11px 20px;border-radius:var(--radius-md);border:1px solid transparent;transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
/* wikilinks can&#039;t take a class, so each button is a span wrapper and the&lt;br /&gt;
   inner wikilink is stretched over it for full-button clickability. */&lt;br /&gt;
.fo-btn a{color:inherit!important;text-decoration:none}&lt;br /&gt;
.fo-btn a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-btn--p,a.fo-btn--p{background:var(--gradient-purple);color:var(--fo-text-on-purple);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-btn--p:hover{box-shadow:var(--glow-lg);color:var(--fo-text-on-purple);text-decoration:none}&lt;br /&gt;
.fo-btn--s,a.fo-btn--s{background:var(--fo-panel-2);color:var(--fo-text);border-color:var(--fo-line-strong)}&lt;br /&gt;
.fo-btn--s:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-sm);color:var(--fo-text);text-decoration:none}&lt;br /&gt;
&lt;br /&gt;
/* Stat strip */&lt;br /&gt;
.fo-stat{display:flex;gap:26px;flex-wrap:wrap;font-family:var(--font-mono);margin-top:26px;padding-top:20px;border-top:1px solid var(--fo-line)}&lt;br /&gt;
.fo-stat b{display:block;font-size:1.5rem;color:var(--fo-glow);text-shadow:var(--glow-text);font-weight:600}&lt;br /&gt;
.fo-stat span{font-size:.68rem;color:var(--fo-text-dim);letter-spacing:.1em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Section heading + rule */&lt;br /&gt;
.fo-sec{margin-top:40px}&lt;br /&gt;
.fo-sec-h{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-size:var(--fs-h2);margin:0 0 4px}&lt;br /&gt;
.fo-sec-h .fo-ic{color:var(--fo-purple-500);font-size:1.35rem}&lt;br /&gt;
.fo-rule{height:1px;background:var(--hairline-purple);margin:10px 0 20px;border:0}&lt;br /&gt;
&lt;br /&gt;
/* Portal card grid */&lt;br /&gt;
.fo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}&lt;br /&gt;
.fo-card{position:relative;background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-card);transition:all var(--dur) var(--ease-out)}&lt;br /&gt;
.fo-card:hover{border-color:var(--fo-purple-500);box-shadow:var(--glow-md)}&lt;br /&gt;
.fo-card-ic{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;background:var(--fo-purple-900);color:var(--fo-glow);margin-bottom:12px}&lt;br /&gt;
.fo-card-ic .fo-ic{font-size:20px}&lt;br /&gt;
.fo-card-h{font-family:var(--font-display);font-size:1.15rem;margin:0 0 6px}&lt;br /&gt;
.fo-card-h a{color:var(--fo-text)!important}&lt;br /&gt;
/* stretch the title link across the whole card for full-card clickability */&lt;br /&gt;
.fo-card-h a::after{content:&amp;quot;&amp;quot;;position:absolute;inset:0;z-index:1}&lt;br /&gt;
.fo-card-h a:hover{text-decoration:none;color:var(--fo-glow)!important}&lt;br /&gt;
.fo-card-p{margin:0;font-size:.85rem;color:var(--fo-text-muted);line-height:1.5}&lt;br /&gt;
.fo-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;position:relative;z-index:2}&lt;br /&gt;
.fo-tag{font-family:var(--font-mono);font-size:.66rem;font-weight:600;padding:3px 9px;border-radius:var(--radius-pill);background:var(--fo-purple-900);color:var(--fo-glow);border:1px solid var(--fo-purple-700)}&lt;br /&gt;
&lt;br /&gt;
/* Two-column: featured + recent */&lt;br /&gt;
.fo-two{display:grid;grid-template-columns:1.4fr 1fr;gap:20px;margin-top:40px}&lt;br /&gt;
.fo-panel{background:var(--fo-panel);border:1px solid var(--fo-line);border-radius:var(--radius-lg);padding:22px;box-shadow:var(--shadow-card)}&lt;br /&gt;
.fo-panel-h{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:1.2rem;margin:0 0 14px}&lt;br /&gt;
.fo-panel-h .fo-ic{color:var(--fo-purple-500);font-size:1.1rem}&lt;br /&gt;
.fo-feat{display:flex;gap:14px;padding:12px 0;border-bottom:1px solid var(--fo-line)}&lt;br /&gt;
.fo-feat:last-child{border-bottom:none}&lt;br /&gt;
.fo-feat-th{width:70px;height:52px;border-radius:var(--radius-sm);background:var(--gradient-purple);flex:none;display:flex;align-items:center;justify-content:center;box-shadow:var(--glow-sm);color:#fff}&lt;br /&gt;
.fo-feat-th .fo-ic{font-size:22px}&lt;br /&gt;
.fo-feat h4{margin:0 0 3px;font-size:1rem;color:var(--fo-text)}&lt;br /&gt;
.fo-feat p{margin:0;font-size:.8rem;color:var(--fo-text-muted)}&lt;br /&gt;
.fo-upd{display:flex;gap:10px;font-size:.85rem;padding:9px 0;border-bottom:1px solid var(--fo-line);align-items:baseline}&lt;br /&gt;
.fo-upd:last-child{border:none}&lt;br /&gt;
.fo-upd-t{font-family:var(--font-mono);font-size:.7rem;color:var(--fo-text-dim);flex:none;width:52px}&lt;br /&gt;
.fo-more{display:inline-block;margin-top:14px;font-family:var(--font-mono);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}&lt;br /&gt;
&lt;br /&gt;
/* Responsive: collapse the two-column band on narrow viewports */&lt;br /&gt;
@media(max-width:800px){.fo-two{grid-template-columns:1fr}}&lt;br /&gt;
&lt;br /&gt;
/* --- Icon masks (Lucide, ISC-licensed; tinted via currentColor) ---------- */&lt;br /&gt;
.fo-ic{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;vertical-align:-.125em;flex:none}&lt;br /&gt;
.fo-ic--book-open{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-book-open%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%207v14%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2018a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1h5a4%204%200%200%201%204%204%204%204%200%200%201%204-4h5a1%201%200%200%201%201%201v13a1%201%200%200%201-1%201h-6a3%203%200%200%200-3%203%203%203%200%200%200-3-3z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--box{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-box%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M21%208a2%202%200%200%200-1-1.73l-7-4a2%202%200%200%200-2%200l-7%204A2%202%200%200%200%203%208v8a2%202%200%200%200%201%201.73l7%204a2%202%200%200%200%202%200l7-4A2%202%200%200%200%2021%2016Z%22%20%2F%3E%20%3Cpath%20d%3D%22m3.3%207%208.7%205%208.7-5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%2022V12%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--compass{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-compass%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Ccircle%20cx%3D%2212%22%20cy%3D%2212%22%20r%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22m16.24%207.76-1.804%205.411a2%202%200%200%201-1.265%201.265L7.76%2016.24l1.804-5.411a2%202%200%200%201%201.265-1.265z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--cpu{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-cpu%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M12%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M17%202v2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M2%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2012h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%2017h2%22%20%2F%3E%20%3Cpath%20d%3D%22M20%207h2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%2020v2%22%20%2F%3E%20%3Cpath%20d%3D%22M7%202v2%22%20%2F%3E%20%3Crect%20x%3D%224%22%20y%3D%224%22%20width%3D%2216%22%20height%3D%2216%22%20rx%3D%222%22%20%2F%3E%20%3Crect%20x%3D%228%22%20y%3D%228%22%20width%3D%228%22%20height%3D%228%22%20rx%3D%221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--factory{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-factory%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M16%2016h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019a2%202%200%200%200%202%202h14a2%202%200%200%200%202-2V8.5a.5.5%200%200%200-.769-.422l-4.462%202.844A.5.5%200%200%201%2015%2010.5v-2a.5.5%200%200%200-.769-.422L9.77%2010.922A.5.5%200%200%201%209%2010.5V5a2%202%200%200%200-2-2H5a2%202%200%200%200-2%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2016h.01%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--gamepad-2{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-gamepad-2%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cline%20x1%3D%226%22%20x2%3D%2210%22%20y1%3D%2211%22%20y2%3D%2211%22%20%2F%3E%20%3Cline%20x1%3D%228%22%20x2%3D%228%22%20y1%3D%229%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2215%22%20x2%3D%2215.01%22%20y1%3D%2212%22%20y2%3D%2212%22%20%2F%3E%20%3Cline%20x1%3D%2218%22%20x2%3D%2218.01%22%20y1%3D%2210%22%20y2%3D%2210%22%20%2F%3E%20%3Cpath%20d%3D%22M17.32%205H6.68a4%204%200%200%200-3.978%203.59c-.006.052-.01.101-.017.152C2.604%209.416%202%2014.456%202%2016a3%203%200%200%200%203%203c1%200%201.5-.5%202-1l1.414-1.414A2%202%200%200%201%209.828%2016h4.344a2%202%200%200%201%201.414.586L17%2018c.5.5%201%201%202%201a3%203%200%200%200%203-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4%204%200%200%200%2017.32%205z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--git-branch{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-git-branch%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M15%206a9%209%200%200%200-9%209V3%22%20%2F%3E%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20%2F%3E%20%3Ccircle%20cx%3D%226%22%20cy%3D%2218%22%20r%3D%223%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--history{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-history%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%2012a9%209%200%201%200%209-9%209.75%209.75%200%200%200-6.74%202.74L3%208%22%20%2F%3E%20%3Cpath%20d%3D%22M3%203v5h5%22%20%2F%3E%20%3Cpath%20d%3D%22M12%207v5l4%202%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--list{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-list%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M3%205h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2012h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M3%2019h.01%22%20%2F%3E%20%3Cpath%20d%3D%22M8%205h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2012h13%22%20%2F%3E%20%3Cpath%20d%3D%22M8%2019h13%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--map{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-map%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.106%205.553a2%202%200%200%200%201.788%200l3.659-1.83A1%201%200%200%201%2021%204.619v12.764a1%201%200%200%201-.553.894l-4.553%202.277a2%202%200%200%201-1.788%200l-4.212-2.106a2%202%200%200%200-1.788%200l-3.659%201.83A1%201%200%200%201%203%2019.381V6.618a1%201%200%200%201%20.553-.894l4.553-2.277a2%202%200%200%201%201.788%200z%22%20%2F%3E%20%3Cpath%20d%3D%22M15%205.764v15%22%20%2F%3E%20%3Cpath%20d%3D%22M9%203.236v15%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--rocket{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-rocket%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2015v5s3.03-.55%204-2c1.08-1.62%200-5%200-5%22%20%2F%3E%20%3Cpath%20d%3D%22M4.5%2016.5c-1.5%201.26-2%205-2%205s3.74-.5%205-2c.71-.84.7-2.13-.09-2.91a2.18%202.18%200%200%200-2.91-.09%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012a22%2022%200%200%201%202-3.95A12.88%2012.88%200%200%201%2022%202c0%202.72-.78%207.5-6%2011a22.4%2022.4%200%200%201-4%202z%22%20%2F%3E%20%3Cpath%20d%3D%22M9%2012H4s.55-3.03%202-4c1.62-1.08%205%20.05%205%20.05%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--star{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-star%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M11.525%202.295a.53.53%200%200%201%20.95%200l2.31%204.679a2.123%202.123%200%200%200%201.595%201.16l5.166.756a.53.53%200%200%201%20.294.904l-3.736%203.638a2.123%202.123%200%200%200-.611%201.878l.882%205.14a.53.53%200%200%201-.771.56l-4.618-2.428a2.122%202.122%200%200%200-1.973%200L6.396%2021.01a.53.53%200%200%201-.77-.56l.881-5.139a2.122%202.122%200%200%200-.611-1.879L2.16%209.795a.53.53%200%200%201%20.294-.906l5.165-.755a2.122%202.122%200%200%200%201.597-1.16z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--swords{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-swords%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpolyline%20points%3D%2214.5%2017.5%203%206%203%203%206%203%2017.5%2014.5%22%20%2F%3E%20%3Cline%20x1%3D%2213%22%20x2%3D%2219%22%20y1%3D%2219%22%20y2%3D%2213%22%20%2F%3E%20%3Cline%20x1%3D%2216%22%20x2%3D%2220%22%20y1%3D%2216%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%2219%22%20x2%3D%2221%22%20y1%3D%2221%22%20y2%3D%2219%22%20%2F%3E%20%3Cpolyline%20points%3D%2214.5%206.5%2018%203%2021%203%2021%206%2017.5%209.5%22%20%2F%3E%20%3Cline%20x1%3D%225%22%20x2%3D%229%22%20y1%3D%2214%22%20y2%3D%2218%22%20%2F%3E%20%3Cline%20x1%3D%227%22%20x2%3D%224%22%20y1%3D%2217%22%20y2%3D%2220%22%20%2F%3E%20%3Cline%20x1%3D%223%22%20x2%3D%225%22%20y1%3D%2219%22%20y2%3D%2221%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--terminal{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-terminal%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M12%2019h8%22%20%2F%3E%20%3Cpath%20d%3D%22m4%2017%206-6-6-6%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--wrench{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-wrench%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M14.7%206.3a1%201%200%200%200%200%201.4l1.6%201.6a1%201%200%200%200%201.4%200l3.106-3.105c.32-.322.863-.22.983.218a6%206%200%200%201-8.259%207.057l-7.91%207.91a1%201%200%200%201-2.999-3l7.91-7.91a6%206%200%200%201%207.057-8.259c.438.12.54.662.219.984z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;br /&gt;
.fo-ic--zap{--i:url(&amp;quot;data:image/svg+xml,%3Csvg%20class%3D%22lucide%20lucide-zap%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20%3E%20%3Cpath%20d%3D%22M4%2014a1%201%200%200%201-.78-1.63l9.9-10.2a.5.5%200%200%201%20.86.46l-1.92%206.02A1%201%200%200%200%2013%2010h7a1%201%200%200%201%20.78%201.63l-9.9%2010.2a.5.5%200%200%201-.86-.46l1.92-6.02A1%201%200%200%200%2011%2014z%22%20%2F%3E%20%3C%2Fsvg%3E&amp;quot;)}&lt;/div&gt;</summary>
		<author><name>FightorderAdmin</name></author>
	</entry>
</feed>