magicalities/register.lua

546 lines
14 KiB
Lua

---------------------------
-- Register all crystals --
---------------------------
for name, data in pairs(magicalities.elements) do
if not data.inheritance then
magicalities.register_crystal(name, data.description, data.color)
end
end
-----------
-- Wands --
-----------
-- Iron
magicalities.wands.register_wand("steel", {
description = "Steel-Capped Wand",
image = "magicalities_wand_iron.png",
wand_cap = 25,
})
-- Gold
magicalities.wands.register_wand("gold", {
description = "Gold-Capped Wand",
image = "magicalities_wand_gold.png",
wand_cap = 50,
})
-- Tellium
magicalities.wands.register_wand("tellium", {
description = "Tellium-Capped Wand",
image = "magicalities_wand_tellium.png",
wand_cap = 100,
})
-----------------------------
-- Arcane crafting recipes --
-----------------------------
local recipes = {
{
input = {
{"default:gold_ingot", "default:glass", "default:gold_ingot"},
{"default:glass", "", "default:glass"},
{"default:gold_ingot", "default:glass", "default:gold_ingot"},
},
output = "magicalities:element_ring",
requirements = {
["water"] = 15,
["earth"] = 15,
["light"] = 15,
["fire"] = 15,
["dark"] = 15,
["air"] = 15,
},
learnable = true
},
{
input = {
{"", "", "magicalities:cap_gold"},
{"", "magicalities:wand_core", ""},
{"group:crystal", "", ""}
},
output = "magicalities:wand_gold",
requirements = {
["water"] = 25,
["earth"] = 25,
["light"] = 25,
["fire"] = 25,
["dark"] = 25,
["air"] = 25,
},
learnable = true
},
{
input = {
{"", "magicalities:focus_atk_earth", "magicalities:cap_tellium"},
{"magicalities:tellium", "magicalities:wand_core", "magicalities:focus_atk_water"},
{"group:crystal", "magicalities:tellium", ""}
},
output = "magicalities:wand_tellium",
requirements = {
["water"] = 50,
["earth"] = 50,
["light"] = 50,
["fire"] = 50,
["dark"] = 50,
["air"] = 50,
},
learnable = {
depends = {"magicalities:wand_gold", "magicalities:focus_atk_earth", "magicalities:focus_atk_water"}
}
},
{
input = {
{"default:gold_ingot", "default:gold_ingot", "default:gold_ingot"},
{"default:gold_ingot", "", "default:gold_ingot"},
},
output = "magicalities:cap_gold",
requirements = {
["earth"] = 5,
["light"] = 5,
["dark"] = 5,
}
},
{
input = {
{"magicalities:tellium", "magicalities:tellium", "magicalities:tellium"},
{"magicalities:tellium", "", "magicalities:tellium"},
},
output = "magicalities:cap_tellium",
requirements = {
["earth"] = 25,
["light"] = 25,
["dark"] = 25,
}
},
{
input = {
{"group:crystal", "magicalities:tellium", "group:crystal"},
{"magicalities:tellium", "group:crystal", "magicalities:tellium"},
{"group:crystal", "magicalities:tellium", "group:crystal"}
},
output = "magicalities:focus_blank",
requirements = {
["light"] = 10,
["dark"] = 10,
},
learnable = {
depends = {"magicalities:tellium"}
}
},
{
input = {
{"magicalities:crystal_earth", "magicalities:tellium", "magicalities:crystal_earth"},
{"magicalities:tellium", "magicalities:focus_blank", "magicalities:tellium"},
{"magicalities:crystal_earth", "magicalities:tellium", "magicalities:crystal_earth"}
},
output = "magicalities:focus_atk_earth",
requirements = {
["earth"] = 50,
},
learnable = {
depends = {"magicalities:focus_blank"}
}
},
{
input = {
{"magicalities:crystal_air", "magicalities:tellium", "magicalities:crystal_air"},
{"magicalities:tellium", "magicalities:focus_blank", "magicalities:tellium"},
{"magicalities:crystal_air", "magicalities:tellium", "magicalities:crystal_air"}
},
output = "magicalities:focus_atk_air",
requirements = {
["air"] = 50,
},
learnable = {
depends = {"magicalities:focus_blank"}
}
},
{
input = {
{"magicalities:crystal_water", "magicalities:tellium", "magicalities:crystal_water"},
{"magicalities:tellium", "magicalities:focus_blank", "magicalities:tellium"},
{"magicalities:crystal_water", "magicalities:tellium", "magicalities:crystal_water"}
},
output = "magicalities:focus_atk_water",
requirements = {
["water"] = 50,
},
learnable = {
depends = {"magicalities:focus_blank"}
}
},
{
input = {
{"magicalities:crystal_fire", "magicalities:tellium", "magicalities:crystal_fire"},
{"magicalities:tellium", "magicalities:focus_blank", "magicalities:tellium"},
{"magicalities:crystal_fire", "magicalities:tellium", "magicalities:crystal_fire"}
},
output = "magicalities:focus_atk_fire",
requirements = {
["fire"] = 50,
},
learnable = {
depends = {"magicalities:focus_blank"}
}
},
{
input = {
{"magicalities:crystal_earth", "default:dirt", "magicalities:crystal_light"},
{"magicalities:transterra", "magicalities:focus_atk_earth", "magicalities:transterra"},
{"magicalities:crystal_light", "default:stone", "magicalities:crystal_earth"}
},
output = "magicalities:focus_swap",
requirements = {
["earth"] = 25,
["light"] = 25,
},
learnable = {
depends = {"magicalities:focus_atk_earth"}
}
},
{
input = {
{"magicalities:crystal_earth", "magicalities:tellium", "magicalities:transterra"},
{"magicalities:tellium", "magicalities:focus_blank", "magicalities:tellium"},
{"magicalities:transterra", "magicalities:tellium", "magicalities:crystal_earth"}
},
output = "magicalities:focus_tunnel",
requirements = {
["earth"] = 25,
["dark"] = 25,
},
learnable = {
depends = {"magicalities:focus_blank", "magicalities:transterra"}
}
},
{
input = {
{"magicalities:crystal_air", "", "magicalities:crystal_air"},
{"", "magicalities:focus_atk_air", ""},
{"magicalities:crystal_air", "", "magicalities:crystal_air"}
},
output = "magicalities:focus_teleport",
requirements = {
["air"] = 10,
},
learnable = {
depends = {"magicalities:focus_atk_air"}
}
},
{
input = {
{"magicalities:crystal_light", "magicalities:crystal_block_light", "magicalities:crystal_light"},
{"default:stone", "magicalities:focus_blank", "default:stone"},
{"magicalities:crystal_light", "magicalities:crystal_block_light", "magicalities:crystal_light"}
},
output = "magicalities:focus_light",
requirements = {
["light"] = 10,
},
learnable = {
depends = {"magicalities:focus_blank"}
}
},
{
input = {
{"magicalities:tellium", "magicalities:tellium", ""},
{"magicalities:tellium", "magicalities:transterra", ""},
{"", "default:stick", ""}
},
output = "magicalities:axe_tellium",
requirements = {
["air"] = 45,
["light"] = 45,
["earth"] = 15
},
learnable = {
depends = {"magicalities:tellium", "magicalities:transterra", "magicalities:wand_gold"}
}
},
{
input = {
{"magicalities:tellium", "magicalities:tellium", "magicalities:tellium"},
{"", "magicalities:transterra", ""},
{"", "default:stick", ""}
},
output = "magicalities:pick_tellium",
requirements = {
["air"] = 45,
["light"] = 15,
["earth"] = 45
},
learnable = {
depends = {"magicalities:tellium", "magicalities:transterra", "magicalities:wand_gold"}
}
},
{
input = {
{"", "magicalities:tellium", ""},
{"", "magicalities:transterra", ""},
{"", "default:stick", ""}
},
output = "magicalities:shovel_tellium",
requirements = {
["air"] = 45,
["dark"] = 15,
["earth"] = 45
},
learnable = {
depends = {"magicalities:tellium", "magicalities:transterra", "magicalities:wand_gold"}
}
},
{
input = {
{"", "magicalities:tellium", ""},
{"", "magicalities:tellium", ""},
{"", "magicalities:transterra", ""}
},
output = "magicalities:sword_tellium",
requirements = {
["air"] = 45,
["dark"] = 45,
["light"] = 45,
["earth"] = 45,
["fire"] = 15
},
learnable = {
depends = {"magicalities:tellium", "magicalities:transterra", "magicalities:wand_gold"}
}
}
}
for _, recipe in pairs(recipes) do
magicalities.arcane.register_recipe(recipe)
end
--------------
-- Cauldron --
--------------
local cauldron_recipes = {
{
items = {"default:steel_ingot", "default:obsidian"},
requirements = {
earth = 1,
dark = 1,
},
output = "magicalities:tellium",
learnable = true
},
{
items = {"default:stone", "default:dirt", "magicalities:crystal_fire"},
requirements = {
fire = 5,
earth = 5,
},
output = "magicalities:transterra",
learnable = true
}
}
for _, recipe in pairs(cauldron_recipes) do
magicalities.cauldron.register_recipe(recipe)
end
--------------------
-- Basic Crafting --
--------------------
minetest.register_craft({
recipe = {
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"", "default:steel_ingot", "default:steel_ingot"},
{"", "", "default:steel_ingot"},
},
output = "magicalities:cap_steel",
})
minetest.register_craft({
recipe = {
{"", "default:stick"},
{"default:stick", ""},
},
output = "magicalities:wand_core",
})
minetest.register_craft({
recipe = {
{"", "", "magicalities:cap_steel"},
{"", "magicalities:wand_core", ""},
{"group:crystal", "", ""}
},
output = "magicalities:wand_steel",
})
minetest.register_craft({
recipe = {
{"group:tree", "group:tree", "group:tree"},
{"", "group:tree", ""},
{"group:tree", "group:tree", "group:tree"}
},
output = "magicalities:table",
})
minetest.register_craft({
recipe = {
{"default:steelblock", "", "default:steelblock"},
{"default:steelblock", "", "default:steelblock"},
{"default:steelblock", "default:steelblock", "default:steelblock"}
},
output = "magicalities:cauldron",
})
if minetest.registered_items["mobs:chicken_feather"] then
minetest.register_craft({
recipe = {
{"mobs:chicken_feather"},
{"group:color_black"},
{"default:glass"}
},
output = "magicalities:ink_and_quill",
})
else
minetest.register_craft({
recipe = {
{"group:color_white"},
{"group:color_black"},
{"default:glass"}
},
output = "magicalities:ink_and_quill",
})
end
local function _flatten(arr)
local result = {}
for i,v in ipairs(arr) do
for j,b in ipairs(v) do
table.insert(result, b)
end
end
return result
end
if minetest.get_modpath("craftguide") ~= nil then
local function construct_gridset(list)
local final = {}
for a,v in pairs(list) do
local height = math.ceil(a / 3)
if not final[height] then
if v == "" then v = "," end
final[height] = v
else
final[height] = final[height] .. "," .. v
end
end
return final
end
local function register_craftguide_recipe(type,output,items)
craftguide.register_craft({
type = type,
output = output,
items = construct_gridset(items),
})
end
craftguide.register_craft_type("arcane", {
description = "Arcane Crafting",
icon = "magicalities_table_arcane_top.png",
})
for _, recipe in pairs(recipes) do
register_craftguide_recipe("arcane", recipe.output, _flatten(recipe.input))
end
-- How to make things with wand
craftguide.register_craft_type("wand", {
description = "Use Wand",
icon = "magicalities_wand_iron.png",
})
for g,v in pairs(magicalities.wands.transform_recipes) do
if v.result and type(v.result) == "string" then
register_craftguide_recipe("wand", v.result, {g})
end
end
-- Cauldron
craftguide.register_craft_type("cauldron", {
description = "Cauldron",
icon = "magicalities_cauldron.png",
})
for g,v in pairs(cauldron_recipes) do
register_craftguide_recipe("cauldron", v.output, v.items)
end
end
-- Treasurer mod, add Research Notes as a form of treasure.
if minetest.get_modpath("treasurer") then
treasurer.register_treasure("magicalities:note", 0.35, 5, {1,3}, nil, "tool")
treasurer.register_treasure("magicalities:tellium", 0.8, 8, {1,3}, nil, "crafting_component")
treasurer.register_treasure("magicalities:transterra", 0.8, 5, {1,3}, nil, "crafting_component")
end
---------------
-- Abilities --
---------------
-- Default abilities
magicalities.register_recipe_learnable({
name = "magicalities:wand_steel",
description = "Wands",
default = true,
})
magicalities.register_recipe_learnable({
name = "magicalities:table",
description = "Research Table\nDo research about the magic world",
default = true,
})
magicalities.register_recipe_learnable({
name = "magicalities:arcane_table",
description = "Arcane Table\nCraft magical items",
default = true,
})
magicalities.register_recipe_learnable({
name = "magicalities:cauldron",
description = "Cauldron",
default = true
})
-- Crystals
magicalities.register_ability_learnable({
name = "magicalities:crystal",
description = "Crystal Tapping\nExtract elements from crystals",
icon = "magicalities_crystal_gui.png",
})
magicalities.register_ability_learnable({
name = "magicalities:crystal_preserve",
description = "Crystal Preservation\nAvoid collecting every last drop of elements",
icon = "magicalities_crystal_preservation.png",
depends = {"magicalities:crystal"}
})
magicalities.register_ability_learnable({
name = "magicalities:crystal_draining",
description = "Efficient Crystal Draining\nIncrease element drain rate",
depends = {"magicalities:crystal_preserve"},
icon = "magicalities_crystal_draining.png"
})
magicalities.register_ability_learnable({
name = "magicalities:pickup_jarred",
description = "Crystal Jarring\nPick up intact crystals using jarring",
depends = {"magicalities:crystal_preserve"},
icon = "magicalities_jarred.png"
})