Module:ResourceData: Difference between revisions

From Against the Storm Official Wiki
m (trying to find the word that's breaking it)
(adding better getter methods, improving the commenting)
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Lua storage table for looking up wiki pages, names, and resources
-- Lua storage module for looking up data about resources, for use in other
-- based on in-game names. All data is in English.
-- 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.
--
--
-- 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,  
-- both Berries = "Berries" and berries = "Berries" which would multiply our
-- but forgives small differences in spacing, apostrophes, and plurals.
-- work.
-- @module ResourceData
-------------------------------------------------------------------------------
 
-- for returning when REQUIRE'd by other Lua modules.
local ResourceData = {}
local ResourceData = {}


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


Utility = Utility or require("Module:Utility") -- need to reuse the normalize methods




 
--
-------------------------------------------------------------------------------
-- Constants
-- Constants
-------------------------------------------------------------------------------
--
-- top-level categories; the main tabs in the top of the game window
local CAT_FOODS = "Food"
local CAT_FOODS = "Food"
local CAT_BUILD = "Building Materials"
local CAT_BUILD = "Building Materials"
Line 30: Line 34:
local CAT_RAINS = "Rainwater"
local CAT_RAINS = "Rainwater"
local CAT_BLIGH = "Blight Fuel"
local CAT_BLIGH = "Blight Fuel"
-- secondary categories, for use in wiki pages
-- Foods
-- Foods
local C2_RAWFOOD = "Raw Food"
local C2_RAWFOOD = "Raw Food"
Line 56: Line 62:




--
-- Class variables
--


-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-- Main data table, with string keys and string values.
-- Primary data table for this module.
-- Some of these are defined inline with string.lower to make the key easier
--
-- to spell and read correctly.
-- This table 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
-- a design decision of this table is to make the key the same as the page name.
-- rest of the data. (The lookup method will handle converting it to lowercase.)
-- (the lookup methods will automatically make it lowercase.)
--
-- that way, whenever .page is referenced, it can be used again to retrieve  
-- *defaults are stored here; these value will be modified during the game by  
-- the rest of the data.
-- perks and city upgrades
local RESOURCE_DATA = {
--  
 
-- Structure:  
---------------------------------------
-- @key a lowercase version of the resource name, with the same spaces,  
--[[ RESOURCE_DATA
-- apostrophes, singular/plural, and spelling
*defaults are stored here; these value will be modified during the game by
-- @field page the name of the wiki page, case-sensitive, but otherwise must be the same as the key
perks and city upgrades
-- @field iconfile a string of the filename.png of the icon used in the game,  
-- iconfile: string: the filename, ending in .png, on the wiki. do not include
-- case-sensitive and must include extension, but without the "File:"
the File: prefix. Align with dev data dumps (from Google Drive) or
-- @field category a string representing the primary in-game category the  
from extracted assets from the Unity Asset Studio.
-- resource belongs to, in the upper UI on the game screen; use the constants
-- page: string: the name of the page on the wiki, case sensitive. this should match
-- defined above
the spelling, spacing, and punctuation in the game
-- @field cat2 a string representing a more specific category, often referenced
-- category: string/constant: the category the good belongs to, in the upper UI on
-- by perks, needs, or buildings, for example, "Complex Food" and "Packs of  
the game screen, for example "Food" or "Consumable Items." useful for building
-- Goods" and "Metal or Ore"; use the constants defined above
tables of similar items. use the constants above.
-- @field eatable true if the good can be eaten, can omit if false
-- cat2: string/constant: a more specific category, often referenced by perks,
-- @field burnable true if the good can be burned or sacrified in a Hearth, can  
needs, or buildings, for example, "Complex Food" and "Packs of goods"  
-- omit if false
and "Metal or Ore"
-- @field burnTime the default* number of seconds the item burns  
-- eatable: boolean: true if the good can be eaten, can omit if false
-- for in a Hearth; can omit if burnable is false
-- burnable: boolean: true if the good can be burned or sacrified in a Hearth, can omit if false
-- @field sacrificeRate the default* number of items sacrified per minute in a  
-- burnTime: int: default* seconds the item burns for in a Hearth, can omit if burnable is false
-- Hearth; can omit if burnable is false
-- sacrificedRate: int: 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  
-- sellValue: float: default* value when selling, in Amber (the spreadsheet shows value as 10x, so 2.4 = 0.24 in-game)
-- spreadsheet shows the value as 10x, so 2.4 = 0.24 Amber in-game)
-- buyValue: float: default* value when buying, in Amber
-- @field buyValue a decimal, the default* value in Amber when buying
-- description: string: the in-game description.
-- @field description the in-game description
--]]
-- @table tResourceData the primary data table for resources
---------------------------------------
local tResourceData = {
     -- Food/Raw Food
     -- Food/Raw Food
["berries"] = {iconfile="Icon_Resource_Berries.png", page="Berries", 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."},
["berries"] = { page="Berries",
["eggs"] = {iconfile="Eggs.png", page="Eggs", category=CAT_FOODS, cat2=C2_RAWFOOD, eatable=true, sellValue=0.24, buyVale=0.40, description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."},
iconfile="Icon_Resource_Berries.png",  
["insects"] = {iconfile="Insects.png", page="Insects", 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."},
category=CAT_FOODS, cat2=C2_RAWFOOD,  
["meat"] = {iconfile="Meat.png", page="Meat", 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."},
eatable=true,  
["mushrooms"] = {iconfile="Mushrooms.png", page="Mushrooms", 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."},
sellValue=0.24, buyValue=0.40,  
["roots"] = {iconfile="Roots.png", page="Roots", 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."},
description="Common food source. Obtained by: Plantation, Hallowed Herb Garden, Herbalists' Camp, Small Herbalists' Camp."},
["vegetables"] = {iconfile="Vegetables.png", page="Vegetables", 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."},
["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
-- Food/Complex Food
["biscuits"] = {iconfile="Icon_Resource_Biscuits.png", page="Biscuits", 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."},
["biscuits"] = { page="Biscuits",
["jerky"] = {iconfile="Jerky.png", page="Jerky", 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."},
iconfile="Icon_Resource_Biscuits.png",  
["pickled goods"] = {iconfile="PickledGoods.png", page="Pickled Goods", 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."},
category=CAT_FOODS, cat2=C2_COMPLEX,  
["pie"] = {iconfile="Pie.png", page="Pie", category=CAT_FOODS, cat2=C2_COMPLEX, eatable=true, sellValue=0.30, buyValue=0.50, description="A Human specialty. Produced by: Bakery, Brick Oven, Furnace."},
eatable=true,  
["skewers"] = {iconfile="Skewers.png", page="Skewers", category=CAT_FOODS, cat2=C2_COMPLEX, eatable=true, sellValue=0.24, buyValue=0.40, description="A Lizard specialty. Produced by: Cookhouse, Grill, Butcher."},
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
-- Building Materials
["bricks"] = {iconfile="Icon_Resource_Bricks.png", page="Bricks", 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."},
["bricks"] = { page="Bricks",
["fabric"] = {iconfile="Fabric.png", page="Fabric", 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."},
iconfile="Icon_Resource_Bricks.png",  
["pipes"] = {iconfile="En_craft_23.png", page="Pipes", 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."},
category=CAT_BUILD, cat2=C2_CONSTRU,  
["planks"] = {iconfile="Planks.png", page="Planks", 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."},
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
-- Building Materials/Rare
["parts"] = {iconfile="Parts.png", page="Parts", 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."},
["parts"] = { page="Parts",  
["wildfire essence"] = {iconfile="Wildfire Essence.png", page="Wildfire Essence", 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."},
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
-- Consumable Items/Clothing
["coats"] = {iconfile="Coats.png", page="Coats", 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."},
["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
-- Consumable Items/Service Items
["ale"] = {iconfile="Icon_Resource_Ale.png", page="Ale", 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."},
["ale"] = { page="Ale",
["cosmetics"] = {iconfile="Cosmetics.png", page="Cosmetics", 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."},
iconfile="Icon_Resource_Ale.png",  
["incense"] = {iconfile="Incense.png", page="Incense", 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."},
category=CAT_CONSU, cat2=C2_SERVICE,  
["scrolls"] = {iconfile="Scrolls.png", page="Scrolls", 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."},
sellValue=0.21, buyValue=0.35,  
["training gear"] = {iconfile="TrainingGear.png", page="Training Gear", 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."},
description="Used for Leisure at: Tavern, Monastery, Forum. Produced by: Grill, Brewery, Flawless Brewery, Tinctury, Scribe."},
["wine"] = {iconfile="Wine.png", page="Wine", 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."},
["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
-- Crafting Materials/Raw Materials
["clay"] = {iconfile="Icon_Resource_Clay.png", page="Clay", 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."},
["clay"] = { page="Clay",
["grain"] = {iconfile="Grain.png", page="Grain", 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."},
iconfile="Icon_Resource_Clay.png",  
["herbs"] = {iconfile="Herbs.png", page="Herbs", 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."},
category=CAT_CRAFT, cat2=C2_RAWMATS,  
["leather"] = {iconfile="Leather.png", page="Leather", category=CAT_CRAFT, cat2=C2_RAWMATS, sellValue=0.18, buyValue=0.30, description="Used for crafting. Obtained by: Ranch."},
sellValue=0.18, buyValue=0.30,  
["pigment"] = {iconfile="Pigment.png", page="Pigment", category=CAT_CRAFT, cat2=C2_RAWMATS, sellValue=0.15, buyValue=0.25, description="Used for crafting. Produced by: Cookhouse, Artisan, Tinctury, Manufactory."},
description="Flesh of the earth. Used mostly for crafting. Obtained by: Stonecutters' Camp, Clay Pit."},
["plant fiber"] = {iconfile="PlantFiber.png", page="Plant Fiber", 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."},
["grain"] = { page="Grain",  
["reeds"] = {iconfile="Reeds.png", page="Reeds", category=CAT_CRAFT, cat2=C2_RAWMATS, sellValue=0.18, buyValue=0.30, description="Used for crafting. Obtained by: Harvesters' Camp, Clay Pit."},
iconfile="Grain.png",  
["resin"] = {iconfile="Resin.png", page="Resin", category=CAT_CRAFT, cat2=C2_RAWMATS, sellValue=0.18, buyValue=0.30, description="Used for crafting. Obtained by: Forester's Hut."},
category=CAT_CRAFT, cat2=C2_RAWMATS,  
["stone"] = {iconfile="Stone.png", page="Stone", 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."},
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
-- Crafting Materials/Processed Materials
["flour"] = {iconfile="Flour.png", page="Flour", 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."},
["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
-- Crafting Materials/Metal & Ore
["copper bars"] = {iconfile="CopperBar.png", page="Copper Bars", 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 bars"] = { page="Copper Bars",
["copper ore"] = {iconfile="CopperOre.png", page="Copper Ore", category=CAT_CRAFT, cat2=C2_METALOR, sellValue=0.18, buyValue=0.30, description="A soft and malleable metal. Obtained by: Mine."},
iconfile="CopperBar.png",  
["crystalized dew"] = {iconfile="CrystalizedDew.png", page="Crystalized Dew", 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."},
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
-- Crafting Materials/Vessels
["barrels"] = {iconfile="Icon_Resource_Barrels.png", page="Barrels", category=CAT_CRAFT, cat2=C2_VESSELS, sellValue=0.24, buyValue=0.40, description="Used for crafting. Produced by: Cooperage, Provisioner, Toolshop, Artisan."},
["barrels"] = { page="Barrels",
["pottery"] = {iconfile="Pottery.png", page="Pottery", category=CAT_CRAFT, cat2=C2_VESSELS, sellValue=0.225, buyValue=0.375, description="Used for crafting. Produced by: Bakery, Smokehouse, Brickyard, Stamping Mill."},
iconfile="Icon_Resource_Barrels.png",  
["waterskins"] = {iconfile="Waterskins.png", page="Waterskins", category=CAT_CRAFT, cat2=C2_VESSELS, sellValue=0.225, buyValue=0.375, description="Used for crafting. Produced by: Clothier, Leatherworker, Toolshop, Supplier."},
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
-- Trade Goods/Valuable Items
["amber"] = {iconfile="Icon_Resource_Amber.png", page="Amber", category=CAT_TRADE, cat2=C2_VALUABL, sellValue=1.20, buyValue=1.50, description="A widely accepted currency in the kingdom. Crystalized tree blood... fitting."},
["amber"] = { page="Amber",
["ancient tablet"] = {iconfile="Icon_Resource_AncientTablet.png", page="Ancient Tablet", 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."},
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
-- Trade Goods/Packs of Goods
["pack of building materials"] = {iconfile="Icon_Resource_BuildingMaterials.png", page="Pack of Building Materials", 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 building materials"] = { page="Pack of Building Materials",  
["pack of crops"] = {iconfile="Crops.png", page="Pack of Crops", 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."},
iconfile="Icon_Resource_BuildingMaterials.png",
["pack of luxury goods"] = {iconfile="Luxury.png", page="Pack of Luxury Goods", 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."},
category=CAT_TRADE, cat2=C2_PACKSGO,  
["pack of provisions"] = {iconfile="Provisions.png", page="Pack of Provisions", 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."},
sellValue=1.05, buyValue=1.60,  
["pack of trade goods"] = {iconfile="TradeGoods.png", page="Pack of Trade Goods", 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."},
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
-- Meta resources
["artifacts"] = {iconfile="Icon MetaResource Artifact.png", page="Artifacts", 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."},
["artifacts"] = { page="Artifacts",
["food stockpiles"] = {iconfile="Icon MetaResource FoodStockpiles.png", page="Food Stockpiles", 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."},
iconfile="Icon MetaResource Artifact.png",  
["machinery"] = {iconfile="Icon MetaResource Machinery.png", page="Machinery", 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."},
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
-- Fuel & Exploration/Fuel
["coal"] = {iconfile="Icon_Resource_Coal.png", page="Coal", category=CAT_FUEXP, cat2=C2_FUELSAC, burnable=true, burnTime=60, sacrificedRate=18, sellValue=0.375, buyValue=0.625, description="Efficient fuel. Obtained by: Mine, Brick Oven, Kiln."},
["coal"] = { page="Coal",
["oil"] = {iconfile="Oil.png", page="Oil", category=CAT_FUEXP, cat2=C2_FUELSAC, burnable=true, burnTime=30, sacrifiedRate=15, sellValue=0.195, buyValue=0.325, description="Efficient fuel. Obtained by: Butcher, Press, Druid's Hut."},
iconfile="Icon_Resource_Coal.png",  
["sea marrow"] = {iconfile="SeaMarrow.png", page="Sea Marrow", category=CAT_FUEXP, cat2=C2_FUELSAC, burnable=true, burnTime=60, sacrifiedRate=18, sellValue=0.375, buyValue=0.625, description="Efficient fuel. Obtained by: Stonecutters' Camp."},
category=CAT_FUEXP, cat2=C2_FUELSAC,  
["wood"] = {iconfile="Wood.png", page="Wood", category=CAT_FUEXP, cat2=C2_FUELSAC, burnable=true, burnTime=15, sacrifiedRate=30, sellValue=0.075, buyValue=0.125, description="An abundant, yet crucial resource. Obtained by: Woodcutters' Camp."},
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
-- Fuel & Exploration/Tools
["simple tools"] = {iconfile="SimpleTools.png", page="Simple Tools", 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."},
["simple tools"] = { page="Simple Tools",
["infused tools"] = {iconfile="InfusedTools.png", page="Infused Tools", 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."},
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
-- Rainwater
["clearance water"] = {iconfile="Yellow_30.png", page="Clearance Water", category=CAT_RAINS, cat2=C2_RAINWAT, description="Highly concentrated yellow clearance rainwater. Used to power Rain Engines in crafting-oriented buildings."},
["clearance water"] = { page="Clearance Water",
["drizzle water"] = {iconfile="Green_11.png", page="Drizzle Water", category=CAT_RAINS, cat2=C2_RAINWAT, description="Highly concentrated green drizzle rainwater. Used to power Rain Engines in food-oriented buildings."},
iconfile="Yellow_30.png",  
["storm water"] = {iconfile="Blue_14.png", page="Storm Water", category=CAT_RAINS, cat2=C2_RAINWAT, description="Highly concentrated blue storm rainwater. Used to power Rain Engines in industry-oriented buildings."},
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
-- Blight Fuel
["purging fire"] = {iconfile="PurgingFire.png", page="Purging Fire", 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."}
["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 functions
-- Main lookup function
-- Accepts the in-game name and returns the name of the page on the wiki
-- associated with that in-game item, resource, building, etc.
--
--
-- Some associated lookup functions are necessary to hide the inner table
-- Accepts the in-game name and returns the corresponding inner table from
-- names from outside functions. For example, getIconFilename so that we can
-- tResourceData. It is preferred that callers use the other getter functions
-- change the name of .iconfile without breaking other modules.
-- 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






-- returns the whole data table for the specified key
---
-- need to run normalize function first
-- Getter method for the page name for a resource.
function ResourceData.getData(strArg)
--
-- 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)


-- normalize input
-- get the inner table for the resource
    local strArg = ResourceData.normalizeName(strArg)
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
end
-- Get it from the big table below and return it.
-- if the resource didn't exist, then nil was already returned, but if the
    return RESOURCE_DATA[strArg]
-- page was undefined, this should return nil instead of an empty string
return tResource.page
end
end






-- simpler version if all that's needed is the iconfile.
---
-- error handling by the calling module is required.
-- Getter method for the icon filename for a resource.
function ResourceData.getIconFilename(strArg)
--
-- 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)


local data = getData(strArg)
-- get the inner table for the resource
local tResource = ResourceData.getData(resourceName)
if not tResource then
return nil
end
-- if this particular data block doesn't have a iconfile, this will return nil
-- Get the icon filename, if any. If the resource doesn't have an icon,
-- therefore, error handling will be necessary
-- then return an empty string. Returning nil is reserved for when the
return data.iconfile or nil
-- resource does not exist.
return tResource.iconfile or ""
end
end
-- and if the table is provided instead of the name to lookup
function ResourceData.getIconFilenameFromData(RESOURCE_DATA)


-- if this particular data block doesn't have a iconfile, this will return nil
 
-- therefore, error handling will be necessary
 
return RESOURCE_DATA.iconfile or nil
---
-- 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
end






-- simpler version if all that's needed is the page name.
---
-- error handling by the calling module is required.
-- Getter method for the eatability of a resoruce.
function ResourceData.getPagename(strArg)
--
-- 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


local data = getData(strArg)
 
 
---
-- 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)
-- if this particular data block doesn't have a page name, this will return nil
-- get the inner table for the resource
-- therefore, error handling will be necessary
local tResource = ResourceData.getData(resourceName)
return data.page or nil
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
end
-- and if the table is provided instead of the name to lookup
function ResourceData.getPagenameFromData(RESOURCE_DATA)


-- if this particular data block doesn't have a page name, this will return nil
 
-- therefore, error handling will be necessary
 
return RESOURCE_DATA.page or nil
---
-- 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
end






-- simpler version if all that's needed is the description.
---
-- error handling by the calling module is required.
-- Getter method for the selling and buying values of a resource.
function ResourceData.getDescription(strArg)
--
 
-- Accepts the in-game name of the resource and returns the value in Amber when
local data = getData(strArg)
-- 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 this particular data block doesn't have a description, this will return nil
-- if the resource exists but the values are undefined, return zero instead
-- therefore, error handling will be necessary
-- of nil
return data.description or nil
return tResource.sellValue or 0, tResource.buyValue or 0
end
end
-- and if the table is provided instead of the name to lookup
function ResourceData.getDescriptionFromData(RESOURCE_DATA)


-- if this particular data block doesn't have a description, this will return nil
 
-- therefore, error handling will be necessary
 
return RESOURCE_DATA.description or nil
---
-- 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
end






-------------------------------------------------------------------------------
-- Return this class when required into another module.
-- Return when required into another Module.
-------------------------------------------------------------------------------
return ResourceData
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