sorcery  Check-in [f165d9e39f]

Overview
Comment:add blood god, add gravitator, add hand-drawn ore images, add mana hud display for enchanted items, various tweaks and enhancements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: f165d9e39fcec9a2efe6483af706d887f3fa254feae8aa355d8f4ec205004ea8
User & Date: lexi on 2020-09-24 23:07:33
Other Links: manifest | tags
Context
2020-09-26
18:49
add writing stand for editing codexes; add scissors, ink, erasure fluid, pens; touch up codex UI; add many recipe notes; add craft divination type for crafttools; defuckulate fucktarded crafttool impl; enhance table library with missing features like lua's table.unpack; many bug fixes and enhancements; blood for the blood god check-in: 72eebac4bc user: lexi tags: trunk
2020-09-24
23:07
add blood god, add gravitator, add hand-drawn ore images, add mana hud display for enchanted items, various tweaks and enhancements check-in: f165d9e39f user: lexi tags: trunk
2020-08-30
22:47
updates check-in: 65759dbfde user: lexi tags: trunk
Changes

Added admin.lua version [41dac58ae7].

            1  +minetest.register_chatcommand('enchants', {
            2  +	description = 'Log information about the currently held object\'s enchantment';
            3  +	privs = { server = true };
            4  +	func = function(caller,params)
            5  +		local tool = minetest.get_player_by_name(caller):get_wielded_item()
            6  +		minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool)))
            7  +		local binary = tool:get_meta():get_string('sorcery_enchantment_recs')
            8  +		local dumpout = ''
            9  +		for i=1,string.len(binary) do
           10  +			dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') 
           11  +		end
           12  +		print(dumpout)
           13  +	end;
           14  +})
           15  +
           16  +-- minetest.register_chatcommand('hover', {
           17  +-- 	description = 'Test hover effect';
           18  +-- 	privs = { fly = true };
           19  +-- 	func = function(caller,params)
           20  +-- 		local player = minetest.get_player_by_name(caller)
           21  +-- 		late.new_effect(player, {
           22  +-- 			duration = 5;
           23  +-- 			fall = 5;
           24  +-- 			impacts = {
           25  +-- 				gravity = -0.1;
           26  +-- 			};
           27  +-- 		})
           28  +-- 	end;
           29  +-- })

Modified altar.lua from [5335f5f5e0] to [f718356661].

     1      1   local altar_item_offset = {
     2      2   	x = 0, y = -0.3, z = 0
     3      3   }
            4  +
            5  +local range = function(min, max)
            6  +	local span = max - min
            7  +	local val = math.random() * span
            8  +	return val + min
            9  +end
     4     10   
     5     11   local get_altar_ent = function(pos)
     6     12   	for _, obj in pairs(minetest.get_objects_inside_radius(pos,0.9)) do
     7     13   		if not obj then goto nextloop end
     8     14   		local ent = obj:get_luaentity()
     9     15   		if not ent then goto nextloop end
    10     16   
