Module:BuildingData: Difference between revisions

From Against the Storm Official Wiki
(added flawless brewery, flawless rain mill, and granary)
(added brick oven. added require for recipe data to simplify storage of connections into just one module)
Line 1: Line 1:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Lua storage table for looking up wiki pages, names, and resources
-- This module primarily supplies data and lookup functions for other modules
-- based on in-game names. All data is in English.
-- 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 table contains some deconfliction, but only for spaces, apostrophes, and
-- The helper functions include getters (to keep the data hidden) and a large
-- some singular/plural.
-- deconfliction method to provide some robustness when using the template
-- Use in-game names for things, and help keep this table updated as the game
-- and from other Lua modules. Looking up a building requires using in-game  
-- is updated.
-- names, but forgives small differences in spacing, apostrophes, and plurals.
--
 
-- Using the table requires a locally defined lookup function that performs
-- Please help keep this table updated as the game is updated.
-- a string.lower on the argument so that the lookup table can accept any case
-- @module BuildingData
-- and still function properly. Otherwise, we would need the table to define
local BuildingData = {}
-- both Berries = "Berries" and berries = "Berries" which would multiply our
 
-- work.
-------------------------------------------------------------------------------




-- for returning when REQUIRE'd by other Lua modules.
--
local BuildingData = {}
-- Class Variables
--
local RecipeData = require("Module:RecipeData") -- used to get recipe data






-------------------------------------------------------------------------------
--  
-- Constants
-- Constants
-------------------------------------------------------------------------------
--  
-- Specializations
local S_ALCH = "Alchemy"
local S_ALCH = "Alchemy"
local S_BREW = "Brewing"
local S_BREW = "Brewing"
Line 32: Line 38:
local S_WOOD = "Wood"
local S_WOOD = "Wood"


-- Resource names of building costs
local C_BRICK = "Bricks"
local C_BRICK = "Bricks"
local C_FABRI = "Fabric"
local C_FABRI = "Fabric"
Line 37: Line 44:
local C_PIPES = "Pipes"
local C_PIPES = "Pipes"
local C_PLANK = "Planks"
local C_PLANK = "Planks"
-- Rain types for rain engines
local R_DRIZZ = "Drizzle Water"
local R_CLEAR = "Clearance Water"
local R_STORM = "Storm Water"






