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

Revision as of 19:05, 12 December 2025 by Eviand (talk | contribs) (Created page with "{{Documentation}} == Module:GameData == '''Module:GameData''' is the central JSON loader for SpiritVale’s game data. It reads four JSON pages: * Data:skills.json * Data:passives.json * Data:summons.json * Data:effects.json and turns each one into a Lua dataset that other modules (like Module:GameSkills, Module:GamePassives, Module:GameSummons, and Module:GameEffects) can use. This module is **not** meant to be called directly from...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

This is the documentation page for Module:GameData

Template:Documentation

Module:GameData

Module:GameData is the central JSON loader for SpiritVale’s game data.

It reads four JSON pages:

and turns each one into a Lua dataset that other modules (like Module:GameSkills, Module:GamePassives, Module:GameSummons, and Module:GameEffects) can use.

This module is **not** meant to be called directly from templates with #invoke. Instead, other Lua modules should require it and use the load* helper functions described below.


JSON format

Each JSON page is expected to have the following top-level structure:

<syntaxhighlight lang="json"> {

 "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 this type"
   },
   {
     "Name": "Another Skill",
     "Internal Name": "AnotherSkill",
     "...": "more data"
   }
 ]

} </syntaxhighlight>

Key points:

  • version – game / patch version string.
  • schema_version – version number for the JSON schema.
  • generated_at – timestamp when the file was generated by the external tool.
  • records – array of objects (skills, passives, summons, effects, etc.).
  • Each record must have an "Internal Name" field, used as the stable ID.

The exact fields inside each record depend on the data type and are handled by the type-specific modules (GameSkills, GamePassives, GameSummons, GameEffects).


Return value

Every load* function returns the same dataset structure:

<syntaxhighlight lang="lua"> local dataset = {

 meta    = {
   version        = "SpiritVale-0.8.2",
   schema_version = 1,
   generated_at   = "2025-12-12T17:24:05.807675+00:00",
 },
 records = { ... },  -- array of all records from the JSON
 byId    = {         -- lookup table by "Internal Name"
   ["SomeSkillInternalId"] = { ...record... },
   ["AnotherSkill"]        = { ...record... },
   -- etc.
 },

} </syntaxhighlight>

This makes it easy to either:

  • Iterate over all records via dataset.records, or
  • Grab a single record by its internal ID via dataset.byId["Internal Name"].

Public functions

loadSkills()

Reads Data:skills.json and returns a dataset for all active skills.

<syntaxhighlight lang="lua"> local GameData = require("Module:GameData") local skills = GameData.loadSkills()

-- Access metadata local meta = skills.meta

-- Iterate all skills for _, skill in ipairs(skills.records) do

   -- do something

end

-- Lookup by Internal Name local bash = skills.byId["Bash"] </syntaxhighlight>

loadPassives()

Reads Data:passives.json and returns a dataset for all passive skills.

<syntaxhighlight lang="lua"> local GameData = require("Module:GameData") local passives = GameData.loadPassives() </syntaxhighlight>

loadSummons()

Reads Data:summons.json and returns a dataset for all summons.

<syntaxhighlight lang="lua"> local GameData = require("Module:GameData") local summons = GameData.loadSummons() </syntaxhighlight>

loadEffects()

Reads Data:effects.json and returns a dataset for all status effects / effects.

<syntaxhighlight lang="lua"> local GameData = require("Module:GameData") local effects = GameData.loadEffects() </syntaxhighlight>


Usage pattern

Other modules should:

  1. require("Module:GameData").
  2. Call the appropriate load* function.
  3. Use .byId for fast lookups by internal ID.
  4. Use .records when they need to iterate over all entries.

Example (skills):

<syntaxhighlight lang="lua"> local GameData = require("Module:GameData")

local p = {}

function p.infobox(frame)

   local id = frame.args.id
   local skills = GameData.loadSkills()
   local rec = skills.byId[id]
   -- build and return HTML using 'rec'

end

return p </syntaxhighlight>

This keeps all JSON loading and parsing logic in one place, and makes it easy to update the data files each patch without changing the Lua code.