Module:ResourceData: Difference between revisions

From Against the Storm Official Wiki
(added a few more getters, and improved commenting. adding more details to buildings as I have time)
(adding better getter methods, improving the commenting)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- This module primarily supplies data and lookup functions for other modules
-- Lua storage module for looking up data about resources, for use in other
-- that support templates like {{Building_link}}.
-- modules and templates, for example, {{Resource_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  
-- The main data table stores all available data about resources themselves and
-- products, services, etc.
-- relies on other modules to store relationships between resources and  
-- buildings, services, etc.
--
--
-- The helper functions include getters (to keep the data hidden) and a large
-- The helper functions include getters (to keep the data hidden) and a large
-- deconfliction method to provide some robustness when using the template
-- normalization method to provide some robustness when using the template and
-- and from other Lua modules. Looking up a building requires using in-game  
-- from other Lua modules. Looking up a resource requires using in-game names,
-- names, but forgives small differences in spacing, apostrophes, and plurals.
-- but forgives small differences in spacing, apostrophes, and plurals.
 
-- @module ResourceData
-- Please help keep this table updated as the game is updated.
local ResourceData = {}
-- @module BuildingData
local BuildingData = {}


--
--
-- Dependencies
-- Dependencies
--
--
RecipeData = RecipeData or require("Module:RecipeData") -- need recipe relationships
Utility = Utility or require("Module:Utility") -- need normalize functions
Utility = Utility or require("Module:Utility") -- need normalize functions






--  
--
-- Constants
-- Constants
--  
--
-- Specializations
-- top-level categories; the main tabs in the top of the game window
local S_ALCH = "Alchemy"
local CAT_FOODS = "Food"
local S_BREW = "Brewing"
local CAT_BUILD = "Building Materials"
local S_CLOT = "Cloth"
local CAT_CONSU = "Consumable Items"
local S_ENGI = "Engineering"
local CAT_CRAFT = "Crafting Resources"
local S_MEAT = "Meat production"
local CAT_TRADE = "Trade Goods"
local S_WARM = "Warmth"
local CAT_FUEXP = "Fuel & Exploration"
local S_WOOD = "Wood"
local CAT_RAINS = "Rainwater"
local CAT_BLIGH = "Blight Fuel"


-- Resource names of building costs
-- secondary categories, for use in wiki pages
local C_BRICK = "Bricks"
-- Foods
local C_FABRI = "Fabric"
local C2_RAWFOOD = "Raw Food"
local C_PARTS = "Parts"
local C2_COMPLEX = "Complex Food"
local C_PIPES = "Pipes"
-- Building Mats
local C_PLANK = "Planks"
local C2_CONSTRU = "Construction Material"
 
local C2_RAREMAT = "Rare Material"
-- Rain types for rain engines
-- Consumable Items
local R_DRIZZ = "Drizzle Water"
local C2_CLOTHIN = "Clothing"
local R_CLEAR = "Clearance Water"
local C2_SERVICE = "Service"
local R_STORM = "Storm Water"
-- Crafting Resources
local C2_RAWMATS = "Raw Material"
local C2_PROCESS = "Processed Material"
local C2_METALOR = "Metal"
local C2_VESSELS = "Vessel"
-- Trade Goods
local C2_VALUABL = "Valuable"
local C2_PACKSGO = "Pack of Good"
local C2_METARES = "Metaresource"
-- Fuel & Exploration
local C2_FUELSAC = "Fuel"
local C2_EXPTOOL = "Tool"
-- Rainwater and Blight Fuel
local C2_RAINWAT = "Rainwater"
local C2_PURGING = "Purging Fire"






--
--
-- Class Variables
-- Class variables
--
--


-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Primary data table for this module.
-- Primary data table for this module.
--
-- This table stories the details of resources 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.)
--
-- *defaults are stored here; these value will be modified during the game by
-- perks and city upgrades
--  
--  
-- This table stores the details of buildings according to in-game information.
-- Structure:  
-- A design decision of this table is to make the key the same as the page
-- @key a lowercase version of the resource name, with the same spaces,  
-- name, so that whenever .page is referenced, it can be used again to retrieve
-- apostrophes, singular/plural, and spelling
-- the rest of the data. (The lookup method will handle converting it to
-- @field page the name of the wiki page, case-sensitive, but otherwise must be the same as the key
-- 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,  
-- @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:"
-- case-sensitive and must include extension, but without the "File:"
-- @field page the name of the wiki page, case-sensitive, but otherwise must be
-- @field category a string representing the primary in-game category the  
-- the same as the key
-- resource belongs to, in the upper UI on the game screen; use the constants
-- @field specialization[opt] a table of the specializations listed in the
-- defined above
-- in-game encyclopedia (use the constants, above), or omit if none
-- @field cat2 a string representing a more specific category, often referenced
-- @field cost[opt] a table of the building costs (or omit if none), in the
-- by perks, needs, or buildings, for example, "Complex Food" and "Packs of  
-- following format:
-- Goods" and "Metal or Ore"; use the constants defined above
-- { first cost { number, resource },
-- @field eatable true if the good can be eaten, can omit if false
--   second cost { number, resource },
-- @field burnable true if the good can be burned or sacrified in a Hearth, can
--   etc. }
-- omit if false
-- @field workers the number of worker slots
-- @field burnTime the default* number of seconds the item burns
-- @field raintype the color of rain used in the Rain Engine of this building
-- for in a Hearth; can omit if burnable is false
-- (use constants, above), if any
-- @field sacrificeRate the default* number of items sacrified per minute in a
-- @field description the in-game description text, in plain text
-- Hearth; can omit if burnable is false
-- @table tBuildingData the primary data table for buildings
-- @field sellValue a decimal, the default* value in Amber when selling (the  
local tBuildingData = {  
-- spreadsheet shows the value as 10x, so 2.4 = 0.24 Amber in-game)
-- @field buyValue a decimal, the default* value in Amber when buying
-- @field description the in-game description
-- @table tResourceData the primary data table for resources
local tResourceData = {
-- Starting Buildings
    -- Food/Raw Food
["ancient hearth"] = { page="Ancient Hearth",  
["berries"] = { page="Berries",
iconfile="Small Hearth icon.png",  
iconfile="Icon_Resource_Berries.png",
specialization={ S_WARM },  
category=CAT_FOODS, cat2=C2_RAWFOOD,
workers=1,  
eatable=true,
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." },
sellValue=0.24, buyValue=0.40,
["main warehouse"] = { page="Main Warehouse",  
description="Common food source. Obtained by: Plantation, Hallowed Herb Garden, Herbalists' Camp, Small Herbalists' Camp."},
iconfile="Main_Storage_icon.png" },
["eggs"] = { page="Eggs",
iconfile="Eggs.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."},
["insects"] = { page="Insects",
iconfile="Insects.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Trappers' Camp, Small Trappers' Camp."},
["meat"] = { page="Meat",
iconfile="Meat.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."},
["mushrooms"] = { page="Mushrooms",
iconfile="Mushrooms.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Herbalists' Camp, Small Herbalists' Camp, Greenhouse, Homestead."},
["roots"] = { page="Roots",
iconfile="Roots.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Hallowed Herb Garden, Herb Garden, Foragers' Camp, Small Foragers' Camp."},
["vegetables"] = { page="Vegetables",
iconfile="Vegetables.png",
category=CAT_FOODS, cat2=C2_RAWFOOD,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="Common food source. Obtained by: Hallowed Small Farm, Small Farm, Foragers' Camp, Small Foragers' Camp, Homestead."},
-- Food/Complex Food
["biscuits"] = { page="Biscuits",  
iconfile="Icon_Resource_Biscuits.png",
category=CAT_FOODS, cat2=C2_COMPLEX,
eatable=true,
sellValue=0.30, buyValue=0.50,
description="Tasty and crunchy. Produced by: Field Kitchen, Bakery, Cookhouse, Smelter, Apothecary."},
["jerky"] = { page="Jerky",
iconfile="Jerky.png",
category=CAT_FOODS, cat2=C2_COMPLEX,
eatable=true,
sellValue=0.18, buyValue=0.30,
description="Preserved, dried meat. Produced by: Field Kitchen, Smokehouse, Kiln, Butcher, Cellar."},
["pickled goods"] = { page="Pickled Goods",
iconfile="PickledGoods.png",
category=CAT_FOODS, cat2=C2_COMPLEX,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="A Beaver specialty. Produced by: Field Kitchen, Granary, Cellar, Brewery, Flawless Brewery."},
["pie"] = { page="Pie",
iconfile="Pie.png",
category=CAT_FOODS, cat2=C2_COMPLEX,
eatable=true,
sellValue=0.30, buyValue=0.50,
description="A Human specialty. Produced by: Bakery, Brick Oven, Furnace."},
["skewers"] = { page="Skewers",
iconfile="Skewers.png",
category=CAT_FOODS, cat2=C2_COMPLEX,
eatable=true,
sellValue=0.24, buyValue=0.40,
description="A Lizard specialty. Produced by: Cookhouse, Grill, Butcher."},
-- Building Materials
["bricks"] = { page="Bricks",
iconfile="Icon_Resource_Bricks.png",  
category=CAT_BUILD, cat2=C2_CONSTRU,
sellValue=0.375, buyValue=0.625,
description="Mostly used for construction. Produced by: Crude Workstation, Workshop, Brickyard, Kiln, Furnace."},
["fabric"] = { page="Fabric",
iconfile="Fabric.png",
category=CAT_BUILD, cat2=C2_CONSTRU,
sellValue=0.375, buyValue=0.625,
description="Used for construction or production of clothes. Produced by: Crude Workstation, Workshop, Weaver, Granary, Leatherworker."},
["pipes"] = { page="Pipes",
iconfile="En_craft_23.png",  
category=CAT_BUILD, cat2=C2_CONSTRU,
sellValue=0.58, buyValue=1.00,
description="Used to install Rainpunk Engines in production buildings and build Geyser Pumps. Produced by: Crude Workstation, Workshop, Smelter, Toolshop."},
["planks"] = { page="Planks",
iconfile="Planks.png",
category=CAT_BUILD, cat2=C2_CONSTRU,
sellValue=0.225, buyValue=0.375,
description="Mostly used for construction. Produced by: Crude Workstation, Workshop, Lumber Mill, Carpenter, Supplier."},
-- Building Materials/Rare
["parts"] = { page="Parts",
iconfile="Parts.png",
category=CAT_BUILD, cat2=C2_RAREMAT,
sellValue=2.28, buyValue=4.80,  
description="Rare elements used in camp construction. Difficult to produce in this harsh environment."},
["wildfire essence"] = { page="Wildfire Essence",
iconfile="Wildfire Essence.png",
category=CAT_BUILD, cat2=C2_RAREMAT,
sellValue=6.00, buyValue=10.0,
description="A sentient flame trapped in a bottle. This rare material is used to light the Holy Flame in Hearths. Can be acquired from orders, Glade Events, or traders."},
-- Consumable Items/Clothing
["coats"] = { page="Coats",
iconfile="Coats.png",
category=CAT_CONSU, cat2=C2_CLOTHIN,
sellValue=0.12, buyValue=0.20,  
description="Used as clothing by some villagers. Produced by: Clothier, Smithy, Artisan, Druid's Hut."},
-- Consumable Items/Service Items
["ale"] = { page="Ale",
iconfile="Icon_Resource_Ale.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.21, buyValue=0.35,
description="Used for Leisure at: Tavern, Monastery, Forum. Produced by: Grill, Brewery, Flawless Brewery, Tinctury, Scribe."},
["cosmetics"] = { page="Cosmetics",
iconfile="Cosmetics.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.18, buyValue=0.3,
description="Used for Cleanliness at: Bath House, Holy Market, Market. Produced by: Cooperage, Alchemist's Hut, Apothecary."},
["incense"] = { page="Incense",
iconfile="Incense.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.225, buyValue=0.375,
description="Used for Religion at: Holy Temple, Temple, Monastery, Clan Hall. Produced by: Smokehouse, Brick Oven, Apothecary, Druid's Hut."},
["scrolls"] = { page="Scrolls",
iconfile="Scrolls.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.18, buyValue=0.30,
description="Used for Education at: Holy Temple, Temple, Explorers' Lodge, Forum. Produced by: Lumber Mill, Clothier, Flawless Rain Mill, Rain Mill, Scribe."},
["training gear"] = { page="Training Gear",
iconfile="TrainingGear.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.255, buyValue=0.425,
description="Used for Brawling at: Tavern, Clan Hall, Explorers' Lodge. Produced by: Cooperage, Weaver, Tinkerer, Manufactory."},
["wine"] = { page="Wine",
iconfile="Wine.png",
category=CAT_CONSU, cat2=C2_SERVICE,
sellValue=0.18, buyValue=0.30,
description="Used for Luxury at: Guild House, Holy Market, Market. Produced by: Cellar, Alchemist's Hut, Tinctury."},
-- Crafting Materials/Raw Materials
["clay"] = { page="Clay",
iconfile="Icon_Resource_Clay.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Flesh of the earth. Used mostly for crafting. Obtained by: Stonecutters' Camp, Clay Pit."},
["grain"] = { page="Grain",
iconfile="Grain.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.24, buyValue=0.40,
description="Isn't eaten raw, but can be processed. Obtained by: Hallowed Small Farm, Small Farm, Foragers' Camp, Small Foragers' Camp, Homestead."},
["herbs"] = { page="Herbs",
iconfile="Herbs.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.24, buyValue=0.40,
description="Isn't eaten raw, but can be processed. Obtained by: Hallowed Herb Garden, Herb Garden, Herbalists' Camp, Small Herbalists' Camp, Greenhouse."},
["leather"] = { page="Leather",
iconfile="Leather.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Used for crafting. Obtained by: Ranch."},
["pigment"] = { page="Pigment",  
iconfile="Pigment.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.15, buyValue=0.25,
description="Used for crafting. Produced by: Cookhouse, Artisan, Tinctury, Manufactory."},
["plant fiber"] = { page="Plant Fiber",
iconfile="PlantFiber.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Used for crafting. Obtained by: Hallowed Small Farm, Plantation, Harvesters' Camp, Homestead."},
["reeds"] = { page="Reeds",
iconfile="Reeds.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Used for crafting. Obtained by: Harvesters' Camp, Clay Pit."},
["resin"] = { page="Resin",
iconfile="Resin.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Used for crafting. Obtained by: Forester's Hut."},
["stone"] = { page="Stone",
iconfile="Stone.png",
category=CAT_CRAFT, cat2=C2_RAWMATS,
sellValue=0.18, buyValue=0.30,
description="Bones of the earth. Used mostly for crafting. Obtained by: Stonecutters' Camp."},
-- Camps
-- Crafting Materials/Processed Materials
["foragers' camp"] = { page="Foragers' Camp",  
["flour"] = { page="Flour",
iconfile="Forager's Camp icon" },
iconfile="Flour.png",
["harvesters' camp"] = { page="Harvesters' Camp",  
category=CAT_CRAFT, cat2=C2_PROCESS,
iconfile="Harvester Camp icon.png" },
sellValue=0.22, buyValue=0.38,
["herbalists' camp"] = { page="Herbalists' Camp",  
description="Used for cooking. Produced by: Flawless Rain Mill, Rain Mill, Press, Provisioner, Stamping Mill, Supplier."},
iconfile="Herbalist's_Camp_icon.png" },
["stonecutters' camp"] = { page="Stonecutters' Camp",  
-- Crafting Materials/Metal & Ore
iconfile="Stonecutter's Camp icon.png" },
["copper bars"] = { page="Copper Bars",
["trappers' camp"] = { page="Trappers' Camp",  
iconfile="CopperBar.png",
iconfile="Trapper's Camp icon.png" },
category=CAT_CRAFT, cat2=C2_METALOR,
["woodcutters' camp"] = { page="Woodcutters' Camp",  
sellValue=0.72, buyValue=1.2,
iconfile="Woodcutters Camp icon" },
description="Refined copper ore, used for crafting. Produced by: Grill, Furnace, Stamping Mill, Smelter."},
["copper ore"] = { page="Copper Ore",
iconfile="CopperOre.png",
category=CAT_CRAFT, cat2=C2_METALOR,
sellValue=0.18, buyValue=0.30,
description="A soft and malleable metal. Obtained by: Mine."},
["crystalized dew"] = { page="Crystalized Dew",  
iconfile="CrystalizedDew.png",
category=CAT_CRAFT, cat2=C2_METALOR,
sellValue=0.72, buyValue=1.20,
description="Crystalized rain essence. Produced by: Forester's Hut, Brickyard, Smelter, Alchemist's Hut."},
-- Crafting Materials/Vessels
["barrels"] = { page="Barrels",
iconfile="Icon_Resource_Barrels.png",
category=CAT_CRAFT, cat2=C2_VESSELS,
sellValue=0.24, buyValue=0.40,
description="Used for crafting. Produced by: Cooperage, Provisioner, Toolshop, Artisan."},
["pottery"] = { page="Pottery",
iconfile="Pottery.png",
category=CAT_CRAFT, cat2=C2_VESSELS,
sellValue=0.225, buyValue=0.375,
description="Used for crafting. Produced by: Bakery, Smokehouse, Brickyard, Stamping Mill."},
["waterskins"] = { page="Waterskins",
iconfile="Waterskins.png",
category=CAT_CRAFT, cat2=C2_VESSELS,
sellValue=0.225, buyValue=0.375,
description="Used for crafting. Produced by: Clothier, Leatherworker, Toolshop, Supplier."},
-- Trade Goods/Valuable Items
["amber"] = { page="Amber",
iconfile="Icon_Resource_Amber.png",
category=CAT_TRADE, cat2=C2_VALUABL,
sellValue=1.20, buyValue=1.50,
description="A widely accepted currency in the kingdom. Crystalized tree blood... fitting."},
["ancient tablet"] = { page="Ancient Tablet",
iconfile="Icon_Resource_AncientTablet.png",
category=CAT_TRADE, cat2=C2_VALUABL,
sellValue=9.60, buyValue=16.0,
description="Valuable sources of knowledge, highly sought after by traders and the Queen herself. They can be found in Dangerous  or Forbidden Glades."},
-- Trade Goods/Packs of Goods
["pack of building materials"] = { page="Pack of Building Materials",
iconfile="Icon_Resource_BuildingMaterials.png",
category=CAT_TRADE, cat2=C2_PACKSGO,
sellValue=1.05, buyValue=1.60,
description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Flawless Rain Mill, Rain Mill, Tinkerer."},
["pack of crops"] = { page="Pack of Crops",
iconfile="Crops.png",
category=CAT_TRADE, cat2=C2_PACKSGO,
sellValue=0.71, buyValue=1.10,
description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Granary, Brewery, Flawless Brewery."},
["pack of luxury goods"] = { page="Pack of Luxury Goods",
iconfile="Luxury.png",
category=CAT_TRADE, cat2=C2_PACKSGO,
sellValue=0.78, buyValue=1.20,
description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Carpenter, Leatherworker, Press."},
["pack of provisions"] = { page="Pack of Provisions",  
iconfile="Provisions.png",
category=CAT_TRADE, cat2=C2_PACKSGO,
sellValue=0.48, buyValue=0.80,
description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Provisioner, Manufactory."},
["pack of trade goods"] = { page="Pack of Trade Goods",  
iconfile="TradeGoods.png",
category=CAT_TRADE, cat2=C2_PACKSGO,
sellValue=0.96, buyValue=1.60,
description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Lumber Mill, Weaver, Smithy."},
-- Meta resources
["artifacts"] = { page="Artifacts",  
iconfile="Icon MetaResource Artifact.png",
category=CAT_TRADE, cat2=C2_METARES,
sellValue=0.60, buyValue=0.90,
description="Curiosities of a varied nature. Fascinating, sinister, and all in between. Can be used to buy more advanced upgrades in the Smoldering City."},
["food stockpiles"] = { page="Food Stockpiles",  
iconfile="Icon MetaResource FoodStockpiles.png",
category=CAT_TRADE, cat2=C2_METARES,
sellValue=0.30, buyValue=0.45,
description="A basic currency in the realm. Workers are eager to exchange their labor for food for their families. Can be used to buy upgrades in the Smoldering City."},
["machinery"] = { page="Machinery",  
iconfile="Icon MetaResource Machinery.png",
category=CAT_TRADE, cat2=C2_METARES,
sellValue=0.60, buyValue=0.90,
description="Rainpunk technology ripped from the past. Repurposed using skill and labor. Can be used to buy upgrades in the Smoldering City."},
-- Farms
-- Fuel & Exploration/Fuel
["farm field"] = { page="Farm Field",  
["coal"] = { page="Coal",  
iconfile="Farmfield_icon.png" },
iconfile="Icon_Resource_Coal.png",
["greenhouse"] = { page="Greenhouse",  
category=CAT_FUEXP, cat2=C2_FUELSAC,
iconfile="Greenhouse_icon.png" },
burnable=true, burnTime=60, sacrificeRate=18,
["herb garden"] = { page="Herb Garden",  
sellValue=0.375, buyValue=0.625,
iconfile="HerbGarden_icon.png" },
description="Efficient fuel. Obtained by: Mine, Brick Oven, Kiln."},
["plantation"] = { page="Plantation",  
["oil"] = { page="Oil",  
iconfile="Plantation_icon.png" },
iconfile="Oil.png",
["small farm"] = { page="Small Farm",  
category=CAT_FUEXP, cat2=C2_FUELSAC,
iconfile="SmallFarm_icon.png" },
burnable=true, burnTime=30, sacrificeRate=15,
sellValue=0.195, buyValue=0.325,
description="Efficient fuel. Obtained by: Butcher, Press, Druid's Hut."},
["sea marrow"] = { page="Sea Marrow",  
iconfile="SeaMarrow.png",
category=CAT_FUEXP, cat2=C2_FUELSAC,
burnable=true, burnTime=60, sacrificeRate=18,
sellValue=0.375, buyValue=0.625,
description="Efficient fuel. Obtained by: Stonecutters' Camp."},
["wood"] = { page="Wood",  
iconfile="Wood.png",  
category=CAT_FUEXP, cat2=C2_FUELSAC,
burnable=true, burnTime=15, sacrificeRate=30,
sellValue=0.075, buyValue=0.125,  
description="An abundant, yet crucial resource. Obtained by: Woodcutters' Camp."},
-- Food production
-- Fuel & Exploration/Tools
["bakery"] = { page="Bakery",  
["simple tools"] = { page="Simple Tools",  
iconfile="Bakery_icon.png" },
iconfile="SimpleTools.png",  
["butcher"] = { page="Butcher",  
category=CAT_FUEXP, cat2=C2_EXPTOOL,  
iconfile="Butcher_icon.png" },
sellValue=1.665, buyValue=2.775,  
["cellar"] = { page="Cellar",  
description="Used in exploration, for opening caches and completing difficult events. Produced by: Carpenter, Smithy, Toolshop, Tinkerer, Scribe."},
iconfile="Cellar_icon.png" },
["infused tools"] = { page="Infused Tools",  
["cookhouse"] = { page="Cookhouse",  
iconfile="InfusedTools.png",  
iconfile="Cookhouse_icon.png" },
category=CAT_FUEXP, cat2=C2_EXPTOOL,  
["field kitchen"] = { page="Field Kitchen",  
sellValue=2.115, buyValue=3.525,  
iconfile="Field_Kitchen_icon.png" },
description="Used in exploration, for opening caches and completing difficult events. Produced by: Finesmith, Rainpunk Foundry."},
["granary"] = { page="Granary",  
iconfile="Granary_icon.png" },
["grill"] = { page="Grill",  
iconfile="Grill_icon.png" },
["ranch"] = { page="Ranch",  
iconfile="Ranch_icon.png" },
["smokehouse"] = { page="Smokehouse",
iconfile="Smokehouse_icon.png" },
-- Housing
-- Rainwater
["shelter"] = { page="Shelter",  
["clearance water"] = { page="Clearance Water",  
iconfile="Shelter icon.png" },
iconfile="Yellow_30.png",  
["big shelter"] = { page="Big Shelter",  
category=CAT_RAINS, cat2=C2_RAINWAT,  
iconfile="Big Shelter icon.png" },
description="Highly concentrated yellow clearance rainwater. Used to power Rain Engines in crafting-oriented buildings."},
["human house"] = { page="Human House",  
["drizzle water"] = { page="Drizzle Water",  
iconfile="Human House icon.png" },
iconfile="Green_11.png",  
["beaver house"] = { page="Beaver House",  
category=CAT_RAINS, cat2=C2_RAINWAT,  
iconfile="Beaver House icon.png" },
description="Highly concentrated green drizzle rainwater. Used to power Rain Engines in food-oriented buildings."},
["lizard house"] = { page="Lizard House",  
["storm water"] = { page="Storm Water",  
iconfile="Lizard House icon.png" },
iconfile="Blue_14.png",  
["harpy house"] = { page="Harpy House",  
category=CAT_RAINS, cat2=C2_RAINWAT,  
iconfile="Harpy House icon.png" },
description="Highly concentrated blue storm rainwater. Used to power Rain Engines in industry-oriented buildings."},
-- Industry
-- Blight Fuel
["crude workstation"] = { page="Crude Workstation",  
["purging fire"] = { page="Purging Fire",  
iconfile="Crude_Workstation_icon.png" },
iconfile="PurgingFire.png",  
["makeshift post"] = { page="Makeshift Post",  
category=CAT_BLIGH, cat2=C2_PURGING,  
iconfile="Makeshift_Post_icon.png" },
sellValue=0.375, buyValue=0.625,  
["advanced rain collector"] = { page="Advanced Rain Collector",  
description="A unique resource used by Blight Fighters to burn down Blightrot Cysts. Produced by: Blight Post."}
iconfile="Advanced_Rain_Collector_icon.png",  
specialization={ S_ENGI, S_ALCH },
cost={ {5,C_PIPES}, {3,C_PARTS}, {5,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"] = { page="Alchemist's Hut",
iconfile="Alchemist_Hut_icon.png",
specialization={ S_ALCH, S_BREW },
cost={ {5,C_PLANK}, {2,C_BRICK} },
workers=2,
description="Can produce: Crystalized Dew (★★), Cosmetics (★★), Wine (★★). Can use: Clearance Water. Can't be moved. Size: 3x2." },
["apothecary"] = { page="Apothecary",
iconfile="Apothecary_icon.png",
specialization={ S_ALCH },
cost={ {5,C_PLANK}, {2,C_BRICK} },
workers=2,
description="Can produce: Cosmetics (★★), Incense (★★), Biscuits (★★). Can use: Clearance Water. Can't be moved. Size: 3x3." },
["artisan"] = { page="Artisan",
iconfile="Artisan_icon.png" },
["brewery"] = { page="Brewery",
iconfile="Brewery_icon.png" },
["brick oven"] = { page="Brick Oven",
iconfile="Brick_Oven_icon.png" },
["brickyard"] = { page="Brickyard",
iconfile="Brickyard_icon.png" },
["carpenter"] = { page="Carpenter",
iconfile="Carpenter_icon.png" },
["clothier"] = { page="Clothier",
iconfile="Clothier_icon.png" },
["cooperage"] = { page="Cooperage",
iconfile="Cooperage_icon.png" },
["druid's hut"] = { page="Druid's Hut",
iconfile="Druid_icon.png" },
["flawless brewery"] = { page="Flawless Brewery",
iconfile="Brewery_icon.png" },
["flawless rain mill"] = { page="Flawless Rain Mill",
iconfile="Rain_Mill_icon.png" },
["furnace"] = { page="Furnace",
iconfile="Furnace_icon.png" },
["kiln"] = { page="Kiln",
iconfile="Kiln_icon.png" },
["leatherworker"] = { page="Leatherworker",
iconfile="Leatherworks_icon.png" },
["lumber mill"] = { page="Lumber Mill",
iconfile="Lumbermill_icon.png" },
["mine"] = { page="Mine",
iconfile="Mine_icon.png" },
["press"] = { page="Press",
iconfile="Press_icon.png" },
["provisioner"] = { page="Provisioner",
iconfile="Provisioner_icon.png" },
["rain collector"] = { page="Rain Collector",
iconfile="Rain_Collector_icon.png" },
["rain mill"] = { page="Rain Mill",
iconfile="Rain_Mill_icon.png" },
["scribe"] = { page="Scribe",
iconfile="Scribe_icon.png" },
["smelter"] = { page="Smelter",
iconfile="Smelter_icon.png" },
["toolshop"] = { page="Toolshop",
iconfile="Toolshop_icon.png" },
["weaver"] = { page="Weaver",
iconfile="Weaver_icon.png" },
-- City Buildings
} -- end of tResourceData
["archaeologist's office"] = { page="Archaeologist's Office",
iconfile="Archeologist_office_icon.png",
cost={ {2,C_PLANK}, {2,C_BRICK}, {2,C_FABRI} },
description="A building designed to help you study the past. Can be upgraded to locate archaeological discoveries or improve exploration capabilities. Can be moved for: 5 Wood. Size: 3x3." },
["small hearth"] = { page="Small Hearth",
iconfile="Temporary_Hearth_icon.png" },
["warehouse"] = { page="Warehouse",
iconfile="Storage_icon.png" },
["trading post"] = { page="Trading Post",
iconfile="Trading_Post_icon.png" },
["blight post"] = { page="Blight Post",
iconfile="Blight_Post_icon.png" },
["hydrant"] = { page="Hydrant",
iconfile="Hydrant_icon.png" },
["forsaken altar"] = { page="Forsaken Altar",
iconfile="Altar_icon.png" },
-- Service Buildings
["bath house"] = { page="Bath House",
iconfile="Bath_House_icon.png" },
["clan hall"] = { page="Clan Hall",
iconfile="Clan_Hall_icon.png" },
["explorers' lodge"] = { page="Explorers' Lodge",
iconfile="Explorers_Lodge_icon.png" },
["guild house"] = { page="Guild House",
iconfile="Guild_House_icon.png" },
["monastery"] = { page="Monastery",
iconfile="Monastery_icon.png"},
["tavern"] = { page="Tavern",
iconfile="Tavern_icon.png" },
["temple"] = { page="Temple",
iconfile="Temple_icon.png" },
} -- end of tBuildingData




Line 263: Line 462:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Main lookup function
-- Main lookup function
--  
--
-- Accepts the in-game name and returns the corresponding inner table from
-- Accepts the in-game name and returns the corresponding inner table from  
-- tBuildingData. It is preferred that callers use the other getter functions
-- tResourceData. It is preferred that callers use the other getter functions  
-- that return specific fields of the inner table rather than the whole thing,
-- that return specific fields of the inner table rather than the whole thing,
-- to protect variations in this module.
-- to protect variations in this module.
-- @param buildingName the name of the building to look up
-- @param resourceName the name of the resource to look up
-- @return the inner table from the big data table corresponding to the provided
-- @return the inner table from the big data table corresponding to the provided
-- building name, or nil if it doesn't exist
-- building name, or nil if it doesn't exist
function BuildingData.getData(buildingName)
function ResourceData.getData(resourceName)
-- If the argument to this function is empty or nil, save some time by  
-- If the argument to this function is empty or nil, save some time by  
-- skipping the normalize function.
-- skipping the normalize function.
if not buildingName or "" == buildingName then
if not resourceName or "" == resourceName then
return nil
return nil
end
end
-- normalize the name and try again
-- normalize the name and try again
     local buildingName = Utility.normalizeBuildingName(buildingName)
     local resourceName = Utility.normalizeResourceName(resourceName)
-- get the inner table from the big data table and return it; if it doesn't
-- get the inner table from the big data table and return it; if it doesn't
-- exist, this will return nil anyway
-- exist, this will return nil anyway
     return tBuildingData[buildingName] or nil
     return tResourceData[resourceName]
end
end


Line 290: Line 489:


---
---
-- Getter method for the icon filename for a building.
-- Getter method for the page name for a resource.
--  
--  
-- Accepts the in-game name of the building and returns the corresponding  
-- Accepts the in-game name of the resource and returns the corresponding name
-- filename on the wiki for the building's icon as seen in-game.
-- of the page in the wiki for the resource. If the resourceName argument is
-- @param buildingName the name of the building
-- formatted exactly as in the game, this will return a string matching the
-- @return the filename, which might be an empty string, or nil if it doesn't  
-- argument. Since normalization is performed, this can be used to ensure proper
-- exist
-- formatting of the resource's name.
function BuildingData.getIconFilename(buildingName)
-- @param resourceName the name of the resource
-- @return the name of the page on the wiki, or nil if it doens't exist
-- get the inner table for the building
function ResourceData.getPagename(resourceName)
local tBuilding = getData(buildingName)
 
if not tBuilding then
-- get the inner table for the resource
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
return nil
end
end
local icon = "" -- this is our return variable
-- if the resource didn't exist, then nil was already returned, but if the
-- page was undefined, this should return nil instead of an empty string
-- Get the icon filename, if any. If the building doesn't have an icon,
return tResource.page
-- then return an empty string. Returning nil is reserved for when the
-- building does not exist.
if tBuilding.iconfile then
--overwrite the return variable
icon = tBuilding.iconfile
end
-- At this point, it could be an empty string, signifying that the building
-- exists but does not have an icon.
return icon
end
end


Line 323: Line 514:


---
---
-- Getter method for the page name for a building.
-- Getter method for the icon filename for a resource.
--  
--  
-- Accepts the in-game name of the building and returns the corresponding name
-- Accepts the in-game name of the resource and returns the corresponding  
-- of the page in the wiki for the building. If the buildingName argument is
-- filename on the wiki for the resource's icon as seen in-game.
-- formatted exactly as in the game, this will return a string matching the
-- @param resourceName the name of the resource
-- argument. Since normalization is performed, this can be used to ensure proper
-- @return the filename, which might be an empty string, or nil if it doesn't  
-- formatting of the building's name.
-- exist
-- @param buildingName the name of the building
function ResourceData.getIconFilename(resourceName)
-- @return the name of the page on the wiki, or nil if it doens't exist
function BuildingData.getPagename(buildingName)


-- get the inner table for the building
-- get the inner table for the resource
local tBuilding = getData(buildingName)
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
end
-- if the building didn't exist, then this needs to return nil so it can't
-- Get the icon filename, if any. If the resource doesn't have an icon,
-- be used as a key again
-- then return an empty string. Returning nil is reserved for when the
return tBuilding.page or nil
-- resource does not exist.
return tResource.iconfile or ""
end
end


Line 345: Line 538:


---
---
-- Getter method for the specializations of a building.
-- Getter method for the categories of a resoruce.
--  
--
-- Accepts the in-game name of the building and returns the corresponding  
-- Accepts the in-game name of the resource and returns the two corresponding  
-- specializations, if any, as a table of strings.
-- categories. The first is the one seen at the top of the game UI, the second
-- @param the name of the building
-- is a more specific, functional category for perks, buildings, etc.
-- @return a table with the specializations for the building, which might be
-- @param resourceName the name of the resource
-- empty if the building has no specializations, or nil if the building doesn't  
-- @return the first, top-level category, or nil if it doesn't exist
-- exist
-- @return the second, more specific and functional category, or nil if it
function BuildingData.getSpecialization(buildingName)
-- doesn't exist
 
function ResourceData.getCategories(resourceName)
-- get the inner table for the building
local tBuilding = getData(buildingName)
-- if the building didn't exist, return nil
-- get the inner table for the resource
if not tBuilding then
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
return nil
end
end
local tSpec = {} -- this is our return variable
-- if this does not exist, nil is an okay return value
return tResource.category, tResource.cat2
end
 
 
 
---
-- Getter method for the eatability of a resoruce.
--
-- Accepts the in-game name of the resource and returns true if the resource can
-- be consumed by villagers as food.
-- @param resourceName the name of the resource
-- @return true if the resource can be eaten as food, nil or false otherwise
function ResourceData.isEatable(resourceName)
-- Get the specialization, if any. If there are none, then return that empty
-- get the inner table for the resource
-- table. Returning nil is reserved for when the building does not exist.
local tResource = ResourceData.getData(resourceName)
if tBuilding.specialization then
if not tResource then
-- overwrite the return variable
return nil
tSpec = tBuilding.specialization
end
end
-- At this point, it could be an empty table, signifying that the building
-- if this does not exist, nil is an okay return value, because nil is falsy
-- exists but has no specialization.
return tResource.eatable
return tSpec
end
end


Line 380: Line 583:


---
---
-- Getter method for the building costs of a building.
-- Getter method for the burnability of a resoruce.
--  
--
-- Accepts the in-game name of the building and returns the corresponding
-- Accepts the in-game name of the resource and returns true if the resource can
-- costs in resources to build as a table of strings. Buildings that the player
-- be burned in Hearths as fuel.
-- starts with or are otherwise free to build will have no costs.
-- @param resourceName the name of the resource
-- @param the name of the building
-- @return true if the resource can be burned as fuel, nil or false otherwise
-- @return a table with the costs of the building, which may be empty if the
function ResourceData.isBurnable(resourceName)
-- player starts with the building, or nil if the building doesn't exist; the
-- cost table has the following format:
-- { first cost { number, resource },
--   second cost { number, resource },
--   etc. }
function BuildingData.getCosts(buildingName)
 
-- get the inner table for the building
local tBuilding = getData(buildingName)
-- if the building didn't exist, return nil
-- get the inner table for the resource
if not tBuilding then
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
return nil
end
end
local tCost = {} -- this is our return variable
-- if this does not exist, nil is an okay return value, because nil is falsy
return tResource.burnable
-- Get the costs, if any. If there are none, then return that empty table.
-- Returning nil is reserved for when the building does not exist.
if tBuilding.cost then
-- overwrite the return variable
tCost = tBuilding.cost
end
-- At this point, it could be an empty table, signifying that the building
-- exists but has no cost.
return tCost
end
end


Line 419: Line 604:


---
---
-- Getter method for the number of worker slots at a building.
-- Getter method for the burn time and sacrifice rate of a resource.
--  
--
-- Accepts the in-game name of the building and returns the corresponding
-- Accepts the in-game name of the resource and returns the number of seconds
-- number of workers the building can take, if any.
-- the resource burns in the hearth and the number of items sacrificed per
-- @param the name of the building
-- minute when sacrificed in the hearth. These numbers don't have the same unit,  
-- @return the number of workers, which might be zero, or nil if the building
-- but they are how the game communicates these two rates.
-- doesn't exist
-- @param resourceName the name of the resource
function BuildingData.getWorkers(buildingName)
-- @return the number of seconds the resource burns in the hearth, or nil if  
 
-- the resource is not burnable
-- get the inner table for the building
-- @return the number of items per minute when sacrificed in the hearth, and if
local tBuilding = getData(buildingName)
-- the resource is not burnable, there will not be a second returned item
if not tBuilding then
function ResourceData.getBurnTimeAndSacrificeRate(resourceName)
-- get the inner table for the resource
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
return nil
end
end
local workerSlots = 0 -- this is our return variable
-- if these do not exist, nil is an okay return value, because nil is falsy
return tResource.burnTime, tResource.sacrificeRate
-- Get the number of worker slots, if any. If there are none, then return
-- zero. Returning nil is reserved for when the building does not exist.
if tBuilding.workers then
-- overwrite the return variable
workerSlots = tBuilding.workers
end
-- At this point, it could be zero, signifying that the building exists but
-- has no worker slots.
return workerSlots
end
end


Line 451: Line 630:


---
---
-- Getter method for the type of rain used in Rain Engines in a building.
-- Getter method for the selling and buying values of a resource.
--  
--
-- Accepts the in-game name of the building and returns the corresponding
-- Accepts the in-game name of the resource and returns the value in Amber when
-- rain type.
-- selling the resource and the value in Amber when buying the resource.
-- @param the name of the building
-- @param resourceName the name of the resource
-- @return the rain type, if any, or nil if the building doesn't exist
-- @return the value when selling
function BuildingData.getRainType(buildingName)
-- @return the value when buying
 
function ResourceData.getSellAndBuyValues(resourceName)
-- get the inner table for the building
local tBuilding = getData(buildingName)
-- get the inner table for the resource
if not tBuilding then
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
return nil
end
end
local rainType = "" -- this is our return variable
-- if the resource exists but the values are undefined, return zero instead
-- of nil
-- Get the rain type, if any. If the building cannot have rain engines, then
return tResource.sellValue or 0, tResource.buyValue or 0
-- return an empty string. Returning nil is reserved for when the building
-- does not exist.
if tBuilding.raintype then
-- overwrite the return variable
rainType = tBuilding.raintype
end
-- At this point, it could be an empty string, signifying that the building
-- exists but does not use any rainwater.
return rainType
end
end


Line 483: Line 653:


---
---
-- Getter method for the description for a building.
-- Getter method for the description for a resource.
--  
--  
-- Accepts the in-game name of the building and returns the corresponding  
-- Accepts the in-game name of the resource and returns the corresponding  
-- description text, as seen in the game.
-- description text, as seen in the game.
-- @param the name of the building
-- @param resourceName the name of the resource
-- @return the description of the building, which might be an empty string, or  
-- @return the description of the resource, which might be an empty string, or  
-- nil if it doesn't exist
-- nil if it doesn't exist
function BuildingData.getDescription(buildingName)
function ResourceData.getDescription(resourceName)


-- get the inner table for the building
-- get the inner table for the resource
local tBuilding = getData(buildingName)
local tResource = ResourceData.getData(resourceName)
if not tBuilding then
if not tResource then
return nil
return nil
end
end
local desc = "" -- this is our return variable
-- Get the description, if any. If the resource doesn't have a description,
-- Get the description, if any. If the building doesn't have a description,
-- then return an empty string. Returning nil is reserved for when the  
-- then return an empty string. Returning nil is reserved for when the  
-- building does not exist.
-- resource does not exist.
if tBuilding.description then
return tResource.description or ""
--overwrite the return variable
desc = tBuilding.description
end
-- At this point, it could be an empty string, signifying that the building
-- exists but does not have a description.
return desc
end
end


Line 516: Line 677:


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

Latest revision as of 03:03, 14 February 2023

Documentation for this module may be created at Module:ResourceData/doc

-------------------------------------------------------------------------------
-- Lua storage module for looking up data about resources, for use in other
-- modules and templates, for example, {{Resource_Link}}.
-- 
--
-- The main data table stores all available data about resources themselves and 
-- relies on other modules to store relationships between resources and 
-- buildings, services, etc.
--
-- The helper functions include getters (to keep the data hidden) and a large
-- normalization method to provide some robustness when using the template and 
-- from other Lua modules. Looking up a resource requires using in-game names, 
-- but forgives small differences in spacing, apostrophes, and plurals.
-- @module ResourceData
local ResourceData = {}

--
-- Dependencies
--
Utility = Utility or require("Module:Utility") -- need normalize functions



--
-- Constants
--
-- top-level categories; the main tabs in the top of the game window
local CAT_FOODS = "Food"
local CAT_BUILD = "Building Materials"
local CAT_CONSU = "Consumable Items"
local CAT_CRAFT = "Crafting Resources"
local CAT_TRADE = "Trade Goods"
local CAT_FUEXP = "Fuel & Exploration"
local CAT_RAINS = "Rainwater"
local CAT_BLIGH = "Blight Fuel"

-- secondary categories, for use in wiki pages
-- Foods
local C2_RAWFOOD = "Raw Food"
local C2_COMPLEX = "Complex Food"
-- Building Mats
local C2_CONSTRU = "Construction Material"
local C2_RAREMAT = "Rare Material"
-- Consumable Items
local C2_CLOTHIN = "Clothing"
local C2_SERVICE = "Service"
-- Crafting Resources
local C2_RAWMATS = "Raw Material"
local C2_PROCESS = "Processed Material"
local C2_METALOR = "Metal"
local C2_VESSELS = "Vessel"
-- Trade Goods
local C2_VALUABL = "Valuable"
local C2_PACKSGO = "Pack of Good"
local C2_METARES = "Metaresource"
-- Fuel & Exploration
local C2_FUELSAC = "Fuel"
local C2_EXPTOOL = "Tool"
-- Rainwater and Blight Fuel
local C2_RAINWAT = "Rainwater"
local C2_PURGING = "Purging Fire"



--
-- Class variables
--

-------------------------------------------------------------------------------
-- Primary data table for this module.
--
-- This table stories the details of resources 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.)
--
-- *defaults are stored here; these value will be modified during the game by 
-- perks and city upgrades
-- 
-- Structure: 
-- @key a lowercase version of the resource name, with the same spaces, 
-- apostrophes, singular/plural, and spelling
-- @field page the name of the wiki page, case-sensitive, but otherwise must be the same as the key
-- @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 category a string representing the primary in-game category the 
-- resource belongs to, in the upper UI on the game screen; use the constants
-- defined above
-- @field cat2 a string representing a more specific category, often referenced
-- by perks, needs, or buildings, for example, "Complex Food" and "Packs of 
-- Goods" and "Metal or Ore"; use the constants defined above
-- @field eatable true if the good can be eaten, can omit if false
-- @field burnable true if the good can be burned or sacrified in a Hearth, can 
-- omit if false
-- @field burnTime the default* number of seconds the item burns 
-- for in a Hearth; can omit if burnable is false
-- @field sacrificeRate the default* number of items sacrified per minute in a 
-- Hearth; can omit if burnable is false
-- @field sellValue a decimal, the default* value in Amber when selling (the 
-- spreadsheet shows the value as 10x, so 2.4 = 0.24 Amber in-game)
-- @field buyValue a decimal, the default* value in Amber when buying
-- @field description the in-game description
-- @table tResourceData the primary data table for resources
local tResourceData = {
	
    -- Food/Raw Food
	["berries"] = {	page="Berries", 
		iconfile="Icon_Resource_Berries.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Plantation, Hallowed Herb Garden, Herbalists' Camp, Small Herbalists' Camp."},
	["eggs"] = { page="Eggs", 
		iconfile="Eggs.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."},
	["insects"] = { page="Insects",
		iconfile="Insects.png",	
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Trappers' Camp, Small Trappers' Camp."},
	["meat"] = { page="Meat", 
		iconfile="Meat.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."},
	["mushrooms"] = { page="Mushrooms", 
		iconfile="Mushrooms.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Herbalists' Camp, Small Herbalists' Camp, Greenhouse, Homestead."},
	["roots"] = { page="Roots", 
		iconfile="Roots.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Hallowed Herb Garden, Herb Garden, Foragers' Camp, Small Foragers' Camp."},
	["vegetables"] = { page="Vegetables", 
		iconfile="Vegetables.png", 
		category=CAT_FOODS, cat2=C2_RAWFOOD, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="Common food source. Obtained by: Hallowed Small Farm, Small Farm, Foragers' Camp, Small Foragers' Camp, Homestead."},
		
	-- Food/Complex Food
	["biscuits"] = { page="Biscuits", 
		iconfile="Icon_Resource_Biscuits.png", 
		category=CAT_FOODS, cat2=C2_COMPLEX, 
		eatable=true, 
		sellValue=0.30, buyValue=0.50, 
		description="Tasty and crunchy. Produced by: Field Kitchen, Bakery, Cookhouse, Smelter, Apothecary."},
	["jerky"] = { page="Jerky", 
		iconfile="Jerky.png", 
		category=CAT_FOODS, cat2=C2_COMPLEX, 
		eatable=true, 
		sellValue=0.18, buyValue=0.30, 
		description="Preserved, dried meat. Produced by: Field Kitchen, Smokehouse, Kiln, Butcher, Cellar."},
	["pickled goods"] = { page="Pickled Goods", 
		iconfile="PickledGoods.png", 
		category=CAT_FOODS, cat2=C2_COMPLEX, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="A Beaver specialty. Produced by: Field Kitchen, Granary, Cellar, Brewery, Flawless Brewery."},
	["pie"] = { page="Pie", 
		iconfile="Pie.png", 
		category=CAT_FOODS, cat2=C2_COMPLEX, 
		eatable=true, 
		sellValue=0.30, buyValue=0.50, 
		description="A Human specialty. Produced by: Bakery, Brick Oven, Furnace."},
	["skewers"] = { page="Skewers", 
		iconfile="Skewers.png", 
		category=CAT_FOODS, cat2=C2_COMPLEX, 
		eatable=true, 
		sellValue=0.24, buyValue=0.40, 
		description="A Lizard specialty. Produced by: Cookhouse, Grill, Butcher."},
		
	-- Building Materials
	["bricks"] = { page="Bricks", 
		iconfile="Icon_Resource_Bricks.png", 
		category=CAT_BUILD, cat2=C2_CONSTRU, 
		sellValue=0.375, buyValue=0.625, 
		description="Mostly used for construction. Produced by: Crude Workstation, Workshop, Brickyard, Kiln, Furnace."},
	["fabric"] = { page="Fabric", 
		iconfile="Fabric.png", 
		category=CAT_BUILD, cat2=C2_CONSTRU, 
		sellValue=0.375, buyValue=0.625, 
		description="Used for construction or production of clothes. Produced by: Crude Workstation, Workshop, Weaver, Granary, Leatherworker."},
	["pipes"] = { page="Pipes", 
		iconfile="En_craft_23.png", 
		category=CAT_BUILD, cat2=C2_CONSTRU, 
		sellValue=0.58, buyValue=1.00, 
		description="Used to install Rainpunk Engines in production buildings and build Geyser Pumps. Produced by: Crude Workstation, Workshop, Smelter, Toolshop."},
	["planks"] = { page="Planks", 
		iconfile="Planks.png", 
		category=CAT_BUILD, cat2=C2_CONSTRU, 
		sellValue=0.225, buyValue=0.375, 
		description="Mostly used for construction. Produced by: Crude Workstation, Workshop, Lumber Mill, Carpenter, Supplier."},
		
	-- Building Materials/Rare
	["parts"] = { page="Parts", 
		iconfile="Parts.png", 
		category=CAT_BUILD, cat2=C2_RAREMAT, 
		sellValue=2.28, buyValue=4.80, 
		description="Rare elements used in camp construction. Difficult to produce in this harsh environment."},
	["wildfire essence"] = { page="Wildfire Essence", 
		iconfile="Wildfire Essence.png", 
		category=CAT_BUILD, cat2=C2_RAREMAT, 
		sellValue=6.00, buyValue=10.0, 
		description="A sentient flame trapped in a bottle. This rare material is used to light the Holy Flame in Hearths. Can be acquired from orders, Glade Events, or traders."},
		
	-- Consumable Items/Clothing
	["coats"] = { page="Coats", 
		iconfile="Coats.png", 
		category=CAT_CONSU, cat2=C2_CLOTHIN, 
		sellValue=0.12, buyValue=0.20, 
		description="Used as clothing by some villagers. Produced by: Clothier, Smithy, Artisan, Druid's Hut."},
		
	-- Consumable Items/Service Items
	["ale"] = { page="Ale", 
		iconfile="Icon_Resource_Ale.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.21, buyValue=0.35, 
		description="Used for Leisure at: Tavern, Monastery, Forum. Produced by: Grill, Brewery, Flawless Brewery, Tinctury, Scribe."},
	["cosmetics"] = { page="Cosmetics", 
		iconfile="Cosmetics.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.18, buyValue=0.3, 
		description="Used for Cleanliness at: Bath House, Holy Market, Market. Produced by: Cooperage, Alchemist's Hut, Apothecary."},
	["incense"] = { page="Incense", 
		iconfile="Incense.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.225, buyValue=0.375, 
		description="Used for Religion at: Holy Temple, Temple, Monastery, Clan Hall. Produced by: Smokehouse, Brick Oven, Apothecary, Druid's Hut."},
	["scrolls"] = { page="Scrolls", 
		iconfile="Scrolls.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for Education at: Holy Temple, Temple, Explorers' Lodge, Forum. Produced by: Lumber Mill, Clothier, Flawless Rain Mill, Rain Mill, Scribe."},
	["training gear"] = { page="Training Gear", 
		iconfile="TrainingGear.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.255, buyValue=0.425, 
		description="Used for Brawling at: Tavern, Clan Hall, Explorers' Lodge. Produced by: Cooperage, Weaver, Tinkerer, Manufactory."},
	["wine"] = { page="Wine", 
		iconfile="Wine.png", 
		category=CAT_CONSU, cat2=C2_SERVICE, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for Luxury at: Guild House, Holy Market, Market. Produced by: Cellar, Alchemist's Hut, Tinctury."},
		
	-- Crafting Materials/Raw Materials
	["clay"] = { page="Clay", 
		iconfile="Icon_Resource_Clay.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Flesh of the earth. Used mostly for crafting. Obtained by: Stonecutters' Camp, Clay Pit."},
	["grain"] = { page="Grain", 
		iconfile="Grain.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.24, buyValue=0.40, 
		description="Isn't eaten raw, but can be processed. Obtained by: Hallowed Small Farm, Small Farm, Foragers' Camp, Small Foragers' Camp, Homestead."},
	["herbs"] = { page="Herbs", 
		iconfile="Herbs.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.24, buyValue=0.40, 
		description="Isn't eaten raw, but can be processed. Obtained by: Hallowed Herb Garden, Herb Garden, Herbalists' Camp, Small Herbalists' Camp, Greenhouse."},
	["leather"] = { page="Leather", 
		iconfile="Leather.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for crafting. Obtained by: Ranch."},
	["pigment"] = { page="Pigment", 
		iconfile="Pigment.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.15, buyValue=0.25, 
		description="Used for crafting. Produced by: Cookhouse, Artisan, Tinctury, Manufactory."},
	["plant fiber"] = { page="Plant Fiber", 
		iconfile="PlantFiber.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for crafting. Obtained by: Hallowed Small Farm, Plantation, Harvesters' Camp, Homestead."},
	["reeds"] = { page="Reeds", 
		iconfile="Reeds.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for crafting. Obtained by: Harvesters' Camp, Clay Pit."},
	["resin"] = { page="Resin", 
		iconfile="Resin.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Used for crafting. Obtained by: Forester's Hut."},
	["stone"] = { page="Stone", 
		iconfile="Stone.png", 
		category=CAT_CRAFT, cat2=C2_RAWMATS, 
		sellValue=0.18, buyValue=0.30, 
		description="Bones of the earth. Used mostly for crafting. Obtained by: Stonecutters' Camp."},
	
	-- Crafting Materials/Processed Materials
	["flour"] = { page="Flour",	
		iconfile="Flour.png", 
		category=CAT_CRAFT, cat2=C2_PROCESS, 
		sellValue=0.22, buyValue=0.38, 
		description="Used for cooking. Produced by: Flawless Rain Mill, Rain Mill, Press, Provisioner, Stamping Mill, Supplier."},
		
	-- Crafting Materials/Metal & Ore
	["copper bars"] = { page="Copper Bars", 
		iconfile="CopperBar.png", 
		category=CAT_CRAFT, cat2=C2_METALOR, 
		sellValue=0.72, buyValue=1.2, 
		description="Refined copper ore, used for crafting. Produced by: Grill, Furnace, Stamping Mill, Smelter."},
	["copper ore"] = { page="Copper Ore", 
		iconfile="CopperOre.png", 
		category=CAT_CRAFT, cat2=C2_METALOR, 
		sellValue=0.18, buyValue=0.30, 
		description="A soft and malleable metal. Obtained by: Mine."},
	["crystalized dew"] = { page="Crystalized Dew", 
		iconfile="CrystalizedDew.png", 
		category=CAT_CRAFT, cat2=C2_METALOR, 
		sellValue=0.72, buyValue=1.20, 
		description="Crystalized rain essence. Produced by: Forester's Hut, Brickyard, Smelter, Alchemist's Hut."},
		
	-- Crafting Materials/Vessels
	["barrels"] = { page="Barrels", 
		iconfile="Icon_Resource_Barrels.png", 
		category=CAT_CRAFT, cat2=C2_VESSELS, 
		sellValue=0.24, buyValue=0.40, 
		description="Used for crafting. Produced by: Cooperage, Provisioner, Toolshop, Artisan."},
	["pottery"] = { page="Pottery", 
		iconfile="Pottery.png", 
		category=CAT_CRAFT, cat2=C2_VESSELS, 
		sellValue=0.225, buyValue=0.375, 
		description="Used for crafting. Produced by: Bakery, Smokehouse, Brickyard, Stamping Mill."},
	["waterskins"] = { page="Waterskins", 
		iconfile="Waterskins.png", 
		category=CAT_CRAFT, cat2=C2_VESSELS, 
		sellValue=0.225, buyValue=0.375, 
		description="Used for crafting. Produced by: Clothier, Leatherworker, Toolshop, Supplier."},
		
	-- Trade Goods/Valuable Items
	["amber"] = { page="Amber", 
		iconfile="Icon_Resource_Amber.png", 
		category=CAT_TRADE, cat2=C2_VALUABL, 
		sellValue=1.20, buyValue=1.50, 
		description="A widely accepted currency in the kingdom. Crystalized tree blood... fitting."},
	["ancient tablet"] = { page="Ancient Tablet", 
		iconfile="Icon_Resource_AncientTablet.png", 
		category=CAT_TRADE, cat2=C2_VALUABL, 
		sellValue=9.60, buyValue=16.0, 
		description="Valuable sources of knowledge, highly sought after by traders and the Queen herself. They can be found in Dangerous  or Forbidden Glades."},
		
	-- Trade Goods/Packs of Goods
	["pack of building materials"] = { page="Pack of Building Materials", 
		iconfile="Icon_Resource_BuildingMaterials.png", 
		category=CAT_TRADE, cat2=C2_PACKSGO, 
		sellValue=1.05, buyValue=1.60, 
		description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Flawless Rain Mill, Rain Mill, Tinkerer."},
	["pack of crops"] = { page="Pack of Crops", 
		iconfile="Crops.png", 
		category=CAT_TRADE, cat2=C2_PACKSGO, 
		sellValue=0.71, buyValue=1.10, 
		description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Granary, Brewery, Flawless Brewery."},
	["pack of luxury goods"] = { page="Pack of Luxury Goods", 
		iconfile="Luxury.png", 
		category=CAT_TRADE, cat2=C2_PACKSGO, 
		sellValue=0.78, buyValue=1.20, 
		description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Carpenter, Leatherworker, Press."},
	["pack of provisions"] = { page="Pack of Provisions", 
		iconfile="Provisions.png", 
		category=CAT_TRADE, cat2=C2_PACKSGO, 
		sellValue=0.48, buyValue=0.80, 
		description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Makeshift Post, Provisioner, Manufactory."},
	["pack of trade goods"] = { page="Pack of Trade Goods", 
		iconfile="TradeGoods.png", 
		category=CAT_TRADE, cat2=C2_PACKSGO, 
		sellValue=0.96, buyValue=1.60, 
		description="Goods packed for delivery, used for fulfilling orders or trading. Produced by: Lumber Mill, Weaver, Smithy."},
		
	-- Meta resources
	["artifacts"] = { page="Artifacts", 
		iconfile="Icon MetaResource Artifact.png", 
		category=CAT_TRADE, cat2=C2_METARES, 
		sellValue=0.60, buyValue=0.90, 
		description="Curiosities of a varied nature. Fascinating, sinister, and all in between. Can be used to buy more advanced upgrades in the Smoldering City."},
	["food stockpiles"] = { page="Food Stockpiles", 
		iconfile="Icon MetaResource FoodStockpiles.png", 
		category=CAT_TRADE, cat2=C2_METARES, 
		sellValue=0.30, buyValue=0.45, 
		description="A basic currency in the realm. Workers are eager to exchange their labor for food for their families. Can be used to buy upgrades in the Smoldering City."},
	["machinery"] = { page="Machinery", 
		iconfile="Icon MetaResource Machinery.png", 
		category=CAT_TRADE, cat2=C2_METARES, 
		sellValue=0.60, buyValue=0.90, 
		description="Rainpunk technology ripped from the past. Repurposed using skill and labor. Can be used to buy upgrades in the Smoldering City."},
	
	-- Fuel & Exploration/Fuel
	["coal"] = { page="Coal", 
		iconfile="Icon_Resource_Coal.png", 
		category=CAT_FUEXP, cat2=C2_FUELSAC, 
		burnable=true, burnTime=60, sacrificeRate=18, 
		sellValue=0.375, buyValue=0.625, 
		description="Efficient fuel. Obtained by: Mine, Brick Oven, Kiln."},
	["oil"] = { page="Oil", 
		iconfile="Oil.png", 
		category=CAT_FUEXP, cat2=C2_FUELSAC, 
		burnable=true, burnTime=30, sacrificeRate=15, 
		sellValue=0.195, buyValue=0.325, 
		description="Efficient fuel. Obtained by: Butcher, Press, Druid's Hut."},
	["sea marrow"] = { page="Sea Marrow", 
		iconfile="SeaMarrow.png", 
		category=CAT_FUEXP, cat2=C2_FUELSAC, 
		burnable=true, burnTime=60, sacrificeRate=18, 
		sellValue=0.375, buyValue=0.625, 
		description="Efficient fuel. Obtained by: Stonecutters' Camp."},
	["wood"] = { page="Wood", 
		iconfile="Wood.png", 
		category=CAT_FUEXP, cat2=C2_FUELSAC, 
		burnable=true, burnTime=15, sacrificeRate=30, 
		sellValue=0.075, buyValue=0.125, 
		description="An abundant, yet crucial resource. Obtained by: Woodcutters' Camp."},
	
	-- Fuel & Exploration/Tools
	["simple tools"] = { page="Simple Tools", 
		iconfile="SimpleTools.png", 
		category=CAT_FUEXP, cat2=C2_EXPTOOL, 
		sellValue=1.665, buyValue=2.775, 
		description="Used in exploration, for opening caches and completing difficult events. Produced by: Carpenter, Smithy, Toolshop, Tinkerer, Scribe."},
	["infused tools"] = { page="Infused Tools", 
		iconfile="InfusedTools.png", 
		category=CAT_FUEXP, cat2=C2_EXPTOOL, 
		sellValue=2.115, buyValue=3.525, 
		description="Used in exploration, for opening caches and completing difficult events. Produced by: Finesmith, Rainpunk Foundry."},
	
	-- Rainwater
	["clearance water"] = { page="Clearance Water", 
		iconfile="Yellow_30.png", 
		category=CAT_RAINS, cat2=C2_RAINWAT, 
		description="Highly concentrated yellow clearance rainwater. Used to power Rain Engines in crafting-oriented buildings."},
	["drizzle water"] = { page="Drizzle Water", 
		iconfile="Green_11.png", 
		category=CAT_RAINS, cat2=C2_RAINWAT, 
		description="Highly concentrated green drizzle rainwater. Used to power Rain Engines in food-oriented buildings."},
	["storm water"] = { page="Storm Water", 
		iconfile="Blue_14.png", 
		category=CAT_RAINS, cat2=C2_RAINWAT, 
		description="Highly concentrated blue storm rainwater. Used to power Rain Engines in industry-oriented buildings."},
	
	-- Blight Fuel
	["purging fire"] = { page="Purging Fire", 
		iconfile="PurgingFire.png", 
		category=CAT_BLIGH, cat2=C2_PURGING, 
		sellValue=0.375, buyValue=0.625, 
		description="A unique resource used by Blight Fighters to burn down Blightrot Cysts. Produced by: Blight Post."}
	
} -- end of tResourceData



-------------------------------------------------------------------------------
-- Main lookup function
--
-- Accepts the in-game name and returns the corresponding inner table from 
-- tResourceData. It is preferred that callers use the other getter functions 
-- that return specific fields of the inner table rather than the whole thing,
-- to protect variations in this module.
-- @param resourceName the name of the resource to look up
-- @return the inner table from the big data table corresponding to the provided
-- building name, or nil if it doesn't exist
function ResourceData.getData(resourceName)
	
	-- If the argument to this function is empty or nil, save some time by 
	-- skipping the normalize function.
	if not resourceName or "" == resourceName then
		return nil
	end
	
	-- normalize the name and try again
    local resourceName = Utility.normalizeResourceName(resourceName)
	
	-- get the inner table from the big data table and return it; if it doesn't
	-- exist, this will return nil anyway
    return tResourceData[resourceName]
end



---
-- Getter method for the page name for a resource.
-- 
-- Accepts the in-game name of the resource and returns the corresponding name
-- of the page in the wiki for the resource. If the resourceName argument is 
-- formatted exactly as in the game, this will return a string matching the
-- argument. Since normalization is performed, this can be used to ensure proper
-- formatting of the resource's name.
-- @param resourceName the name of the resource
-- @return the name of the page on the wiki, or nil if it doens't exist
function ResourceData.getPagename(resourceName)

	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if the resource didn't exist, then nil was already returned, but if the
	-- page was undefined, this should return nil instead of an empty string
	return tResource.page
end



---
-- Getter method for the icon filename for a resource.
-- 
-- Accepts the in-game name of the resource and returns the corresponding 
-- filename on the wiki for the resource's icon as seen in-game.
-- @param resourceName the name of the resource
-- @return the filename, which might be an empty string, or nil if it doesn't 
-- exist
function ResourceData.getIconFilename(resourceName)

	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- Get the icon filename, if any. If the resource doesn't have an icon,
	-- then return an empty string. Returning nil is reserved for when the 
	-- resource does not exist.
	return tResource.iconfile or ""
end



---
-- Getter method for the categories of a resoruce.
--
-- Accepts the in-game name of the resource and returns the two corresponding 
-- categories. The first is the one seen at the top of the game UI, the second 
-- is a more specific, functional category for perks, buildings, etc.
-- @param resourceName the name of the resource
-- @return the first, top-level category, or nil if it doesn't exist
-- @return the second, more specific and functional category, or nil if it 
-- doesn't exist
function ResourceData.getCategories(resourceName)
	
	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if this does not exist, nil is an okay return value
	return tResource.category, tResource.cat2
end



---
-- Getter method for the eatability of a resoruce.
--
-- Accepts the in-game name of the resource and returns true if the resource can
-- be consumed by villagers as food.
-- @param resourceName the name of the resource
-- @return true if the resource can be eaten as food, nil or false otherwise
function ResourceData.isEatable(resourceName)
	
	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if this does not exist, nil is an okay return value, because nil is falsy
	return tResource.eatable
end



---
-- Getter method for the burnability of a resoruce.
--
-- Accepts the in-game name of the resource and returns true if the resource can
-- be burned in Hearths as fuel.
-- @param resourceName the name of the resource
-- @return true if the resource can be burned as fuel, nil or false otherwise
function ResourceData.isBurnable(resourceName)
	
	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if this does not exist, nil is an okay return value, because nil is falsy
	return tResource.burnable
end



---
-- Getter method for the burn time and sacrifice rate of a resource.
--
-- Accepts the in-game name of the resource and returns the number of seconds 
-- the resource burns in the hearth and the number of items sacrificed per 
-- minute when sacrificed in the hearth. These numbers don't have the same unit, 
-- but they are how the game communicates these two rates.
-- @param resourceName the name of the resource
-- @return the number of seconds the resource burns in the hearth, or nil if 
-- the resource is not burnable
-- @return the number of items per minute when sacrificed in the hearth, and if
-- the resource is not burnable, there will not be a second returned item
function ResourceData.getBurnTimeAndSacrificeRate(resourceName)
	
	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if these do not exist, nil is an okay return value, because nil is falsy
	return tResource.burnTime, tResource.sacrificeRate
end



---
-- Getter method for the selling and buying values of a resource.
--
-- Accepts the in-game name of the resource and returns the value in Amber when
-- selling the resource and the value in Amber when buying the resource.
-- @param resourceName the name of the resource
-- @return the value when selling
-- @return the value when buying
function ResourceData.getSellAndBuyValues(resourceName)
	
	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- if the resource exists but the values are undefined, return zero instead
	-- of nil
	return tResource.sellValue or 0, tResource.buyValue or 0
end



---
-- Getter method for the description for a resource.
-- 
-- Accepts the in-game name of the resource and returns the corresponding 
-- description text, as seen in the game.
-- @param resourceName the name of the resource
-- @return the description of the resource, which might be an empty string, or 
-- nil if it doesn't exist
function ResourceData.getDescription(resourceName)

	-- get the inner table for the resource
	local tResource = ResourceData.getData(resourceName)
	if not tResource then
		return nil
	end
	
	-- Get the description, if any. If the resource doesn't have a description,
	-- then return an empty string. Returning nil is reserved for when the 
	-- resource does not exist.
	return tResource.description or ""
end



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