-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Main data table, with string keys and string values.
-- Primary data table for this module.
-- Some of these are defined inline with string.lower to make the key easier
--  
-- to spell and read correctly.
-- 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
-- a design decision of this table is to make the key the same as the page name.
-- the rest of the data. (The lookup method will handle converting it to
-- (the lookup methods will automatically make it lowercase.)
-- lowercase.)
-- that way, whenever .page is referenced, it can be used again to retrieve
-- Structure:
-- the rest of the data.
-- @key a lowercase version of the building name, with the same spaces,
local tableStrStrData = {
-- 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 = {  
---------------------------------------
-- Buildings
-- iconfile: string: the filename.png of the icon used in the game, case-sensitive and must include extension. do not include "File:" prefix
-- page: string: the name of the wiki page, case-sensitive
-- spec1: constant: the first specialization listed in the in-game encyclopedia (use constants, above)
-- spec2: constant: the second specialization listed in the in-game encyclopedia (use constants, above)
-- cost1: constant: the name of the first listed resource cost in the in-game encyclopedia (use constants, above)
-- cost2: constant: the name of the second listed resource cost in the in-game encyclopedia (use constants, above)
-- cost3: constant: the name of the third listed resource cost in the in-game encyclopedia (use constants, above)
-- workers: integer: the number of worker slots
-- recipe1: string: the resource produced by the first recipe listed in the in-game encyclopedia
-- grade1: integer: the number of stars for recipe1 (0, 1, 2, or 3)
-- recipe2: string: if any, the resource produced by the second recipe listed in the in-game encyclopedia
-- grade2: integer: the number of stars for recipe2 (0, 1, 2, or 3)
-- recipe3: string: if any, the resource produced by the third recipe listed in the in-game encyclopedia
-- grade3: integer: the number of stars for recipe3 (0, 1, 2, or 3)
-- recipe4: string: if any, the resource produced by the fourth recipe listed in the in-game encyclopedia
-- grade4: integer: the number of stars for recipe4 (0, 1, 2, or 3)
-- description: string: the in-game description text. you may use wiki markup and templates
--              like {{2star}} or {{Planks}} or [[Villagers]] to get icons and links
---------------------------------------
-- Starting Buildings
-- 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."},
["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"},
["main warehouse"] = {iconfile="Main_Storage_icon.png", page="Main Warehouse"},
-- Camps
-- Camps
["foragers' camp"] = {iconfile="Forager's Camp icon", page="Foragers' Camp"},
["foragers' camp"] = {iconfile="Forager's Camp icon", page="Foragers' Camp"},
Line 83: Line 95:
["trappers' camp"] = {iconfile="Trapper's Camp icon.png", page="Trappers' Camp"},
["trappers' camp"] = {iconfile="Trapper's Camp icon.png", page="Trappers' Camp"},
["woodcutters' camp"] = {iconfile="Woodcutters Camp icon", page="Woodcutters' Camp"},
["woodcutters' camp"] = {iconfile="Woodcutters Camp icon", page="Woodcutters' Camp"},
-- Farms
-- Farms
["farm field"] = {iconfile="Farmfield_icon.png", page="Farm Field"},
["farm field"] = {iconfile="Farmfield_icon.png", page="Farm Field"},
Line 89: Line 102:
["plantation"] = {iconfile="Plantation_icon.png", page="Plantation"},
["plantation"] = {iconfile="Plantation_icon.png", page="Plantation"},
["small farm"] = {iconfile="SmallFarm_icon.png", page="Small Farm"},
["small farm"] = {iconfile="SmallFarm_icon.png", page="Small Farm"},
-- Food production
-- Food production
["bakery"] = {iconfile="Bakery_icon.png", page="Bakery"},
["bakery"] = {iconfile="Bakery_icon.png", page="Bakery"},
Line 99: Line 113:
["ranch"] = {iconfile="Ranch_icon.png", page="Ranch"},
["ranch"] = {iconfile="Ranch_icon.png", page="Ranch"},
["smokehouse"] = {iconfile="Smokehouse_icon.png", page="Smokehouse"},
["smokehouse"] = {iconfile="Smokehouse_icon.png", page="Smokehouse"},
-- Housing
-- Housing
["shelter"] = {iconfile="Shelter icon.png", page="Shelter"},
["shelter"] = {iconfile="Shelter icon.png", page="Shelter"},
Line 106: Line 121:
["lizard house"] = {iconfile="Lizard House icon.png", page="Lizard House"},
["lizard house"] = {iconfile="Lizard House icon.png", page="Lizard House"},
["harpy house"] = {iconfile="Harpy House icon.png", page="Harpy House"},
["harpy house"] = {iconfile="Harpy House icon.png", page="Harpy House"},
-- Industry
-- Industry
["crude workstation"] = {iconfile="Crude_Workstation_icon.png", page="Crude Workstation"},
["crude workstation"] = {iconfile="Crude_Workstation_icon.png", page="Crude Workstation"},
Line 114: Line 130:
["artisan"] = {iconfile="Artisan_icon.png", page="Artisan"},
["artisan"] = {iconfile="Artisan_icon.png", page="Artisan"},
["brewery"] = {iconfile="Brewery_icon.png", page="Brewery"},
["brewery"] = {iconfile="Brewery_icon.png", page="Brewery"},
["brick oven"] = {iconfile="Brick_Oven_icon.png", page="Brick Oven"},
["brickyard"] = {iconfile="Brickyard_icon.png", page="Brickyard"},
["brickyard"] = {iconfile="Brickyard_icon.png", page="Brickyard"},
["carpenter"] = {iconfile="Carpenter_icon.png", page="Carpenter"},
["carpenter"] = {iconfile="Carpenter_icon.png", page="Carpenter"},
Line 134: Line 151:
["toolshop"] = {iconfile="Toolshop_icon.png", page="Toolshop"},
["toolshop"] = {iconfile="Toolshop_icon.png", page="Toolshop"},
["weaver"] = {iconfile="Weaver_icon.png", page="Weaver"},
["weaver"] = {iconfile="Weaver_icon.png", page="Weaver"},
-- City Buildings
-- 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."},
["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."},
Line 142: Line 160:
["hydrant"] = {iconfile="Hydrant_icon.png", page="Hydrant"},
["hydrant"] = {iconfile="Hydrant_icon.png", page="Hydrant"},
["forsaken altar"] = {iconfile="Altar_icon.png", page="Forsaken Altar"},
["forsaken altar"] = {iconfile="Altar_icon.png", page="Forsaken Altar"},
-- Service Buildings
-- Service Buildings
["bath house"] = {iconfile="Bath_House_icon.png", page="Bath House"},
["bath house"] = {iconfile="Bath_House_icon.png", page="Bath House"},
Line 155: Line 174:


-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Main lookup functions
-- Main lookup function
-- Accepts the in-game name and returns the name of the page on the wiki
-- Accepts the in-game name and returns the name of the page on the wiki
-- associated with that in-game item, resource, building, etc.
-- associated with that in-game item, resource, building, etc.
Line 170: Line 189:
-- Get it from the big table below and return it.
-- Get it from the big table below and return it.
     return tableStrStrData[strArg]
     return tBuildingData[strArg]
end
end


Line 434: Line 453:
["brewers"] =  "brewery",
["brewers"] =  "brewery",
["breweries"] = "brewery",
["breweries"] = "brewery",
["brickoven"] = "brick oven",
["brickovens"] = "brick oven",
["brick ovens"] = "brick oven",
["brickyards"] = "brickyard",
["brickyards"] = "brickyard",
["brick yard"] = "brickyard",
["brick yard"] = "brickyard",
Line 581: Line 603:




-------------------------------------------------------------------------------
-- Return this class when required into another module.
-- Return when required into another Module.
-------------------------------------------------------------------------------
return BuildingData
return BuildingData

Revision as of 17:26, 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 = {}



--
-- Class Variables
--
local RecipeData = require("Module:RecipeData") -- used to get recipe data



-- 
-- 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"



-------------------------------------------------------------------------------
-- 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



-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------



-- Normalize the argument to the standard in-game name, and the one that 
-- is used as the key in the big lookup table.
--
-- This function will also make the argument lowercase to reduce the need
-- to specify more possible alternatives to normalize.
function BuildingData.normalizeName(strArg)
	
	strArg = string.lower(strArg)
	
	-- no other functions need this lookup table, so it's defined locally
	-- to this function
	local tableStrStrAlternatives = {
		
		---------------------------------------
		-- Buildings
		---------------------------------------
		-- Starting Buildings
		["ancienthearth"] =   "ancient hearth",
		["ancienthearths"] =  "ancient hearth",
		["ancient hearths"] = "ancient hearth",
		["mainwarehouse"] =   "main warehouse",
		["mainwarehouses"] =  "main warehouse",
		["main warehouses"] = "main warehouse",
		-- Camps
		["forager"] =         "foragers' camp",
		["foragerscamp"] =    "foragers' camp",
		["forager'scamp"] =   "foragers' camp",
		["foragers'camp"] =   "foragers' camp",
		["forager camp"] =    "foragers' camp",
		["forager's camp"] =  "foragers' camp",
		["foragers"] =        "foragers' camp",
		["foragerscamps"] =   "foragers' camp",
		["forager'scamps"] =  "foragers' camp",
		["foragers'camps"] =  "foragers' camp",
		["forager camps"] =   "foragers' camp",
		["forager's camps"] = "foragers' camp",
		["harvester"] =         "harvesters' camp",
		["harvesterscamp"] =    "harvesters' camp",
		["harvester'scamp"] =   "harvesters' camp",
		["harvesters'camp"] =   "harvesters' camp",
		["harvester camp"] =    "harvesters' camp",
		["harvester's camp"] =  "harvesters' camp",
		["harvesters"] =        "harvesters' camp",
		["harvesterscamps"] =   "harvesters' camp",
		["harvester'scamps"] =  "harvesters' camp",
		["harvesters'camps"] =  "harvesters' camp",
		["harvester camps"] =   "harvesters' camp",
		["harvester's camps"] = "harvesters' camp",
		["herbalist"] =         "herbalists' camp",
		["herbalistscamp"] =    "herbalists' camp",
		["herbalist'scamp"] =   "herbalists' camp",
		["herbalists'camp"] =   "herbalists' camp",
		["herbalist camp"] =    "herbalists' camp",
		["herbalist's camp"] =  "herbalists' camp",
		["herbalists"] =        "herbalists' camp",
		["herbalistscamps"] =   "herbalists' camp",
		["herbalist'scamps"] =  "herbalists' camp",
		["herbalists'camps"] =  "herbalists' camp",
		["herbalist camps"] =   "herbalists' camp",
		["herbalist's camps"] = "herbalists' camp",
		["stonecutter"] =         "stonecutters' camp",
		["stonecutterscamp"] =    "stonecutters' camp",
		["stonecutter'scamp"] =   "stonecutters' camp",
		["stonecutters'camp"] =   "stonecutters' camp",
		["stonecutter camp"] =    "stonecutters' camp",
		["stonecutter's camp"] =  "stonecutters' camp",
		["stonecutters"] =        "stonecutters' camp",
		["stonecutterscamps"] =   "stonecutters' camp",
		["stonecutter'scamps"] =  "stonecutters' camp",
		["stonecutters'camps"] =  "stonecutters' camp",
		["stonecutter camps"] =   "stonecutters' camp",
		["stonecutter's camps"] = "stonecutters' camp",
		["trapper"] =         "trappers' camp",
		["trapperscamp"] =    "trappers' camp",
		["trapper'scamp"] =   "trappers' camp",
		["trappers'camp"] =   "trappers' camp",
		["trapper camp"] =    "trappers' camp",
		["trapper's camp"] =  "trappers' camp",
		["trappers"] =        "trappers' camp",
		["trapperscamps"] =   "trappers' camp",
		["trapper'scamps"] =  "trappers' camp",
		["trappers'camps"] =  "trappers' camp",
		["trapper camps"] =   "trappers' camp",
		["trapper's camps"] = "trappers' camp",
		["woodcutter"] =         "woodcutters' camp",
		["woodcutterscamp"] =    "woodcutters' camp",
		["woodcutter'scamp"] =   "woodcutters' camp",
		["woodcutters'camp"] =   "woodcutters' camp",
		["woodcutter camp"] =    "woodcutters' camp",
		["woodcutter's camp"] =  "woodcutters' camp",
		["woodcutters"] =        "woodcutters' camp",
		["woodcutterscamps"] =   "woodcutters' camp",
		["woodcutter'scamps"] =  "woodcutters' camp",
		["woodcutters'camps"] =  "woodcutters' camp",
		["woodcutter camps"] =   "woodcutters' camp",
		["woodcutter's camps"] = "woodcutters' camp",
		-- Farms
		["field"] =       "farm field",
		["fields"] =      "farm field",
		["farmfield"] =   "farm field",
		["farmfields"] =  "farm field",
		["farm fields"] = "farm field",
		["greenhouses"] = "greenhouse",
		["green house"] = "greenhouse",
		["green houses"] = "greenhouse",
		["herbgarden"] =   "herb garden",
		["herbgardens"] =  "herb garden",
		["herb gardens"] = "herb garden",
		["plantations"] = "plantation",
		["farm"] =        "small farm",
		["farms"] =       "small farm",
		["smallfarm"] =   "small farm",
		["smallfarms"] =  "small farm",
		["small farms"] = "small farm",
		-- Food Production
		["baker"] =    "bakery",
		["bakers"] =   "bakery",
		["bakeries"] = "bakery",
		["butchers"] = "butcher",
		["celler"] =  "cellar",
		["cellers"] = "cellar",
		["cellars"] = "cellar",
		["cookhouses"] =  "cookhouse",
		["cook house"] =  "cookhouse",
		["cook houses"] = "cookhouse",
		["fieldkitchen"] = "field kitchen",
		["fieldkitchens"] = "field kitchen",
		["field kitchens"] = "field kitchen",
		["granaries"] = "granary",
		["grills"] = "grill",
		["ranches"] = "ranch",
		["smokehouses"] =  "smokehouse",
		["smoke house"] =  "smokehouse",
		["smoke housea"] = "smokehouse",
		-- Housing
		["house"] =  "shelter",
		["houses"] = "shelter",
		["bighouse"] =    "big shelter",
		["bighouses"] =   "big shelter",
		["bigshelter"] =  "big shelter",
		["bigshelters"] = "big shelter",
		["humanhouse"] =     "human house",
		["humanhouses"] =    "human house",
		["human'shouse"] =   "human house",
		["humans'house"] =   "human house",
		["human houses"] =   "human house",
		["human's house"] =  "human house",
		["humans' house"] =  "human house",
		["human's houses"] = "human house",
		["humans' houses"] = "human house",
		["beaverhouse"] =     "beaver house",
		["beaverhouses"] =    "beaver house",
		["beaver'shouse"] =   "beaver house",
		["beavers'house"] =   "beaver house",
		["beaver'shouses"] =  "beaver house",
		["beavers'houses"] =  "beaver house",
		["beaver houses"] =   "beaver house",
		["beaver's houses"] = "beaver house",
		["beavers' houses"] = "beaver house",
		["lizardhouse"] =     "lizard house",
		["lizardhouses"] =    "lizard house",
		["lizard'shouse"] =   "lizard house",
		["lizards'house"] =   "lizard house",
		["lizard'shouses"] =  "lizard house",
		["lizards'houses"] =  "lizard house",
		["lizard houses"] =   "lizard house",
		["lizard's houses"] = "lizard house",
		["lizards' houses"] = "lizard house",
		["harpyhouse"] =      "harpy house",
		["harpyhouses"] =     "harpy house",
		["harpy'shouse"] =    "harpy house",
		["harpys'house"] =    "harpy house",
		["harpy'shouses"] =   "harpy house",
		["harpys'houses"] =   "harpy house",
		["harpy houses"] =    "harpy house",
		["harpy's houses"] =  "harpy house",
		["harpys' houses"] =  "harpy house",
		["harpieshouse"] =    "harpy house",
		["harpieshouses"] =   "harpy house",
		["harpies'house"] =   "harpy house",
		["harpies houses"] =  "harpy house",
		["harpies' houses"] = "harpy house",
		-- Industry
		["crudeworkstation"] = "crude workstation",
		["crudeworkstations"] = "crude workstation",
		["crude workstations"] = "crude workstation",
		["makeshiftpost"] = "makeshift post",
		["makeshiftposts"] = "makeshift post",
		["makeshift posts"] = "makeshift post",
		["advancedraincollector"] = "advanced rain collector",
		["advancedraincollectors"] = "advanced rain collector",
		["advanced rain collectors"] = "advanced rain collector",
		["alchemist"] =        "alchemist's hut",
		["alchemists"] =       "alchemist's hut",
		["alchemisthut"] =     "alchemist's hut",
		["alchemisthuts"] =    "alchemist's hut",
		["alchemistshut"] =    "alchemist's hut",
		["alchemistshuts"] =   "alchemist's hut",
		["alchemist'shut"] =   "alchemist's hut",
		["alchemist'shuts"] =  "alchemist's hut",
		["alchemists'hut"] =   "alchemist's hut",
		["alchemists'huts"] =  "alchemist's hut",
		["alchemist hut"] =    "alchemist's hut",
		["alchemist huts"] =   "alchemist's hut",
		["alchemists hut"] =   "alchemist's hut",
		["alchemists huts"] =  "alchemist's hut",
		["alchemists' hut"] =  "alchemist's hut",
		["alchemists' huts"] = "alchemist's hut",
		["apothacary"] = "apothecary",
		["apothecaries"] = "apothecary",
		["artisans"] = "artisan",
		["brewer"] =    "brewery",
		["brewers"] =   "brewery",
		["breweries"] = "brewery",
		["brickoven"] = "brick oven",
		["brickovens"] = "brick oven",
		["brick ovens"] = "brick oven",
		["brickyards"] = "brickyard",
		["brick yard"] = "brickyard",
		["brick yards"] = "brickyard",
		["carpenters"] = "carpenter",
		["clothiers"] = "clothier",
		["cooper"] =     "cooperage",
		["coopers"] =    "cooperage",
		["cooperages"] = "cooperage",
		["druid"] =        "druid's hut",
		["druids"] =       "druid's hut",
		["druidhut"] =     "druid's hut",
		["druidhuts"] =    "druid's hut",
		["druid'shut"] =   "druid's hut",
		["druid'shuts"] =  "druid's hut",
		["druids'hut"] =   "druid's hut",
		["druids'huts"] =  "druid's hut",
		["druid hut"] =    "druid's hut",
		["druid huts"] =   "druid's hut",
		["druids' hut"] =  "druid's hut",
		["druids' huts"] = "druid's hut",
		["druid's huts"] = "druid's hut",
		["flawlessbrewery"] = "flawless brewery",
		["flawlessbreweries"] = "flawless brewery",
		["flawless breweries"] = "flawless brewery",
		["flawlessrainmill"] = "flawless rain mill",
		["flawlessrainmills"] = "flawless rain mill",
		["flawless rainmill"] = "flawless rain mill",
		["flawless rainmills"] = "flawless rain mill",
		["flawless rain mills"] = "flawless rain mill",
		["furnaces"] = "furnace",
		["kilns"] = "kiln",
		["leatherworkers"] =  "leatherworker",
		["leather worker"] =  "leatherworker",
		["leather workers"] = "leatherworker",
		["lumbermill"] =   "lumber mill",
		["lumbermills"] =  "lumber mill",
		["lumber mills"] = "lumber mill",
		["mines"] = "mine",
		["presses"] = "press",
		["provisioners"] = "provisioner",
		["raincollector"] = "rain collector",
		["raincollectors"] = "rain collector",
		["rain collectors"] = "rain collector",
		["rainmill"] =   "rain mill",
		["rainmills"] =  "rain mill",
		["rain mills"] = "rain mill",
		["scribes"] = "scribe",
		["smelters"] =   "smelter",
		["smeltery"] =   "smelter",
		["smelteries"] = "smelter",
		["tool shop"] = "toolshop",
		["weavers"] = "weaver",
		-- City buildings
		["archaeologyoffice"] =      "archaeologist's office",
		["archeologyoffice"] =       "archaeologist's office",
		["archaeologistoffice"] =    "archaeologist's office",
		["archeologistoffice"] =     "archaeologist's office",
		["archaeologistsoffice"] =   "archaeologist's office",
		["archeologistsoffice"] =    "archaeologist's office",
		["archaeologist'soffice"] =  "archaeologist's office",
		["archeologist'soffice"] =   "archaeologist's office",
		["archeologists'office"] =   "archaeologist's office",
		["archaeology office"] =     "archaeologist's office",
		["archeology office"] =      "archaeologist's office",
		["archaeologist office"] =   "archaeologist's office",
		["archeologist office"] =    "archaeologist's office",
		["archaeologists office"] =  "archaeologist's office",
		["archeologists office"] =   "archaeologist's office",
		["archeologist's office"] =  "archaeologist's office",
		["archaeologists' office"] = "archaeologist's office",
		["archeologists' office"] =  "archaeologist's office",
		["smallhearth"] =   "small hearth",
		["smallhearths"] =  "small hearth",
		["small hearths"] = "small hearth",
		["warehouses"] =  "warehouse",
		["ware house"] =  "warehouse",
		["ware houses"] = "warehouse",
		["traderpost"] =   "trading post",
		["traderposts"] =  "trading post",
		["trader posts"] = "trading post",
		["tradingpost"] =   "trading post",
		["tradingposts"] =  "trading post",
		["trading posts"] = "trading post",
		["blightpost"] =   "blight post",
		["blightposts"] =  "blight post",
		["blight posts"] = "blight post",
		["hydrants"] = "hydrant",
		["forsakenaltar"] =    "forsaken altar",
		["forsakenalter"] =    "forsaken altar",
		["foresakenaltar"] =   "forsaken altar",
		["foresakenalter"] =   "forsaken altar",
		["forsakenaltars"] =   "forsaken altar",
		["forsakenalters"] =   "forsaken altar",
		["foresakenaltars"] =  "forsaken altar",
		["foresakenalters"] =  "forsaken altar",
		["forsaken altars"] =  "forsaken altar",
		["forsaken alters"] =  "forsaken altar",
		["foresaken altars"] = "forsaken altar",
		["foresaken alters"] = "forsaken altar",
		-- Service Buildings
		["bath"] =        "bath house",
		["baths"] =       "bath house",
		["bathhouse"] =   "bath house",
		["bathhouses"] =  "bath house",
		["bath houses"] = "bath house",
		["clan"] =       "clan hall",
		["clans"] =      "clan hall",
		["clanhall"] =   "clan hall",
		["clanhalls"] =  "clan hall",
		["clan halls"] = "clan hall",
		["explorer"] =          "explorers' lodge",
		["explorers"] =         "explorers' lodge",
		["explorerlodge"] =     "explorers' lodge",
		["explorerslodge"] =    "explorers' lodge",
		["explorerlodges"] =    "explorers' lodge",
		["explorerslodges"] =   "explorers' lodge",
		["explorers'lodges"] =  "explorers' lodge",
		["explorer'slodges"] =  "explorers' lodge",
		["explorer lodge"] =    "explorers' lodge",
		["explorers lodge"] =   "explorers' lodge",
		["explorer lodges"] =   "explorers' lodge",
		["explorers lodges"] =  "explorers' lodge",
		["explorer's lodges"] = "explorers' lodge",
		["guild"] =        "guild house",
		["guilds"] =       "guild house",
		["guildhouse"] =   "guild house",
		["guildhouses"] =  "guild house",
		["guild houses"] = "guild house",
		["monestary"] = "monastery",
		["monastary"] = "monastery",
		["monestery"] = "monastery",
		["monestaries"] = "monastery",
		["monastaries"] = "monastery",
		["monesteries"] = "monastery",
		["taverns"] = "tavern",
		["temples"] = "temple"
		
	} -- the end of the huge tableStrStrAlternatives
	
	-- if nothing is found, the result of the lookup will be nil, so 
	-- just return whatever was passed in as the argument (lowercase)
	-- we can assume that the input argument is fine or does not exist
	return tableStrStrAlternatives[strArg] or strArg
end



-- Return this class when required into another module.
return BuildingData