From Arms of God Wiki

bot: editor guide
 
bot: Enemies page = enemy comparison table + Thumbnail column; Enemy comparison -> redirect
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
<!-- Bot-published page. Source of truth: 5-build-pages/code/_game/help_wiki_editing.wiki
    (substituted + copied by emit_pages.py). Direct edits to this wiki page are
    overwritten on the next re-publish — improve the source instead. -->
<tabber>
<tabber>
|-|MediaWiki Guide=
|-|How this wiki works=
{{:Help:MediaWiki Guide}}
== The one-sentence version ==
'''All data on this wiki lives in ten JSON pages — <code>Data:Weapons.json</code> through <code>Data:Tags.json</code> — and every table, infobox, navbox, tag page and stat page is computed from them by Lua modules at render time.''' There are no precomputed pages: edit a value once on a Data page, purge, and every view of that value updates everywhere.
 
== Data flow ==
<pre style="background:var(--panel-bg, #1c1d22);color:var(--panel-text, #e6e6e6);border:1px solid var(--panel-border, #3a3c44);">
SOURCE OF TRUTH (edit values here)
┌────────────────────────────────────────────────────────────────┐
│ Data:Weapons.json  Data:Characters.json  Data:Blessings.json │
│ Data:Upgrades.json  Data:Crux.json        Data:Passives.json  │
│ Data:Enemies.json  Data:Achievements.json Data:Codex.json    │
│ Data:Tags.json                                                │
└───────────────┬────────────────────────────────────────────────┘
                │  read at render time by
                ▼
┌─ Module:Core ──────────────────────────────────────────────────┐
│  loads + sorts records, computes infobox values, tag links,    │
│  stat blocks, lore joins; shared by every module below        │
└───┬───────────┬──────────┬───────────┬───────────┬─────────────┘
    ▼          ▼          ▼          ▼          ▼
Module:     Module:   Module:    Module:    Module:
<Category>  Compare    Navbox      TagIndex    StatIndex
(infobox,    (DPS,      (bottom    (tag        (per-stat +
  body,        wave-10    navboxes)  member      damage-type
  index)      tables)                pages)      lookups)
    │          │          │          │          │
    ▼          ▼          ▼          ▼          ▼
            RENDERED PAGES (recomputed on every purge)
</pre>


