Overview
Comment: | add tree lathe recipes |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
56a2b90c1b48667634abbd166e9b5796 |
User & Date: | lexi on 2021-07-08 21:52:42 |
Other Links: | manifest | tags |
Context
2021-07-08
| ||
23:14 | add lathe recipes, bugfixes check-in: 669078947d user: lexi tags: trunk | |
21:52 | add tree lathe recipes check-in: 56a2b90c1b user: lexi tags: trunk | |
17:06 | bug fixes, add disc textures, get lathe fully operational finally check-in: efb9d9d1b9 user: lexi tags: trunk | |
Changes
Modified data/gems.lua from [4d559c7735] to [bb2fee6e3c].
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
foreign = 'default:diamond';
tone = {137,240,255};
items = default_items('diamond');
tools = true, armor = true;
maxenergy = 2000;
hardness = 8;
randomfind = false;
wandprops = {
sturdiness = (1/3);
};
slots = {
{affinity = {'praxic','counterpraxic'}, confluence = 1};
{affinity = {'praxic','syncretic'}, confluence = 0.6};
{affinity = {'counterpraxic', 'entropic'}, confluence = 0.7};
................................................................................
};
mese = {
foreign = 'default:mese_crystal';
foreign_shard = 'default:mese_crystal_fragment';
tone = {255,253,94};
energysource = 5;
hardness = 6;
maxenergy = 600;
items = default_items('mese');
tools = true, armor = true;
randomfind = false;
slots = {
{affinity = {'praxic'}, confluence = 1};
{affinity = {'praxic'}, confluence = 0.5};
|
>
>
>
|
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
..
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
foreign = 'default:diamond'; tone = {137,240,255}; items = default_items('diamond'); tools = true, armor = true; maxenergy = 2000; hardness = 8; randomfind = false; level = 1; maxlevel = 2; wandprops = { sturdiness = (1/3); }; slots = { {affinity = {'praxic','counterpraxic'}, confluence = 1}; {affinity = {'praxic','syncretic'}, confluence = 0.6}; {affinity = {'counterpraxic', 'entropic'}, confluence = 0.7}; ................................................................................ }; mese = { foreign = 'default:mese_crystal'; foreign_shard = 'default:mese_crystal_fragment'; tone = {255,253,94}; energysource = 5; hardness = 6; level = 1; maxenergy = 600; items = default_items('mese'); tools = true, armor = true; randomfind = false; slots = { {affinity = {'praxic'}, confluence = 1}; {affinity = {'praxic'}, confluence = 0.5}; |
Modified data/metals.lua from [81e12129e0] to [eba257a7d6].
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
items = default_items('bronze'); hardness = 4; durability = 350; maxenergy = 150; sharpness = 1; speed = 1.4; level = 0; slots = { {affinity = {'counterpraxic'}; confluence = 0.7}; }; mix = { metals = { copper = 4; tin = 1; |
> |
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
items = default_items('bronze');
hardness = 4;
durability = 350;
maxenergy = 150;
sharpness = 1;
speed = 1.4;
level = 0;
maxlevel = 1;
slots = {
{affinity = {'counterpraxic'}; confluence = 0.7};
};
mix = {
metals = {
copper = 4;
tin = 1;
|
Modified data/trees.lua from [33057bf9f3] to [1a5929f3d1].
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
apple = {
desc = 'Apple';
node = 'default:tree';
sapling = 'default:sapling';
leaves = 'default:leaves';
sap = 'Apple Syrup';
sapcolor = {218, 238, 66};
};
pine = {
desc = 'Pine';
node = 'default:pine_tree';
sapling = 'default:pine_sapling';
leaves = 'default:pine_needles';
sap = 'Pine Resin';
color = {95, 64, 57};
};
aspen = {
desc = 'Aspen';
node = 'default:aspen_tree';
sapling = 'default:aspen_sapling';
sap = 'Aspen Sap';
leaves = 'default:aspen_leaves';
color = {255, 251, 172};
imgvariant = 'dull';
};
acacia = {
desc = 'Acacia';
node = 'default:acacia_tree';
sapling = 'default:acacia_sapling';
leaves = 'default:acacia_leaves';
sap = 'Acacia Sap';
color = {217, 51, 22};
sapglow = 7;
};
jungle = {
desc = 'Jungle';
node = {
'default:jungletree';
'moretrees:jungletree_trunk';
};
sapling = 'default:junglesapling';
leaves = 'default:jungleleaves';
sap = 'Tropical Syrup';
color = {86, 39, 71};
imgvariant = 'dull';
};
}
|
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > |
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
apple = { desc = 'Apple'; node = 'default:tree'; sapling = 'default:sapling'; leaves = 'default:leaves'; sap = 'Apple Syrup'; sapcolor = {218, 238, 66}; lathe = { cut = { {'default:fence_wood', 5, 2}; {'default:fence_rail_wood', 20, 2}; }; } }; pine = { desc = 'Pine'; node = 'default:pine_tree'; plank = 'default:pine_wood'; sapling = 'default:pine_sapling'; leaves = 'default:pine_needles'; sap = 'Pine Resin'; color = {95, 64, 57}; lathe = { cut = { {'default:fence_pine_wood', 5, 2}; {'default:fence_rail_pine_wood', 20, 2}; }; }; }; aspen = { desc = 'Aspen'; node = 'default:aspen_tree'; plank = 'default:aspen_wood'; sapling = 'default:aspen_sapling'; sap = 'Aspen Sap'; leaves = 'default:aspen_leaves'; color = {255, 251, 172}; imgvariant = 'dull'; lathe = { cut = { {'default:fence_aspen_wood', 5, 2}; {'default:fence_rail_aspen_wood', 20, 2}; }; }; }; acacia = { desc = 'Acacia'; node = 'default:acacia_tree'; plank = 'default:acacia_wood'; sapling = 'default:acacia_sapling'; leaves = 'default:acacia_leaves'; sap = 'Acacia Sap'; color = {217, 51, 22}; sapglow = 7; lathe = { cut = { {'default:fence_acacia_wood', 5, 2}; {'default:fence_rail_acacia_wood', 20, 2}; }; }; }; jungle = { desc = 'Jungle'; node = { 'default:jungletree'; 'moretrees:jungletree_trunk'; }; plank = 'default:junglewood'; sapling = 'default:junglesapling'; leaves = 'default:jungleleaves'; sap = 'Tropical Syrup'; color = {86, 39, 71}; imgvariant = 'dull'; lathe = { cut = { {'default:fence_junglewood', 5, 2}; {'default:fence_rail_junglewood', 20, 2}; }; }; }; } |
Modified gems.lua from [68440cd05e] to [266c01e80c].
48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
{'',itemname,''}; }; } }; }; }) end if not gem.foreign_amulet then local img = sorcery.lib.image local img_stone = img('sorcery_amulet.png'):multiply(sorcery.lib.color(gem.tone)) local img_sparkle = img('sorcery_amulet_sparkle.png') local useamulet = function(stack,user,target) local sp = sorcery.amulet.getspell(stack) if not sp or not sp.cast then return nil end |
> |
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
{'',itemname,''};
};
}
};
};
})
end
gem.durability = gem.durability or (gem.hardness or 1) * 100
if not gem.foreign_amulet then
local img = sorcery.lib.image
local img_stone = img('sorcery_amulet.png'):multiply(sorcery.lib.color(gem.tone))
local img_sparkle = img('sorcery_amulet_sparkle.png')
local useamulet = function(stack,user,target)
local sp = sorcery.amulet.getspell(stack)
if not sp or not sp.cast then return nil end
|
Modified init.lua from [eeaa9926dc] to [7aae623fb9].
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
end
sorcery.registry.mk('residue',false)
end
sorcery.stage('startup',data)
for _,u in pairs {
'global'; 'vfx'; 'context'; 'attunement'; 'itemclass'; 'craft'; 'spell';
'liquid'; 'tree'; 'potions'; 'lathe'; 'metal', 'gems'; 'leylines';
'infuser'; 'altar'; 'wands'; 'tools', 'crafttools';
'enchanter'; 'harvester'; 'metallurgy-hot', 'metallurgy-cold';
'entities'; 'recipes'; 'coins'; 'interop';
'tnodes'; 'forcefield'; 'farcaster'; 'portal';
'cookbook', 'writing'; 'disassembly'; 'displacer';
'gravitator'; 'precipitator'; 'calendar', 'astrolabe';
'keypunch'; 'runeforge'; 'keg'; 'tap';
'privs', 'admin';
} do sorcery.load(u) end
sorcery.stage('finalize')
sorcery.registry.defercheck()
|
| |
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
end
sorcery.registry.mk('residue',false)
end
sorcery.stage('startup',data)
for _,u in pairs {
'global'; 'vfx'; 'context'; 'attunement'; 'itemclass'; 'craft'; 'spell';
'liquid'; 'potions'; 'lathe'; 'tree'; 'metal', 'gems'; 'leylines';
'infuser'; 'altar'; 'wands'; 'tools', 'crafttools';
'enchanter'; 'harvester'; 'metallurgy-hot', 'metallurgy-cold';
'entities'; 'recipes'; 'coins'; 'interop';
'tnodes'; 'forcefield'; 'farcaster'; 'portal';
'cookbook', 'writing'; 'disassembly'; 'displacer';
'gravitator'; 'precipitator'; 'calendar', 'astrolabe';
'keypunch'; 'runeforge'; 'keg'; 'tap';
'privs', 'admin';
} do sorcery.load(u) end
sorcery.stage('finalize')
sorcery.registry.defercheck()
|
Modified lathe.lua from [75f9e0d88f] to [525693d594].
13 14 15 16 17 18 19 20 21 22 23 24 25 26 .. 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 .. 81 82 83 84 85 86 87 88 89 90 91 92 93 94 ... 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 ... 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
local recipes = sorcery.lathe.recipes if not recipes[def.input] then recipes[def.input] = {} end local rs = recipes[def.input][def.tech] if not rs then recipes[def.input][def.tech] = { def } else rs[#rs+1] = def end end; tooltech = function(tool) if type(tool) ~= 'string' then tool = tool:get_name() end for g,t in pairs(sorcery.lathe.tools) do if minetest.get_item_group(tool, g) ~= 0 then return t end ................................................................................ local lfac = 1 if tmat then local dur = tmat.data.durability or dur lfac = (wmat and wmat.data.level or 1) / (tmat.data.maxlevel or tmat.data.level or 1) end local ch = 65535 / dur local wear = 2 * (ch * rec.cost * ntimes * lfac); return { tool = tool, wkpc = wkpc; cost = rec.cost * ntimes; wear = wear; ntimes = ntimes; tqty = ntimes * (rec.mass or 1), outn = outn; tech = tech; ................................................................................ -- obey level restrictions. TODO honor Rend if (wmat and wmat.data.level or 0) > (tmat and (tmat.data.maxlevel or tmat.data.level) or 0) then return end local tech = sorcery.lathe.tooltech(tool) local rec = R[wkpc:get_name()][tech] tech = sorcery.lathe.techs[tech] -- fill in the preview slots local j = 1 for i=1, inv:get_size 'preview' do local stk = ItemStack() local os = rec[i] and ItemStack(rec[i].output) ................................................................................ local i = m:get_inventory() i:set_size('workpiece', 1); i:set_size('tool', 1); i:set_size('preview', 8); m:set_string('formspec', [[ formspec_version[3] size[10.25,8] list[context;tool;1.25,1;1,1] list[context;workpiece;2.75,1;1,1] list[context;preview;5.25,0.25;4,2] list[current_player;main;0.25,3;8,4] listring[current_player;main] listring[context;workpiece] listring[current_player;main] listring[context;tool] listring[current_player;main] listring[context;preview] listring[current_player;main] ................................................................................ if list == 'tool' then local s_wkpc = inv:get_stack('workpiece', 1) local tech = sorcery.lathe.tooltech(stack) if tech and (s_wkpc:is_empty() or (R[s_wkpc:get_name()] ~= nil and R[s_wkpc:get_name()][tech] ~= nil)) then return stack:get_count() end elseif list == 'workpiece' then local s_tool = inv:get_stack('tool', 1) if R[stack:get_name()] then if s_tool:is_empty() or R[stack:get_name()][sorcery.lathe.tooltech(s_tool)] then return stack:get_count() end end |
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > | > > > > > > > > > |
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 .. 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 ... 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 ... 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 ... 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
local recipes = sorcery.lathe.recipes if not recipes[def.input] then recipes[def.input] = {} end local rs = recipes[def.input][def.tech] if not rs then recipes[def.input][def.tech] = { def } else rs[#rs+1] = def end end; register_metal = function(def) local parts = sorcery.data.metals[def.metal].parts local out = ItemStack(def.output) for _, ty in pairs {'ingot', 'block', 'fragment'} do local pt = parts[ty] local ptc = sorcery.itemclass.get(pt, 'metal') if ptc and ptc.value then if def.mass <= ptc.value then local mass local vfc = ptc.value / def.mass if math.floor(vfc) ~= vfc then for i = 1, 50 do local v = vfc * i if math.floor(v) == v then mass = i vfc = v break end end else mass = 1 end if not mass then log.err('tried to register a lathe metal recipe for',def.output,'but the mass ratio',vfc,'for part',ty,'has too many digits to the right of the decimal place') return false end sorcery.lathe.register { input = pt, mass = mass; tech = def.tech, cost = def.cost; output = { name = out:get_name(); count = out:get_count() * vfc; }; leftover = def.leftover; } end end end end; tooltech = function(tool) if type(tool) ~= 'string' then tool = tool:get_name() end for g,t in pairs(sorcery.lathe.tools) do if minetest.get_item_group(tool, g) ~= 0 then return t end ................................................................................ local lfac = 1 if tmat then local dur = tmat.data.durability or dur lfac = (wmat and wmat.data.level or 1) / (tmat.data.maxlevel or tmat.data.level or 1) end local ch = 65535 / dur local wear = (ch * rec.cost * ntimes * lfac) return { tool = tool, wkpc = wkpc; cost = rec.cost * ntimes; wear = wear; ntimes = ntimes; tqty = ntimes * (rec.mass or 1), outn = outn; tech = tech; ................................................................................ -- obey level restrictions. TODO honor Rend if (wmat and wmat.data.level or 0) > (tmat and (tmat.data.maxlevel or tmat.data.level) or 0) then return end local tech = sorcery.lathe.tooltech(tool) local rec = R[wkpc:get_name()][tech] if not rec then for g,v in pairs(s_wkpc:get_definition().groups) do local gs = R['group:'..g..'='..tostring(v)] local gg = R['group:'..g] rec = (gs and gs[tech]) or (gg and gg[tech]) end end tech = sorcery.lathe.techs[tech] -- fill in the preview slots local j = 1 for i=1, inv:get_size 'preview' do local stk = ItemStack() local os = rec[i] and ItemStack(rec[i].output) ................................................................................ local i = m:get_inventory() i:set_size('workpiece', 1); i:set_size('tool', 1); i:set_size('preview', 8); m:set_string('formspec', [[ formspec_version[3] size[10.25,8] list[context;tool;1.25,1;1,1] list[context;workpiece;3,1;1,1] list[context;preview;5.25,0.25;4,2] list[current_player;main;0.25,3;8,4] listring[current_player;main] listring[context;workpiece] listring[current_player;main] listring[context;tool] listring[current_player;main] listring[context;preview] listring[current_player;main] ................................................................................ if list == 'tool' then local s_wkpc = inv:get_stack('workpiece', 1) local tech = sorcery.lathe.tooltech(stack) if tech and (s_wkpc:is_empty() or (R[s_wkpc:get_name()] ~= nil and R[s_wkpc:get_name()][tech] ~= nil)) then return stack:get_count() end for g,v in pairs(s_wkpc:get_definition().groups) do local gs = R['group:'..g..'='..tostring(v)] local gg = R['group:'..g] if (gs and gs[tech]) or (gg and gg[tech]) then return stack:get_count() end end elseif list == 'workpiece' then local s_tool = inv:get_stack('tool', 1) if R[stack:get_name()] then if s_tool:is_empty() or R[stack:get_name()][sorcery.lathe.tooltech(s_tool)] then return stack:get_count() end end |
Modified recipes.lua from [f4ffdfcd69] to [7b05938d1e].
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
...
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
|
regtech('valve','Valve', {metal = 1}, { {'','default:bronze_ingot',''}; {'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'}; {'','default:bronze_ingot',''}; },3,nil, mprop('bronze',2*4,1,2*4)) regtech('pipe','Pipe', {metal = 1},nil, nil, nil, mprop('aluminum', 4)) sorcery.lathe.register { input = ingot('aluminum'); output = 'sorcery:pipe'; tech = 'cut', cost = 8; } minetest.register_craft { output = 'sorcery:trough'; recipe = { {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),'',ingot('aluminum')}; {ingot('aluminum'),ingot('aluminum'),ingot('aluminum')}; }; } regtech('infuser_tube', 'Infusion Tube', {metal = 1}, { {"basic_materials:copper_strip",'sorcery:infuser_concentrator', "basic_materials:copper_strip"}; {"", "basic_materials:copper_strip", "basic_materials:gold_wire"}; {"", "basic_materials:copper_strip", ""}; ................................................................................ for n,v in pairs(sorcery.data.greases) do if (v.core and #v.core > 0) or (v.mix and #v.mix > 0) then local id = 'sorcery:grease_' .. n potion_auto_recipe(id,v,{'farming:mixing_bowl'},'xdecor:bowl') end end sorcery.lathe.register { output = 'basic_materials:steel_bar 2'; input = 'default:steel_ingot'; tech = 'cut', cost = 3; } sorcery.lathe.register { output = 'basic_materials:steel_bar 18'; input = 'default:steelblock'; tech = 'cut', cost = 3*9; } sorcery.lathe.register { output = 'basic_materials:steel_bar'; input = 'default:steel_fragment', mass = 2; tech = 'cut', cost = 2; } |
|
|
>
|
|
|
|
|
<
<
<
<
<
<
<
<
<
<
|
>
|
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
...
789
790
791
792
793
794
795
796
797
798
799
800
801
|
regtech('valve','Valve', {metal = 1}, { {'','default:bronze_ingot',''}; {'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'}; {'','default:bronze_ingot',''}; },3,nil, mprop('bronze',2*4,1,2*4)) regtech('pipe','Pipe', {metal = 1},nil, nil, nil, mprop('aluminum', 4)) sorcery.lathe.register_metal { metal = 'aluminum'; output = 'sorcery:pipe'; tech = 'cut', cost = 8; mass = 4; } minetest.register_craft { output = 'sorcery:trough'; recipe = { {ingot 'aluminum','',ingot 'aluminum'}; {ingot 'aluminum','',ingot 'aluminum'}; {ingot 'aluminum',ingot 'aluminum',ingot 'aluminum'}; }; } regtech('infuser_tube', 'Infusion Tube', {metal = 1}, { {"basic_materials:copper_strip",'sorcery:infuser_concentrator', "basic_materials:copper_strip"}; {"", "basic_materials:copper_strip", "basic_materials:gold_wire"}; {"", "basic_materials:copper_strip", ""}; ................................................................................ for n,v in pairs(sorcery.data.greases) do if (v.core and #v.core > 0) or (v.mix and #v.mix > 0) then local id = 'sorcery:grease_' .. n potion_auto_recipe(id,v,{'farming:mixing_bowl'},'xdecor:bowl') end end sorcery.lathe.register_metal { metal = 'steel'; output = 'basic_materials:steel_bar'; tech = 'cut', cost = 3; mass = 2; } |
Modified sorcery.md from [9b54d0ccbf] to [1bb9279edd].
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
* extracts can be crafted using crushed excess seeds and alcohol
* oils, greases, and other substances can be crafted by mixing together various ingredients, including extracts
* magical elixirs can be made by infusing oils and the like into bottles of water at an **Infuser**, and can be drunk to gain temporary powers
* liquids can be carried around in buckets, bottles, and glasses, depending on the liquid.
* kegs can store large volumes of liquid, making for easy retrieval when you, say, need a specific extract or potion to brew an elixir
* troughs can be used to gather liquid from nature. set out under the open sky, for instance, they will slowly collect rainwater (depending on the biome). they have twice the volume of buckets.
* taps can be attached to trees to extract saps, syrups, and resins from under the bark; these can be caught by placing a trough below. you can then fill bottles from the trough, or simply pick the whole trough up and bring it home to deposit the liquid in a keg for later use.
* wands, made at an **Wandworking Station** out of a wood, gems, bands, and cores, can be enchanted by soaking them in philters, special potions used for imbuing wood with ley-force (though i'm trying to come up with a better mechanism). these fire off powerful spells with a flick of the wrist, but will break when they run out of power (unless you recharge them…)
* if you want to get into advanced arcanism, you can build an **Enchanter**. equipped with the proper wands, this powerful artifact can be used to imbue tools with useful supernatural properties, though what enchantments are available and how much ley-charge a tool can hold depend on what metal the tool is made of. but Enchanters can be used for more subtle purposes as well. with the right ingredients and a **Divination Wand**, you can conjure up recipes for delicacies or schematics for powerful magitech devices you never imagined were possible. **Melding Wands** can merge the mystic essences of items on an Enchanter to create something new, including some things that can't be made any other way, though the stars may need to be right (an **Astrolabe** can help you check) for certain recipes to work, and some may come down to plain old luck. **Division Wands** are very similar, but work the other way around.
* you can also build a **Disassembly Kit**, which you can use with pen, ink, and paper to create schematics for any object you come across that you want to be able to craft yourself.
* you can collect your assorted recipes into cookbooks, and you can build yourself a **Writing Stand** to insert, delete, re-order, or (if you have some Scissors handy) cut out parts of the book.
* you can make a **Mill** for grinding up solid materials into powder or pulp. it makes flour from grain more efficiently than a mortar and pestle, can produce various metal powders of great utility, and can reduce books, paper, and punchcards down to a pulp, suitable for cleaning with **Erasure Fluid** and cooking back into clean paper. but you'll need some way to power it. a **Generator** will produce plenty of energy in a pinch, but it may be more rewarding to build yourself a real power grid, carrying current from place to place using cables (**Vidrium Cables** are sufficient for homes and studios, but industrial facilities may need **Iridium Cables** or the even more conductive **Conduit**). **Mese Blocks** always emit a small but constant amount of ley-current, but if you're near a strong leyline, building **Condenser**s to harvest its power will be much more efficient. (**Leyspark Wand**s are crucial tools for testing the source and affinity of the ambient leyscape.)
* some new alloys can be made by sintering metal powders; others need to be melted down in a **Smelter**. these alloys have the most remarkable properties of any metal, and are especially valued by toolsmiths and enchanters, though they may be less broadly useful than the lesser metals.
* if you need to travel quickly between two distant places, and you're wealthy enough to afford it, you can build yourself one of the most powerful and complex of magitech devices — the **Teleporter**. it's no mean feat: even the smallest teleporter requires a teleport pad with a reflector above it and a portal node connected to one or the other. the teleporter will then need to be connected to its destination with cables or conduits, and if where you're travelling is very far away, you'll have to build two separate ley nets and bridge them by using an **Attunement Wand** on a pair of **Raycasters** — or perhaps even **Farcasters**. the power required to operate all of these devices is not trivial, and while a Farcaster's signal can pierce through any substance and cross any distance to reach its destination, the farther away each is from the other, the more power each side will consume. and casters can't send current, they can only send signals, so you may need a sizable power plant on both sides of the portal.
* if all you need to do is send small items, of course, a **Displacer** is much cheaper, and more flexible. if you're feeling particularly ambitious, you could use a Displacer net to connect your whole kingdom with instantaneous package service.
* stop your foes in their tracks by flipping a switch to turn on your **Force Field Emitters**, generating an impenetrable barrier wherever they aim.
|
> < > > |
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
* extracts can be crafted using crushed excess seeds and alcohol * oils, greases, and other substances can be crafted by mixing together various ingredients, including extracts * magical elixirs can be made by infusing oils and the like into bottles of water at an **Infuser**, and can be drunk to gain temporary powers * liquids can be carried around in buckets, bottles, and glasses, depending on the liquid. * kegs can store large volumes of liquid, making for easy retrieval when you, say, need a specific extract or potion to brew an elixir * troughs can be used to gather liquid from nature. set out under the open sky, for instance, they will slowly collect rainwater (depending on the biome). they have twice the volume of buckets. * taps can be attached to trees to extract saps, syrups, and resins from under the bark; these can be caught by placing a trough below. you can then fill bottles from the trough, or simply pick the whole trough up and bring it home to deposit the liquid in a keg for later use. * you can build a lathe for complex metal- and woodworking, to build things like pipes, screws, discs, and fenceposts. * wands, made at an **Wandworking Station** out of a wood, gems, bands, and cores, can be enchanted by soaking them in philters, special potions used for imbuing wood with ley-force (though i'm trying to come up with a better mechanism). these fire off powerful spells with a flick of the wrist, but will break when they run out of power (unless you recharge them…) * if you want to get into advanced arcanism, you can build an **Enchanter**. if you have the proper wands with the proper wands, this powerful artifact can be used to imbue tools with useful supernatural properties, though what enchantments are available and how much ley-charge a tool can hold depend on what metal the tool is made of. but Enchanters can be used for more subtle purposes as well. with the right ingredients and a **Divination Wand**, you can conjure up recipes for delicacies or schematics for powerful magitech devices you never imagined were possible. **Melding Wands** can merge the mystic essences of items on an Enchanter to create something new, including some things that can't be made any other way, though the stars may need to be right (an **Astrolabe** can help you check) for certain recipes to work, and some may come down to plain old luck. **Division Wands** are very similar, but work the other way around. * if you do a wide variety of things with your enchanter, you may want to build a **Wand Rack** in your lab, otherwise a **Wand Stand** or two will probably be good enough. * you can also build a **Disassembly Kit**, which you can use with pen, ink, and paper to create schematics for any object you come across that you want to be able to craft yourself. * you can collect your assorted recipes into cookbooks, and you can build yourself a **Writing Stand** to insert, delete, re-order, or (if you have some Scissors handy) cut out parts of the book. * you can make a **Mill** for grinding up solid materials into powder or pulp. it makes flour from grain more efficiently than a mortar and pestle, can produce various metal powders of great utility, and can reduce books, paper, and punchcards down to a pulp, suitable for cleaning with **Erasure Fluid** and cooking back into clean paper. but you'll need some way to power it. a **Generator** will produce plenty of energy in a pinch, but it may be more rewarding to build yourself a real power grid, carrying current from place to place using cables (**Vidrium Cables** are sufficient for homes and studios, but industrial facilities may need **Iridium Cables** or the even more conductive **Conduit**). **Mese Blocks** always emit a small but constant amount of ley-current, but if you're near a strong leyline, building **Condenser**s to harvest its power will be much more efficient. (**Leyspark Wand**s are crucial tools for testing the source and affinity of the ambient leyscape.) * some new alloys can be made by sintering metal powders; others need to be melted down in a **Smelter**. these alloys have the most remarkable properties of any metal, and are especially valued by toolsmiths and enchanters, though they may be less broadly useful than the lesser metals. * if you need to travel quickly between two distant places, and you're wealthy enough to afford it, you can build yourself one of the most powerful and complex of magitech devices — the **Teleporter**. it's no mean feat: even the smallest teleporter requires a teleport pad with a reflector above it and a portal node connected to one or the other. the teleporter will then need to be connected to its destination with cables or conduits, and if where you're travelling is very far away, you'll have to build two separate ley nets and bridge them by using an **Attunement Wand** on a pair of **Raycasters** — or perhaps even **Farcasters**. the power required to operate all of these devices is not trivial, and while a Farcaster's signal can pierce through any substance and cross any distance to reach its destination, the farther away each is from the other, the more power each side will consume. and casters can't send current, they can only send signals, so you may need a sizable power plant on both sides of the portal. * if all you need to do is send small items, of course, a **Displacer** is much cheaper, and more flexible. if you're feeling particularly ambitious, you could use a Displacer net to connect your whole kingdom with instantaneous package service. * stop your foes in their tracks by flipping a switch to turn on your **Force Field Emitters**, generating an impenetrable barrier wherever they aim. |
Modified tree.lua from [e98976a563] to [26f773677c].
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
n.param1 = 1 minetest.swap_node(pointed.above, n) -- end end end }) end end end if t.sap == false then return end if not t.sapliq then t.sapliq = string.format('sorcery:sap_%s', id) local sapdesc = t.sap or (t.desc .. ' Tree Sap') sorcery.liquid.register { |
> > > > > > > > > > > > > > > > > > > > > > > > > |
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
n.param1 = 1 minetest.swap_node(pointed.above, n) -- end end end }) end end sorcery.lathe.register { input = t.node; tech = 'cut'; output = 'default:stick 18'; cost = 1; } if t.lathe then for tech, items in pairs(t.lathe) do for _, i in pairs(items) do for _, n in pairs(nodes) do if minetest.registered_items[n] and minetest.registered_items[i[1]] then sorcery.lathe.register { input = n; tech = tech; output = { name = i[1]; count = i[2]; }; cost = i[3]; } end end end end end end if t.sap == false then return end if not t.sapliq then t.sapliq = string.format('sorcery:sap_%s', id) local sapdesc = t.sap or (t.desc .. ' Tree Sap') sorcery.liquid.register { |