Module:ResourceData: Difference between revisions

From Against the Storm Official Wiki
(forgot fuel and exploration resources for testing)
(adding better getter methods, improving the commenting)
 
(26 intermediate revisions by the same user not shown)
Line 1: Line 1:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Lua storage table for looking up image files based on in-game names.
-- Lua storage module for looking up data about resources, for use in other
-- modules and templates, for example, {{Resource_Link}}.
--
--
--
-- The table contains some deconfliction, but only for spaces and just a few
-- The main data table stores all available data about resources themselves and  
-- cases of singular and plural versions.
-- relies on other modules to store relationships between resources and  
-- Use in-game names for things, and help keep this table updated as the game
-- buildings, services, etc.
-- is updated.
--
--
-- Using the table requires a locally defined lookup function that performs
-- The helper functions include getters (to keep the data hidden) and a large
-- a string.lower on the argument so that the lookup table can accept any case
-- normalization method to provide some robustness when using the template and
-- and still function properly. Otherwise, we would need the table to define
-- from other Lua modules. Looking up a resource requires using in-game names,
-- Berries = "Berries.png" and berries = "Berries.png" which would suck.
-- 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


-- for returning when REQUIRE'd by other Lua modules.
local IconFilenames = {}




-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Main lookup function
-- Main lookup function
-- Accepts the name of an icon, as it appears in the game, and returns the
--
-- filename associated with that in-game item, resource, building, etc.
-- 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
 


local function getIconFilename(strIconName)


-- Convert the key to lower case for case-insensitive lookups
---
    local strLowercaseIconName = string.lower(strIconName)
-- 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 it from the big table below and return it.
-- get the inner table for the resource
    return tableStrStrFilenames[strLowercaseIconName]
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
end






-------------------------------------------------------------------------------
---
-- Main data table, with string keys and string values.
-- Getter method for the description for a resource.
-- Some of these are defined inline with string.lower to make the key easier
--  
-- to spell and read correctly.
-- 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)


local tableStrStrFilenames = {
-- get the inner table for the resource
    -- Raw Food
local tResource = ResourceData.getData(resourceName)
["berries"] = "Berries.png",
if not tResource then
["eggs"] = "Eggs.png",
return nil
["insects"] = "Insects.png",
end
["meat"] = "Meat.png",
["mushrooms"] = "Mushrooms.png",
-- Get the description, if any. If the resource doesn't have a description,
["roots"] = "Roots.png",
-- then return an empty string. Returning nil is reserved for when the
["vegetables"] = "Vegetables.png",
-- resource does not exist.
-- Complex Food
return tResource.description or ""
["biscuits"] = "Biscuits.png",
end
["jerky"] = "Jerky.png",
[string.lower("PickledGoods")] = "PickledGoods.png",
["pickled goods"] = "PickledGoods.png",
["pie"] = "Pie.png",
["skewers"] = "Skewers.png",
-- Building Materials
["bricks"] = "Bricks.png",
["fabric"] = "Fabric.png",
["planks"] = "Planks.png",
["parts"] = "Parts.png",
[string.lower("WildfireEssence")] = "Wildfire Essence.png",
["wildfire essence"] = "Wildfire Essence.png",
-- Consumable Items
["coats"] = "Coats.png",
["ale"] = "Ale.png",
["cosmetics"] = "Cosmetics.png",
["incense"] = "Incense.png",
["scrolls"] = "Scrolls.png",
[string.lower("TrainingGear")] = "TrainingGear.png",
["training gear"] = "TrainingGear.png",
["wine"] = "Wine.png",
-- Crafting Materials
["clay"] = "Clay.png",
[string.lower("CopperOre")] = "CopperOre.png",
["copper ore"] = "CopperOre.png",
[string.lower("CrystalizedDew")] = "CrystalizedDew.png",
["crystalized dew"] = "CrystalizedDew.png",
["grain"] = "Grain.png",
["herbs"] = "Herbs.png",
["leather"] = "Leather.png",
["plantfiber"] = "PlantFiber.png",
["plant fiber"] = "PlantFiber.png",
["reeds"] = "Reeds.png",
["reed"] = "Reeds.png",
["resin"] = "Resin.png",
["sparkdew"] = "Sparkdew.png",
["stone"] = "Stone.png",
-- Refined Crafting Materials
["barrels"] = "Barrels.png",
["barrel"] = "Barrels.png",
["copperbar"] = "CopperBar.png",
["copper bar"] = "CopperBar.png",
["flour"] = "Flour.png",
["pigment"] = "Pigment.png",
["pigments"] = "Pigment.png",
["pottery"] = "Pottery.png",
["waterskins"] = "Waterskins.png",
["waterskin"] = "Waterskins.png",
-- Trade Goods
["buildingmaterials"] = "BuildingMaterials.png",
["packofbuildingmaterials"] = "BuildingMaterials.png",
["crops"] = "Crops.png",
["packofcrops"] = "Crops.png",
["luxurygoods"] = "Luxury.png",
["packofluxurygoods"] = "Luxury.png",
["provisions"] = "Provisions.png",
["packofprovisions"] = "Provisions.png",
["tradegoods"] = "TradeGoods.png",
["packoftradegoods"] = "TradeGoods.png",
["amber"] = "Amber.png",
[string.lower("AncientTablet")] = "AncientTablet.png",
["ancient tablet"] = "AncientTablet.png",
["foodstockpiles"] = "Icon MetaResource FoodStockpiles.png",
["food stockpiles"] = "Icon MetaResource FoodStockpiles.png",
["metafood"] = "Icon MetaResource FoodStockpiles.png",
["machinery"] = "Icon MetaResource Machinery.png",
["metamachinery"] = "Icon MetaResource Machinery.png",
["artifact"] = "Icon MetaResource Artifact.png",
["artifacts"] = "Icon MetaResource Artifact.png",
[string.lower("MetaArtifact")] = "Icon MetaResource Artifact.png",
-- Fuel & Exploration
["coal"] = "Coal.png",
["oil"] = "Oil.png",
["seamarrow"] = "SeaMarrow.png",
["sea marrow"] = "SeaMarrow.png",
["wood"] = "Wood.png",
["simpletools"] = "SimpleTools.png",
["simple tools"] = "SimpleTools.png",
["infusedtools"] = "InfusedTools.png",
["infused tools"] = "InfusedTools.png",
["purgingfire"] = "PurgingFire.png",
["purging fire"] = "PurgingFire.png"
}






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

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