|-|Pipeline-Generated Content=
== What to edit, where ==
This wiki's framework pages (Modules, Templates, JSON Data pages, per-instance detail pages) are bot-published from the game's data. Below is the catalog of what Arms of God has + how to edit each kind safely.
{| class="wikitable" style="background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | You want to change… !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Edit this !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | What happens
|-
| A '''value''': a stat number, price, tier, lore text, tag key, icon filename || The record in the matching <code>Data:&lt;Category&gt;.json</code> page || Every infobox, index row, comparison table, navbox and lookup that shows the value updates after a cache purge. Don't rename '''field keys''' — modules look them up by name.
|-
| '''Prose''' on one entity's page: intro text, strategy notes, screenshots, trivia || The detail page itself (e.g. <code>Cutter</code>) || Detail pages are first-write-only: the bot never overwrites them, so your edits persist across re-publishes.
|-
| '''How''' something renders: column order, section layout, sort order, labels || The Lua module — [[Module:Core]] for most things (infobox field lists, index columns, stat display order, sorting); [[Module:Compare]] / [[Module:Navbox]] / etc. for their own views || All affected pages re-render on purge. Note: module edits are overwritten by the next scheduled bot re-publish, so durable changes should also be reported upstream.
|-
| The '''infobox panel''' look (rows, header, fallbacks) || <code>Template:&lt;Category&gt;_infobox</code> || Presentation only — values are computed by Module:Core and passed in as parameters.
|-
| '''Site-wide look''': colors, theme tokens, filter chips, hover tooltips || [[MediaWiki:Common.css]] / [[MediaWiki:Common.js]] || Theme tokens (<code>--infobox-*</code>, <code>--table-*</code>, <code>--dmg-*</code>) restyle everything at once; inline fallbacks keep pages readable without them.
|}


'''Editing rule of thumb:''' you can edit any bot-published page. The bot overwrites the framework layer (Modules / Templates / Data) on every scheduled re-publish, so your improvements to '''prose, comments, formatting, and added documentation''' survive ''only on Detail pages'' (first-write-only). On framework pages, what gets clobbered are the '''data-bound keys, variable names, and table shapes''' — Modules read specific field names from Data: JSON, so renaming `name` to `title` will break the renderer on the next re-publish. Cosmetic edits (formatting tweaks, added comments, reformatted whitespace) are fine — they just won't persist.
== Seeing your edit ==
MediaWiki caches rendered pages. After editing a Data page or module, other pages that use it may show the old version until their cache expires. To force it: open the page and add <code>?action=purge</code> to the URL (or use the "Purge" option). The job queue eventually refreshes everything on its own.


=== Data pages ===
== What the bot does on re-publish ==
* '''Overwrites''' the framework layer: <code>Module:*</code>, <code>Template:*</code>, <code>Data:*</code> pages, category index pages, comparison/stat pages, and this help page. Value edits you made on Data pages are replaced by the game's current data — report data corrections to the developers so they land in the source.
* '''Never touches''' existing detail pages (one per weapon / hero / blessing / …). Your prose, images and trivia are safe there.


JSON-content pages consumed by the Modules. The field names + nested shapes are the contract — Modules look up specific keys. Editing values is safe; renaming keys or restructuring objects breaks rendering until the next re-publish regenerates them.
|-|Module catalogue=
One expandable entry per module. Every module is readable on its <code>Module:</code> page and carries the same documentation in its header comment.


{| class="wikitable"
<div class="wm-catalogue">
! Data page !! Shape !! Size
<div class="wm-catalogue-controls"><span class="wm-expand-all">▸ Expand all</span> <span class="wm-collapse-all">▾ Collapse all</span></div>
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Core]] — the engine room: computes every infobox value, index table, tag link, sort order and lore join
|-
|-
| [[Data:Achievements.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Achievements || 36 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| The shared library every other module <code>require()</code>s. Loads and memoizes the ten Data pages, resolves category names, computes infobox value sets, stat blocks (with glyphs and elemental color chips), tag links and membership maps, codex lore joins, per-category sort orders, and the per-category presentation config (infobox field lists in <code>INFOBOX_FIELD_ORDER</code>, index columns in <code>INDEX_OPTS</code>, stat display order in <code>STAT_ORDER</code>).
|-
|-
| [[Data:Blessings.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Blessings || 60 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| Not invoked directly — the per-category modules forward to its entry points (<code>infoboxEntry</code>, <code>bodyEntry</code>, <code>indexEntry</code>, <code>renderEntry</code>).
|-
|-
| [[Data:Characters.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Characters || 11 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| All ten <code>Data:&lt;Category&gt;.json</code> pages.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | Module:Weapons … Module:Tags (per-category modules) — infobox / body / index / crossRefs for one category
|-
|-
| [[Data:Codex.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Codex || 75 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What they do
| One tiny module per category ([[Module:Weapons]], [[Module:Characters]], [[Module:Blessings]], [[Module:Upgrades]], [[Module:Crux]], [[Module:Passives]], [[Module:Enemies]], [[Module:Achievements]], [[Module:Codex]], [[Module:Tags]]). Each only binds its category name and forwards to Module:Core — so all rendering logic lives in ONE place. [[Module:Codex]] additionally provides the shared <code>lore</code> lookup (see its entry below).
|-
|-
| [[Data:Crux.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Crux || 15 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:Weapons|infobox|id=Cutter}}</nowiki></code> — the infobox panel<br><code><nowiki>{{#invoke:Weapons|body|id=Cutter|section=Tags}}</nowiki></code> — one body section (omit <code>section</code> for all)<br><code><nowiki>{{#invoke:Weapons|index}}</nowiki></code> — the sortable category table<br><code><nowiki>{{#invoke:Blessings|crossRefs|id=Blessed_Bounty}}</nowiki></code> — variant / tag-member links<br><code><nowiki>{{#invoke:Weapons|render|id=Cutter}}</nowiki></code> — infobox + body + crossRefs in one call
|-
|-
| [[Data:Enemies.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Enemies || 26 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Read
| The category's own <code>Data:&lt;Category&gt;.json</code> (via Module:Core).
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Index]] — generic sortable-table renderer behind every category index
|-
|-
| [[Data:Navbox_Blessings.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Blessings || 14 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Pure presentation: given records + a column spec, emits one sortable wikitable. Holds no data — Module:Core's <code>indexEntry</code> feeds it sorted records augmented with computed infobox values. Column lists per category live in Module:Core's <code>INDEX_OPTS</code>.
|-
|-
| [[Data:Navbox_Characters.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Characters || 1 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| Not invoked directly; pages use <code><nowiki>{{#invoke:<Category>|index}}</nowiki></code>.
|-
|-
| [[Data:Navbox_Codex.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Codex || 12 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| Whatever records Module:Core passes it.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Compare]] — side-by-side comparison tables with computed DPS and wave-10 columns
|-
|-
| [[Data:Navbox_Crux.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Crux || 5 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Builds the comparison tables on [[Weapons]], [[Enemies]] (which hosts the enemy comparison table with wave-10 projections; ''Enemy comparison'' redirects there), [[Weapon comparison]] and [[Hero comparison]]. Every table opens with an unsortable Thumbnail column followed by a sortable linked Name column. Computes columns that are stored nowhere: weapon '''DPS''' = (Damage + Holy + Fire + Electric) × Attack Speed; enemy '''wave-10 projections''' = base + per-wave × 9. Rows carry <code>data-element/class/tier/type</code> attributes that power the JS filter chips.
|-
|-
| [[Data:Navbox_Enemies.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Enemies || 3 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:Compare|render|Weapons_Melee}}</nowiki></code> · <code><nowiki>{{#invoke:Compare|render|Weapons_Ranged}}</nowiki></code> · <code><nowiki>{{#invoke:Compare|render|Enemies}}</nowiki></code> · <code><nowiki>{{#invoke:Compare|render|Characters}}</nowiki></code>
|-
|-
| [[Data:Navbox_Passives.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Passives || 8 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| [[Data:Weapons.json]], [[Data:Enemies.json]], [[Data:Characters.json]].
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Navbox]] — the collapsible navigation box at the bottom of detail pages
|-
|-
| [[Data:Navbox_Upgrades.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Upgrades || 13 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Renders a category's full member list as icon + link chains, bucketed into rows (Weapons/Blessings/Upgrades/Passives by tier, Crux/Codex by type, Characters/Enemies flat). The per-category grouping config is the <code>CONFIG</code> table at the top of the module.
|-
|-
| [[Data:Navbox_Weapons.json]] || navbox envelope ({title, rows[]}) loaded by Module:LinkGrid for Weapons || 9 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| Pages use the wrapper templates: <code><nowiki>{{Navbox_Weapons}}</nowiki></code>, <code><nowiki>{{Navbox_Crux}}</nowiki></code>, … (each wraps <code><nowiki>{{#invoke:Navbox|render|<Category>}}</nowiki></code>).
|-
|-
| [[Data:Passives.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Passives || 32 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| The named category's <code>Data:&lt;Category&gt;.json</code>.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Iconbox]] — an entity's small icon + linked name, anywhere
|-
|-
| [[Data:Tags.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Tags || 77 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Looks up an entity by category + name (or bare name) and renders its icon plus a link to its page. Icons come from each entity's own record — there is no icon lookup table. Unknown entities or missing art degrade to a plain link.
|-
|-
| [[Data:Upgrades.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Upgrades || 55 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| Via [[Template:Iconbox]]: <code><nowiki>{{Iconbox|Weapon|Cutter}}</nowiki></code> · <code><nowiki>{{Iconbox|Weapon|Cutter|icononly}}</nowiki></code> · <code><nowiki>{{Iconbox|Blessing|Sanctified Halo|size=32}}</nowiki></code> · bare-name fallback <code><nowiki>{{Iconbox|Cutter}}</nowiki></code>
|-
|-
| [[Data:Weapons.json]] || category envelope ({category, aggregation_mode, record_count, records[]}) loaded by Module:Weapons || 86 KiB
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| Any of the ten <code>Data:&lt;Category&gt;.json</code> pages, depending on the call.
|}
|}


=== Shared Modules (used across every category) ===
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:CrossRef]] — "related entities" sections (base ↔ Plus variants, tag members)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Computes the 'Base variant' / 'Upgraded variant' links between a blessing or upgrade and its '<X> Plus' version (matched on the raw <code>id</code>, because Upgrades' display names can differ from ids), and delegates Tag pages' member sections to Module:TagIndex.
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| Wired by the category modules: <code><nowiki>{{#invoke:Blessings|crossRefs|id=Blessed_Bounty}}</nowiki></code>
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| [[Data:Blessings.json]], [[Data:Upgrades.json]]; tag-bearing categories via Module:TagIndex.
|}


{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! Module !! Purpose !! Edit policy
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:TagIndex]] — "everything that carries this tag"
|-
|-
| [[Module:CrossRef]] || Renders forward + reverse cross-references between entities || Editable; field-name changes get overwritten on re-publish
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Renders the member sections on Tag pages ('Weapons with this tag', …). Membership is never stored — it scans every tag-bearing category's <code>tags[]</code> arrays at render time, so adding a tag key to any record updates the tag page on purge.
|-
|-
| [[Module:Index]] || Renders sortable category index tables || Editable; field-name changes get overwritten on re-publish
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:TagIndex|members|Melee}}</nowiki></code> (bare key or <code>Tag-Melee</code> slug)
|-
|-
| [[Module:LinkGrid]] || Renders icon+link grids (used by all Navbox templates + the "Possible drops" / "Related Achievements" body sections) || Editable; field-name changes get overwritten on re-publish
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| [[Data:Tags.json]] + [[Data:Weapons.json]], [[Data:Characters.json]], [[Data:Blessings.json]], [[Data:Upgrades.json]], [[Data:Passives.json]], [[Data:Enemies.json]].
|}
|}


=== Per-category Modules ===
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:StatIndex]] — "what modifies this stat?" reverse lookups
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Renders the lookup tables on per-stat pages ([[Armor]], [[Speed]], …) and the damage-type hubs: every hero / blessing / upgrade / passive / Crux power modifying a stat (sorted by amount), and every weapon dealing an elemental damage type.
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:StatIndex|boosters|Armor}}</nowiki></code> · <code><nowiki>{{#invoke:StatIndex|weapons|Fire Damage}}</nowiki></code>
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| boosters: [[Data:Characters.json]], [[Data:Blessings.json]], [[Data:Upgrades.json]], [[Data:Passives.json]], [[Data:Crux.json]] — weapons: [[Data:Weapons.json]].
|}


One per first-class category. Edits persist until the next scheduled re-publish regenerates them — so changes to the rendering logic ''that don't touch the data-binding field names'' are fine for short-lived experiments.
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
 
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:DamageType]] — readable aliases for the damage-type hub pages
{| class="wikitable"
! Module !! Category !! Records
|-
|-
| [[Module:Achievements]] || Achievements || 100
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Thin wrappers over Module:StatIndex so the [[Holy Damage]] / [[Fire Damage]] / [[Electric Damage]] hubs read naturally. No logic of its own.
|-
|-
| [[Module:Blessings]] || Blessings || 94
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:DamageType|dealtBy|Fire Damage}}</nowiki></code> · <code><nowiki>{{#invoke:DamageType|boostedBy|Fire Damage}}</nowiki></code>
|-
|-
| [[Module:Characters]] || Characters || 10
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| Same as Module:StatIndex.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Module:Codex]] — Codex category module + the shared lore lookup
|-
|-
| [[Module:Codex]] || Codex || 90
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | What it does
| Standard category rendering for Codex pages, plus the <code>lore</code> entry point that powers '== Lore ==' sections on weapon / enemy / character pages: it finds the matching Codex entry by normalized name at render time, falling back to the entity's own <code>description</code>. Edit the lore once in [[Data:Codex.json]] and every page showing it updates.
|-
|-
| [[Module:Crux]] || Crux || 34
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Invoke
| <code><nowiki>{{#invoke:Codex|lore|Cutter|Weapons}}</nowiki></code> (category-scoped) · <code><nowiki>{{#invoke:Codex|lore|Azrael}}</nowiki></code> (cross-category)
|-
|-
| [[Module:Enemies]] || Enemies || 27
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Reads
| [[Data:Codex.json]] + the named entity's category Data page.
|}
</div>
 
|-|Template catalogue=
One expandable entry per user-facing template (or template family). Infobox values and navbox rows are computed by the modules — these templates are the presentation wrappers.
 
<div class="wm-catalogue">
<div class="wm-catalogue-controls"><span class="wm-expand-all">▸ Expand all</span> <span class="wm-collapse-all">▾ Collapse all</span></div>
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Template:Iconbox]] — inline entity icon + linked name
|-
|-
| [[Module:Passives]] || Passives || 55
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | Usage
| <code><nowiki>{{Iconbox|Weapon|Cutter}}</nowiki></code> → icon + linked name. Add <code>icononly</code> for just the glyph: <code><nowiki>{{Iconbox|Weapon|Cutter|icononly}}</nowiki></code>. Optional <code>size=32</code>. Category accepts singular or plural (Weapon, Character, Blessing, Upgrade, Crux, Passive, Enemy, Achievement, Codex, Tag); bare-name form <code><nowiki>{{Iconbox|Cutter}}</nowiki></code> scans all categories. The go-to template for mentioning any entity in prose.
|-
|-
| [[Module:Tags]] || Tags || 84
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Backed by
| [[Module:Iconbox]] → the entity's own record in <code>Data:&lt;Category&gt;.json</code>.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Template:Tip]] — highlighted gameplay-advice callout
|-
|-
| [[Module:Upgrades]] || Upgrades || 88
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | Usage
| <code><nowiki>{{Tip|Pierce-heavy builds love this weapon — pair it with Penetrating Light.}}</nowiki></code> → a green-edged callout box. Use on detail pages for strategy notes that should stand out from lore.
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | Template:&lt;Category&gt;_infobox (10 templates) — the infobox panel on every detail page
|-
|-
| [[Module:Weapons]] || Weapons || 65
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | Usage
| Never called by hand. Detail pages call <code><nowiki>{{#invoke:<Category>|infobox|id=<slug>}}</nowiki></code>; Module:Core computes the values from the Data page and passes them in. The templates ([[Template:Weapons_infobox]], [[Template:Characters_infobox]], [[Template:Blessings_infobox]], [[Template:Upgrades_infobox]], [[Template:Crux_infobox]], [[Template:Passives_infobox]], [[Template:Enemies_infobox]], [[Template:Achievements_infobox]], [[Template:Codex_infobox]], [[Template:Tags_infobox]]) own only the presentation: row layout, tier/type-colored headers, em-dash fallbacks. Each template's own page documents its parameters and the safe row shape.
|}
|}


=== Per-category Templates ===
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | Template:Navbox_&lt;Category&gt; (8 templates) — bottom-of-page navigation
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | Usage
| <code><nowiki>{{Navbox_Weapons}}</nowiki></code> at the bottom of a detail page. Available: [[Template:Navbox_Weapons]], [[Template:Navbox_Characters]], [[Template:Navbox_Blessings]], [[Template:Navbox_Upgrades]], [[Template:Navbox_Crux]], [[Template:Navbox_Passives]], [[Template:Navbox_Enemies]], [[Template:Navbox_Codex]]. Each wraps <code><nowiki>{{#invoke:Navbox|render|<Category>}}</nowiki></code> — rows are computed from the category's Data page, so new entities appear automatically.
|}


Infobox templates (one per category) + navbox templates (one per navbox-enabled category). Same overwrite rule: re-publishes regenerate the parameter list + Pattern-B rows; cosmetic prose (e.g. an added intro paragraph above the infobox call) won't persist.
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | Template:&lt;Category&gt;_Tags (5 templates) — the '== Tags ==' section on detail pages
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:140px;" | Usage
| <code><nowiki>{{Weapons_Tags|Cutter}}</nowiki></code> → the tag list with effect text for one record. Available for Weapons, Characters, Blessings, Upgrades, Passives. Each wraps <code><nowiki>{{#invoke:<Category>|body|id={{{1}}}|section=Tags}}</nowiki></code> so the section can be restyled in one place.
|}


{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! Template !! Kind !! Used by
! colspan="2" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | Utility templates (general-purpose page furniture)
|-
|-
| [[Template:Achievements_infobox]] || Infobox || Every Achievements detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:170px;" | [[Template:Stub]]
| Banner for short pages needing expansion (auto-categorizes).
|-
|-
| [[Template:Blessings_Tags]] || Section delegator || Per-instance detail pages (delegated_template render mode)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:NeedsImage]]
| Banner for pages missing art.
|-
|-
| [[Template:Blessings_infobox]] || Infobox || Every Blessings detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Disambig]]
| Marks disambiguation pages.
|-
|-
| [[Template:Characters_Tags]] || Section delegator || Per-instance detail pages (delegated_template render mode)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Quote]]
| Block quotation with attribution.
|-
|-
| [[Template:Characters_infobox]] || Infobox || Every Characters detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:GameVersion]]
| Inline version stamp: <code><nowiki>{{GameVersion|1.2.3}}</nowiki></code> → "As of v1.2.3".
|-
|-
| [[Template:Codex_infobox]] || Infobox || Every Codex detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Spoiler]]
| Collapsible spoiler block.
|-
|-
| [[Template:Crux_infobox]] || Infobox || Every Crux detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Color]]
| Inline colored text: <code><nowiki>{{Color|#ff6b35|burning}}</nowiki></code>.
|-
|-
| [[Template:Enemies_infobox]] || Infobox || Every Enemies detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:External]]
| External link with icon.
|-
|-
| [[Template:Navbox_Blessings]] || Navbox || Every Blessings detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Hover]]
| Plain-text tooltip on hover.
|-
|-
| [[Template:Navbox_Characters]] || Navbox || Every Characters detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Breadcrumb]]
| Breadcrumb navigation line.
|-
|-
| [[Template:Navbox_Codex]] || Navbox || Every Codex detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Transclude]]
| Transclude a page or labeled section: <code><nowiki>{{Transclude|PageName#Section}}</nowiki></code>.
|-
|-
| [[Template:Navbox_Crux]] || Navbox || Every Crux detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Anchor]]
| Invisible anchor target for in-page links.
|-
|-
| [[Template:Navbox_Enemies]] || Navbox || Every Enemies detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Clear]]
| Clears floats (e.g. below an infobox).
|-
|-
| [[Template:Navbox_Passives]] || Navbox || Every Passives detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | [[Template:Documentation]]
| The <code>{{documentation}}</code> convention for template doc subpages.
|}
</div>
 
|-|Data schemas=
The ten source Data pages and their REAL record fields. Every Data page also carries this documentation in its own top-level <code>description</code> field. Shared by all categories: <code>id</code> (the game's internal id), <code>slug</code> (the wiki page title of the entity's detail page — never recompute it from the name), <code>name</code> (display name), <code>icon</code> (<code>File:</code> image name; empty = no staged art).
 
<div class="wm-catalogue">
<div class="wm-catalogue-controls"><span class="wm-expand-all">▸ Expand all</span> <span class="wm-collapse-all">▾ Collapse all</span></div>
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Weapons.json]] — one record per weapon (65)
|-
|-
| [[Template:Navbox_Upgrades]] || Navbox || Every Upgrades detail page (bottom)
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
|-
| [[Template:Navbox_Weapons]] || Navbox || Every Weapons detail page (bottom)
| <code>tier</code> || number || Shop tier 1–3.
|-
|-
| [[Template:Passives_Tags]] || Section delegator || Per-instance detail pages (delegated_template render mode)
| <code>price</code> || number || Shop price.
|-
|-
| [[Template:Passives_infobox]] || Infobox || Every Passives detail page
| <code>locked</code> || boolean || <code>true</code> = must be unlocked.
|-
|-
| [[Template:Tags_infobox]] || Infobox || Every Tags detail page
| <code>tag_source</code> || string || The game's raw tag family (Melee, Laser, Grenade, …). <code>Melee</code> here (or a Melee tag) makes the weapon class Melee; everything else is Ranged.
|-
|-
| [[Template:Upgrades_Tags]] || Section delegator || Per-instance detail pages (delegated_template render mode)
| <code>tags[]</code> || string list || Tag KEYS — join [[Data:Tags.json]] for effect text and tag pages.
|-
|-
| [[Template:Upgrades_infobox]] || Infobox || Every Upgrades detail page
| <code>stats{}</code> || map || Raw numbers keyed by stat name: <code>Damage</code>, <code>Holy/Fire/Electric Damage</code>, <code>Attack Speed</code>, <code>Critical Chance</code> (percent values stay strings like <code>"15%"</code>), <code>Range</code>, <code>Pierce</code>, <code>Projectiles</code>, <code>Bounce</code>. Sentinels: ≥ 1000 renders as ''Unlimited'', ≤ −1000 is hidden. '''DPS is not stored''' — [[Module:Compare]] computes it at render time.
|-
|-
| [[Template:Weapons_Tags]] || Section delegator || Per-instance detail pages (delegated_template render mode)
| colspan="3" | ''Consumed by Module:Core (infobox/body/index), Module:Compare, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.''
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Characters.json]] — one record per playable hero (10)
|-
|-
| [[Template:Weapons_infobox]] || Infobox || Every Weapons detail page
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>tier</code>, <code>price</code>, <code>locked</code> || number/boolean || Unlock metadata; <code>locked</code> drives the Availability row.
|-
| <code>tags[]</code> || string list || Tag keys → [[Data:Tags.json]] (only some heroes carry tags).
|-
| <code>stats{}</code> || map || Signed stat '''modifiers''' applied to base stats (e.g. <code>Armor: 6</code>, <code>"Attack Speed": "-12%"</code>) — not absolute values.
|-
| <code>description</code> || string || Lore prose, shown under == Lore ==.
|-
| colspan="3" | ''Consumed by Module:Core, Module:Compare (hero comparison), Module:StatIndex, Module:TagIndex, Module:Iconbox.''
|}
|}


=== Universal Templates ===
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Blessings.json]] — one record per blessing (94)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>tier</code>, <code>price</code>, <code>locked</code> || number/boolean || Shop tier 1–3, price, unlock state.
|-
| <code>tags[]</code> || string list || Tag keys → [[Data:Tags.json]].
|-
| <code>stats{}</code> || map || Signed stat modifiers; percent values stay strings (<code>"5%"</code>).
|-
| <code>description</code> || string || Flavor prose.
|-
| colspan="3" | ''<code>&lt;X&gt; Plus</code> records are upgraded variants: ids pair <code>&lt;x&gt;-plus</code> with <code>&lt;x&gt;</code>, linked by [[Module:CrossRef]] at render time. Consumed by Module:Core, Module:CrossRef, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.''
|}


Generic templates shipped on every wiki by the bot. These are also overwritten on re-publish, but their bodies don't change between games durable improvements go upstream in the template library.
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Upgrades.json]] — one record per shop upgrade (88)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>tier</code>, <code>price</code>, <code>locked</code> || number/boolean || Shop tier 1–3, price, unlock state.
|-
| <code>tags[]</code> || string list || Tag keys → [[Data:Tags.json]].
|-
| <code>stats{}</code> || map || Signed stat modifiers.
|-
| <code>description</code> || string || Rarely present (3 of 88).
|-
| colspan="3" | '''Caution:''' ''<code>id</code> and <code>name</code> can differ completely (id <code>Shield Transform</code> displays as <code>Lifesteal Chamber</code>) that's why ''<code>&lt;X&gt; Plus</code>'' variant pairing matches on the raw id ([[Module:CrossRef]]). Consumed by Module:Core, Module:CrossRef, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.''
|}


{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! Template !! Purpose
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Crux.json]] — one record per Crux power (34)
|-
|-
| [[Template:Tip]] || Highlighted tip / callout box
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
|-
| [[Template:Transclude]] || Transclude a page or labeled section: <code><nowiki>{{Transclude|PageName#Section}}</nowiki></code>. Requires Extension:LabeledSectionTransclusion (ships with MediaWiki core).
| <code>tier</code> || number || Tier.
|-
|-
| [[Template:Iconbox]] || Atomic icon + caption + link cell (for inline lists / galleries)
| <code>type</code> || string || <code>Unique / Action / Buff / Debuff / Aura</code> — drives index grouping, navbox rows and the infobox header color.
|-
|-
| [[Template:Stub]] || Banner marker for short pages (auto-categorizes)
| <code>state</code> || string || <code>Acquired / Unlocked / Locked</code> → rendered as the Availability row.
|-
|-
| [[Template:NeedsImage]] || Banner marker for pages with no icon
| <code>stats{}</code> || map || Signed stat modifiers.
|-
|-
| [[Template:Disambig]] || Disambiguation pages
| <code>description</code> || string || Effect prose.
|-
|-
| [[Template:Quote]] || Block quotation
| colspan="3" | ''Consumed by Module:Core, Module:Navbox, Module:StatIndex, Module:Iconbox.''
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Passives.json]] — one record per passive (55)
|-
|-
| [[Template:GameVersion]] || Inline version stamp ("As of v1.2.3")
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
|-
| [[Template:Spoiler]] || Collapsible spoiler block
| <code>tier</code>, <code>price</code>, <code>locked</code> || number/boolean || Shop tier 1–3, price; every passive starts locked.
|-
|-
| [[Template:Color]] || Colorize inline text: <code><nowiki>{{Color|#ff0000|red}}</nowiki></code>
| <code>tags[]</code> || string list || Tag keys → [[Data:Tags.json]].
|-
|-
| [[Template:External]] || External link with icon
| <code>stats{}</code> || map || Signed stat modifiers.
|-
|-
| [[Template:Hover]] || Tooltip on hover
| <code>description</code> || string || Flavor prose.
|-
|-
| [[Template:Breadcrumb]] || Breadcrumb nav
| colspan="3" | ''Ranked families (Armor I/II/III) are grouped consecutively on the index by Module:Core's sort — the stored order doesn't matter. Consumed by Module:Core, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.''
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Enemies.json]] — one record per enemy type (27)
|-
|-
| [[Template:Anchor]] || Anchor target for in-page links
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
|-
| [[Template:Clear]] || <code>&lt;br clear="both"&gt;</code> shortcut (clear floats)
| <code>stats{}</code> || map || <code>Health</code>, <code>HP per Wave</code>, <code>Damage</code>, <code>Damage per Wave</code>, <code>Speed</code>, <code>Resources</code>. Per-wave values scale linearly; wave-10 projections are computed by [[Module:Compare]], not stored.
|-
|-
| [[Template:Documentation]] || The <code>{{documentation}}</code> convention for template docs
| <code>tags[]</code> || string list || Classification keys (<code>Melee / Range / Big / Boss</code>) → [[Data:Tags.json]].
|-
| <code>description</code> || string || The enemy's own lore. When a Codex entry matches by name, [[Module:Codex]] shows the fuller codex text instead at render time.
|-
| colspan="3" | ''Consumed by Module:Core, Module:Compare, Module:Navbox, Module:TagIndex, Module:Iconbox.''
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Achievements.json]] — one record per Steam achievement (100)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>description</code> || string || The unlock objective (e.g. "Kill 10,000 enemies") — rendered as both the infobox Objective row and the == Objective == section.
|-
| colspan="3" | ''Consumed by Module:Core (infobox/index) and Module:Iconbox.''
|}
 
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Codex.json]] — one record per encyclopedia entry (90)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>type</code> || string || <code>Enemies / Weapons / Events / Tips</code> — drives index grouping and navbox rows.
|-
| <code>description</code> || string || The full lore text.
|-
| <code>redirect_slug</code> || string (optional) || Present when the entry matched a weapon/enemy by name: <code>slug</code> then points at the ENTITY's page (which inlines this lore), and <code>redirect_slug</code> is the old <code>&lt;X&gt;-Codex</code> title kept as a redirect.
|-
| colspan="3" | ''Tips entries named after a stat (e.g. "Holy Damage") are that stat's hub page. [[Module:Codex]] joins entries to weapons/enemies by normalized name at render time. Consumed by Module:Core, Module:Codex, Module:Navbox, Module:Iconbox.''
|}
|}


=== Detail pages ===
{| class="wikitable mw-collapsible mw-collapsed" style="width:100%;background:var(--table-row-odd, #1b1c20);color:var(--table-text, #e6e6e6);border-color:var(--table-border, #3a3c44);"
! colspan="3" style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);text-align:left;" | [[Data:Tags.json]] — one record per tag / perk keyword (84)
|-
! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:130px;" | Field !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);width:110px;" | Type !! style="background:var(--table-header-bg, #26272e);color:var(--infobox-header-fg, #f1e9d2);" | Meaning
|-
| <code>id</code> || string || The raw tag KEY exactly as used in other categories' <code>tags[]</code> arrays (e.g. <code>BreakArmor</code>).
|-
| <code>slug</code> || string || Tag page title, always <code>Tag-&lt;Key&gt;</code>.
|-
| <code>text</code> || string || The effect text; empty when the game data ships none.
|-
| colspan="3" | ''Which entities carry a tag is NOT stored here — Module:Core scans the other categories' <code>tags[]</code> arrays at render time (rendered by [[Module:TagIndex]]). Consumed by Module:Core (tag links + effect text everywhere), Module:TagIndex, Module:CrossRef.''
|}
</div>


Per-instance pages (one per item, character, etc.). '''Fully editable + edits persist.''' First-write-only publish: once a detail page exists, the bot preserves any edits you make. Your prose, screenshots, and trivia survive every re-publish. The framework (Modules / Templates / Data) below them gets regenerated, so re-publishes refresh the data-driven sections automatically while preserving your prose.
|-|MediaWiki Guide=
{{:Help:MediaWiki Guide}}


|-|Special Pages=
|-|Special Pages=
Line 199: Line 466:
* [[Special:WhatLinksHere]] — Reverse-lookup: which pages link to a given page. Useful for "where is this template used?"
* [[Special:WhatLinksHere]] — Reverse-lookup: which pages link to a given page. Useful for "where is this template used?"
* [[Special:Categories]] — All categories on the wiki.
* [[Special:Categories]] — All categories on the wiki.
* [[Special:UncategorizedPages]] — Main-namespace pages without a [[Category:X]] tag. Should be near-zero — unexpected entries here are bot-publishing bugs worth reporting.
* [[Special:UncategorizedPages]] — Main-namespace pages without a <code><nowiki>[[Category:...]]</nowiki></code> tag. Should be near-zero — unexpected entries here are bot-publishing bugs worth reporting.
* [[Special:RecentChanges]] — Live feed of edits.
* [[Special:RecentChanges]] — Live feed of edits.
* [[MediaWiki:Sidebar]] — Edit the navigation sidebar. Regenerated on every scheduled re-publish; direct edits get clobbered.
* [[MediaWiki:Sidebar]] — Edit the navigation sidebar.
* [[Special:Upload]] / [[Special:BatchUpload]] — Image upload (single + multi).
* [[Special:Upload]] / [[Special:BatchUpload]] — Image upload (single + multi).
* [[Special:Version]] — Installed MediaWiki extensions, skins, libraries, and version info.
* [[Special:Version]] — Installed MediaWiki extensions, skins, libraries, and version info.

Latest revision as of 19:36, 10 June 2026

The one-sentence version

All data on this wiki lives in ten JSON pages — Data:Weapons.json through Data:Tags.json — and every table, infobox, navbox, tag page and stat page is computed from them by Lua modules at render time. There are no precomputed pages: edit a value once on a Data page, purge, and every view of that value updates everywhere.

Data flow

 SOURCE OF TRUTH (edit values here)
 ┌────────────────────────────────────────────────────────────────┐
 │ Data:Weapons.json   Data:Characters.json   Data:Blessings.json │
 │ Data:Upgrades.json  Data:Crux.json         Data:Passives.json  │
 │ Data:Enemies.json   Data:Achievements.json Data:Codex.json     │
 │ Data:Tags.json                                                 │
 └───────────────┬────────────────────────────────────────────────┘
                 │  read at render time by
                 ▼
 ┌─ Module:Core ──────────────────────────────────────────────────┐
 │  loads + sorts records, computes infobox values, tag links,    │
 │  stat blocks, lore joins; shared by every module below         │
 └───┬───────────┬──────────┬───────────┬───────────┬─────────────┘
     ▼           ▼          ▼           ▼           ▼
 Module:      Module:    Module:     Module:     Module:
 <Category>   Compare    Navbox      TagIndex    StatIndex
 (infobox,    (DPS,      (bottom     (tag        (per-stat +
  body,        wave-10    navboxes)   member      damage-type
  index)       tables)                pages)      lookups)
     │           │          │           │           │
     ▼           ▼          ▼           ▼           ▼
            RENDERED PAGES (recomputed on every purge)

What to edit, where

You want to change… Edit this What happens
A value: a stat number, price, tier, lore text, tag key, icon filename The record in the matching Data:<Category>.json page Every infobox, index row, comparison table, navbox and lookup that shows the value updates after a cache purge. Don't rename field keys — modules look them up by name.
Prose on one entity's page: intro text, strategy notes, screenshots, trivia The detail page itself (e.g. Cutter) Detail pages are first-write-only: the bot never overwrites them, so your edits persist across re-publishes.
How something renders: column order, section layout, sort order, labels The Lua module — Module:Core for most things (infobox field lists, index columns, stat display order, sorting); Module:Compare / Module:Navbox / etc. for their own views All affected pages re-render on purge. Note: module edits are overwritten by the next scheduled bot re-publish, so durable changes should also be reported upstream.
The infobox panel look (rows, header, fallbacks) Template:<Category>_infobox Presentation only — values are computed by Module:Core and passed in as parameters.
Site-wide look: colors, theme tokens, filter chips, hover tooltips MediaWiki:Common.css / MediaWiki:Common.js Theme tokens (--infobox-*, --table-*, --dmg-*) restyle everything at once; inline fallbacks keep pages readable without them.

Seeing your edit

MediaWiki caches rendered pages. After editing a Data page or module, other pages that use it may show the old version until their cache expires. To force it: open the page and add ?action=purge to the URL (or use the "Purge" option). The job queue eventually refreshes everything on its own.

What the bot does on re-publish

  • Overwrites the framework layer: Module:*, Template:*, Data:* pages, category index pages, comparison/stat pages, and this help page. Value edits you made on Data pages are replaced by the game's current data — report data corrections to the developers so they land in the source.
  • Never touches existing detail pages (one per weapon / hero / blessing / …). Your prose, images and trivia are safe there.

One expandable entry per module. Every module is readable on its Module: page and carries the same documentation in its header comment.

▸ Expand all ▾ Collapse all
Module:Core — the engine room: computes every infobox value, index table, tag link, sort order and lore join
What it does The shared library every other module require()s. Loads and memoizes the ten Data pages, resolves category names, computes infobox value sets, stat blocks (with glyphs and elemental color chips), tag links and membership maps, codex lore joins, per-category sort orders, and the per-category presentation config (infobox field lists in INFOBOX_FIELD_ORDER, index columns in INDEX_OPTS, stat display order in STAT_ORDER).
Invoke Not invoked directly — the per-category modules forward to its entry points (infoboxEntry, bodyEntry, indexEntry, renderEntry).
Reads All ten Data:<Category>.json pages.
Module:Weapons … Module:Tags (per-category modules) — infobox / body / index / crossRefs for one category
What they do One tiny module per category (Module:Weapons, Module:Characters, Module:Blessings, Module:Upgrades, Module:Crux, Module:Passives, Module:Enemies, Module:Achievements, Module:Codex, Module:Tags). Each only binds its category name and forwards to Module:Core — so all rendering logic lives in ONE place. Module:Codex additionally provides the shared lore lookup (see its entry below).
Invoke {{#invoke:Weapons|infobox|id=Cutter}} — the infobox panel
{{#invoke:Weapons|body|id=Cutter|section=Tags}} — one body section (omit section for all)
{{#invoke:Weapons|index}} — the sortable category table
{{#invoke:Blessings|crossRefs|id=Blessed_Bounty}} — variant / tag-member links
{{#invoke:Weapons|render|id=Cutter}} — infobox + body + crossRefs in one call
Read The category's own Data:<Category>.json (via Module:Core).
Module:Index — generic sortable-table renderer behind every category index
What it does Pure presentation: given records + a column spec, emits one sortable wikitable. Holds no data — Module:Core's indexEntry feeds it sorted records augmented with computed infobox values. Column lists per category live in Module:Core's INDEX_OPTS.
Invoke Not invoked directly; pages use {{#invoke:<Category>|index}}.
Reads Whatever records Module:Core passes it.
Module:Compare — side-by-side comparison tables with computed DPS and wave-10 columns
What it does Builds the comparison tables on Weapons, Enemies (which hosts the enemy comparison table with wave-10 projections; Enemy comparison redirects there), Weapon comparison and Hero comparison. Every table opens with an unsortable Thumbnail column followed by a sortable linked Name column. Computes columns that are stored nowhere: weapon DPS = (Damage + Holy + Fire + Electric) × Attack Speed; enemy wave-10 projections = base + per-wave × 9. Rows carry data-element/class/tier/type attributes that power the JS filter chips.
Invoke {{#invoke:Compare|render|Weapons_Melee}} · {{#invoke:Compare|render|Weapons_Ranged}} · {{#invoke:Compare|render|Enemies}} · {{#invoke:Compare|render|Characters}}
Reads Data:Weapons.json, Data:Enemies.json, Data:Characters.json.
Module:Navbox — the collapsible navigation box at the bottom of detail pages
What it does Renders a category's full member list as icon + link chains, bucketed into rows (Weapons/Blessings/Upgrades/Passives by tier, Crux/Codex by type, Characters/Enemies flat). The per-category grouping config is the CONFIG table at the top of the module.
Invoke Pages use the wrapper templates: {{Navbox_Weapons}}, {{Navbox_Crux}}, … (each wraps {{#invoke:Navbox|render|<Category>}}).
Reads The named category's Data:<Category>.json.
Module:Iconbox — an entity's small icon + linked name, anywhere
What it does Looks up an entity by category + name (or bare name) and renders its icon plus a link to its page. Icons come from each entity's own record — there is no icon lookup table. Unknown entities or missing art degrade to a plain link.
Invoke Via Template:Iconbox: {{Iconbox|Weapon|Cutter}} · {{Iconbox|Weapon|Cutter|icononly}} · {{Iconbox|Blessing|Sanctified Halo|size=32}} · bare-name fallback {{Iconbox|Cutter}}
Reads Any of the ten Data:<Category>.json pages, depending on the call.
Module:CrossRef — "related entities" sections (base ↔ Plus variants, tag members)
What it does Computes the 'Base variant' / 'Upgraded variant' links between a blessing or upgrade and its '<X> Plus' version (matched on the raw id, because Upgrades' display names can differ from ids), and delegates Tag pages' member sections to Module:TagIndex.
Invoke Wired by the category modules: {{#invoke:Blessings|crossRefs|id=Blessed_Bounty}}
Reads Data:Blessings.json, Data:Upgrades.json; tag-bearing categories via Module:TagIndex.
Module:TagIndex — "everything that carries this tag"
What it does Renders the member sections on Tag pages ('Weapons with this tag', …). Membership is never stored — it scans every tag-bearing category's tags[] arrays at render time, so adding a tag key to any record updates the tag page on purge.
Invoke {{#invoke:TagIndex|members|Melee}} (bare key or Tag-Melee slug)
Reads Data:Tags.json + Data:Weapons.json, Data:Characters.json, Data:Blessings.json, Data:Upgrades.json, Data:Passives.json, Data:Enemies.json.
Module:StatIndex — "what modifies this stat?" reverse lookups
What it does Renders the lookup tables on per-stat pages (Armor, Speed, …) and the damage-type hubs: every hero / blessing / upgrade / passive / Crux power modifying a stat (sorted by amount), and every weapon dealing an elemental damage type.
Invoke {{#invoke:StatIndex|boosters|Armor}} · {{#invoke:StatIndex|weapons|Fire Damage}}
Reads boosters: Data:Characters.json, Data:Blessings.json, Data:Upgrades.json, Data:Passives.json, Data:Crux.json — weapons: Data:Weapons.json.
Module:DamageType — readable aliases for the damage-type hub pages
What it does Thin wrappers over Module:StatIndex so the Holy Damage / Fire Damage / Electric Damage hubs read naturally. No logic of its own.
Invoke {{#invoke:DamageType|dealtBy|Fire Damage}} · {{#invoke:DamageType|boostedBy|Fire Damage}}
Reads Same as Module:StatIndex.
Module:Codex — Codex category module + the shared lore lookup
What it does Standard category rendering for Codex pages, plus the lore entry point that powers '== Lore ==' sections on weapon / enemy / character pages: it finds the matching Codex entry by normalized name at render time, falling back to the entity's own description. Edit the lore once in Data:Codex.json and every page showing it updates.
Invoke {{#invoke:Codex|lore|Cutter|Weapons}} (category-scoped) · {{#invoke:Codex|lore|Azrael}} (cross-category)
Reads Data:Codex.json + the named entity's category Data page.

One expandable entry per user-facing template (or template family). Infobox values and navbox rows are computed by the modules — these templates are the presentation wrappers.

▸ Expand all ▾ Collapse all
Template:Iconbox — inline entity icon + linked name
Usage {{Iconbox|Weapon|Cutter}} → icon + linked name. Add icononly for just the glyph: {{Iconbox|Weapon|Cutter|icononly}}. Optional size=32. Category accepts singular or plural (Weapon, Character, Blessing, Upgrade, Crux, Passive, Enemy, Achievement, Codex, Tag); bare-name form {{Iconbox|Cutter}} scans all categories. The go-to template for mentioning any entity in prose.
Backed by Module:Iconbox → the entity's own record in Data:<Category>.json.
Template:Tip — highlighted gameplay-advice callout
Usage {{Tip|Pierce-heavy builds love this weapon — pair it with Penetrating Light.}} → a green-edged callout box. Use on detail pages for strategy notes that should stand out from lore.
Template:<Category>_infobox (10 templates) — the infobox panel on every detail page
Usage Never called by hand. Detail pages call {{#invoke:<Category>|infobox|id=<slug>}}; Module:Core computes the values from the Data page and passes them in. The templates (Template:Weapons_infobox, Template:Characters_infobox, Template:Blessings_infobox, Template:Upgrades_infobox, Template:Crux_infobox, Template:Passives_infobox, Template:Enemies_infobox, Template:Achievements_infobox, Template:Codex_infobox, Template:Tags_infobox) own only the presentation: row layout, tier/type-colored headers, em-dash fallbacks. Each template's own page documents its parameters and the safe row shape.
Template:Navbox_<Category> (8 templates) — bottom-of-page navigation
Usage {{Navbox_Weapons}} at the bottom of a detail page. Available: Template:Navbox_Weapons, Template:Navbox_Characters, Template:Navbox_Blessings, Template:Navbox_Upgrades, Template:Navbox_Crux, Template:Navbox_Passives, Template:Navbox_Enemies, Template:Navbox_Codex. Each wraps {{#invoke:Navbox|render|<Category>}} — rows are computed from the category's Data page, so new entities appear automatically.
Template:<Category>_Tags (5 templates) — the '== Tags ==' section on detail pages
Usage {{Weapons_Tags|Cutter}} → the tag list with effect text for one record. Available for Weapons, Characters, Blessings, Upgrades, Passives. Each wraps {{#invoke:<Category>|body|id={{{1}}}|section=Tags}} so the section can be restyled in one place.
Utility templates (general-purpose page furniture)
Template:Stub Banner for short pages needing expansion (auto-categorizes).
Template:NeedsImage Banner for pages missing art.
Template:Disambig Marks disambiguation pages.
Template:Quote Block quotation with attribution.
Template:GameVersion Inline version stamp: {{GameVersion|1.2.3}} → "As of v1.2.3".
Template:Spoiler Collapsible spoiler block.
Template:Color Inline colored text: {{Color|#ff6b35|burning}}.
Template:External External link with icon.
Template:Hover Plain-text tooltip on hover.
Template:Breadcrumb Breadcrumb navigation line.
Template:Transclude Transclude a page or labeled section: {{Transclude|PageName#Section}}.
Template:Anchor Invisible anchor target for in-page links.
Template:Clear Clears floats (e.g. below an infobox).
Template:Documentation The

Template documentation

(viewed at Help:Wiki Editing; this section is hidden when the template is transcluded onto another page)

No /doc subpage exists for this template. The template's <noinclude> block (visible here on the template's own view, hidden when transcluded) is the docs.

convention for template doc subpages.

The ten source Data pages and their REAL record fields. Every Data page also carries this documentation in its own top-level description field. Shared by all categories: id (the game's internal id), slug (the wiki page title of the entity's detail page — never recompute it from the name), name (display name), icon (File: image name; empty = no staged art).

▸ Expand all ▾ Collapse all
Data:Weapons.json — one record per weapon (65)
Field Type Meaning
tier number Shop tier 1–3.
price number Shop price.
locked boolean true = must be unlocked.
tag_source string The game's raw tag family (Melee, Laser, Grenade, …). Melee here (or a Melee tag) makes the weapon class Melee; everything else is Ranged.
tags[] string list Tag KEYS — join Data:Tags.json for effect text and tag pages.
stats{} map Raw numbers keyed by stat name: Damage, Holy/Fire/Electric Damage, Attack Speed, Critical Chance (percent values stay strings like "15%"), Range, Pierce, Projectiles, Bounce. Sentinels: ≥ 1000 renders as Unlimited, ≤ −1000 is hidden. DPS is not storedModule:Compare computes it at render time.
Consumed by Module:Core (infobox/body/index), Module:Compare, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.
Data:Characters.json — one record per playable hero (10)
Field Type Meaning
tier, price, locked number/boolean Unlock metadata; locked drives the Availability row.
tags[] string list Tag keys → Data:Tags.json (only some heroes carry tags).
stats{} map Signed stat modifiers applied to base stats (e.g. Armor: 6, "Attack Speed": "-12%") — not absolute values.
description string Lore prose, shown under == Lore ==.
Consumed by Module:Core, Module:Compare (hero comparison), Module:StatIndex, Module:TagIndex, Module:Iconbox.
Data:Blessings.json — one record per blessing (94)
Field Type Meaning
tier, price, locked number/boolean Shop tier 1–3, price, unlock state.
tags[] string list Tag keys → Data:Tags.json.
stats{} map Signed stat modifiers; percent values stay strings ("5%").
description string Flavor prose.
<X> Plus records are upgraded variants: ids pair <x>-plus with <x>, linked by Module:CrossRef at render time. Consumed by Module:Core, Module:CrossRef, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.
Data:Upgrades.json — one record per shop upgrade (88)
Field Type Meaning
tier, price, locked number/boolean Shop tier 1–3, price, unlock state.
tags[] string list Tag keys → Data:Tags.json.
stats{} map Signed stat modifiers.
description string Rarely present (3 of 88).
Caution: id and name can differ completely (id Shield Transform displays as Lifesteal Chamber) — that's why <X> Plus variant pairing matches on the raw id (Module:CrossRef). Consumed by Module:Core, Module:CrossRef, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.
Data:Crux.json — one record per Crux power (34)
Field Type Meaning
tier number Tier.
type string Unique / Action / Buff / Debuff / Aura — drives index grouping, navbox rows and the infobox header color.
state string Acquired / Unlocked / Locked → rendered as the Availability row.
stats{} map Signed stat modifiers.
description string Effect prose.
Consumed by Module:Core, Module:Navbox, Module:StatIndex, Module:Iconbox.
Data:Passives.json — one record per passive (55)
Field Type Meaning
tier, price, locked number/boolean Shop tier 1–3, price; every passive starts locked.
tags[] string list Tag keys → Data:Tags.json.
stats{} map Signed stat modifiers.
description string Flavor prose.
Ranked families (Armor I/II/III) are grouped consecutively on the index by Module:Core's sort — the stored order doesn't matter. Consumed by Module:Core, Module:Navbox, Module:StatIndex, Module:TagIndex, Module:Iconbox.
Data:Enemies.json — one record per enemy type (27)
Field Type Meaning
stats{} map Health, HP per Wave, Damage, Damage per Wave, Speed, Resources. Per-wave values scale linearly; wave-10 projections are computed by Module:Compare, not stored.
tags[] string list Classification keys (Melee / Range / Big / Boss) → Data:Tags.json.
description string The enemy's own lore. When a Codex entry matches by name, Module:Codex shows the fuller codex text instead at render time.
Consumed by Module:Core, Module:Compare, Module:Navbox, Module:TagIndex, Module:Iconbox.
Data:Achievements.json — one record per Steam achievement (100)
Field Type Meaning
description string The unlock objective (e.g. "Kill 10,000 enemies") — rendered as both the infobox Objective row and the == Objective == section.
Consumed by Module:Core (infobox/index) and Module:Iconbox.
Data:Codex.json — one record per encyclopedia entry (90)
Field Type Meaning
type string Enemies / Weapons / Events / Tips — drives index grouping and navbox rows.
description string The full lore text.
redirect_slug string (optional) Present when the entry matched a weapon/enemy by name: slug then points at the ENTITY's page (which inlines this lore), and redirect_slug is the old <X>-Codex title kept as a redirect.
Tips entries named after a stat (e.g. "Holy Damage") are that stat's hub page. Module:Codex joins entries to weapons/enemies by normalized name at render time. Consumed by Module:Core, Module:Codex, Module:Navbox, Module:Iconbox.
Data:Tags.json — one record per tag / perk keyword (84)
Field Type Meaning
id string The raw tag KEY exactly as used in other categories' tags[] arrays (e.g. BreakArmor).
slug string Tag page title, always Tag-<Key>.
text string The effect text; empty when the game data ships none.
Which entities carry a tag is NOT stored here — Module:Core scans the other categories' tags[] arrays at render time (rendered by Module:TagIndex). Consumed by Module:Core (tag links + effect text everywhere), Module:TagIndex, Module:CrossRef.

Basics

Click the pencil icon at the top right of any page to open the editor. A dropdown shows the editing options available for that page.

Creating a page

To create a new page, navigate to its URL. Replace the last path segment with the new page name. Example: a new page named "Foo Bar" lives at https://armsofgod.wiki.spellsandguns.com//Foo_Bar.

The page will show "There is currently no text in this page." Click "create this page" to begin editing.

Page-name limitations apply (trailing spaces are trimmed, etc.). See MediaWiki: PAGENAMEE encoding for the full rules.

Editing a page

Visual Edit — an experimental WYSIWYG editor. For the most part the rendered content matches the live page. Has limited use on Template / Module / Data pages.

Edit Source — opens a wikitext editor with syntax highlighting. "Show preview" lets you see the effects before saving. If you enter an empty-looking page, try Edit Source — there's likely content hidden inside <includeonly> tags.

Uploading an image

Special:Upload — single-image upload. The destination filename determines what the file is called on the wiki.

Special:BatchUpload — multi-image upload. Uploaded files use their source filenames automatically. Conflicting names overwrite existing files; be careful.

Broken file links appear as grey File:missing_example.png-style links. Clicking them opens the upload page with the destination filename pre-filled.

Conventions

Most pages on this wiki are bot-published from the game's data. Modules, Templates, Data: pages, and per-instance detail pages are regenerated on a schedule (typically after game patches).

Safe-to-edit rules:

- Detail pages (one per item / character / etc.) — edits persist. First-write-only publish: once a detail page exists, the bot preserves any edits you make. Your prose, screenshots, and trivia survive every re-publish. - Module / Template / Data: pagesedits don't persist. These get overwritten on every scheduled re-publish. Cosmetic edits (formatting, comments) won't break anything but won't survive either. What gets re-emitted is the data-bound variable names, parameter lists, and JSON keys — so don't rename those, even temporarily. See the bot-published content catalog for the full list.

MediaWiki

This wiki runs on MediaWiki software. See Special:Version for installed extensions, skins, libraries, and version info.

This tab highlights MediaWiki's special pages most useful for working on this wiki.