Module:BuildingData
From Against the Storm Official Wiki
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 = BuildingData.normalizeName(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