Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Join the Playtest on Steam Now: SpiritVale

Module:GameSkills/doc: Difference between revisions

From SpiritVale Wiki
Created page with "== Module:GameSkills == '''Module:GameSkills''' renders skill data from Data:skills.json into a reusable infobox-style table. It is intended to be used via a template (for example Template:Skill) so that skills can be embedded on any page without creating individual skill pages. This module: * Loads data via Module:GameData → <code>GameData.loadSkills()</code>. * Looks up skills by their <code>"Internal Name"</code> (fast) or by display <code>"Name"</co..."
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 8: Line 8:


* Loads data via [[Module:GameData]] → <code>GameData.loadSkills()</code>.
* Loads data via [[Module:GameData]] → <code>GameData.loadSkills()</code>.
* Looks up skills by their <code>"Internal Name"</code> (fast) or by display <code>"Name"</code> (fallback).
* Looks up skills primarily by display <code>"Name"</code> (what editors use), with <code>"Internal Name"</code> as a fallback.
* Builds a table with only the fields that actually exist for that skill.
* Builds a table with only the fields that actually exist for that skill.


Line 30: Line 30:
  }
  }


Each record is a single skill. The important key for lookups is:
Each record is a single skill. Important keys:


* <code>"Internal Name"</code> – the stable ID used in templates (e.g. <code>Bash</code>, <code>Dispell</code>).
* <code>"Name"</code> – the display name (what players and editors will usually see and use).
* <code>"Internal Name"</code> – the stable ID used internally and available as an optional parameter for power users and tooling.


----
----
Line 38: Line 39:
== Output ==
== Output ==


For a given skill, the module renders a table with the CSS class <code>sv-skill-infobox</code>.
For a given skill, the module renders a table with the CSS class <code>spiritvale-skill-infobox</code>.


Depending on what exists in the JSON record, the table may include:
Depending on what exists in the JSON record, the table may include:


* Header row with skill name.
* Header row with skill name (and icon, if present).
* Icon (from <code>"Icon"</code>, as a file name like <code>skill-example.webp</code>).
* Icon (from <code>"Icon"</code>, as a file name like <code>skill-example.webp</code>).
* Description.
* Description.
* Type line (combined from <code>Damage Type</code>, <code>Element Type</code>, <code>Target Type</code>, <code>Cast Type</code>).
* Type information:
** Damage Type
** Element Type
** Target Type
** Cast Type
* Max Level.
* Max Level.
* Users (Classes, Summons, Monsters).
* Users:
** Classes
** Summons
** Monsters
** Events
* Requirements:
** Required Skills (with required level)
** Required Weapons
** Required Stances
* Mechanics:
* Mechanics:
** Range
** Range
** Area (size / effective distance)
** Cast Time / Cooldown / Duration
** Cast Time / Cooldown / Duration
** Resource Cost (Mana / HP)
** Mana Cost
* Statuses applied.
* Damage and scaling:
* Statuses removed.
** Main Damage (base and per-level, where present)
** Scaling (stat-based contributions)
* Status interactions:
** Status Applications (status name, scope, basic duration/chance info)


Rows are only shown if the underlying field exists in the JSON for that skill.
Rows are only shown if the underlying field exists in the JSON for that skill.
Line 70: Line 85:
It accepts the following parameters (either passed directly or via a wrapper template):
It accepts the following parameters (either passed directly or via a wrapper template):


* <code>id</code> – <code>"Internal Name"</code> of the skill (preferred).
* <code>1</code> – unnamed parameter; treated as the skill <code>"Name"</code>.
* <code>name</code> – display <code>"Name"</code> of the skill (fallback, slower lookup).
* <code>name</code> – explicit display <code>"Name"</code> of the skill (equivalent to <code>1</code>).
* <code>id</code> – <code>"Internal Name"</code> of the skill (optional fallback / power use).


Lookup order:
Lookup order:


# If <code>id</code> is provided and matches an <code>"Internal Name"</code>, that record is used.
# If <code>name</code> or the first unnamed parameter is provided and matches a record’s <code>"Name"</code>, that record is used.
# Otherwise, if <code>name</code> is provided, the module scans all records for a matching <code>"Name"</code>.
# Otherwise, if <code>id</code> is provided and matches an <code>"Internal Name"</code>, that record is used.
# If nothing is found, a small error message is returned.
# If nothing is found, a small error message is returned and the page is categorized for tracking.