................................................................................
    98    104   			local bestow = function(item,color)
    99    105   				if type(item) == 'string' then
   100    106   					item = ItemStack(item)
   101    107   				end
   102    108   				if color == nil then
   103    109   					color = sorcery.lib.color(god.color)
   104    110   				end
   105         -				local range = function(min, max)
   106         -					local span = max - min
   107         -					local val = math.random() * span
   108         -					return val + min
   109         -				end
   110    111   				for i=0,32 do
   111    112   					minetest.add_particle{
   112    113   						pos = {
   113    114   							x = altar.x + range(-0.4,0.4);
   114    115   							z = altar.z + range(-0.4,0.4);
   115    116   							y = altar.y + range(-0.2,0.3);
   116    117   						};
................................................................................
   217    218   				-- loop through the list of things this god will consecrate and
   218    219   				-- check whether the item on the altar is any of them
   219    220   				for s, cons in pairs(god.consecrate) do
   220    221   					local cost, tx = cons[1], cons[2]
   221    222   					if type(tx) == "table" then
   222    223   						tx = tx[math.random(#tx)]
   223    224   					end
          225  +					-- preserve wear
   224    226   					local gift = ItemStack(tx)
   225    227   					local wear = stack:get_wear()
   226    228   					if wear > 0 then
   227    229   						gift:set_wear(wear)
   228    230   					end
          231  +					-- preserve meta
          232  +					gift:get_meta():from_table(stack:get_meta():to_table())
          233  +					-- reflash enchantments to ensure label is accurate
          234  +					local ench = sorcery.enchant.get(gift)
          235  +					if #ench.spells > 0 then
          236  +						-- add a bit of energy as a gift?
          237  +						if math.random(math.ceil(god.stinginess * 0.5)) == 1 then
          238  +							local max = 0.05 * god.generosity
          239  +							ench.energy = ench.energy * range(0.7*max,max)
          240  +						end
          241  +						sorcery.enchant.set(gift,ench)
          242  +					end
   229    243   					if itemname == s then
   230    244   						if divine_favor >= cost then
   231    245   							bestow(gift)
   232    246   							divine_favor = divine_favor - cost
   233    247   							print(god.name..'has consecrated ' ..s.. ' into ' ..tx.. ', for the cost of ' ..cost.. ' points of divine favor')
   234    248   							goto refresh
   235    249   						end

Added context.lua version [4a989c354e].

            1  +sorcery.ctx = {
            2  +	users = {};
            3  +	get = function(uo)
            4  +		local name = uo:get_player_name()
            5  +		if sorcery.ctx.users[name] == nil then
            6  +			sorcery.ctx.users[name] = {}
            7  +		end
            8  +		return sorcery.ctx.users[name]
            9  +	end;
           10  +	stat = function(uo)
           11  +		local name = uo:get_player_name()
           12  +		return (sorcery.ctx.users[name] ~= nil)
           13  +	end;
           14  +}
           15  +
           16  +minetest.register_on_leaveplayer(function(obj)
           17  +	local name = obj:get_player_name()
           18  +	if sorcery.ctx.users[name] then
           19  +		sorcery.ctx.users[name] = nil
           20  +	end
           21  +end)

Modified cookbook.lua from [b21ad56f71] to [89adffa44b].

    80     80   		end
    81     81   	end
    82     82   	return names[math.random(#names)]
    83     83   end end
    84     84   local find_builtin = function(out)
    85     85   	local rec = {}
    86     86   	local i = minetest.get_craft_recipe(out)
    87         -	if #i.items == 0 then return nil end
           87  +	if i == nil or i.items == nil or #i.items == 0 then return nil end
    88     88   	local w = (i.width == 0) and 3 or i.width
    89     89   	for j=1,#i.items do
    90     90   		local row = math.floor((j-1) / w)
    91     91   		local col = (j-1) % w
    92     92   		if i.items[j] then
    93     93   			rec[1 + (row * 3) + col] = i.items[j]
    94     94   		end
................................................................................
   111    111   	end
   112    112   	return i
   113    113   end
   114    114   local function desc_builtin(i)
   115    115   	local desc
   116    116   	i, desc = group_eval(i)
   117    117   	-- print('describing ',i,dump(minetest.registered_items[i]))
   118         -	if not minetest.registered_items[i] then
          118  +	local s = ItemStack(i)
          119  +	if not minetest.registered_items[s:get_name()] then
   119    120   		minetest.log('WARNING: unknown item in recipe ' .. i)
   120    121   		return 'Unknown Item'
   121    122   	end
   122         -	if not desc then desc = minetest.registered_items[i].description end
          123  +	if not desc then desc = minetest.registered_items[s:get_name()].description end
   123    124   	if not desc then return 'Peculiar Item' end
   124    125   
   125    126   	local eol = string.find(desc,'\n')
   126         -	if not eol then return desc else return string.sub(desc,1,eol-1) end
          127  +	if eol then desc = string.sub(desc,1,eol-1) end
          128  +
          129  +	if s:get_count() > 1 then
          130  +		desc = string.format("%s (%u)",desc,s:get_count())
          131  +	end
          132  +	return desc
   127    133   end;
   128    134   
   129    135   local bookadjs = { -- sets are in reverse order!
   130    136   	{'Celestial', 'Divine', 'Inspired', 'Heavenly';
   131    137   	 'Mystic', 'Diabolic', 'Luminous', 'Forsaken'};
   132    138   
   133    139   	{'Dark', 'Perfected', 'Flawless', 'Unthinkable';
................................................................................
   135    141   
   136    142   	{'Splendid', 'Magnificent', 'Sublime', 'Grand';
   137    143   	 'Beneficent', 'Mysterious', 'Peculiar', 'Eerie';
   138    144   	 'Fulsome', 'Fearsome', 'Curious', 'Fascinating';
   139    145        'Notorious', 'Infamous'};
   140    146   }
   141    147   
          148  +local cache = {
          149  +	populate_grindables = function(cache)
          150  +		if not cache.grindables then
          151  +			cache.grindables = {}
          152  +			for k,v in pairs(minetest.registered_items) do
          153  +				if sorcery.itemclass.get(k, 'grindable') then
          154  +					cache.grindables[#cache.grindables+1] = k
          155  +				end
          156  +			end
          157  +		end
          158  +	end;
          159  +}
   142    160   sorcery.cookbook.classes = {
   143    161   	craft = {
   144    162   		name = 'Crafting Guide';
   145    163   		node = 'xdecor:workbench';
   146    164   		booksuf = 'Manual';
   147    165   		w = 3, h = 3;
   148    166   		chance = 2;
................................................................................
   158    176   	-- 	slots = slot3x3;
   159    177   	-- };
   160    178   	cook = {
   161    179   		name = 'Cooking Recipe';
   162    180   		node = 'default:furnace';
   163    181   		booksuf = 'Cookbook';
   164    182   		w = 1, h = 1;
   165         -		chance = 5;
          183  +		chance = 3;
   166    184   		slots = {{-0.2,0}};
   167    185   		pick = pick_builtin('cooking');
   168    186   		find = find_builtin;
   169    187   		props = props_builtin;
   170    188   		apply_exclusions = true;
   171    189   	};
   172    190   	infuse = {
   173    191   		name = 'Infusion Recipe';
   174    192   		node = 'sorcery:infuser';
   175    193   		booksuf = 'Pharmacopeia';
   176    194   		w = 1, h = 2;
   177         -		chance = 2;
          195  +		chance = 4;
   178    196   		slots = {
   179    197   			{0,0};
   180    198   			{0,1};
   181    199   		};
   182    200   		pick = function(restrict)
   183    201   			-- TODO make sure affinity restrictions match
   184    202   			return sorcery.data.infusions[math.random(#sorcery.data.infusions)].output
   185    203   		end;
   186    204   		title = function(output)
   187    205   			for _,i in pairs(sorcery.data.infusions) do
   188         -				print(dump(i))
   189    206   				if i.output == output then
   190    207   					if i._proto and i._proto.name
   191    208   						then return i._proto.name
   192    209   						else break end
   193    210   				end
   194    211   			end
   195    212   			return 'Mysterious Potion'
................................................................................
   198    215   			for _,i in pairs(sorcery.data.infusions) do
   199    216   				if i.output == out then
   200    217   					return { i.infuse, i.into }
   201    218   				end
   202    219   			end
   203    220   		end;
   204    221   		props = function(out)
   205         -			local i = sorcery.cookbook.classes.infuse.find(out)
   206         -			if i.recipe then return i.info else return {} end
          222  +			for _,i in pairs(sorcery.data.infusions) do
          223  +				if i.output == out then
          224  +					if i.recipe then return i.recipe else return {} end
          225  +				end
          226  +			end
          227  +		end;
          228  +	};
          229  +	grind = {
          230  +		name = 'Milling Guide';
          231  +		node = 'sorcery:mill';
          232  +		booksuf = 'Manual';
          233  +		chance = 1;
          234  +		w = 1, h = 2;
          235  +		pick = function(restrict)
          236  +			cache:populate_grindables()
          237  +			local i = cache.grindables[math.random(#cache.grindables)]
          238  +			local pd = sorcery.itemclass.get(i, 'grindable')
          239  +			return pd.powder
          240  +		end;
          241  +		desc = desc_builtin;
          242  +		props = props_builtin;
          243  +		slots = {
          244  +			{0,1},
          245  +			{0,0};
          246  +		};
          247  +		find = function(out)
          248  +			cache:populate_grindables()
          249  +			for _,v in pairs(cache.grindables) do
          250  +				local g = sorcery.itemclass.get(v,'grindable')
          251  +				if g.powder == out then
          252  +					if g.grindcost then
          253  +						v = v .. ' ' .. tostring(g.grindcost)
          254  +					end
          255  +					local mbh = sorcery.lib.tbl.keys(sorcery.data.metals)
          256  +					table.sort(mbh, function(a,b)
          257  +						return sorcery.data.metals[a].hardness < sorcery.data.metals[b].hardness
          258  +					end)
          259  +					for _,metal in pairs(mbh) do
          260  +						local md = sorcery.data.metals[metal]
          261  +						if ((not md.no_tools) or md.grindhead) and md.hardness >= g.hardness then
          262  +							return {v, 'sorcery:mill_grindhead_' .. metal}
          263  +						end
          264  +					end
          265  +					return {v,''} -- !!
          266  +				end
          267  +			end
   207    268   		end;
   208    269   	};
   209    270   	-- wand = {
   210    271   	--	booksuf = 'Grimoire';
   211    272   	-- }
   212    273   	enchant = {
   213    274   		name = 'Enchantment Matrix';
   214    275   		node = 'sorcery:enchanter';
   215    276   		booksuf = 'Grimoire';
   216    277   		drawslots = false;
   217         -		chance = 1;
          278  +		chance = 6;
   218    279   		w = 2, h = 2;
   219    280   		pick = function(restrict)
   220    281   			-- TODO make sure affinity restrictions match
   221    282   			local names = {}
   222    283   			for k,v in pairs(sorcery.data.enchants) do
   223    284   				if v.recipe then names[#names+1] = k end
   224    285   			end
................................................................................
   283    344   sorcery.cookbook.pickrecipe = function(kind,restrict)
   284    345   	if kind == nil then
   285    346   		for k,v in pairs(recipe_kinds) do
   286    347   			if math.random(v.chance) == 1 then
   287    348   				kind = k break
   288    349   			end
   289    350   		end
   290         -		-- local rks = sorcery.lib.tbl.keys(recipe_kinds)
   291         -		-- kind = rks[math.random(#rks)]
          351  +		if kind == nil then -- oh well, we tried
          352  +			local rks = sorcery.lib.tbl.keys(recipe_kinds)
          353  +			kind = rks[math.random(#rks)]
          354  +		end
   292    355   	end
   293    356   
   294    357   	return recipe_kinds[kind].pick(restrict), kind
   295    358   end
   296    359   
   297         -local render_recipe = function(kind,ingredients,result)
          360  +local render_recipe = function(kind,ingredients,result,notes_right)
   298    361   	local k = recipe_kinds[kind]
   299    362   	local t = ''
   300    363   	for i=1,#k.slots do
   301    364   		local x, y = k.slots[i][1], k.slots[i][2]
   302    365   		if ingredients[i] and ingredients[i] ~= '' then
   303    366   			local tt
   304    367   			if k.indesc then tt = k.indesc(ingredients[i]) else tt = desc_builtin(ingredients[i]) end
................................................................................
   312    375   				t = string.format('box[%f,%f;0.1,0.1;#00000060]',x+0.45,y+0.45) .. t
   313    376   			end
   314    377   		end
   315    378   	end
   316    379   	local img, ot
   317    380   	local props = k.props(result)
   318    381   	if props.note then
          382  +		local nx, ny, nw, nh
          383  +		if notes_right then
          384  +			nx = 5 ny = 0
          385  +			nw = 3 nh = 3
          386  +		else
          387  +			nx = 0 ny = 3
          388  +			nw = 4 nh = 1
          389  +		end
   319    390   		t = t .. string.format([[
   320         -			textarea[0,3;4,1;;;%s]
   321         -		]], minetest.formspec_escape(props.note))
          391  +			textarea[%f,%f;%f,%f;;;%s]
          392  +		]], nx,ny,nw,nh, minetest.formspec_escape(props.note))
   322    393   	end
   323    394   	if k.icon then img = k.icon(result) end
   324    395   	if k.outdesc then ot = k.outdesc(result) else ot = desc_builtin(result) end
   325    396   		-- image[%f,%f;1,1;gui_furnace_arrow_bg.png^[transformR270]
   326    397   	return t .. string.format([[
   327    398   		item_image[%f,%f;1,1;%s]tooltip[%f,%f;1,1;%s]
   328    399   		]] --[[box[%f,%f;1,1;#850083A0]] .. [[
................................................................................
   332    403   		k.w, k.h/2 - 0.5, minetest.formspec_escape(minetest.registered_nodes[k.node].description),
   333    404   			-- k.w+1, k.h/2 - 0.5,
   334    405   		img and 'image' or 'item_image',
   335    406   			k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(img or result),
   336    407   			k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(ot))
   337    408   end;
   338    409   
   339         -local retrieve_recipe = function(kind,out)
          410  +local retrieve_recipe = function(kind,out,notes_right)
   340    411   	local rec = recipe_kinds[kind]
   341    412   	local ing = rec.find(out)
   342         -	return render_recipe(kind,ing,out), rec.w, rec.h
          413  +	return render_recipe(kind,ing,out,notes_right), rec.w, rec.h
   343    414   end
   344    415   
   345    416   sorcery.cookbook.setrecipe = function(stack,k,r,restrict)
   346    417   	local meta = stack:get_meta()
   347    418   	if not r then r,k = sorcery.cookbook.pickrecipe(k,restrict) end
   348    419   	local t = recipe_kinds[k]
   349    420   	meta:set_string('recipe_kind', k)
................................................................................
   442    513   		{2,1.3};
   443    514   		{2,4.5};
   444    515   		{2,7.7};
   445    516   		-- {0,1.3}, {4, 1.3};
   446    517   		-- {0,4.7}, {4, 4.7};
   447    518   		-- {0,8.1}, {4, 8.1};
   448    519   	}
   449         -	print('book:',dump(book))
   450         -	print('pgofs',pgofs)
   451    520   	for i=pgofs,(pgofs + constants.recipes_per_cookbook_page-1) do
   452    521   		local maxw, maxh = 3, 2
   453    522   		if not book.pages[i+1] then break end
   454    523   		local nr = 1+(i - pgofs)
   455    524   		local x,y = coords[nr][1], coords[nr][2]
   456    525   		local k = recipe_kinds[book.pages[i+1].kind]
   457    526   		local ox,oy = maxw - k.w, maxh - k.h
   458    527   		form = form .. string.format('container[%f,%f]%scontainer_end[]',(x+ox)-0.5,y,
   459         -			retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name))
          528  +			retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name, true))
   460    529   	end
   461    530   
   462    531   	minetest.show_formspec(user:get_player_name(), 'sorcery:cookbook', form)
   463    532   end
   464    533   
   465    534   minetest.register_craftitem('sorcery:cookbook', {
   466    535   	description = 'Catalog';

Modified data/compat.lua from [d448ba2bd2] to [ffafb80a86].

     6      6   -- not cooperate with sorcery. it is used by itemclass.lua
     7      7   -- to seamlessly locate the material properties and
     8      8   -- capabilities of an item.
     9      9   local grain = {
    10     10   	hardness = 1;
    11     11   	value = 1;
    12     12   	powder = 'farming:flour';
    13         -	grindcost = 4;
           13  +	grindcost = 3;
    14     14   }
    15     15   return {
    16     16   	grindables = {
    17     17   		['farming:wheat'] = grain;
    18     18   		['farming:rye'] = grain;
    19     19   		['farming:oats'] = grain;
    20     20   		['farming:barley'] = grain;
    21     21   		['farming:rice'] = {
    22     22   			powder = 'farming:rice_flour';
    23     23   			hardness = 1;
    24     24   			value = 1;
    25         -			grindcost = 4;
           25  +			grindcost = 3;
    26     26   		}
    27     27   	};
    28     28   	ley = {
    29     29   		['default:mese'] = {
    30     30   			power = 0.25;
    31     31   			mode = 'produce';
    32     32   		};
................................................................................
    41     41   			value = 1, raw = true;
    42     42   		};
    43     43   		['default:diamond'] = {
    44     44   			id = 'diamond', gem = true;
    45     45   			value = 9, raw = true;
    46     46   		};
    47     47   	};
           48  +	ore = {
           49  +		['default:stone_with_iron'   ] = { id = 'steel',   metal = true };-- :/
           50  +		['default:stone_with_copper' ] = { id = 'copper',  metal = true };
           51  +		['default:stone_with_tin'    ] = { id = 'tin',     metal = true };
           52  +		['default:stone_with_gold'   ] = { id = 'gold',    metal = true };
           53  +		['default:stone_with_mese'   ] = { id = 'mese',    gem = true };
           54  +		['default:stone_with_diamond'] = { id = 'diamond', gem = true };
           55  +	};
    48     56   }

Modified data/draughts.lua from [442f0f3bcd] to [ab3b6e4e1b].

     3      3   	regen = {
     4      4   		name = 'Regeneration';
     5      5   		color = {243,106,44};
     6      6   		style = 'sparkle';
     7      7   		desc = "A potion that amps up your body's natural\nhealing abilities, causing you to heal rapidly\neven if you're starving";
     8      8   		infusion = 'sorcery:blood';
     9      9   		basis = 'sorcery:potion_luminous';
    10         -		effect = function(self, user)
           10  +		duration = function(self,meta)
           11  +			return 10 + meta:get_int('duration')*2
           12  +		end;
           13  +		effect = function(self, user, proto)
    11     14   			local meta = self:get_meta()
    12     15   			local force = 1 + meta:get_int('force')
    13         -			local duration = 10 + meta:get_int('duration')*2
    14     16   			late.new_effect(user, {
    15         -				duration = duration;
           17  +				duration = proto:duration(meta);
    16     18   				raise = 4; fall = 4;
    17     19   				impacts = {
    18     20   					damage = {0-force, 0.5};
    19     21   				};
    20     22   			})
    21     23   		end;
    22     24   	};
................................................................................
    25     27   		color = {79,228,243}; style = 'sparkle';
    26     28   		basis = 'sorcery:potion_luminous';
    27     29   		desc = "Conserve your precious supply of oxygen when diving down into the ocean's depths";
    28     30   		infusion = 'sorcery:extract_kelp';
    29     31   		duration = function(self,meta)
    30     32   			return 20 + meta:get_int('duration')*30
    31     33   		end;
    32         -		effect = function(self,user)
           34  +		effect = function(self,user,proto)
    33     35   			local meta = self:get_meta()
    34     36   			local force = 1 + 2 * (meta:get_int('force'))
    35     37   			late.new_effect(user, {
    36         -				duration = self:get_definition()._proto:duration(meta);
           38  +				duration = proto:duration(meta);
    37     39   				raise = 2; fall = 5;
    38     40   				impacts = {
    39     41   					breath = {1 * force, 5}
    40     42   				};
    41     43   			})
    42     44   		end;
    43     45   	};
    44     46   	heal = {
    45     47   		name = 'Healing';
    46     48   		color = {243,44,58};
    47     49   		style = 'sparkle';
    48     50   		no_duration = true;
    49         -		desc = 'This blood-red liquid glitters with an\nenchantment that rapidly knits torn flesh and broken\nbones';
           51  +		desc = 'This blood-red liquid glitters with an enchantment that rapidly knits torn flesh and broken bones';
    50     52   		infusion = 'sorcery:oil_sanguine';
    51     53   		basis = 'sorcery:potion_luminous';
    52     54   		effect = function(self, user)
    53     55   			local meta = self:get_meta()
    54     56   			user:set_hp(user:get_hp() + (2 * (2 + meta:get_int('force'))))
    55     57   		end;
    56     58   	};
................................................................................
    62     64   		color = {184,106,224}; style = 'sparkle';
    63     65   		infusion = 'default:coal_lump';
    64     66   		basis = 'sorcery:potion_soft';
    65     67   		desc = 'Drinking this dark, swirling draught will shelter you from the power of mortal perception for a time, even rendering you entirely invisible at full strength.';
    66     68   		duration = function(self,meta)
    67     69   			return 30 + meta:get_int('duration')*30
    68     70   		end;
    69         -		effect = function(self,user)
           71  +		effect = function(self,user,proto)
    70     72   			local meta = self:get_meta()
    71     73   			local force = 1 + 1 * (meta:get_int('force'))
    72     74   			local opacity = 1.0 - (1.0 * (force / 4)) 
    73     75   			late.new_effect(user, {
    74         -				duration = self:get_definition()._proto:duration(meta);
           76  +				duration = proto:duration(meta);
    75     77   				raise = 10; fall = 15;
    76     78   				impacts = {
    77     79   					texture = { nil, opacity };
    78     80   					nametag = { nil, opacity };
    79     81   				};
    80     82   			})
    81     83   		end;
................................................................................
    86     88   		desc = 'While this potion flows through your veins, your vision will be strengthened against the darkness of the night';
    87     89   		maxforce = 3;
    88     90   		infusion = 'sorcery:oil_dawn';
    89     91   		basis = 'sorcery:potion_soft';
    90     92   		duration = function(self,meta)
    91     93   			return 50 + meta:get_int('duration')*70
    92     94   		end;
    93         -		effect = function(self,user)
           95  +		effect = function(self,user,proto)
    94     96   			--TODO ensure it can only be drunk at night
    95     97   			--TODO ensure it can't last more than one night
    96     98   			local meta = self:get_meta()
    97     99   			local force = 0.3 * (1+meta:get_int('force'))
    98    100   			late.new_effect(user, {
    99         -				duration = self:get_definition()._proto:duration(meta);
          101  +				duration = proto:duration(meta);
   100    102   				raise = 15; fall = 30;
   101    103   				impacts = {
   102    104   					daylight = force;
   103    105   				};
   104    106   			})
   105    107   		end;
   106    108   	};
   107    109   	antigravity = {
   108    110   		name = 'Antigravity';
   109    111   		color = {240,59,255}; style = 'sparkle';
   110         -		desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial.';
          112  +		desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial';
   111    113   		infusion = 'sorcery:oil_stone';
   112    114   		basis = 'sorcery:potion_soft';
   113    115   		duration = function(self,meta)
   114    116   			return 20 + meta:get_int('duration')*25
   115    117   		end;
   116         -		effect = function(self,user)
          118  +		effect = function(self,user,proto)
   117    119   			local meta = self:get_meta()
   118    120   			local force = 1 - 0.3 * (meta:get_int('force') + 1)
   119    121   			late.new_effect(user, {
   120         -				duration = self:get_definition()._proto:duration(meta);
          122  +				duration = proto:duration(meta);
   121    123   				raise = 2; fall = 15;
   122    124   				impacts = {
   123    125   					gravity = force;
   124    126   				};
   125    127   			})
   126    128   		end;
   127    129   	};
................................................................................
   130    132   		color = {187,176,203};
   131    133   		desc = 'Move and strike with the speed of a hurricane as this enchanted fluid courses through your veins';
   132    134   		infusion = 'sorcery:grease_storm';
   133    135   		basis = 'sorcery:potion_soft';
   134    136   		duration = function(self,meta)
   135    137   			return 10 + meta:get_int('duration')*15
   136    138   		end;
   137         -		effect = function(self,user)
          139  +		effect = function(self,user,proto)
   138    140   			local meta = self:get_meta()
   139    141   			local force = 2 + 0.7 * (meta:get_int('force'))
   140    142   			late.new_effect(user, {
   141         -				duration = self:get_definition()._proto:duration(meta);
          143  +				duration = proto:duration(meta);
   142    144   				raise = 5; fall = 5;
   143    145   				impacts = {
   144    146   					speed = force;
   145    147   				};
   146    148   			})
   147    149   		end;
   148    150   	};
   149    151   	obsidian = {
   150    152   		name = 'Obsidian';
   151    153   		infusion = 'default:obsidian_shard';
   152    154   		color = {76,0,121}; style = 'sparkle';
   153    155   		desc = 'Walk untroubled through volleys of arrows and maelstroms of swinging blades, for all will batter uselessly against skin protected by spellwork mightier than the doughtiest armor';
   154    156   		infusion = 'default:obsidian_shard';
   155         -		basis = 'sorcery:potion_soft';
          157  +		basis = 'sorcery:potion_luminous';
   156    158   		no_force = true;
   157    159   		duration = function(self,meta)
   158    160   			return 5 + meta:get_int('duration')*7
   159    161   		end;
   160    162   	};
   161    163   	lavabreathing = {
   162    164   		name = 'Lavabreathing';
................................................................................
   182    184   		color = {164,252,55}; style = 'sparkle';
   183    185   		desc = 'Rise into the air for a time and stay there until the potion wears off';
   184    186   		basis = 'sorcery:potion_soft';
   185    187   	}; 
   186    188   	flight = {
   187    189   		name = 'Flight';
   188    190   		color = {143,35,255}; style = 'sparkle';
   189         -		desc = 'Free yourself totally from the shackles of gravity';
          191  +		desc = 'Free yourself totally from the shackles of gravity and soar through the air however you should will';
   190    192   		basis = 'sorcery:potion_soft';
          193  +		infusion = 'sorcery:grease_lift';
          194  +		no_force = true;
          195  +		duration = function(self,meta)
          196  +			return 40 + meta:get_int('duration')*55
          197  +		end;
          198  +		effect = function(self,user,proto)
          199  +			late.new_effect(user, {
          200  +				duration = proto:duration(self:get_meta());
          201  +				impacts = {
          202  +					fly = 1;
          203  +				};
          204  +			})
          205  +		end;
   191    206   	};
   192    207   	leap = {
   193    208   		name = 'Leap';
   194    209   		color = {164,252,55};
   195    210   		desc = 'Soar high into the air each time you jump (but may risk damage if used without a Feather Potion)';
   196    211   		infusion = 'sorcery:oil_wind';
   197    212   		basis = 'sorcery:potion_soft';
   198    213   		duration = function(self,meta)
   199    214   			 return 5 + meta:get_int('duration')*7
   200    215   		end;
   201         -		effect = function(self,user)
          216  +		effect = function(self,user,proto)
   202    217   			local meta = self:get_meta()
   203    218   			local force = 2 + (0.5 * meta:get_int('force'))
   204    219   			late.new_effect(user, {
   205         -				duration = self:get_definition()._proto:duration(meta);
          220  +				duration = proto:duration(meta);
   206    221   				fall = 3;
   207    222   				impacts = {
   208    223   					jump = force;
   209    224   				};
   210    225   			})
   211    226   		end
   212    227   	};
   213    228   }

Modified data/enchants.lua from [2bce1083af] to [5670d710ce].

    33     33   			return stack
    34     34   		end;
    35     35   	};
    36     36   	drain = {
    37     37   		groups = {'sword'};
    38     38   		cost = 4;
    39     39   	}; -- health vampirism
    40         -	glitter = { -- created prolonged light on digging
    41         -		name = 'Glitter';
           40  +	glimmer = { -- created prolonged light on digging
           41  +		name = 'Glimmer';
    42     42   		groups = digtools;
    43     43   		affinity = 'cognic';
    44     44   		cost = 1;
    45     45   		tone = {255,235,195};
    46     46   		desc = 'Leave a trail of light hanging in the air as you dig';
           47  +		recipe = {
           48  +			{lens = 'convex',    gem = 'sapphire', dmg = 2};
           49  +			{lens = 'concave',   gem = 'ruby',     dmg = 1};
           50  +			{lens = 'concave',   gem = 'sapphire', dmg = 1};
           51  +		};
           52  +		on_dig = function(ctx)
           53  +			local chance = 10 -- make dependent on power somehow?
           54  +			if math.random(chance) == 1 then
           55  +				local lightlevel = math.floor(math.min(minetest.LIGHT_MAX,4*ctx.power))
           56  +				-- spawn a light block
           57  +				minetest.set_node(ctx.pos, {
           58  +					name = 'sorcery:air_glimmer_' .. tostring(lightlevel);
           59  +				})
           60  +				local lm = minetest.get_meta(ctx.pos)
           61  +				lm:set_float('duration',45)
           62  +				lm:set_float('timeleft',45)
           63  +				lm:set_int('power',lightlevel)
           64  +			end
           65  +		end;
    47     66   	};
    48     67   	harvest = { -- kills or digging ore replenish durability
    49     68   		name = 'Harvest';
    50     69   		cost = 0; -- energy is only depleted when repair takes place
    51     70   		tone = {255,84,187};
    52     71   		affinity = 'syncretic';
    53     72   		groups = {
................................................................................
    59     78   			{lens = 'concave',   gem = 'sapphire', dmg = 1};
    60     79   		};
    61     80   		desc = 'some damage is repaired when used to mine ore or kill an attacker';
    62     81   		on_dig = function(ctx)
    63     82   			local orepfx = "stone_with_" -- }:<
    64     83   			-- local oredrop = ' lump'
    65     84   			local barename = string.sub(ctx.node.name, string.find(ctx.node.name, ':') + 1)
    66         -			if minetest.get_item_group(ctx.node.name, 'ore') ~= 0 or
    67         -			   string.sub(barename,1,string.len(orepfx)) == orepfx 
    68         -			then
           85  +			if sorcery.itemclass.get(ctx.node.name,'ore') then
    69     86   				ctx.tool:add_wear(-(sorcery.enchant.strength(ctx.tool,'harvest') * 2000))
    70     87   				ctx.cost = 3
    71     88   			end
    72     89   		end;
    73     90   	};
    74     91   	conserve = { -- use less magical energy
    75     92   		name = 'Conserve';
................................................................................
   125    142   						color = sorcery.lib.color(colors[minetest.get_node(n).name]);
   126    143   						count = 100 * dstfac;
   127    144   					}
   128    145   				end
   129    146   			end
   130    147   		end;
   131    148   	};
   132         -	glitter = { -- increase odds of finding gem
          149  +	glitter = { 
   133    150   		name = 'Glitter';
   134    151   		cost = 10;
   135    152   		tone = {255,50,60};
   136    153   		desc = 'dramatically improve your chances of finding gems while mining veins';
   137    154   		groups = {'pick','pickaxe'};
   138    155   		affinity = 'entropic';
   139    156   		recipe = {
................................................................................
   183    200   		desc = 'cleave through sturdy ores and tear mortal flesh with fearsome ease';
   184    201   		apply = function(stack,power,base)
   185    202   			local caps = table.copy(stack:get_definition().tool_capabilities)
   186    203   			for g,v in pairs(caps.groupcaps) do
   187    204   				local unit = 2
   188    205   				caps.groupcaps[g].maxlevel = caps[g].maxlevel + math.floor(unit*power)
   189    206   			end
          207  +			if caps.damage_groups and caps.damage_groups.fleshy then
          208  +				caps.damage_groups.fleshy = caps.damage_groups.fleshy + power * 5;
          209  +			end
   190    210   			stack:get_meta():set_tool_capabilities(caps)
   191    211   			return stack
   192    212   		end;
   193    213   	};
   194    214   	-- multiply = {}; --  add a chance of receiving multiple drops of ore/coal
   195    215   	-- leech = {}; -- draw power from local leylines
          216  +	-- shadowcloak = {}; -- make player briefly invisible after blows are struck, reappearing only momentarily after each blow
          217  +	sanctify = {
          218  +		desc = 'prolong the blessings of the heavens';
          219  +		groups = {'sorcery_sanctify'};
          220  +		affinity = 'entropic';
          221  +		tone = {255,255,255};
          222  +		cost = 7;
          223  +		recipe = {
          224  +			{lens = 'amplifier', gem = 'ruby', dmg = 13};
          225  +			{lens = 'amplifier', gem = 'ruby', dmg = 15};
          226  +			{lens = 'amplifier', gem = 'ruby', dmg = 18};
          227  +		};
          228  +	};
   196    229   }

Modified data/gems.lua from [c84e6c472a] to [0836376152].

    32     32   		};
    33     33   	};
    34     34   	mese = {
    35     35   		foreign = 'default:mese_crystal';
    36     36   		foreign_shard = 'default:mese_crystal_fragment';
    37     37   		tone = {255,253,94};
    38     38   		energysource = 5;
           39  +		hardness = 6;
    39     40   		maxenergy = 600;
    40     41   		items = default_items('mese');
    41     42   		tools = true, armor = true;
    42     43   		randomfind = false;
    43     44   		slots = {
    44     45   			{affinity = {'praxic'}, confluence = 1};
    45     46   			{affinity = {'praxic'}, confluence = 0.5};

Modified data/gods.lua from [ae9e7f6603] to [7a41dba628].

    16     16   			tex = {
    17     17   				"default_grass.png",
    18     18   				"default_gold_block.png",
    19     19   				"default_copper_block.png",
    20     20   				"default_tin_block.png"
    21     21   			};
    22     22   		};
           23  +		bless = {
           24  +			potions = {};
           25  +			tools = {};
           26  +		};
    23     27   		consecrate = {
    24     28   			["flowerpot:empty"] = {2, {
    25     29   				"flowerpot:flowers_rose";
    26     30   				"flowerpot:flowers_tulip";
    27     31   				"flowerpot:flowers_viola";
    28     32   				"flowerpot:flowers_geranium";
    29     33   				"flowerpot:flowers_chrysanthemum_green";
    30     34   				"flowerpot:flowers_dandelion_white";
    31     35   				"flowerpot:flowers_dandelion_yellow";
    32     36   			}};
    33         -			["sorcery:dagger"] = {8, "sorcery:dagger_consecrated"};
    34         -			["sorcery:oil_mystic"] = {6, "sorcery:oil_purifying"};
    35         -			["sorcery:potion_water"] = {2, "sorcery:holy_water"};
           37  +			["sorcery:dagger"] = {17, "sorcery:dagger_consecrated"};
           38  +			["sorcery:oil_mystic"] = {9, "sorcery:oil_purifying"};
           39  +			["sorcery:potion_water"] = {4, "sorcery:holy_water"};
    36     40   			-- ["default:steel_ingot"] = {15, "sorcery:holy_token_harvest"};
    37     41   		};
    38     42   		sacrifice = {
    39     43   			-- beattitudes
    40     44   			["farming:straw"           ] = 1;
    41     45   			["farming:bread_slice"     ] = 1;
    42     46   			["farming:bread"           ] = 2;
................................................................................
    85     89   			["default:copper_lump"] = -1;
    86     90   			["default:coal_lump"] = -2;
    87     91   			["default:cactus"] = -2;
    88     92   			["default:dirt"] = -5;
    89     93   			["moreblocks:tar"] = -9;
    90     94   			["default:bucket_lava"] = -12;
    91     95   			["sorcery:blood"] = -15;
           96  +			["bonemeal:bone"] = -20;
    92     97   			["default:bones"] = -35;
    93     98   		};
    94     99   		gifts = {
    95    100   			-- gift specs = {favor, chance} where chance is the likelihood of a god bestowing the gift
    96    101   			["default:blueberry_bush_sapling"] = {120,15};
    97    102   			["default:blueberries"] = {60, 4};
    98    103   			["farming:coffee_beans"] = {58, 9};
    99    104   			["farming:seed_hemp"] = {55, 8};
          105  +			["bonemeal:fertiliser"] = {53, 3};
   100    106   			["farming:garlic_clove"] = {50, 7};
   101    107   			["farming:seed_mint"] = {50, 7};
   102    108   			["flowers:mushroom_red"] = {45, 2};
   103    109   			["farming:grapes"] = {43, 6};
   104    110   			["farming:seed_barley"] = {40, 6};
   105    111   			["farming:rhubarb"] = {38, 8};
   106    112   			["farming:beans"] = {35, 6};
   107    113   			["farming:raspberries"] = {30, 5};
          114  +			["bonemeal:mulch"] = {32, 3};
   108    115   			["farming:corn"] = {27, 2};
   109    116   			["farming:sugar"] = {24, 4};
   110    117   			["farming:salt"]  = {24, 3};
   111    118   			["farming:onion"] = {20, 7};
   112    119   			["farming:carrot"] = {20, 7};
   113    120   			["default:apple"] = {18, 2};
   114    121   			["farming:wheat"] = {14, 2};
          122  +			["bonemeal:mulch"] = {7, 7};
          123  +		};
          124  +	};
          125  +
          126  +	blood = {
          127  +		name = 'Faramesti Surax';
          128  +		bless = {
          129  +			potions = {
          130  +				Force = {50, 7};
          131  +				Longevity = {65, 3};
          132  +			};
          133  +			tools = {
          134  +				rend = {80, 15};
          135  +			};
          136  +		};
          137  +		generosity = 4;
          138  +		stinginess = 9;
          139  +		idol = {
          140  +			desc = "Blood Idol";
          141  +			width = 0.7;
          142  +			height = 1.3;
          143  +			tex = {
          144  +				"default_obsidian.png";
          145  +				"default_gold_block.png";
          146  +				"default_bronze_block.png^[multiply:#C32F2F";
          147  +				"default_bronze_block.png";
          148  +				"default_tin_block.png";
          149  +			};
          150  +		};
          151  +		sacrifice = {
          152  +			["sorcery:blood"] = 3;
          153  +			["bonemeal:bone"] = 9;
          154  +			["default:bones"] = 17;
          155  +			["sorcery:oil_sanguine"] = 26;
          156  +
          157  +			-- abominations
          158  +			["default:apple"] = -10;
          159  +			["farming:wheat"] = -20;
          160  +			["farming:bread"] = -30;
          161  +		};
          162  +		gifts = {
          163  +			["tnt:gunpowder"] = {40, 2};
          164  +			["bonemeal:bonemeal"] = {25, 4};
          165  +			["sorcery:grease_war"] = {98, 6};
          166  +		};
          167  +		consecrate = {
          168  +			["sorcery:dagger"] = {4, "sorcery:dagger_consecrated"};
   115    169   		};
   116    170   	};
   117    171   }

Modified data/greases.lua from [0a57245423] to [49c9344ae7].

    68     68   		color = {221,148,95};
    69     69   		core = { 'sorcery:oil_dawn', 'sorcery:oil_berry' };
    70     70   		mix = {
    71     71   			'sorcery:powder_aluminum';
    72     72   			'sorcery:powder_lithium';
    73     73   			'sorcery:extract_pine';
    74     74   		};
           75  +	};
           76  +	lift = {
           77  +		color = {219,73,210};
           78  +		style = 'sparkle';
           79  +		core = { 'sorcery:oil_wind', 'sorcery:oil_stone' };
           80  +		mix = {
           81  +			'sorcery:powder_levitanium';
           82  +			'sorcery:extract_fern';
           83  +		};
    75     84   	};
    76     85   }

Modified data/metals.lua from [bb9d0957fb] to [3567f41644].

    17     17   end
    18     18   
    19     19   return {
    20     20   	tin = {
    21     21   		ingot = 'default:tin_ingot';
    22     22   		block = 'default:tinblock';
    23     23   		tone = {172,172,172};
    24         -		no_tools = true; no_armor = true;
           24  +		no_tools = true; no_armor = true; grindhead = true;
    25     25   		hardness = 2;
    26     26   	};
    27     27   	copper = {
    28     28   		dye = 'orange';
    29     29   		ingot = 'default:copper_ingot';
    30     30   		block = 'default:copperblock';
    31     31   		tone = {255,176,61};

Modified data/spells.lua from [9b1dfc7187] to [0d89fbd301].

   448    448   			end
   449    449   			if not ctx.target or ctx.target.type ~= 'node' then return false end
   450    450   			local tgt = minetest.get_node(ctx.target.under)
   451    451   			if tgt.name == 'sorcery:enchanter' then
   452    452   				local meta = minetest.get_meta(ctx.target.under)
   453    453   				local inv = meta:get_inventory()
   454    454   				if inv:get_stack('item',1):get_name() == 'default:paper'
   455         -					and inv:get_stack('item',1):get_count() == 1
          455  +					-- and inv:get_stack('item',1):get_count() == 1
   456    456   					and not inv:is_empty('foci') then
   457    457   				   local ink1 = getcolor(inv:get_stack('foci',2))
   458    458   				   local ink2 = getcolor(inv:get_stack('foci',3))
   459    459   				   local restrict, kind, mod = {} do
   460    460   					   local ms = inv:get_stack('foci',1)
   461    461   					   if not ms:is_empty() then mod = ms:get_name() end
   462    462   				   end
................................................................................
   522    522   					   local rec = ItemStack('sorcery:recipe')
   523    523   					   local m = rec:get_meta()
   524    524   					   if ctx.base.gem == 'diamond' then
   525    525   						   -- make recipe for thing in slot 1
   526    526   					   else
   527    527   						   sorcery.cookbook.setrecipe(rec,kind,nil,restrict)
   528    528   					   end
   529         -					   inv:set_stack('item',1,rec)
          529  +					   local old = inv:get_stack('item',1)
          530  +					   -- TODO: detect hopper underneath and place
          531  +					   -- recipe into it instead of item slot
          532  +					   if old:get_count() == 1 then
          533  +						   inv:set_stack('item',1,rec)
          534  +					   else
          535  +						   old:take_item(1)
          536  +						   inv:set_stack('item',1,old)
          537  +						   minetest.add_item(ctx.target.above,rec)
          538  +					   end
   530    539   					   for i=1,inv:get_size('foci') do
   531    540   						   local f = inv:get_stack('foci',i)
   532    541   						   f:take_item(1)
   533    542   						   inv:set_stack('foci',i,f)
   534    543   					   end
   535    544   					   enchantment_sparkle(ctx,sorcery.lib.color(97,97,255))
   536    545   					   return

Modified disassembly.lua from [5ba85bac04] to [5131b0247b].

    20     20   		local rec = ItemStack{name = 'sorcery:recipe', count = maxrecs}
    21     21   		sorcery.cookbook.setrecipe(rec, 'craft', item:get_name())
    22     22   		i:set_stack('output',1,rec)
    23     23   	else
    24     24   		i:set_stack('output',1,ItemStack())
    25     25   	end
    26     26   end
           27  +local dsbox = {
           28  +	type = 'fixed';
           29  +	fixed = {
           30  +		-0.5, -0.5, -0.5;
           31  +		 0.5,  0.0,  0.5;
           32  +	};
           33  +}
    27     34   minetest.register_node('sorcery:disassembler', {
    28     35   	description = 'Disassembly Kit';
    29     36   	drawtype = 'mesh';
    30     37   	mesh = 'sorcery-disassembler.obj';
    31     38   	paramtype = 'light', sunlight_propagates = true;
    32     39   	paramtype2 = 'facedir';
    33     40   	groups = { cracky = 2, sorcery_tech = 1 };
           41  +	selection_box = dsbox;
           42  +	collision_box = dsbox;
    34     43   	tiles = {
    35     44   		'default_copper_block.png';
    36     45   		'default_wood.png';
    37     46   		'default_steel_block.png';
    38     47   		'default_stone.png';
    39     48   		'default_gold_block.png';
    40     49   		'default_coal_block.png';

Modified enchanter.lua from [59f5727496] to [c255af4d4e].

   316    316   			if i <= 2 then minetest.remove_node(pos) else
   317    317   				minetest.set_node(pos, {name='sorcery:air_flash_1'})
   318    318   				return true
   319    319   			end
   320    320   		end
   321    321   	});
   322    322   end
          323  +
          324  +local function enchpwrhud(user, flash, fac)
          325  +	-- this function displays or changes the HUD element
          326  +	-- that shows how much energy is left in an enchanted
          327  +	-- item. it is called by the dig handler and sequences
          328  +	-- callbacks to remove the HUD from the screen once
          329  +	-- its timeleft property has been used up. timeleft is
          330  +	-- reset if the 'flash' argument, which indicates
          331  +	-- whether the enchantment has just been used, is set
          332  +	-- to true; otherwise, it is left alone.
          333  +	--
          334  +	-- this whole thing is really unfriendly and without
          335  +	-- FP tricks it would have been intolerably painful
          336  +	-- to implement. minetest needs better primitives.
          337  +	local frame = math.ceil(16 * (1-math.min(1,fac)))
          338  +	if tostring(frame) == '-0' then frame = '0' -- ??????
          339  +		else frame = tostring(frame) end  
          340  +	local tex = 'sorcery_ui_manaring_' .. (flash and 'flash_' or '') .. frame .. '.png';
          341  +	local c = sorcery.ctx.get(user)
          342  +	if not c.hud_ench then
          343  +		local hid = user:hud_add {
          344  +			name = 'sorcery:manaring';
          345  +			hud_elem_type = 'image';
          346  +			text = tex;
          347  +			position = { x = 0.5, y = 0.5 };
          348  +			offset   = { x = 0,   y = 0  };
          349  +			scale    = { x = 2.0, y = 2.0 };
          350  +			z_index  = 0;
          351  +		}
          352  +		c.hud_ench = {
          353  +			id = hid;
          354  +			timeleft = 2.0;
          355  +			fn = false;
          356  +			fac = fac;
          357  +		}
          358  +		c = c.hud_ench
          359  +	else
          360  +		c = c.hud_ench
          361  +		c.fac = fac
          362  +		user:hud_change(c.id,'text',tex)
          363  +		if flash then c.timeleft = 2.0 end
          364  +	end
          365  +	if c.fn == false then
          366  +		c.fn = true
          367  +		local delta = 0.10
          368  +		-- tried making Δ conditional on 'flash' but it
          369  +		-- turns out that causes the flash not to always
          370  +		-- disappear in a timely manner. solving this
          371  +		-- efficiently would be a major, complex headache
          372  +		-- so i'm just compromising and setting delta to a
          373  +		-- constant :/
          374  +		minetest.after(delta, function()
          375  +			if not sorcery.ctx.stat(user) then return end
          376  +			local u = sorcery.ctx.get(user)
          377  +			local h = u.hud_ench
          378  +			if not h then return end
          379  +			print('timeleft,delta',h.timeleft,delta)
          380  +			if h.timeleft - delta <= 0 then
          381  +				user:hud_remove(h.id)
          382  +				u.hud_ench = nil
          383  +			else
          384  +				h.timeleft = h.timeleft - delta
          385  +				h.fn = false
          386  +				enchpwrhud(user, false, h.fac)
          387  +			end
          388  +		end)
          389  +	end
          390  +end
   323    391   
   324    392   minetest.register_on_dignode(function(pos, node, puncher)
   325    393   	if puncher == nil then return end -- i don't know why
   326    394   	-- this is necessary but you get rare crashes without it
          395  +
          396  +	-- perform leyline checks and call notify if necessary
          397  +	if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then
          398  +		sorcery.lib.node.notifyneighbors(pos)
          399  +	end
   327    400   
   328    401   	-- we're goint to do something VERY evil here and
   329    402   	-- replace the air with a "glow-air" that removes
   330    403   	-- itself after a short period of time, to create
   331    404   	-- a flash of light when an enchanted tool's used
   332    405   	-- to dig out a node
   333    406   	local tool = puncher:get_wielded_item()
................................................................................
   363    436   		if ch > sp.reliability then goto skip end
   364    437   		sparks[#sparks + 1] = {
   365    438   			color = sorcery.lib.color(data.tone):brighten(1.1);
   366    439   			count = strength * 7;
   367    440   		}
   368    441   	::skip::end end
   369    442   	if totalcost > 0 then
   370         -		local conservation = sorcery.enchant.strength(tool,'conserve') * 0.5
   371         -		totalcost = totalcost - (totalcost * conservation)
   372         -		ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0)))
          443  +		local conservation = math.floor(sorcery.enchant.strength(tool,'conserve') * 6)
          444  +		-- totalcost = totalcost - (totalcost * conservation)
          445  +		if conservation == 0 or math.random(conservation) == 1 then
          446  +			ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0)))
          447  +		end
   373    448   	end
   374    449   	if #sparks == 0 then return end
   375    450   	if math.random(5) == 1 then
   376    451   		minetest.set_node(pos, {name='sorcery:air_flash_' .. tostring(math.random(10))})
   377    452   	end
   378    453   	local range = function(min, max)
   379    454   		local span = max - min
................................................................................
   418    493   		ench.spells = {}
   419    494   		sorcery.enchant.set(tool,ench)
   420    495   	else
   421    496   		sorcery.enchant.set(tool,ench,true)
   422    497   	end
   423    498   	puncher:set_wielded_item(tool)
   424    499   
   425         -	-- perform leyline checks and call notify if necessary
   426         -	if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then
   427         -		sorcery.lib.node.notifyneighbors(pos)
   428         -	end
          500  +	local epct = ench.energy / material.data.maxenergy
          501  +	enchpwrhud(puncher, true, epct)
   429    502   end)
   430         -
   431         -minetest.register_chatcommand('enchants', {
   432         -	description = 'Log information about the currently held object\'s enchantment';
   433         -	privs = { server = true };
   434         -	func = function(caller,params)
   435         -		local tool = minetest.get_player_by_name(caller):get_wielded_item()
   436         -		minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool)))
   437         -		local binary = tool:get_meta():get_string('sorcery_enchantment_recs')
   438         -		local dumpout = ''
   439         -		for i=1,string.len(binary) do
   440         -			dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') 
   441         -		end
   442         -		print(dumpout)
   443         -	end;
   444         -})

