Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
MediaWiki help
Creopedia
Search
Search
Appearance
Log in
Personal tools
Log in
View source for Module:GameData/EvoCreo
Module
Discussion
English
Read
View source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
View source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
←
Module:GameData/EvoCreo
require( 'strict' ) local checkType = require( 'libraryUtil' ).checkType local p = {} --- Words that stay lowercase inside a page title unless they lead it, --- e.g. TOME_OF_THE_VOID -> 'Tome of the Void'. local smallWords = { ['a'] = true, ['an'] = true, ['and'] = true, ['at'] = true, ['by'] = true, ['for'] = true, ['in'] = true, ['of'] = true, ['on'] = true, ['the'] = true, ['to'] = true } --- Ids the display name does not spell out the same way. --- --- getId() upper snake cases a name, which assumes the name splits into the --- same words as the id. Breadcrumbs is one word as a name and two in the data, --- so it derives BREADCRUMBS and never matches the stored BREAD_CRUMBS. That --- mismatch is why Breadcrumbs was missing from Category:Items in EvoCreo: --- getItem() found nothing, so nothing categorised it. --- --- Keyed by what getId() derives, valued by what the data actually stores. local idAliases = { BREADCRUMBS = 'BREAD_CRUMBS' } --- Get the ID from a name --- --- @param name string --- @return string local function getId( name ) local id = name:upper():gsub( ' ', '_' ) -- Special handling for Arcane V1, V2, V3 id = id:gsub( 'ARCANE_V(%d)', 'ARCANE_v%1' ) return idAliases[id] or id end --- Get the name from an ID --- --- The inverse of getId(): the game data only stores upper snake case IDs, so --- rendering a link to a Move or Item article means rebuilding its title. --- Cross-checked against the English column of the EvoCreo 2 localization --- workbook, whose keys are the lower case form of these IDs. --- --- Words are split on underscores or whitespace, so this doubles as a --- normaliser: passing an already spelled out name back through it repairs --- casing (`Tome Of Electricity` -> `Tome of Electricity`) and returns --- correctly cased names unchanged. --- --- Note this is the subject's name, not necessarily its article title; where --- another subject owns the plain title, Module:Move.getArticle disambiguates. --- --- @param id string --- @return string function p.getName( id ) checkType( 'EvoCreo.getName', 1, id, 'string' ) local words = {} for word in id:lower():gmatch( '[^_%s]+' ) do if #words > 0 and smallWords[word] then table.insert( words, word ) else table.insert( words, word:sub( 1, 1 ):upper() .. word:sub( 2 ) ) end end return table.concat( words, ' ' ) end --- Get a Creo by name --- --- We split the CreoTable into individual files for each Creo --- so we can load them individually. --- --- @param name string --- @return table function p.getCreo( name ) checkType( 'EvoCreo.getCreo', 1, name, 'string' ) local creoData = mw.loadJsonData( 'Module:GameData/EvoCreo/CreoData.json' ) local id = getId( name ) for _, creo in ipairs( creoData ) do if creo.id == id then return creo end end end --- Get a Move by name --- --- @param name string --- @return table function p.getMove( name ) checkType( 'EvoCreo.getMove', 1, name, 'string' ) local moves = mw.loadJsonData( 'Module:GameData/EvoCreo/MoveData.json' ) local id = getId( name ) for _, move in ipairs( moves ) do if move.id == id then return move end end end --- Get a Learnset by move name --- --- @param name string --- @return table function p.getLearnset( name ) checkType( 'EvoCreo.getLearnset', 1, name, 'string' ) local learnsets = mw.loadJsonData( 'Module:GameData/EvoCreo/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 function p.getItem( name ) checkType( 'EvoCreo.getItem', 1, name, 'string' ) local items = mw.loadJsonData( 'Module:GameData/EvoCreo/ItemData.json' ) local id = getId( name ) 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( 'EvoCreo.getAbility', 1, name, 'string' ) local abilities = mw.loadJsonData( 'Module:GameData/EvoCreo/AbilityData.json' ) local id = getId( name ) for _, ability in ipairs( abilities ) do if ability.id == id then return ability end end end --- Get a Trait by name --- --- @param name string --- @return table|nil function p.getTrait( name ) checkType( 'EvoCreo.getTrait', 1, name, 'string' ) local traits = mw.loadJsonData( 'Module:GameData/EvoCreo/TraitData.json' ) local id = getId( name ) for _, trait in ipairs( traits ) do if trait.id == id then return trait end end end return p
Templates used on this page:
Template:Documentation
(
view source
)
Module:GameData/EvoCreo/doc
(
view source
)
Return to
Module:GameData/EvoCreo
.