Module:BuildingData: Difference between revisions
From Against the Storm Official Wiki
extracted normalize methods to new Utility module |
m changed function scope |
||
| Line 191: | Line 191: | ||
-- normalize input | -- normalize input | ||
local strArg = | local strArg = Utility.normalizeBuildingName(strArg) | ||
-- Get it from the big table below and return it. | -- Get it from the big table below and return it. | ||
Revision as of 18:11, 12 February 2023
Documentation for this module may be created at Module:BuildingData/doc
-------------------------------------------------------------------------------
-- This module primarily supplies data and lookup functions for other modules
-- that support templates like {{Building_link}}.
-- https://hoodedhorse.com/wiki/Against_the_Storm/Template:Building_link
--
-- The main data table stores all available data about buildings themselves
-- and relies on other modules to store relationships between buildings and
-- products, services, etc.
--
-- The helper functions include getters (to keep the data hidden) and a large
-- deconfliction method to provide some robustness when using the template
-- and from other Lua modules. Looking up a building requires using in-game
-- names, but forgives small differences in spacing, apostrophes, and plurals.
-- Please help keep this table updated as the game is updated.
-- @module BuildingData
local BuildingData = {}
--
-- Dependencies
--
RecipeData = RecipeData or require("Module:RecipeData") -- used to get recipe data
Utility = Utility or require("Module:Utility") -- need normalize functions
--
-- Constants
--
-- Specializations
local S_ALCH = "Alchemy"
local S_BREW = "Brewing"
local S_CLOT = "Cloth"
local S_ENGI = "Engineering"
local S_MEAT = "Meat production"
local S_WARM = "Warmth"
local S_WOOD = "Wood"
-- Resource names of building costs
local C_BRICK = "Bricks"
local C_FABRI = "Fabric"
local C_PARTS = "Parts"
local C_PIPES = "Pipes"
local C_PLANK = "Planks"
-- Rain types for rain engines
local R_DRIZZ = "Drizzle Water"
local R_CLEAR = "Clearance Water"
local R_STORM = "Storm Water"
--
-- Class Variables
--
-------------------------------------------------------------------------------
-- Primary data table for this module.
--
-- This table stores the details of buildings according to in-game information.
-- A design decision of this table is to make the key the same as the page
-- name, so that whenever .page is referenced, it can be used again to retrieve
-- the rest of the data. (The lookup method will handle converting it to
-- lowercase.)
-- Structure:
-- @key a lowercase version of the building name, with the same spaces,
-- apostrophes, singular, and spelling
-- @field iconfile a string of the filename.png of the icon used in the
-- game, case-sensitive and must include extension, but without the "File:"
-- @field page the name of the wiki page, case-sensitive, but otherwise
-- must be the same as the key
-- @field spec1[opt] the first specialization listed in the in-game
-- encyclopedia (use the constants, above), if any
-- @field spec2[opt] the second specialization listed in the in-game
-- encyclopedia (use the constants, above), if any
-- @field cost1 the first listed resource cost in the in-game encyclopedia
-- (use constants, above)
-- @field cost2 the second listed resource cost in the in-game encyclopedia
-- (use constants, above), if any
-- @field cost3 the third listed resource cost in the in-game encyclopedia
-- (use constants, above), if any
-- @field workers the number of worker slots
-- @field raintype the color of rain used in the Rain Engine of this building
-- (use constants, above), if any
-- @field description the in-game description text, in plain text
-- @table tBuildingData the primary data table for buildings
local tBuildingData = {
-- Starting Buildings
["ancient hearth"] = {iconfile="Small Hearth icon.png", page="Ancient Hearth", spec1=S_WARM, workers=1, description="The heart of the colony is protected by the Holy Flame. {{Villagers}} gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope. Can't be moved. Size: 4x4."},
["main warehouse"] = {iconfile="Main_Storage_icon.png", page="Main Warehouse"},
-- Camps
["foragers' camp"] = {iconfile="Forager's Camp icon", page="Foragers' Camp"},
["harvesters' camp"] = {iconfile="Harvester Camp icon.png", page="Harvesters' Camp"},
["herbalists' camp"] = {iconfile="Herbalist's_Camp_icon.png", page="Herbalists' Camp"},
["stonecutters' camp"] = {iconfile="Stonecutter's Camp icon.png", page="Stonecutters' Camp"},
["trappers' camp"] = {iconfile="Trapper's Camp icon.png", page="Trappers' Camp"},
["woodcutters' camp"] = {iconfile="Woodcutters Camp icon", page="Woodcutters' Camp"},
-- Farms
["farm field"] = {iconfile="Farmfield_icon.png", page="Farm Field"},
["greenhouse"] = {iconfile="Greenhouse_icon.png", page="Greenhouse"},
["herb garden"] = {iconfile="HerbGarden_icon.png", page="Herb Garden"},
["plantation"] = {iconfile="Plantation_icon.png", page="Plantation"},
["small farm"] = {iconfile="SmallFarm_icon.png", page="Small Farm"},
-- Food production
["bakery"] = {iconfile="Bakery_icon.png", page="Bakery"},
["butcher"] = {iconfile="Butcher_icon.png", page="Butcher"},
["cellar"] = {iconfile="Cellar_icon.png", page="Cellar"},
["cookhouse"] = {iconfile="Cookhouse_icon.png", page="Cookhouse"},
["field kitchen"] = {iconfile="Field_Kitchen_icon.png", page="Field Kitchen"},
["granary"] = {iconfile="Granary_icon.png", page="Granary"},
["grill"] = {iconfile="Grill_icon.png", page="Grill"},
["ranch"] = {iconfile="Ranch_icon.png", page="Ranch"},
["smokehouse"] = {iconfile="Smokehouse_icon.png", page="Smokehouse"},
-- Housing
["shelter"] = {iconfile="Shelter icon.png", page="Shelter"},
["big shelter"] = {iconfile="Big Shelter icon.png", page="Big Shelter"},
["human house"] = {iconfile="Human House icon.png", page="Human House"},
["beaver house"] = {iconfile="Beaver House icon.png", page="Beaver House"},
["lizard house"] = {iconfile="Lizard House icon.png", page="Lizard House"},
["harpy house"] = {iconfile="Harpy House icon.png", page="Harpy House"},
-- Industry
["crude workstation"] = {iconfile="Crude_Workstation_icon.png", page="Crude Workstation"},
["makeshift post"] = {iconfile="Makeshift_Post_icon.png", page="Makeshift Post"},
["advanced rain collector"] = {iconfile="Advanced_Rain_Collector_icon.png", page="Advanced Rain Collector", spec1=S_ENGI, spec2=S_ALCH, cost1=C_PIPES, cost2=C_PARTS, cost3=C_PLANK, description="Can collect [[infused rainwater]] used for crafting and powering [[Rain Engines]] in production buildings. The type of collected rainwater depends on the [[season]]. Can't be moved. Size: 3x2."},
["alchemist's hut"] = {iconfile="Alchemist_Hut_icon.png", page="Alchemist's Hut", spec1=S_ALCH, spec2=S_BREW, cost1=C_PLANK, cost2=C_BRICK, workers=2, recipe1="Crystalized Dew", grade1=2, recipe2="Cosmetics", grade2=2, recipe3="Wine", grade3=2, description="Can produce: {{rl|Crystalized Dew}} {{P2Star}}, {{rl|Cosmetics}} {{P2star}}, {{rl|Wine}} {{P2Star}}. Can use: {{rl|Clearance Water}}. Can't be moved. Size: 3x2."},
["apothecary"] = {iconfile="Apothecary_icon.png", page="Apothecary", spec1=S_ALCH, cost1=C_PLANK, cost2=C_BRICK, workers=2, recipe1="Cosmetics", grade1=2, recipe2="Incense", grade2=2, recipe3="Biscuits", grade3=2, description="Can produce: {{rl|Cosmetics}} {{P2Star}}, {{rl|Incense}} {{P2Star}}, {{rl|Biscuits}} {{P2Star}}. Can use: {{rl|Clearance Water}}. Can't be moved. Size: 3x3."},
["artisan"] = {iconfile="Artisan_icon.png", page="Artisan"},
["brewery"] = {iconfile="Brewery_icon.png", page="Brewery"},
["brick oven"] = {iconfile="Brick_Oven_icon.png", page="Brick Oven"},
["brickyard"] = {iconfile="Brickyard_icon.png", page="Brickyard"},
["carpenter"] = {iconfile="Carpenter_icon.png", page="Carpenter"},
["clothier"] = {iconfile="Clothier_icon.png", page="Clothier"},
["cooperage"] = {iconfile="Cooperage_icon.png", page="Cooperage"},
["druid's hut"] = {iconfile="Druid_icon.png", page="Druid's Hut"},
["flawless brewery"] = {iconfile="Brewery_icon.png", page="Flawless Brewery"},
["flawless rain mill"] = {iconfile="Rain_Mill_icon.png", page="Flawless Rain Mill"},
["furnace"] = {iconfile="Furnace_icon.png", page="Furnace"},
["kiln"] = {iconfile="Kiln_icon.png", page="Kiln"},
["leatherworker"] = {iconfile="Leatherworks_icon.png", page="Leatherworker"},
["lumber mill"] = {iconfile="Lumbermill_icon.png", page="Lumber Mill"},
["mine"] = {iconfile="Mine_icon.png", page="Mine"},
["press"] = {iconfile="Press_icon.png", page="Press"},
["provisioner"] = {iconfile="Provisioner_icon.png", page="Provisioner"},
["rain collector"] = {iconfile="Rain_Collector_icon.png", page="Rain Collector"},
["rain mill"] = {iconfile="Rain_Mill_icon.png", page="Rain Mill"},
["scribe"] = {iconfile="Scribe_icon.png", page="Scribe"},
["smelter"] = {iconfile="Smelter_icon.png", page="Smelter"},
["toolshop"] = {iconfile="Toolshop_icon.png", page="Toolshop"},
["weaver"] = {iconfile="Weaver_icon.png", page="Weaver"},
-- City Buildings
["archaeologist's office"] = {iconfile="Archeologist_office_icon.png", page="Archaeologist's Office", cost1=C_PLANK, cost2=C_BRICK, cost3=C_FABRI, description="A building designed to help you study the past. Can be [[upgrade]]d to locate [[archaeological discoveries]] or improve [[exploration]] capabilities. Can be moved for: 5 {{rl|Wood}}. Size: 3x3."},
["small hearth"] = {iconfile="Temporary_Hearth_icon.png", page="Small Hearth"},
["warehouse"] = {iconfile="Storage_icon.png", page="Warehouse"},
["trading post"] = {iconfile="Trading_Post_icon.png", page="Trading Post"},
["blight post"] = {iconfile="Blight_Post_icon.png", page="Blight Post"},
["hydrant"] = {iconfile="Hydrant_icon.png", page="Hydrant"},
["forsaken altar"] = {iconfile="Altar_icon.png", page="Forsaken Altar"},
-- Service Buildings
["bath house"] = {iconfile="Bath_House_icon.png", page="Bath House"},
["clan hall"] = {iconfile="Clan_Hall_icon.png", page="Clan Hall"},
["explorers' lodge"] = {iconfile="Explorers_Lodge_icon.png", page="Explorers' Lodge"},
["guild house"] = {iconfile="Guild_House_icon.png", page="Guild House"},
["monastery"] = {iconfile="Monastery_icon.png", page="Monastery"},
["tavern"] = {iconfile="Tavern_icon.png", page="Tavern"},
["temple"] = {iconfile="Temple_icon.png", page="Temple"},
}
-------------------------------------------------------------------------------
-- Main lookup function
-- Accepts the in-game name and returns the name of the page on the wiki
-- associated with that in-game item, resource, building, etc.
-------------------------------------------------------------------------------
-- returns the whole data table for the specified key
-- need to run normalize function first
function BuildingData.getData(strArg)
-- normalize input
local strArg = Utility.normalizeBuildingName(strArg)
-- Get it from the big table below and return it.
return tBuildingData[strArg]
end
-- simpler version if all that's needed is the iconfile.
-- error handling by the calling module is required.
function BuildingData.getIconFilename(strArg)
local data = getData(strArg)
-- if this particular data block doesn't have a iconfile, this will return nil
-- therefore, error handling will be necessary
return data.iconfile or nil
end
-- simpler version if all that's needed is the page name.
-- error handling by the calling module is required.
function BuildingData.getPagename(strArg)
local data = getData(strArg)
-- if this particular data block doesn't have a page name, this will return nil
-- therefore, error handling will be necessary
return data.page or nil
end
-- simpler version if all that's needed is the description.
-- error handling by the calling module is required.
function BuildingData.getDescription(strArg)
local data = getData(strArg)
-- if this particular data block doesn't have a description, this will return nil
-- therefore, error handling will be necessary
return data.description or nil
end
-- Return this class when required into another module.
return BuildingData