Modified gems.lua from [533039aa40] to [8e18232927].

     1      1   --- gemstones
     2      2   local shards_per_gem = 9
     3      3   
     4      4   sorcery.register_gem = function(name,gem)
     5      5   	local itemname = gem.foreign or 'sorcery:gem_' .. name
     6      6   	local shardname = gem.foreign_shard or 'sorcery:gem_' .. name .. '_shard'
     7      7   	local amuletname = gem.foreign_amulet or 'sorcery:gem_' .. name .. '_amulet'
            8  +
            9  +	sorcery.data.gems[name].parts = {
           10  +		item = itemname;
           11  +		shard = shardname;
           12  +		amulet = amuletname;
           13  +	}
     8     14   
     9     15   	local tools, armors = sorcery.matreg.tools, sorcery.matreg.armors
    10     16   	if gem.tools then for t,c in pairs(tools) do
    11     17   		sorcery.matreg.lookup[(gem.items and gem.items[t]) or ('sorcery:' .. t .. '_' .. name)] = {
    12     18   			gem = true;
    13     19   			id = name; data = gem;
    14     20   			value = c.cost*shards_per_gem;

Added gravitator.lua version [31896c5f81].

            1  +local modes = {
            2  +	off   = {next = 'stop';  power = 0};
            3  +	stop  = {next = 'slow';  power = 0.4; factor =  0;    color = {255,126,113}};
            4  +	slow  = {next = 'lift';  power = 0.2; factor =  0.5;  color = {255,255,100}};
            5  +	lift  = {next = 'crush'; power = 0.6; factor = -0.25; color = {113,255,126}};
            6  +	crush = {next = 'off';   power = 1;   factor =  2;    color = {113,126,255}};
            7  +}
            8  +for kind, p in pairs(modes) do
            9  +	local radius = 4
           10  +	local enoughpower = function(pos,mode)
           11  +		if mode and modes[mode] == nil then return false end
           12  +		local n = modes[mode or kind]
           13  +		local l = sorcery.ley.netcaps(pos,1,nil,n.power)
           14  +		local maxfree = l.self.powerdraw + l.freepower
           15  +		return maxfree >= n.power
           16  +	end
           17  +	local setmeta = function(pos,nextmode)
           18  +		local label = 'Gravitator'
           19  +		if nextmode ~= 'off' then
           20  +			label = label .. ' (' .. nextmode .. ')'
           21  +			minetest.get_node_timer(pos):start(4)
           22  +		end
           23  +		local meta = minetest.get_meta(pos)
           24  +		meta:set_string('infotext',label)
           25  +	end
           26  +	minetest.register_node('sorcery:gravitator_' .. kind, {
           27  +		description = 'Gravitator';
           28  +		drop = 'sorcery:gravitator_off';
           29  +		paramtype2 = 'facedir';
           30  +		groups = {
           31  +			cracky = 2;
           32  +			sorcery_magitech = 1;
           33  +			sorcery_ley_device = 1;
           34  +
           35  +			effect_trigger = (kind == 'off') and 0 or 1;
           36  +		};
           37  +		tiles = {
           38  +			'sorcery_gravitator_side.png';
           39  +			'sorcery_gravitator_side.png';
           40  +			'sorcery_gravitator_side.png';
           41  +			'sorcery_gravitator_side.png';
           42  +			'sorcery_gravitator_side.png';
           43  +			'sorcery_gravitator_panel_'..kind..'.png';
           44  +		};
           45  +		effect_near = p.factor and {
           46  +			impacts = {
           47  +				gravity = p.factor;
           48  +			};
           49  +			distance = radius;
           50  +			spread = 1.5;
           51  +		} or nil;
           52  +		_sorcery = {
           53  +			ley = {
           54  +				mode = 'consume', affinity = {'counterpraxic'};
           55  +				power = p.power;
           56  +			};
           57  +			on_leychange = function(pos)
           58  +				local meta = minetest.get_meta(pos)
           59  +				if kind ~= 'off' then
           60  +					if not enoughpower(pos) then
           61  +						local old = minetest.get_node(pos)
           62  +						old.name = 'sorcery:gravitator_off'
           63  +						minetest.swap_node(pos,old)
           64  +						meta:set_string('lastmode',kind)
           65  +						setmeta(pos,'off')
           66  +					end
           67  +				elseif meta:contains('lastmode') then
           68  +					local nm = meta:get_string('lastmode')
           69  +					if enoughpower(pos,nm) then
           70  +						local old = minetest.get_node(pos)
           71  +						old.name = 'sorcery:gravitator_' .. nm
           72  +						minetest.set_node(pos,old)
           73  +						setmeta(pos,nm)
           74  +					end
           75  +				end
           76  +			end;
           77  +		};
           78  +		on_construct = function(pos)
           79  +			setmeta(pos,'off')
           80  +		end;
           81  +		on_timer = function(pos)
           82  +			if p.color == nil then return false end
           83  +
           84  +			local vee = {x=0,y=-1,z=0};
           85  +			minetest.add_particlespawner {
           86  +				amount = 128;
           87  +				time = 4;
           88  +				minpos = vector.subtract(pos,radius);
           89  +				maxpos = vector.add(pos,radius);
           90  +				minvel = vector.multiply(vee, p.factor*0.5);
           91  +				maxvel = vector.multiply(vee, p.factor);
           92  +				minexptime = 1;
           93  +				maxexptime = 1.3;
           94  +				minsize = 0.2, maxsize = 1.4;
           95  +				glow = 12;
           96  +				texture = sorcery.lib.image('sorcery_spark.png'):multiply(sorcery.lib.color(p.color)):render();
           97  +				animation = {
           98  +					type = 'vertical_frames';
           99  +					aspect_w = 16, aspect_h = 16;
          100  +					length = 1.4;
          101  +				}
          102  +			}
          103  +			return true;
          104  +		end;
          105  +		on_rightclick = function(pos)
          106  +			minetest.sound_play('doors_steel_door_open', {
          107  +				gain = 0.6;
          108  +				pos = pos;
          109  +			}, true)
          110  +			
          111  +			local nextmode = p.next
          112  +			while true do
          113  +				local nm = modes[nextmode]
          114  +				if nm.power == 0 then break end
          115  +				if nm.power <= p.power then break end
          116  +				if enoughpower(pos,nextmode) then break end
          117  +				nextmode = nm.next
          118  +			end
          119  +
          120  +			local old = minetest.get_node(pos)
          121  +			minetest.set_node(pos, {
          122  +				name = 'sorcery:gravitator_' .. nextmode;
          123  +				param1 = old.param1;
          124  +				param2 = old.param2;
          125  +			})
          126  +
          127  +			setmeta(pos,nextmode)
          128  +		end;
          129  +	})
          130  +end

Modified harvester.lua from [40c411e2ef] to [81d31df3a3].

    33     33   		emerald:render();
    34     34   	};
    35     35   
    36     36   	on_timer = function(pos,elapse)
    37     37   		local meta = minetest.get_meta(pos)
    38     38   		local inv = meta:get_inventory()
    39     39   		if inv:is_empty('charge') then return false end
           40  +
           41  +		local put_in_hopper = sorcery.lib.node.discharger(pos)
           42  +		local discharge = function(item,idx)
           43  +			inv:set_stack('charge',put_in_hopper(item))
           44  +		end
    40     45   		
    41     46   		local ley = sorcery.ley.estimate(pos)
    42     47   		local charged = false
    43     48   		for i=1,inv:get_size('charge') do
    44     49   			local curve = function(x) return ((x*10)^2)/10 end
    45     50   			local item = inv:get_stack('charge',i)
    46     51   			if minetest.get_item_group(item:get_name(), 'sorcery_wand') ~= 0 then
................................................................................
    50     55   				local repair_per_tick = (65536 / 80) * curve(ley.force) * mese
    51     56   				local spell = item:get_meta():get_string('sorcery_wand_spell')
    52     57   				if spell == '' then goto skip end
    53     58   				local aff = sorcery.data.spells[spell].leytype
    54     59   				if aff == ley.aff[1] or aff == ley.aff[2] then
    55     60   					repair_per_tick = repair_per_tick * 2 end
    56     61   				item:set_wear(math.max(0,item:get_wear() - repair_per_tick * (elapse / 60)))
           62  +				if item:get_wear() == 0 then item = put_in_hopper(item) end
    57     63   			else 
    58     64   				local e = sorcery.enchant.get(item)
    59     65   				if #e.spells == 0 then goto skip end -- item is not magical
    60     66   				local mat = sorcery.enchant.getsubj(item)
    61     67   				if e.energy < mat.data.maxenergy then
    62     68   					local energy_per_tick = (100 * curve(ley.force)) + ((mat.data.energysource or 0)*2)
    63     69   					e.energy = math.min(e.energy + energy_per_tick, mat.data.maxenergy)
    64     70   					sorcery.enchant.set(item,e,true)
    65         -				else goto skip end -- already fully charged
           71  +				else discharge(item,i) goto skip end -- already fully charged
    66     72   			end
    67     73   			-- print('repair cycle! repairing item'..item:get_name()..' by',repair_per_tick * (elapse / 60))
    68     74   			inv:set_stack('charge',i,item)
    69     75   			charged = true
    70     76   		::skip::end
    71     77   
    72     78   		return charged

Modified hotmetallurgy.lua from [b05dd85eee] to [ac0bc31ba3].

   158    158   end
   159    159   
   160    160   local update_smelter = function(pos)
   161    161   	local meta = minetest.get_meta(pos)
   162    162   	local inv = meta:get_inventory()
   163    163   	local proto = minetest.registered_nodes[minetest.get_node(pos).name]._proto
   164    164   	local recipe, count, factor, meltpoint = find_recipe(inv)
   165         -	if recipe and proto.temp >= meltpoint then
          165  +	if recipe --[[and proto.temp >= meltpoint]] then
   166    166   		minetest.get_node_timer(pos):start(1)
   167    167   	else
   168    168   		meta:set_float('burntime',0)
   169    169   	end
   170    170   end
   171    171   
   172    172   local smelter_step = function(kind,active,pos,delta)
................................................................................
   298    298   		minetest.register_node(id_current, {
   299    299   			_active = (state == 'closed');
   300    300   			_proto = kind;
   301    301   			description = desc;
   302    302   			drawtype = "mesh";
   303    303   			mesh = 'sorcery-kiln-' .. state .. '.obj';
   304    304   			drop = id;
          305  +			groups = { cracky = 2; sorcery_device_kiln = (state == 'closed') and 1 or 2; }
   305    306   			sunlight_propagates = true;
   306    307   			paramtype1 = 'light';
   307    308   			paramtype2 = 'facedir';
   308    309   			selection_box = box[state];
   309    310   			collision_box = box[state];
   310    311   			tiles = tex[state];
   311    312   			light_source = (state == 'closed' and 7) or 0;
................................................................................
   375    376   	local id = 'sorcery:smelter_' .. kind.material .. kind.size_name
   376    377   	kind.id = id
   377    378   	for _, active in pairs {false, true} do
   378    379   		minetest.register_node((active and id .. '_active') or id, {
   379    380   			_proto = kind;
   380    381   			description = desc;
   381    382   			drop = id;
   382         -			groups = { cracky = 2; };
          383  +			groups = {
          384  +				cracky = 2;
          385  +				sorcery_device_smelter = active and 1 or 2;
          386  +			};
   383    387   			paramtype2 = 'facedir';
   384    388   			light_source = (active and 9) or 0;
   385    389   			on_construct = function(pos)
   386    390   				local meta = minetest.get_meta(pos)
   387    391   				local inv = meta:get_inventory()
   388    392   				inv:set_size('input',kind.size)
   389    393   				inv:set_size('output',kind.outsize)
................................................................................
   414    418   		recipe = recipe;
   415    419   		output = id;
   416    420   	}
   417    421   end
   418    422   
   419    423   for _, t in pairs {
   420    424   	{1, nil, 'clay'};
   421         -	{2, 'hot','aluminum'};
   422         -	{3, 'volcanic','platinum'};
   423         -	{4, 'stellar','duridium'};
   424         -	{5, 'nova','impervium'};
          425  +	-- {2, 'hot','aluminum'};
          426  +	-- {3, 'volcanic','platinum'};
          427  +	-- {4, 'stellar','duridium'};
          428  +	-- {5, 'nova','impervium'};
   425    429   } do register_kiln {
   426    430   		temp = t[1], temp_name = t[2];
   427    431   		material = t[3];
   428    432   		size = 3, outsize = 4, fuelsize = 1; -- future-proofing
   429    433   	}
   430    434   
   431    435   	for _, s in pairs {

Modified infuser.lua from [c25534932e] to [994388d832].

   143    143   	-- for i=0,4 do
   144    144   		spawn('sorcery_spark.png^[multiply:#FF8FDD', 1, 32 * 4)
   145    145   	-- end
   146    146   	-- for i=0,4 do
   147    147   		spawn('sorcery_spark.png^[multiply:#FFB1F6', 0.5, 64 * 4)
   148    148   	-- end
   149    149   	
          150  +	local discharge = sorcery.lib.node.discharger(pos)
          151  +	
   150    152   	if newtime >= infusion_time then
   151    153   		-- finished
   152    154   		local ingredient = infusion[1]:get_name()
   153    155   		for i = 1,#potions do
   154    156   			if potions[i]:is_empty() then goto skip end
   155    157   			local base = potions[i]:get_name()
   156    158   			local potion = potions[i]:get_definition()
................................................................................
   159    161   				elixir._proto.apply(newstack, potion._proto)
   160    162   				newstack:get_meta():set_string('description', sorcery.lib.ui.tooltip {
   161    163   					title = potion._proto.name .. ' Draught';
   162    164   					desc = potion._proto.desc;
   163    165   					color = sorcery.lib.color(potion._proto.color):readable();
   164    166   					props = effects_table(newstack);
   165    167   				});
   166         -				inv:set_stack('potions',i,newstack)
          168  +				inv:set_stack('potions',i,discharge(newstack))
   167    169   			else
   168    170   				for _,v in pairs(sorcery.data.infusions) do
   169    171   					if v.infuse == ingredient and v.into == base then
   170    172   						-- transform the base into the infusion
   171         -						inv:set_stack('potions',i,ItemStack(v.output))
          173  +						inv:set_stack('potions',i,discharge(ItemStack(v.output)))
   172    174   					end
   173    175   				end
   174    176   			end
   175    177   		::skip:: end
   176    178   
   177    179   		inv:set_stack('infusion',1,ItemStack(sorcery.data.infusion_leftovers[ingredient]))
   178    180   

Modified init.lua from [97099862fc] to [330ca92ebf].

    49     49   	'potions', 'oils', 'greases',
    50     50   		'draughts', 'elixirs',
    51     51   		'philters', 'extracts';
    52     52   	'register';
    53     53   }
    54     54   
    55     55   for _,u in pairs {
    56         -	'attunement'; 'metal', 'gems'; 'itemclass';
    57         -	'leylines'; 'potions', 'infuser'; 'altar';
           56  +	'attunement'; 'context'; 'itemclass'; 'potions';
           57  +	'metal', 'gems'; 'leylines'; 'infuser'; 'altar';
    58     58   	'wands'; 'tools', 'crafttools'; 'enchanter';
    59     59   	'harvester'; 'metallurgy-hot', 'metallurgy-cold';
    60     60   	'entities'; 'recipes'; 'coins'; 'interop';
    61     61   	'tnodes'; 'forcefield'; 'farcaster'; 'portal';
    62     62   	'cookbook', 'writing'; 'disassembly'; 'displacer';
           63  +	'gravitator';
           64  +
           65  +	'admin';
    63     66   } do sorcery.load(u) end
           67  +

Modified interop.lua from [b53d891f54] to [913cc0d6da].

     7      7   			if meta:get_string('sorcery_seal_mode') == 'wand' or name ~= meta:get_string('owner') then
     8      8   				return true
     9      9   			end
    10     10   		end
    11     11   		return nextfn(pos,name)
    12     12   	end
    13     13   end
           14  +
           15  +if minetest.get_modpath('hopper') then
           16  +	hopper:add_container {
           17  +		{'side',  'group:sorcery_device_generator','fuel'};
           18  +		{'bottom','group:sorcery_device_generator','fuel'};
           19  +
           20  +		{'side',  'sorcery:coin_press','ingot'};
           21  +		{'bottom','sorcery:coin_press','gem'};
           22  +		-- output handled on our side; requires automation
           23  +
           24  +		{'bottom','sorcery:infuser','infusion'};
           25  +		{'side',  'sorcery:infuser','potions'};
           26  +		-- output handled on our side
           27  +
           28  +		{'top',   'sorcery:displacer','cache'};
           29  +		{'side',  'sorcery:displacer','cache'};
           30  +		{'bottom','sorcery:displacer','cache'};
           31  +
           32  +		{'side','sorcery:displacer_transmit_gem','code'};
           33  +		{'side','sorcery:displacer_receive_gem', 'code'};
           34  +
           35  +		{'side','group:sorcery_device_kiln','fuel'};
           36  +		{'top', 'group:sorcery_device_kiln','output'};
           37  +
           38  +		{'top',   'group:sorcery_device_smelter','output'};
           39  +		{'bottom','group:sorcery_device_smelter','input'};
           40  +		{'side',  'group:sorcery_device_smelter','fuel'};
           41  +
           42  +		{'top',    'sorcery:mill', 'output'};
           43  +		{'side',   'sorcery:mill', 'grinder'};
           44  +		{'bottom', 'sorcery:mill', 'input'};
           45  +
           46  +		{'bottom', 'sorcery:harvester', 'charge'};
           47  +		-- output handled on our side
           48  +	}
           49  +end

Modified itemclass.lua from [bee797c513] to [c60971c6b0].

    37     37   				local mat = sorcery.matreg.lookup[name]
    38     38   				if mat and mat.gem then return mat end
    39     39   			end;
    40     40   		};
    41     41   		grindable = {
    42     42   			compat = 'grindables';
    43     43   			subclass = {'metallic'};
           44  +			conform = {
           45  +				metallic = function(m)
           46  +					if m and m.data and m.data.parts and m.data.parts.powder then
           47  +						return {
           48  +							hardness = m.data.hardness;
           49  +							value = m.value or 1, grindcost = 1;
           50  +							powder = m.data.parts.powder;
           51  +						}
           52  +					end
           53  +				end;
           54  +			};
    44     55   			predicate = function(name)
    45     56   				local def = minetest.registered_items[name]._sorcery
    46     57   				if not def then return nil end
    47     58   				def = def.material
    48     59   				if def and def.grindvalue then
    49     60   					return def end
    50     61   			end;
................................................................................
    62     73   				-- matreg is a registry binding crafted items,
    63     74   				-- like armors and tools, to the material they
    64     75   				-- are made out of
    65     76   				local mat = sorcery.matreg.lookup[name]
    66     77   				if mat and mat.metal then return mat end
    67     78   			end;
    68     79   		};
           80  +		ore = {
           81  +			groups = { 'ore' };
           82  +			compat = 'ore';
           83  +			predicate = function(name)
           84  +				-- maybe revise this at some point once sorcery is extricated
           85  +				-- from instant_ores and we have more control over the items
           86  +				-- we generate
           87  +				local orepfx = "stone_with_" -- }:<
           88  +				local barename = string.sub(name, string.find(name, ':') + 1)
           89  +				if string.sub(barename,1,string.len(orepfx)) == orepfx then
           90  +					local iname = string.sub(barename,string.len(orepfx) + 1)
           91  +					if sorcery.data.metals[iname] then
           92  +						return { metal = true, id = iname }
           93  +					elseif sorcery.data.gems[iname] then
           94  +						return { gem = true, id = iname }
           95  +					end
           96  +				end
           97  +			end;
           98  +		};
    69     99   	};
    70    100   	get = function(name,class)
    71    101   		local c = sorcery.itemclass.classes[class]
    72    102   		local o
    73    103   		if not c then return false end
    74    104   
    75    105   		if c.predicate then 
................................................................................
    81    111   			o = sorcery.data.compat[c.compat][name]
    82    112   			if o then return o end
    83    113   		end
    84    114   
    85    115   		if c.subclass then
    86    116   			for _,s in pairs(c.subclass) do
    87    117   				o = sorcery.itemclass.get(name,s)
    88         -				if o then return o end
          118  +				if o then
          119  +					if c.conform and c.conform[s] then
          120  +						return c.conform[s](o)
          121  +					else return o end
          122  +				end
    89    123   			end
    90    124   		end
    91    125   
    92    126   		if c.groups then
    93    127   			for _,g in pairs(c.groups) do
    94    128   				o = minetest.get_item_group(name,g) 
    95    129   				if o > 0 then return { kind = o } end

