sorcery  Diff

Differences From Artifact [faad05be60]:

  • File recipes.lua — part of check-in [96c5289a2a] at 2020-10-21 03:35:35 on branch trunk — add rune forges, runes, amulet frames, write sacrifice spell, touch up amulet graphics, enable enchantment of amulets (though spells cannot yet be cast), defuckulate syncresis core icon, unfuckitize sneaky leycalc bug that's probably been the cause of some long-standing wackiness, add item classes, add some more textures, disbungle various other asstastrophes, remove sneaky old debug code, improve library code, add utility for uploading merge requests (user: lexi, size: 21569) [annotate] [blame] [check-ins using]

To Artifact [8dde1ca421]:


            1  +-- convenience defs
            2  +local D = sorcery.data
            3  +local function mtlp(n, p) return D.metals[n].parts[p] end
            4  +local function ingot(metal) return mtlp(metal,'ingot') end
     1      5   -- tweaks
     2      6   
     3      7   minetest.register_craft {
     4      8   	type = "shapeless";
     5      9   	recipe = {
     6     10   		"group:water_bucket",
     7     11   		"vessels:glass_bottle",
................................................................................
    51     55   	replacements = {
    52     56   		{'group:scissors','group:scissors'};
    53     57   	};
    54     58   }
    55     59   
    56     60   minetest.register_craft {
    57     61   	recipe = {
    58         -		{"", "default:gold_ingot"},
    59         -		{"default:bronze_ingot",""}
           62  +		{"", ingot('gold')};
           63  +		{ingot('bronze'),""}
    60     64   	};
    61     65   	output = "sorcery:dagger";
    62     66   }
    63     67   
    64     68   ---- magitech
    65     69   
    66     70   -- infuser
    67         -minetest.register_craftitem('sorcery:infuser_tube', {
    68         -	inventory_image = 'sorcery_infuser_tube.png';
    69         -	description = 'Infusion Tube';
    70         -	groups = {
    71         -		sorcery_magitech = 1; metal = 1;
    72         -		sorcery_tech_component = 1;
    73         -	};
    74         -})
    75         -minetest.register_craft {
    76         -	recipe = {
    77         -		{"basic_materials:copper_strip",'sorcery:infuser_concentrator', "basic_materials:copper_strip"};
    78         -		{"", "basic_materials:copper_strip", "basic_materials:gold_wire"};
    79         -		{"", "basic_materials:copper_strip", ""};
    80         -	};
    81         -	replacements = {
    82         -		{"basic_materials:gold_wire", "basic_materials:empty_spool"}
    83         -	};
    84         -	output = "sorcery:infuser_tube";
    85         -}
    86     71   
    87         -minetest.register_craftitem('sorcery:infuser_chamber', {
    88         -	inventory_image = 'sorcery_infuser_chamber.png';
    89         -	description = 'Infusion Chamber';
    90         -	groups = {
    91         -		sorcery_magitech = 1;
    92         -		sorcery_tech_component = 1;
    93         -	};
    94         -})
    95         -minetest.register_craft {
    96         -	recipe = {
    97         -		{'default:clay_brick','sorcery:grease_sealant','default:clay_brick'};
    98         -		{'default:clay_brick','stairs:slab_steelblock','default:clay_brick'};
    99         -	};
   100         -	replacements = {
   101         -		{'sorcery:grease_sealant','xdecor:bowl'};
   102         -	};
   103         -	output = "sorcery:infuser_chamber";
   104         -}
   105         -
   106         -minetest.register_craftitem('sorcery:infuser_concentrator', {
   107         -	inventory_image = 'sorcery_infuser_concentrator.png';
   108         -	description = 'Infusion Concentrator';
   109         -	groups = {
   110         -		sorcery_magitech = 1;
   111         -		sorcery_tech_component = 1;
   112         -	};
   113         -})
   114         -
   115         -minetest.register_craft {
   116         -	recipe = {
   117         -		{'basic_materials:steel_wire'};
   118         -		{'default:obsidian_shard'};
   119         -		{'basic_materials:copper_wire'};
   120         -	};
   121         -	replacements = {
   122         -		{'basic_materials:steel_wire', 'basic_materials:empty_spool'};
   123         -		{'basic_materials:copper_wire', 'basic_materials:empty_spool'};
   124         -	};
   125         -	output = "sorcery:infuser_concentrator";
   126         -}
   127     72   
   128     73   minetest.register_craft {
   129     74   	type = 'shapeless';
   130     75   	recipe = {
   131     76   		'basic_materials:empty_spool';
   132     77   		'basic_materials:empty_spool';
   133     78   		'sorcery:infuser_concentrator';
................................................................................
   147     92   		'basic_materials:oil_extract';
   148     93   	};
   149     94   	output = "sorcery:grease_sealant";
   150     95   }
   151     96   
   152     97   minetest.register_craft {
   153     98   	recipe = {
   154         -		{ 'default:tin_ingot', 'bucket:bucket_empty', 'default:tin_ingot'};
   155         -		{ 'default:bronze_ingot', 'sorcery:infuser_chamber', 'default:copper_ingot'};
           99  +		{ ingot('tin'), 'bucket:bucket_empty',ingot('tin')};
          100  +		{ ingot('bronze'), 'sorcery:infuser_chamber',ingot('copper')};
   156    101   		{ 'sorcery:infuser_tube', 'sorcery:infuser_tube', 'sorcery:infuser_tube' };
   157    102   	};
   158    103   	output = "sorcery:infuser";
   159    104   }
   160    105   
   161    106   minetest.register_craft {
   162    107   	output = "sorcery:displacer";
   163    108   	recipe = {
   164         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          109  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   165    110   		{'basic_materials:copper_wire','sorcery:core_syncretic','doors:trapdoor_steel'};
   166         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          111  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   167    112   	};
   168    113   	replacements = {
   169    114   		{'basic_materials:copper_wire','basic_materials:empty_spool'};
   170    115   	};
   171    116   }
   172    117   
   173    118   minetest.register_craft {
   174    119   	output = "sorcery:displacer_transmit_attune";
   175    120   	recipe = {
   176         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          121  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   177    122   		{'sorcery:leyline_stabilizer','sorcery:core_mandatic','sorcery:tuning_disc'};
   178         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          123  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   179    124   	};
   180    125   }
   181    126   
   182    127   minetest.register_craft {
   183    128   	output = "sorcery:displacer_transmit_gem";
   184    129   	recipe = {
   185         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          130  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   186    131   		{'sorcery:leyline_stabilizer','sorcery:core_mandatic','sorcery:gem_ruby'};
   187         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          132  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   188    133   	};
   189    134   }
   190    135   
   191    136   minetest.register_craft {
   192    137   	output = "sorcery:displacer_receive_attune";
   193    138   	recipe = {
   194         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          139  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   195    140   		{'sorcery:inverter_coil','sorcery:core_mandatic','sorcery:tuning_disc'};
   196         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          141  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   197    142   	};
   198    143   }
   199    144   
   200    145   minetest.register_craft {
   201    146   	output = "sorcery:displacer_receive_gem";
   202    147   	recipe = {
   203         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          148  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   204    149   		{'sorcery:inverter_coil','sorcery:core_mandatic','sorcery:gem_ruby'};
   205         -		{'sorcery:platinum_ingot','sorcery:screw_tungsten','sorcery:platinum_ingot'};
          150  +		{ingot('platinum'),'sorcery:screw_tungsten',ingot('platinum')};
   206    151   	};
   207    152   }
   208    153   
   209    154   minetest.register_craft {
   210    155   	output = 'sorcery:raycaster';
   211    156   	recipe = {
   212    157   		{'sorcery:gem_amethyst', 'sorcery:gem_amethyst', 'sorcery:gem_amethyst'};
   213         -		{'default:gold_ingot','sorcery:beam_generator','default:gold_ingot'};
          158  +		{ingot('gold'),'sorcery:beam_generator',ingot('gold')};
   214    159   		{'sorcery:gem_amethyst', 'sorcery:gem_amethyst', 'sorcery:gem_amethyst'};
   215    160   	};
   216    161   }
   217    162   
   218    163   minetest.register_craft {
   219    164   	output = 'sorcery:tuning_disc';
   220    165   	recipe = {
   221         -		{'sorcery:inverter_coil','sorcery:silver_ingot',''};
          166  +		{'sorcery:inverter_coil',ingot('silver'),''};
   222    167   		{'sorcery:leyline_stabilizer','sorcery:silver_ingot','sorcery:gem_emerald'};
   223         -		{'sorcery:inverter_coil','sorcery:silver_ingot',''};
          168  +		{'sorcery:inverter_coil',ingot('silver'),''};
   224    169   	};
   225    170   }
   226    171   
   227    172   minetest.register_craft {
   228    173   	output = 'sorcery:farcaster';
   229    174   	recipe = {
   230         -		{'default:gold_ingot','sorcery:iridium_ingot','default:gold_ingot'};
          175  +		{ingot('gold'),ingot('iridium'),ingot('gold')};
   231    176   		{'sorcery:core_mandatic','default:diamondblock','sorcery:tuning_disc'};
   232         -		{'default:gold_ingot','sorcery:iridium_ingot','default:gold_ingot'};
          177  +		{ingot('gold'),ingot('iridium'),ingot('gold')};
   233    178   	};
   234    179   }
   235    180   
   236    181   minetest.register_craft {
   237    182   	output = 'sorcery:portal_node';
   238    183   	recipe = {
   239         -		{'sorcery:tungsten_ingot','sorcery:core_mandatic','sorcery:tungsten_ingot'};
   240         -		{'sorcery:aluminum_ingot','sorcery:platinumblock','sorcery:aluminum_ingot'};
   241         -		{'sorcery:tungsten_ingot','sorcery:core_mandatic','sorcery:tungsten_ingot'};
          184  +		{ingot('tungsten'),'sorcery:core_mandatic',ingot('tungsten')};
          185  +		{ingot('aluminum'),mtlp('platinum','block'),ingot('aluminum')};
          186  +		{ingot('tungsten'),'sorcery:core_mandatic',ingot('tungsten')};
   242    187   	};
   243    188   }
   244    189   
   245    190   minetest.register_craft {
   246    191   	output = 'sorcery:portal_reflector';
   247    192   	recipe = {
   248         -		{'basic_materials:steel_bar','default:tin_ingot','basic_materials:steel_bar'};
          193  +		{'basic_materials:steel_bar',ingot('tin'),'basic_materials:steel_bar'};
   249    194   		{'sorcery:gem_amethyst','sorcery:inverter_coil','sorcery:gem_amethyst'};
   250    195   		{'basic_materials:steel_bar','xpanes:bar_flat','basic_materials:steel_bar'};
   251    196   	}
   252    197   }
   253    198   
   254    199   minetest.register_craft {
   255    200   	output = 'sorcery:portal_pad';
   256    201   	recipe = {
   257    202   		{'basic_materials:steel_bar','xpanes:bar_flat','basic_materials:steel_bar'};
   258    203   		{'sorcery:gem_amethyst','sorcery:beam_generator','sorcery:gem_amethyst'};
   259         -		{'basic_materials:steel_bar','default:tin_ingot','basic_materials:steel_bar'};
          204  +		{'basic_materials:steel_bar',ingot('tin'),'basic_materials:steel_bar'};
   260    205   	}
   261    206   }
   262    207   
   263    208   minetest.register_craft {
   264    209   	output = 'sorcery:gravity_manipulator';
   265    210   	recipe = {
   266         -		{'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'};
   267         -		{'sorcery:inverter_coil','sorcery:core_counterpraxic','sorcery:levitanium_ingot'};
   268         -		{'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'};
          211  +		{ingot('cobalt'),'sorcery:screw_platinum','basic_materials:silver_wire'};
          212  +		{'sorcery:inverter_coil','sorcery:core_counterpraxic',ingot('levitanium')};
          213  +		{ingot('cobalt'),'sorcery:screw_platinum','basic_materials:silver_wire'};
   269    214   	};
   270    215   }
   271    216   
   272    217   minetest.register_craft {
   273    218   	output = 'sorcery:gravitator_off';
   274    219   	recipe = {
   275         -		{'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'};
          220  +		{ingot('platinum'),'basic_materials:plastic_sheet',ingot('platinum')};
   276    221   		{'xpanes:pane_flat','sorcery:gravity_manipulator','basic_materials:plastic_sheet'};
   277         -		{'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'};
          222  +		{ingot('platinum'),'basic_materials:plastic_sheet',ingot('platinum')};
   278    223   	};
   279    224   }
   280    225   
   281    226   minetest.register_craft {
   282         -	output = 'sorcery:powder_firestorm 4';
          227  +	output = 'sorcery:powder_firestorm 5';
   283    228   	type = 'shapeless';
   284    229   	recipe = {
   285         -		'sorcery:powder_lithium', 'sorcery:powder_lithium';
   286         -		'sorcery:powder_silver';
          230  +		mtlp('lithium','powder'), mtlp('lithium','powder');
          231  +		mtlp('silver','powder');
   287    232   		'basic_materials:oil_extract';
   288    233   		'sorcery:flame_oil';
   289    234   		'tnt:gunpowder';
   290    235   		'farming:mixing_bowl';
   291    236   	};
   292    237   	replacements = {
   293    238   		{'sorcery:flame_oil', 'xdecor:bowl'};
................................................................................
   316    261   	_sorcery = {
   317    262   		material = {
   318    263   			gem = true;
   319    264   			sacrifice_value = 900;
   320    265   		};
   321    266   	}
   322    267   })
          268  +
          269  +minetest.register_craft {
          270  +	output = 'sorcery:powder_firestorm 6';
          271  +	type = 'shapeless';
          272  +	recipe = {'sorcery:inferno_crystal', 'xdecor:hammer'};
          273  +	replacements = {
          274  +		{'xdecor:hammer','xdecor:hammer'};
          275  +		{'sorcery:inferno_crystal', 'sorcery:shard_ruby 5'};
          276  +	}
          277  +}
   323    278   
   324    279   minetest.register_craftitem('sorcery:powder_firestorm', {
   325    280   	inventory_image = 'sorcery_powder_firestorm.png';
   326    281   	description = 'Firestorm Powder';
          282  +	groups = { sorcery_ingredient = 1, fuel = 1 };
   327    283   })
   328    284   
   329    285   minetest.register_craft {
   330    286   	type = 'fuel', burntime = 8 * 15;
   331    287   	recipe = 'sorcery:powder_firestorm';
   332    288   };
   333    289   
   334    290   minetest.register_craft {
   335    291   	type = 'fuel', burntime = 8 * 85;
   336    292   	recipe = 'sorcery:inferno_crystal';
   337    293   	replacement = {{'sorcery:inferno_crystal', 'sorcery:shard_ruby 6'}};
   338    294   };
   339         -
   340         -minetest.register_craftitem('sorcery:essence_flame', {
   341         -	inventory_image = 'sorcery_essence_flame.png';
   342         -	description = 'Flame Essence';
   343         -})
   344         -
   345    295   
   346    296   minetest.register_craftitem('sorcery:gravity_manipulator', {
   347    297   	description = 'Gravity Manipulator';
   348    298   	inventory_image = 'sorcery_gravity_manipulator.png';
   349    299   	groups = {
   350    300   		sorcery_magitech = 1;
   351    301   		sorcery_tech_component = 1;
   352    302   	};
   353    303   })
   354    304   
   355         -minetest.register_craftitem('sorcery:tuning_disc',{
   356         -	description = 'Tuning Disc';
   357         -	inventory_image = 'sorcery_tuning_disc.png';
   358         -	groups = {
   359         -		sorcery_magitech = 1; metal = 1;
   360         -		sorcery_tech_component = 1;
   361         -	};
   362         -});
   363         -
   364         -minetest.register_craftitem('sorcery:core_counterpraxic',{
   365         -	description = 'Counterpraxis Core';
   366         -	inventory_image = 'sorcery_core_counterpraxic.png';
   367         -	groups = {
   368         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   369         -		sorcery_tech_component = 1;
   370         -	};
   371         -});
   372         -
   373         -minetest.register_craftitem('sorcery:core_mandatic',{
   374         -	description = 'Mandatic Core';
   375         -	inventory_image = 'sorcery_core_mandatic.png';
   376         -	groups = {
   377         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   378         -		sorcery_tech_component = 1;
   379         -	};
   380         -});
   381         -
   382         -minetest.register_craftitem('sorcery:core_syncretic',{
   383         -	description = 'Syncresis Core';
   384         -	inventory_image = 'sorcery_core_syncretic.png';
   385         -	groups = {
   386         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   387         -		sorcery_tech_component = 1;
   388         -	};
   389         -});
   390         -
   391         -minetest.register_craftitem('sorcery:suppression_matrix',{
   392         -	description = 'Suppression Matrix';
   393         -	inventory_image = 'sorcery_suppression_matrix.png';
   394         -	groups = {
   395         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   396         -		sorcery_tech_component = 1;
   397         -	};
   398         -});
   399         -
   400         -minetest.register_craftitem('sorcery:inverter_coil',{
   401         -	description = 'Inverter Coil';
   402         -	inventory_image = 'sorcery_inverter_coil.png';
   403         -	groups = {
   404         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   405         -		sorcery_tech_component = 1;
   406         -	};
   407         -});
   408         -
   409         -minetest.register_craftitem('sorcery:beam_generator',{
   410         -	description = 'Beam Generator';
   411         -	inventory_image = 'sorcery_beam_generator.png';
   412         -	groups = {
   413         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   414         -		sorcery_tech_component = 1;
   415         -	};
   416         -});
   417         -
   418         -minetest.register_craftitem('sorcery:leyline_stabilizer',{
   419         -	description = 'Leyline Stabilizer';
   420         -	inventory_image = 'sorcery_leyline_stabilizer.png';
   421         -	groups = {
   422         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   423         -		sorcery_tech_component = 1;
   424         -	};
   425         -});
   426         -
   427         -minetest.register_craftitem('sorcery:field_emitter',{
   428         -	description = 'Field Emitter';
   429         -	inventory_image = 'sorcery_field_emitter.png';
   430         -	groups = {
   431         -		sorcery_magitech = 1; metal = 1; sorcery_magitech_core = 1;
   432         -		sorcery_tech_component = 1;
   433         -	};
          305  +
          306  +local regtech = function(id, desc, groups, recipe, qty, replacements)
          307  +	minetest.register_craftitem('sorcery:' .. id,{
          308  +		description = desc;
          309  +		inventory_image = 'sorcery_'..id..'.png';
          310  +		groups = sorcery.lib.tbl.merge({
          311  +			sorcery_magitech = 1;
          312  +			sorcery_tech_component = 1;
          313  +		}, groups or {});
          314  +	})
          315  +	if recipe then
          316  +		minetest.register_craft {
          317  +			output = string.format('sorcery:%s %u', id, qty or 1);
          318  +			recipe = recipe;
          319  +			replacements = replacements;
          320  +		}
          321  +	end
          322  +end
          323  +
          324  +local regcore = function(core,name)
          325  +	regtech('core_'..core, name .. ' Core', {sorcery_magitech_core = 1})
          326  +end
          327  +
          328  +
          329  +regtech('field_emitter', 'Field Emitter', {metal = 1})
          330  +regtech('leyline_stabilizer', 'Leyline Stabilizer', {metal = 1})
          331  +regtech('beam_generator', 'Beam Generator', {metal = 1})
          332  +regtech('inversion_matrix', 'Inversion Matrix', {metal = 1})
          333  +regtech('inverter_coil', 'Inverter Coil', {metal = 1})
          334  +regtech('suppression_matrix', 'Suppression Matrix', {metal = 1})
          335  +regtech('tuning_disc', 'Tuning Disc', {metal = 1})
          336  +	-- used in constructing devices that are subject to attunement wand
          337  +regtech('gravity_manipulator', 'Gravity Manipulator', {metal = 1})
          338  +regtech('valve','Valve', {metal = 1}, {
          339  +	{'','default:bronze_ingot',''};
          340  +	{'basic_materials:plastic_sheet','basic_materials:steel_bar','basic_materials:plastic_sheet'};
          341  +	{'','default:bronze_ingot',''};
          342  +},3)
          343  +regtech('pipe','Pipe', {metal = 1}, {
          344  +	{ingot('aluminum'),'',ingot('aluminum')};
          345  +	{ingot('aluminum'),'',ingot('aluminum')};
          346  +	{ingot('aluminum'),'',ingot('aluminum')};
          347  +}, 6)
          348  +
          349  +minetest.register_craft {
          350  +	output = 'sorcery:trough';
          351  +	recipe = {
          352  +		{ingot('aluminum'),'',ingot('aluminum')};
          353  +		{ingot('aluminum'),'',ingot('aluminum')};
          354  +		{ingot('aluminum'),ingot('aluminum'),ingot('aluminum')};
          355  +	};
          356  +}
          357  +
          358  +regtech('infuser_tube', 'Infusion Tube', {metal = 1}, {
          359  +	{"basic_materials:copper_strip",'sorcery:infuser_concentrator', "basic_materials:copper_strip"};
          360  +	{"", "basic_materials:copper_strip", "basic_materials:gold_wire"};
          361  +	{"", "basic_materials:copper_strip", ""};
          362  +}, 1, {
          363  +	{"basic_materials:gold_wire", "basic_materials:empty_spool"}
          364  +})
          365  +regtech('infuser_chamber', 'Infuser Chamber', nil, {
          366  +	{'default:clay_brick','sorcery:grease_sealant','default:clay_brick'};
          367  +	{'default:clay_brick','stairs:slab_steelblock','default:clay_brick'};
          368  +}, 1, {
          369  +	{'sorcery:grease_sealant','xdecor:bowl'};
          370  +})
          371  +regtech('infuser_concentrator', 'Infuser Concentrator', nil, {
          372  +	{'basic_materials:steel_wire'};
          373  +	{'default:obsidian_shard'};
          374  +	{'basic_materials:copper_wire'};
          375  +}, 1, {
          376  +	{'basic_materials:steel_wire', 'basic_materials:empty_spool'};
          377  +	{'basic_materials:copper_wire', 'basic_materials:empty_spool'};
          378  +})
          379  +
          380  +
          381  +regtech('warding_plate', 'Warding Plate', {metal = 1}, {
          382  +	{'basic_materials:gold_wire','basic_materials:gold_wire','basic_materials:gold_wire'};
          383  +	{'',mtlp('vidrium','block'),''};
          384  +	{'basic_materials:gold_wire','basic_materials:gold_wire','basic_materials:gold_wire'};
          385  +}, 4)
          386  +regtech('ley_puncture', 'Ley Puncture', {metal = 1})
          387  +regtech('pulse_rectifier', 'Pulse Rectifier', {metal = 1})
          388  +regtech('current_felicitator', 'Current Felicitator', {metal = 1})
          389  +
          390  +regtech('conduction_plate', 'Conduction Plate', {metal = 1}, {
          391  +	{'','default:copper_ingot',''};
          392  +	{'','stairs:slab_stone',''};
          393  +	{'basic_materials:copper_wire','basic_materials:steel_bar','basic_materials:copper_wire'};
          394  +})
          395  +
          396  +regtech('catalytic_convector', 'Catalytic Convector', {metal = 1}, {
          397  +	{'basic_materials:heating_element','default:gold_ingot','basic_materials:heating_element'};
          398  +	{'default:mese_crystal','default:mese_crystal','default:mese_crystal'};
          399  +	{'sorcery:tungsten_ingot','sorcery:oil_flame','sorcery:tungsten_ingot'};
          400  +}, 1, {
          401  +	{'sorcery:oil_flame',sorcery.register.residue.db['sorcery:oil_flame']};
   434    402   })
          403  +
          404  +
          405  +regcore('syncretic', 'Syncresis')
          406  +regcore('mandatic', 'Mandatic')
          407  +-- regcore('praxic', 'Praxis')
          408  +regcore('counterpraxic', 'Counterpraxis')
          409  +
   435    410   
   436    411   --- possible other components
   437    412   -- felicitator
   438    413   -- flux rectifier
   439    414   -- flux suppressor
   440    415   -- flux amplifier
   441    416   -- tacit web
................................................................................
   520    495   	replacements = {
   521    496   		{'basic_materials:steel_wire', 'basic_materials:empty_spool'};
   522    497   		{'basic_materials:copper_wire', 'basic_materials:empty_spool'};
   523    498   		{'basic_materials:copper_wire', 'basic_materials:empty_spool'};
   524    499   		{'basic_materials:steel_wire', 'basic_materials:empty_spool'};
   525    500   	};
   526    501   }
          502  +
          503  +minetest.register_craft {
          504  +	output = 'sorcery:inversion_matrix';
          505  +	recipe = {
          506  +		{'','sorcery:inverter_coil','basic_materials:gold_wire'};
          507  +		{'sorcery:inverter_coil','sorcery:leyline_stabilizer','sorcery:inverter_coil'};
          508  +		{'basic_materials:gold_wire','sorcery:inverter_coil',''};
          509  +	};
          510  +}
          511  +
   527    512   
   528    513   minetest.register_craft {
   529    514   	output = 'sorcery:field_emitter';
   530    515   	recipe = {
   531    516   		{'basic_materials:steel_bar','xpanes:pane_flat','basic_materials:steel_bar'};
   532    517   		{'sorcery:beam_generator','sorcery:leyline_stabilizer','sorcery:beam_generator'};
   533    518   		{'sorcery:beam_generator','basic_materials:copper_wire','sorcery:beam_generator'};
................................................................................
   683    668   	[{'vidrium','cobalt','levitanium'}] = 'azure';
   684    669   }
   685    670   
   686    671   for metals,color in pairs(auxdyes) do
   687    672   	local dye = 'dye:' .. color
   688    673   	if minetest.registered_items[dye] then
   689    674   		local pd = {} for i=1,3 do
   690         -			pd[i] = sorcery.data.metals[metals[i]].parts.powder
          675  +			pd[i] = mtlp(metals[i],'powder')
   691    676   		end
   692    677   		minetest.register_craft {
   693    678   			output = dye .. ' 4';
   694    679   			recipe = {
   695    680   				{'',    pd[2],                     ''};
   696    681   				{pd[1],'basic_materials:paraffin', pd[3]};
   697    682   				{'',   'bucket:bucket_water',      ''};