ADDED admin.lua Index: admin.lua ================================================================== --- admin.lua +++ admin.lua @@ -0,0 +1,29 @@ +minetest.register_chatcommand('enchants', { + description = 'Log information about the currently held object\'s enchantment'; + privs = { server = true }; + func = function(caller,params) + local tool = minetest.get_player_by_name(caller):get_wielded_item() + minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool))) + local binary = tool:get_meta():get_string('sorcery_enchantment_recs') + local dumpout = '' + for i=1,string.len(binary) do + dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') + end + print(dumpout) + end; +}) + +-- minetest.register_chatcommand('hover', { +-- description = 'Test hover effect'; +-- privs = { fly = true }; +-- func = function(caller,params) +-- local player = minetest.get_player_by_name(caller) +-- late.new_effect(player, { +-- duration = 5; +-- fall = 5; +-- impacts = { +-- gravity = -0.1; +-- }; +-- }) +-- end; +-- }) Index: altar.lua ================================================================== --- altar.lua +++ altar.lua @@ -1,8 +1,14 @@ local altar_item_offset = { x = 0, y = -0.3, z = 0 } + +local range = function(min, max) + local span = max - min + local val = math.random() * span + return val + min +end local get_altar_ent = function(pos) for _, obj in pairs(minetest.get_objects_inside_radius(pos,0.9)) do if not obj then goto nextloop end local ent = obj:get_luaentity() @@ -100,15 +106,10 @@ item = ItemStack(item) end if color == nil then color = sorcery.lib.color(god.color) end - local range = function(min, max) - local span = max - min - local val = math.random() * span - return val + min - end for i=0,32 do minetest.add_particle{ pos = { x = altar.x + range(-0.4,0.4); z = altar.z + range(-0.4,0.4); @@ -219,15 +220,28 @@ for s, cons in pairs(god.consecrate) do local cost, tx = cons[1], cons[2] if type(tx) == "table" then tx = tx[math.random(#tx)] end + -- preserve wear local gift = ItemStack(tx) local wear = stack:get_wear() if wear > 0 then gift:set_wear(wear) end + -- preserve meta + gift:get_meta():from_table(stack:get_meta():to_table()) + -- reflash enchantments to ensure label is accurate + local ench = sorcery.enchant.get(gift) + if #ench.spells > 0 then + -- add a bit of energy as a gift? + if math.random(math.ceil(god.stinginess * 0.5)) == 1 then + local max = 0.05 * god.generosity + ench.energy = ench.energy * range(0.7*max,max) + end + sorcery.enchant.set(gift,ench) + end if itemname == s then if divine_favor >= cost then bestow(gift) divine_favor = divine_favor - cost print(god.name..'has consecrated ' ..s.. ' into ' ..tx.. ', for the cost of ' ..cost.. ' points of divine favor') ADDED context.lua Index: context.lua ================================================================== --- context.lua +++ context.lua @@ -0,0 +1,21 @@ +sorcery.ctx = { + users = {}; + get = function(uo) + local name = uo:get_player_name() + if sorcery.ctx.users[name] == nil then + sorcery.ctx.users[name] = {} + end + return sorcery.ctx.users[name] + end; + stat = function(uo) + local name = uo:get_player_name() + return (sorcery.ctx.users[name] ~= nil) + end; +} + +minetest.register_on_leaveplayer(function(obj) + local name = obj:get_player_name() + if sorcery.ctx.users[name] then + sorcery.ctx.users[name] = nil + end +end) Index: cookbook.lua ================================================================== --- cookbook.lua +++ cookbook.lua @@ -82,11 +82,11 @@ return names[math.random(#names)] end end local find_builtin = function(out) local rec = {} local i = minetest.get_craft_recipe(out) - if #i.items == 0 then return nil end + if i == nil or i.items == nil or #i.items == 0 then return nil end local w = (i.width == 0) and 3 or i.width for j=1,#i.items do local row = math.floor((j-1) / w) local col = (j-1) % w if i.items[j] then @@ -113,19 +113,25 @@ end local function desc_builtin(i) local desc i, desc = group_eval(i) -- print('describing ',i,dump(minetest.registered_items[i])) - if not minetest.registered_items[i] then + local s = ItemStack(i) + if not minetest.registered_items[s:get_name()] then minetest.log('WARNING: unknown item in recipe ' .. i) return 'Unknown Item' end - if not desc then desc = minetest.registered_items[i].description end + if not desc then desc = minetest.registered_items[s:get_name()].description end if not desc then return 'Peculiar Item' end local eol = string.find(desc,'\n') - if not eol then return desc else return string.sub(desc,1,eol-1) end + if eol then desc = string.sub(desc,1,eol-1) end + + if s:get_count() > 1 then + desc = string.format("%s (%u)",desc,s:get_count()) + end + return desc end; local bookadjs = { -- sets are in reverse order! {'Celestial', 'Divine', 'Inspired', 'Heavenly'; 'Mystic', 'Diabolic', 'Luminous', 'Forsaken'}; @@ -137,10 +143,22 @@ 'Beneficent', 'Mysterious', 'Peculiar', 'Eerie'; 'Fulsome', 'Fearsome', 'Curious', 'Fascinating'; 'Notorious', 'Infamous'}; } +local cache = { + populate_grindables = function(cache) + if not cache.grindables then + cache.grindables = {} + for k,v in pairs(minetest.registered_items) do + if sorcery.itemclass.get(k, 'grindable') then + cache.grindables[#cache.grindables+1] = k + end + end + end + end; +} sorcery.cookbook.classes = { craft = { name = 'Crafting Guide'; node = 'xdecor:workbench'; booksuf = 'Manual'; @@ -160,11 +178,11 @@ cook = { name = 'Cooking Recipe'; node = 'default:furnace'; booksuf = 'Cookbook'; w = 1, h = 1; - chance = 5; + chance = 3; slots = {{-0.2,0}}; pick = pick_builtin('cooking'); find = find_builtin; props = props_builtin; apply_exclusions = true; @@ -172,11 +190,11 @@ infuse = { name = 'Infusion Recipe'; node = 'sorcery:infuser'; booksuf = 'Pharmacopeia'; w = 1, h = 2; - chance = 2; + chance = 4; slots = { {0,0}; {0,1}; }; pick = function(restrict) @@ -183,11 +201,10 @@ -- TODO make sure affinity restrictions match return sorcery.data.infusions[math.random(#sorcery.data.infusions)].output end; title = function(output) for _,i in pairs(sorcery.data.infusions) do - print(dump(i)) if i.output == output then if i._proto and i._proto.name then return i._proto.name else break end end @@ -200,12 +217,56 @@ return { i.infuse, i.into } end end end; props = function(out) - local i = sorcery.cookbook.classes.infuse.find(out) - if i.recipe then return i.info else return {} end + for _,i in pairs(sorcery.data.infusions) do + if i.output == out then + if i.recipe then return i.recipe else return {} end + end + end + end; + }; + grind = { + name = 'Milling Guide'; + node = 'sorcery:mill'; + booksuf = 'Manual'; + chance = 1; + w = 1, h = 2; + pick = function(restrict) + cache:populate_grindables() + local i = cache.grindables[math.random(#cache.grindables)] + local pd = sorcery.itemclass.get(i, 'grindable') + return pd.powder + end; + desc = desc_builtin; + props = props_builtin; + slots = { + {0,1}, + {0,0}; + }; + find = function(out) + cache:populate_grindables() + for _,v in pairs(cache.grindables) do + local g = sorcery.itemclass.get(v,'grindable') + if g.powder == out then + if g.grindcost then + v = v .. ' ' .. tostring(g.grindcost) + end + local mbh = sorcery.lib.tbl.keys(sorcery.data.metals) + table.sort(mbh, function(a,b) + return sorcery.data.metals[a].hardness < sorcery.data.metals[b].hardness + end) + for _,metal in pairs(mbh) do + local md = sorcery.data.metals[metal] + if ((not md.no_tools) or md.grindhead) and md.hardness >= g.hardness then + return {v, 'sorcery:mill_grindhead_' .. metal} + end + end + return {v,''} -- !! + end + end end; }; -- wand = { -- booksuf = 'Grimoire'; -- } @@ -212,11 +273,11 @@ enchant = { name = 'Enchantment Matrix'; node = 'sorcery:enchanter'; booksuf = 'Grimoire'; drawslots = false; - chance = 1; + chance = 6; w = 2, h = 2; pick = function(restrict) -- TODO make sure affinity restrictions match local names = {} for k,v in pairs(sorcery.data.enchants) do @@ -285,18 +346,20 @@ for k,v in pairs(recipe_kinds) do if math.random(v.chance) == 1 then kind = k break end end - -- local rks = sorcery.lib.tbl.keys(recipe_kinds) - -- kind = rks[math.random(#rks)] + if kind == nil then -- oh well, we tried + local rks = sorcery.lib.tbl.keys(recipe_kinds) + kind = rks[math.random(#rks)] + end end return recipe_kinds[kind].pick(restrict), kind end -local render_recipe = function(kind,ingredients,result) +local render_recipe = function(kind,ingredients,result,notes_right) local k = recipe_kinds[kind] local t = '' for i=1,#k.slots do local x, y = k.slots[i][1], k.slots[i][2] if ingredients[i] and ingredients[i] ~= '' then @@ -314,13 +377,21 @@ end end local img, ot local props = k.props(result) if props.note then + local nx, ny, nw, nh + if notes_right then + nx = 5 ny = 0 + nw = 3 nh = 3 + else + nx = 0 ny = 3 + nw = 4 nh = 1 + end t = t .. string.format([[ - textarea[0,3;4,1;;;%s] - ]], minetest.formspec_escape(props.note)) + textarea[%f,%f;%f,%f;;;%s] + ]], nx,ny,nw,nh, minetest.formspec_escape(props.note)) end if k.icon then img = k.icon(result) end if k.outdesc then ot = k.outdesc(result) else ot = desc_builtin(result) end -- image[%f,%f;1,1;gui_furnace_arrow_bg.png^[transformR270] return t .. string.format([[ @@ -334,14 +405,14 @@ img and 'image' or 'item_image', k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(img or result), k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(ot)) end; -local retrieve_recipe = function(kind,out) +local retrieve_recipe = function(kind,out,notes_right) local rec = recipe_kinds[kind] local ing = rec.find(out) - return render_recipe(kind,ing,out), rec.w, rec.h + return render_recipe(kind,ing,out,notes_right), rec.w, rec.h end sorcery.cookbook.setrecipe = function(stack,k,r,restrict) local meta = stack:get_meta() if not r then r,k = sorcery.cookbook.pickrecipe(k,restrict) end @@ -444,21 +515,19 @@ {2,7.7}; -- {0,1.3}, {4, 1.3}; -- {0,4.7}, {4, 4.7}; -- {0,8.1}, {4, 8.1}; } - print('book:',dump(book)) - print('pgofs',pgofs) for i=pgofs,(pgofs + constants.recipes_per_cookbook_page-1) do local maxw, maxh = 3, 2 if not book.pages[i+1] then break end local nr = 1+(i - pgofs) local x,y = coords[nr][1], coords[nr][2] local k = recipe_kinds[book.pages[i+1].kind] local ox,oy = maxw - k.w, maxh - k.h form = form .. string.format('container[%f,%f]%scontainer_end[]',(x+ox)-0.5,y, - retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name)) + retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name, true)) end minetest.show_formspec(user:get_player_name(), 'sorcery:cookbook', form) end Index: data/compat.lua ================================================================== --- data/compat.lua +++ data/compat.lua @@ -8,11 +8,11 @@ -- capabilities of an item. local grain = { hardness = 1; value = 1; powder = 'farming:flour'; - grindcost = 4; + grindcost = 3; } return { grindables = { ['farming:wheat'] = grain; ['farming:rye'] = grain; @@ -20,11 +20,11 @@ ['farming:barley'] = grain; ['farming:rice'] = { powder = 'farming:rice_flour'; hardness = 1; value = 1; - grindcost = 4; + grindcost = 3; } }; ley = { ['default:mese'] = { power = 0.25; @@ -43,6 +43,14 @@ ['default:diamond'] = { id = 'diamond', gem = true; value = 9, raw = true; }; }; + ore = { + ['default:stone_with_iron' ] = { id = 'steel', metal = true };-- :/ + ['default:stone_with_copper' ] = { id = 'copper', metal = true }; + ['default:stone_with_tin' ] = { id = 'tin', metal = true }; + ['default:stone_with_gold' ] = { id = 'gold', metal = true }; + ['default:stone_with_mese' ] = { id = 'mese', gem = true }; + ['default:stone_with_diamond'] = { id = 'diamond', gem = true }; + }; } Index: data/draughts.lua ================================================================== --- data/draughts.lua +++ data/draughts.lua @@ -5,16 +5,18 @@ color = {243,106,44}; style = 'sparkle'; desc = "A potion that amps up your body's natural\nhealing abilities, causing you to heal rapidly\neven if you're starving"; infusion = 'sorcery:blood'; basis = 'sorcery:potion_luminous'; - effect = function(self, user) + duration = function(self,meta) + return 10 + meta:get_int('duration')*2 + end; + effect = function(self, user, proto) local meta = self:get_meta() local force = 1 + meta:get_int('force') - local duration = 10 + meta:get_int('duration')*2 late.new_effect(user, { - duration = duration; + duration = proto:duration(meta); raise = 4; fall = 4; impacts = { damage = {0-force, 0.5}; }; }) @@ -27,15 +29,15 @@ desc = "Conserve your precious supply of oxygen when diving down into the ocean's depths"; infusion = 'sorcery:extract_kelp'; duration = function(self,meta) return 20 + meta:get_int('duration')*30 end; - effect = function(self,user) + effect = function(self,user,proto) local meta = self:get_meta() local force = 1 + 2 * (meta:get_int('force')) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); raise = 2; fall = 5; impacts = { breath = {1 * force, 5} }; }) @@ -44,11 +46,11 @@ heal = { name = 'Healing'; color = {243,44,58}; style = 'sparkle'; no_duration = true; - desc = 'This blood-red liquid glitters with an\nenchantment that rapidly knits torn flesh and broken\nbones'; + desc = 'This blood-red liquid glitters with an enchantment that rapidly knits torn flesh and broken bones'; infusion = 'sorcery:oil_sanguine'; basis = 'sorcery:potion_luminous'; effect = function(self, user) local meta = self:get_meta() user:set_hp(user:get_hp() + (2 * (2 + meta:get_int('force')))) @@ -64,16 +66,16 @@ basis = 'sorcery:potion_soft'; 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.'; duration = function(self,meta) return 30 + meta:get_int('duration')*30 end; - effect = function(self,user) + effect = function(self,user,proto) local meta = self:get_meta() local force = 1 + 1 * (meta:get_int('force')) local opacity = 1.0 - (1.0 * (force / 4)) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); raise = 10; fall = 15; impacts = { texture = { nil, opacity }; nametag = { nil, opacity }; }; @@ -88,17 +90,17 @@ infusion = 'sorcery:oil_dawn'; basis = 'sorcery:potion_soft'; duration = function(self,meta) return 50 + meta:get_int('duration')*70 end; - effect = function(self,user) + effect = function(self,user,proto) --TODO ensure it can only be drunk at night --TODO ensure it can't last more than one night local meta = self:get_meta() local force = 0.3 * (1+meta:get_int('force')) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); raise = 15; fall = 30; impacts = { daylight = force; }; }) @@ -105,21 +107,21 @@ end; }; antigravity = { name = 'Antigravity'; color = {240,59,255}; style = 'sparkle'; - desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial.'; + desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial'; infusion = 'sorcery:oil_stone'; basis = 'sorcery:potion_soft'; duration = function(self,meta) return 20 + meta:get_int('duration')*25 end; - effect = function(self,user) + effect = function(self,user,proto) local meta = self:get_meta() local force = 1 - 0.3 * (meta:get_int('force') + 1) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); raise = 2; fall = 15; impacts = { gravity = force; }; }) @@ -132,15 +134,15 @@ infusion = 'sorcery:grease_storm'; basis = 'sorcery:potion_soft'; duration = function(self,meta) return 10 + meta:get_int('duration')*15 end; - effect = function(self,user) + effect = function(self,user,proto) local meta = self:get_meta() local force = 2 + 0.7 * (meta:get_int('force')) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); raise = 5; fall = 5; impacts = { speed = force; }; }) @@ -150,11 +152,11 @@ name = 'Obsidian'; infusion = 'default:obsidian_shard'; color = {76,0,121}; style = 'sparkle'; 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'; infusion = 'default:obsidian_shard'; - basis = 'sorcery:potion_soft'; + basis = 'sorcery:potion_luminous'; no_force = true; duration = function(self,meta) return 5 + meta:get_int('duration')*7 end; }; @@ -184,12 +186,25 @@ basis = 'sorcery:potion_soft'; }; flight = { name = 'Flight'; color = {143,35,255}; style = 'sparkle'; - desc = 'Free yourself totally from the shackles of gravity'; + desc = 'Free yourself totally from the shackles of gravity and soar through the air however you should will'; basis = 'sorcery:potion_soft'; + infusion = 'sorcery:grease_lift'; + no_force = true; + duration = function(self,meta) + return 40 + meta:get_int('duration')*55 + end; + effect = function(self,user,proto) + late.new_effect(user, { + duration = proto:duration(self:get_meta()); + impacts = { + fly = 1; + }; + }) + end; }; leap = { name = 'Leap'; color = {164,252,55}; desc = 'Soar high into the air each time you jump (but may risk damage if used without a Feather Potion)'; @@ -196,18 +211,18 @@ infusion = 'sorcery:oil_wind'; basis = 'sorcery:potion_soft'; duration = function(self,meta) return 5 + meta:get_int('duration')*7 end; - effect = function(self,user) + effect = function(self,user,proto) local meta = self:get_meta() local force = 2 + (0.5 * meta:get_int('force')) late.new_effect(user, { - duration = self:get_definition()._proto:duration(meta); + duration = proto:duration(meta); fall = 3; impacts = { jump = force; }; }) end }; } Index: data/enchants.lua ================================================================== --- data/enchants.lua +++ data/enchants.lua @@ -35,17 +35,36 @@ }; drain = { groups = {'sword'}; cost = 4; }; -- health vampirism - glitter = { -- created prolonged light on digging - name = 'Glitter'; + glimmer = { -- created prolonged light on digging + name = 'Glimmer'; groups = digtools; affinity = 'cognic'; cost = 1; tone = {255,235,195}; desc = 'Leave a trail of light hanging in the air as you dig'; + recipe = { + {lens = 'convex', gem = 'sapphire', dmg = 2}; + {lens = 'concave', gem = 'ruby', dmg = 1}; + {lens = 'concave', gem = 'sapphire', dmg = 1}; + }; + on_dig = function(ctx) + local chance = 10 -- make dependent on power somehow? + if math.random(chance) == 1 then + local lightlevel = math.floor(math.min(minetest.LIGHT_MAX,4*ctx.power)) + -- spawn a light block + minetest.set_node(ctx.pos, { + name = 'sorcery:air_glimmer_' .. tostring(lightlevel); + }) + local lm = minetest.get_meta(ctx.pos) + lm:set_float('duration',45) + lm:set_float('timeleft',45) + lm:set_int('power',lightlevel) + end + end; }; harvest = { -- kills or digging ore replenish durability name = 'Harvest'; cost = 0; -- energy is only depleted when repair takes place tone = {255,84,187}; @@ -61,13 +80,11 @@ desc = 'some damage is repaired when used to mine ore or kill an attacker'; on_dig = function(ctx) local orepfx = "stone_with_" -- }:< -- local oredrop = ' lump' local barename = string.sub(ctx.node.name, string.find(ctx.node.name, ':') + 1) - if minetest.get_item_group(ctx.node.name, 'ore') ~= 0 or - string.sub(barename,1,string.len(orepfx)) == orepfx - then + if sorcery.itemclass.get(ctx.node.name,'ore') then ctx.tool:add_wear(-(sorcery.enchant.strength(ctx.tool,'harvest') * 2000)) ctx.cost = 3 end end; }; @@ -127,11 +144,11 @@ } end end end; }; - glitter = { -- increase odds of finding gem + glitter = { name = 'Glitter'; cost = 10; tone = {255,50,60}; desc = 'dramatically improve your chances of finding gems while mining veins'; groups = {'pick','pickaxe'}; @@ -185,12 +202,28 @@ local caps = table.copy(stack:get_definition().tool_capabilities) for g,v in pairs(caps.groupcaps) do local unit = 2 caps.groupcaps[g].maxlevel = caps[g].maxlevel + math.floor(unit*power) end + if caps.damage_groups and caps.damage_groups.fleshy then + caps.damage_groups.fleshy = caps.damage_groups.fleshy + power * 5; + end stack:get_meta():set_tool_capabilities(caps) return stack end; }; -- multiply = {}; -- add a chance of receiving multiple drops of ore/coal -- leech = {}; -- draw power from local leylines + -- shadowcloak = {}; -- make player briefly invisible after blows are struck, reappearing only momentarily after each blow + sanctify = { + desc = 'prolong the blessings of the heavens'; + groups = {'sorcery_sanctify'}; + affinity = 'entropic'; + tone = {255,255,255}; + cost = 7; + recipe = { + {lens = 'amplifier', gem = 'ruby', dmg = 13}; + {lens = 'amplifier', gem = 'ruby', dmg = 15}; + {lens = 'amplifier', gem = 'ruby', dmg = 18}; + }; + }; } Index: data/gems.lua ================================================================== --- data/gems.lua +++ data/gems.lua @@ -34,10 +34,11 @@ mese = { foreign = 'default:mese_crystal'; foreign_shard = 'default:mese_crystal_fragment'; tone = {255,253,94}; energysource = 5; + hardness = 6; maxenergy = 600; items = default_items('mese'); tools = true, armor = true; randomfind = false; slots = { Index: data/gods.lua ================================================================== --- data/gods.lua +++ data/gods.lua @@ -18,10 +18,14 @@ "default_gold_block.png", "default_copper_block.png", "default_tin_block.png" }; }; + bless = { + potions = {}; + tools = {}; + }; consecrate = { ["flowerpot:empty"] = {2, { "flowerpot:flowers_rose"; "flowerpot:flowers_tulip"; "flowerpot:flowers_viola"; @@ -28,13 +32,13 @@ "flowerpot:flowers_geranium"; "flowerpot:flowers_chrysanthemum_green"; "flowerpot:flowers_dandelion_white"; "flowerpot:flowers_dandelion_yellow"; }}; - ["sorcery:dagger"] = {8, "sorcery:dagger_consecrated"}; - ["sorcery:oil_mystic"] = {6, "sorcery:oil_purifying"}; - ["sorcery:potion_water"] = {2, "sorcery:holy_water"}; + ["sorcery:dagger"] = {17, "sorcery:dagger_consecrated"}; + ["sorcery:oil_mystic"] = {9, "sorcery:oil_purifying"}; + ["sorcery:potion_water"] = {4, "sorcery:holy_water"}; -- ["default:steel_ingot"] = {15, "sorcery:holy_token_harvest"}; }; sacrifice = { -- beattitudes ["farming:straw" ] = 1; @@ -87,31 +91,81 @@ ["default:cactus"] = -2; ["default:dirt"] = -5; ["moreblocks:tar"] = -9; ["default:bucket_lava"] = -12; ["sorcery:blood"] = -15; + ["bonemeal:bone"] = -20; ["default:bones"] = -35; }; gifts = { -- gift specs = {favor, chance} where chance is the likelihood of a god bestowing the gift ["default:blueberry_bush_sapling"] = {120,15}; ["default:blueberries"] = {60, 4}; ["farming:coffee_beans"] = {58, 9}; ["farming:seed_hemp"] = {55, 8}; + ["bonemeal:fertiliser"] = {53, 3}; ["farming:garlic_clove"] = {50, 7}; ["farming:seed_mint"] = {50, 7}; ["flowers:mushroom_red"] = {45, 2}; ["farming:grapes"] = {43, 6}; ["farming:seed_barley"] = {40, 6}; ["farming:rhubarb"] = {38, 8}; ["farming:beans"] = {35, 6}; ["farming:raspberries"] = {30, 5}; + ["bonemeal:mulch"] = {32, 3}; ["farming:corn"] = {27, 2}; ["farming:sugar"] = {24, 4}; ["farming:salt"] = {24, 3}; ["farming:onion"] = {20, 7}; ["farming:carrot"] = {20, 7}; ["default:apple"] = {18, 2}; ["farming:wheat"] = {14, 2}; + ["bonemeal:mulch"] = {7, 7}; + }; + }; + + blood = { + name = 'Faramesti Surax'; + bless = { + potions = { + Force = {50, 7}; + Longevity = {65, 3}; + }; + tools = { + rend = {80, 15}; + }; + }; + generosity = 4; + stinginess = 9; + idol = { + desc = "Blood Idol"; + width = 0.7; + height = 1.3; + tex = { + "default_obsidian.png"; + "default_gold_block.png"; + "default_bronze_block.png^[multiply:#C32F2F"; + "default_bronze_block.png"; + "default_tin_block.png"; + }; + }; + sacrifice = { + ["sorcery:blood"] = 3; + ["bonemeal:bone"] = 9; + ["default:bones"] = 17; + ["sorcery:oil_sanguine"] = 26; + + -- abominations + ["default:apple"] = -10; + ["farming:wheat"] = -20; + ["farming:bread"] = -30; + }; + gifts = { + ["tnt:gunpowder"] = {40, 2}; + ["bonemeal:bonemeal"] = {25, 4}; + ["sorcery:grease_war"] = {98, 6}; + }; + consecrate = { + ["sorcery:dagger"] = {4, "sorcery:dagger_consecrated"}; }; }; } Index: data/greases.lua ================================================================== --- data/greases.lua +++ data/greases.lua @@ -70,7 +70,16 @@ mix = { 'sorcery:powder_aluminum'; 'sorcery:powder_lithium'; 'sorcery:extract_pine'; }; + }; + lift = { + color = {219,73,210}; + style = 'sparkle'; + core = { 'sorcery:oil_wind', 'sorcery:oil_stone' }; + mix = { + 'sorcery:powder_levitanium'; + 'sorcery:extract_fern'; + }; }; } Index: data/metals.lua ================================================================== --- data/metals.lua +++ data/metals.lua @@ -19,11 +19,11 @@ return { tin = { ingot = 'default:tin_ingot'; block = 'default:tinblock'; tone = {172,172,172}; - no_tools = true; no_armor = true; + no_tools = true; no_armor = true; grindhead = true; hardness = 2; }; copper = { dye = 'orange'; ingot = 'default:copper_ingot'; Index: data/spells.lua ================================================================== --- data/spells.lua +++ data/spells.lua @@ -450,11 +450,11 @@ local tgt = minetest.get_node(ctx.target.under) if tgt.name == 'sorcery:enchanter' then local meta = minetest.get_meta(ctx.target.under) local inv = meta:get_inventory() if inv:get_stack('item',1):get_name() == 'default:paper' - and inv:get_stack('item',1):get_count() == 1 + -- and inv:get_stack('item',1):get_count() == 1 and not inv:is_empty('foci') then local ink1 = getcolor(inv:get_stack('foci',2)) local ink2 = getcolor(inv:get_stack('foci',3)) local restrict, kind, mod = {} do local ms = inv:get_stack('foci',1) @@ -524,11 +524,20 @@ if ctx.base.gem == 'diamond' then -- make recipe for thing in slot 1 else sorcery.cookbook.setrecipe(rec,kind,nil,restrict) end - inv:set_stack('item',1,rec) + local old = inv:get_stack('item',1) + -- TODO: detect hopper underneath and place + -- recipe into it instead of item slot + if old:get_count() == 1 then + inv:set_stack('item',1,rec) + else + old:take_item(1) + inv:set_stack('item',1,old) + minetest.add_item(ctx.target.above,rec) + end for i=1,inv:get_size('foci') do local f = inv:get_stack('foci',i) f:take_item(1) inv:set_stack('foci',i,f) end Index: disassembly.lua ================================================================== --- disassembly.lua +++ disassembly.lua @@ -22,17 +22,26 @@ i:set_stack('output',1,rec) else i:set_stack('output',1,ItemStack()) end end +local dsbox = { + type = 'fixed'; + fixed = { + -0.5, -0.5, -0.5; + 0.5, 0.0, 0.5; + }; +} minetest.register_node('sorcery:disassembler', { description = 'Disassembly Kit'; drawtype = 'mesh'; mesh = 'sorcery-disassembler.obj'; paramtype = 'light', sunlight_propagates = true; paramtype2 = 'facedir'; groups = { cracky = 2, sorcery_tech = 1 }; + selection_box = dsbox; + collision_box = dsbox; tiles = { 'default_copper_block.png'; 'default_wood.png'; 'default_steel_block.png'; 'default_stone.png'; Index: enchanter.lua ================================================================== --- enchanter.lua +++ enchanter.lua @@ -318,14 +318,87 @@ return true end end }); end + +local function enchpwrhud(user, flash, fac) + -- this function displays or changes the HUD element + -- that shows how much energy is left in an enchanted + -- item. it is called by the dig handler and sequences + -- callbacks to remove the HUD from the screen once + -- its timeleft property has been used up. timeleft is + -- reset if the 'flash' argument, which indicates + -- whether the enchantment has just been used, is set + -- to true; otherwise, it is left alone. + -- + -- this whole thing is really unfriendly and without + -- FP tricks it would have been intolerably painful + -- to implement. minetest needs better primitives. + local frame = math.ceil(16 * (1-math.min(1,fac))) + if tostring(frame) == '-0' then frame = '0' -- ?????? + else frame = tostring(frame) end + local tex = 'sorcery_ui_manaring_' .. (flash and 'flash_' or '') .. frame .. '.png'; + local c = sorcery.ctx.get(user) + if not c.hud_ench then + local hid = user:hud_add { + name = 'sorcery:manaring'; + hud_elem_type = 'image'; + text = tex; + position = { x = 0.5, y = 0.5 }; + offset = { x = 0, y = 0 }; + scale = { x = 2.0, y = 2.0 }; + z_index = 0; + } + c.hud_ench = { + id = hid; + timeleft = 2.0; + fn = false; + fac = fac; + } + c = c.hud_ench + else + c = c.hud_ench + c.fac = fac + user:hud_change(c.id,'text',tex) + if flash then c.timeleft = 2.0 end + end + if c.fn == false then + c.fn = true + local delta = 0.10 + -- tried making Δ conditional on 'flash' but it + -- turns out that causes the flash not to always + -- disappear in a timely manner. solving this + -- efficiently would be a major, complex headache + -- so i'm just compromising and setting delta to a + -- constant :/ + minetest.after(delta, function() + if not sorcery.ctx.stat(user) then return end + local u = sorcery.ctx.get(user) + local h = u.hud_ench + if not h then return end + print('timeleft,delta',h.timeleft,delta) + if h.timeleft - delta <= 0 then + user:hud_remove(h.id) + u.hud_ench = nil + else + h.timeleft = h.timeleft - delta + h.fn = false + enchpwrhud(user, false, h.fac) + end + end) + end +end minetest.register_on_dignode(function(pos, node, puncher) if puncher == nil then return end -- i don't know why -- this is necessary but you get rare crashes without it + + -- perform leyline checks and call notify if necessary + if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then + sorcery.lib.node.notifyneighbors(pos) + end -- we're goint to do something VERY evil here and -- replace the air with a "glow-air" that removes -- itself after a short period of time, to create -- a flash of light when an enchanted tool's used @@ -365,13 +438,15 @@ color = sorcery.lib.color(data.tone):brighten(1.1); count = strength * 7; } ::skip::end end if totalcost > 0 then - local conservation = sorcery.enchant.strength(tool,'conserve') * 0.5 - totalcost = totalcost - (totalcost * conservation) - ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0))) + local conservation = math.floor(sorcery.enchant.strength(tool,'conserve') * 6) + -- totalcost = totalcost - (totalcost * conservation) + if conservation == 0 or math.random(conservation) == 1 then + ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0))) + end end if #sparks == 0 then return end if math.random(5) == 1 then minetest.set_node(pos, {name='sorcery:air_flash_' .. tostring(math.random(10))}) end @@ -420,25 +495,8 @@ else sorcery.enchant.set(tool,ench,true) end puncher:set_wielded_item(tool) - -- perform leyline checks and call notify if necessary - if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then - sorcery.lib.node.notifyneighbors(pos) - end + local epct = ench.energy / material.data.maxenergy + enchpwrhud(puncher, true, epct) end) - -minetest.register_chatcommand('enchants', { - description = 'Log information about the currently held object\'s enchantment'; - privs = { server = true }; - func = function(caller,params) - local tool = minetest.get_player_by_name(caller):get_wielded_item() - minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool))) - local binary = tool:get_meta():get_string('sorcery_enchantment_recs') - local dumpout = '' - for i=1,string.len(binary) do - dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') - end - print(dumpout) - end; -}) Index: gems.lua ================================================================== --- gems.lua +++ gems.lua @@ -3,10 +3,16 @@ sorcery.register_gem = function(name,gem) local itemname = gem.foreign or 'sorcery:gem_' .. name local shardname = gem.foreign_shard or 'sorcery:gem_' .. name .. '_shard' local amuletname = gem.foreign_amulet or 'sorcery:gem_' .. name .. '_amulet' + + sorcery.data.gems[name].parts = { + item = itemname; + shard = shardname; + amulet = amuletname; + } local tools, armors = sorcery.matreg.tools, sorcery.matreg.armors if gem.tools then for t,c in pairs(tools) do sorcery.matreg.lookup[(gem.items and gem.items[t]) or ('sorcery:' .. t .. '_' .. name)] = { gem = true; ADDED gravitator.lua Index: gravitator.lua ================================================================== --- gravitator.lua +++ gravitator.lua @@ -0,0 +1,130 @@ +local modes = { + off = {next = 'stop'; power = 0}; + stop = {next = 'slow'; power = 0.4; factor = 0; color = {255,126,113}}; + slow = {next = 'lift'; power = 0.2; factor = 0.5; color = {255,255,100}}; + lift = {next = 'crush'; power = 0.6; factor = -0.25; color = {113,255,126}}; + crush = {next = 'off'; power = 1; factor = 2; color = {113,126,255}}; +} +for kind, p in pairs(modes) do + local radius = 4 + local enoughpower = function(pos,mode) + if mode and modes[mode] == nil then return false end + local n = modes[mode or kind] + local l = sorcery.ley.netcaps(pos,1,nil,n.power) + local maxfree = l.self.powerdraw + l.freepower + return maxfree >= n.power + end + local setmeta = function(pos,nextmode) + local label = 'Gravitator' + if nextmode ~= 'off' then + label = label .. ' (' .. nextmode .. ')' + minetest.get_node_timer(pos):start(4) + end + local meta = minetest.get_meta(pos) + meta:set_string('infotext',label) + end + minetest.register_node('sorcery:gravitator_' .. kind, { + description = 'Gravitator'; + drop = 'sorcery:gravitator_off'; + paramtype2 = 'facedir'; + groups = { + cracky = 2; + sorcery_magitech = 1; + sorcery_ley_device = 1; + + effect_trigger = (kind == 'off') and 0 or 1; + }; + tiles = { + 'sorcery_gravitator_side.png'; + 'sorcery_gravitator_side.png'; + 'sorcery_gravitator_side.png'; + 'sorcery_gravitator_side.png'; + 'sorcery_gravitator_side.png'; + 'sorcery_gravitator_panel_'..kind..'.png'; + }; + effect_near = p.factor and { + impacts = { + gravity = p.factor; + }; + distance = radius; + spread = 1.5; + } or nil; + _sorcery = { + ley = { + mode = 'consume', affinity = {'counterpraxic'}; + power = p.power; + }; + on_leychange = function(pos) + local meta = minetest.get_meta(pos) + if kind ~= 'off' then + if not enoughpower(pos) then + local old = minetest.get_node(pos) + old.name = 'sorcery:gravitator_off' + minetest.swap_node(pos,old) + meta:set_string('lastmode',kind) + setmeta(pos,'off') + end + elseif meta:contains('lastmode') then + local nm = meta:get_string('lastmode') + if enoughpower(pos,nm) then + local old = minetest.get_node(pos) + old.name = 'sorcery:gravitator_' .. nm + minetest.set_node(pos,old) + setmeta(pos,nm) + end + end + end; + }; + on_construct = function(pos) + setmeta(pos,'off') + end; + on_timer = function(pos) + if p.color == nil then return false end + + local vee = {x=0,y=-1,z=0}; + minetest.add_particlespawner { + amount = 128; + time = 4; + minpos = vector.subtract(pos,radius); + maxpos = vector.add(pos,radius); + minvel = vector.multiply(vee, p.factor*0.5); + maxvel = vector.multiply(vee, p.factor); + minexptime = 1; + maxexptime = 1.3; + minsize = 0.2, maxsize = 1.4; + glow = 12; + texture = sorcery.lib.image('sorcery_spark.png'):multiply(sorcery.lib.color(p.color)):render(); + animation = { + type = 'vertical_frames'; + aspect_w = 16, aspect_h = 16; + length = 1.4; + } + } + return true; + end; + on_rightclick = function(pos) + minetest.sound_play('doors_steel_door_open', { + gain = 0.6; + pos = pos; + }, true) + + local nextmode = p.next + while true do + local nm = modes[nextmode] + if nm.power == 0 then break end + if nm.power <= p.power then break end + if enoughpower(pos,nextmode) then break end + nextmode = nm.next + end + + local old = minetest.get_node(pos) + minetest.set_node(pos, { + name = 'sorcery:gravitator_' .. nextmode; + param1 = old.param1; + param2 = old.param2; + }) + + setmeta(pos,nextmode) + end; + }) +end Index: harvester.lua ================================================================== --- harvester.lua +++ harvester.lua @@ -35,10 +35,15 @@ on_timer = function(pos,elapse) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() if inv:is_empty('charge') then return false end + + local put_in_hopper = sorcery.lib.node.discharger(pos) + local discharge = function(item,idx) + inv:set_stack('charge',put_in_hopper(item)) + end local ley = sorcery.ley.estimate(pos) local charged = false for i=1,inv:get_size('charge') do local curve = function(x) return ((x*10)^2)/10 end @@ -52,19 +57,20 @@ if spell == '' then goto skip end local aff = sorcery.data.spells[spell].leytype if aff == ley.aff[1] or aff == ley.aff[2] then repair_per_tick = repair_per_tick * 2 end item:set_wear(math.max(0,item:get_wear() - repair_per_tick * (elapse / 60))) + if item:get_wear() == 0 then item = put_in_hopper(item) end else local e = sorcery.enchant.get(item) if #e.spells == 0 then goto skip end -- item is not magical local mat = sorcery.enchant.getsubj(item) if e.energy < mat.data.maxenergy then local energy_per_tick = (100 * curve(ley.force)) + ((mat.data.energysource or 0)*2) e.energy = math.min(e.energy + energy_per_tick, mat.data.maxenergy) sorcery.enchant.set(item,e,true) - else goto skip end -- already fully charged + else discharge(item,i) goto skip end -- already fully charged end -- print('repair cycle! repairing item'..item:get_name()..' by',repair_per_tick * (elapse / 60)) inv:set_stack('charge',i,item) charged = true ::skip::end Index: hotmetallurgy.lua ================================================================== --- hotmetallurgy.lua +++ hotmetallurgy.lua @@ -160,11 +160,11 @@ local update_smelter = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local proto = minetest.registered_nodes[minetest.get_node(pos).name]._proto local recipe, count, factor, meltpoint = find_recipe(inv) - if recipe and proto.temp >= meltpoint then + if recipe --[[and proto.temp >= meltpoint]] then minetest.get_node_timer(pos):start(1) else meta:set_float('burntime',0) end end @@ -300,10 +300,11 @@ _proto = kind; description = desc; drawtype = "mesh"; mesh = 'sorcery-kiln-' .. state .. '.obj'; drop = id; + groups = { cracky = 2; sorcery_device_kiln = (state == 'closed') and 1 or 2; } sunlight_propagates = true; paramtype1 = 'light'; paramtype2 = 'facedir'; selection_box = box[state]; collision_box = box[state]; @@ -377,11 +378,14 @@ for _, active in pairs {false, true} do minetest.register_node((active and id .. '_active') or id, { _proto = kind; description = desc; drop = id; - groups = { cracky = 2; }; + groups = { + cracky = 2; + sorcery_device_smelter = active and 1 or 2; + }; paramtype2 = 'facedir'; light_source = (active and 9) or 0; on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() @@ -416,14 +420,14 @@ } end for _, t in pairs { {1, nil, 'clay'}; - {2, 'hot','aluminum'}; - {3, 'volcanic','platinum'}; - {4, 'stellar','duridium'}; - {5, 'nova','impervium'}; + -- {2, 'hot','aluminum'}; + -- {3, 'volcanic','platinum'}; + -- {4, 'stellar','duridium'}; + -- {5, 'nova','impervium'}; } do register_kiln { temp = t[1], temp_name = t[2]; material = t[3]; size = 3, outsize = 4, fuelsize = 1; -- future-proofing } Index: infuser.lua ================================================================== --- infuser.lua +++ infuser.lua @@ -145,10 +145,12 @@ -- end -- for i=0,4 do spawn('sorcery_spark.png^[multiply:#FFB1F6', 0.5, 64 * 4) -- end + local discharge = sorcery.lib.node.discharger(pos) + if newtime >= infusion_time then -- finished local ingredient = infusion[1]:get_name() for i = 1,#potions do if potions[i]:is_empty() then goto skip end @@ -161,16 +163,16 @@ title = potion._proto.name .. ' Draught'; desc = potion._proto.desc; color = sorcery.lib.color(potion._proto.color):readable(); props = effects_table(newstack); }); - inv:set_stack('potions',i,newstack) + inv:set_stack('potions',i,discharge(newstack)) else for _,v in pairs(sorcery.data.infusions) do if v.infuse == ingredient and v.into == base then -- transform the base into the infusion - inv:set_stack('potions',i,ItemStack(v.output)) + inv:set_stack('potions',i,discharge(ItemStack(v.output))) end end end ::skip:: end Index: init.lua ================================================================== --- init.lua +++ init.lua @@ -51,13 +51,17 @@ 'philters', 'extracts'; 'register'; } for _,u in pairs { - 'attunement'; 'metal', 'gems'; 'itemclass'; - 'leylines'; 'potions', 'infuser'; 'altar'; + 'attunement'; 'context'; 'itemclass'; 'potions'; + 'metal', 'gems'; 'leylines'; 'infuser'; 'altar'; 'wands'; 'tools', 'crafttools'; 'enchanter'; 'harvester'; 'metallurgy-hot', 'metallurgy-cold'; 'entities'; 'recipes'; 'coins'; 'interop'; 'tnodes'; 'forcefield'; 'farcaster'; 'portal'; 'cookbook', 'writing'; 'disassembly'; 'displacer'; + 'gravitator'; + + 'admin'; } do sorcery.load(u) end + Index: interop.lua ================================================================== --- interop.lua +++ interop.lua @@ -9,5 +9,41 @@ end end return nextfn(pos,name) end end + +if minetest.get_modpath('hopper') then + hopper:add_container { + {'side', 'group:sorcery_device_generator','fuel'}; + {'bottom','group:sorcery_device_generator','fuel'}; + + {'side', 'sorcery:coin_press','ingot'}; + {'bottom','sorcery:coin_press','gem'}; + -- output handled on our side; requires automation + + {'bottom','sorcery:infuser','infusion'}; + {'side', 'sorcery:infuser','potions'}; + -- output handled on our side + + {'top', 'sorcery:displacer','cache'}; + {'side', 'sorcery:displacer','cache'}; + {'bottom','sorcery:displacer','cache'}; + + {'side','sorcery:displacer_transmit_gem','code'}; + {'side','sorcery:displacer_receive_gem', 'code'}; + + {'side','group:sorcery_device_kiln','fuel'}; + {'top', 'group:sorcery_device_kiln','output'}; + + {'top', 'group:sorcery_device_smelter','output'}; + {'bottom','group:sorcery_device_smelter','input'}; + {'side', 'group:sorcery_device_smelter','fuel'}; + + {'top', 'sorcery:mill', 'output'}; + {'side', 'sorcery:mill', 'grinder'}; + {'bottom', 'sorcery:mill', 'input'}; + + {'bottom', 'sorcery:harvester', 'charge'}; + -- output handled on our side + } +end Index: itemclass.lua ================================================================== --- itemclass.lua +++ itemclass.lua @@ -39,10 +39,21 @@ end; }; grindable = { compat = 'grindables'; subclass = {'metallic'}; + conform = { + metallic = function(m) + if m and m.data and m.data.parts and m.data.parts.powder then + return { + hardness = m.data.hardness; + value = m.value or 1, grindcost = 1; + powder = m.data.parts.powder; + } + end + end; + }; predicate = function(name) local def = minetest.registered_items[name]._sorcery if not def then return nil end def = def.material if def and def.grindvalue then @@ -64,10 +75,29 @@ -- are made out of local mat = sorcery.matreg.lookup[name] if mat and mat.metal then return mat end end; }; + ore = { + groups = { 'ore' }; + compat = 'ore'; + predicate = function(name) + -- maybe revise this at some point once sorcery is extricated + -- from instant_ores and we have more control over the items + -- we generate + local orepfx = "stone_with_" -- }:< + local barename = string.sub(name, string.find(name, ':') + 1) + if string.sub(barename,1,string.len(orepfx)) == orepfx then + local iname = string.sub(barename,string.len(orepfx) + 1) + if sorcery.data.metals[iname] then + return { metal = true, id = iname } + elseif sorcery.data.gems[iname] then + return { gem = true, id = iname } + end + end + end; + }; }; get = function(name,class) local c = sorcery.itemclass.classes[class] local o if not c then return false end @@ -83,11 +113,15 @@ end if c.subclass then for _,s in pairs(c.subclass) do o = sorcery.itemclass.get(name,s) - if o then return o end + if o then + if c.conform and c.conform[s] then + return c.conform[s](o) + else return o end + end end end if c.groups then for _,g in pairs(c.groups) do Index: leylines.lua ================================================================== --- leylines.lua +++ leylines.lua @@ -62,11 +62,11 @@ groups = { sorcery_ley_device = 1; cracky = 3; }; _sorcery = { - ley = { mode = 'signal'; power = 10 }; + ley = { mode = 'signal'; power = 100 }; }; }) minetest.register_craft { output = 'sorcery:conduit 4'; recipe = { @@ -162,11 +162,11 @@ cracky = 2; choppy = 1; sorcery_ley_device = 1; }; _sorcery = { - ley = { mode = 'signal'; power = 5; } + ley = { mode = 'signal'; power = 50; } }; tiles = tiles; }) minetest.register_craft { output = id .. ' 4'; @@ -267,11 +267,11 @@ end end end sorcery.ley.notify = function(pos) local n = sorcery.ley.mapnet(pos) - sorcery.ley.notifymap(n.map) + if n then sorcery.ley.notifymap(n.map) end end sorcery.ley.field_to_current = function(strength,time) local ley_factor = 0.25 -- a ley harvester will produce this much current with @@ -313,15 +313,10 @@ }; on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string('infotext','Condenser') end; - on_rightclick = function(pos) - local c = sorcery.ley.netcaps(pos,1) - c.net.devices.signal = nil - print('LEYNET', dump(c)) - end; _sorcery = { ley = { mode = 'produce'; power = function(pos,time) return sorcery.ley.field_to_current(sorcery.ley.estimate(pos).force, time); end; @@ -701,11 +696,11 @@ for _,active in pairs{true,false} do local id = 'sorcery:generator' .. (active and '_active' or '') minetest.register_node(id, { description = 'Generator'; paramtype2 = 'facedir'; - groups = { cracky = 2; sorcery_ley_device = 1; }; + groups = { cracky = 2; sorcery_ley_device = 1; sorcery_device_generator = active and 1 or 2}; drop = 'sorcery:generator'; tiles = { 'sorcery_ley_generator_top.png'; 'sorcery_ley_generator_bottom.png'; 'sorcery_ley_generator_side.png'; Index: lib/node.lua ================================================================== --- lib/node.lua +++ lib/node.lua @@ -71,10 +71,14 @@ return false end local i,stack = 1,{startpoint} repeat local pos = stack[i] local n = minetest.get_node(pos).name + if n == 'ignore' then + minetest.load_area(pos) + n = minetest.get_node(pos).name + end if sorcery.lib.tbl.has(names, n) then -- match found -- record the find nodes[pos] = n if positions[n] then positions[n][#positions[n]] = pos else positions[n] = {pos} end @@ -94,12 +98,28 @@ end; forneighbor = function(pos, n, fn) for _,p in pairs(n) do local sum = vector.add(pos, p) - fn(sum, minetest.get_node(sum)) + local n = minetest.get_node(sum) + if n.name == 'ignore' then + minetest.load_area(sum) + n = minetest.get_node(sum) + end + fn(sum, n) + end + end; + + force = function(pos,preload_for) + local n = minetest.get_node_or_nil(pos) + if n then return n end + if preload_for then + sorcery.lib.node.preload(pos,preload_for) + else + minetest.load_area(pos) end + return minetest.get_node(pos) end; -- when items have already been removed; notify cannot be relied on -- to reach the entire network; this function accounts for the gap notifyneighbors = function(pos) @@ -120,6 +140,22 @@ preload = function(pos, user) minetest.load_area(pos) user:send_mapblock(sorcery.lib.node.blockpos(pos)) end; + + discharger = function(pos) + local below = sorcery.lib.node.force(vector.subtract(pos,{x=0,y=1,z=0})) + if below.name == 'hopper:hopper' + or below.name == 'hopper:hopper_side' then + local hopper = minetest.get_meta(below):get_inventory() + return function(i) + if hopper:room_for_item('main',i) then + return hopper:add_item('main',i), true + end + return i, false + end + else + return function(i) return i, false end + end + end; } Index: metal.lua ================================================================== --- metal.lua +++ metal.lua @@ -133,10 +133,11 @@ artificial = metal.artificial; cooktime = metal.cooktime; hardness = (metal.hardness/8) * 3; -- scaled wrt diamond level = math.ceil(((metal.hardness/8) * 3)) + 1; ingot_image = (metal.image and metal.image.ingot) or nil; + ore_image = 'default_stone.png^sorcery_' .. name .. '_ore.png'; lump_image = (metal.image and metal.image.lump) or nil; armor_weight = metal.armor_weight; armor_protection = metal.armor_protection; } end @@ -182,14 +183,23 @@ if metal.sinter then local powders = {} for _,m in pairs(metal.sinter) do powders[#powders+1] = 'sorcery:powder_' .. m end - if metal.sinter_catalyst then for _,m in pairs(metal.sinter_catalyst) - do powders[#powders+1] = m end end + local repl = {} + if metal.sinter_catalyst then + for _,m in pairs(metal.sinter_catalyst) do + powders[#powders+1] = m + if sorcery.data.infusion_leftovers[m] then + repl[#repl+1] = {m, sorcery.data.infusion_leftovers[m]} + end + end + end + minetest.register_craft { type = 'shapeless'; output = powder .. ' ' .. tostring(#powders); recipe = powders; + replacements = repl; }; end end Index: metallurgy-cold.lua ================================================================== --- metallurgy-cold.lua +++ metallurgy-cold.lua @@ -21,11 +21,11 @@ grind_factor = 10; -- adjusts the amount of time it takes to grind -- metal into powder - grind_wear = 2000; + grind_wear = 1000; -- amount of damage done to a grind head grinding -- metal of equal hardness. increased or decreased -- depending on differential grind_torque_factor = 0.1; @@ -234,11 +234,17 @@ grinders_on = {false,false} for i=1,inv:get_size('grinder') do local gh = inv:get_stack('grinder',i) if not gh:is_empty() then grinders_present = true - local hh = sorcery.data.metals[gh:get_definition()._proto.metal].hardness + local gproto = gh:get_definition()._proto + local hh = 0 + if gproto.metal then + hh = sorcery.data.metals[gproto.metal].hardness + elseif gproto.gem then + hh = sorcery.data.gems[gproto.gem].hardness + end local dif = mp.hardness - hh local wear if dif == 0 then wear = constants.grind_wear elseif dif < 0 then @@ -332,10 +338,11 @@ {'basic_materials:gear_steel', 'basic_materials:steel_bar', 'basic_materials:gear_steel'}; {'default:tin_ingot','default:steelblock','default:tin_ingot'}; }; } for name,metal in pairs(sorcery.data.metals) do + if metal.no_tools and not metal.grindhead then goto skip end local i,f = metal.parts.ingot, metal.parts.fragment local id = 'sorcery:mill_grindhead_' .. name minetest.register_tool(id,{ description = sorcery.lib.str.capitalize(name) .. ' Grinding Head'; inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(metal.tone)):render(); @@ -350,6 +357,28 @@ {f,i,f}; {i,'',i}; {f,i,f}; }; } -end +::skip::end + +for name,gem in pairs(sorcery.data.gems) do + if not gem.tools and not gem.grindhead then goto skip end + local i,f = gem.parts.item, gem.parts.shard + local id = 'sorcery:mill_grindhead_' .. name + minetest.register_tool(id,{ + description = sorcery.lib.str.capitalize(name) .. ' Grinding Head'; + inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(gem.tone)):render(); + groups = { sorcery_mill_grindhead = 1, sorcery_metallurgy = 1 }; + _proto = { + gem = name; + }; + }); + minetest.register_craft { + output = id; + recipe = { + {f,i,f}; + {i,'',i}; + {f,i,f}; + }; + } +::skip::end ADDED models/sorcery-idol-blood.obj Index: models/sorcery-idol-blood.obj ================================================================== --- models/sorcery-idol-blood.obj +++ models/sorcery-idol-blood.obj @@ -0,0 +1,2088 @@ +# Blender v2.82 (sub 7) OBJ File: 'idol.blend' +# www.blender.org +mtllib sorcery-idol-blood.mtl +o obsidian_Cube.002 +v -0.041172 0.418064 -0.024969 +v 0.033948 0.418064 -0.024969 +v 0.033948 0.418064 0.026311 +v -0.041172 0.418064 0.026311 +v -0.041172 0.512206 -0.024969 +v 0.033948 0.512206 -0.024969 +v 0.033948 0.512206 0.026311 +v -0.041172 0.512206 0.026311 +v -0.076580 0.512206 -0.049140 +v 0.069355 0.512206 -0.049141 +v 0.069355 0.512206 0.050482 +v -0.076580 0.512206 0.050482 +v -0.076580 0.535538 -0.049140 +v 0.069355 0.535538 -0.049141 +v 0.069355 0.535538 0.050482 +v -0.076580 0.535538 0.050482 +v -0.032642 0.535538 -0.019147 +v 0.025418 0.535538 -0.019147 +v 0.025418 0.535538 0.020488 +v -0.032642 0.535538 0.020488 +v -0.032642 0.696839 -0.019147 +v 0.025418 0.696839 -0.019147 +v 0.025418 0.696839 0.020488 +v -0.032642 0.696839 0.020488 +v -0.241735 0.512206 0.050482 +v -0.241735 0.512206 -0.049140 +v 0.234511 0.512206 -0.049141 +v 0.234511 0.512206 0.050482 +v -0.241735 0.535538 0.050482 +v -0.241735 0.535538 -0.049140 +v 0.234511 0.535538 -0.049141 +v 0.234511 0.535538 0.050482 +v 0.096881 0.512206 0.050482 +v 0.124407 0.512206 0.050482 +v 0.151933 0.512206 0.050482 +v 0.179459 0.512206 0.050482 +v 0.206985 0.512206 0.050482 +v 0.206985 0.535538 0.050482 +v 0.179459 0.535538 0.050482 +v 0.151933 0.535538 0.050482 +v 0.124407 0.535538 0.050482 +v 0.096881 0.535538 0.050482 +v 0.206985 0.535538 -0.049141 +v 0.179459 0.535538 -0.049141 +v 0.151933 0.535538 -0.049141 +v 0.124407 0.535538 -0.049141 +v 0.096881 0.535538 -0.049141 +v 0.206985 0.512206 -0.049141 +v 0.179459 0.512206 -0.049141 +v 0.151933 0.512206 -0.049141 +v 0.124407 0.512206 -0.049141 +v 0.096881 0.512206 -0.049141 +v -0.104106 0.535538 -0.049140 +v -0.131631 0.535538 -0.049140 +v -0.159157 0.535538 -0.049140 +v -0.186683 0.535538 -0.049140 +v -0.214209 0.535538 -0.049140 +v -0.214209 0.535538 0.050482 +v -0.186683 0.535538 0.050482 +v -0.159157 0.535538 0.050482 +v -0.131631 0.535538 0.050482 +v -0.104106 0.535538 0.050482 +v -0.104106 0.512206 -0.049140 +v -0.131631 0.512206 -0.049140 +v -0.159157 0.512206 -0.049140 +v -0.186683 0.512206 -0.049140 +v -0.214209 0.512206 -0.049140 +v -0.104106 0.512206 0.050482 +v -0.131631 0.512206 0.050482 +v -0.159157 0.512206 0.050482 +v -0.186683 0.512206 0.050482 +v -0.214209 0.512206 0.050482 +v -0.084837 0.512206 0.031238 +v -0.084837 0.512206 -0.029897 +v 0.077613 0.512206 -0.029897 +v 0.077613 0.512206 0.031238 +v 0.088623 0.512206 -0.029897 +v 0.088623 0.512206 0.031238 +v 0.128536 0.512206 0.031238 +v 0.147804 0.512206 0.031238 +v 0.179459 0.512206 0.031238 +v 0.206985 0.512206 0.031238 +v 0.206985 0.512206 -0.029897 +v 0.179459 0.512206 -0.029897 +v 0.147804 0.512206 -0.029897 +v 0.128536 0.512206 -0.029897 +v -0.095848 0.512206 -0.029897 +v -0.135760 0.512206 -0.029897 +v -0.155028 0.512206 -0.029897 +v -0.186683 0.512206 -0.029897 +v -0.214209 0.512206 -0.029897 +v -0.095848 0.512206 0.031238 +v -0.135760 0.512206 0.031238 +v -0.155028 0.512206 0.031238 +v -0.186683 0.512206 0.031238 +v -0.214209 0.512206 0.031238 +v -0.084837 0.447812 0.031238 +v -0.084837 0.447812 -0.029897 +v 0.077613 0.447812 -0.029897 +v 0.077613 0.447812 0.031238 +v 0.088623 0.447812 -0.029897 +v 0.088623 0.447812 0.031238 +v 0.128536 0.383719 0.031238 +v 0.147804 0.383719 0.031238 +v 0.179459 0.290128 0.031238 +v 0.206985 0.290128 0.031238 +v 0.206985 0.290128 -0.029897 +v 0.179459 0.290128 -0.029897 +v 0.147804 0.383719 -0.029897 +v 0.128536 0.383719 -0.029897 +v -0.095848 0.447812 -0.029897 +v -0.135760 0.383719 -0.029897 +v -0.155028 0.383719 -0.029897 +v -0.186683 0.290128 -0.029897 +v -0.214209 0.290128 -0.029897 +v -0.095848 0.447812 0.031238 +v -0.135760 0.383719 0.031238 +v -0.155028 0.383719 0.031238 +v -0.186683 0.290128 0.031238 +v -0.214209 0.290128 0.031238 +vt 0.553838 0.327048 +vt 0.446162 0.327048 +vt 0.446162 0.524722 +vt 0.553838 0.524722 +vt 0.578867 0.553838 +vt 0.421134 0.553838 +vt 0.346786 0.604591 +vt 0.653214 0.604591 +vt 0.578867 0.327048 +vt 0.421134 0.327048 +vt 0.421134 0.524722 +vt 0.578867 0.524722 +vt 0.446162 0.327048 +vt 0.553838 0.327048 +vt 0.553838 0.524722 +vt 0.446162 0.524722 +vt 0.421134 0.327048 +vt 0.578867 0.327048 +vt 0.578867 0.524722 +vt 0.421134 0.524722 +vt 0.057798 0.573714 +vt 0.057798 0.524722 +vt -0.000000 0.524722 +vt -0.000000 0.573714 +vt 0.578867 0.446162 +vt 0.653214 0.395409 +vt 0.421134 0.446162 +vt 0.346786 0.395409 +vt 0.346786 0.604591 +vt 0.346786 0.395409 +vt 0.439044 0.458388 +vt 0.439044 0.541612 +vt 0.346786 0.524722 +vt 0.653214 0.524722 +vt 0.653214 0.573714 +vt 0.346786 0.573714 +vt 0.942202 0.604591 +vt 0.942202 0.395409 +vt 1.000000 0.395409 +vt 1.000000 0.604591 +vt 0.653214 0.524722 +vt 0.346786 0.524722 +vt 0.346786 0.573714 +vt 0.653214 0.573714 +vt 0.458388 0.573714 +vt 0.541612 0.573714 +vt 0.541612 0.912407 +vt 0.458388 0.912407 +vt 0.653214 0.604591 +vt 0.560957 0.541612 +vt 0.653214 0.395409 +vt 0.560957 0.458388 +vt 0.560957 0.458388 +vt 0.560957 0.541612 +vt 0.439044 0.541612 +vt 0.439044 0.458388 +vt 0.439044 0.573714 +vt 0.560957 0.573714 +vt 0.560957 0.912407 +vt 0.439044 0.912407 +vt 0.541612 0.573714 +vt 0.458388 0.573714 +vt 0.458388 0.912407 +vt 0.541612 0.912407 +vt 0.560957 0.573714 +vt 0.439044 0.573714 +vt 0.439044 0.912407 +vt 0.560957 0.912407 +vt 0.395409 0.524722 +vt 0.604591 0.524722 +vt 0.604591 0.573714 +vt 0.395409 0.573714 +vt 0.604591 0.524722 +vt 0.395409 0.524722 +vt 0.395409 0.573714 +vt 0.604591 0.573714 +vt 0.942202 0.573714 +vt 0.942202 0.524722 +vt 1.000000 0.524722 +vt 1.000000 0.573714 +vt 0.942202 0.395409 +vt 0.942202 0.604591 +vt 1.000000 0.604591 +vt 1.000000 0.395409 +vt 0.057798 0.395409 +vt 0.057798 0.604591 +vt -0.000000 0.604591 +vt -0.000000 0.395409 +vt 0.057798 0.524722 +vt 0.057798 0.573714 +vt -0.000000 0.573714 +vt -0.000000 0.524722 +vt 0.057798 0.604591 +vt 0.057798 0.395409 +vt -0.000000 0.395409 +vt -0.000000 0.604591 +vt 0.942202 0.524722 +vt 0.942202 0.573714 +vt 1.000000 0.573714 +vt 1.000000 0.524722 +vt 0.288988 0.395409 +vt 0.288988 0.435815 +vt 0.346786 0.435815 +vt 0.288988 0.604591 +vt 0.231191 0.395409 +vt 0.231191 0.604591 +vt 0.231191 0.435815 +vt 0.231191 0.564185 +vt 0.173393 0.604591 +vt 0.173393 0.395409 +vt 0.115595 0.395409 +vt 0.115595 0.604591 +vt 0.711012 0.604591 +vt 0.711012 0.395409 +vt 0.711012 0.435815 +vt 0.711012 0.564185 +vt 0.288988 0.573714 +vt 0.288988 0.524722 +vt 0.231191 0.573714 +vt 0.231191 0.524722 +vt 0.173393 0.573714 +vt 0.173393 0.524722 +vt 0.115595 0.573714 +vt 0.115595 0.524722 +vt 0.288988 0.604591 +vt 0.288988 0.395409 +vt 0.231191 0.604591 +vt 0.231191 0.395409 +vt 0.173393 0.604591 +vt 0.173393 0.395409 +vt 0.115595 0.604591 +vt 0.115595 0.395409 +vt 0.288988 0.524722 +vt 0.288988 0.573714 +vt 0.231191 0.524722 +vt 0.231191 0.573714 +vt 0.173393 0.524722 +vt 0.173393 0.573714 +vt 0.115595 0.524722 +vt 0.115595 0.573714 +vt 0.711012 0.573714 +vt 0.711012 0.524722 +vt 0.768809 0.573714 +vt 0.768809 0.524722 +vt 0.826607 0.573714 +vt 0.826607 0.524722 +vt 0.884405 0.573714 +vt 0.884405 0.524722 +vt 0.653214 0.435815 +vt 0.768809 0.604591 +vt 0.768809 0.395409 +vt 0.288988 0.564185 +vt 0.826607 0.395409 +vt 0.826607 0.604591 +vt 0.884405 0.604591 +vt 0.884405 0.395409 +vt 0.826607 0.564185 +vt 0.768809 0.564185 +vt 0.711012 0.524722 +vt 0.711012 0.573714 +vt 0.768809 0.524722 +vt 0.768809 0.573714 +vt 0.826607 0.524722 +vt 0.826607 0.573714 +vt 0.884405 0.524722 +vt 0.884405 0.573714 +vt 0.711012 0.395409 +vt 0.711012 0.604591 +vt 0.768809 0.395409 +vt 0.768809 0.604591 +vt 0.826607 0.395409 +vt 0.826607 0.604591 +vt 0.884405 0.395409 +vt 0.884405 0.604591 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.389511 +vt 0.435815 0.389511 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.058412 +vt 0.435815 0.058412 +vt 0.231191 0.524722 +vt 0.173393 0.524722 +vt 0.173393 0.254932 +vt 0.231191 0.254932 +vt 0.826607 0.524722 +vt 0.768809 0.524722 +vt 0.768809 0.254932 +vt 0.826607 0.254932 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.254932 +vt 0.564185 0.254932 +vt 0.115595 0.524722 +vt 0.057798 0.524722 +vt 0.057798 0.058412 +vt 0.115595 0.058412 +vt 0.768809 0.435815 +vt 0.942202 0.564185 +vt 0.884405 0.564185 +vt 0.173393 0.564185 +vt 0.173393 0.435815 +vt 0.346786 0.564185 +vt 0.826607 0.435815 +vt 0.115595 0.435815 +vt 0.115595 0.564185 +vt 0.653214 0.564185 +vt 0.057798 0.435815 +vt 0.884405 0.435815 +vt 0.057798 0.564185 +vt 0.942202 0.435815 +vt 0.346786 0.564185 +vt 0.346786 0.435815 +vt 0.288988 0.435815 +vt 0.288988 0.564185 +vt 0.231191 0.564185 +vt 0.231191 0.435815 +vt 0.173393 0.435815 +vt 0.173393 0.564185 +vt 0.115595 0.564185 +vt 0.115595 0.435815 +vt 0.057798 0.435815 +vt 0.057798 0.564185 +vt 0.653214 0.435815 +vt 0.653214 0.564185 +vt 0.711012 0.564185 +vt 0.711012 0.435815 +vt 0.768809 0.435815 +vt 0.768809 0.564185 +vt 0.826607 0.564185 +vt 0.826607 0.435815 +vt 0.884405 0.435815 +vt 0.884405 0.564185 +vt 0.942202 0.564185 +vt 0.942202 0.435815 +vt 0.942202 0.524722 +vt 0.884405 0.524722 +vt 0.884405 0.058412 +vt 0.942202 0.058412 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.389511 +vt 0.435815 0.389511 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.058412 +vt 0.564185 0.058412 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.389511 +vt 0.564185 0.389511 +vt 0.653214 0.524722 +vt 0.711012 0.524722 +vt 0.711012 0.389511 +vt 0.653214 0.389511 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.254932 +vt 0.564185 0.254932 +vt 0.346786 0.524722 +vt 0.288988 0.524722 +vt 0.288988 0.389511 +vt 0.346786 0.389511 +vt 0.768809 0.524722 +vt 0.826607 0.524722 +vt 0.826607 0.254932 +vt 0.768809 0.254932 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.254932 +vt 0.435815 0.254932 +vt 0.288988 0.524722 +vt 0.346786 0.524722 +vt 0.346786 0.389511 +vt 0.288988 0.389511 +vt 0.884405 0.524722 +vt 0.942202 0.524722 +vt 0.942202 0.058412 +vt 0.884405 0.058412 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.058412 +vt 0.564185 0.058412 +vt 0.173393 0.524722 +vt 0.231191 0.524722 +vt 0.231191 0.254932 +vt 0.173393 0.254932 +vt 0.564185 0.524722 +vt 0.435815 0.524722 +vt 0.435815 0.389511 +vt 0.564185 0.389511 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.058412 +vt 0.435815 0.058412 +vt 0.057798 0.524722 +vt 0.115595 0.524722 +vt 0.115595 0.058412 +vt 0.057798 0.058412 +vt 0.435815 0.524722 +vt 0.564185 0.524722 +vt 0.564185 0.254932 +vt 0.435815 0.254932 +vt 0.711012 0.524722 +vt 0.653214 0.524722 +vt 0.653214 0.389511 +vt 0.711012 0.389511 +vt 1.000000 0.158676 +vt 0.000000 0.158676 +vt 0.000000 0.841324 +vt 1.000000 0.841324 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +g obsidian_Cube.002_obsidian +usemtl obsidian +s off +f 3/1/1 2/2/1 6/3/1 7/4/1 +f 8/5/2 7/6/2 11/7/2 12/8/2 +f 4/9/3 3/10/3 7/11/3 8/12/3 +f 1/13/4 4/14/4 8/15/4 5/16/4 +f 2/17/5 1/18/5 5/19/5 6/20/5 +f 38/21/3 37/22/3 28/23/3 32/24/3 +f 5/25/2 8/5/2 12/8/2 9/26/2 +f 6/27/2 5/25/2 9/26/2 10/28/2 +f 7/6/2 6/27/2 10/28/2 11/7/2 +f 15/29/6 14/30/6 18/31/6 19/32/6 +f 10/33/5 9/34/5 13/35/5 14/36/5 +f 58/37/6 57/38/6 30/39/6 29/40/6 +f 12/41/3 11/42/3 15/43/3 16/44/3 +f 17/45/4 20/46/4 24/47/4 21/48/4 +f 16/49/6 15/29/6 19/32/6 20/50/6 +f 13/51/6 16/49/6 20/50/6 17/52/6 +f 14/30/6 13/51/6 17/52/6 18/31/6 +f 21/53/6 24/54/6 23/55/6 22/56/6 +f 18/57/5 17/58/5 21/59/5 22/60/5 +f 19/61/1 18/62/1 22/63/1 23/64/1 +f 20/65/3 19/66/3 23/67/3 24/68/3 +f 26/69/4 25/70/4 29/71/4 30/72/4 +f 28/73/1 27/74/1 31/75/1 32/76/1 +f 57/77/5 67/78/5 26/79/5 30/80/5 +f 67/81/2 72/82/2 25/83/2 26/84/2 +f 43/85/6 38/86/6 32/87/6 31/88/6 +f 48/89/5 43/90/5 31/91/5 27/92/5 +f 37/93/2 48/94/2 27/95/2 28/96/2 +f 72/97/3 58/98/3 29/99/3 25/100/3 +f 10/28/2 52/101/2 77/102/2 75/103/2 +f 33/104/2 52/101/2 51/105/2 34/106/2 +f 34/106/2 51/105/2 86/107/2 79/108/2 +f 35/109/2 50/110/2 49/111/2 36/112/2 +f 68/113/2 63/114/2 87/115/2 92/116/2 +f 10/33/5 14/36/5 47/117/5 52/118/5 +f 52/118/5 47/117/5 46/119/5 51/120/5 +f 51/120/5 46/119/5 45/121/5 50/122/5 +f 50/122/5 45/121/5 44/123/5 49/124/5 +f 49/124/5 44/123/5 43/90/5 48/89/5 +f 14/30/6 15/29/6 42/125/6 47/126/6 +f 47/126/6 42/125/6 41/127/6 46/128/6 +f 46/128/6 41/127/6 40/129/6 45/130/6 +f 45/130/6 40/129/6 39/131/6 44/132/6 +f 44/132/6 39/131/6 38/86/6 43/85/6 +f 15/43/3 11/42/3 33/133/3 42/134/3 +f 42/134/3 33/133/3 34/135/3 41/136/3 +f 41/136/3 34/135/3 35/137/3 40/138/3 +f 40/138/3 35/137/3 36/139/3 39/140/3 +f 39/140/3 36/139/3 37/22/3 38/21/3 +f 12/41/3 16/44/3 62/141/3 68/142/3 +f 68/142/3 62/141/3 61/143/3 69/144/3 +f 69/144/3 61/143/3 60/145/3 70/146/3 +f 70/146/3 60/145/3 59/147/3 71/148/3 +f 71/148/3 59/147/3 58/98/3 72/97/3 +f 63/114/2 9/26/2 74/149/2 87/115/2 +f 63/114/2 68/113/2 69/150/2 64/151/2 +f 52/101/2 33/104/2 78/152/2 77/102/2 +f 65/153/2 70/154/2 71/155/2 66/156/2 +f 69/150/2 70/154/2 94/157/2 93/158/2 +f 13/35/5 9/34/5 63/159/5 53/160/5 +f 53/160/5 63/159/5 64/161/5 54/162/5 +f 54/162/5 64/161/5 65/163/5 55/164/5 +f 55/164/5 65/163/5 66/165/5 56/166/5 +f 56/166/5 66/165/5 67/78/5 57/77/5 +f 16/49/6 13/51/6 53/167/6 62/168/6 +f 62/168/6 53/167/6 54/169/6 61/170/6 +f 61/170/6 54/169/6 55/171/6 60/172/6 +f 60/172/6 55/171/6 56/173/6 59/174/6 +f 59/174/6 56/173/6 57/38/6 58/37/6 +f 74/175/1 73/176/1 97/177/1 98/178/1 +f 90/179/1 95/180/1 119/181/1 114/182/1 +f 86/183/5 85/184/5 109/185/5 110/186/5 +f 89/187/5 88/188/5 112/189/5 113/190/5 +f 94/191/4 89/192/4 113/193/4 118/194/4 +f 84/195/5 83/196/5 107/197/5 108/198/5 +f 64/151/2 69/150/2 93/158/2 88/199/2 +f 71/155/2 72/82/2 96/200/2 95/201/2 +f 50/110/2 35/109/2 80/202/2 85/203/2 +f 33/104/2 11/7/2 76/204/2 78/152/2 +f 65/153/2 64/151/2 88/199/2 89/205/2 +f 70/154/2 65/153/2 89/205/2 94/157/2 +f 36/112/6 49/111/6 84/206/6 81/207/6 +f 9/26/2 12/8/2 73/208/2 74/149/2 +f 49/111/2 48/94/2 83/209/2 84/206/2 +f 66/156/6 71/155/6 95/201/6 90/210/6 +f 48/94/2 37/93/2 82/211/2 83/209/2 +f 35/109/2 34/106/2 79/108/2 80/202/2 +f 11/7/2 10/28/2 75/103/2 76/204/2 +f 67/81/2 66/156/2 90/210/2 91/212/2 +f 72/82/3 67/81/3 91/212/3 96/200/3 +f 12/8/2 68/113/2 92/116/2 73/208/2 +f 51/105/2 50/110/2 85/203/2 86/107/2 +f 37/93/2 36/112/2 81/207/2 82/211/2 +f 100/213/2 99/214/2 101/215/2 102/216/2 +f 103/217/2 110/218/2 109/219/2 104/220/2 +f 105/221/2 108/222/2 107/223/2 106/224/2 +f 98/225/2 97/226/2 116/227/2 111/228/2 +f 112/229/2 117/230/2 118/231/2 113/232/2 +f 114/233/2 119/234/2 120/235/2 115/236/2 +f 91/237/5 90/238/5 114/239/5 115/240/5 +f 77/241/1 78/242/1 102/243/1 101/244/1 +f 96/245/4 91/246/4 115/247/4 120/248/4 +f 76/249/4 75/250/4 99/251/4 100/252/4 +f 73/253/3 92/254/3 116/255/3 97/256/3 +f 79/257/4 86/258/4 110/259/4 103/260/4 +f 75/261/5 77/262/5 101/263/5 99/264/5 +f 93/265/3 94/266/3 118/267/3 117/268/3 +f 85/269/1 80/270/1 104/271/1 109/272/1 +f 78/273/3 76/274/3 100/275/3 102/276/3 +f 95/277/3 96/278/3 120/279/3 119/280/3 +f 81/281/4 84/282/4 108/283/4 105/284/4 +f 80/285/3 79/286/3 103/287/3 104/288/3 +f 92/289/4 87/290/4 111/291/4 116/292/4 +f 83/293/1 82/294/1 106/295/1 107/296/1 +f 82/297/3 81/298/3 105/299/3 106/300/3 +f 88/301/1 93/302/1 117/303/1 112/304/1 +f 87/305/5 74/306/5 98/307/5 111/308/5 +f 1/309/2 2/310/2 3/311/2 4/312/2 +o gold +v -0.253612 -0.440095 0.150671 +v -0.253612 -0.500000 0.150671 +v -0.253612 -0.440095 -0.149329 +v -0.253612 -0.500000 -0.149329 +v 0.246388 -0.440095 0.150671 +v 0.246388 -0.500000 0.150671 +v 0.246388 -0.440095 -0.149329 +v 0.246388 -0.500000 -0.149329 +v -0.051687 -0.440095 -0.050353 +v 0.044462 -0.440095 -0.050353 +v 0.044462 -0.440095 0.051694 +v -0.051687 -0.440095 0.051694 +v -0.051687 -0.235535 -0.050353 +v 0.044462 -0.235535 -0.050353 +v 0.044462 -0.235535 0.051694 +v -0.051687 -0.235535 0.051694 +v -0.051687 -0.166005 -0.050353 +v 0.044462 -0.166005 -0.050353 +v 0.044462 -0.166005 0.051694 +v -0.051687 -0.166005 0.051694 +v -0.245071 -0.235535 0.051694 +v -0.245071 -0.235535 -0.050353 +v 0.237847 -0.235535 -0.050353 +v 0.237847 -0.235535 0.051694 +v -0.245071 -0.166005 0.051694 +v -0.245071 -0.166005 -0.050353 +v 0.237847 -0.166005 -0.050353 +v 0.237847 -0.166005 0.051694 +v -0.051687 0.295002 -0.038288 +v 0.044462 0.295002 -0.038288 +v 0.044462 0.295002 0.039629 +v -0.051687 0.295002 0.039629 +v 0.093939 0.295002 0.039629 +v -0.101164 0.295002 -0.038288 +v 0.093939 0.295002 -0.038288 +v -0.101164 0.295002 0.039629 +v 0.246495 0.248128 -0.038288 +v 0.246495 0.201254 -0.038288 +v 0.246495 0.201254 0.039629 +v 0.246495 0.248128 0.039629 +v -0.253720 0.201254 0.039629 +v -0.253720 0.248128 0.039629 +v -0.253720 0.248128 -0.038288 +v -0.253720 0.201254 -0.038288 +v -0.253720 0.201254 0.022466 +v -0.253720 0.248128 0.022466 +v -0.253720 0.248128 -0.021125 +v -0.253720 0.201254 -0.021125 +v -0.253720 0.185648 0.022466 +v -0.253720 0.263734 0.022466 +v -0.253720 0.263734 -0.021125 +v -0.253720 0.185648 -0.021125 +v -0.300567 0.263734 0.022466 +v -0.300567 0.263734 -0.021124 +v -0.253720 0.283424 0.022466 +v -0.253720 0.283424 -0.021125 +v -0.300567 0.283424 0.022466 +v -0.300567 0.283424 -0.021124 +v -0.233962 0.263734 0.022466 +v -0.233962 0.263734 -0.021125 +v -0.320325 0.263734 0.022466 +v -0.320325 0.263734 -0.021124 +v -0.233962 0.283424 0.022466 +v -0.233962 0.283424 -0.021125 +v -0.320325 0.283424 0.022466 +v -0.320325 0.283424 -0.021124 +v 0.246495 0.248128 -0.022435 +v 0.246495 0.201254 -0.022435 +v 0.246495 0.201254 0.023776 +v 0.246495 0.248128 0.023776 +v 0.246495 0.262724 -0.022435 +v 0.246495 0.186657 -0.022435 +v 0.246495 0.186657 0.023776 +v 0.246495 0.262724 0.023776 +v 0.294296 0.186657 -0.022435 +v 0.294296 0.186657 0.023776 +v 0.246495 0.167428 -0.022435 +v 0.246495 0.167428 0.023776 +v 0.294296 0.167428 -0.022435 +v 0.294296 0.167428 0.023776 +v 0.211036 0.186657 -0.022435 +v 0.211036 0.186657 0.023776 +v 0.329755 0.186657 -0.022435 +v 0.329755 0.186657 0.023776 +v 0.211036 0.167428 -0.022435 +v 0.211036 0.167428 0.023776 +v 0.329755 0.167428 -0.022435 +v 0.329755 0.167428 0.023776 +v 0.294296 0.186657 -0.033582 +v 0.246495 0.186657 -0.033582 +v 0.246495 0.186657 0.034923 +v 0.294296 0.186657 0.034923 +v 0.294296 0.167428 -0.033582 +v 0.246495 0.167428 -0.033582 +v 0.246495 0.167428 0.034923 +v 0.294296 0.167428 0.034923 +v 0.329755 0.186657 0.034923 +v 0.329755 0.167428 0.034923 +v 0.329755 0.167428 -0.033582 +v 0.329755 0.186657 -0.033582 +v 0.211036 0.186657 0.034923 +v 0.211036 0.167428 0.034923 +v 0.211036 0.186657 -0.033582 +v 0.211036 0.167428 -0.033582 +v -0.253720 0.263734 0.029950 +v -0.300567 0.263734 0.029950 +v -0.253720 0.263734 -0.028609 +v -0.300567 0.263734 -0.028609 +v -0.253720 0.283424 0.029950 +v -0.300567 0.283424 0.029950 +v -0.253720 0.283424 -0.028609 +v -0.300567 0.283424 -0.028609 +v -0.320325 0.263734 -0.028609 +v -0.320325 0.283424 -0.028609 +v -0.233962 0.283424 -0.028609 +v -0.233962 0.263734 -0.028609 +v -0.320325 0.263734 0.029950 +v -0.320325 0.283424 0.029950 +v -0.233962 0.283424 0.029950 +v -0.233962 0.263734 0.029950 +v -0.051687 0.305172 0.039629 +v -0.051687 0.305172 -0.038288 +v 0.044462 0.305172 -0.038288 +v 0.044462 0.305172 0.039629 +v 0.093939 0.305172 0.039629 +v -0.101164 0.305172 -0.038288 +v 0.093939 0.305172 -0.038288 +v -0.101164 0.305172 0.039629 +vt 1.000000 0.067349 +vt 1.000000 0.186161 +vt 0.000000 0.186161 +vt 0.000000 0.067349 +vt 0.000000 0.067349 +vt 0.000000 0.186161 +vt 1.000000 0.186161 +vt 1.000000 0.067349 +vt 1.000000 0.800000 +vt 1.000000 0.200000 +vt 0.000000 0.200000 +vt 0.000000 0.800000 +vt 0.200000 0.186161 +vt 0.800000 0.186161 +vt 0.800000 0.067349 +vt 0.200000 0.067349 +vt 0.800000 0.186161 +vt 0.200000 0.186161 +vt 0.200000 0.067349 +vt 0.800000 0.067349 +vt 1.000000 0.200000 +vt 1.000000 0.800000 +vt 0.596149 0.602047 +vt 0.596149 0.397953 +vt 0.596149 0.186161 +vt 0.403852 0.186161 +vt 0.403852 0.595280 +vt 0.596149 0.595280 +vt 0.000000 0.800000 +vt 0.403852 0.602047 +vt 0.000000 0.200000 +vt 0.403852 0.397953 +vt 0.596149 0.734340 +vt 0.596149 0.595280 +vt 0.982917 0.595280 +vt 0.982917 0.734340 +vt 0.397953 0.186161 +vt 0.602047 0.186161 +vt 0.602047 0.595280 +vt 0.397953 0.595280 +vt 0.403852 0.186161 +vt 0.596149 0.186161 +vt 0.403852 0.595280 +vt 0.602047 0.186161 +vt 0.397953 0.186161 +vt 0.397953 0.595280 +vt 0.602047 0.595280 +vt 0.999999 0.605656 +vt 0.599550 0.605656 +vt 0.599550 0.394344 +vt 0.999999 0.394344 +vt 0.403852 0.734340 +vt 0.403852 0.734340 +vt 0.017082 0.595280 +vt 0.017082 0.734340 +vt 0.596149 0.734340 +vt 0.397953 0.595280 +vt 0.602047 0.595280 +vt 0.602047 0.734340 +vt 0.397953 0.734340 +vt 0.602047 0.595280 +vt 0.397953 0.595280 +vt 0.397953 0.734340 +vt 0.602047 0.734340 +vt 0.596149 0.397953 +vt 0.596149 0.602047 +vt 0.982917 0.602047 +vt 0.982917 0.397953 +vt 0.017082 0.734340 +vt 0.017082 0.595280 +vt 0.403852 0.602047 +vt 0.403852 0.397953 +vt 0.017082 0.397953 +vt 0.017082 0.602047 +vt 0.982917 0.734340 +vt 0.982917 0.595280 +vt -0.000001 0.394344 +vt 0.400451 0.394344 +vt 0.400451 0.605656 +vt -0.000001 0.605656 +vt 0.439425 0.782114 +vt 0.375678 0.782114 +vt 0.375678 0.795218 +vt 0.439425 0.795218 +vt 0.375678 0.782114 +vt 0.439425 0.782114 +vt 0.439425 0.795218 +vt 0.375678 0.795218 +vt 0.179123 0.450394 +vt 0.179123 0.550783 +vt 0.179123 0.530358 +vt 0.179123 0.470819 +vt 0.823606 0.450394 +vt 0.823606 0.550783 +vt 0.823606 0.528669 +vt 0.823606 0.472507 +vt 0.823606 0.550783 +vt 0.823606 0.450394 +vt 0.823606 0.472507 +vt 0.823606 0.528669 +vt 0.285735 0.220882 +vt 0.285735 0.220882 +vt 0.285735 0.220882 +vt 0.285735 0.220882 +vt 0.285735 0.779118 +vt 0.285735 0.779118 +vt 0.285735 0.779118 +vt 0.285735 0.779118 +vt 0.477230 0.615028 +vt 0.477230 0.628979 +vt 0.471927 0.628979 +vt 0.471927 0.615028 +vt 0.703302 0.550113 +vt 0.717302 0.550113 +vt 0.717302 0.544810 +vt 0.703302 0.544810 +vt 0.703302 0.580998 +vt 0.703302 0.550113 +vt 0.717302 0.550113 +vt 0.717302 0.580998 +vt 0.717302 0.580998 +vt 0.703302 0.580998 +vt 0.703302 0.586301 +vt 0.717302 0.586301 +vt 0.508116 0.615028 +vt 0.508116 0.628979 +vt 0.508116 0.615028 +vt 0.477230 0.615028 +vt 0.477230 0.628979 +vt 0.508116 0.628979 +vt 0.670110 0.550113 +vt 0.670110 0.544810 +vt 0.703302 0.544810 +vt 0.670110 0.580998 +vt 0.656110 0.580998 +vt 0.656110 0.550113 +vt 0.670110 0.580998 +vt 0.670110 0.550113 +vt 0.656110 0.550113 +vt 0.656110 0.580998 +vt 0.717302 0.586301 +vt 0.703302 0.586301 +vt 0.670110 0.586301 +vt 1.000000 0.983381 +vt -0.000000 0.983381 +vt -0.000000 0.016619 +vt 1.000000 0.016619 +vt 0.179123 0.550783 +vt 0.179123 0.450394 +vt 0.179123 0.470819 +vt 0.179123 0.530358 +vt 0.724426 0.196247 +vt 0.724426 0.196247 +vt 0.724426 0.196247 +vt 0.724426 0.196247 +vt 0.724426 0.803753 +vt 0.724426 0.803753 +vt 0.724426 0.803753 +vt 0.724426 0.803753 +vt 0.701318 0.305374 +vt 1.000000 0.305374 +vt 1.000000 0.211481 +vt 0.701318 0.211481 +vt 0.694626 0.419013 +vt 0.694626 0.580986 +vt 0.788519 0.580986 +vt 0.788519 0.419013 +vt 0.701318 0.305374 +vt 0.298683 0.305374 +vt 0.298683 0.211481 +vt 0.701318 0.211481 +vt 0.000000 0.694626 +vt 0.298683 0.694626 +vt 0.298683 0.788519 +vt 0.000000 0.788519 +vt 0.305374 0.580987 +vt 0.305374 0.419014 +vt 0.694626 0.580986 +vt 0.305374 0.580987 +vt 0.305374 0.419014 +vt 0.694626 0.419013 +vt 0.701318 0.694626 +vt 1.000000 0.694626 +vt 0.298683 0.694626 +vt 0.000000 0.694626 +vt 0.000000 0.788519 +vt 0.298683 0.788519 +vt 0.701318 0.788519 +vt 0.000000 0.305374 +vt 0.298683 0.305374 +vt 0.000000 0.305374 +vt 0.701318 0.694626 +vt 1.000000 0.305374 +vt 1.000000 0.694626 +vt 0.298683 0.580986 +vt 0.298683 0.419013 +vt 0.000000 0.419013 +vt 0.000000 0.580986 +vt 0.701318 0.580986 +vt 0.701318 0.419013 +vt 1.000000 0.580986 +vt 1.000000 0.419013 +vt 0.701318 0.580987 +vt 0.298683 0.580987 +vt 0.298683 0.419014 +vt 0.701318 0.419014 +vt 1.000000 0.419014 +vt 1.000000 0.580987 +vt 0.000000 0.580987 +vt 0.000000 0.419014 +vt 0.211481 0.419014 +vt 0.211481 0.580987 +vt 1.000000 0.211481 +vt 0.701318 0.788519 +vt 0.788519 0.419013 +vt 0.788519 0.580986 +vt 0.000000 0.211481 +vt 0.211481 0.580987 +vt 0.211481 0.419014 +vt 0.298683 0.211481 +vt 0.000000 0.211481 +vt 1.000000 0.788519 +vt 1.000000 0.788519 +vt 0.670110 0.615028 +vt 0.703302 0.615028 +vt 0.703302 0.628979 +vt 0.670110 0.628979 +vt 0.703302 0.615028 +vt 0.703302 0.628979 +vt 0.717302 0.628979 +vt 0.717302 0.615028 +vt 0.670110 0.615028 +vt 0.670110 0.628979 +vt 0.717302 0.615028 +vt 0.717302 0.628979 +vt 0.656110 0.615028 +vt 0.656110 0.628979 +vt 0.656110 0.628979 +vt 0.656110 0.615028 +vt 0.656110 0.586301 +vt 0.670110 0.586301 +vt 0.471927 0.615028 +vt 0.471927 0.628979 +vt 0.656110 0.544810 +vt 0.670110 0.544810 +vt 0.513419 0.615028 +vt 0.513419 0.628979 +vt 0.656110 0.544810 +vt 0.513419 0.628979 +vt 0.513419 0.615028 +vt 0.656110 0.586301 +vt 0.717302 0.544810 +vt 0.563304 0.550783 +vt 0.563304 0.450394 +vt 0.627051 0.450394 +vt 0.627051 0.550783 +vt 0.439425 0.450394 +vt 0.439425 0.550783 +vt 0.375678 0.550783 +vt 0.375678 0.450394 +vt 0.550783 0.782114 +vt 0.450394 0.782114 +vt 0.450394 0.795218 +vt 0.550783 0.795218 +vt 0.550783 0.782114 +vt 0.450394 0.782114 +vt 0.450394 0.795218 +vt 0.550783 0.795218 +vt 0.627051 0.782114 +vt 0.563304 0.782114 +vt 0.563304 0.795218 +vt 0.627051 0.795218 +vt 0.563304 0.782114 +vt 0.627051 0.782114 +vt 0.627051 0.795218 +vt 0.563304 0.795218 +vt 0.450394 0.782114 +vt 0.550783 0.782114 +vt 0.550783 0.795218 +vt 0.450394 0.795218 +vt 0.450394 0.782114 +vt 0.550783 0.782114 +vt 0.550783 0.795218 +vt 0.450394 0.795218 +vt 0.746405 0.699681 +vt 0.999999 0.699681 +vt 0.999999 0.300319 +vt 0.746405 0.300319 +vt 0.253596 0.300319 +vt -0.000001 0.300319 +vt -0.000001 0.699681 +vt 0.253596 0.699681 +vt 0.000000 0.034757 +vt 0.000000 0.965243 +vt 1.000000 0.965243 +vt 1.000000 0.034757 +vt 0.000000 0.034757 +vt 1.000000 0.034757 +vt 1.000000 0.965243 +vt 0.000000 0.965243 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +g gold_gold_gold +usemtl gold +s off +f 124/313/7 123/314/7 127/315/7 128/316/7 +f 126/317/8 125/318/8 121/319/8 122/320/8 +f 122/321/9 124/322/9 128/323/9 126/324/9 +f 127/325/10 125/326/10 126/327/10 128/328/10 +f 121/329/11 123/330/11 124/331/11 122/332/11 +f 123/333/12 121/334/12 132/335/12 129/336/12 +f 132/337/8 131/338/8 135/339/8 136/340/8 +f 121/334/12 125/341/12 131/342/12 132/335/12 +f 125/341/12 127/343/12 130/344/12 131/342/12 +f 127/343/12 123/333/12 129/336/12 130/344/12 +f 137/345/7 133/346/7 142/347/7 146/348/7 +f 129/349/11 132/350/11 136/351/11 133/352/11 +f 130/353/7 129/354/7 133/346/7 134/355/7 +f 131/356/10 130/357/10 134/358/10 135/359/10 +f 145/360/12 140/361/12 137/362/12 146/363/12 +f 134/355/7 133/346/7 137/345/7 138/364/7 +f 139/365/8 135/339/8 144/366/8 148/367/8 +f 136/340/8 135/339/8 139/365/8 140/368/8 +f 142/369/11 141/370/11 145/371/11 146/372/11 +f 144/373/10 143/374/10 147/375/10 148/376/10 +f 133/377/9 136/378/9 141/379/9 142/380/9 +f 134/355/7 138/364/7 147/381/7 143/382/7 +f 135/383/9 134/384/9 143/385/9 144/386/9 +f 136/340/8 140/368/8 145/387/8 141/388/8 +f 147/389/12 138/390/12 139/391/12 148/392/12 +f 137/362/12 140/361/12 139/391/12 138/390/12 +f 151/393/8 153/394/8 245/395/8 244/396/8 +f 155/397/7 150/398/7 243/399/7 247/400/7 +f 157/401/12 160/402/12 190/403/12 187/404/12 +f 164/405/9 161/406/9 165/407/9 168/408/9 +f 162/409/12 163/410/12 167/411/12 166/412/12 +f 167/413/8 168/414/8 172/415/8 171/416/8 +f 165/417/8 166/418/8 170/419/8 169/420/8 +f 182/421/11 186/422/11 234/423/11 233/424/11 +f 174/425/9 182/426/9 233/427/9 228/428/9 +f 177/429/12 178/430/12 186/431/12 185/432/12 +f 181/433/9 173/434/9 226/435/9 237/436/9 +f 182/421/11 181/437/11 185/438/11 186/422/11 +f 179/439/10 180/440/10 184/441/10 183/442/10 +f 174/425/9 173/434/9 181/433/9 182/426/9 +f 178/430/12 176/443/12 231/444/12 232/445/12 +f 176/443/12 175/446/12 183/447/12 184/448/12 +f 170/449/9 171/450/9 180/451/9 179/452/9 +f 177/429/12 185/432/12 238/453/12 230/454/12 +f 175/446/12 177/429/12 230/454/12 229/455/12 +f 193/456/12 196/457/12 195/458/12 192/459/12 +f 159/460/9 158/461/9 188/462/9 189/463/9 +f 188/464/8 187/465/8 191/466/8 192/467/8 +f 190/468/8 189/469/8 193/470/8 194/471/8 +f 197/472/9 205/473/9 224/474/9 214/475/9 +f 208/476/10 204/477/10 217/478/10 218/479/10 +f 192/480/12 195/481/12 209/482/12 210/483/12 +f 204/484/12 196/485/12 212/486/12 217/487/12 +f 203/488/10 204/477/10 208/476/10 207/489/10 +f 202/490/11 201/491/11 205/492/11 206/493/11 +f 197/472/9 198/494/9 206/495/9 205/473/9 +f 200/496/9 208/497/9 218/498/9 216/499/9 +f 198/494/9 200/496/9 216/499/9 215/500/9 +f 195/481/12 196/485/12 204/484/12 203/501/12 +f 200/496/9 199/502/9 207/503/9 208/497/9 +f 193/504/12 192/480/12 201/505/12 202/506/12 +f 212/507/8 216/508/8 218/509/8 217/510/8 +f 212/507/8 211/511/8 215/512/8 216/508/8 +f 215/512/8 211/511/8 221/513/8 222/514/8 +f 210/515/7 209/516/7 213/517/7 214/518/7 +f 210/515/7 214/518/7 224/519/7 223/520/7 +f 213/517/7 209/516/7 220/521/7 219/522/7 +f 203/488/10 207/489/10 219/523/10 220/524/10 +f 201/505/12 192/480/12 210/483/12 223/525/12 +f 196/485/12 193/504/12 211/526/12 212/486/12 +f 202/490/11 206/493/11 222/527/11 221/528/11 +f 195/481/12 203/501/12 220/529/12 209/482/12 +f 205/492/11 201/491/11 223/530/11 224/531/11 +f 207/503/9 199/502/9 213/532/9 219/533/9 +f 193/504/12 202/506/12 221/534/12 211/526/12 +f 199/502/9 197/472/9 214/475/9 213/532/9 +f 206/495/9 198/494/9 215/500/9 222/535/9 +f 227/536/7 228/537/7 232/538/7 231/539/7 +f 226/540/8 230/541/8 238/542/8 237/543/8 +f 226/540/8 225/544/8 229/545/8 230/541/8 +f 232/538/7 228/537/7 233/546/7 234/547/7 +f 229/545/8 225/544/8 240/548/8 239/549/8 +f 227/536/7 231/539/7 235/550/7 236/551/7 +f 183/447/12 175/446/12 229/455/12 239/552/12 +f 173/434/9 170/449/9 225/553/9 226/435/9 +f 184/441/10 180/440/10 236/554/10 235/555/10 +f 176/443/12 184/448/12 235/556/12 231/444/12 +f 171/450/9 174/425/9 228/428/9 227/557/9 +f 185/438/11 181/437/11 237/558/11 238/559/11 +f 180/451/9 171/450/9 227/557/9 236/560/9 +f 179/439/10 183/442/10 239/561/10 240/562/10 +f 170/449/9 179/452/9 240/563/9 225/553/9 +f 186/431/12 178/430/12 232/445/12 234/564/12 +f 241/565/12 242/566/12 246/567/12 248/568/12 +f 243/569/12 244/570/12 245/571/12 247/572/12 +f 152/573/10 149/574/10 242/575/10 241/576/10 +f 153/577/10 155/578/10 247/579/10 245/580/10 +f 156/581/8 152/582/8 241/583/8 248/584/8 +f 149/585/7 154/586/7 246/587/7 242/588/7 +f 150/589/11 151/590/11 244/591/11 243/592/11 +f 154/593/11 156/594/11 248/595/11 246/596/11 +f 152/597/9 156/598/9 154/599/9 149/600/9 +f 150/601/9 155/602/9 153/603/9 151/604/9 +f 171/605/9 170/606/9 173/607/9 174/608/9 +f 176/609/12 178/610/12 177/611/12 175/612/12 +o body +v -0.051687 -0.166005 -0.038288 +v 0.044462 -0.166005 -0.038288 +v 0.044462 -0.166005 0.039629 +v -0.051687 -0.166005 0.039629 +v -0.150641 -0.166005 0.039629 +v -0.150641 -0.166005 -0.038288 +v 0.143417 -0.166005 -0.038288 +v 0.143417 -0.166005 0.039629 +v -0.051687 0.060632 -0.038288 +v 0.044462 0.060632 -0.038288 +v 0.044462 0.060632 0.039629 +v -0.051687 0.060632 0.039629 +v -0.150641 0.060632 0.039629 +v -0.150641 0.060632 -0.038288 +v 0.143417 0.060632 -0.038288 +v 0.143417 0.060632 0.039629 +v 0.044462 -0.081230 -0.038288 +v -0.051687 -0.081230 -0.038288 +v -0.051687 -0.081230 0.039629 +v -0.150641 -0.081230 0.039629 +v -0.150641 -0.081230 -0.038288 +v 0.143417 -0.081230 -0.038288 +v 0.143417 -0.081230 0.039629 +v 0.044462 -0.081230 0.039629 +v 0.044462 -0.081230 -0.066455 +v 0.044462 -0.166005 -0.066455 +v 0.143417 -0.166005 0.067796 +v 0.044462 -0.166005 0.067796 +v -0.150641 -0.166005 -0.066455 +v -0.051687 -0.166005 -0.066455 +v 0.143417 -0.166005 -0.066455 +v -0.051687 -0.166005 0.067796 +v -0.150641 -0.166005 0.067796 +v -0.150641 -0.081230 0.067796 +v 0.143417 -0.081230 0.067796 +v -0.051687 -0.081230 -0.066455 +v -0.051687 -0.081230 0.067796 +v -0.150641 -0.081230 -0.066455 +v 0.143417 -0.081230 -0.066455 +v 0.044462 -0.081230 0.067796 +v 0.044462 -0.081230 -0.107817 +v 0.044462 -0.166005 -0.107817 +v 0.143417 -0.166005 0.109158 +v 0.044462 -0.166005 0.109158 +v -0.150641 -0.166005 -0.107817 +v -0.051687 -0.166005 -0.107817 +v 0.143417 -0.166005 -0.107817 +v -0.051687 -0.166005 0.109158 +v -0.150641 -0.166005 0.109158 +v -0.150641 -0.081230 0.109158 +v 0.143417 -0.081230 0.109158 +v -0.051687 -0.081230 -0.107817 +v -0.051687 -0.081230 0.109158 +v -0.150641 -0.081230 -0.107817 +v 0.143417 -0.081230 -0.107817 +v 0.044462 -0.081230 0.109158 +v 0.143417 -0.358086 0.067796 +v 0.044462 -0.358086 0.067796 +v -0.150641 -0.358086 -0.066455 +v -0.051687 -0.358086 -0.066455 +v 0.143417 -0.358086 -0.066455 +v 0.044462 -0.358086 -0.066455 +v -0.051687 -0.358086 0.067796 +v -0.150641 -0.358086 0.067796 +v 0.143417 -0.358086 0.109158 +v 0.044462 -0.358086 0.109158 +v -0.150641 -0.358086 -0.107817 +v -0.051687 -0.358086 -0.107817 +v 0.143417 -0.358086 -0.107817 +v 0.044462 -0.358086 -0.107817 +v -0.051687 -0.358086 0.109158 +v -0.150641 -0.358086 0.109158 +v 0.093939 0.060632 0.039629 +v -0.101164 0.060632 -0.038288 +v 0.093939 0.060632 -0.038288 +v -0.101164 0.060632 0.039629 +v -0.051687 0.295002 -0.038288 +v 0.044462 0.295002 -0.038288 +v 0.044462 0.295002 0.039629 +v -0.051687 0.295002 0.039629 +v 0.093939 0.295002 0.039629 +v -0.101164 0.295002 -0.038288 +v 0.093939 0.295002 -0.038288 +v -0.101164 0.295002 0.039629 +v 0.093939 0.248128 -0.038288 +v 0.093939 0.201254 -0.038288 +v 0.093939 0.154380 -0.038288 +v 0.093939 0.107506 -0.038288 +v 0.044462 0.107506 -0.038288 +v 0.044462 0.154380 -0.038288 +v 0.044462 0.201254 -0.038288 +v 0.044462 0.248128 -0.038288 +v 0.093939 0.107506 0.039629 +v 0.093939 0.154380 0.039629 +v 0.093939 0.201254 0.039629 +v 0.093939 0.248128 0.039629 +v 0.044462 0.248128 0.039629 +v 0.044462 0.201254 0.039629 +v 0.044462 0.154380 0.039629 +v 0.044462 0.107506 0.039629 +v -0.101164 0.107506 0.039629 +v -0.101164 0.154380 0.039629 +v -0.101164 0.201254 0.039629 +v -0.101164 0.248128 0.039629 +v -0.101164 0.248128 -0.038288 +v -0.101164 0.201254 -0.038288 +v -0.101164 0.154380 -0.038288 +v -0.101164 0.107506 -0.038288 +v -0.051687 0.107506 -0.038288 +v -0.051687 0.154380 -0.038288 +v -0.051687 0.201254 -0.038288 +v -0.051687 0.248128 -0.038288 +v -0.051687 0.107506 0.039629 +v -0.051687 0.154380 0.039629 +v -0.051687 0.201254 0.039629 +v -0.051687 0.248128 0.039629 +v 0.167664 0.154380 -0.038288 +v 0.167664 0.107506 -0.038288 +v 0.167664 0.107506 0.039629 +v 0.167664 0.154380 0.039629 +v -0.176901 0.107506 0.039629 +v -0.176901 0.154380 0.039629 +v -0.176902 0.154380 -0.038288 +v -0.176902 0.107506 -0.038288 +v 0.246495 0.248128 -0.038288 +v 0.246495 0.201254 -0.038288 +v 0.246495 0.201254 0.039629 +v 0.246495 0.248128 0.039629 +v -0.253720 0.201254 0.039629 +v -0.253720 0.248128 0.039629 +v -0.253720 0.248128 -0.038288 +v -0.253720 0.201254 -0.038288 +v -0.051687 0.313148 -0.038288 +v 0.044462 0.313148 -0.038288 +v 0.044462 0.313148 0.039629 +v -0.051687 0.313148 0.039629 +v -0.071481 0.313148 -0.054329 +v 0.064256 0.313148 -0.054329 +v 0.064256 0.313148 0.055670 +v -0.071481 0.313148 0.055670 +v -0.071481 0.418064 -0.054329 +v 0.064256 0.418064 -0.054329 +v 0.064256 0.418064 0.055670 +v -0.071481 0.418064 0.055670 +v -0.220548 0.107506 0.039629 +v -0.220548 0.154380 0.039629 +v -0.220548 0.154380 -0.038288 +v -0.220548 0.107506 -0.038288 +v -0.176902 0.154380 -0.068779 +v -0.176902 0.107506 -0.068779 +v -0.220548 0.154380 -0.068779 +v -0.220548 0.107506 -0.068779 +v -0.176902 0.154380 -0.106304 +v -0.176902 0.107506 -0.106304 +v -0.220548 0.154380 -0.106304 +v -0.220548 0.107506 -0.106304 +v 0.334162 0.154380 -0.068779 +v 0.334162 0.107506 -0.068779 +v 0.334162 0.154380 -0.106305 +v 0.334162 0.107506 -0.106305 +v 0.218783 0.154380 -0.038288 +v 0.218783 0.107506 -0.038288 +v 0.218783 0.107506 0.039629 +v 0.218783 0.154380 0.039629 +v 0.167664 0.107506 0.064794 +v 0.167664 0.154380 0.064794 +v 0.218783 0.107506 0.064794 +v 0.218783 0.154380 0.064794 +v 0.167664 0.107506 0.096965 +v 0.167664 0.154380 0.096965 +v 0.218783 0.107506 0.096965 +v 0.218783 0.154380 0.096965 +v -0.282072 0.107506 0.064794 +v -0.282072 0.154380 0.064794 +v -0.282072 0.107506 0.096966 +v -0.282072 0.154380 0.096966 +vt 0.563304 0.297373 +vt 0.690798 0.297373 +vt 0.690798 0.480150 +vt 0.627051 0.480150 +vt 0.563304 0.480150 +vt 0.690798 0.297373 +vt 0.563304 0.297373 +vt 0.563304 0.480150 +vt 0.627051 0.480150 +vt 0.690798 0.480150 +vt 0.439425 0.297373 +vt 0.439425 0.480150 +vt 0.450394 0.721721 +vt 0.550783 0.721721 +vt 0.550783 0.782114 +vt 0.450394 0.782114 +vt 0.375678 0.450394 +vt 0.375678 0.550783 +vt 0.311931 0.550783 +vt 0.311931 0.450394 +vt 0.627051 0.550783 +vt 0.627051 0.450394 +vt 0.690798 0.450394 +vt 0.690798 0.550783 +vt 0.550783 0.297373 +vt 0.450394 0.297373 +vt 0.450394 0.480150 +vt 0.550783 0.480150 +vt 0.439425 0.297373 +vt 0.439425 0.480150 +vt 0.311931 0.297373 +vt 0.375678 0.480150 +vt 0.311931 0.480150 +vt 0.311931 0.297373 +vt 0.311931 0.480150 +vt 0.375678 0.480150 +vt 0.450394 0.297373 +vt 0.550783 0.297373 +vt 0.550783 0.480150 +vt 0.450394 0.480150 +vt 0.450394 0.188148 +vt 0.550783 0.188148 +vt 0.450394 0.297373 +vt 0.450394 0.188148 +vt 0.414103 0.188148 +vt 0.414103 0.297373 +vt 0.690798 0.450394 +vt 0.563304 0.450394 +vt 0.563304 0.414103 +vt 0.690798 0.414103 +vt 0.550783 0.188148 +vt 0.450394 0.188148 +vt 0.550783 0.297373 +vt 0.550783 0.188148 +vt 0.587073 0.188148 +vt 0.587073 0.297373 +vt 0.450394 0.188148 +vt 0.450394 0.297373 +vt 0.414103 0.297373 +vt 0.414103 0.188148 +vt 0.360812 0.188148 +vt 0.360812 0.297373 +vt 0.563304 0.587073 +vt 0.690798 0.587073 +vt 0.690798 0.640364 +vt 0.563304 0.640364 +vt 0.587073 0.188148 +vt 0.587073 0.297373 +vt 0.640364 0.297373 +vt 0.640364 0.188148 +vt 0.439425 0.414103 +vt 0.311931 0.414103 +vt 0.311931 0.360812 +vt 0.439425 0.360812 +vt 0.311931 0.550783 +vt 0.439425 0.550783 +vt 0.439425 0.587073 +vt 0.311931 0.587073 +vt 0.550783 0.188148 +vt 0.550783 0.297373 +vt 0.587073 0.297373 +vt 0.587073 0.188148 +vt 0.587073 0.188148 +vt 0.587073 0.297373 +vt 0.439425 0.450394 +vt 0.311931 0.450394 +vt 0.414103 0.297373 +vt 0.414103 0.188148 +vt 0.414103 0.188148 +vt 0.414103 0.297373 +vt 0.563304 0.550783 +vt 0.690798 0.550783 +vt 0.439425 0.188148 +vt 0.311931 0.188148 +vt 0.311931 0.297373 +vt 0.439425 0.297373 +vt 0.311931 0.188148 +vt 0.439425 0.188148 +vt 0.439425 0.297373 +vt 0.311931 0.297373 +vt 0.690798 0.188148 +vt 0.563304 0.188148 +vt 0.563304 0.297373 +vt 0.690798 0.297373 +vt 0.563304 0.188148 +vt 0.690798 0.188148 +vt 0.690798 0.297373 +vt 0.563304 0.297373 +vt 0.360812 0.297373 +vt 0.360812 0.188148 +vt 0.563304 0.360812 +vt 0.690798 0.360812 +vt 0.640364 0.297373 +vt 0.640364 0.188148 +vt 0.640364 0.188148 +vt 0.587073 -0.059331 +vt 0.640364 -0.059331 +vt 0.360812 0.297373 +vt 0.360812 0.188148 +vt 0.640364 -0.059331 +vt 0.587073 -0.059331 +vt 0.360812 0.188148 +vt 0.360812 0.297373 +vt 0.690798 -0.059331 +vt 0.563304 -0.059331 +vt 0.640364 0.297373 +vt 0.640364 -0.059331 +vt 0.587073 -0.059331 +vt 0.439425 0.640364 +vt 0.311931 0.640364 +vt 0.640364 0.188148 +vt 0.640364 0.297373 +vt 0.439425 0.587073 +vt 0.311931 0.587073 +vt 0.311931 0.640364 +vt 0.439425 0.640364 +vt 0.563304 0.414103 +vt 0.690798 0.414103 +vt 0.690798 0.360812 +vt 0.563304 0.360812 +vt 0.311931 0.414103 +vt 0.439425 0.414103 +vt 0.439425 0.360812 +vt 0.311931 0.360812 +vt 0.690798 0.587073 +vt 0.563304 0.587073 +vt 0.563304 0.640364 +vt 0.690798 0.640364 +vt 0.360812 -0.059331 +vt 0.414103 -0.059331 +vt 0.439425 0.188148 +vt 0.311931 0.188148 +vt 0.311931 -0.059331 +vt 0.439425 -0.059331 +vt 0.414103 -0.059331 +vt 0.360812 -0.059331 +vt 0.563304 0.188148 +vt 0.690798 0.188148 +vt 0.690798 -0.059331 +vt 0.563304 -0.059331 +vt 0.414103 -0.059331 +vt 0.360812 -0.059331 +vt 0.311931 0.188148 +vt 0.439425 0.188148 +vt 0.439425 -0.059331 +vt 0.311931 -0.059331 +vt 0.439425 -0.059331 +vt 0.311931 -0.059331 +vt 0.587073 -0.059331 +vt 0.640364 -0.059331 +vt 0.690798 0.188148 +vt 0.563304 0.188148 +vt 0.563304 -0.059331 +vt 0.690798 -0.059331 +vt 0.360812 -0.059331 +vt 0.414103 -0.059331 +vt 0.563304 -0.059331 +vt 0.690798 -0.059331 +vt 0.311931 -0.059331 +vt 0.439425 -0.059331 +vt 0.439425 0.721721 +vt 0.375678 0.721721 +vt 0.375678 0.782114 +vt 0.439425 0.782114 +vt 0.375678 0.721721 +vt 0.439425 0.721721 +vt 0.439425 0.782114 +vt 0.375678 0.782114 +vt 0.563304 0.782114 +vt 0.439425 0.805494 +vt 0.563304 0.805494 +vt 0.563304 0.721721 +vt 0.563304 0.782114 +vt 0.627051 0.721721 +vt 0.627051 0.782114 +vt 0.550783 0.721721 +vt 0.450394 0.721721 +vt 0.450394 0.782114 +vt 0.550783 0.782114 +vt 0.627051 0.721721 +vt 0.563304 0.721721 +vt 0.627051 0.782114 +vt 0.439425 0.540542 +vt 0.563304 0.540542 +vt 0.439425 0.600935 +vt 0.563304 0.600935 +vt 0.439425 0.661328 +vt 0.563304 0.661328 +vt 0.627051 0.540542 +vt 0.627051 0.600935 +vt 0.627051 0.661328 +vt 0.550783 0.480150 +vt 0.450394 0.480150 +vt 0.450394 0.540542 +vt 0.550783 0.540542 +vt 0.375678 0.550783 +vt 0.375678 0.450394 +vt 0.280691 0.450394 +vt 0.280691 0.550783 +vt 0.550783 0.600935 +vt 0.450394 0.600935 +vt 0.450394 0.661328 +vt 0.550783 0.661328 +vt 0.375678 0.550783 +vt 0.375678 0.450394 +vt 0.179123 0.450394 +vt 0.179123 0.550783 +vt 0.627051 0.540542 +vt 0.563304 0.540542 +vt 0.627051 0.600935 +vt 0.563304 0.600935 +vt 0.627051 0.661328 +vt 0.563304 0.661328 +vt 0.439425 0.540542 +vt 0.439425 0.600935 +vt 0.439425 0.661328 +vt 0.375678 0.540542 +vt 0.375678 0.600935 +vt 0.375678 0.661328 +vt 0.375678 0.540542 +vt 0.375678 0.600935 +vt 0.375678 0.661328 +vt 0.450394 0.480150 +vt 0.550783 0.480150 +vt 0.550783 0.540542 +vt 0.450394 0.540542 +vt 0.280691 0.540542 +vt 0.280691 0.600935 +vt 0.450394 0.600935 +vt 0.550783 0.600935 +vt 0.550783 0.661328 +vt 0.450394 0.661328 +vt 0.179123 0.661328 +vt 0.179123 0.721721 +vt 0.280691 0.540542 +vt 0.280691 0.600935 +vt 0.214828 0.600935 +vt 0.214828 0.540542 +vt 0.724632 0.550783 +vt 0.724632 0.450394 +vt 0.780867 0.450394 +vt 0.780867 0.550783 +vt 0.627051 0.450394 +vt 0.627051 0.550783 +vt 0.724632 0.550783 +vt 0.724632 0.450394 +vt 0.724632 0.540542 +vt 0.724632 0.600935 +vt 0.375678 0.450394 +vt 0.375678 0.550783 +vt 0.280691 0.550783 +vt 0.280691 0.450394 +vt 0.627051 0.550783 +vt 0.627051 0.450394 +vt 0.724632 0.600935 +vt 0.724632 0.540542 +vt 0.627051 0.450394 +vt 0.627051 0.550783 +vt 0.823606 0.550783 +vt 0.823606 0.450394 +vt 0.179123 0.721721 +vt 0.179123 0.661328 +vt 0.375678 0.450394 +vt 0.375678 0.550783 +vt 0.179123 0.550783 +vt 0.179123 0.450394 +vt 0.823606 0.661328 +vt 0.823606 0.721721 +vt 0.627051 0.550783 +vt 0.627051 0.450394 +vt 0.823606 0.450394 +vt 0.823606 0.550783 +vt 0.823606 0.721721 +vt 0.823606 0.661328 +vt 0.577883 0.453146 +vt 0.577883 0.546854 +vt 0.422117 0.546854 +vt 0.422117 0.453146 +vt 0.450394 0.782114 +vt 0.550783 0.782114 +vt 0.550783 0.805494 +vt 0.450394 0.805494 +vt 0.563304 0.805494 +vt 0.439425 0.805494 +vt 0.550783 0.782114 +vt 0.450394 0.782114 +vt 0.450394 0.805494 +vt 0.550783 0.805494 +vt 0.439425 0.450394 +vt 0.563304 0.450394 +vt 0.588807 0.429726 +vt 0.413922 0.429726 +vt 0.563304 0.550783 +vt 0.588807 0.571450 +vt 0.439425 0.550783 +vt 0.413922 0.571450 +vt 0.571450 0.805494 +vt 0.429726 0.805494 +vt 0.429726 0.940669 +vt 0.571450 0.940669 +vt 0.253596 0.300319 +vt 0.253596 0.699681 +vt -0.000001 0.699681 +vt -0.000001 0.300319 +vt 0.588807 0.805494 +vt 0.413922 0.805494 +vt 0.413922 0.940669 +vt 0.588807 0.940669 +vt 0.429726 0.805494 +vt 0.571450 0.805494 +vt 0.571450 0.940669 +vt 0.429726 0.940669 +vt 0.413922 0.805494 +vt 0.588807 0.805494 +vt 0.588807 0.940669 +vt 0.413922 0.940669 +vt 0.422117 0.546854 +vt 0.577883 0.546854 +vt 0.577883 0.453146 +vt 0.422117 0.453146 +vt 0.450394 0.540542 +vt 0.550783 0.540542 +vt 0.550783 0.600935 +vt 0.450394 0.600935 +vt 0.780867 0.450394 +vt 0.780867 0.411108 +vt 0.724632 0.411108 +vt 0.780867 0.550783 +vt 0.780867 0.600935 +vt 0.780867 0.540542 +vt 0.780867 0.411108 +vt 0.724632 0.411108 +vt 0.724632 0.362760 +vt 0.780867 0.362760 +vt 0.450394 0.600935 +vt 0.450394 0.540542 +vt 0.411108 0.540542 +vt 0.411108 0.600935 +vt 0.411108 0.600935 +vt 0.411108 0.540542 +vt 0.724632 0.600935 +vt 0.724632 0.540542 +vt 0.780867 0.540542 +vt 0.780867 0.600935 +vt 0.724632 0.600935 +vt 0.724632 0.540542 +vt 0.066173 0.540542 +vt 0.066173 0.600935 +vt 0.780867 0.362760 +vt 0.724632 0.362760 +vt 0.362760 0.600935 +vt 0.362760 0.540542 +vt 0.411108 0.600935 +vt 0.411108 0.540542 +vt 0.362760 0.540542 +vt 0.362760 0.600935 +vt 0.066173 0.362760 +vt 0.066173 0.411108 +vt 0.066173 0.411108 +vt 0.066173 0.362760 +vt 0.066173 0.600935 +vt 0.066173 0.540542 +vt 0.550783 0.540542 +vt 0.450394 0.540542 +vt 0.450394 0.600935 +vt 0.550783 0.600935 +vt 0.214828 0.550783 +vt 0.214828 0.450394 +vt 0.214828 0.550783 +vt 0.214828 0.583205 +vt 0.280691 0.583205 +vt 0.214828 0.450394 +vt 0.214828 0.624655 +vt 0.280691 0.624655 +vt 0.583205 0.600935 +vt 0.583205 0.540542 +vt 0.550783 0.600935 +vt 0.550783 0.540542 +vt 0.583205 0.540542 +vt 0.583205 0.600935 +vt 0.280691 0.583205 +vt 0.214828 0.583205 +vt 0.280691 0.600935 +vt 0.280691 0.540542 +vt 0.214828 0.540542 +vt 0.214828 0.600935 +vt 0.624655 0.600935 +vt 0.624655 0.540542 +vt 0.280691 0.624655 +vt 0.214828 0.624655 +vt 0.860134 0.600935 +vt 0.860134 0.540542 +vt 0.583205 0.600935 +vt 0.583205 0.540542 +vt 0.624655 0.540542 +vt 0.624655 0.600935 +vt 0.860134 0.583205 +vt 0.860134 0.624655 +vt 0.860134 0.624655 +vt 0.860134 0.583205 +vt 0.280691 0.600935 +vt 0.280691 0.540542 +vt 0.860134 0.540542 +vt 0.860134 0.600935 +vt 1.000000 0.094809 +vt 1.000000 0.905191 +vt 0.000000 0.905191 +vt 0.000000 0.094809 +vt 0.746405 0.699681 +vt 0.746405 0.300319 +vt 0.999999 0.300319 +vt 0.999999 0.699681 +vt 0.000000 0.905191 +vt 1.000000 0.905191 +vt 1.000000 0.094809 +vt 0.000000 0.094809 +vt 0.868542 -0.000000 +vt 0.131458 -0.000000 +vt 0.131458 0.209808 +vt 0.868542 0.209808 +vt 0.868542 0.790192 +vt 0.131458 0.790192 +vt 0.131458 1.000000 +vt 0.868542 1.000000 +vt 0.131455 0.790192 +vt 0.868546 0.790192 +vt 0.868546 0.209808 +vt 0.131455 0.209808 +vt 0.868546 -0.000000 +vt 0.131455 -0.000000 +vt 0.868546 1.000000 +vt 0.131455 1.000000 +vn -0.0000 -0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 -0.0000 +vn 1.0000 0.0000 -0.0000 +vn 0.0000 -1.0000 0.0000 +g body_body_body +usemtl body +s off +f 266/613/13 269/614/13 262/615/13 322/616/13 257/617/13 +f 268/618/14 267/619/14 260/620/14 324/621/14 261/622/14 +f 265/623/13 266/613/13 257/617/13 258/624/13 +f 353/625/15 352/626/15 332/627/15 330/628/15 +f 323/629/16 321/630/16 264/631/16 263/632/16 +f 324/633/16 322/634/16 262/635/16 261/636/16 +f 271/637/17 270/638/17 263/639/17 264/640/17 +f 267/619/14 272/641/14 259/642/14 260/620/14 +f 270/643/13 265/623/13 258/624/13 323/644/13 263/645/13 +f 272/641/14 271/646/14 264/647/14 321/648/14 259/642/14 +f 269/649/15 268/650/15 261/651/15 262/652/15 +f 254/653/15 253/654/15 268/650/15 269/649/15 +f 266/655/17 249/656/17 278/657/17 284/658/17 +f 269/659/16 266/660/16 284/661/16 286/662/16 +f 256/663/17 255/664/17 270/638/17 271/637/17 +f 272/665/15 251/666/15 276/667/15 288/668/15 +f 250/669/15 265/670/15 273/671/15 274/672/15 +f 284/658/17 278/657/17 294/673/17 300/674/17 +f 285/675/16 282/676/16 298/677/16 301/678/16 +f 275/679/17 283/680/17 299/681/17 291/682/17 +f 273/683/16 287/684/16 303/685/16 289/686/16 +f 271/687/16 272/688/16 288/689/16 283/690/16 +f 252/691/17 267/692/17 285/693/17 280/694/17 +f 268/650/15 253/654/15 281/695/15 282/696/15 +f 265/697/16 270/698/16 287/684/16 273/683/16 +f 254/653/15 269/649/15 286/699/15 277/700/15 +f 270/638/17 255/664/17 279/701/17 287/702/17 +f 256/663/17 271/637/17 283/680/17 275/679/17 +f 267/703/16 268/704/16 282/676/16 285/675/16 +f 292/705/14 291/706/14 299/707/14 304/708/14 +f 295/709/13 290/710/13 289/711/13 303/712/13 +f 297/713/14 296/714/14 301/715/14 298/716/14 +f 294/717/13 293/718/13 302/719/13 300/720/13 +f 274/672/15 273/671/15 289/721/15 290/722/15 +f 286/662/16 284/661/16 300/723/16 302/724/16 +f 280/694/17 285/693/17 301/725/17 296/726/17 +f 292/727/15 276/667/15 306/728/15 314/729/15 +f 277/700/15 286/699/15 302/730/15 293/731/15 +f 275/679/17 291/682/17 313/732/17 305/733/17 +f 287/702/17 279/701/17 295/734/17 303/735/17 +f 296/714/14 297/713/14 320/736/14 319/737/14 +f 288/668/15 276/667/15 292/727/15 304/738/15 +f 280/694/17 296/726/17 319/739/17 311/740/17 +f 283/690/16 288/689/16 304/741/16 299/742/16 +f 282/696/15 281/695/15 297/743/15 298/744/15 +f 306/745/18 305/746/18 313/747/18 314/748/18 +f 308/749/18 307/750/18 315/751/18 316/752/18 +f 309/753/18 310/754/18 318/755/18 317/756/18 +f 312/757/18 311/758/18 319/759/18 320/760/18 +f 277/700/15 293/731/15 315/761/15 307/762/15 +f 276/763/13 275/764/13 305/765/13 306/766/13 +f 295/734/17 279/701/17 309/767/17 317/768/17 +f 278/769/14 277/770/14 307/771/14 308/772/14 +f 294/673/17 278/657/17 308/773/17 316/774/17 +f 279/775/14 274/776/14 310/777/14 309/778/14 +f 291/706/14 292/705/14 314/779/14 313/780/14 +f 297/743/15 281/695/15 312/781/15 320/782/15 +f 281/783/13 280/784/13 311/785/13 312/786/13 +f 274/672/15 290/722/15 318/787/15 310/788/15 +f 293/718/13 294/717/13 316/789/13 315/790/13 +f 290/710/13 295/709/13 317/791/13 318/792/13 +f 265/670/15 250/669/15 251/666/15 272/665/15 +f 266/655/17 267/692/17 252/691/17 249/656/17 +f 345/793/14 344/794/14 329/795/14 327/796/14 +f 333/797/13 340/798/13 326/799/13 331/800/13 +f 328/801/14 327/796/14 383/802/14 384/803/14 +f 340/798/13 360/804/13 325/805/13 326/799/13 +f 360/804/13 353/806/13 330/807/13 325/805/13 +f 344/808/17 333/809/17 331/810/17 329/811/17 +f 352/812/14 364/813/14 328/801/14 332/814/14 +f 364/813/14 345/793/14 327/796/14 328/801/14 +f 260/620/14 259/642/14 348/815/14 361/816/14 +f 361/816/14 348/815/14 347/817/14 362/818/14 +f 362/818/14 347/817/14 346/819/14 363/820/14 +f 363/820/14 346/819/14 345/793/14 364/813/14 +f 324/621/14 260/620/14 361/816/14 349/821/14 +f 349/821/14 361/816/14 362/818/14 350/822/14 +f 350/822/14 362/818/14 363/820/14 351/823/14 +f 351/823/14 363/820/14 364/813/14 352/812/14 +f 321/824/17 323/825/17 336/826/17 341/827/17 +f 341/828/18 336/829/18 366/830/18 367/831/18 +f 342/832/17 335/833/17 334/834/17 343/835/17 +f 343/836/18 334/837/18 374/838/18 375/839/18 +f 257/617/13 322/616/13 356/840/13 357/841/13 +f 357/841/13 356/840/13 355/842/13 358/843/13 +f 358/843/13 355/842/13 354/844/13 359/845/13 +f 359/845/13 354/844/13 353/806/13 360/804/13 +f 258/624/13 257/617/13 357/841/13 337/846/13 +f 337/846/13 357/841/13 358/843/13 338/847/13 +f 338/847/13 358/843/13 359/845/13 339/848/13 +f 339/848/13 359/845/13 360/804/13 340/798/13 +f 323/644/13 258/624/13 337/846/13 336/849/13 +f 336/849/13 337/846/13 338/847/13 335/850/13 +f 335/850/13 338/847/13 339/848/13 334/851/13 +f 334/851/13 339/848/13 340/798/13 333/797/13 +f 259/642/14 321/648/14 341/852/14 348/815/14 +f 348/815/14 341/852/14 342/853/14 347/817/14 +f 347/817/14 342/853/14 343/854/14 346/819/14 +f 346/819/14 343/854/14 344/794/14 345/793/14 +f 322/855/15 324/856/15 349/857/15 356/858/15 +f 342/853/14 341/852/14 367/859/14 368/860/14 +f 355/861/15 350/862/15 351/863/15 354/864/15 +f 344/794/14 343/854/14 375/865/14 376/866/14 +f 366/867/13 365/868/13 409/869/13 410/870/13 +f 370/871/16 371/872/16 395/873/16 394/874/16 +f 356/875/18 349/876/18 369/877/18 372/878/18 +f 336/849/13 335/850/13 365/868/13 366/867/13 +f 355/842/13 356/840/13 372/879/13 371/880/13 +f 335/881/16 342/882/16 368/883/16 365/884/16 +f 350/885/16 355/886/16 371/872/16 370/871/16 +f 349/821/14 350/822/14 370/887/14 369/888/14 +f 354/889/18 351/890/18 377/891/18 380/892/18 +f 334/851/13 333/797/13 373/893/13 374/894/13 +f 333/895/16 344/896/16 376/897/16 373/898/16 +f 353/806/13 354/844/13 380/899/13 379/900/13 +f 352/901/16 353/902/16 379/903/16 378/904/16 +f 351/823/14 352/812/14 378/905/14 377/906/14 +f 377/907/15 378/908/15 379/909/15 380/910/15 +f 325/911/15 328/912/15 384/913/15 381/914/15 +f 326/799/13 325/805/13 381/915/13 382/916/13 +f 327/917/17 326/918/17 382/919/17 383/920/17 +f 382/921/18 381/922/18 385/923/18 386/924/18 +f 381/922/18 384/925/18 388/926/18 385/923/18 +f 384/925/18 383/927/18 387/928/18 388/926/18 +f 383/927/18 382/921/18 386/924/18 387/928/18 +f 387/929/17 386/930/17 390/931/17 391/932/17 +f 326/933/16 327/934/16 329/935/16 331/936/16 +f 388/937/14 387/938/14 391/939/14 392/940/14 +f 385/941/15 388/942/15 392/943/15 389/944/15 +f 386/945/13 385/946/13 389/947/13 390/948/13 +f 373/949/17 376/950/17 375/951/17 374/952/17 +f 396/953/15 393/954/15 394/955/15 395/956/15 +f 372/878/18 396/957/18 400/958/18 398/959/18 +f 372/878/18 369/877/18 393/960/18 396/957/18 +f 369/888/14 370/887/14 394/961/14 393/962/14 +f 399/963/16 397/964/16 401/965/16 403/966/16 +f 395/873/16 371/872/16 397/964/16 399/963/16 +f 371/967/17 372/968/17 398/969/17 397/970/17 +f 396/953/15 395/956/15 399/971/15 400/972/15 +f 401/973/13 402/974/13 404/975/13 403/976/13 +f 397/977/14 398/978/14 406/979/14 405/980/14 +f 398/959/18 400/958/18 404/981/18 402/982/18 +f 400/972/15 399/971/15 403/983/15 404/984/15 +f 405/985/17 406/986/17 408/987/17 407/988/17 +f 398/959/18 402/982/18 408/989/18 406/990/18 +f 401/965/16 397/964/16 405/991/16 407/992/16 +f 402/974/13 401/973/13 407/993/13 408/994/13 +f 411/995/17 410/996/17 409/997/17 412/998/17 +f 365/884/16 368/883/16 412/999/16 409/1000/16 +f 367/831/18 411/1001/18 415/1002/18 413/1003/18 +f 367/831/18 366/830/18 410/1004/18 411/1001/18 +f 413/1003/18 415/1002/18 419/1005/18 417/1006/18 +f 411/995/17 412/998/17 416/1007/17 415/1008/17 +f 368/1009/15 367/1010/15 413/1011/15 414/1012/15 +f 412/999/16 368/883/16 414/1013/16 416/1014/16 +f 418/1015/14 417/1016/14 419/1017/14 420/1018/14 +f 415/1008/17 416/1007/17 420/1019/17 419/1020/17 +f 416/1014/16 414/1013/16 418/1021/16 420/1022/16 +f 417/1016/14 418/1015/14 424/1023/14 423/1024/14 +f 422/1025/15 421/1026/15 423/1027/15 424/1028/15 +f 418/1021/16 414/1013/16 422/1029/16 424/1030/16 +f 413/1003/18 417/1006/18 423/1031/18 421/1032/18 +f 414/1033/13 413/1034/13 421/1035/13 422/1036/13 +f 389/1037/16 392/1038/16 391/1039/16 390/1040/16 +f 328/1041/16 325/1042/16 330/1043/16 332/1044/16 +f 272/1045/18 267/1046/18 266/1047/18 265/1048/18 +f 277/1049/18 278/1050/18 249/1051/18 254/1052/18 +f 253/1053/18 254/1052/18 249/1051/18 252/1054/18 +f 280/1055/18 281/1056/18 253/1053/18 252/1054/18 +f 256/1057/18 251/1058/18 250/1059/18 255/1060/18 +f 274/1061/18 279/1062/18 255/1060/18 250/1059/18 +f 276/1063/18 251/1058/18 256/1057/18 275/1064/18 +o bronze +v -0.253720 0.185648 0.022466 +v -0.253720 0.263734 0.022466 +v -0.253720 0.263734 -0.021125 +v -0.253720 0.185648 -0.021125 +v -0.300567 0.185648 0.022466 +v -0.300567 0.263734 0.022466 +v -0.300567 0.263734 -0.021124 +v -0.300567 0.185648 -0.021124 +v 0.246495 0.262724 -0.022435 +v 0.246495 0.186657 -0.022435 +v 0.246495 0.186657 0.023776 +v 0.246495 0.262724 0.023776 +v 0.294296 0.262724 -0.022435 +v 0.294296 0.186657 -0.022435 +v 0.294296 0.186657 0.023776 +v 0.294296 0.262724 0.023776 +vt 0.779118 -0.000000 +vt 0.220882 0.000001 +vt 0.220882 1.000000 +vt 0.779118 1.000000 +vt 0.285735 0.220882 +vt 0.285735 0.779118 +vt 0.885676 0.779118 +vt 0.885676 0.220882 +vt 0.000000 0.034757 +vt 1.000000 0.034757 +vt 1.000000 0.965243 +vt 0.000000 0.965243 +vt 0.220882 0.128582 +vt 0.779118 0.128582 +vt 0.779118 1.128582 +vt 0.220882 1.128582 +vt 0.285735 0.128582 +vt 0.285735 1.128582 +vt 0.885676 1.128582 +vt 0.885676 0.128582 +vt 0.285735 1.128582 +vt 0.285735 0.128582 +vt 0.885676 0.128582 +vt 0.885676 1.128582 +vt 0.724426 -0.129151 +vt 0.724426 0.870849 +vt 0.096033 0.870849 +vt 0.096033 -0.129151 +vt -0.000000 0.983381 +vt 1.000000 0.983381 +vt 1.000000 0.016619 +vt -0.000000 0.016619 +vt 0.803753 -0.129151 +vt 0.196247 -0.129151 +vt 0.196247 0.870849 +vt 0.803753 0.870849 +vt 0.724426 0.196247 +vt 0.724426 0.803753 +vt 0.096033 0.803753 +vt 0.096033 0.196247 +vt 0.724426 0.870849 +vt 0.724426 -0.129151 +vt 0.096033 -0.129151 +vt 0.096033 0.870849 +vt 0.196247 1.000000 +vt 0.196247 0.000000 +vt 0.803753 -0.000000 +vt 0.803753 1.000000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn -0.0000 0.0000 -1.0000 +g bronze_bronze_bronze +usemtl bronze +s off +f 425/1065/19 428/1066/19 427/1067/19 426/1068/19 +f 428/1069/20 425/1070/20 429/1071/20 432/1072/20 +f 427/1073/21 431/1074/21 430/1075/21 426/1076/21 +f 432/1077/22 429/1078/22 430/1079/22 431/1080/22 +f 425/1081/23 426/1082/23 430/1083/23 429/1084/23 +f 427/1085/24 428/1086/24 432/1087/24 431/1088/24 +f 434/1089/24 433/1090/24 437/1091/24 438/1092/24 +f 439/1093/20 435/1094/20 434/1095/20 438/1096/20 +f 439/1097/19 438/1098/19 437/1099/19 440/1100/19 +f 433/1101/21 436/1102/21 440/1103/21 437/1104/21 +f 436/1105/23 435/1106/23 439/1107/23 440/1108/23 +f 433/1109/22 434/1110/22 435/1111/22 436/1112/22 +o tin +v -0.250998 0.279734 0.026300 +v -0.250998 0.279734 -0.017291 +v -0.297845 0.279734 0.026300 +v -0.297845 0.279734 -0.017291 +v -0.250998 0.520259 0.026300 +v -0.250998 0.520259 -0.017291 +v -0.297845 0.520259 0.026300 +v -0.297845 0.520259 -0.017291 +v 0.249218 0.163738 -0.018601 +v 0.249218 0.163738 0.027610 +v 0.297018 0.163738 -0.018601 +v 0.297018 0.163738 0.027610 +v 0.249218 -0.188531 -0.018601 +v 0.249218 -0.188531 0.027610 +v 0.297018 -0.188531 -0.018601 +v 0.297018 -0.188531 0.027610 +vt 0.469250 0.629123 +vt 0.530750 0.629123 +vt 0.530750 0.968469 +vt 0.469250 0.968469 +vt 0.853202 0.530750 +vt 0.853202 0.469250 +vt 0.919296 0.469250 +vt 0.919296 0.530750 +vt 0.919296 0.629123 +vt 0.853202 0.629123 +vt 0.853202 0.968469 +vt 0.919296 0.968469 +vt 0.530750 0.629123 +vt 0.469250 0.629123 +vt 0.469250 0.968469 +vt 0.530750 0.968469 +vt 0.853202 0.629123 +vt 0.919296 0.629123 +vt 0.919296 0.968469 +vt 0.853202 0.968469 +vt 0.147471 0.465470 +vt 0.080032 0.465470 +vt 0.080032 -0.031531 +vt 0.147471 -0.031531 +vt 0.147471 0.532599 +vt 0.147471 0.467401 +vt 0.080032 0.467401 +vt 0.080032 0.532599 +vt 0.532599 0.465470 +vt 0.467401 0.465470 +vt 0.467401 -0.031531 +vt 0.532599 -0.031531 +vt 0.080032 0.465470 +vt 0.147471 0.465470 +vt 0.147471 -0.031531 +vt 0.080032 -0.031531 +vt 0.467401 0.465470 +vt 0.532599 0.465470 +vt 0.532599 -0.031531 +vt 0.467401 -0.031531 +vt 1.000000 0.983381 +vt -0.000000 0.983381 +vt -0.000000 0.016619 +vt 1.000000 0.016619 +vt 0.000000 0.034757 +vt 0.000000 0.965243 +vt 1.000000 0.965243 +vt 1.000000 0.034757 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn -0.0000 -1.0000 -0.0000 +g tin_tin_tin +usemtl tin +s off +f 444/1113/25 443/1114/25 447/1115/25 448/1116/25 +f 445/1117/26 446/1118/26 448/1119/26 447/1120/26 +f 443/1121/27 441/1122/27 445/1123/27 447/1124/27 +f 441/1125/28 442/1126/28 446/1127/28 445/1128/28 +f 442/1129/29 444/1130/29 448/1131/29 446/1132/29 +f 449/1133/29 451/1134/29 455/1135/29 453/1136/29 +f 454/1137/30 453/1138/30 455/1139/30 456/1140/30 +f 450/1141/25 449/1142/25 453/1143/25 454/1144/25 +f 452/1145/27 450/1146/27 454/1147/27 456/1148/27 +f 451/1149/28 452/1150/28 456/1151/28 455/1152/28 +f 450/1153/26 452/1154/26 451/1155/26 449/1156/26 +f 442/1157/30 441/1158/30 443/1159/30 444/1160/30 Index: potions.lua ================================================================== --- potions.lua +++ potions.lua @@ -99,16 +99,17 @@ sorcery_draught = 1; sorcery_magical = 1; sorcery_usable_magic = 1; }; on_use = function(stack, user, pointat) - if potion.effect(stack, user) == false then return nil end + local pproto = stack:get_definition()._proto + if potion.effect(stack, user, pproto) == false then return nil end local meta = stack:get_meta() local force = meta:get_int('force'); minetest.add_particlespawner { amount = 200 + (30 * force); - time = stack:get_definition()._proto:duration(meta); + time = pproto:duration(meta); minpos = { x = -0.1; y = 0; z = -0.1; }; maxpos = { x = 0.1; y = 2; z = 0.1; }; minvel = { x = -0.1; y = 0; z = -0.1; }; maxvel = { x = 0.1; y = 0; z = 0.1; }; minacc = { x = 0; y = 0.1; z = 0; }; Index: recipes.lua ================================================================== --- recipes.lua +++ recipes.lua @@ -361,10 +361,36 @@ {'basic_materials:steel_bar','xpanes:bar_flat','basic_materials:steel_bar'}; {'sorcery:gem_amethyst','sorcery:beam_generator','sorcery:gem_amethyst'}; {'basic_materials:steel_bar','default:tin_ingot','basic_materials:steel_bar'}; } } + +minetest.register_craft { + output = 'sorcery:gravity_manipulator'; + recipe = { + {'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'}; + {'sorcery:inverter_coil','sorcery:core_counterpraxic','sorcery:levitanium_ingot'}; + {'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'}; + }; +} + +minetest.register_craft { + output = 'sorcery:gravitator_off'; + recipe = { + {'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'}; + {'xpanes:pane_flat','sorcery:gravity_manipulator','basic_materials:plastic_sheet'}; + {'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'}; + }; +} + +minetest.register_craftitem('sorcery:gravity_manipulator', { + description = 'Gravity Manipulator'; + inventory_image = 'sorcery_gravity_manipulator.png'; + groups = { + sorcery_magitech = 1; + }; +}) minetest.register_craftitem('sorcery:tuning_disc',{ description = 'Tuning Disc'; inventory_image = 'sorcery_tuning_disc.png'; groups = { ADDED textures/sorcery_aluminum_ore.png Index: textures/sorcery_aluminum_ore.png ================================================================== --- textures/sorcery_aluminum_ore.png +++ textures/sorcery_aluminum_ore.png cannot compute difference between binary files ADDED textures/sorcery_cobalt_ore.png Index: textures/sorcery_cobalt_ore.png ================================================================== --- textures/sorcery_cobalt_ore.png +++ textures/sorcery_cobalt_ore.png cannot compute difference between binary files Index: textures/sorcery_core_counterpraxic.png ================================================================== --- textures/sorcery_core_counterpraxic.png +++ textures/sorcery_core_counterpraxic.png cannot compute difference between binary files ADDED textures/sorcery_enchant_glimmer.png Index: textures/sorcery_enchant_glimmer.png ================================================================== --- textures/sorcery_enchant_glimmer.png +++ textures/sorcery_enchant_glimmer.png cannot compute difference between binary files ADDED textures/sorcery_enchant_glitter.png Index: textures/sorcery_enchant_glitter.png ================================================================== --- textures/sorcery_enchant_glitter.png +++ textures/sorcery_enchant_glitter.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_panel_crush.png Index: textures/sorcery_gravitator_panel_crush.png ================================================================== --- textures/sorcery_gravitator_panel_crush.png +++ textures/sorcery_gravitator_panel_crush.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_panel_lift.png Index: textures/sorcery_gravitator_panel_lift.png ================================================================== --- textures/sorcery_gravitator_panel_lift.png +++ textures/sorcery_gravitator_panel_lift.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_panel_off.png Index: textures/sorcery_gravitator_panel_off.png ================================================================== --- textures/sorcery_gravitator_panel_off.png +++ textures/sorcery_gravitator_panel_off.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_panel_slow.png Index: textures/sorcery_gravitator_panel_slow.png ================================================================== --- textures/sorcery_gravitator_panel_slow.png +++ textures/sorcery_gravitator_panel_slow.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_panel_stop.png Index: textures/sorcery_gravitator_panel_stop.png ================================================================== --- textures/sorcery_gravitator_panel_stop.png +++ textures/sorcery_gravitator_panel_stop.png cannot compute difference between binary files ADDED textures/sorcery_gravitator_side.png Index: textures/sorcery_gravitator_side.png ================================================================== --- textures/sorcery_gravitator_side.png +++ textures/sorcery_gravitator_side.png cannot compute difference between binary files ADDED textures/sorcery_gravity_manipulator.png Index: textures/sorcery_gravity_manipulator.png ================================================================== --- textures/sorcery_gravity_manipulator.png +++ textures/sorcery_gravity_manipulator.png cannot compute difference between binary files ADDED textures/sorcery_iridium_ore.png Index: textures/sorcery_iridium_ore.png ================================================================== --- textures/sorcery_iridium_ore.png +++ textures/sorcery_iridium_ore.png cannot compute difference between binary files ADDED textures/sorcery_levitanium_ore.png Index: textures/sorcery_levitanium_ore.png ================================================================== --- textures/sorcery_levitanium_ore.png +++ textures/sorcery_levitanium_ore.png cannot compute difference between binary files ADDED textures/sorcery_lithium_ore.png Index: textures/sorcery_lithium_ore.png ================================================================== --- textures/sorcery_lithium_ore.png +++ textures/sorcery_lithium_ore.png cannot compute difference between binary files ADDED textures/sorcery_platinum_ore.png Index: textures/sorcery_platinum_ore.png ================================================================== --- textures/sorcery_platinum_ore.png +++ textures/sorcery_platinum_ore.png cannot compute difference between binary files ADDED textures/sorcery_silver_ore.png Index: textures/sorcery_silver_ore.png ================================================================== --- textures/sorcery_silver_ore.png +++ textures/sorcery_silver_ore.png cannot compute difference between binary files ADDED textures/sorcery_tungsten_ore.png Index: textures/sorcery_tungsten_ore.png ================================================================== --- textures/sorcery_tungsten_ore.png +++ textures/sorcery_tungsten_ore.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_0.png Index: textures/sorcery_ui_manaring_0.png ================================================================== --- textures/sorcery_ui_manaring_0.png +++ textures/sorcery_ui_manaring_0.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_1.png Index: textures/sorcery_ui_manaring_1.png ================================================================== --- textures/sorcery_ui_manaring_1.png +++ textures/sorcery_ui_manaring_1.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_10.png Index: textures/sorcery_ui_manaring_10.png ================================================================== --- textures/sorcery_ui_manaring_10.png +++ textures/sorcery_ui_manaring_10.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_11.png Index: textures/sorcery_ui_manaring_11.png ================================================================== --- textures/sorcery_ui_manaring_11.png +++ textures/sorcery_ui_manaring_11.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_12.png Index: textures/sorcery_ui_manaring_12.png ================================================================== --- textures/sorcery_ui_manaring_12.png +++ textures/sorcery_ui_manaring_12.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_13.png Index: textures/sorcery_ui_manaring_13.png ================================================================== --- textures/sorcery_ui_manaring_13.png +++ textures/sorcery_ui_manaring_13.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_14.png Index: textures/sorcery_ui_manaring_14.png ================================================================== --- textures/sorcery_ui_manaring_14.png +++ textures/sorcery_ui_manaring_14.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_15.png Index: textures/sorcery_ui_manaring_15.png ================================================================== --- textures/sorcery_ui_manaring_15.png +++ textures/sorcery_ui_manaring_15.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_16.png Index: textures/sorcery_ui_manaring_16.png ================================================================== --- textures/sorcery_ui_manaring_16.png +++ textures/sorcery_ui_manaring_16.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_2.png Index: textures/sorcery_ui_manaring_2.png ================================================================== --- textures/sorcery_ui_manaring_2.png +++ textures/sorcery_ui_manaring_2.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_3.png Index: textures/sorcery_ui_manaring_3.png ================================================================== --- textures/sorcery_ui_manaring_3.png +++ textures/sorcery_ui_manaring_3.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_4.png Index: textures/sorcery_ui_manaring_4.png ================================================================== --- textures/sorcery_ui_manaring_4.png +++ textures/sorcery_ui_manaring_4.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_5.png Index: textures/sorcery_ui_manaring_5.png ================================================================== --- textures/sorcery_ui_manaring_5.png +++ textures/sorcery_ui_manaring_5.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_6.png Index: textures/sorcery_ui_manaring_6.png ================================================================== --- textures/sorcery_ui_manaring_6.png +++ textures/sorcery_ui_manaring_6.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_7.png Index: textures/sorcery_ui_manaring_7.png ================================================================== --- textures/sorcery_ui_manaring_7.png +++ textures/sorcery_ui_manaring_7.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_8.png Index: textures/sorcery_ui_manaring_8.png ================================================================== --- textures/sorcery_ui_manaring_8.png +++ textures/sorcery_ui_manaring_8.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_9.png Index: textures/sorcery_ui_manaring_9.png ================================================================== --- textures/sorcery_ui_manaring_9.png +++ textures/sorcery_ui_manaring_9.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_0.png Index: textures/sorcery_ui_manaring_flash_0.png ================================================================== --- textures/sorcery_ui_manaring_flash_0.png +++ textures/sorcery_ui_manaring_flash_0.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_1.png Index: textures/sorcery_ui_manaring_flash_1.png ================================================================== --- textures/sorcery_ui_manaring_flash_1.png +++ textures/sorcery_ui_manaring_flash_1.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_10.png Index: textures/sorcery_ui_manaring_flash_10.png ================================================================== --- textures/sorcery_ui_manaring_flash_10.png +++ textures/sorcery_ui_manaring_flash_10.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_11.png Index: textures/sorcery_ui_manaring_flash_11.png ================================================================== --- textures/sorcery_ui_manaring_flash_11.png +++ textures/sorcery_ui_manaring_flash_11.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_12.png Index: textures/sorcery_ui_manaring_flash_12.png ================================================================== --- textures/sorcery_ui_manaring_flash_12.png +++ textures/sorcery_ui_manaring_flash_12.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_13.png Index: textures/sorcery_ui_manaring_flash_13.png ================================================================== --- textures/sorcery_ui_manaring_flash_13.png +++ textures/sorcery_ui_manaring_flash_13.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_14.png Index: textures/sorcery_ui_manaring_flash_14.png ================================================================== --- textures/sorcery_ui_manaring_flash_14.png +++ textures/sorcery_ui_manaring_flash_14.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_15.png Index: textures/sorcery_ui_manaring_flash_15.png ================================================================== --- textures/sorcery_ui_manaring_flash_15.png +++ textures/sorcery_ui_manaring_flash_15.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_16.png Index: textures/sorcery_ui_manaring_flash_16.png ================================================================== --- textures/sorcery_ui_manaring_flash_16.png +++ textures/sorcery_ui_manaring_flash_16.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_2.png Index: textures/sorcery_ui_manaring_flash_2.png ================================================================== --- textures/sorcery_ui_manaring_flash_2.png +++ textures/sorcery_ui_manaring_flash_2.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_3.png Index: textures/sorcery_ui_manaring_flash_3.png ================================================================== --- textures/sorcery_ui_manaring_flash_3.png +++ textures/sorcery_ui_manaring_flash_3.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_4.png Index: textures/sorcery_ui_manaring_flash_4.png ================================================================== --- textures/sorcery_ui_manaring_flash_4.png +++ textures/sorcery_ui_manaring_flash_4.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_5.png Index: textures/sorcery_ui_manaring_flash_5.png ================================================================== --- textures/sorcery_ui_manaring_flash_5.png +++ textures/sorcery_ui_manaring_flash_5.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_6.png Index: textures/sorcery_ui_manaring_flash_6.png ================================================================== --- textures/sorcery_ui_manaring_flash_6.png +++ textures/sorcery_ui_manaring_flash_6.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_7.png Index: textures/sorcery_ui_manaring_flash_7.png ================================================================== --- textures/sorcery_ui_manaring_flash_7.png +++ textures/sorcery_ui_manaring_flash_7.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_8.png Index: textures/sorcery_ui_manaring_flash_8.png ================================================================== --- textures/sorcery_ui_manaring_flash_8.png +++ textures/sorcery_ui_manaring_flash_8.png cannot compute difference between binary files ADDED textures/sorcery_ui_manaring_flash_9.png Index: textures/sorcery_ui_manaring_flash_9.png ================================================================== --- textures/sorcery_ui_manaring_flash_9.png +++ textures/sorcery_ui_manaring_flash_9.png cannot compute difference between binary files Index: tools.lua ================================================================== --- tools.lua +++ tools.lua @@ -24,24 +24,30 @@ local btl = ItemStack('vessels:glass_bottle') if not inv:contains_item('main', btl) then return nil end - local damage local blood local target + local caps if selfharm then - damage = 3 blood = ItemStack('sorcery:blood 1') target = user + caps = { + full_punch_interval = 1.0, + damage_groups = { fleshy = 3 }, + } else if not minetest.is_player(pointat) then return nil end - damage = 5 - blood = ItemStack('sorcery:blood 3') target = pointat + caps = stack:get_tool_capabilities() + blood = ItemStack { + name = 'sorcery:blood'; + count = math.floor(caps.damage_groups.fleshy * 1.5); + } end local pos = target:get_pos() pos.y = pos.y + 1.5 local wear = 65535 / dagger_uses @@ -48,14 +54,11 @@ stack:add_wear(wear) inv:remove_item('main',btl) inv:add_item('main',blood) - target:punch(user, 1.0, { - full_punch_interval = 1.0, - damage_groups = { fleshy = damage }, - }, nil) + target:punch(user, 1.0, caps, nil) for i=0, 48 do minetest.add_particle{ texture = 'sorcery_blood_' .. math.random(5) .. '.png', size = 7, expirationtime = 2 + math.random(), @@ -72,14 +75,18 @@ z = 0 } } end - if math.random(3) == 1 then + if math.random(3 + sorcery.enchant.strength(stack,'sanctify') * 6) == 1 then -- we've used up the consecration local unholy = ItemStack("sorcery:dagger") unholy:set_wear(stack:get_wear()) + local ench = sorcery.enchant.get(stack) + if #ench.spells > 0 then + sorcery.enchant.set(unholy,ench) + end return unholy else -- consecration is holding, return dagger as-is return stack end