Module:ResourceData: Difference between revisions

From Against the Storm Official Wiki
(forgot to change scope of helper function to new Utility)
(adding better getter methods, improving the commenting)
 
(3 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 table contains some deconfliction, but only for spaces, apostrophes, and
-- The main data table stores all available data about resources themselves and  
-- some singular/plural.
-- relies on other modules to store relationships between resources and
-- Use in-game names for things, and help keep this table up-to-date as the
-- buildings, services, etc.
-- game evolves.
--
--
-- 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 35: 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 61: 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 = Utility.normalizeResourceName(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