Modified leylines.lua from [a383f4a3c9] to [0e41979f02].

    60     60   		'sorcery_conduit_copper_side.png';
    61     61   	};
    62     62   	groups = {
    63     63   		sorcery_ley_device = 1;
    64     64   		cracky = 3;
    65     65   	};
    66     66   	_sorcery = {
    67         -		ley = { mode = 'signal'; power = 10 };
           67  +		ley = { mode = 'signal'; power = 100 };
    68     68   	};
    69     69   })
    70     70   minetest.register_craft {
    71     71   	output = 'sorcery:conduit 4';
    72     72   	recipe = {
    73     73   		{'default:copper_ingot', 'default:copper_ingot',  'default:copper_ingot'};
    74     74   		{'default:copper_ingot', 'sorcery:electrumblock', 'default:copper_ingot'};
................................................................................
   160    160   		paramtype2 = 'facedir';
   161    161   		groups = {
   162    162   			cracky = 2;
   163    163   			choppy = 1;
   164    164   			sorcery_ley_device = 1;
   165    165   		};
   166    166   		_sorcery = {
   167         -			ley = { mode = 'signal'; power = 5; }
          167  +			ley = { mode = 'signal'; power = 50; }
   168    168   		};
   169    169   		tiles = tiles;
   170    170   	})
   171    171   	minetest.register_craft {
   172    172   		output = id .. ' 4';
   173    173   		recipe = {
   174    174   			{item, 'sorcery:conduit'};
................................................................................
   265    265   		if props and props.on_leychange then
   266    266   			props.on_leychange(pos)
   267    267   		end
   268    268   	end
   269    269   end
   270    270   sorcery.ley.notify = function(pos)
   271    271   	local n = sorcery.ley.mapnet(pos)
   272         -	sorcery.ley.notifymap(n.map)
          272  +	if n then sorcery.ley.notifymap(n.map) end
   273    273   end
   274    274   
   275    275   sorcery.ley.field_to_current = function(strength,time)
   276    276   	local ley_factor = 0.25
   277    277   	-- a ley harvester will produce this much current with
   278    278   	-- access to a full-strength leyline
   279    279   	
................................................................................
   311    311   			sorcery_ley_device = 1;
   312    312   			sorcery_magitech = 1;
   313    313   		};
   314    314   		on_construct = function(pos)
   315    315   			local meta = minetest.get_meta(pos)
   316    316   			meta:set_string('infotext','Condenser')
   317    317   		end;
   318         -		on_rightclick = function(pos)
   319         -			local c = sorcery.ley.netcaps(pos,1)
   320         -			c.net.devices.signal = nil
   321         -			print('LEYNET', dump(c))
   322         -		end;
   323    318   		_sorcery = {
   324    319   			ley = { mode = 'produce';
   325    320   				power = function(pos,time)
   326    321   					return sorcery.ley.field_to_current(sorcery.ley.estimate(pos).force, time);
   327    322   				end;
   328    323   				affinity = function(pos)
   329    324   					return sorcery.ley.estimate(pos).aff
................................................................................
   699    694   	]], math.floor(burnprog * 100)) .. lamps)
   700    695   end
   701    696   for _,active in pairs{true,false} do
   702    697   	local id = 'sorcery:generator' .. (active and '_active' or '')
   703    698   	minetest.register_node(id, {
   704    699   		description = 'Generator';
   705    700   		paramtype2 = 'facedir';
   706         -		groups = { cracky = 2; sorcery_ley_device = 1; };
          701  +		groups = { cracky = 2; sorcery_ley_device = 1; sorcery_device_generator = active and 1 or 2};
   707    702   		drop = 'sorcery:generator';
   708    703   		tiles = {
   709    704   			'sorcery_ley_generator_top.png';
   710    705   			'sorcery_ley_generator_bottom.png';
   711    706   			'sorcery_ley_generator_side.png';
   712    707   			'sorcery_ley_generator_side.png';
   713    708   			'sorcery_ley_generator_back.png';

Modified lib/node.lua from [3ae145b117] to [1330514938].

    69     69   				if vector.equals(pos,v) then return true end
    70     70   			end
    71     71   			return false
    72     72   		end
    73     73   		local i,stack = 1,{startpoint} repeat
    74     74   			local pos = stack[i]
    75     75   			local n = minetest.get_node(pos).name
           76  +			if n == 'ignore' then
           77  +				minetest.load_area(pos)
           78  +				n = minetest.get_node(pos).name
           79  +			end
    76     80   			if sorcery.lib.tbl.has(names, n) then -- match found
    77     81   				-- record the find
    78     82   				nodes[pos] = n
    79     83   				if positions[n] then positions[n][#positions[n]] = pos
    80     84   				else positions[n] = {pos} end
    81     85   
    82     86   				-- check selected neighbors to see if any need scanning
................................................................................
    92     96   		until i > #stack
    93     97   		return nodes, positions
    94     98   	end;
    95     99   
    96    100   	forneighbor = function(pos, n, fn)
    97    101   		for _,p in pairs(n) do
    98    102   			local sum = vector.add(pos, p)
    99         -			fn(sum, minetest.get_node(sum))
          103  +			local n = minetest.get_node(sum)
          104  +			if n.name == 'ignore' then
          105  +				minetest.load_area(sum)
          106  +				n = minetest.get_node(sum)
          107  +			end
          108  +			fn(sum, n)
          109  +		end
          110  +	end;
          111  +	
          112  +	force = function(pos,preload_for)
          113  +		local n = minetest.get_node_or_nil(pos)
          114  +		if n then return n end
          115  +		if preload_for then
          116  +			sorcery.lib.node.preload(pos,preload_for)
          117  +		else
          118  +			minetest.load_area(pos)
   100    119   		end
          120  +		return minetest.get_node(pos)
   101    121   	end;
   102    122   
   103    123   	-- when items have already been removed; notify cannot be relied on
   104    124   	-- to reach the entire network; this function accounts for the gap
   105    125   	notifyneighbors = function(pos)
   106    126   		sorcery.lib.node.forneighbor(pos, sorcery.ley.txofs, function(pos,node)
   107    127   			if minetest.get_item_group(node.name,'sorcery_ley_device') ~= 0 then
................................................................................
   118    138   		}
   119    139   	end;
   120    140   
   121    141   	preload = function(pos, user)
   122    142   		minetest.load_area(pos)
   123    143   		user:send_mapblock(sorcery.lib.node.blockpos(pos))
   124    144   	end;
          145  +
          146  +	discharger = function(pos)
          147  +		local below = sorcery.lib.node.force(vector.subtract(pos,{x=0,y=1,z=0}))
          148  +		if below.name == 'hopper:hopper'
          149  +		or below.name == 'hopper:hopper_side' then
          150  +			local hopper = minetest.get_meta(below):get_inventory()
          151  +			return function(i)
          152  +				if hopper:room_for_item('main',i) then
          153  +					return hopper:add_item('main',i), true
          154  +				end
          155  +				return i, false
          156  +			end
          157  +		else
          158  +			return function(i) return i, false end
          159  +		end
          160  +	end;
   125    161   }

Modified metal.lua from [dce6dabf6f] to [32259e26c1].

   131    131   			power = metal.power;
   132    132   			speed = metal.speed;
   133    133   			artificial = metal.artificial;
   134    134   			cooktime = metal.cooktime;
   135    135   			hardness = (metal.hardness/8) * 3; -- scaled wrt diamond
   136    136   			level = math.ceil(((metal.hardness/8) * 3)) + 1;
   137    137   			ingot_image = (metal.image and metal.image.ingot) or nil;
          138  +			ore_image = 'default_stone.png^sorcery_' .. name .. '_ore.png';
   138    139   			lump_image = (metal.image and metal.image.lump) or nil;
   139    140   			armor_weight = metal.armor_weight;
   140    141   			armor_protection = metal.armor_protection;
   141    142   		}
   142    143   	end
   143    144   	minetest.register_craftitem(fragment, {
   144    145   		inventory_image = 'sorcery_' .. name .. '_fragment.png';
................................................................................
   180    181   		}))
   181    182   	end
   182    183   	if metal.sinter then
   183    184   		local powders = {}
   184    185   		for _,m in pairs(metal.sinter) do
   185    186   			powders[#powders+1] = 'sorcery:powder_' .. m
   186    187   		end
   187         -		if metal.sinter_catalyst then for _,m in pairs(metal.sinter_catalyst)
   188         -			do powders[#powders+1] = m end end
          188  +		local repl = {}
          189  +		if metal.sinter_catalyst then
          190  +			for _,m in pairs(metal.sinter_catalyst) do
          191  +				powders[#powders+1] = m
          192  +				if sorcery.data.infusion_leftovers[m] then
          193  +					repl[#repl+1] = {m, sorcery.data.infusion_leftovers[m]}
          194  +				end
          195  +			end
          196  +		end
          197  +
   189    198   		minetest.register_craft {
   190    199   			type = 'shapeless';
   191    200   			output = powder .. ' ' .. tostring(#powders);
   192    201   			recipe = powders;
          202  +			replacements = repl;
   193    203   		};
   194    204   	end
   195    205   end

Modified metallurgy-cold.lua from [a94be8d51a] to [e432fc7b5e].

    19     19   	-- factor by which wear is increased when grinding
    20     20   	-- above your paygrade
    21     21   
    22     22   	grind_factor = 10;
    23     23   	-- adjusts the amount of time it takes to grind
    24     24   	-- metal into powder
    25     25   	
    26         -	grind_wear = 2000;
           26  +	grind_wear = 1000;
    27     27   	-- amount of damage done to a grind head grinding
    28     28   	-- metal of equal hardness. increased or decreased
    29     29   	-- depending on differential
    30     30   	
    31     31   	grind_torque_factor = 0.1;
    32     32   	-- how many points of hardness translate into how
    33     33   	-- much ley-current needed (per second)
................................................................................
   232    232   			local grind_wear = {}
   233    233   			local grinders_present = false
   234    234   			grinders_on = {false,false}
   235    235   			for i=1,inv:get_size('grinder') do
   236    236   				local gh = inv:get_stack('grinder',i)
   237    237   				if not gh:is_empty() then
   238    238   					grinders_present = true
   239         -					local hh = sorcery.data.metals[gh:get_definition()._proto.metal].hardness
          239  +					local gproto = gh:get_definition()._proto
          240  +					local hh = 0
          241  +					if gproto.metal then
          242  +						hh = sorcery.data.metals[gproto.metal].hardness
          243  +					elseif gproto.gem then
          244  +						hh = sorcery.data.gems[gproto.gem].hardness
          245  +					end
   240    246   					local dif = mp.hardness - hh
   241    247   					local wear
   242    248   					if dif == 0 then
   243    249   						wear = constants.grind_wear
   244    250   					elseif dif < 0 then
   245    251   						wear = constants.grind_wear * ((dif * -1)/constants.grind_range)
   246    252   					elseif dif > 0 then
................................................................................
   330    336   	recipe = {
   331    337   		{'basic_materials:chain_steel','basic_materials:gear_steel','basic_materials:chain_steel'};
   332    338   		{'basic_materials:gear_steel', 'basic_materials:steel_bar', 'basic_materials:gear_steel'};
   333    339   		{'default:tin_ingot','default:steelblock','default:tin_ingot'};
   334    340   	};
   335    341   }
   336    342   for name,metal in pairs(sorcery.data.metals) do
          343  +	if metal.no_tools and not metal.grindhead then goto skip end
   337    344   	local i,f = metal.parts.ingot, metal.parts.fragment
   338    345   	local id = 'sorcery:mill_grindhead_' .. name
   339    346   	minetest.register_tool(id,{
   340    347   		description = sorcery.lib.str.capitalize(name) .. ' Grinding Head';
   341    348   		inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(metal.tone)):render();
   342    349   		groups = { sorcery_mill_grindhead = 1, sorcery_metallurgy = 1 };
   343    350   		_proto = {
................................................................................
   348    355   		output = id;
   349    356   		recipe = {
   350    357   			{f,i,f};
   351    358   			{i,'',i};
   352    359   			{f,i,f};
   353    360   		};
   354    361   	}
   355         -end
          362  +::skip::end
          363  +
          364  +for name,gem in pairs(sorcery.data.gems) do
          365  +	if not gem.tools and not gem.grindhead then goto skip end
          366  +	local i,f = gem.parts.item, gem.parts.shard
          367  +	local id = 'sorcery:mill_grindhead_' .. name
          368  +	minetest.register_tool(id,{
          369  +		description = sorcery.lib.str.capitalize(name) .. ' Grinding Head';
          370  +		inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(gem.tone)):render();
          371  +		groups = { sorcery_mill_grindhead = 1, sorcery_metallurgy = 1 };
          372  +		_proto = {
          373  +			gem = name;
          374  +		};
          375  +	});
          376  +	minetest.register_craft {
          377  +		output = id;
          378  +		recipe = {
          379  +			{f,i,f};
          380  +			{i,'',i};
          381  +			{f,i,f};
          382  +		};
          383  +	}
          384  +::skip::end

Added models/sorcery-idol-blood.obj version [59ec52cbdf].

            1  +# Blender v2.82 (sub 7) OBJ File: 'idol.blend'
            2  +# www.blender.org
            3  +mtllib sorcery-idol-blood.mtl
            4  +o obsidian_Cube.002
            5  +v -0.041172 0.418064 -0.024969
            6  +v 0.033948 0.418064 -0.024969
            7  +v 0.033948 0.418064 0.026311
            8  +v -0.041172 0.418064 0.026311
            9  +v -0.041172 0.512206 -0.024969
           10  +v 0.033948 0.512206 -0.024969
           11  +v 0.033948 0.512206 0.026311
           12  +v -0.041172 0.512206 0.026311
           13  +v -0.076580 0.512206 -0.049140
           14  +v 0.069355 0.512206 -0.049141
           15  +v 0.069355 0.512206 0.050482
           16  +v -0.076580 0.512206 0.050482
           17  +v -0.076580 0.535538 -0.049140
           18  +v 0.069355 0.535538 -0.049141
           19  +v 0.069355 0.535538 0.050482
           20  +v -0.076580 0.535538 0.050482
           21  +v -0.032642 0.535538 -0.019147
           22  +v 0.025418 0.535538 -0.019147
           23  +v 0.025418 0.535538 0.020488
           24  +v -0.032642 0.535538 0.020488
           25  +v -0.032642 0.696839 -0.019147
           26  +v 0.025418 0.696839 -0.019147
           27  +v 0.025418 0.696839 0.020488
           28  +v -0.032642 0.696839 0.020488
           29  +v -0.241735 0.512206 0.050482
           30  +v -0.241735 0.512206 -0.049140
           31  +v 0.234511 0.512206 -0.049141
           32  +v 0.234511 0.512206 0.050482
           33  +v -0.241735 0.535538 0.050482
           34  +v -0.241735 0.535538 -0.049140
           35  +v 0.234511 0.535538 -0.049141
           36  +v 0.234511 0.535538 0.050482
           37  +v 0.096881 0.512206 0.050482
           38  +v 0.124407 0.512206 0.050482
           39  +v 0.151933 0.512206 0.050482
           40  +v 0.179459 0.512206 0.050482
           41  +v 0.206985 0.512206 0.050482
           42  +v 0.206985 0.535538 0.050482
           43  +v 0.179459 0.535538 0.050482
           44  +v 0.151933 0.535538 0.050482
           45  +v 0.124407 0.535538 0.050482
           46  +v 0.096881 0.535538 0.050482
           47  +v 0.206985 0.535538 -0.049141
           48  +v 0.179459 0.535538 -0.049141
           49  +v 0.151933 0.535538 -0.049141
           50  +v 0.124407 0.535538 -0.049141
           51  +v 0.096881 0.535538 -0.049141
           52  +v 0.206985 0.512206 -0.049141
           53  +v 0.179459 0.512206 -0.049141
           54  +v 0.151933 0.512206 -0.049141
           55  +v 0.124407 0.512206 -0.049141
           56  +v 0.096881 0.512206 -0.049141
           57  +v -0.104106 0.535538 -0.049140
           58  +v -0.131631 0.535538 -0.049140
           59  +v -0.159157 0.535538 -0.049140
           60  +v -0.186683 0.535538 -0.049140
           61  +v -0.214209 0.535538 -0.049140
           62  +v -0.214209 0.535538 0.050482
           63  +v -0.186683 0.535538 0.050482
           64  +v -0.159157 0.535538 0.050482
           65  +v -0.131631 0.535538 0.050482
           66  +v -0.104106 0.535538 0.050482
           67  +v -0.104106 0.512206 -0.049140
           68  +v -0.131631 0.512206 -0.049140
           69  +v -0.159157 0.512206 -0.049140
           70  +v -0.186683 0.512206 -0.049140
           71  +v -0.214209 0.512206 -0.049140
           72  +v -0.104106 0.512206 0.050482
           73  +v -0.131631 0.512206 0.050482
           74  +v -0.159157 0.512206 0.050482
           75  +v -0.186683 0.512206 0.050482
           76  +v -0.214209 0.512206 0.050482
           77  +v -0.084837 0.512206 0.031238
           78  +v -0.084837 0.512206 -0.029897
           79  +v 0.077613 0.512206 -0.029897
           80  +v 0.077613 0.512206 0.031238
           81  +v 0.088623 0.512206 -0.029897
           82  +v 0.088623 0.512206 0.031238
           83  +v 0.128536 0.512206 0.031238
           84  +v 0.147804 0.512206 0.031238
           85  +v 0.179459 0.512206 0.031238
           86  +v 0.206985 0.512206 0.031238
           87  +v 0.206985 0.512206 -0.029897
           88  +v 0.179459 0.512206 -0.029897
           89  +v 0.147804 0.512206 -0.029897
           90  +v 0.128536 0.512206 -0.029897
           91  +v -0.095848 0.512206 -0.029897
           92  +v -0.135760 0.512206 -0.029897
           93  +v -0.155028 0.512206 -0.029897
           94  +v -0.186683 0.512206 -0.029897
           95  +v -0.214209 0.512206 -0.029897
           96  +v -0.095848 0.512206 0.031238
           97  +v -0.135760 0.512206 0.031238
           98  +v -0.155028 0.512206 0.031238
           99  +v -0.186683 0.512206 0.031238
          100  +v -0.214209 0.512206 0.031238
          101  +v -0.084837 0.447812 0.031238
          102  +v -0.084837 0.447812 -0.029897
          103  +v 0.077613 0.447812 -0.029897
          104  +v 0.077613 0.447812 0.031238
          105  +v 0.088623 0.447812 -0.029897
          106  +v 0.088623 0.447812 0.031238
          107  +v 0.128536 0.383719 0.031238
          108  +v 0.147804 0.383719 0.031238
          109  +v 0.179459 0.290128 0.031238
          110  +v 0.206985 0.290128 0.031238
          111  +v 0.206985 0.290128 -0.029897
          112  +v 0.179459 0.290128 -0.029897
          113  +v 0.147804 0.383719 -0.029897
          114  +v 0.128536 0.383719 -0.029897
          115  +v -0.095848 0.447812 -0.029897
          116  +v -0.135760 0.383719 -0.029897
          117  +v -0.155028 0.383719 -0.029897
          118  +v -0.186683 0.290128 -0.029897
          119  +v -0.214209 0.290128 -0.029897
          120  +v -0.095848 0.447812 0.031238
          121  +v -0.135760 0.383719 0.031238
          122  +v -0.155028 0.383719 0.031238
          123  +v -0.186683 0.290128 0.031238
          124  +v -0.214209 0.290128 0.031238
          125  +vt 0.553838 0.327048
          126  +vt 0.446162 0.327048
          127  +vt 0.446162 0.524722
          128  +vt 0.553838 0.524722
          129  +vt 0.578867 0.553838
          130  +vt 0.421134 0.553838
          131  +vt 0.346786 0.604591
          132  +vt 0.653214 0.604591
          133  +vt 0.578867 0.327048
          134  +vt 0.421134 0.327048
          135  +vt 0.421134 0.524722
          136  +vt 0.578867 0.524722
          137  +vt 0.446162 0.327048
          138  +vt 0.553838 0.327048
          139  +vt 0.553838 0.524722
          140  +vt 0.446162 0.524722
          141  +vt 0.421134 0.327048
          142  +vt 0.578867 0.327048
          143  +vt 0.578867 0.524722
          144  +vt 0.421134 0.524722
          145  +vt 0.057798 0.573714
          146  +vt 0.057798 0.524722
          147  +vt -0.000000 0.524722
          148  +vt -0.000000 0.573714
          149  +vt 0.578867 0.446162
          150  +vt 0.653214 0.395409
          151  +vt 0.421134 0.446162
          152  +vt 0.346786 0.395409
          153  +vt 0.346786 0.604591
          154  +vt 0.346786 0.395409
          155  +vt 0.439044 0.458388
          156  +vt 0.439044 0.541612
          157  +vt 0.346786 0.524722
          158  +vt 0.653214 0.524722
          159  +vt 0.653214 0.573714
          160  +vt 0.346786 0.573714
          161  +vt 0.942202 0.604591
          162  +vt 0.942202 0.395409
          163  +vt 1.000000 0.395409
          164  +vt 1.000000 0.604591
          165  +vt 0.653214 0.524722
          166  +vt 0.346786 0.524722
          167  +vt 0.346786 0.573714
          168  +vt 0.653214 0.573714
          169  +vt 0.458388 0.573714
          170  +vt 0.541612 0.573714
          171  +vt 0.541612 0.912407
          172  +vt 0.458388 0.912407
          173  +vt 0.653214 0.604591
          174  +vt 0.560957 0.541612
          175  +vt 0.653214 0.395409
          176  +vt 0.560957 0.458388
          177  +vt 0.560957 0.458388
          178  +vt 0.560957 0.541612
          179  +vt 0.439044 0.541612
          180  +vt 0.439044 0.458388
          181  +vt 0.439044 0.573714
          182  +vt 0.560957 0.573714
          183  +vt 0.560957 0.912407
          184  +vt 0.439044 0.912407
          185  +vt 0.541612 0.573714
          186  +vt 0.458388 0.573714
          187  +vt 0.458388 0.912407
          188  +vt 0.541612 0.912407
          189  +vt 0.560957 0.573714
          190  +vt 0.439044 0.573714
          191  +vt 0.439044 0.912407
          192  +vt 0.560957 0.912407
          193  +vt 0.395409 0.524722
          194  +vt 0.604591 0.524722
          195  +vt 0.604591 0.573714
          196  +vt 0.395409 0.573714
          197  +vt 0.604591 0.524722
          198  +vt 0.395409 0.524722
          199  +vt 0.395409 0.573714
          200  +vt 0.604591 0.573714
          201  +vt 0.942202 0.573714
          202  +vt 0.942202 0.524722
          203  +vt 1.000000 0.524722
          204  +vt 1.000000 0.573714
          205  +vt 0.942202 0.395409
          206  +vt 0.942202 0.604591
          207  +vt 1.000000 0.604591
          208  +vt 1.000000 0.395409
          209  +vt 0.057798 0.395409
          210  +vt 0.057798 0.604591
          211  +vt -0.000000 0.604591
          212  +vt -0.000000 0.395409
          213  +vt 0.057798 0.524722
          214  +vt 0.057798 0.573714
          215  +vt -0.000000 0.573714
          216  +vt -0.000000 0.524722
          217  +vt 0.057798 0.604591
          218  +vt 0.057798 0.395409
          219  +vt -0.000000 0.395409
          220  +vt -0.000000 0.604591
          221  +vt 0.942202 0.524722
          222  +vt 0.942202 0.573714
          223  +vt 1.000000 0.573714
          224  +vt 1.000000 0.524722
          225  +vt 0.288988 0.395409
          226  +vt 0.288988 0.435815
          227  +vt 0.346786 0.435815
          228  +vt 0.288988 0.604591
          229  +vt 0.231191 0.395409
          230  +vt 0.231191 0.604591
          231  +vt 0.231191 0.435815
          232  +vt 0.231191 0.564185
          233  +vt 0.173393 0.604591
          234  +vt 0.173393 0.395409
          235  +vt 0.115595 0.395409
          236  +vt 0.115595 0.604591
          237  +vt 0.711012 0.604591
          238  +vt 0.711012 0.395409
          239  +vt 0.711012 0.435815
          240  +vt 0.711012 0.564185
          241  +vt 0.288988 0.573714
          242  +vt 0.288988 0.524722
          243  +vt 0.231191 0.573714
          244  +vt 0.231191 0.524722
          245  +vt 0.173393 0.573714
          246  +vt 0.173393 0.524722
          247  +vt 0.115595 0.573714
          248  +vt 0.115595 0.524722
          249  +vt 0.288988 0.604591
          250  +vt 0.288988 0.395409
          251  +vt 0.231191 0.604591
          252  +vt 0.231191 0.395409
          253  +vt 0.173393 0.604591
          254  +vt 0.173393 0.395409
          255  +vt 0.115595 0.604591
          256  +vt 0.115595 0.395409
          257  +vt 0.288988 0.524722
          258  +vt 0.288988 0.573714
          259  +vt 0.231191 0.524722
          260  +vt 0.231191 0.573714
          261  +vt 0.173393 0.524722
          262  +vt 0.173393 0.573714
          263  +vt 0.115595 0.524722
          264  +vt 0.115595 0.573714
          265  +vt 0.711012 0.573714
          266  +vt 0.711012 0.524722
          267  +vt 0.768809 0.573714
          268  +vt 0.768809 0.524722
          269  +vt 0.826607 0.573714
          270  +vt 0.826607 0.524722
          271  +vt 0.884405 0.573714
          272  +vt 0.884405 0.524722
          273  +vt 0.653214 0.435815
          274  +vt 0.768809 0.604591
          275  +vt 0.768809 0.395409
          276  +vt 0.288988 0.564185
          277  +vt 0.826607 0.395409
          278  +vt 0.826607 0.604591
          279  +vt 0.884405 0.604591
          280  +vt 0.884405 0.395409
          281  +vt 0.826607 0.564185
          282  +vt 0.768809 0.564185
          283  +vt 0.711012 0.524722
          284  +vt 0.711012 0.573714
          285  +vt 0.768809 0.524722
          286  +vt 0.768809 0.573714
          287  +vt 0.826607 0.524722
          288  +vt 0.826607 0.573714
          289  +vt 0.884405 0.524722
          290  +vt 0.884405 0.573714
          291  +vt 0.711012 0.395409
          292  +vt 0.711012 0.604591
          293  +vt 0.768809 0.395409
          294  +vt 0.768809 0.604591
          295  +vt 0.826607 0.395409
          296  +vt 0.826607 0.604591
          297  +vt 0.884405 0.395409
          298  +vt 0.884405 0.604591
          299  +vt 0.435815 0.524722
          300  +vt 0.564185 0.524722
          301  +vt 0.564185 0.389511
          302  +vt 0.435815 0.389511
          303  +vt 0.435815 0.524722
          304  +vt 0.564185 0.524722
          305  +vt 0.564185 0.058412
          306  +vt 0.435815 0.058412
          307  +vt 0.231191 0.524722
          308  +vt 0.173393 0.524722
          309  +vt 0.173393 0.254932
          310  +vt 0.231191 0.254932
          311  +vt 0.826607 0.524722
          312  +vt 0.768809 0.524722
          313  +vt 0.768809 0.254932
          314  +vt 0.826607 0.254932
          315  +vt 0.564185 0.524722
          316  +vt 0.435815 0.524722
          317  +vt 0.435815 0.254932
          318  +vt 0.564185 0.254932
          319  +vt 0.115595 0.524722
          320  +vt 0.057798 0.524722
          321  +vt 0.057798 0.058412
          322  +vt 0.115595 0.058412
          323  +vt 0.768809 0.435815
          324  +vt 0.942202 0.564185
          325  +vt 0.884405 0.564185
          326  +vt 0.173393 0.564185
          327  +vt 0.173393 0.435815
          328  +vt 0.346786 0.564185
          329  +vt 0.826607 0.435815
          330  +vt 0.115595 0.435815
          331  +vt 0.115595 0.564185
          332  +vt 0.653214 0.564185
          333  +vt 0.057798 0.435815
          334  +vt 0.884405 0.435815
          335  +vt 0.057798 0.564185
          336  +vt 0.942202 0.435815
          337  +vt 0.346786 0.564185
          338  +vt 0.346786 0.435815
          339  +vt 0.288988 0.435815
          340  +vt 0.288988 0.564185
          341  +vt 0.231191 0.564185
          342  +vt 0.231191 0.435815
          343  +vt 0.173393 0.435815
          344  +vt 0.173393 0.564185
          345  +vt 0.115595 0.564185
          346  +vt 0.115595 0.435815
          347  +vt 0.057798 0.435815
          348  +vt 0.057798 0.564185
          349  +vt 0.653214 0.435815
          350  +vt 0.653214 0.564185
          351  +vt 0.711012 0.564185
          352  +vt 0.711012 0.435815
          353  +vt 0.768809 0.435815
          354  +vt 0.768809 0.564185
          355  +vt 0.826607 0.564185
          356  +vt 0.826607 0.435815
          357  +vt 0.884405 0.435815
          358  +vt 0.884405 0.564185
          359  +vt 0.942202 0.564185
          360  +vt 0.942202 0.435815
          361  +vt 0.942202 0.524722
          362  +vt 0.884405 0.524722
          363  +vt 0.884405 0.058412
          364  +vt 0.942202 0.058412
          365  +vt 0.435815 0.524722
          366  +vt 0.564185 0.524722
          367  +vt 0.564185 0.389511
          368  +vt 0.435815 0.389511
          369  +vt 0.564185 0.524722
          370  +vt 0.435815 0.524722
          371  +vt 0.435815 0.058412
          372  +vt 0.564185 0.058412
          373  +vt 0.564185 0.524722
          374  +vt 0.435815 0.524722
          375  +vt 0.435815 0.389511
          376  +vt 0.564185 0.389511
          377  +vt 0.653214 0.524722
          378  +vt 0.711012 0.524722
          379  +vt 0.711012 0.389511
          380  +vt 0.653214 0.389511
          381  +vt 0.564185 0.524722
          382  +vt 0.435815 0.524722
          383  +vt 0.435815 0.254932
          384  +vt 0.564185 0.254932
          385  +vt 0.346786 0.524722
          386  +vt 0.288988 0.524722
          387  +vt 0.288988 0.389511
          388  +vt 0.346786 0.389511
          389  +vt 0.768809 0.524722
          390  +vt 0.826607 0.524722
          391  +vt 0.826607 0.254932
          392  +vt 0.768809 0.254932
          393  +vt 0.435815 0.524722
          394  +vt 0.564185 0.524722
          395  +vt 0.564185 0.254932
          396  +vt 0.435815 0.254932
          397  +vt 0.288988 0.524722
          398  +vt 0.346786 0.524722
          399  +vt 0.346786 0.389511
          400  +vt 0.288988 0.389511
          401  +vt 0.884405 0.524722
          402  +vt 0.942202 0.524722
          403  +vt 0.942202 0.058412
          404  +vt 0.884405 0.058412
          405  +vt 0.564185 0.524722
          406  +vt 0.435815 0.524722
          407  +vt 0.435815 0.058412
          408  +vt 0.564185 0.058412
          409  +vt 0.173393 0.524722
          410  +vt 0.231191 0.524722
          411  +vt 0.231191 0.254932
          412  +vt 0.173393 0.254932
          413  +vt 0.564185 0.524722
          414  +vt 0.435815 0.524722
          415  +vt 0.435815 0.389511
          416  +vt 0.564185 0.389511
          417  +vt 0.435815 0.524722
          418  +vt 0.564185 0.524722
          419  +vt 0.564185 0.058412
          420  +vt 0.435815 0.058412
          421  +vt 0.057798 0.524722
          422  +vt 0.115595 0.524722
          423  +vt 0.115595 0.058412
          424  +vt 0.057798 0.058412
          425  +vt 0.435815 0.524722
          426  +vt 0.564185 0.524722
          427  +vt 0.564185 0.254932
          428  +vt 0.435815 0.254932
          429  +vt 0.711012 0.524722
          430  +vt 0.653214 0.524722
          431  +vt 0.653214 0.389511
          432  +vt 0.711012 0.389511
          433  +vt 1.000000 0.158676
          434  +vt 0.000000 0.158676
          435  +vt 0.000000 0.841324
          436  +vt 1.000000 0.841324
          437  +vn 1.0000 0.0000 -0.0000
          438  +vn 0.0000 -1.0000 0.0000
          439  +vn 0.0000 0.0000 1.0000
          440  +vn -1.0000 0.0000 0.0000
          441  +vn -0.0000 0.0000 -1.0000
          442  +vn 0.0000 1.0000 0.0000
          443  +g obsidian_Cube.002_obsidian
          444  +usemtl obsidian
          445  +s off
          446  +f 3/1/1 2/2/1 6/3/1 7/4/1
          447  +f 8/5/2 7/6/2 11/7/2 12/8/2
          448  +f 4/9/3 3/10/3 7/11/3 8/12/3
          449  +f 1/13/4 4/14/4 8/15/4 5/16/4
          450  +f 2/17/5 1/18/5 5/19/5 6/20/5
          451  +f 38/21/3 37/22/3 28/23/3 32/24/3
          452  +f 5/25/2 8/5/2 12/8/2 9/26/2
          453  +f 6/27/2 5/25/2 9/26/2 10/28/2
          454  +f 7/6/2 6/27/2 10/28/2 11/7/2
          455  +f 15/29/6 14/30/6 18/31/6 19/32/6
          456  +f 10/33/5 9/34/5 13/35/5 14/36/5
          457  +f 58/37/6 57/38/6 30/39/6 29/40/6
          458  +f 12/41/3 11/42/3 15/43/3 16/44/3
          459  +f 17/45/4 20/46/4 24/47/4 21/48/4
          460  +f 16/49/6 15/29/6 19/32/6 20/50/6
          461  +f 13/51/6 16/49/6 20/50/6 17/52/6
          462  +f 14/30/6 13/51/6 17/52/6 18/31/6
          463  +f 21/53/6 24/54/6 23/55/6 22/56/6
          464  +f 18/57/5 17/58/5 21/59/5 22/60/5
          465  +f 19/61/1 18/62/1 22/63/1 23/64/1
          466  +f 20/65/3 19/66/3 23/67/3 24/68/3
          467  +f 26/69/4 25/70/4 29/71/4 30/72/4
          468  +f 28/73/1 27/74/1 31/75/1 32/76/1
          469  +f 57/77/5 67/78/5 26/79/5 30/80/5
          470  +f 67/81/2 72/82/2 25/83/2 26/84/2
          471  +f 43/85/6 38/86/6 32/87/6 31/88/6
          472  +f 48/89/5 43/90/5 31/91/5 27/92/5
          473  +f 37/93/2 48/94/2 27/95/2 28/96/2
          474  +f 72/97/3 58/98/3 29/99/3 25/100/3
          475  +f 10/28/2 52/101/2 77/102/2 75/103/2
          476  +f 33/104/2 52/101/2 51/105/2 34/106/2
          477  +f 34/106/2 51/105/2 86/107/2 79/108/2
          478  +f 35/109/2 50/110/2 49/111/2 36/112/2
          479  +f 68/113/2 63/114/2 87/115/2 92/116/2
          480  +f 10/33/5 14/36/5 47/117/5 52/118/5
          481  +f 52/118/5 47/117/5 46/119/5 51/120/5
          482  +f 51/120/5 46/119/5 45/121/5 50/122/5
          483  +f 50/122/5 45/121/5 44/123/5 49/124/5
          484  +f 49/124/5 44/123/5 43/90/5 48/89/5
          485  +f 14/30/6 15/29/6 42/125/6 47/126/6
          486  +f 47/126/6 42/125/6 41/127/6 46/128/6
          487  +f 46/128/6 41/127/6 40/129/6 45/130/6
          488  +f 45/130/6 40/129/6 39/131/6 44/132/6
          489  +f 44/132/6 39/131/6 38/86/6 43/85/6
          490  +f 15/43/3 11/42/3 33/133/3 42/134/3
          491  +f 42/134/3 33/133/3 34/135/3 41/136/3
          492  +f 41/136/3 34/135/3 35/137/3 40/138/3
          493  +f 40/138/3 35/137/3 36/139/3 39/140/3
          494  +f 39/140/3 36/139/3 37/22/3 38/21/3
          495  +f 12/41/3 16/44/3 62/141/3 68/142/3
          496  +f 68/142/3 62/141/3 61/143/3 69/144/3
          497  +f 69/144/3 61/143/3 60/145/3 70/146/3
          498  +f 70/146/3 60/145/3 59/147/3 71/148/3
          499  +f 71/148/3 59/147/3 58/98/3 72/97/3
          500  +f 63/114/2 9/26/2 74/149/2 87/115/2
          501  +f 63/114/2 68/113/2 69/150/2 64/151/2
          502  +f 52/101/2 33/104/2 78/152/2 77/102/2
          503  +f 65/153/2 70/154/2 71/155/2 66/156/2
          504  +f 69/150/2 70/154/2 94/157/2 93/158/2
          505  +f 13/35/5 9/34/5 63/159/5 53/160/5
          506  +f 53/160/5 63/159/5 64/161/5 54/162/5
          507  +f 54/162/5 64/161/5 65/163/5 55/164/5
          508  +f 55/164/5 65/163/5 66/165/5 56/166/5
          509  +f 56/166/5 66/165/5 67/78/5 57/77/5
          510  +f 16/49/6 13/51/6 53/167/6 62/168/6
          511  +f 62/168/6 53/167/6 54/169/6 61/170/6
          512  +f 61/170/6 54/169/6 55/171/6 60/172/6
          513  +f 60/172/6 55/171/6 56/173/6 59/174/6
          514  +f 59/174/6 56/173/6 57/38/6 58/37/6
          515  +f 74/175/1 73/176/1 97/177/1 98/178/1
          516  +f 90/179/1 95/180/1 119/181/1 114/182/1
          517  +f 86/183/5 85/184/5 109/185/5 110/186/5
          518  +f 89/187/5 88/188/5 112/189/5 113/190/5
          519  +f 94/191/4 89/192/4 113/193/4 118/194/4
          520  +f 84/195/5 83/196/5 107/197/5 108/198/5
          521  +f 64/151/2 69/150/2 93/158/2 88/199/2
          522  +f 71/155/2 72/82/2 96/200/2 95/201/2
          523  +f 50/110/2 35/109/2 80/202/2 85/203/2
          524  +f 33/104/2 11/7/2 76/204/2 78/152/2
          525  +f 65/153/2 64/151/2 88/199/2 89/205/2
          526  +f 70/154/2 65/153/2 89/205/2 94/157/2
          527  +f 36/112/6 49/111/6 84/206/6 81/207/6
          528  +f 9/26/2 12/8/2 73/208/2 74/149/2
          529  +f 49/111/2 48/94/2 83/209/2 84/206/2
          530  +f 66/156/6 71/155/6 95/201/6 90/210/6
          531  +f 48/94/2 37/93/2 82/211/2 83/209/2
          532  +f 35/109/2 34/106/2 79/108/2 80/202/2
          533  +f 11/7/2 10/28/2 75/103/2 76/204/2
          534  +f 67/81/2 66/156/2 90/210/2 91/212/2
          535  +f 72/82/3 67/81/3 91/212/3 96/200/3
          536  +f 12/8/2 68/113/2 92/116/2 73/208/2
          537  +f 51/105/2 50/110/2 85/203/2 86/107/2
          538  +f 37/93/2 36/112/2 81/207/2 82/211/2
          539  +f 100/213/2 99/214/2 101/215/2 102/216/2
          540  +f 103/217/2 110/218/2 109/219/2 104/220/2
          541  +f 105/221/2 108/222/2 107/223/2 106/224/2
          542  +f 98/225/2 97/226/2 116/227/2 111/228/2
          543  +f 112/229/2 117/230/2 118/231/2 113/232/2
          544  +f 114/233/2 119/234/2 120/235/2 115/236/2
          545  +f 91/237/5 90/238/5 114/239/5 115/240/5
          546  +f 77/241/1 78/242/1 102/243/1 101/244/1
          547  +f 96/245/4 91/246/4 115/247/4 120/248/4
          548  +f 76/249/4 75/250/4 99/251/4 100/252/4
          549  +f 73/253/3 92/254/3 116/255/3 97/256/3
          550  +f 79/257/4 86/258/4 110/259/4 103/260/4
          551  +f 75/261/5 77/262/5 101/263/5 99/264/5
          552  +f 93/265/3 94/266/3 118/267/3 117/268/3
          553  +f 85/269/1 80/270/1 104/271/1 109/272/1
          554  +f 78/273/3 76/274/3 100/275/3 102/276/3
          555  +f 95/277/3 96/278/3 120/279/3 119/280/3
          556  +f 81/281/4 84/282/4 108/283/4 105/284/4
          557  +f 80/285/3 79/286/3 103/287/3 104/288/3
          558  +f 92/289/4 87/290/4 111/291/4 116/292/4
          559  +f 83/293/1 82/294/1 106/295/1 107/296/1
          560  +f 82/297/3 81/298/3 105/299/3 106/300/3
          561  +f 88/301/1 93/302/1 117/303/1 112/304/1
          562  +f 87/305/5 74/306/5 98/307/5 111/308/5
          563  +f 1/309/2 2/310/2 3/311/2 4/312/2
          564  +o gold
          565  +v -0.253612 -0.440095 0.150671
          566  +v -0.253612 -0.500000 0.150671
          567  +v -0.253612 -0.440095 -0.149329
          568  +v -0.253612 -0.500000 -0.149329
          569  +v 0.246388 -0.440095 0.150671
          570  +v 0.246388 -0.500000 0.150671
          571  +v 0.246388 -0.440095 -0.149329
          572  +v 0.246388 -0.500000 -0.149329
          573  +v -0.051687 -0.440095 -0.050353
          574  +v 0.044462 -0.440095 -0.050353
          575  +v 0.044462 -0.440095 0.051694
          576  +v -0.051687 -0.440095 0.051694
          577  +v -0.051687 -0.235535 -0.050353
          578  +v 0.044462 -0.235535 -0.050353
          579  +v 0.044462 -0.235535 0.051694
          580  +v -0.051687 -0.235535 0.051694
          581  +v -0.051687 -0.166005 -0.050353
          582  +v 0.044462 -0.166005 -0.050353
          583  +v 0.044462 -0.166005 0.051694
          584  +v -0.051687 -0.166005 0.051694
          585  +v -0.245071 -0.235535 0.051694
          586  +v -0.245071 -0.235535 -0.050353
          587  +v 0.237847 -0.235535 -0.050353
          588  +v 0.237847 -0.235535 0.051694
          589  +v -0.245071 -0.166005 0.051694
          590  +v -0.245071 -0.166005 -0.050353
          591  +v 0.237847 -0.166005 -0.050353
          592  +v 0.237847 -0.166005 0.051694
          593  +v -0.051687 0.295002 -0.038288
          594  +v 0.044462 0.295002 -0.038288
          595  +v 0.044462 0.295002 0.039629
          596  +v -0.051687 0.295002 0.039629
          597  +v 0.093939 0.295002 0.039629
          598  +v -0.101164 0.295002 -0.038288
          599  +v 0.093939 0.295002 -0.038288
          600  +v -0.101164 0.295002 0.039629
          601  +v 0.246495 0.248128 -0.038288
          602  +v 0.246495 0.201254 -0.038288
          603  +v 0.246495 0.201254 0.039629
          604  +v 0.246495 0.248128 0.039629
          605  +v -0.253720 0.201254 0.039629
          606  +v -0.253720 0.248128 0.039629
          607  +v -0.253720 0.248128 -0.038288
          608  +v -0.253720 0.201254 -0.038288
          609  +v -0.253720 0.201254 0.022466
          610  +v -0.253720 0.248128 0.022466
          611  +v -0.253720 0.248128 -0.021125
          612  +v -0.253720 0.201254 -0.021125
          613  +v -0.253720 0.185648 0.022466
          614  +v -0.253720 0.263734 0.022466
          615  +v -0.253720 0.263734 -0.021125
          616  +v -0.253720 0.185648 -0.021125
          617  +v -0.300567 0.263734 0.022466
          618  +v -0.300567 0.263734 -0.021124
          619  +v -0.253720 0.283424 0.022466
          620  +v -0.253720 0.283424 -0.021125
          621  +v -0.300567 0.283424 0.022466
          622  +v -0.300567 0.283424 -0.021124
          623  +v -0.233962 0.263734 0.022466
          624  +v -0.233962 0.263734 -0.021125
          625  +v -0.320325 0.263734 0.022466
          626  +v -0.320325 0.263734 -0.021124
          627  +v -0.233962 0.283424 0.022466
          628  +v -0.233962 0.283424 -0.021125
          629  +v -0.320325 0.283424 0.022466
          630  +v -0.320325 0.283424 -0.021124
          631  +v 0.246495 0.248128 -0.022435
          632  +v 0.246495 0.201254 -0.022435
          633  +v 0.246495 0.201254 0.023776
          634  +v 0.246495 0.248128 0.023776
          635  +v 0.246495 0.262724 -0.022435
          636  +v 0.246495 0.186657 -0.022435
          637  +v 0.246495 0.186657 0.023776
          638  +v 0.246495 0.262724 0.023776
          639  +v 0.294296 0.186657 -0.022435
          640  +v 0.294296 0.186657 0.023776
          641  +v 0.246495 0.167428 -0.022435
          642  +v 0.246495 0.167428 0.023776
          643  +v 0.294296 0.167428 -0.022435
          644  +v 0.294296 0.167428 0.023776
          645  +v 0.211036 0.186657 -0.022435
          646  +v 0.211036 0.186657 0.023776
          647  +v 0.329755 0.186657 -0.022435
          648  +v 0.329755 0.186657 0.023776
          649  +v 0.211036 0.167428 -0.022435
          650  +v 0.211036 0.167428 0.023776
          651  +v 0.329755 0.167428 -0.022435
          652  +v 0.329755 0.167428 0.023776
          653  +v 0.294296 0.186657 -0.033582
          654  +v 0.246495 0.186657 -0.033582
          655  +v 0.246495 0.186657 0.034923
          656  +v 0.294296 0.186657 0.034923
          657  +v 0.294296 0.167428 -0.033582
          658  +v 0.246495 0.167428 -0.033582
          659  +v 0.246495 0.167428 0.034923
          660  +v 0.294296 0.167428 0.034923
          661  +v 0.329755 0.186657 0.034923
          662  +v 0.329755 0.167428 0.034923
          663  +v 0.329755 0.167428 -0.033582
          664  +v 0.329755 0.186657 -0.033582
          665  +v 0.211036 0.186657 0.034923
          666  +v 0.211036 0.167428 0.034923
          667  +v 0.211036 0.186657 -0.033582
          668  +v 0.211036 0.167428 -0.033582
          669  +v -0.253720 0.263734 0.029950
          670  +v -0.300567 0.263734 0.029950
          671  +v -0.253720 0.263734 -0.028609
          672  +v -0.300567 0.263734 -0.028609
          673  +v -0.253720 0.283424 0.029950
          674  +v -0.300567 0.283424 0.029950
          675  +v -0.253720 0.283424 -0.028609
          676  +v -0.300567 0.283424 -0.028609
          677  +v -0.320325 0.263734 -0.028609
          678  +v -0.320325 0.283424 -0.028609
          679  +v -0.233962 0.283424 -0.028609
          680  +v -0.233962 0.263734 -0.028609
          681  +v -0.320325 0.263734 0.029950
          682  +v -0.320325 0.283424 0.029950
          683  +v -0.233962 0.283424 0.029950
          684  +v -0.233962 0.263734 0.029950
          685  +v -0.051687 0.305172 0.039629
          686  +v -0.051687 0.305172 -0.038288
          687  +v 0.044462 0.305172 -0.038288
          688  +v 0.044462 0.305172 0.039629
          689  +v 0.093939 0.305172 0.039629
          690  +v -0.101164 0.305172 -0.038288
          691  +v 0.093939 0.305172 -0.038288
          692  +v -0.101164 0.305172 0.039629
          693  +vt 1.000000 0.067349
          694  +vt 1.000000 0.186161
          695  +vt 0.000000 0.186161
          696  +vt 0.000000 0.067349
          697  +vt 0.000000 0.067349
          698  +vt 0.000000 0.186161
          699  +vt 1.000000 0.186161
          700  +vt 1.000000 0.067349
          701  +vt 1.000000 0.800000
          702  +vt 1.000000 0.200000
          703  +vt 0.000000 0.200000
          704  +vt 0.000000 0.800000
          705  +vt 0.200000 0.186161
          706  +vt 0.800000 0.186161
          707  +vt 0.800000 0.067349
          708  +vt 0.200000 0.067349
          709  +vt 0.800000 0.186161
          710  +vt 0.200000 0.186161
          711  +vt 0.200000 0.067349
          712  +vt 0.800000 0.067349
          713  +vt 1.000000 0.200000
          714  +vt 1.000000 0.800000
          715  +vt 0.596149 0.602047
          716  +vt 0.596149 0.397953
          717  +vt 0.596149 0.186161
          718  +vt 0.403852 0.186161
          719  +vt 0.403852 0.595280
          720  +vt 0.596149 0.595280
          721  +vt 0.000000 0.800000
          722  +vt 0.403852 0.602047
          723  +vt 0.000000 0.200000
          724  +vt 0.403852 0.397953
          725  +vt 0.596149 0.734340
          726  +vt 0.596149 0.595280
          727  +vt 0.982917 0.595280
          728  +vt 0.982917 0.734340
          729  +vt 0.397953 0.186161
          730  +vt 0.602047 0.186161
          731  +vt 0.602047 0.595280
          732  +vt 0.397953 0.595280
          733  +vt 0.403852 0.186161
          734  +vt 0.596149 0.186161
          735  +vt 0.403852 0.595280
          736  +vt 0.602047 0.186161
          737  +vt 0.397953 0.186161
          738  +vt 0.397953 0.595280
          739  +vt 0.602047 0.595280
          740  +vt 0.999999 0.605656
          741  +vt 0.599550 0.605656
          742  +vt 0.599550 0.394344
          743  +vt 0.999999 0.394344
          744  +vt 0.403852 0.734340
          745  +vt 0.403852 0.734340
          746  +vt 0.017082 0.595280
          747  +vt 0.017082 0.734340
          748  +vt 0.596149 0.734340
          749  +vt 0.397953 0.595280
          750  +vt 0.602047 0.595280
          751  +vt 0.602047 0.734340
          752  +vt 0.397953 0.734340
          753  +vt 0.602047 0.595280
          754  +vt 0.397953 0.595280
          755  +vt 0.397953 0.734340
          756  +vt 0.602047 0.734340
          757  +vt 0.596149 0.397953
          758  +vt 0.596149 0.602047
          759  +vt 0.982917 0.602047
          760  +vt 0.982917 0.397953
          761  +vt 0.017082 0.734340
          762  +vt 0.017082 0.595280
          763  +vt 0.403852 0.602047
          764  +vt 0.403852 0.397953
          765  +vt 0.017082 0.397953
          766  +vt 0.017082 0.602047
          767  +vt 0.982917 0.734340
          768  +vt 0.982917 0.595280
          769  +vt -0.000001 0.394344
          770  +vt 0.400451 0.394344
          771  +vt 0.400451 0.605656
          772  +vt -0.000001 0.605656
          773  +vt 0.439425 0.782114
          774  +vt 0.375678 0.782114
          775  +vt 0.375678 0.795218
          776  +vt 0.439425 0.795218
          777  +vt 0.375678 0.782114
          778  +vt 0.439425 0.782114
          779  +vt 0.439425 0.795218
          780  +vt 0.375678 0.795218
          781  +vt 0.179123 0.450394
          782  +vt 0.179123 0.550783
          783  +vt 0.179123 0.530358
          784  +vt 0.179123 0.470819
          785  +vt 0.823606 0.450394
          786  +vt 0.823606 0.550783
          787  +vt 0.823606 0.528669
          788  +vt 0.823606 0.472507
          789  +vt 0.823606 0.550783
          790  +vt 0.823606 0.450394
          791  +vt 0.823606 0.472507
          792  +vt 0.823606 0.528669
          793  +vt 0.285735 0.220882
          794  +vt 0.285735 0.220882
          795  +vt 0.285735 0.220882
          796  +vt 0.285735 0.220882
          797  +vt 0.285735 0.779118
          798  +vt 0.285735 0.779118
          799  +vt 0.285735 0.779118
          800  +vt 0.285735 0.779118
          801  +vt 0.477230 0.615028
          802  +vt 0.477230 0.628979
          803  +vt 0.471927 0.628979
          804  +vt 0.471927 0.615028
          805  +vt 0.703302 0.550113
          806  +vt 0.717302 0.550113
          807  +vt 0.717302 0.544810
          808  +vt 0.703302 0.544810
          809  +vt 0.703302 0.580998
          810  +vt 0.703302 0.550113
          811  +vt 0.717302 0.550113
          812  +vt 0.717302 0.580998
          813  +vt 0.717302 0.580998
          814  +vt 0.703302 0.580998
          815  +vt 0.703302 0.586301
          816  +vt 0.717302 0.586301
          817  +vt 0.508116 0.615028
          818  +vt 0.508116 0.628979
          819  +vt 0.508116 0.615028
          820  +vt 0.477230 0.615028
          821  +vt 0.477230 0.628979
          822  +vt 0.508116 0.628979
          823  +vt 0.670110 0.550113
          824  +vt 0.670110 0.544810
          825  +vt 0.703302 0.544810
          826  +vt 0.670110 0.580998
          827  +vt 0.656110 0.580998
          828  +vt 0.656110 0.550113
          829  +vt 0.670110 0.580998
          830  +vt 0.670110 0.550113
          831  +vt 0.656110 0.550113
          832  +vt 0.656110 0.580998
          833  +vt 0.717302 0.586301
          834  +vt 0.703302 0.586301
          835  +vt 0.670110 0.586301
          836  +vt 1.000000 0.983381
          837  +vt -0.000000 0.983381
          838  +vt -0.000000 0.016619
          839  +vt 1.000000 0.016619
          840  +vt 0.179123 0.550783
          841  +vt 0.179123 0.450394
          842  +vt 0.179123 0.470819
          843  +vt 0.179123 0.530358
          844  +vt 0.724426 0.196247
          845  +vt 0.724426 0.196247
          846  +vt 0.724426 0.196247
          847  +vt 0.724426 0.196247
          848  +vt 0.724426 0.803753
          849  +vt 0.724426 0.803753
          850  +vt 0.724426 0.803753
          851  +vt 0.724426 0.803753
          852  +vt 0.701318 0.305374
          853  +vt 1.000000 0.305374
          854  +vt 1.000000 0.211481
          855  +vt 0.701318 0.211481
          856  +vt 0.694626 0.419013
          857  +vt 0.694626 0.580986
          858  +vt 0.788519 0.580986
          859  +vt 0.788519 0.419013
          860  +vt 0.701318 0.305374
          861  +vt 0.298683 0.305374
          862  +vt 0.298683 0.211481
          863  +vt 0.701318 0.211481
          864  +vt 0.000000 0.694626
          865  +vt 0.298683 0.694626
          866  +vt 0.298683 0.788519
          867  +vt 0.000000 0.788519
          868  +vt 0.305374 0.580987
          869  +vt 0.305374 0.419014
          870  +vt 0.694626 0.580986
          871  +vt 0.305374 0.580987
          872  +vt 0.305374 0.419014
          873  +vt 0.694626 0.419013
          874  +vt 0.701318 0.694626
          875  +vt 1.000000 0.694626
          876  +vt 0.298683 0.694626
          877  +vt 0.000000 0.694626
          878  +vt 0.000000 0.788519
          879  +vt 0.298683 0.788519
          880  +vt 0.701318 0.788519
          881  +vt 0.000000 0.305374
          882  +vt 0.298683 0.305374
          883  +vt 0.000000 0.305374
          884  +vt 0.701318 0.694626
          885  +vt 1.000000 0.305374
          886  +vt 1.000000 0.694626
          887  +vt 0.298683 0.580986
          888  +vt 0.298683 0.419013
          889  +vt 0.000000 0.419013
          890  +vt 0.000000 0.580986
          891  +vt 0.701318 0.580986
          892  +vt 0.701318 0.419013
          893  +vt 1.000000 0.580986
          894  +vt 1.000000 0.419013
          895  +vt 0.701318 0.580987
          896  +vt 0.298683 0.580987
          897  +vt 0.298683 0.419014
          898  +vt 0.701318 0.419014
          899  +vt 1.000000 0.419014
          900  +vt 1.000000 0.580987
          901  +vt 0.000000 0.580987
          902  +vt 0.000000 0.419014
          903  +vt 0.211481 0.419014
          904  +vt 0.211481 0.580987
          905  +vt 1.000000 0.211481
          906  +vt 0.701318 0.788519
          907  +vt 0.788519 0.419013
          908  +vt 0.788519 0.580986
          909  +vt 0.000000 0.211481
          910  +vt 0.211481 0.580987
          911  +vt 0.211481 0.419014
          912  +vt 0.298683 0.211481
          913  +vt 0.000000 0.211481
          914  +vt 1.000000 0.788519
          915  +vt 1.000000 0.788519
          916  +vt 0.670110 0.615028
          917  +vt 0.703302 0.615028
          918  +vt 0.703302 0.628979
          919  +vt 0.670110 0.628979
          920  +vt 0.703302 0.615028
          921  +vt 0.703302 0.628979
          922  +vt 0.717302 0.628979
          923  +vt 0.717302 0.615028
          924  +vt 0.670110 0.615028
          925  +vt 0.670110 0.628979
          926  +vt 0.717302 0.615028
          927  +vt 0.717302 0.628979
          928  +vt 0.656110 0.615028
          929  +vt 0.656110 0.628979
          930  +vt 0.656110 0.628979
          931  +vt 0.656110 0.615028
          932  +vt 0.656110 0.586301
          933  +vt 0.670110 0.586301
          934  +vt 0.471927 0.615028
          935  +vt 0.471927 0.628979
          936  +vt 0.656110 0.544810
          937  +vt 0.670110 0.544810
          938  +vt 0.513419 0.615028
          939  +vt 0.513419 0.628979
          940  +vt 0.656110 0.544810
          941  +vt 0.513419 0.628979
          942  +vt 0.513419 0.615028
          943  +vt 0.656110 0.586301
          944  +vt 0.717302 0.544810
          945  +vt 0.563304 0.550783
          946  +vt 0.563304 0.450394
          947  +vt 0.627051 0.450394
          948  +vt 0.627051 0.550783
          949  +vt 0.439425 0.450394
          950  +vt 0.439425 0.550783
          951  +vt 0.375678 0.550783
          952  +vt 0.375678 0.450394
          953  +vt 0.550783 0.782114
          954  +vt 0.450394 0.782114
          955  +vt 0.450394 0.795218
          956  +vt 0.550783 0.795218
          957  +vt 0.550783 0.782114
          958  +vt 0.450394 0.782114
          959  +vt 0.450394 0.795218
          960  +vt 0.550783 0.795218
          961  +vt 0.627051 0.782114
          962  +vt 0.563304 0.782114
          963  +vt 0.563304 0.795218
          964  +vt 0.627051 0.795218
          965  +vt 0.563304 0.782114
          966  +vt 0.627051 0.782114
          967  +vt 0.627051 0.795218
          968  +vt 0.563304 0.795218
          969  +vt 0.450394 0.782114
          970  +vt 0.550783 0.782114
          971  +vt 0.550783 0.795218
          972  +vt 0.450394 0.795218
          973  +vt 0.450394 0.782114
          974  +vt 0.550783 0.782114
          975  +vt 0.550783 0.795218
          976  +vt 0.450394 0.795218
          977  +vt 0.746405 0.699681
          978  +vt 0.999999 0.699681
          979  +vt 0.999999 0.300319
          980  +vt 0.746405 0.300319
          981  +vt 0.253596 0.300319
          982  +vt -0.000001 0.300319
          983  +vt -0.000001 0.699681
          984  +vt 0.253596 0.699681
          985  +vt 0.000000 0.034757
          986  +vt 0.000000 0.965243
          987  +vt 1.000000 0.965243
          988  +vt 1.000000 0.034757
          989  +vt 0.000000 0.034757
          990  +vt 1.000000 0.034757
          991  +vt 1.000000 0.965243
          992  +vt 0.000000 0.965243
          993  +vn -0.0000 0.0000 -1.0000
          994  +vn 0.0000 0.0000 1.0000
          995  +vn 0.0000 -1.0000 -0.0000
          996  +vn 1.0000 0.0000 -0.0000
          997  +vn -1.0000 0.0000 0.0000
          998  +vn 0.0000 1.0000 -0.0000
          999  +g gold_gold_gold
         1000  +usemtl gold
         1001  +s off
         1002  +f 124/313/7 123/314/7 127/315/7 128/316/7
         1003  +f 126/317/8 125/318/8 121/319/8 122/320/8
         1004  +f 122/321/9 124/322/9 128/323/9 126/324/9
         1005  +f 127/325/10 125/326/10 126/327/10 128/328/10
         1006  +f 121/329/11 123/330/11 124/331/11 122/332/11
         1007  +f 123/333/12 121/334/12 132/335/12 129/336/12
         1008  +f 132/337/8 131/338/8 135/339/8 136/340/8
         1009  +f 121/334/12 125/341/12 131/342/12 132/335/12
         1010  +f 125/341/12 127/343/12 130/344/12 131/342/12
         1011  +f 127/343/12 123/333/12 129/336/12 130/344/12
         1012  +f 137/345/7 133/346/7 142/347/7 146/348/7
         1013  +f 129/349/11 132/350/11 136/351/11 133/352/11
         1014  +f 130/353/7 129/354/7 133/346/7 134/355/7
         1015  +f 131/356/10 130/357/10 134/358/10 135/359/10
         1016  +f 145/360/12 140/361/12 137/362/12 146/363/12
         1017  +f 134/355/7 133/346/7 137/345/7 138/364/7
         1018  +f 139/365/8 135/339/8 144/366/8 148/367/8
         1019  +f 136/340/8 135/339/8 139/365/8 140/368/8
         1020  +f 142/369/11 141/370/11 145/371/11 146/372/11
         1021  +f 144/373/10 143/374/10 147/375/10 148/376/10
         1022  +f 133/377/9 136/378/9 141/379/9 142/380/9
         1023  +f 134/355/7 138/364/7 147/381/7 143/382/7
         1024  +f 135/383/9 134/384/9 143/385/9 144/386/9
         1025  +f 136/340/8 140/368/8 145/387/8 141/388/8
         1026  +f 147/389/12 138/390/12 139/391/12 148/392/12
         1027  +f 137/362/12 140/361/12 139/391/12 138/390/12
         1028  +f 151/393/8 153/394/8 245/395/8 244/396/8
         1029  +f 155/397/7 150/398/7 243/399/7 247/400/7
         1030  +f 157/401/12 160/402/12 190/403/12 187/404/12
         1031  +f 164/405/9 161/406/9 165/407/9 168/408/9
         1032  +f 162/409/12 163/410/12 167/411/12 166/412/12
         1033  +f 167/413/8 168/414/8 172/415/8 171/416/8
         1034  +f 165/417/8 166/418/8 170/419/8 169/420/8
         1035  +f 182/421/11 186/422/11 234/423/11 233/424/11
         1036  +f 174/425/9 182/426/9 233/427/9 228/428/9
         1037  +f 177/429/12 178/430/12 186/431/12 185/432/12
         1038  +f 181/433/9 173/434/9 226/435/9 237/436/9
         1039  +f 182/421/11 181/437/11 185/438/11 186/422/11
         1040  +f 179/439/10 180/440/10 184/441/10 183/442/10
         1041  +f 174/425/9 173/434/9 181/433/9 182/426/9
         1042  +f 178/430/12 176/443/12 231/444/12 232/445/12
         1043  +f 176/443/12 175/446/12 183/447/12 184/448/12
         1044  +f 170/449/9 171/450/9 180/451/9 179/452/9
         1045  +f 177/429/12 185/432/12 238/453/12 230/454/12
         1046  +f 175/446/12 177/429/12 230/454/12 229/455/12
         1047  +f 193/456/12 196/457/12 195/458/12 192/459/12
         1048  +f 159/460/9 158/461/9 188/462/9 189/463/9
         1049  +f 188/464/8 187/465/8 191/466/8 192/467/8
         1050  +f 190/468/8 189/469/8 193/470/8 194/471/8
         1051  +f 197/472/9 205/473/9 224/474/9 214/475/9
         1052  +f 208/476/10 204/477/10 217/478/10 218/479/10
         1053  +f 192/480/12 195/481/12 209/482/12 210/483/12
         1054  +f 204/484/12 196/485/12 212/486/12 217/487/12
         1055  +f 203/488/10 204/477/10 208/476/10 207/489/10
         1056  +f 202/490/11 201/491/11 205/492/11 206/493/11
         1057  +f 197/472/9 198/494/9 206/495/9 205/473/9
         1058  +f 200/496/9 208/497/9 218/498/9 216/499/9
         1059  +f 198/494/9 200/496/9 216/499/9 215/500/9
         1060  +f 195/481/12 196/485/12 204/484/12 203/501/12
         1061  +f 200/496/9 199/502/9 207/503/9 208/497/9
         1062  +f 193/504/12 192/480/12 201/505/12 202/506/12
         1063  +f 212/507/8 216/508/8 218/509/8 217/510/8
         1064  +f 212/507/8 211/511/8 215/512/8 216/508/8
         1065  +f 215/512/8 211/511/8 221/513/8 222/514/8
         1066  +f 210/515/7 209/516/7 213/517/7 214/518/7
         1067  +f 210/515/7 214/518/7 224/519/7 223/520/7
         1068  +f 213/517/7 209/516/7 220/521/7 219/522/7
         1069  +f 203/488/10 207/489/10 219/523/10 220/524/10
         1070  +f 201/505/12 192/480/12 210/483/12 223/525/12
         1071  +f 196/485/12 193/504/12 211/526/12 212/486/12
         1072  +f 202/490/11 206/493/11 222/527/11 221/528/11
         1073  +f 195/481/12 203/501/12 220/529/12 209/482/12
         1074  +f 205/492/11 201/491/11 223/530/11 224/531/11
         1075  +f 207/503/9 199/502/9 213/532/9 219/533/9
         1076  +f 193/504/12 202/506/12 221/534/12 211/526/12
         1077  +f 199/502/9 197/472/9 214/475/9 213/532/9
         1078  +f 206/495/9 198/494/9 215/500/9 222/535/9
         1079  +f 227/536/7 228/537/7 232/538/7 231/539/7
         1080  +f 226/540/8 230/541/8 238/542/8 237/543/8
         1081  +f 226/540/8 225/544/8 229/545/8 230/541/8
         1082  +f 232/538/7 228/537/7 233/546/7 234/547/7
         1083  +f 229/545/8 225/544/8 240/548/8 239/549/8
         1084  +f 227/536/7 231/539/7 235/550/7 236/551/7
         1085  +f 183/447/12 175/446/12 229/455/12 239/552/12
         1086  +f 173/434/9 170/449/9 225/553/9 226/435/9
         1087  +f 184/441/10 180/440/10 236/554/10 235/555/10
         1088  +f 176/443/12 184/448/12 235/556/12 231/444/12
         1089  +f 171/450/9 174/425/9 228/428/9 227/557/9
         1090  +f 185/438/11 181/437/11 237/558/11 238/559/11
         1091  +f 180/451/9 171/450/9 227/557/9 236/560/9
         1092  +f 179/439/10 183/442/10 239/561/10 240/562/10
         1093  +f 170/449/9 179/452/9 240/563/9 225/553/9
         1094  +f 186/431/12 178/430/12 232/445/12 234/564/12
         1095  +f 241/565/12 242/566/12 246/567/12 248/568/12
         1096  +f 243/569/12 244/570/12 245/571/12 247/572/12
         1097  +f 152/573/10 149/574/10 242/575/10 241/576/10
         1098  +f 153/577/10 155/578/10 247/579/10 245/580/10
         1099  +f 156/581/8 152/582/8 241/583/8 248/584/8
         1100  +f 149/585/7 154/586/7 246/587/7 242/588/7
         1101  +f 150/589/11 151/590/11 244/591/11 243/592/11
         1102  +f 154/593/11 156/594/11 248/595/11 246/596/11
         1103  +f 152/597/9 156/598/9 154/599/9 149/600/9
         1104  +f 150/601/9 155/602/9 153/603/9 151/604/9
         1105  +f 171/605/9 170/606/9 173/607/9 174/608/9
         1106  +f 176/609/12 178/610/12 177/611/12 175/612/12
         1107  +o body
         1108  +v -0.051687 -0.166005 -0.038288
         1109  +v 0.044462 -0.166005 -0.038288
         1110  +v 0.044462 -0.166005 0.039629
         1111  +v -0.051687 -0.166005 0.039629
         1112  +v -0.150641 -0.166005 0.039629
         1113  +v -0.150641 -0.166005 -0.038288
         1114  +v 0.143417 -0.166005 -0.038288
         1115  +v 0.143417 -0.166005 0.039629
         1116  +v -0.051687 0.060632 -0.038288
         1117  +v 0.044462 0.060632 -0.038288
         1118  +v 0.044462 0.060632 0.039629
         1119  +v -0.051687 0.060632 0.039629
         1120  +v -0.150641 0.060632 0.039629
         1121  +v -0.150641 0.060632 -0.038288
         1122  +v 0.143417 0.060632 -0.038288
         1123  +v 0.143417 0.060632 0.039629
         1124  +v 0.044462 -0.081230 -0.038288
         1125  +v -0.051687 -0.081230 -0.038288
         1126  +v -0.051687 -0.081230 0.039629
         1127  +v -0.150641 -0.081230 0.039629
         1128  +v -0.150641 -0.081230 -0.038288
         1129  +v 0.143417 -0.081230 -0.038288
         1130  +v 0.143417 -0.081230 0.039629
         1131  +v 0.044462 -0.081230 0.039629
         1132  +v 0.044462 -0.081230 -0.066455
         1133  +v 0.044462 -0.166005 -0.066455
         1134  +v 0.143417 -0.166005 0.067796
         1135  +v 0.044462 -0.166005 0.067796
         1136  +v -0.150641 -0.166005 -0.066455
         1137  +v -0.051687 -0.166005 -0.066455
         1138  +v 0.143417 -0.166005 -0.066455
         1139  +v -0.051687 -0.166005 0.067796
         1140  +v -0.150641 -0.166005 0.067796
         1141  +v -0.150641 -0.081230 0.067796
         1142  +v 0.143417 -0.081230 0.067796
         1143  +v -0.051687 -0.081230 -0.066455
         1144  +v -0.051687 -0.081230 0.067796
         1145  +v -0.150641 -0.081230 -0.066455
         1146  +v 0.143417 -0.081230 -0.066455
         1147  +v 0.044462 -0.081230 0.067796
         1148  +v 0.044462 -0.081230 -0.107817
         1149  +v 0.044462 -0.166005 -0.107817
         1150  +v 0.143417 -0.166005 0.109158
         1151  +v 0.044462 -0.166005 0.109158
         1152  +v -0.150641 -0.166005 -0.107817
         1153  +v -0.051687 -0.166005 -0.107817
         1154  +v 0.143417 -0.166005 -0.107817
         1155  +v -0.051687 -0.166005 0.109158
         1156  +v -0.150641 -0.166005 0.109158
         1157  +v -0.150641 -0.081230 0.109158
         1158  +v 0.143417 -0.081230 0.109158
         1159  +v -0.051687 -0.081230 -0.107817
         1160  +v -0.051687 -0.081230 0.109158
         1161  +v -0.150641 -0.081230 -0.107817
         1162  +v 0.143417 -0.081230 -0.107817
         1163  +v 0.044462 -0.081230 0.109158
         1164  +v 0.143417 -0.358086 0.067796
         1165  +v 0.044462 -0.358086 0.067796
         1166  +v -0.150641 -0.358086 -0.066455
         1167  +v -0.051687 -0.358086 -0.066455
         1168  +v 0.143417 -0.358086 -0.066455
         1169  +v 0.044462 -0.358086 -0.066455
         1170  +v -0.051687 -0.358086 0.067796
         1171  +v -0.150641 -0.358086 0.067796
         1172  +v 0.143417 -0.358086 0.109158
         1173  +v 0.044462 -0.358086 0.109158
         1174  +v -0.150641 -0.358086 -0.107817
         1175  +v -0.051687 -0.358086 -0.107817
         1176  +v 0.143417 -0.358086 -0.107817
         1177  +v 0.044462 -0.358086 -0.107817
         1178  +v -0.051687 -0.358086 0.109158
         1179  +v -0.150641 -0.358086 0.109158
         1180  +v 0.093939 0.060632 0.039629
         1181  +v -0.101164 0.060632 -0.038288
         1182  +v 0.093939 0.060632 -0.038288
         1183  +v -0.101164 0.060632 0.039629
         1184  +v -0.051687 0.295002 -0.038288
         1185  +v 0.044462 0.295002 -0.038288
         1186  +v 0.044462 0.295002 0.039629
         1187  +v -0.051687 0.295002 0.039629
         1188  +v 0.093939 0.295002 0.039629
         1189  +v -0.101164 0.295002 -0.038288
         1190  +v 0.093939 0.295002 -0.038288
         1191  +v -0.101164 0.295002 0.039629
         1192  +v 0.093939 0.248128 -0.038288
         1193  +v 0.093939 0.201254 -0.038288
         1194  +v 0.093939 0.154380 -0.038288
         1195  +v 0.093939 0.107506 -0.038288
         1196  +v 0.044462 0.107506 -0.038288
         1197  +v 0.044462 0.154380 -0.038288
         1198  +v 0.044462 0.201254 -0.038288
         1199  +v 0.044462 0.248128 -0.038288
         1200  +v 0.093939 0.107506 0.039629
         1201  +v 0.093939 0.154380 0.039629
         1202  +v 0.093939 0.201254 0.039629
         1203  +v 0.093939 0.248128 0.039629
         1204  +v 0.044462 0.248128 0.039629
         1205  +v 0.044462 0.201254 0.039629
         1206  +v 0.044462 0.154380 0.039629
         1207  +v 0.044462 0.107506 0.039629
         1208  +v -0.101164 0.107506 0.039629
         1209  +v -0.101164 0.154380 0.039629
         1210  +v -0.101164 0.201254 0.039629
         1211  +v -0.101164 0.248128 0.039629
         1212  +v -0.101164 0.248128 -0.038288
         1213  +v -0.101164 0.201254 -0.038288
         1214  +v -0.101164 0.154380 -0.038288
         1215  +v -0.101164 0.107506 -0.038288
         1216  +v -0.051687 0.107506 -0.038288
         1217  +v -0.051687 0.154380 -0.038288
         1218  +v -0.051687 0.201254 -0.038288
         1219  +v -0.051687 0.248128 -0.038288
         1220  +v -0.051687 0.107506 0.039629
         1221  +v -0.051687 0.154380 0.039629
         1222  +v -0.051687 0.201254 0.039629
         1223  +v -0.051687 0.248128 0.039629
         1224  +v 0.167664 0.154380 -0.038288
         1225  +v 0.167664 0.107506 -0.038288
         1226  +v 0.167664 0.107506 0.039629
         1227  +v 0.167664 0.154380 0.039629
         1228  +v -0.176901 0.107506 0.039629
         1229  +v -0.176901 0.154380 0.039629
         1230  +v -0.176902 0.154380 -0.038288
         1231  +v -0.176902 0.107506 -0.038288
         1232  +v 0.246495 0.248128 -0.038288
         1233  +v 0.246495 0.201254 -0.038288
         1234  +v 0.246495 0.201254 0.039629
         1235  +v 0.246495 0.248128 0.039629
         1236  +v -0.253720 0.201254 0.039629
         1237  +v -0.253720 0.248128 0.039629
         1238  +v -0.253720 0.248128 -0.038288
         1239  +v -0.253720 0.201254 -0.038288
         1240  +v -0.051687 0.313148 -0.038288
         1241  +v 0.044462 0.313148 -0.038288
         1242  +v 0.044462 0.313148 0.039629
         1243  +v -0.051687 0.313148 0.039629
         1244  +v -0.071481 0.313148 -0.054329
         1245  +v 0.064256 0.313148 -0.054329
         1246  +v 0.064256 0.313148 0.055670
         1247  +v -0.071481 0.313148 0.055670
         1248  +v -0.071481 0.418064 -0.054329
         1249  +v 0.064256 0.418064 -0.054329
         1250  +v 0.064256 0.418064 0.055670
         1251  +v -0.071481 0.418064 0.055670
         1252  +v -0.220548 0.107506 0.039629
         1253  +v -0.220548 0.154380 0.039629
         1254  +v -0.220548 0.154380 -0.038288
         1255  +v -0.220548 0.107506 -0.038288
         1256  +v -0.176902 0.154380 -0.068779
         1257  +v -0.176902 0.107506 -0.068779
         1258  +v -0.220548 0.154380 -0.068779
         1259  +v -0.220548 0.107506 -0.068779
         1260  +v -0.176902 0.154380 -0.106304
         1261  +v -0.176902 0.107506 -0.106304
         1262  +v -0.220548 0.154380 -0.106304
         1263  +v -0.220548 0.107506 -0.106304
         1264  +v 0.334162 0.154380 -0.068779
         1265  +v 0.334162 0.107506 -0.068779
         1266  +v 0.334162 0.154380 -0.106305
         1267  +v 0.334162 0.107506 -0.106305
         1268  +v 0.218783 0.154380 -0.038288
         1269  +v 0.218783 0.107506 -0.038288
         1270  +v 0.218783 0.107506 0.039629
         1271  +v 0.218783 0.154380 0.039629
         1272  +v 0.167664 0.107506 0.064794
         1273  +v 0.167664 0.154380 0.064794
         1274  +v 0.218783 0.107506 0.064794
         1275  +v 0.218783 0.154380 0.064794
         1276  +v 0.167664 0.107506 0.096965
         1277  +v 0.167664 0.154380 0.096965
         1278  +v 0.218783 0.107506 0.096965
         1279  +v 0.218783 0.154380 0.096965
         1280  +v -0.282072 0.107506 0.064794
         1281  +v -0.282072 0.154380 0.064794
         1282  +v -0.282072 0.107506 0.096966
         1283  +v -0.282072 0.154380 0.096966
         1284  +vt 0.563304 0.297373
         1285  +vt 0.690798 0.297373
         1286  +vt 0.690798 0.480150
         1287  +vt 0.627051 0.480150
         1288  +vt 0.563304 0.480150
         1289  +vt 0.690798 0.297373
         1290  +vt 0.563304 0.297373
         1291  +vt 0.563304 0.480150
         1292  +vt 0.627051 0.480150
         1293  +vt 0.690798 0.480150
         1294  +vt 0.439425 0.297373
         1295  +vt 0.439425 0.480150
         1296  +vt 0.450394 0.721721
         1297  +vt 0.550783 0.721721
         1298  +vt 0.550783 0.782114
         1299  +vt 0.450394 0.782114
         1300  +vt 0.375678 0.450394
         1301  +vt 0.375678 0.550783
         1302  +vt 0.311931 0.550783
         1303  +vt 0.311931 0.450394
         1304  +vt 0.627051 0.550783
         1305  +vt 0.627051 0.450394
         1306  +vt 0.690798 0.450394
         1307  +vt 0.690798 0.550783
         1308  +vt 0.550783 0.297373
         1309  +vt 0.450394 0.297373
         1310  +vt 0.450394 0.480150
         1311  +vt 0.550783 0.480150
         1312  +vt 0.439425 0.297373
         1313  +vt 0.439425 0.480150
         1314  +vt 0.311931 0.297373
         1315  +vt 0.375678 0.480150
         1316  +vt 0.311931 0.480150
         1317  +vt 0.311931 0.297373
         1318  +vt 0.311931 0.480150
         1319  +vt 0.375678 0.480150
         1320  +vt 0.450394 0.297373
         1321  +vt 0.550783 0.297373
         1322  +vt 0.550783 0.480150
         1323  +vt 0.450394 0.480150
         1324  +vt 0.450394 0.188148
         1325  +vt 0.550783 0.188148
         1326  +vt 0.450394 0.297373
         1327  +vt 0.450394 0.188148
         1328  +vt 0.414103 0.188148
         1329  +vt 0.414103 0.297373
         1330  +vt 0.690798 0.450394
         1331  +vt 0.563304 0.450394
         1332  +vt 0.563304 0.414103
         1333  +vt 0.690798 0.414103
         1334  +vt 0.550783 0.188148
         1335  +vt 0.450394 0.188148
         1336  +vt 0.550783 0.297373
         1337  +vt 0.550783 0.188148
         1338  +vt 0.587073 0.188148
         1339  +vt 0.587073 0.297373
         1340  +vt 0.450394 0.188148
         1341  +vt 0.450394 0.297373
         1342  +vt 0.414103 0.297373
         1343  +vt 0.414103 0.188148
         1344  +vt 0.360812 0.188148
         1345  +vt 0.360812 0.297373
         1346  +vt 0.563304 0.587073
         1347  +vt 0.690798 0.587073
         1348  +vt 0.690798 0.640364
         1349  +vt 0.563304 0.640364
         1350  +vt 0.587073 0.188148
         1351  +vt 0.587073 0.297373
         1352  +vt 0.640364 0.297373
         1353  +vt 0.640364 0.188148
         1354  +vt 0.439425 0.414103
         1355  +vt 0.311931 0.414103
         1356  +vt 0.311931 0.360812
         1357  +vt 0.439425 0.360812
         1358  +vt 0.311931 0.550783
         1359  +vt 0.439425 0.550783
         1360  +vt 0.439425 0.587073
         1361  +vt 0.311931 0.587073
         1362  +vt 0.550783 0.188148
         1363  +vt 0.550783 0.297373
         1364  +vt 0.587073 0.297373
         1365  +vt 0.587073 0.188148
         1366  +vt 0.587073 0.188148
         1367  +vt 0.587073 0.297373
         1368  +vt 0.439425 0.450394
         1369  +vt 0.311931 0.450394
         1370  +vt 0.414103 0.297373
         1371  +vt 0.414103 0.188148
         1372  +vt 0.414103 0.188148
         1373  +vt 0.414103 0.297373
         1374  +vt 0.563304 0.550783
         1375  +vt 0.690798 0.550783
         1376  +vt 0.439425 0.188148
         1377  +vt 0.311931 0.188148
         1378  +vt 0.311931 0.297373
         1379  +vt 0.439425 0.297373
         1380  +vt 0.311931 0.188148
         1381  +vt 0.439425 0.188148
         1382  +vt 0.439425 0.297373
         1383  +vt 0.311931 0.297373
         1384  +vt 0.690798 0.188148
         1385  +vt 0.563304 0.188148
         1386  +vt 0.563304 0.297373
         1387  +vt 0.690798 0.297373
         1388  +vt 0.563304 0.188148
         1389  +vt 0.690798 0.188148
         1390  +vt 0.690798 0.297373
         1391  +vt 0.563304 0.297373
         1392  +vt 0.360812 0.297373
         1393  +vt 0.360812 0.188148
         1394  +vt 0.563304 0.360812
         1395  +vt 0.690798 0.360812
         1396  +vt 0.640364 0.297373
         1397  +vt 0.640364 0.188148
         1398  +vt 0.640364 0.188148
         1399  +vt 0.587073 -0.059331
         1400  +vt 0.640364 -0.059331
         1401  +vt 0.360812 0.297373
         1402  +vt 0.360812 0.188148
         1403  +vt 0.640364 -0.059331
         1404  +vt 0.587073 -0.059331
         1405  +vt 0.360812 0.188148
         1406  +vt 0.360812 0.297373
         1407  +vt 0.690798 -0.059331
         1408  +vt 0.563304 -0.059331
         1409  +vt 0.640364 0.297373
         1410  +vt 0.640364 -0.059331
         1411  +vt 0.587073 -0.059331
         1412  +vt 0.439425 0.640364
         1413  +vt 0.311931 0.640364
         1414  +vt 0.640364 0.188148
         1415  +vt 0.640364 0.297373
         1416  +vt 0.439425 0.587073
         1417  +vt 0.311931 0.587073
         1418  +vt 0.311931 0.640364
         1419  +vt 0.439425 0.640364
         1420  +vt 0.563304 0.414103
         1421  +vt 0.690798 0.414103
         1422  +vt 0.690798 0.360812
         1423  +vt 0.563304 0.360812
         1424  +vt 0.311931 0.414103
         1425  +vt 0.439425 0.414103
         1426  +vt 0.439425 0.360812
         1427  +vt 0.311931 0.360812
         1428  +vt 0.690798 0.587073
         1429  +vt 0.563304 0.587073
         1430  +vt 0.563304 0.640364
         1431  +vt 0.690798 0.640364
         1432  +vt 0.360812 -0.059331
         1433  +vt 0.414103 -0.059331
         1434  +vt 0.439425 0.188148
         1435  +vt 0.311931 0.188148
         1436  +vt 0.311931 -0.059331
         1437  +vt 0.439425 -0.059331
         1438  +vt 0.414103 -0.059331
         1439  +vt 0.360812 -0.059331
         1440  +vt 0.563304 0.188148
         1441  +vt 0.690798 0.188148
         1442  +vt 0.690798 -0.059331
         1443  +vt 0.563304 -0.059331
         1444  +vt 0.414103 -0.059331
         1445  +vt 0.360812 -0.059331
         1446  +vt 0.311931 0.188148
         1447  +vt 0.439425 0.188148
         1448  +vt 0.439425 -0.059331
         1449  +vt 0.311931 -0.059331
         1450  +vt 0.439425 -0.059331
         1451  +vt 0.311931 -0.059331
         1452  +vt 0.587073 -0.059331
         1453  +vt 0.640364 -0.059331
         1454  +vt 0.690798 0.188148
         1455  +vt 0.563304 0.188148
         1456  +vt 0.563304 -0.059331
         1457  +vt 0.690798 -0.059331
         1458  +vt 0.360812 -0.059331
         1459  +vt 0.414103 -0.059331
         1460  +vt 0.563304 -0.059331
         1461  +vt 0.690798 -0.059331
         1462  +vt 0.311931 -0.059331
         1463  +vt 0.439425 -0.059331
         1464  +vt 0.439425 0.721721
         1465  +vt 0.375678 0.721721
         1466  +vt 0.375678 0.782114
         1467  +vt 0.439425 0.782114
         1468  +vt 0.375678 0.721721
         1469  +vt 0.439425 0.721721
         1470  +vt 0.439425 0.782114
         1471  +vt 0.375678 0.782114
         1472  +vt 0.563304 0.782114
         1473  +vt 0.439425 0.805494
         1474  +vt 0.563304 0.805494
         1475  +vt 0.563304 0.721721
         1476  +vt 0.563304 0.782114
         1477  +vt 0.627051 0.721721
         1478  +vt 0.627051 0.782114
         1479  +vt 0.550783 0.721721
         1480  +vt 0.450394 0.721721
         1481  +vt 0.450394 0.782114
         1482  +vt 0.550783 0.782114
         1483  +vt 0.627051 0.721721
         1484  +vt 0.563304 0.721721
         1485  +vt 0.627051 0.782114
         1486  +vt 0.439425 0.540542
         1487  +vt 0.563304 0.540542
         1488  +vt 0.439425 0.600935
         1489  +vt 0.563304 0.600935
         1490  +vt 0.439425 0.661328
         1491  +vt 0.563304 0.661328
         1492  +vt 0.627051 0.540542
         1493  +vt 0.627051 0.600935
         1494  +vt 0.627051 0.661328
         1495  +vt 0.550783 0.480150
         1496  +vt 0.450394 0.480150
         1497  +vt 0.450394 0.540542
         1498  +vt 0.550783 0.540542
         1499  +vt 0.375678 0.550783
         1500  +vt 0.375678 0.450394
         1501  +vt 0.280691 0.450394
         1502  +vt 0.280691 0.550783
         1503  +vt 0.550783 0.600935
         1504  +vt 0.450394 0.600935
         1505  +vt 0.450394 0.661328
         1506  +vt 0.550783 0.661328
         1507  +vt 0.375678 0.550783
         1508  +vt 0.375678 0.450394
         1509  +vt 0.179123 0.450394
         1510  +vt 0.179123 0.550783
         1511  +vt 0.627051 0.540542
         1512  +vt 0.563304 0.540542
         1513  +vt 0.627051 0.600935
         1514  +vt 0.563304 0.600935
         1515  +vt 0.627051 0.661328
         1516  +vt 0.563304 0.661328
         1517  +vt 0.439425 0.540542
         1518  +vt 0.439425 0.600935
         1519  +vt 0.439425 0.661328
         1520  +vt 0.375678 0.540542
         1521  +vt 0.375678 0.600935
         1522  +vt 0.375678 0.661328
         1523  +vt 0.375678 0.540542
         1524  +vt 0.375678 0.600935
         1525  +vt 0.375678 0.661328
         1526  +vt 0.450394 0.480150
         1527  +vt 0.550783 0.480150
         1528  +vt 0.550783 0.540542
         1529  +vt 0.450394 0.540542
         1530  +vt 0.280691 0.540542
         1531  +vt 0.280691 0.600935
         1532  +vt 0.450394 0.600935
         1533  +vt 0.550783 0.600935
         1534  +vt 0.550783 0.661328
         1535  +vt 0.450394 0.661328
         1536  +vt 0.179123 0.661328
         1537  +vt 0.179123 0.721721
         1538  +vt 0.280691 0.540542
         1539  +vt 0.280691 0.600935
         1540  +vt 0.214828 0.600935
         1541  +vt 0.214828 0.540542
         1542  +vt 0.724632 0.550783
         1543  +vt 0.724632 0.450394
         1544  +vt 0.780867 0.450394
         1545  +vt 0.780867 0.550783
         1546  +vt 0.627051 0.450394
         1547  +vt 0.627051 0.550783
         1548  +vt 0.724632 0.550783
         1549  +vt 0.724632 0.450394
         1550  +vt 0.724632 0.540542
         1551  +vt 0.724632 0.600935
         1552  +vt 0.375678 0.450394
         1553  +vt 0.375678 0.550783
         1554  +vt 0.280691 0.550783
         1555  +vt 0.280691 0.450394
         1556  +vt 0.627051 0.550783
         1557  +vt 0.627051 0.450394
         1558  +vt 0.724632 0.600935
         1559  +vt 0.724632 0.540542
         1560  +vt 0.627051 0.450394
         1561  +vt 0.627051 0.550783
         1562  +vt 0.823606 0.550783
         1563  +vt 0.823606 0.450394
         1564  +vt 0.179123 0.721721
         1565  +vt 0.179123 0.661328
         1566  +vt 0.375678 0.450394
         1567  +vt 0.375678 0.550783
         1568  +vt 0.179123 0.550783
         1569  +vt 0.179123 0.450394
         1570  +vt 0.823606 0.661328
         1571  +vt 0.823606 0.721721
         1572  +vt 0.627051 0.550783
         1573  +vt 0.627051 0.450394
         1574  +vt 0.823606 0.450394
         1575  +vt 0.823606 0.550783
         1576  +vt 0.823606 0.721721
         1577  +vt 0.823606 0.661328
         1578  +vt 0.577883 0.453146
         1579  +vt 0.577883 0.546854
         1580  +vt 0.422117 0.546854
         1581  +vt 0.422117 0.453146
         1582  +vt 0.450394 0.782114
         1583  +vt 0.550783 0.782114
         1584  +vt 0.550783 0.805494
         1585  +vt 0.450394 0.805494
         1586  +vt 0.563304 0.805494
         1587  +vt 0.439425 0.805494
         1588  +vt 0.550783 0.782114
         1589  +vt 0.450394 0.782114
         1590  +vt 0.450394 0.805494
         1591  +vt 0.550783 0.805494
         1592  +vt 0.439425 0.450394
         1593  +vt 0.563304 0.450394
         1594  +vt 0.588807 0.429726
         1595  +vt 0.413922 0.429726
         1596  +vt 0.563304 0.550783
         1597  +vt 0.588807 0.571450
         1598  +vt 0.439425 0.550783
         1599  +vt 0.413922 0.571450
         1600  +vt 0.571450 0.805494
         1601  +vt 0.429726 0.805494
         1602  +vt 0.429726 0.940669
         1603  +vt 0.571450 0.940669
         1604  +vt 0.253596 0.300319
         1605  +vt 0.253596 0.699681
         1606  +vt -0.000001 0.699681
         1607  +vt -0.000001 0.300319
         1608  +vt 0.588807 0.805494
         1609  +vt 0.413922 0.805494
         1610  +vt 0.413922 0.940669
         1611  +vt 0.588807 0.940669
         1612  +vt 0.429726 0.805494
         1613  +vt 0.571450 0.805494
         1614  +vt 0.571450 0.940669
         1615  +vt 0.429726 0.940669
         1616  +vt 0.413922 0.805494
         1617  +vt 0.588807 0.805494
         1618  +vt 0.588807 0.940669
         1619  +vt 0.413922 0.940669
         1620  +vt 0.422117 0.546854
         1621  +vt 0.577883 0.546854
         1622  +vt 0.577883 0.453146
         1623  +vt 0.422117 0.453146
         1624  +vt 0.450394 0.540542
         1625  +vt 0.550783 0.540542
         1626  +vt 0.550783 0.600935
         1627  +vt 0.450394 0.600935
         1628  +vt 0.780867 0.450394
         1629  +vt 0.780867 0.411108
         1630  +vt 0.724632 0.411108
         1631  +vt 0.780867 0.550783
         1632  +vt 0.780867 0.600935
         1633  +vt 0.780867 0.540542
         1634  +vt 0.780867 0.411108
         1635  +vt 0.724632 0.411108
         1636  +vt 0.724632 0.362760
         1637  +vt 0.780867 0.362760
         1638  +vt 0.450394 0.600935
         1639  +vt 0.450394 0.540542
         1640  +vt 0.411108 0.540542
         1641  +vt 0.411108 0.600935
         1642  +vt 0.411108 0.600935
         1643  +vt 0.411108 0.540542
         1644  +vt 0.724632 0.600935
         1645  +vt 0.724632 0.540542
         1646  +vt 0.780867 0.540542
         1647  +vt 0.780867 0.600935
         1648  +vt 0.724632 0.600935
         1649  +vt 0.724632 0.540542
         1650  +vt 0.066173 0.540542
         1651  +vt 0.066173 0.600935
         1652  +vt 0.780867 0.362760
         1653  +vt 0.724632 0.362760
         1654  +vt 0.362760 0.600935
         1655  +vt 0.362760 0.540542
         1656  +vt 0.411108 0.600935
         1657  +vt 0.411108 0.540542
         1658  +vt 0.362760 0.540542
         1659  +vt 0.362760 0.600935
         1660  +vt 0.066173 0.362760
         1661  +vt 0.066173 0.411108
         1662  +vt 0.066173 0.411108
         1663  +vt 0.066173 0.362760
         1664  +vt 0.066173 0.600935
         1665  +vt 0.066173 0.540542
         1666  +vt 0.550783 0.540542
         1667  +vt 0.450394 0.540542
         1668  +vt 0.450394 0.600935
         1669  +vt 0.550783 0.600935
         1670  +vt 0.214828 0.550783
         1671  +vt 0.214828 0.450394
         1672  +vt 0.214828 0.550783
         1673  +vt 0.214828 0.583205
         1674  +vt 0.280691 0.583205
         1675  +vt 0.214828 0.450394
         1676  +vt 0.214828 0.624655
         1677  +vt 0.280691 0.624655
         1678  +vt 0.583205 0.600935
         1679  +vt 0.583205 0.540542
         1680  +vt 0.550783 0.600935
         1681  +vt 0.550783 0.540542
         1682  +vt 0.583205 0.540542
         1683  +vt 0.583205 0.600935
         1684  +vt 0.280691 0.583205
         1685  +vt 0.214828 0.583205
         1686  +vt 0.280691 0.600935
         1687  +vt 0.280691 0.540542
         1688  +vt 0.214828 0.540542
         1689  +vt 0.214828 0.600935
         1690  +vt 0.624655 0.600935
         1691  +vt 0.624655 0.540542
         1692  +vt 0.280691 0.624655
         1693  +vt 0.214828 0.624655
         1694  +vt 0.860134 0.600935
         1695  +vt 0.860134 0.540542
         1696  +vt 0.583205 0.600935
         1697  +vt 0.583205 0.540542
         1698  +vt 0.624655 0.540542
         1699  +vt 0.624655 0.600935
         1700  +vt 0.860134 0.583205
         1701  +vt 0.860134 0.624655
         1702  +vt 0.860134 0.624655
         1703  +vt 0.860134 0.583205
         1704  +vt 0.280691 0.600935
         1705  +vt 0.280691 0.540542
         1706  +vt 0.860134 0.540542
         1707  +vt 0.860134 0.600935
         1708  +vt 1.000000 0.094809
         1709  +vt 1.000000 0.905191
         1710  +vt 0.000000 0.905191
         1711  +vt 0.000000 0.094809
         1712  +vt 0.746405 0.699681
         1713  +vt 0.746405 0.300319
         1714  +vt 0.999999 0.300319
         1715  +vt 0.999999 0.699681
         1716  +vt 0.000000 0.905191
         1717  +vt 1.000000 0.905191
         1718  +vt 1.000000 0.094809
         1719  +vt 0.000000 0.094809
         1720  +vt 0.868542 -0.000000
         1721  +vt 0.131458 -0.000000
         1722  +vt 0.131458 0.209808
         1723  +vt 0.868542 0.209808
         1724  +vt 0.868542 0.790192
         1725  +vt 0.131458 0.790192
         1726  +vt 0.131458 1.000000
         1727  +vt 0.868542 1.000000
         1728  +vt 0.131455 0.790192
         1729  +vt 0.868546 0.790192
         1730  +vt 0.868546 0.209808
         1731  +vt 0.131455 0.209808
         1732  +vt 0.868546 -0.000000
         1733  +vt 0.131455 -0.000000
         1734  +vt 0.868546 1.000000
         1735  +vt 0.131455 1.000000
         1736  +vn -0.0000 -0.0000 -1.0000
         1737  +vn 0.0000 0.0000 1.0000
         1738  +vn -1.0000 0.0000 0.0000
         1739  +vn 0.0000 1.0000 -0.0000
         1740  +vn 1.0000 0.0000 -0.0000
         1741  +vn 0.0000 -1.0000 0.0000
         1742  +g body_body_body
         1743  +usemtl body
         1744  +s off
         1745  +f 266/613/13 269/614/13 262/615/13 322/616/13 257/617/13
         1746  +f 268/618/14 267/619/14 260/620/14 324/621/14 261/622/14
         1747  +f 265/623/13 266/613/13 257/617/13 258/624/13
         1748  +f 353/625/15 352/626/15 332/627/15 330/628/15
         1749  +f 323/629/16 321/630/16 264/631/16 263/632/16
         1750  +f 324/633/16 322/634/16 262/635/16 261/636/16
         1751  +f 271/637/17 270/638/17 263/639/17 264/640/17
         1752  +f 267/619/14 272/641/14 259/642/14 260/620/14
         1753  +f 270/643/13 265/623/13 258/624/13 323/644/13 263/645/13
         1754  +f 272/641/14 271/646/14 264/647/14 321/648/14 259/642/14
         1755  +f 269/649/15 268/650/15 261/651/15 262/652/15
         1756  +f 254/653/15 253/654/15 268/650/15 269/649/15
         1757  +f 266/655/17 249/656/17 278/657/17 284/658/17
         1758  +f 269/659/16 266/660/16 284/661/16 286/662/16
         1759  +f 256/663/17 255/664/17 270/638/17 271/637/17
         1760  +f 272/665/15 251/666/15 276/667/15 288/668/15
         1761  +f 250/669/15 265/670/15 273/671/15 274/672/15
         1762  +f 284/658/17 278/657/17 294/673/17 300/674/17
         1763  +f 285/675/16 282/676/16 298/677/16 301/678/16
         1764  +f 275/679/17 283/680/17 299/681/17 291/682/17
         1765  +f 273/683/16 287/684/16 303/685/16 289/686/16
         1766  +f 271/687/16 272/688/16 288/689/16 283/690/16
         1767  +f 252/691/17 267/692/17 285/693/17 280/694/17
         1768  +f 268/650/15 253/654/15 281/695/15 282/696/15
         1769  +f 265/697/16 270/698/16 287/684/16 273/683/16
         1770  +f 254/653/15 269/649/15 286/699/15 277/700/15
         1771  +f 270/638/17 255/664/17 279/701/17 287/702/17
         1772  +f 256/663/17 271/637/17 283/680/17 275/679/17
         1773  +f 267/703/16 268/704/16 282/676/16 285/675/16
         1774  +f 292/705/14 291/706/14 299/707/14 304/708/14
         1775  +f 295/709/13 290/710/13 289/711/13 303/712/13
         1776  +f 297/713/14 296/714/14 301/715/14 298/716/14
         1777  +f 294/717/13 293/718/13 302/719/13 300/720/13
         1778  +f 274/672/15 273/671/15 289/721/15 290/722/15
         1779  +f 286/662/16 284/661/16 300/723/16 302/724/16
         1780  +f 280/694/17 285/693/17 301/725/17 296/726/17
         1781  +f 292/727/15 276/667/15 306/728/15 314/729/15
         1782  +f 277/700/15 286/699/15 302/730/15 293/731/15
         1783  +f 275/679/17 291/682/17 313/732/17 305/733/17
         1784  +f 287/702/17 279/701/17 295/734/17 303/735/17
         1785  +f 296/714/14 297/713/14 320/736/14 319/737/14
         1786  +f 288/668/15 276/667/15 292/727/15 304/738/15
         1787  +f 280/694/17 296/726/17 319/739/17 311/740/17
         1788  +f 283/690/16 288/689/16 304/741/16 299/742/16
         1789  +f 282/696/15 281/695/15 297/743/15 298/744/15
         1790  +f 306/745/18 305/746/18 313/747/18 314/748/18
         1791  +f 308/749/18 307/750/18 315/751/18 316/752/18
         1792  +f 309/753/18 310/754/18 318/755/18 317/756/18
         1793  +f 312/757/18 311/758/18 319/759/18 320/760/18
         1794  +f 277/700/15 293/731/15 315/761/15 307/762/15
         1795  +f 276/763/13 275/764/13 305/765/13 306/766/13
         1796  +f 295/734/17 279/701/17 309/767/17 317/768/17
         1797  +f 278/769/14 277/770/14 307/771/14 308/772/14
         1798  +f 294/673/17 278/657/17 308/773/17 316/774/17
         1799  +f 279/775/14 274/776/14 310/777/14 309/778/14
         1800  +f 291/706/14 292/705/14 314/779/14 313/780/14
         1801  +f 297/743/15 281/695/15 312/781/15 320/782/15
         1802  +f 281/783/13 280/784/13 311/785/13 312/786/13
         1803  +f 274/672/15 290/722/15 318/787/15 310/788/15
         1804  +f 293/718/13 294/717/13 316/789/13 315/790/13
         1805  +f 290/710/13 295/709/13 317/791/13 318/792/13
         1806  +f 265/670/15 250/669/15 251/666/15 272/665/15
         1807  +f 266/655/17 267/692/17 252/691/17 249/656/17
         1808  +f 345/793/14 344/794/14 329/795/14 327/796/14
         1809  +f 333/797/13 340/798/13 326/799/13 331/800/13
         1810  +f 328/801/14 327/796/14 383/802/14 384/803/14
         1811  +f 340/798/13 360/804/13 325/805/13 326/799/13
         1812  +f 360/804/13 353/806/13 330/807/13 325/805/13
         1813  +f 344/808/17 333/809/17 331/810/17 329/811/17
         1814  +f 352/812/14 364/813/14 328/801/14 332/814/14
         1815  +f 364/813/14 345/793/14 327/796/14 328/801/14
         1816  +f 260/620/14 259/642/14 348/815/14 361/816/14
         1817  +f 361/816/14 348/815/14 347/817/14 362/818/14
         1818  +f 362/818/14 347/817/14 346/819/14 363/820/14
         1819  +f 363/820/14 346/819/14 345/793/14 364/813/14
         1820  +f 324/621/14 260/620/14 361/816/14 349/821/14
         1821  +f 349/821/14 361/816/14 362/818/14 350/822/14
         1822  +f 350/822/14 362/818/14 363/820/14 351/823/14
         1823  +f 351/823/14 363/820/14 364/813/14 352/812/14
         1824  +f 321/824/17 323/825/17 336/826/17 341/827/17
         1825  +f 341/828/18 336/829/18 366/830/18 367/831/18
         1826  +f 342/832/17 335/833/17 334/834/17 343/835/17
         1827  +f 343/836/18 334/837/18 374/838/18 375/839/18
         1828  +f 257/617/13 322/616/13 356/840/13 357/841/13
         1829  +f 357/841/13 356/840/13 355/842/13 358/843/13
         1830  +f 358/843/13 355/842/13 354/844/13 359/845/13
         1831  +f 359/845/13 354/844/13 353/806/13 360/804/13
         1832  +f 258/624/13 257/617/13 357/841/13 337/846/13
         1833  +f 337/846/13 357/841/13 358/843/13 338/847/13
         1834  +f 338/847/13 358/843/13 359/845/13 339/848/13
         1835  +f 339/848/13 359/845/13 360/804/13 340/798/13
         1836  +f 323/644/13 258/624/13 337/846/13 336/849/13
         1837  +f 336/849/13 337/846/13 338/847/13 335/850/13
         1838  +f 335/850/13 338/847/13 339/848/13 334/851/13
         1839  +f 334/851/13 339/848/13 340/798/13 333/797/13
         1840  +f 259/642/14 321/648/14 341/852/14 348/815/14
         1841  +f 348/815/14 341/852/14 342/853/14 347/817/14
         1842  +f 347/817/14 342/853/14 343/854/14 346/819/14
         1843  +f 346/819/14 343/854/14 344/794/14 345/793/14
         1844  +f 322/855/15 324/856/15 349/857/15 356/858/15
         1845  +f 342/853/14 341/852/14 367/859/14 368/860/14
         1846  +f 355/861/15 350/862/15 351/863/15 354/864/15
         1847  +f 344/794/14 343/854/14 375/865/14 376/866/14
         1848  +f 366/867/13 365/868/13 409/869/13 410/870/13
         1849  +f 370/871/16 371/872/16 395/873/16 394/874/16
         1850  +f 356/875/18 349/876/18 369/877/18 372/878/18
         1851  +f 336/849/13 335/850/13 365/868/13 366/867/13
         1852  +f 355/842/13 356/840/13 372/879/13 371/880/13
         1853  +f 335/881/16 342/882/16 368/883/16 365/884/16
         1854  +f 350/885/16 355/886/16 371/872/16 370/871/16
         1855  +f 349/821/14 350/822/14 370/887/14 369/888/14
         1856  +f 354/889/18 351/890/18 377/891/18 380/892/18
         1857  +f 334/851/13 333/797/13 373/893/13 374/894/13
         1858  +f 333/895/16 344/896/16 376/897/16 373/898/16
         1859  +f 353/806/13 354/844/13 380/899/13 379/900/13
         1860  +f 352/901/16 353/902/16 379/903/16 378/904/16
         1861  +f 351/823/14 352/812/14 378/905/14 377/906/14
         1862  +f 377/907/15 378/908/15 379/909/15 380/910/15
         1863  +f 325/911/15 328/912/15 384/913/15 381/914/15
         1864  +f 326/799/13 325/805/13 381/915/13 382/916/13
         1865  +f 327/917/17 326/918/17 382/919/17 383/920/17
         1866  +f 382/921/18 381/922/18 385/923/18 386/924/18
         1867  +f 381/922/18 384/925/18 388/926/18 385/923/18
         1868  +f 384/925/18 383/927/18 387/928/18 388/926/18
         1869  +f 383/927/18 382/921/18 386/924/18 387/928/18
         1870  +f 387/929/17 386/930/17 390/931/17 391/932/17
         1871  +f 326/933/16 327/934/16 329/935/16 331/936/16
         1872  +f 388/937/14 387/938/14 391/939/14 392/940/14
         1873  +f 385/941/15 388/942/15 392/943/15 389/944/15
         1874  +f 386/945/13 385/946/13 389/947/13 390/948/13
         1875  +f 373/949/17 376/950/17 375/951/17 374/952/17
         1876  +f 396/953/15 393/954/15 394/955/15 395/956/15
         1877  +f 372/878/18 396/957/18 400/958/18 398/959/18
         1878  +f 372/878/18 369/877/18 393/960/18 396/957/18
         1879  +f 369/888/14 370/887/14 394/961/14 393/962/14
         1880  +f 399/963/16 397/964/16 401/965/16 403/966/16
         1881  +f 395/873/16 371/872/16 397/964/16 399/963/16
         1882  +f 371/967/17 372/968/17 398/969/17 397/970/17
         1883  +f 396/953/15 395/956/15 399/971/15 400/972/15
         1884  +f 401/973/13 402/974/13 404/975/13 403/976/13
         1885  +f 397/977/14 398/978/14 406/979/14 405/980/14
         1886  +f 398/959/18 400/958/18 404/981/18 402/982/18
         1887  +f 400/972/15 399/971/15 403/983/15 404/984/15
         1888  +f 405/985/17 406/986/17 408/987/17 407/988/17
         1889  +f 398/959/18 402/982/18 408/989/18 406/990/18
         1890  +f 401/965/16 397/964/16 405/991/16 407/992/16
         1891  +f 402/974/13 401/973/13 407/993/13 408/994/13
         1892  +f 411/995/17 410/996/17 409/997/17 412/998/17
         1893  +f 365/884/16 368/883/16 412/999/16 409/1000/16
         1894  +f 367/831/18 411/1001/18 415/1002/18 413/1003/18
         1895  +f 367/831/18 366/830/18 410/1004/18 411/1001/18
         1896  +f 413/1003/18 415/1002/18 419/1005/18 417/1006/18
         1897  +f 411/995/17 412/998/17 416/1007/17 415/1008/17
         1898  +f 368/1009/15 367/1010/15 413/1011/15 414/1012/15
         1899  +f 412/999/16 368/883/16 414/1013/16 416/1014/16
         1900  +f 418/1015/14 417/1016/14 419/1017/14 420/1018/14
         1901  +f 415/1008/17 416/1007/17 420/1019/17 419/1020/17
         1902  +f 416/1014/16 414/1013/16 418/1021/16 420/1022/16
         1903  +f 417/1016/14 418/1015/14 424/1023/14 423/1024/14
         1904  +f 422/1025/15 421/1026/15 423/1027/15 424/1028/15
         1905  +f 418/1021/16 414/1013/16 422/1029/16 424/1030/16
         1906  +f 413/1003/18 417/1006/18 423/1031/18 421/1032/18
         1907  +f 414/1033/13 413/1034/13 421/1035/13 422/1036/13
         1908  +f 389/1037/16 392/1038/16 391/1039/16 390/1040/16
         1909  +f 328/1041/16 325/1042/16 330/1043/16 332/1044/16
         1910  +f 272/1045/18 267/1046/18 266/1047/18 265/1048/18
         1911  +f 277/1049/18 278/1050/18 249/1051/18 254/1052/18
         1912  +f 253/1053/18 254/1052/18 249/1051/18 252/1054/18
         1913  +f 280/1055/18 281/1056/18 253/1053/18 252/1054/18
         1914  +f 256/1057/18 251/1058/18 250/1059/18 255/1060/18
         1915  +f 274/1061/18 279/1062/18 255/1060/18 250/1059/18
         1916  +f 276/1063/18 251/1058/18 256/1057/18 275/1064/18
         1917  +o bronze
         1918  +v -0.253720 0.185648 0.022466
         1919  +v -0.253720 0.263734 0.022466
         1920  +v -0.253720 0.263734 -0.021125
         1921  +v -0.253720 0.185648 -0.021125
         1922  +v -0.300567 0.185648 0.022466
         1923  +v -0.300567 0.263734 0.022466
         1924  +v -0.300567 0.263734 -0.021124
         1925  +v -0.300567 0.185648 -0.021124
         1926  +v 0.246495 0.262724 -0.022435
         1927  +v 0.246495 0.186657 -0.022435
         1928  +v 0.246495 0.186657 0.023776
         1929  +v 0.246495 0.262724 0.023776
         1930  +v 0.294296 0.262724 -0.022435
         1931  +v 0.294296 0.186657 -0.022435
         1932  +v 0.294296 0.186657 0.023776
         1933  +v 0.294296 0.262724 0.023776
         1934  +vt 0.779118 -0.000000
         1935  +vt 0.220882 0.000001
         1936  +vt 0.220882 1.000000
         1937  +vt 0.779118 1.000000
         1938  +vt 0.285735 0.220882
         1939  +vt 0.285735 0.779118
         1940  +vt 0.885676 0.779118
         1941  +vt 0.885676 0.220882
         1942  +vt 0.000000 0.034757
         1943  +vt 1.000000 0.034757
         1944  +vt 1.000000 0.965243
         1945  +vt 0.000000 0.965243
         1946  +vt 0.220882 0.128582
         1947  +vt 0.779118 0.128582
         1948  +vt 0.779118 1.128582
         1949  +vt 0.220882 1.128582
         1950  +vt 0.285735 0.128582
         1951  +vt 0.285735 1.128582
         1952  +vt 0.885676 1.128582
         1953  +vt 0.885676 0.128582
         1954  +vt 0.285735 1.128582
         1955  +vt 0.285735 0.128582
         1956  +vt 0.885676 0.128582
         1957  +vt 0.885676 1.128582
         1958  +vt 0.724426 -0.129151
         1959  +vt 0.724426 0.870849
         1960  +vt 0.096033 0.870849
         1961  +vt 0.096033 -0.129151
         1962  +vt -0.000000 0.983381
         1963  +vt 1.000000 0.983381
         1964  +vt 1.000000 0.016619
         1965  +vt -0.000000 0.016619
         1966  +vt 0.803753 -0.129151
         1967  +vt 0.196247 -0.129151
         1968  +vt 0.196247 0.870849
         1969  +vt 0.803753 0.870849
         1970  +vt 0.724426 0.196247
         1971  +vt 0.724426 0.803753
         1972  +vt 0.096033 0.803753
         1973  +vt 0.096033 0.196247
         1974  +vt 0.724426 0.870849
         1975  +vt 0.724426 -0.129151
         1976  +vt 0.096033 -0.129151
         1977  +vt 0.096033 0.870849
         1978  +vt 0.196247 1.000000
         1979  +vt 0.196247 0.000000
         1980  +vt 0.803753 -0.000000
         1981  +vt 0.803753 1.000000
         1982  +vn 1.0000 0.0000 0.0000
         1983  +vn -0.0000 -1.0000 -0.0000
         1984  +vn 0.0000 1.0000 0.0000
         1985  +vn -1.0000 0.0000 0.0000
         1986  +vn 0.0000 0.0000 1.0000
         1987  +vn -0.0000 0.0000 -1.0000
         1988  +g bronze_bronze_bronze
         1989  +usemtl bronze
         1990  +s off
         1991  +f 425/1065/19 428/1066/19 427/1067/19 426/1068/19
         1992  +f 428/1069/20 425/1070/20 429/1071/20 432/1072/20
         1993  +f 427/1073/21 431/1074/21 430/1075/21 426/1076/21
         1994  +f 432/1077/22 429/1078/22 430/1079/22 431/1080/22
         1995  +f 425/1081/23 426/1082/23 430/1083/23 429/1084/23
         1996  +f 427/1085/24 428/1086/24 432/1087/24 431/1088/24
         1997  +f 434/1089/24 433/1090/24 437/1091/24 438/1092/24
         1998  +f 439/1093/20 435/1094/20 434/1095/20 438/1096/20
         1999  +f 439/1097/19 438/1098/19 437/1099/19 440/1100/19
         2000  +f 433/1101/21 436/1102/21 440/1103/21 437/1104/21
         2001  +f 436/1105/23 435/1106/23 439/1107/23 440/1108/23
         2002  +f 433/1109/22 434/1110/22 435/1111/22 436/1112/22
         2003  +o tin
         2004  +v -0.250998 0.279734 0.026300
         2005  +v -0.250998 0.279734 -0.017291
         2006  +v -0.297845 0.279734 0.026300
         2007  +v -0.297845 0.279734 -0.017291
         2008  +v -0.250998 0.520259 0.026300
         2009  +v -0.250998 0.520259 -0.017291
         2010  +v -0.297845 0.520259 0.026300
         2011  +v -0.297845 0.520259 -0.017291
         2012  +v 0.249218 0.163738 -0.018601
         2013  +v 0.249218 0.163738 0.027610
         2014  +v 0.297018 0.163738 -0.018601
         2015  +v 0.297018 0.163738 0.027610
         2016  +v 0.249218 -0.188531 -0.018601
         2017  +v 0.249218 -0.188531 0.027610
         2018  +v 0.297018 -0.188531 -0.018601
         2019  +v 0.297018 -0.188531 0.027610
         2020  +vt 0.469250 0.629123
         2021  +vt 0.530750 0.629123
         2022  +vt 0.530750 0.968469
         2023  +vt 0.469250 0.968469
         2024  +vt 0.853202 0.530750
         2025  +vt 0.853202 0.469250
         2026  +vt 0.919296 0.469250
         2027  +vt 0.919296 0.530750
         2028  +vt 0.919296 0.629123
         2029  +vt 0.853202 0.629123
         2030  +vt 0.853202 0.968469
         2031  +vt 0.919296 0.968469
         2032  +vt 0.530750 0.629123
         2033  +vt 0.469250 0.629123
         2034  +vt 0.469250 0.968469
         2035  +vt 0.530750 0.968469
         2036  +vt 0.853202 0.629123
         2037  +vt 0.919296 0.629123
         2038  +vt 0.919296 0.968469
         2039  +vt 0.853202 0.968469
         2040  +vt 0.147471 0.465470
         2041  +vt 0.080032 0.465470
         2042  +vt 0.080032 -0.031531
         2043  +vt 0.147471 -0.031531
         2044  +vt 0.147471 0.532599
         2045  +vt 0.147471 0.467401
         2046  +vt 0.080032 0.467401
         2047  +vt 0.080032 0.532599
         2048  +vt 0.532599 0.465470
         2049  +vt 0.467401 0.465470
         2050  +vt 0.467401 -0.031531
         2051  +vt 0.532599 -0.031531
         2052  +vt 0.080032 0.465470
         2053  +vt 0.147471 0.465470
         2054  +vt 0.147471 -0.031531
         2055  +vt 0.080032 -0.031531
         2056  +vt 0.467401 0.465470
         2057  +vt 0.532599 0.465470
         2058  +vt 0.532599 -0.031531
         2059  +vt 0.467401 -0.031531
         2060  +vt 1.000000 0.983381
         2061  +vt -0.000000 0.983381
         2062  +vt -0.000000 0.016619
         2063  +vt 1.000000 0.016619
         2064  +vt 0.000000 0.034757
         2065  +vt 0.000000 0.965243
         2066  +vt 1.000000 0.965243
         2067  +vt 1.000000 0.034757
         2068  +vn -1.0000 0.0000 0.0000
         2069  +vn 0.0000 1.0000 0.0000
         2070  +vn 0.0000 0.0000 1.0000
         2071  +vn 1.0000 0.0000 0.0000
         2072  +vn -0.0000 0.0000 -1.0000
         2073  +vn -0.0000 -1.0000 -0.0000
         2074  +g tin_tin_tin
         2075  +usemtl tin
         2076  +s off
         2077  +f 444/1113/25 443/1114/25 447/1115/25 448/1116/25
         2078  +f 445/1117/26 446/1118/26 448/1119/26 447/1120/26
         2079  +f 443/1121/27 441/1122/27 445/1123/27 447/1124/27
         2080  +f 441/1125/28 442/1126/28 446/1127/28 445/1128/28
         2081  +f 442/1129/29 444/1130/29 448/1131/29 446/1132/29
         2082  +f 449/1133/29 451/1134/29 455/1135/29 453/1136/29
         2083  +f 454/1137/30 453/1138/30 455/1139/30 456/1140/30
         2084  +f 450/1141/25 449/1142/25 453/1143/25 454/1144/25
         2085  +f 452/1145/27 450/1146/27 454/1147/27 456/1148/27
         2086  +f 451/1149/28 452/1150/28 456/1151/28 455/1152/28
         2087  +f 450/1153/26 452/1154/26 451/1155/26 449/1156/26
         2088  +f 442/1157/30 441/1158/30 443/1159/30 444/1160/30

Modified potions.lua from [bf24fbd87b] to [6c72918b5d].

    97     97   		groups = {
    98     98   			sorcery_potion = 2;
    99     99   			sorcery_draught = 1;
   100    100   			sorcery_magical = 1;
   101    101   			sorcery_usable_magic = 1;
   102    102   		};
   103    103   		on_use = function(stack, user, pointat)
   104         -			if potion.effect(stack, user) == false then return nil end
          104  +			local pproto = stack:get_definition()._proto
          105  +			if potion.effect(stack, user, pproto) == false then return nil end
   105    106   			local meta = stack:get_meta()
   106    107   			local force = meta:get_int('force');
   107    108   			minetest.add_particlespawner {
   108    109   				amount = 200 + (30 * force);
   109         -				time = stack:get_definition()._proto:duration(meta);
          110  +				time = pproto:duration(meta);
   110    111   				minpos = { x = -0.1; y = 0; z = -0.1; };
   111    112   				maxpos = { x = 0.1; y = 2; z = 0.1; };
   112    113   				minvel = { x = -0.1; y = 0; z = -0.1; };
   113    114   				maxvel = { x = 0.1; y = 0; z = 0.1; };
   114    115   				minacc = { x = 0; y = 0.1; z = 0; };
   115    116   				maxacc = { x = 0; y = 1; z = 0; };
   116    117   				minexptime = 1;

Modified recipes.lua from [7adbea13be] to [c312eb6c73].

   359    359   	output = 'sorcery:portal_pad';
   360    360   	recipe = {
   361    361   		{'basic_materials:steel_bar','xpanes:bar_flat','basic_materials:steel_bar'};
   362    362   		{'sorcery:gem_amethyst','sorcery:beam_generator','sorcery:gem_amethyst'};
   363    363   		{'basic_materials:steel_bar','default:tin_ingot','basic_materials:steel_bar'};
   364    364   	}
   365    365   }
          366  +
          367  +minetest.register_craft {
          368  +	output = 'sorcery:gravity_manipulator';
          369  +	recipe = {
          370  +		{'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'};
          371  +		{'sorcery:inverter_coil','sorcery:core_counterpraxic','sorcery:levitanium_ingot'};
          372  +		{'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'};
          373  +	};
          374  +}
          375  +
          376  +minetest.register_craft {
          377  +	output = 'sorcery:gravitator_off';
          378  +	recipe = {
          379  +		{'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'};
          380  +		{'xpanes:pane_flat','sorcery:gravity_manipulator','basic_materials:plastic_sheet'};
          381  +		{'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'};
          382  +	};
          383  +}
          384  +
          385  +minetest.register_craftitem('sorcery:gravity_manipulator', {
          386  +	description = 'Gravity Manipulator';
          387  +	inventory_image = 'sorcery_gravity_manipulator.png';
          388  +	groups = {
          389  +		sorcery_magitech = 1;
          390  +	};
          391  +})
   366    392   
   367    393   minetest.register_craftitem('sorcery:tuning_disc',{
   368    394   	description = 'Tuning Disc';
   369    395   	inventory_image = 'sorcery_tuning_disc.png';
   370    396   	groups = {
   371    397   		sorcery_magitech = 1; metal = 1;
   372    398   	};

Added textures/sorcery_aluminum_ore.png version [9daddeb433].

cannot compute difference between binary files

Added textures/sorcery_cobalt_ore.png version [09827dfd82].

cannot compute difference between binary files

Modified textures/sorcery_core_counterpraxic.png from [e3aaf06222] to [39479c1b28].

cannot compute difference between binary files

Added textures/sorcery_enchant_glimmer.png version [d92d1302fd].

cannot compute difference between binary files

Added textures/sorcery_enchant_glitter.png version [2872a22baf].

cannot compute difference between binary files

Added textures/sorcery_gravitator_panel_crush.png version [61f151d4e3].

cannot compute difference between binary files

Added textures/sorcery_gravitator_panel_lift.png version [607e0d2a18].

cannot compute difference between binary files

Added textures/sorcery_gravitator_panel_off.png version [4ef1021164].

cannot compute difference between binary files

Added textures/sorcery_gravitator_panel_slow.png version [d6bbdcb829].

cannot compute difference between binary files

Added textures/sorcery_gravitator_panel_stop.png version [99c6937d1a].

cannot compute difference between binary files

Added textures/sorcery_gravitator_side.png version [f72e073bca].

cannot compute difference between binary files

Added textures/sorcery_gravity_manipulator.png version [f01b379bf4].

cannot compute difference between binary files

Added textures/sorcery_iridium_ore.png version [b017777bda].

cannot compute difference between binary files

Added textures/sorcery_levitanium_ore.png version [dbc5d31e75].

cannot compute difference between binary files

Added textures/sorcery_lithium_ore.png version [99373498fd].

cannot compute difference between binary files

Added textures/sorcery_platinum_ore.png version [4ec4985ec9].

cannot compute difference between binary files

Added textures/sorcery_silver_ore.png version [8e84c2f224].

cannot compute difference between binary files

Added textures/sorcery_tungsten_ore.png version [fabcffe445].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_0.png version [aebcb77ec1].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_1.png version [d03261c06f].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_10.png version [66eafce742].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_11.png version [9a69465e5c].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_12.png version [5db337f18b].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_13.png version [00c1eef083].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_14.png version [4ac1d3242f].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_15.png version [58fe058e6b].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_16.png version [8dd3a566b5].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_2.png version [2a4cdfb7eb].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_3.png version [3906c0dad8].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_4.png version [9f97dafed9].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_5.png version [224a393ff3].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_6.png version [ab952652b7].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_7.png version [044c6ab65b].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_8.png version [48dcf6b6d6].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_9.png version [440f647fa2].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_0.png version [6bde9edc7b].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_1.png version [6bde9edc7b].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_10.png version [29f838a2be].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_11.png version [29f838a2be].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_12.png version [48fe5c3d7d].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_13.png version [48fe5c3d7d].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_14.png version [d3aa3fa899].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_15.png version [d3aa3fa899].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_16.png version [8dd3a566b5].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_2.png version [b19fd7a676].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_3.png version [b19fd7a676].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_4.png version [3fb2f1935a].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_5.png version [3fb2f1935a].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_6.png version [20c3d5c4fd].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_7.png version [20c3d5c4fd].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_8.png version [c8a0d9df2a].

cannot compute difference between binary files

Added textures/sorcery_ui_manaring_flash_9.png version [c8a0d9df2a].

cannot compute difference between binary files

Modified tools.lua from [27b08793ec] to [4a5f13d256].

    22     22   
    23     23   		local inv = user:get_inventory()
    24     24   		local btl = ItemStack('vessels:glass_bottle')
    25     25   		if not inv:contains_item('main', btl) then
    26     26   			return nil
    27     27   		end
    28     28   
    29         -		local damage
    30     29   		local blood
    31     30   		local target
           31  +		local caps
    32     32   		if selfharm then
    33         -			damage = 3
    34     33   			blood = ItemStack('sorcery:blood 1')
    35     34   			target = user
           35  +			caps = {
           36  +				full_punch_interval = 1.0,
           37  +				damage_groups = { fleshy = 3 },
           38  +			} 
    36     39   		else
    37     40   			if not minetest.is_player(pointat) then
    38     41   				return nil
    39     42   			end
    40         -			damage = 5
    41         -			blood = ItemStack('sorcery:blood 3')
    42     43   			target = pointat
           44  +			caps = stack:get_tool_capabilities()
           45  +			blood = ItemStack {
           46  +				name = 'sorcery:blood';
           47  +				count = math.floor(caps.damage_groups.fleshy * 1.5);
           48  +			}
    43     49   		end
    44     50   		local pos = target:get_pos()
    45     51   		pos.y = pos.y + 1.5
    46     52   
    47     53   		local wear = 65535 / dagger_uses
    48     54   		stack:add_wear(wear)
    49     55   
    50     56   		inv:remove_item('main',btl)
    51     57   		inv:add_item('main',blood)
    52     58   
    53         -		target:punch(user, 1.0, {
    54         -			full_punch_interval = 1.0,
    55         -			damage_groups = { fleshy = damage },
    56         -		}, nil)
           59  +		target:punch(user, 1.0, caps, nil)
    57     60   		for i=0, 48 do
    58     61   			minetest.add_particle{
    59     62   				texture = 'sorcery_blood_' .. math.random(5) .. '.png',
    60     63   				size = 7,
    61     64   				expirationtime = 2 + math.random(),
    62     65   				glow = 1,
    63     66   				pos = pos,
................................................................................
    70     73   					x = 0,
    71     74   					y = -1,
    72     75   				 	z = 0
    73     76   				}
    74     77   			}
    75     78   		end
    76     79   
    77         -		if math.random(3) == 1 then
           80  +		if math.random(3 + sorcery.enchant.strength(stack,'sanctify') * 6) == 1 then
    78     81   			-- we've used up the consecration
    79     82   			local unholy = ItemStack("sorcery:dagger")
    80     83   			unholy:set_wear(stack:get_wear())
           84  +			local ench = sorcery.enchant.get(stack)
           85  +			if #ench.spells > 0 then
           86  +				sorcery.enchant.set(unholy,ench)
           87  +			end
    81     88   			return unholy
    82     89   		else
    83     90   			-- consecration is holding, return dagger as-is
    84     91   			return stack
    85     92   		end
    86     93   	end
    87     94   end