Example direct usage (not recommended; normally use a template):
Example direct usage (not recommended; normally use a template):


  {{#invoke:GameSkills|infobox|id=Bash}}
{{#invoke:GameSkills|infobox|name=Bash}}
 
or:
 
  {{#invoke:GameSkills|infobox|id=Bash_InternalId}}


----
----
Line 91: Line 111:
  Template:Skill
  Template:Skill


   {{#invoke:GameSkills|infobox|id={{{id|}}}|name={{{name|}}}}}
   {{#invoke:GameSkills|infobox
  | 1={{{1|}}}
  | name={{{name|}}}
  | id={{{id|}}}
  }}
 
Typical usage on any page:
 
{{Skill|Bash}}


Usage on any page:
or, explicitly:


  {{Skill|id=Dispell}}
  {{Skill|name=Bash}}


or, using the display name (slower):
Internal IDs can still be used when needed:


  {{Skill|name=Absolution}}
  {{Skill|id=Bash_InternalId}}


This keeps page wikitext simple while centralizing all JSON loading and formatting logic inside Lua.
This keeps page wikitext simple while centralizing all JSON loading and formatting logic inside Lua.

Latest revision as of 19:51, 12 December 2025

Module:GameSkills

edit source

Module:GameSkills renders skill data from Data:skills.json into a reusable infobox-style table.

It is intended to be used via a template (for example Template:Skill) so that skills can be embedded on any page without creating individual skill pages.

This module:

  • Loads data via Module:GameDataGameData.loadSkills().
  • Looks up skills primarily by display "Name" (what editors use), with "Internal Name" as a fallback.
  • Builds a table with only the fields that actually exist for that skill.

Data source

edit source

Skill data comes from Data:skills.json, which is a JSON page with this top-level structure (see Module:GameData/doc for full details):

{
  "version": "SpiritVale-0.8.2",
  "schema_version": 1,
  "generated_at": "2025-12-12T17:24:05.807675+00:00",
  "records": [
    {
      "Name": "Some Skill",
      "Internal Name": "SomeSkillInternalId",
      "...": "other fields specific to skills"
    }
  ]
}

Each record is a single skill. Important keys:

  • "Name" – the display name (what players and editors will usually see and use).
  • "Internal Name" – the stable ID used internally and available as an optional parameter for power users and tooling.

For a given skill, the module renders a table with the CSS class spiritvale-skill-infobox.

Depending on what exists in the JSON record, the table may include:

  • Header row with skill name (and icon, if present).
  • Icon (from "Icon", as a file name like skill-example.webp).
  • Description.
  • Type information:
    • Damage Type
    • Element Type
    • Target Type
    • Cast Type
  • Max Level.
  • Users:
    • Classes
    • Summons
    • Monsters
    • Events
  • Requirements:
    • Required Skills (with required level)
    • Required Weapons
    • Required Stances
  • Mechanics:
    • Range
    • Cast Time / Cooldown / Duration
    • Mana Cost
  • Damage and scaling:
    • Main Damage (base and per-level, where present)
    • Scaling (stat-based contributions)
  • Status interactions:
    • Status Applications (status name, scope, basic duration/chance info)

Rows are only shown if the underlying field exists in the JSON for that skill.


Public interface

edit source

The module exposes a single entry point for templates:

GameSkills.infobox(frame)

edit source

This is usually called via #invoke from a template, not directly from pages.

It accepts the following parameters (either passed directly or via a wrapper template):

  • 1 – unnamed parameter; treated as the skill "Name".
  • name – explicit display "Name" of the skill (equivalent to 1).
  • id"Internal Name" of the skill (optional fallback / power use).

Lookup order:

  1. If name or the first unnamed parameter is provided and matches a record’s "Name", that record is used.
  2. Otherwise, if id is provided and matches an "Internal Name", that record is used.
  3. If nothing is found, a small error message is returned and the page is categorized for tracking.

Example direct usage (not recommended; normally use a template):

No skills found for: GameSkills/doc

or:

No skills found for: GameSkills/doc

Template:Skill

edit source

The recommended way to use this module is via a small wrapper template, for example:

Template:Skill
 No skills found for: GameSkills/doc

Typical usage on any page:

Bash
Delivers a crushing blow with a chance to stun the target.
Level Select
Level 10 / 10
Type
Melee
Element
Neutral
Target
Enemy
Cast Type
Target
ClassesWarrior, Weaver
MonstersAshrend, Goblin King
Required SkillsAxe Mastery (Lv.1)
Resource CostMP: 13
ComboType: Ready, Duration: 4s
Main Damage350% Attack
Scaling2% Attack Per Strength
FlagsSpecial: Self Centered
AppliesTarget – Stun (Duration: 3s, Chance: 30%)

or, explicitly:

Bash
Delivers a crushing blow with a chance to stun the target.
Level Select
Level 10 / 10
Type
Melee
Element
Neutral
Target
Enemy
Cast Type
Target
ClassesWarrior, Weaver
MonstersAshrend, Goblin King
Required SkillsAxe Mastery (Lv.1)
Resource CostMP: 13
ComboType: Ready, Duration: 4s
Main Damage350% Attack
Scaling2% Attack Per Strength
FlagsSpecial: Self Centered
AppliesTarget – Stun (Duration: 3s, Chance: 30%)

Internal IDs can still be used when needed:

Unknown Skill: Bash_InternalId

This keeps page wikitext simple while centralizing all JSON loading and formatting logic inside Lua.