Module:ResourceData: Difference between revisions
From Against the Storm Official Wiki
m (Aeredor moved page Module:IconFilenames to Module:ResourceData without leaving a redirect: expanding the data beyond icon filenames; specializing this data file to resources) |
(adding better getter methods, improving the commenting) |
||
(22 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- Lua storage | -- Lua storage module for looking up data about resources, for use in other | ||
-- modules and templates, for example, {{Resource_Link}}. | |||
-- | |||
-- | -- | ||
-- The table | -- 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 = { | |||
-- Raw Food | -- Food/Raw Food | ||
["berries"] = "Berries.png", | ["berries"] = { page="Berries", | ||
["eggs"] = "Eggs.png", | iconfile="Icon_Resource_Berries.png", | ||
["insects"] = "Insects.png", | category=CAT_FOODS, cat2=C2_RAWFOOD, | ||
["meat"] = "Meat.png", | eatable=true, | ||
["mushrooms"] = "Mushrooms.png", | sellValue=0.24, buyValue=0.40, | ||
["roots"] = "Roots.png", | description="Common food source. Obtained by: Plantation, Hallowed Herb Garden, Herbalists' Camp, Small Herbalists' Camp."}, | ||
["vegetables"] = "Vegetables.png", | ["eggs"] = { page="Eggs", | ||
-- Complex Food | iconfile="Eggs.png", | ||
["biscuits"] = "Biscuits.png", | category=CAT_FOODS, cat2=C2_RAWFOOD, | ||
["jerky"] = "Jerky.png", | eatable=true, | ||
sellValue=0.24, buyValue=0.40, | |||
["pickled goods"] = "PickledGoods.png", | description="Common food source. Obtained by: Ranch, Trappers' Camp, Small Trappers' Camp."}, | ||
["pie"] = "Pie.png", | ["insects"] = { page="Insects", | ||
["skewers"] = "Skewers.png", | 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 | -- Building Materials | ||
["bricks"] = "Bricks | ["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 | |||
[" | |||
[" | |||
[" | |||
[" | |||
[" | |||
} | |||
Line 244: | Line 462: | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
-- Main lookup function | -- Main lookup function | ||
-- Accepts the name of | -- | ||
-- filename | -- 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 | |||
function | --- | ||
-- 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 | -- 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 | return ResourceData | ||
return |
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