Module:GameData/EvoCreo2
Appearance
This documentation is transcluded from Module:GameData/EvoCreo2/doc.
Contains raw game data for EvoCreo2.
CreoTableis split per Creo due to size limits.- Module:GameData/EvoCreo2/Learnsets.json needs to be manually created.
List of pages
- AbilityTable.json
- BehaviorTable.json
- BoonTable.json
- ConditionTable.json
- CreoElementIndex.json
- CreoTable/Acerth.json
- CreoTable/Aeraja.json
- CreoTable/Aerialanx.json
- CreoTable/Aerodon.json
- CreoTable/Aerosol.json
- CreoTable/Afroot.json
- CreoTable/Ahura.json
- CreoTable/Akhlut.json
- CreoTable/Alcerra.json
- CreoTable/Amorphure.json
- CreoTable/Andarouh.json
- CreoTable/Aphixel.json
- CreoTable/Aquasten.json
- CreoTable/Arbirouh.json
- CreoTable/Arcane v1.json
- CreoTable/Arcane v2.json
- CreoTable/Arcane v3.json
- CreoTable/Arcus.json
- CreoTable/Arkinar.json
- CreoTable/Armace.json
- CreoTable/Armaja.json
- CreoTable/Armammer.json
- CreoTable/Armbo.json
- CreoTable/Armbroad.json
- CreoTable/Armight.json
- CreoTable/Armlades.json
- CreoTable/Armonia.json
- CreoTable/Armspear.json
- CreoTable/Asha.json
- CreoTable/Ashuraz.json
- CreoTable/Asiman.json
- CreoTable/Aska.json
- CreoTable/Atmozone.json
- CreoTable/Babo.json
- CreoTable/Balloo.json
- CreoTable/Bananarama.json
- CreoTable/Barakel.json
- CreoTable/Basiby.json
- CreoTable/Batilbro.json
- CreoTable/Batilmatt.json
- CreoTable/Batilstar.json
- CreoTable/Beezenithros.json
- CreoTable/Beseedle.json
- CreoTable/Bibo.json
- CreoTable/Billigote.json
- CreoTable/Blazephant.json
- CreoTable/Blick.json
- CreoTable/Blightallow.json
- CreoTable/Blix.json
- CreoTable/Blixdra.json
- CreoTable/Blixrouh.json
- CreoTable/Blizpin.json
- CreoTable/Branur.json
- CreoTable/Branveil.json
- CreoTable/Brasasol.json
- CreoTable/Brear.json
- CreoTable/Brunk.json
- CreoTable/Calix.json
- CreoTable/Canosol.json
- CreoTable/Carcharus.json
- CreoTable/Castorini.json
- CreoTable/Castorono.json
- CreoTable/Cavalisk.json
- CreoTable/Celesbo.json
- CreoTable/Cerminous.json
- CreoTable/Cervantes.json
- CreoTable/Cervucean.json
- CreoTable/Charbo.json
- CreoTable/Cherry Bomb.json
- CreoTable/Cheshatter.json
- CreoTable/Chilpin.json
- CreoTable/Chipi.json
- CreoTable/Chisataiga.json
- CreoTable/Chrysalis.json
- CreoTable/Cinderphant.json
- CreoTable/Cloufi.json
- CreoTable/Confal.json
- CreoTable/Conleon.json
- CreoTable/Coola.json
- CreoTable/Cordrake.json
- CreoTable/Crystsol.json
- CreoTable/Dabosa.json
- CreoTable/Dabun.json
- CreoTable/Dakutaiga.json
- CreoTable/Danairy.json
- CreoTable/Dandan.json
- CreoTable/Danixie.json
- CreoTable/Daryaro.json
- CreoTable/Daurouh.json
- CreoTable/Deor.json
- CreoTable/Detron.json
- CreoTable/Dodocan.json
- CreoTable/Donsa.json
- CreoTable/Doomba.json
- CreoTable/Doombaba.json
- CreoTable/Doterra.json
- CreoTable/Dracoad.json
- CreoTable/Dugbo.json
- CreoTable/Dykar.json
- CreoTable/Eedle.json
- CreoTable/Elacat.json
- CreoTable/Elatrike.json
- CreoTable/Emberphant.json
- CreoTable/Emperuin.json
- CreoTable/Enocpin.json
- CreoTable/Equaves.json
- CreoTable/Fermokang.json
- CreoTable/Ferredow.json
- CreoTable/Fettman.json
- CreoTable/Frata.json
- CreoTable/Fulgedeus.json
- CreoTable/Fulget.json
- CreoTable/Furen.json
- CreoTable/Furnis.json
- CreoTable/Furost.json
- CreoTable/Fylopin.json
- CreoTable/Fylotrad.json
- CreoTable/Fylovis.json
- CreoTable/Fyraby.json
- CreoTable/Fyroey.json
- CreoTable/Fyru.json
- CreoTable/Galuffra.json
- CreoTable/Geist.json
- CreoTable/Gensim.json
- CreoTable/Glaciadon.json
- CreoTable/Gravakang.json
- CreoTable/Gripony.json
- CreoTable/Grock.json
- CreoTable/Gulosol.json
- CreoTable/Gurbur.json
- CreoTable/Havrouh.json
- CreoTable/Hemishade.json
- CreoTable/Hemishield.json
- CreoTable/Heptapus.json
- CreoTable/Hielo.json
- CreoTable/Hippokrab.json
- CreoTable/Hydraja.json
- CreoTable/Hydrosol.json
- CreoTable/Ibanoth.json
- CreoTable/Ignisakhra.json
- CreoTable/Ignodo.json
- CreoTable/Illuvian.json
- CreoTable/Itsa.json
- CreoTable/Jamad.json
- CreoTable/Jamra.json
- CreoTable/Jumbadillo.json
- CreoTable/Jungodo.json
- CreoTable/Kahrus.json
- CreoTable/Kalumunk.json
- CreoTable/Kalurell.json
- CreoTable/Kaluroo.json
- CreoTable/Karazim.json
- CreoTable/Kentropod.json
- CreoTable/Kodock.json
- CreoTable/Konigsha.json
- CreoTable/Krabel.json
- CreoTable/Kralsha.json
- CreoTable/Lanset.json
- CreoTable/Lansor.json
- CreoTable/Layhura.json
- CreoTable/Leafdra.json
- CreoTable/Lesser Nebu.json
- CreoTable/Lesser Ultimus.json
- CreoTable/Lobonk.json
- CreoTable/Luftarouh.json
- CreoTable/Luftdra.json
- CreoTable/Luftibo.json
- CreoTable/Lumdra.json
- CreoTable/Lumigon.json
- CreoTable/Lumihound.json
- CreoTable/Lumineam.json
- CreoTable/Lupinous.json
- CreoTable/Luxpup.json
- CreoTable/Luxshade.json
- CreoTable/Macrochip.json
- CreoTable/Madirekat.json
- CreoTable/Maginsa.json
- CreoTable/Malisha.json
- CreoTable/Mattinur.json
- CreoTable/Medicoomb.json
- CreoTable/Metacoon.json
- CreoTable/Mizan.json
- CreoTable/Monkopod.json
- CreoTable/Mookus.json
- CreoTable/Morblint.json
- CreoTable/Motcee.json
- CreoTable/Mourvine.json
- CreoTable/Mudra.json
- CreoTable/Mulbegon.json
- CreoTable/Musant.json
- CreoTable/Musgord.json
- CreoTable/Muthi.json
- CreoTable/Muthlysis.json
- CreoTable/Nabat.json
- CreoTable/Nabby.json
- CreoTable/Naja.json
- CreoTable/Naltair.json
- CreoTable/Naramoss.json
- CreoTable/Naudam.json
- CreoTable/Naviterra.json
- CreoTable/Nebu.json
- CreoTable/Nimbegon.json
- CreoTable/Nocteir.json
- CreoTable/Nocterra.json
- CreoTable/Noori.json
- CreoTable/Noorouh.json
- CreoTable/Nosaro.json
- CreoTable/Nuldon.json
- CreoTable/Nuldra.json
- CreoTable/Nulifer.json
- CreoTable/Nurisol.json
- CreoTable/Obsius.json
- CreoTable/Ongadra.json
- CreoTable/Orkandra.json
- CreoTable/Otari.json
- CreoTable/Otarimo.json
- CreoTable/Peblisaur.json
- CreoTable/Pepita.json
- CreoTable/Pepon.json
- CreoTable/Peptein.json
- CreoTable/Pluffin.json
- CreoTable/Polt.json
- CreoTable/Polycryst.json
- CreoTable/Popono.json
- CreoTable/Puffsnoot.json
- CreoTable/Pugbur.json
- CreoTable/Pyre.json
- CreoTable/Pyrus.json
- CreoTable/Qutunare.json
- CreoTable/Qutuny.json
- CreoTable/Radcano.json
- CreoTable/Radow.json
- CreoTable/Radrun.json
- CreoTable/Raitotaiga.json
- CreoTable/Ralman.json
- CreoTable/Rangifair.json
- CreoTable/Ravian.json
- CreoTable/Rebas.json
- CreoTable/Rebtrix.json
- CreoTable/Reefdrake.json
- CreoTable/Regodon.json
- CreoTable/Rivestegon.json
- CreoTable/Robi.json
- CreoTable/Robiole.json
- CreoTable/Rolo.json
- CreoTable/Rudaro.json
- CreoTable/Rukhal.json
- CreoTable/Rusarth.json
- CreoTable/Saldo.json
- CreoTable/Samurak.json
- CreoTable/Sariqo.json
- CreoTable/Scarasect.json
- CreoTable/Schoolish.json
- CreoTable/Scion.json
- CreoTable/Seabo.json
- CreoTable/Seacean.json
- CreoTable/Seadrake.json
- CreoTable/Seaviper.json
- CreoTable/Seedle.json
- CreoTable/Seffapede.json
- CreoTable/Seglar.json
- CreoTable/Sehterra.json
- CreoTable/Seismosaur.json
- CreoTable/Shadiair.json
- CreoTable/Shadigon.json
- CreoTable/Shnappy.json
- CreoTable/Shoalish.json
- CreoTable/Shog.json
- CreoTable/Shomal.json
- CreoTable/Shomalark.json
- CreoTable/Shomalight.json
- CreoTable/Signette.json
- CreoTable/Signini.json
- CreoTable/Signus.json
- CreoTable/Simstar.json
- CreoTable/Singlish.json
- CreoTable/Skalanka.json
- CreoTable/Skalorn.json
- CreoTable/Skalunne.json
- CreoTable/Skarn.json
- CreoTable/Skethera.json
- CreoTable/Skuffin.json
- CreoTable/Slobadon.json
- CreoTable/Slomi.json
- CreoTable/Sloog.json
- CreoTable/Snowkite.json
- CreoTable/Solarm.json
- CreoTable/Solate.json
- CreoTable/Solaxadae.json
- CreoTable/Soldon.json
- CreoTable/Soleat.json
- CreoTable/Solrouh.json
- CreoTable/Sprimour.json
- CreoTable/Squallia.json
- CreoTable/Squirian.json
- CreoTable/Stegopod.json
- CreoTable/Stenrouh.json
- CreoTable/Stornur.json
- CreoTable/Sufadillo.json
- CreoTable/Swarteau.json
- CreoTable/Tenefoly.json
- CreoTable/Terg.json
- CreoTable/Terrano.json
- CreoTable/Terrasaur.json
- CreoTable/Terrasect.json
- CreoTable/Thunderant.json
- CreoTable/Tiffadillo.json
- CreoTable/Tirashal.json
- CreoTable/Toggy.json
- CreoTable/Toxifoly.json
- CreoTable/Triopus.json
- CreoTable/Tronsol.json
- CreoTable/Truegato.json
- CreoTable/Tsunani.json
- CreoTable/Tsunapi.json
- CreoTable/Tykscal.json
- CreoTable/Ultimus.json
- CreoTable/Ume.json
- CreoTable/Valnot.json
- CreoTable/Valroot.json
- CreoTable/Valtree.json
- CreoTable/Vargtron.json
- CreoTable/Vicer.json
- CreoTable/Vodisol.json
- CreoTable/Volcadon.json
- CreoTable/Vortibo.json
- CreoTable/Vulcano.json
- CreoTable/Vulkan.json
- CreoTable/Vulpesol.json
- CreoTable/Vulpoid.json
- CreoTable/Willodon.json
- CreoTable/Xeri.json
- CreoTable/Xermonious.json
- CreoTable/Xerumo.json
- CreoTable/Yeterra.json
- CreoTable/Yuike.json
- CreoTable/Yuisafe.json
- CreoTable/Yuiven.json
- CreoTable/Zapbo.json
- CreoTypeTable.json
require( 'strict' )
local checkType = require( 'libraryUtil' ).checkType
local p = {}
--- Decode an Apiunto response body into the EvoCreo 2 creoTable array.
--- Pure (no network) so it is unit-testable with fixtures. Returns the
--- creoTable array, or nil when the body is nil/empty, the Apiunto error
--- sentinel, not valid JSON, or missing a `creoTable` array.
---
--- @param body string|nil
--- @return table|nil
function p.decodeCreoTable( body )
if type( body ) ~= 'string' or body == '' then
return nil
end
local ok, data = pcall( mw.text.jsonDecode, body )
if ok and type( data ) == 'table' and type( data.creoTable ) == 'table' then
return data.creoTable
end
return nil
end
--- Find a Creo by name within a creoTable array. Pure.
---
--- @param list table|nil
--- @param name string
--- @return table|nil
function p.findCreo( list, name )
if list == nil then
return nil
end
for _, creo in ipairs( list ) do
if creo.name == name then
return creo
end
end
return nil
end
--[==[ DISABLED: live API-backed creoTable fetch.
Decoding the full getGameData payload (~5.2 MB) per render (~29 MB Lua) exceeds
Scribunto's memory limit on full Creo article renders (the infobox renders, but
the per-section components error with "not enough memory"). Kept for future
reuse alongside the pure decodeCreoTable/findCreo above. To re-enable: uncomment
this block and change getCreo to `return p.findCreo( fetchCreoTable(), name )`.
See docs/superpowers/specs/2026-05-30-creo-api-data-design.md.
--- Cached creoTable array (nil until a successful fetch).
local creoTable
--- Whether a fetch has been attempted this render (success or failure).
local creoTableFetched = false
--- Fetch and decode the full creoTable from the ilmfinity API via Apiunto.
--- @return table|nil
local function fetchCreoTable()
if creoTableFetched then
return creoTable
end
creoTableFetched = true
creoTable = p.decodeCreoTable( mw.ext.Apiunto.fetch( 'evocreo2', 'getGameData' ) )
return creoTable
end
]==]
--- Get a Creo by name
---
--- Loads the per-Creo data from the static CreoTable JSON pages, regenerated
--- from the ilmfinity API (getGameData) by scripts/sync_creo_table.py.
---
--- @param name string
--- @return table|nil
function p.getCreo( name )
checkType( 'EvoCreo2.getCreo', 1, name, 'string' )
return mw.loadJsonData( 'Module:GameData/EvoCreo2/CreoTable/' .. name .. '.json' )
end
--- Get the Creo evolution index
---
--- Maps every Creo that evolves to its evolutions, each carrying the condition
--- that triggers it (`level`, or `element` for an affinity evolution). Only
--- that direction is stored, because the reverse is a single pass over the same
--- table and carrying a parent for all 339 Creo would be most of the page.
---
--- Regenerated from the export by .claude/tools/evolutions.py.
---
--- @return table
function p.getEvolutionIndex()
return mw.loadJsonData( 'Module:GameData/EvoCreo2/EvolutionIndex.json' )
end
--- Get a Move by name
---
--- @param name string
--- @return table|nil
function p.getMove( name )
checkType( 'EvoCreo2.getMove', 1, name, 'string' )
local moves = mw.loadJsonData( 'Module:GameData/EvoCreo2/MoveTable.json' )
for _, move in ipairs( moves ) do
if move.name == name then
return move
end
end
end
--- Get a Learnset by move name
---
--- @param name string
--- @return table|nil
function p.getLearnset( name )
checkType( 'EvoCreo2.getLearnset', 1, name, 'string' )
local learnsets = mw.loadJsonData( 'Module:GameData/EvoCreo2/Learnsets.json' )
for _, learnset in ipairs( learnsets ) do
if learnset.name == name then
return learnset
end
end
end
--- Get an Item by name
---
--- @param name string
--- @return table|nil
function p.getItem( name )
checkType( 'EvoCreo2.getItem', 1, name, 'string' )
local items = mw.loadJsonData( 'Module:GameData/EvoCreo2/ItemTable.json' )
for _, item in ipairs( items ) do
if item.name == name then
return item
end
end
end
--- Get an Item by id
---
--- @param id number
--- @return table|nil
function p.getItemById( id )
checkType( 'EvoCreo2.getItemById', 1, id, 'number' )
local items = mw.loadJsonData( 'Module:GameData/EvoCreo2/ItemTable.json' )
for _, item in ipairs( items ) do
if item.id == id then
return item
end
end
end
--- Get an Ability by name
---
--- @param name string
--- @return table|nil
function p.getAbility( name )
checkType( 'EvoCreo2.getAbility', 1, name, 'string' )
local abilities = mw.loadJsonData( 'Module:GameData/EvoCreo2/AbilityTable.json' )
for _, ability in ipairs( abilities ) do
if ability.name == name then
return ability
end
end
end
--- Get a Trait by name
---
--- @param name string
--- @return table|nil
function p.getTrait( name )
checkType( 'EvoCreo2.getTrait', 1, name, 'string' )
local traits = mw.loadJsonData( 'Module:GameData/EvoCreo2/TraitTable.json' )
for _, trait in ipairs( traits ) do
if trait.name == name then
return trait
end
end
end
--- Get a Rarity by id
---
--- @param rarityId number
--- @return table|nil
function p.getRarityById( rarityId )
checkType( 'EvoCreo2.getRarityById', 1, rarityId, 'number' )
local rarities = mw.loadJsonData( 'Module:GameData/EvoCreo2/RarityTable.json' )
for _, rarity in ipairs( rarities ) do
if rarity.id == rarityId then
return rarity
end
end
end
--- Get a Creo Type by name
---
--- @param name string
--- @return table|nil
function p.getCreoType( name )
checkType( 'EvoCreo2.getCreoType', 1, name, 'string' )
local creoTypes = mw.loadJsonData( 'Module:GameData/EvoCreo2/CreoTypeTable.json' )
for _, creoType in ipairs( creoTypes ) do
if creoType.name == name then
return creoType
end
end
end
return p