Comment: | add blood god, add gravitator, add hand-drawn ore images, add mana hud display for enchanted items, various tweaks and enhancements |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f165d9e39fcec9a2efe6483af706d887 |
User & Date: | lexi on 2020-09-24 23:07:33 |
Other Links: | manifest | tags |
2020-09-26
| ||
18:49 | add writing stand for editing codexes; add scissors, ink, erasure fluid, pens; touch up codex UI; add many recipe notes; add craft divination type for crafttools; defuckulate fucktarded crafttool impl; enhance table library with missing features like lua's table.unpack; many bug fixes and enhancements; blood for the blood god check-in: 72eebac4bc user: lexi tags: trunk | |
2020-09-24
| ||
23:07 | add blood god, add gravitator, add hand-drawn ore images, add mana hud display for enchanted items, various tweaks and enhancements check-in: f165d9e39f user: lexi tags: trunk | |
2020-08-30
| ||
22:47 | updates check-in: 65759dbfde user: lexi tags: trunk | |
Added admin.lua version [41dac58ae7].
1 +minetest.register_chatcommand('enchants', { 2 + description = 'Log information about the currently held object\'s enchantment'; 3 + privs = { server = true }; 4 + func = function(caller,params) 5 + local tool = minetest.get_player_by_name(caller):get_wielded_item() 6 + minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool))) 7 + local binary = tool:get_meta():get_string('sorcery_enchantment_recs') 8 + local dumpout = '' 9 + for i=1,string.len(binary) do 10 + dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') 11 + end 12 + print(dumpout) 13 + end; 14 +}) 15 + 16 +-- minetest.register_chatcommand('hover', { 17 +-- description = 'Test hover effect'; 18 +-- privs = { fly = true }; 19 +-- func = function(caller,params) 20 +-- local player = minetest.get_player_by_name(caller) 21 +-- late.new_effect(player, { 22 +-- duration = 5; 23 +-- fall = 5; 24 +-- impacts = { 25 +-- gravity = -0.1; 26 +-- }; 27 +-- }) 28 +-- end; 29 +-- })
Modified altar.lua from [5335f5f5e0] to [f718356661].
1 1 local altar_item_offset = { 2 2 x = 0, y = -0.3, z = 0 3 3 } 4 + 5 +local range = function(min, max) 6 + local span = max - min 7 + local val = math.random() * span 8 + return val + min 9 +end 4 10 5 11 local get_altar_ent = function(pos) 6 12 for _, obj in pairs(minetest.get_objects_inside_radius(pos,0.9)) do 7 13 if not obj then goto nextloop end 8 14 local ent = obj:get_luaentity() 9 15 if not ent then goto nextloop end 10 16 ................................................................................ 98 104 local bestow = function(item,color) 99 105 if type(item) == 'string' then 100 106 item = ItemStack(item) 101 107 end 102 108 if color == nil then 103 109 color = sorcery.lib.color(god.color) 104 110 end 105 - local range = function(min, max) 106 - local span = max - min 107 - local val = math.random() * span 108 - return val + min 109 - end 110 111 for i=0,32 do 111 112 minetest.add_particle{ 112 113 pos = { 113 114 x = altar.x + range(-0.4,0.4); 114 115 z = altar.z + range(-0.4,0.4); 115 116 y = altar.y + range(-0.2,0.3); 116 117 }; ................................................................................ 217 218 -- loop through the list of things this god will consecrate and 218 219 -- check whether the item on the altar is any of them 219 220 for s, cons in pairs(god.consecrate) do 220 221 local cost, tx = cons[1], cons[2] 221 222 if type(tx) == "table" then 222 223 tx = tx[math.random(#tx)] 223 224 end 225 + -- preserve wear 224 226 local gift = ItemStack(tx) 225 227 local wear = stack:get_wear() 226 228 if wear > 0 then 227 229 gift:set_wear(wear) 228 230 end 231 + -- preserve meta 232 + gift:get_meta():from_table(stack:get_meta():to_table()) 233 + -- reflash enchantments to ensure label is accurate 234 + local ench = sorcery.enchant.get(gift) 235 + if #ench.spells > 0 then 236 + -- add a bit of energy as a gift? 237 + if math.random(math.ceil(god.stinginess * 0.5)) == 1 then 238 + local max = 0.05 * god.generosity 239 + ench.energy = ench.energy * range(0.7*max,max) 240 + end 241 + sorcery.enchant.set(gift,ench) 242 + end 229 243 if itemname == s then 230 244 if divine_favor >= cost then 231 245 bestow(gift) 232 246 divine_favor = divine_favor - cost 233 247 print(god.name..'has consecrated ' ..s.. ' into ' ..tx.. ', for the cost of ' ..cost.. ' points of divine favor') 234 248 goto refresh 235 249 end
Added context.lua version [4a989c354e].
1 +sorcery.ctx = { 2 + users = {}; 3 + get = function(uo) 4 + local name = uo:get_player_name() 5 + if sorcery.ctx.users[name] == nil then 6 + sorcery.ctx.users[name] = {} 7 + end 8 + return sorcery.ctx.users[name] 9 + end; 10 + stat = function(uo) 11 + local name = uo:get_player_name() 12 + return (sorcery.ctx.users[name] ~= nil) 13 + end; 14 +} 15 + 16 +minetest.register_on_leaveplayer(function(obj) 17 + local name = obj:get_player_name() 18 + if sorcery.ctx.users[name] then 19 + sorcery.ctx.users[name] = nil 20 + end 21 +end)
Modified cookbook.lua from [b21ad56f71] to [89adffa44b].
80 80 end 81 81 end 82 82 return names[math.random(#names)] 83 83 end end 84 84 local find_builtin = function(out) 85 85 local rec = {} 86 86 local i = minetest.get_craft_recipe(out) 87 - if #i.items == 0 then return nil end 87 + if i == nil or i.items == nil or #i.items == 0 then return nil end 88 88 local w = (i.width == 0) and 3 or i.width 89 89 for j=1,#i.items do 90 90 local row = math.floor((j-1) / w) 91 91 local col = (j-1) % w 92 92 if i.items[j] then 93 93 rec[1 + (row * 3) + col] = i.items[j] 94 94 end ................................................................................ 111 111 end 112 112 return i 113 113 end 114 114 local function desc_builtin(i) 115 115 local desc 116 116 i, desc = group_eval(i) 117 117 -- print('describing ',i,dump(minetest.registered_items[i])) 118 - if not minetest.registered_items[i] then 118 + local s = ItemStack(i) 119 + if not minetest.registered_items[s:get_name()] then 119 120 minetest.log('WARNING: unknown item in recipe ' .. i) 120 121 return 'Unknown Item' 121 122 end 122 - if not desc then desc = minetest.registered_items[i].description end 123 + if not desc then desc = minetest.registered_items[s:get_name()].description end 123 124 if not desc then return 'Peculiar Item' end 124 125 125 126 local eol = string.find(desc,'\n') 126 - if not eol then return desc else return string.sub(desc,1,eol-1) end 127 + if eol then desc = string.sub(desc,1,eol-1) end 128 + 129 + if s:get_count() > 1 then 130 + desc = string.format("%s (%u)",desc,s:get_count()) 131 + end 132 + return desc 127 133 end; 128 134 129 135 local bookadjs = { -- sets are in reverse order! 130 136 {'Celestial', 'Divine', 'Inspired', 'Heavenly'; 131 137 'Mystic', 'Diabolic', 'Luminous', 'Forsaken'}; 132 138 133 139 {'Dark', 'Perfected', 'Flawless', 'Unthinkable'; ................................................................................ 135 141 136 142 {'Splendid', 'Magnificent', 'Sublime', 'Grand'; 137 143 'Beneficent', 'Mysterious', 'Peculiar', 'Eerie'; 138 144 'Fulsome', 'Fearsome', 'Curious', 'Fascinating'; 139 145 'Notorious', 'Infamous'}; 140 146 } 141 147 148 +local cache = { 149 + populate_grindables = function(cache) 150 + if not cache.grindables then 151 + cache.grindables = {} 152 + for k,v in pairs(minetest.registered_items) do 153 + if sorcery.itemclass.get(k, 'grindable') then 154 + cache.grindables[#cache.grindables+1] = k 155 + end 156 + end 157 + end 158 + end; 159 +} 142 160 sorcery.cookbook.classes = { 143 161 craft = { 144 162 name = 'Crafting Guide'; 145 163 node = 'xdecor:workbench'; 146 164 booksuf = 'Manual'; 147 165 w = 3, h = 3; 148 166 chance = 2; ................................................................................ 158 176 -- slots = slot3x3; 159 177 -- }; 160 178 cook = { 161 179 name = 'Cooking Recipe'; 162 180 node = 'default:furnace'; 163 181 booksuf = 'Cookbook'; 164 182 w = 1, h = 1; 165 - chance = 5; 183 + chance = 3; 166 184 slots = {{-0.2,0}}; 167 185 pick = pick_builtin('cooking'); 168 186 find = find_builtin; 169 187 props = props_builtin; 170 188 apply_exclusions = true; 171 189 }; 172 190 infuse = { 173 191 name = 'Infusion Recipe'; 174 192 node = 'sorcery:infuser'; 175 193 booksuf = 'Pharmacopeia'; 176 194 w = 1, h = 2; 177 - chance = 2; 195 + chance = 4; 178 196 slots = { 179 197 {0,0}; 180 198 {0,1}; 181 199 }; 182 200 pick = function(restrict) 183 201 -- TODO make sure affinity restrictions match 184 202 return sorcery.data.infusions[math.random(#sorcery.data.infusions)].output 185 203 end; 186 204 title = function(output) 187 205 for _,i in pairs(sorcery.data.infusions) do 188 - print(dump(i)) 189 206 if i.output == output then 190 207 if i._proto and i._proto.name 191 208 then return i._proto.name 192 209 else break end 193 210 end 194 211 end 195 212 return 'Mysterious Potion' ................................................................................ 198 215 for _,i in pairs(sorcery.data.infusions) do 199 216 if i.output == out then 200 217 return { i.infuse, i.into } 201 218 end 202 219 end 203 220 end; 204 221 props = function(out) 205 - local i = sorcery.cookbook.classes.infuse.find(out) 206 - if i.recipe then return i.info else return {} end 222 + for _,i in pairs(sorcery.data.infusions) do 223 + if i.output == out then 224 + if i.recipe then return i.recipe else return {} end 225 + end 226 + end 227 + end; 228 + }; 229 + grind = { 230 + name = 'Milling Guide'; 231 + node = 'sorcery:mill'; 232 + booksuf = 'Manual'; 233 + chance = 1; 234 + w = 1, h = 2; 235 + pick = function(restrict) 236 + cache:populate_grindables() 237 + local i = cache.grindables[math.random(#cache.grindables)] 238 + local pd = sorcery.itemclass.get(i, 'grindable') 239 + return pd.powder 240 + end; 241 + desc = desc_builtin; 242 + props = props_builtin; 243 + slots = { 244 + {0,1}, 245 + {0,0}; 246 + }; 247 + find = function(out) 248 + cache:populate_grindables() 249 + for _,v in pairs(cache.grindables) do 250 + local g = sorcery.itemclass.get(v,'grindable') 251 + if g.powder == out then 252 + if g.grindcost then 253 + v = v .. ' ' .. tostring(g.grindcost) 254 + end 255 + local mbh = sorcery.lib.tbl.keys(sorcery.data.metals) 256 + table.sort(mbh, function(a,b) 257 + return sorcery.data.metals[a].hardness < sorcery.data.metals[b].hardness 258 + end) 259 + for _,metal in pairs(mbh) do 260 + local md = sorcery.data.metals[metal] 261 + if ((not md.no_tools) or md.grindhead) and md.hardness >= g.hardness then 262 + return {v, 'sorcery:mill_grindhead_' .. metal} 263 + end 264 + end 265 + return {v,''} -- !! 266 + end 267 + end 207 268 end; 208 269 }; 209 270 -- wand = { 210 271 -- booksuf = 'Grimoire'; 211 272 -- } 212 273 enchant = { 213 274 name = 'Enchantment Matrix'; 214 275 node = 'sorcery:enchanter'; 215 276 booksuf = 'Grimoire'; 216 277 drawslots = false; 217 - chance = 1; 278 + chance = 6; 218 279 w = 2, h = 2; 219 280 pick = function(restrict) 220 281 -- TODO make sure affinity restrictions match 221 282 local names = {} 222 283 for k,v in pairs(sorcery.data.enchants) do 223 284 if v.recipe then names[#names+1] = k end 224 285 end ................................................................................ 283 344 sorcery.cookbook.pickrecipe = function(kind,restrict) 284 345 if kind == nil then 285 346 for k,v in pairs(recipe_kinds) do 286 347 if math.random(v.chance) == 1 then 287 348 kind = k break 288 349 end 289 350 end 290 - -- local rks = sorcery.lib.tbl.keys(recipe_kinds) 291 - -- kind = rks[math.random(#rks)] 351 + if kind == nil then -- oh well, we tried 352 + local rks = sorcery.lib.tbl.keys(recipe_kinds) 353 + kind = rks[math.random(#rks)] 354 + end 292 355 end 293 356 294 357 return recipe_kinds[kind].pick(restrict), kind 295 358 end 296 359 297 -local render_recipe = function(kind,ingredients,result) 360 +local render_recipe = function(kind,ingredients,result,notes_right) 298 361 local k = recipe_kinds[kind] 299 362 local t = '' 300 363 for i=1,#k.slots do 301 364 local x, y = k.slots[i][1], k.slots[i][2] 302 365 if ingredients[i] and ingredients[i] ~= '' then 303 366 local tt 304 367 if k.indesc then tt = k.indesc(ingredients[i]) else tt = desc_builtin(ingredients[i]) end ................................................................................ 312 375 t = string.format('box[%f,%f;0.1,0.1;#00000060]',x+0.45,y+0.45) .. t 313 376 end 314 377 end 315 378 end 316 379 local img, ot 317 380 local props = k.props(result) 318 381 if props.note then 382 + local nx, ny, nw, nh 383 + if notes_right then 384 + nx = 5 ny = 0 385 + nw = 3 nh = 3 386 + else 387 + nx = 0 ny = 3 388 + nw = 4 nh = 1 389 + end 319 390 t = t .. string.format([[ 320 - textarea[0,3;4,1;;;%s] 321 - ]], minetest.formspec_escape(props.note)) 391 + textarea[%f,%f;%f,%f;;;%s] 392 + ]], nx,ny,nw,nh, minetest.formspec_escape(props.note)) 322 393 end 323 394 if k.icon then img = k.icon(result) end 324 395 if k.outdesc then ot = k.outdesc(result) else ot = desc_builtin(result) end 325 396 -- image[%f,%f;1,1;gui_furnace_arrow_bg.png^[transformR270] 326 397 return t .. string.format([[ 327 398 item_image[%f,%f;1,1;%s]tooltip[%f,%f;1,1;%s] 328 399 ]] --[[box[%f,%f;1,1;#850083A0]] .. [[ ................................................................................ 332 403 k.w, k.h/2 - 0.5, minetest.formspec_escape(minetest.registered_nodes[k.node].description), 333 404 -- k.w+1, k.h/2 - 0.5, 334 405 img and 'image' or 'item_image', 335 406 k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(img or result), 336 407 k.w+1.1, k.h/2 - 0.5, minetest.formspec_escape(ot)) 337 408 end; 338 409 339 -local retrieve_recipe = function(kind,out) 410 +local retrieve_recipe = function(kind,out,notes_right) 340 411 local rec = recipe_kinds[kind] 341 412 local ing = rec.find(out) 342 - return render_recipe(kind,ing,out), rec.w, rec.h 413 + return render_recipe(kind,ing,out,notes_right), rec.w, rec.h 343 414 end 344 415 345 416 sorcery.cookbook.setrecipe = function(stack,k,r,restrict) 346 417 local meta = stack:get_meta() 347 418 if not r then r,k = sorcery.cookbook.pickrecipe(k,restrict) end 348 419 local t = recipe_kinds[k] 349 420 meta:set_string('recipe_kind', k) ................................................................................ 442 513 {2,1.3}; 443 514 {2,4.5}; 444 515 {2,7.7}; 445 516 -- {0,1.3}, {4, 1.3}; 446 517 -- {0,4.7}, {4, 4.7}; 447 518 -- {0,8.1}, {4, 8.1}; 448 519 } 449 - print('book:',dump(book)) 450 - print('pgofs',pgofs) 451 520 for i=pgofs,(pgofs + constants.recipes_per_cookbook_page-1) do 452 521 local maxw, maxh = 3, 2 453 522 if not book.pages[i+1] then break end 454 523 local nr = 1+(i - pgofs) 455 524 local x,y = coords[nr][1], coords[nr][2] 456 525 local k = recipe_kinds[book.pages[i+1].kind] 457 526 local ox,oy = maxw - k.w, maxh - k.h 458 527 form = form .. string.format('container[%f,%f]%scontainer_end[]',(x+ox)-0.5,y, 459 - retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name)) 528 + retrieve_recipe(book.pages[i+1].kind, book.pages[i+1].name, true)) 460 529 end 461 530 462 531 minetest.show_formspec(user:get_player_name(), 'sorcery:cookbook', form) 463 532 end 464 533 465 534 minetest.register_craftitem('sorcery:cookbook', { 466 535 description = 'Catalog';
Modified data/compat.lua from [d448ba2bd2] to [ffafb80a86].
6 6 -- not cooperate with sorcery. it is used by itemclass.lua 7 7 -- to seamlessly locate the material properties and 8 8 -- capabilities of an item. 9 9 local grain = { 10 10 hardness = 1; 11 11 value = 1; 12 12 powder = 'farming:flour'; 13 - grindcost = 4; 13 + grindcost = 3; 14 14 } 15 15 return { 16 16 grindables = { 17 17 ['farming:wheat'] = grain; 18 18 ['farming:rye'] = grain; 19 19 ['farming:oats'] = grain; 20 20 ['farming:barley'] = grain; 21 21 ['farming:rice'] = { 22 22 powder = 'farming:rice_flour'; 23 23 hardness = 1; 24 24 value = 1; 25 - grindcost = 4; 25 + grindcost = 3; 26 26 } 27 27 }; 28 28 ley = { 29 29 ['default:mese'] = { 30 30 power = 0.25; 31 31 mode = 'produce'; 32 32 }; ................................................................................ 41 41 value = 1, raw = true; 42 42 }; 43 43 ['default:diamond'] = { 44 44 id = 'diamond', gem = true; 45 45 value = 9, raw = true; 46 46 }; 47 47 }; 48 + ore = { 49 + ['default:stone_with_iron' ] = { id = 'steel', metal = true };-- :/ 50 + ['default:stone_with_copper' ] = { id = 'copper', metal = true }; 51 + ['default:stone_with_tin' ] = { id = 'tin', metal = true }; 52 + ['default:stone_with_gold' ] = { id = 'gold', metal = true }; 53 + ['default:stone_with_mese' ] = { id = 'mese', gem = true }; 54 + ['default:stone_with_diamond'] = { id = 'diamond', gem = true }; 55 + }; 48 56 }
Modified data/draughts.lua from [442f0f3bcd] to [ab3b6e4e1b].
3 3 regen = { 4 4 name = 'Regeneration'; 5 5 color = {243,106,44}; 6 6 style = 'sparkle'; 7 7 desc = "A potion that amps up your body's natural\nhealing abilities, causing you to heal rapidly\neven if you're starving"; 8 8 infusion = 'sorcery:blood'; 9 9 basis = 'sorcery:potion_luminous'; 10 - effect = function(self, user) 10 + duration = function(self,meta) 11 + return 10 + meta:get_int('duration')*2 12 + end; 13 + effect = function(self, user, proto) 11 14 local meta = self:get_meta() 12 15 local force = 1 + meta:get_int('force') 13 - local duration = 10 + meta:get_int('duration')*2 14 16 late.new_effect(user, { 15 - duration = duration; 17 + duration = proto:duration(meta); 16 18 raise = 4; fall = 4; 17 19 impacts = { 18 20 damage = {0-force, 0.5}; 19 21 }; 20 22 }) 21 23 end; 22 24 }; ................................................................................ 25 27 color = {79,228,243}; style = 'sparkle'; 26 28 basis = 'sorcery:potion_luminous'; 27 29 desc = "Conserve your precious supply of oxygen when diving down into the ocean's depths"; 28 30 infusion = 'sorcery:extract_kelp'; 29 31 duration = function(self,meta) 30 32 return 20 + meta:get_int('duration')*30 31 33 end; 32 - effect = function(self,user) 34 + effect = function(self,user,proto) 33 35 local meta = self:get_meta() 34 36 local force = 1 + 2 * (meta:get_int('force')) 35 37 late.new_effect(user, { 36 - duration = self:get_definition()._proto:duration(meta); 38 + duration = proto:duration(meta); 37 39 raise = 2; fall = 5; 38 40 impacts = { 39 41 breath = {1 * force, 5} 40 42 }; 41 43 }) 42 44 end; 43 45 }; 44 46 heal = { 45 47 name = 'Healing'; 46 48 color = {243,44,58}; 47 49 style = 'sparkle'; 48 50 no_duration = true; 49 - desc = 'This blood-red liquid glitters with an\nenchantment that rapidly knits torn flesh and broken\nbones'; 51 + desc = 'This blood-red liquid glitters with an enchantment that rapidly knits torn flesh and broken bones'; 50 52 infusion = 'sorcery:oil_sanguine'; 51 53 basis = 'sorcery:potion_luminous'; 52 54 effect = function(self, user) 53 55 local meta = self:get_meta() 54 56 user:set_hp(user:get_hp() + (2 * (2 + meta:get_int('force')))) 55 57 end; 56 58 }; ................................................................................ 62 64 color = {184,106,224}; style = 'sparkle'; 63 65 infusion = 'default:coal_lump'; 64 66 basis = 'sorcery:potion_soft'; 65 67 desc = 'Drinking this dark, swirling draught will shelter you from the power of mortal perception for a time, even rendering you entirely invisible at full strength.'; 66 68 duration = function(self,meta) 67 69 return 30 + meta:get_int('duration')*30 68 70 end; 69 - effect = function(self,user) 71 + effect = function(self,user,proto) 70 72 local meta = self:get_meta() 71 73 local force = 1 + 1 * (meta:get_int('force')) 72 74 local opacity = 1.0 - (1.0 * (force / 4)) 73 75 late.new_effect(user, { 74 - duration = self:get_definition()._proto:duration(meta); 76 + duration = proto:duration(meta); 75 77 raise = 10; fall = 15; 76 78 impacts = { 77 79 texture = { nil, opacity }; 78 80 nametag = { nil, opacity }; 79 81 }; 80 82 }) 81 83 end; ................................................................................ 86 88 desc = 'While this potion flows through your veins, your vision will be strengthened against the darkness of the night'; 87 89 maxforce = 3; 88 90 infusion = 'sorcery:oil_dawn'; 89 91 basis = 'sorcery:potion_soft'; 90 92 duration = function(self,meta) 91 93 return 50 + meta:get_int('duration')*70 92 94 end; 93 - effect = function(self,user) 95 + effect = function(self,user,proto) 94 96 --TODO ensure it can only be drunk at night 95 97 --TODO ensure it can't last more than one night 96 98 local meta = self:get_meta() 97 99 local force = 0.3 * (1+meta:get_int('force')) 98 100 late.new_effect(user, { 99 - duration = self:get_definition()._proto:duration(meta); 101 + duration = proto:duration(meta); 100 102 raise = 15; fall = 30; 101 103 impacts = { 102 104 daylight = force; 103 105 }; 104 106 }) 105 107 end; 106 108 }; 107 109 antigravity = { 108 110 name = 'Antigravity'; 109 111 color = {240,59,255}; style = 'sparkle'; 110 - desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial.'; 112 + desc = 'Loosen the crushing grip of the earth upon your tender mortal form with a few sips from this glittering phial'; 111 113 infusion = 'sorcery:oil_stone'; 112 114 basis = 'sorcery:potion_soft'; 113 115 duration = function(self,meta) 114 116 return 20 + meta:get_int('duration')*25 115 117 end; 116 - effect = function(self,user) 118 + effect = function(self,user,proto) 117 119 local meta = self:get_meta() 118 120 local force = 1 - 0.3 * (meta:get_int('force') + 1) 119 121 late.new_effect(user, { 120 - duration = self:get_definition()._proto:duration(meta); 122 + duration = proto:duration(meta); 121 123 raise = 2; fall = 15; 122 124 impacts = { 123 125 gravity = force; 124 126 }; 125 127 }) 126 128 end; 127 129 }; ................................................................................ 130 132 color = {187,176,203}; 131 133 desc = 'Move and strike with the speed of a hurricane as this enchanted fluid courses through your veins'; 132 134 infusion = 'sorcery:grease_storm'; 133 135 basis = 'sorcery:potion_soft'; 134 136 duration = function(self,meta) 135 137 return 10 + meta:get_int('duration')*15 136 138 end; 137 - effect = function(self,user) 139 + effect = function(self,user,proto) 138 140 local meta = self:get_meta() 139 141 local force = 2 + 0.7 * (meta:get_int('force')) 140 142 late.new_effect(user, { 141 - duration = self:get_definition()._proto:duration(meta); 143 + duration = proto:duration(meta); 142 144 raise = 5; fall = 5; 143 145 impacts = { 144 146 speed = force; 145 147 }; 146 148 }) 147 149 end; 148 150 }; 149 151 obsidian = { 150 152 name = 'Obsidian'; 151 153 infusion = 'default:obsidian_shard'; 152 154 color = {76,0,121}; style = 'sparkle'; 153 155 desc = 'Walk untroubled through volleys of arrows and maelstroms of swinging blades, for all will batter uselessly against skin protected by spellwork mightier than the doughtiest armor'; 154 156 infusion = 'default:obsidian_shard'; 155 - basis = 'sorcery:potion_soft'; 157 + basis = 'sorcery:potion_luminous'; 156 158 no_force = true; 157 159 duration = function(self,meta) 158 160 return 5 + meta:get_int('duration')*7 159 161 end; 160 162 }; 161 163 lavabreathing = { 162 164 name = 'Lavabreathing'; ................................................................................ 182 184 color = {164,252,55}; style = 'sparkle'; 183 185 desc = 'Rise into the air for a time and stay there until the potion wears off'; 184 186 basis = 'sorcery:potion_soft'; 185 187 }; 186 188 flight = { 187 189 name = 'Flight'; 188 190 color = {143,35,255}; style = 'sparkle'; 189 - desc = 'Free yourself totally from the shackles of gravity'; 191 + desc = 'Free yourself totally from the shackles of gravity and soar through the air however you should will'; 190 192 basis = 'sorcery:potion_soft'; 193 + infusion = 'sorcery:grease_lift'; 194 + no_force = true; 195 + duration = function(self,meta) 196 + return 40 + meta:get_int('duration')*55 197 + end; 198 + effect = function(self,user,proto) 199 + late.new_effect(user, { 200 + duration = proto:duration(self:get_meta()); 201 + impacts = { 202 + fly = 1; 203 + }; 204 + }) 205 + end; 191 206 }; 192 207 leap = { 193 208 name = 'Leap'; 194 209 color = {164,252,55}; 195 210 desc = 'Soar high into the air each time you jump (but may risk damage if used without a Feather Potion)'; 196 211 infusion = 'sorcery:oil_wind'; 197 212 basis = 'sorcery:potion_soft'; 198 213 duration = function(self,meta) 199 214 return 5 + meta:get_int('duration')*7 200 215 end; 201 - effect = function(self,user) 216 + effect = function(self,user,proto) 202 217 local meta = self:get_meta() 203 218 local force = 2 + (0.5 * meta:get_int('force')) 204 219 late.new_effect(user, { 205 - duration = self:get_definition()._proto:duration(meta); 220 + duration = proto:duration(meta); 206 221 fall = 3; 207 222 impacts = { 208 223 jump = force; 209 224 }; 210 225 }) 211 226 end 212 227 }; 213 228 }
Modified data/enchants.lua from [2bce1083af] to [5670d710ce].
33 33 return stack 34 34 end; 35 35 }; 36 36 drain = { 37 37 groups = {'sword'}; 38 38 cost = 4; 39 39 }; -- health vampirism 40 - glitter = { -- created prolonged light on digging 41 - name = 'Glitter'; 40 + glimmer = { -- created prolonged light on digging 41 + name = 'Glimmer'; 42 42 groups = digtools; 43 43 affinity = 'cognic'; 44 44 cost = 1; 45 45 tone = {255,235,195}; 46 46 desc = 'Leave a trail of light hanging in the air as you dig'; 47 + recipe = { 48 + {lens = 'convex', gem = 'sapphire', dmg = 2}; 49 + {lens = 'concave', gem = 'ruby', dmg = 1}; 50 + {lens = 'concave', gem = 'sapphire', dmg = 1}; 51 + }; 52 + on_dig = function(ctx) 53 + local chance = 10 -- make dependent on power somehow? 54 + if math.random(chance) == 1 then 55 + local lightlevel = math.floor(math.min(minetest.LIGHT_MAX,4*ctx.power)) 56 + -- spawn a light block 57 + minetest.set_node(ctx.pos, { 58 + name = 'sorcery:air_glimmer_' .. tostring(lightlevel); 59 + }) 60 + local lm = minetest.get_meta(ctx.pos) 61 + lm:set_float('duration',45) 62 + lm:set_float('timeleft',45) 63 + lm:set_int('power',lightlevel) 64 + end 65 + end; 47 66 }; 48 67 harvest = { -- kills or digging ore replenish durability 49 68 name = 'Harvest'; 50 69 cost = 0; -- energy is only depleted when repair takes place 51 70 tone = {255,84,187}; 52 71 affinity = 'syncretic'; 53 72 groups = { ................................................................................ 59 78 {lens = 'concave', gem = 'sapphire', dmg = 1}; 60 79 }; 61 80 desc = 'some damage is repaired when used to mine ore or kill an attacker'; 62 81 on_dig = function(ctx) 63 82 local orepfx = "stone_with_" -- }:< 64 83 -- local oredrop = ' lump' 65 84 local barename = string.sub(ctx.node.name, string.find(ctx.node.name, ':') + 1) 66 - if minetest.get_item_group(ctx.node.name, 'ore') ~= 0 or 67 - string.sub(barename,1,string.len(orepfx)) == orepfx 68 - then 85 + if sorcery.itemclass.get(ctx.node.name,'ore') then 69 86 ctx.tool:add_wear(-(sorcery.enchant.strength(ctx.tool,'harvest') * 2000)) 70 87 ctx.cost = 3 71 88 end 72 89 end; 73 90 }; 74 91 conserve = { -- use less magical energy 75 92 name = 'Conserve'; ................................................................................ 125 142 color = sorcery.lib.color(colors[minetest.get_node(n).name]); 126 143 count = 100 * dstfac; 127 144 } 128 145 end 129 146 end 130 147 end; 131 148 }; 132 - glitter = { -- increase odds of finding gem 149 + glitter = { 133 150 name = 'Glitter'; 134 151 cost = 10; 135 152 tone = {255,50,60}; 136 153 desc = 'dramatically improve your chances of finding gems while mining veins'; 137 154 groups = {'pick','pickaxe'}; 138 155 affinity = 'entropic'; 139 156 recipe = { ................................................................................ 183 200 desc = 'cleave through sturdy ores and tear mortal flesh with fearsome ease'; 184 201 apply = function(stack,power,base) 185 202 local caps = table.copy(stack:get_definition().tool_capabilities) 186 203 for g,v in pairs(caps.groupcaps) do 187 204 local unit = 2 188 205 caps.groupcaps[g].maxlevel = caps[g].maxlevel + math.floor(unit*power) 189 206 end 207 + if caps.damage_groups and caps.damage_groups.fleshy then 208 + caps.damage_groups.fleshy = caps.damage_groups.fleshy + power * 5; 209 + end 190 210 stack:get_meta():set_tool_capabilities(caps) 191 211 return stack 192 212 end; 193 213 }; 194 214 -- multiply = {}; -- add a chance of receiving multiple drops of ore/coal 195 215 -- leech = {}; -- draw power from local leylines 216 + -- shadowcloak = {}; -- make player briefly invisible after blows are struck, reappearing only momentarily after each blow 217 + sanctify = { 218 + desc = 'prolong the blessings of the heavens'; 219 + groups = {'sorcery_sanctify'}; 220 + affinity = 'entropic'; 221 + tone = {255,255,255}; 222 + cost = 7; 223 + recipe = { 224 + {lens = 'amplifier', gem = 'ruby', dmg = 13}; 225 + {lens = 'amplifier', gem = 'ruby', dmg = 15}; 226 + {lens = 'amplifier', gem = 'ruby', dmg = 18}; 227 + }; 228 + }; 196 229 }
Modified data/gems.lua from [c84e6c472a] to [0836376152].
32 32 }; 33 33 }; 34 34 mese = { 35 35 foreign = 'default:mese_crystal'; 36 36 foreign_shard = 'default:mese_crystal_fragment'; 37 37 tone = {255,253,94}; 38 38 energysource = 5; 39 + hardness = 6; 39 40 maxenergy = 600; 40 41 items = default_items('mese'); 41 42 tools = true, armor = true; 42 43 randomfind = false; 43 44 slots = { 44 45 {affinity = {'praxic'}, confluence = 1}; 45 46 {affinity = {'praxic'}, confluence = 0.5};
Modified data/gods.lua from [ae9e7f6603] to [7a41dba628].
16 16 tex = { 17 17 "default_grass.png", 18 18 "default_gold_block.png", 19 19 "default_copper_block.png", 20 20 "default_tin_block.png" 21 21 }; 22 22 }; 23 + bless = { 24 + potions = {}; 25 + tools = {}; 26 + }; 23 27 consecrate = { 24 28 ["flowerpot:empty"] = {2, { 25 29 "flowerpot:flowers_rose"; 26 30 "flowerpot:flowers_tulip"; 27 31 "flowerpot:flowers_viola"; 28 32 "flowerpot:flowers_geranium"; 29 33 "flowerpot:flowers_chrysanthemum_green"; 30 34 "flowerpot:flowers_dandelion_white"; 31 35 "flowerpot:flowers_dandelion_yellow"; 32 36 }}; 33 - ["sorcery:dagger"] = {8, "sorcery:dagger_consecrated"}; 34 - ["sorcery:oil_mystic"] = {6, "sorcery:oil_purifying"}; 35 - ["sorcery:potion_water"] = {2, "sorcery:holy_water"}; 37 + ["sorcery:dagger"] = {17, "sorcery:dagger_consecrated"}; 38 + ["sorcery:oil_mystic"] = {9, "sorcery:oil_purifying"}; 39 + ["sorcery:potion_water"] = {4, "sorcery:holy_water"}; 36 40 -- ["default:steel_ingot"] = {15, "sorcery:holy_token_harvest"}; 37 41 }; 38 42 sacrifice = { 39 43 -- beattitudes 40 44 ["farming:straw" ] = 1; 41 45 ["farming:bread_slice" ] = 1; 42 46 ["farming:bread" ] = 2; ................................................................................ 85 89 ["default:copper_lump"] = -1; 86 90 ["default:coal_lump"] = -2; 87 91 ["default:cactus"] = -2; 88 92 ["default:dirt"] = -5; 89 93 ["moreblocks:tar"] = -9; 90 94 ["default:bucket_lava"] = -12; 91 95 ["sorcery:blood"] = -15; 96 + ["bonemeal:bone"] = -20; 92 97 ["default:bones"] = -35; 93 98 }; 94 99 gifts = { 95 100 -- gift specs = {favor, chance} where chance is the likelihood of a god bestowing the gift 96 101 ["default:blueberry_bush_sapling"] = {120,15}; 97 102 ["default:blueberries"] = {60, 4}; 98 103 ["farming:coffee_beans"] = {58, 9}; 99 104 ["farming:seed_hemp"] = {55, 8}; 105 + ["bonemeal:fertiliser"] = {53, 3}; 100 106 ["farming:garlic_clove"] = {50, 7}; 101 107 ["farming:seed_mint"] = {50, 7}; 102 108 ["flowers:mushroom_red"] = {45, 2}; 103 109 ["farming:grapes"] = {43, 6}; 104 110 ["farming:seed_barley"] = {40, 6}; 105 111 ["farming:rhubarb"] = {38, 8}; 106 112 ["farming:beans"] = {35, 6}; 107 113 ["farming:raspberries"] = {30, 5}; 114 + ["bonemeal:mulch"] = {32, 3}; 108 115 ["farming:corn"] = {27, 2}; 109 116 ["farming:sugar"] = {24, 4}; 110 117 ["farming:salt"] = {24, 3}; 111 118 ["farming:onion"] = {20, 7}; 112 119 ["farming:carrot"] = {20, 7}; 113 120 ["default:apple"] = {18, 2}; 114 121 ["farming:wheat"] = {14, 2}; 122 + ["bonemeal:mulch"] = {7, 7}; 123 + }; 124 + }; 125 + 126 + blood = { 127 + name = 'Faramesti Surax'; 128 + bless = { 129 + potions = { 130 + Force = {50, 7}; 131 + Longevity = {65, 3}; 132 + }; 133 + tools = { 134 + rend = {80, 15}; 135 + }; 136 + }; 137 + generosity = 4; 138 + stinginess = 9; 139 + idol = { 140 + desc = "Blood Idol"; 141 + width = 0.7; 142 + height = 1.3; 143 + tex = { 144 + "default_obsidian.png"; 145 + "default_gold_block.png"; 146 + "default_bronze_block.png^[multiply:#C32F2F"; 147 + "default_bronze_block.png"; 148 + "default_tin_block.png"; 149 + }; 150 + }; 151 + sacrifice = { 152 + ["sorcery:blood"] = 3; 153 + ["bonemeal:bone"] = 9; 154 + ["default:bones"] = 17; 155 + ["sorcery:oil_sanguine"] = 26; 156 + 157 + -- abominations 158 + ["default:apple"] = -10; 159 + ["farming:wheat"] = -20; 160 + ["farming:bread"] = -30; 161 + }; 162 + gifts = { 163 + ["tnt:gunpowder"] = {40, 2}; 164 + ["bonemeal:bonemeal"] = {25, 4}; 165 + ["sorcery:grease_war"] = {98, 6}; 166 + }; 167 + consecrate = { 168 + ["sorcery:dagger"] = {4, "sorcery:dagger_consecrated"}; 115 169 }; 116 170 }; 117 171 }
Modified data/greases.lua from [0a57245423] to [49c9344ae7].
68 68 color = {221,148,95}; 69 69 core = { 'sorcery:oil_dawn', 'sorcery:oil_berry' }; 70 70 mix = { 71 71 'sorcery:powder_aluminum'; 72 72 'sorcery:powder_lithium'; 73 73 'sorcery:extract_pine'; 74 74 }; 75 + }; 76 + lift = { 77 + color = {219,73,210}; 78 + style = 'sparkle'; 79 + core = { 'sorcery:oil_wind', 'sorcery:oil_stone' }; 80 + mix = { 81 + 'sorcery:powder_levitanium'; 82 + 'sorcery:extract_fern'; 83 + }; 75 84 }; 76 85 }
Modified data/metals.lua from [bb9d0957fb] to [3567f41644].
17 17 end 18 18 19 19 return { 20 20 tin = { 21 21 ingot = 'default:tin_ingot'; 22 22 block = 'default:tinblock'; 23 23 tone = {172,172,172}; 24 - no_tools = true; no_armor = true; 24 + no_tools = true; no_armor = true; grindhead = true; 25 25 hardness = 2; 26 26 }; 27 27 copper = { 28 28 dye = 'orange'; 29 29 ingot = 'default:copper_ingot'; 30 30 block = 'default:copperblock'; 31 31 tone = {255,176,61};
Modified data/spells.lua from [9b1dfc7187] to [0d89fbd301].
448 448 end 449 449 if not ctx.target or ctx.target.type ~= 'node' then return false end 450 450 local tgt = minetest.get_node(ctx.target.under) 451 451 if tgt.name == 'sorcery:enchanter' then 452 452 local meta = minetest.get_meta(ctx.target.under) 453 453 local inv = meta:get_inventory() 454 454 if inv:get_stack('item',1):get_name() == 'default:paper' 455 - and inv:get_stack('item',1):get_count() == 1 455 + -- and inv:get_stack('item',1):get_count() == 1 456 456 and not inv:is_empty('foci') then 457 457 local ink1 = getcolor(inv:get_stack('foci',2)) 458 458 local ink2 = getcolor(inv:get_stack('foci',3)) 459 459 local restrict, kind, mod = {} do 460 460 local ms = inv:get_stack('foci',1) 461 461 if not ms:is_empty() then mod = ms:get_name() end 462 462 end ................................................................................ 522 522 local rec = ItemStack('sorcery:recipe') 523 523 local m = rec:get_meta() 524 524 if ctx.base.gem == 'diamond' then 525 525 -- make recipe for thing in slot 1 526 526 else 527 527 sorcery.cookbook.setrecipe(rec,kind,nil,restrict) 528 528 end 529 - inv:set_stack('item',1,rec) 529 + local old = inv:get_stack('item',1) 530 + -- TODO: detect hopper underneath and place 531 + -- recipe into it instead of item slot 532 + if old:get_count() == 1 then 533 + inv:set_stack('item',1,rec) 534 + else 535 + old:take_item(1) 536 + inv:set_stack('item',1,old) 537 + minetest.add_item(ctx.target.above,rec) 538 + end 530 539 for i=1,inv:get_size('foci') do 531 540 local f = inv:get_stack('foci',i) 532 541 f:take_item(1) 533 542 inv:set_stack('foci',i,f) 534 543 end 535 544 enchantment_sparkle(ctx,sorcery.lib.color(97,97,255)) 536 545 return
Modified disassembly.lua from [5ba85bac04] to [5131b0247b].
20 20 local rec = ItemStack{name = 'sorcery:recipe', count = maxrecs} 21 21 sorcery.cookbook.setrecipe(rec, 'craft', item:get_name()) 22 22 i:set_stack('output',1,rec) 23 23 else 24 24 i:set_stack('output',1,ItemStack()) 25 25 end 26 26 end 27 +local dsbox = { 28 + type = 'fixed'; 29 + fixed = { 30 + -0.5, -0.5, -0.5; 31 + 0.5, 0.0, 0.5; 32 + }; 33 +} 27 34 minetest.register_node('sorcery:disassembler', { 28 35 description = 'Disassembly Kit'; 29 36 drawtype = 'mesh'; 30 37 mesh = 'sorcery-disassembler.obj'; 31 38 paramtype = 'light', sunlight_propagates = true; 32 39 paramtype2 = 'facedir'; 33 40 groups = { cracky = 2, sorcery_tech = 1 }; 41 + selection_box = dsbox; 42 + collision_box = dsbox; 34 43 tiles = { 35 44 'default_copper_block.png'; 36 45 'default_wood.png'; 37 46 'default_steel_block.png'; 38 47 'default_stone.png'; 39 48 'default_gold_block.png'; 40 49 'default_coal_block.png';
Modified enchanter.lua from [59f5727496] to [c255af4d4e].
316 316 if i <= 2 then minetest.remove_node(pos) else 317 317 minetest.set_node(pos, {name='sorcery:air_flash_1'}) 318 318 return true 319 319 end 320 320 end 321 321 }); 322 322 end 323 + 324 +local function enchpwrhud(user, flash, fac) 325 + -- this function displays or changes the HUD element 326 + -- that shows how much energy is left in an enchanted 327 + -- item. it is called by the dig handler and sequences 328 + -- callbacks to remove the HUD from the screen once 329 + -- its timeleft property has been used up. timeleft is 330 + -- reset if the 'flash' argument, which indicates 331 + -- whether the enchantment has just been used, is set 332 + -- to true; otherwise, it is left alone. 333 + -- 334 + -- this whole thing is really unfriendly and without 335 + -- FP tricks it would have been intolerably painful 336 + -- to implement. minetest needs better primitives. 337 + local frame = math.ceil(16 * (1-math.min(1,fac))) 338 + if tostring(frame) == '-0' then frame = '0' -- ?????? 339 + else frame = tostring(frame) end 340 + local tex = 'sorcery_ui_manaring_' .. (flash and 'flash_' or '') .. frame .. '.png'; 341 + local c = sorcery.ctx.get(user) 342 + if not c.hud_ench then 343 + local hid = user:hud_add { 344 + name = 'sorcery:manaring'; 345 + hud_elem_type = 'image'; 346 + text = tex; 347 + position = { x = 0.5, y = 0.5 }; 348 + offset = { x = 0, y = 0 }; 349 + scale = { x = 2.0, y = 2.0 }; 350 + z_index = 0; 351 + } 352 + c.hud_ench = { 353 + id = hid; 354 + timeleft = 2.0; 355 + fn = false; 356 + fac = fac; 357 + } 358 + c = c.hud_ench 359 + else 360 + c = c.hud_ench 361 + c.fac = fac 362 + user:hud_change(c.id,'text',tex) 363 + if flash then c.timeleft = 2.0 end 364 + end 365 + if c.fn == false then 366 + c.fn = true 367 + local delta = 0.10 368 + -- tried making Δ conditional on 'flash' but it 369 + -- turns out that causes the flash not to always 370 + -- disappear in a timely manner. solving this 371 + -- efficiently would be a major, complex headache 372 + -- so i'm just compromising and setting delta to a 373 + -- constant :/ 374 + minetest.after(delta, function() 375 + if not sorcery.ctx.stat(user) then return end 376 + local u = sorcery.ctx.get(user) 377 + local h = u.hud_ench 378 + if not h then return end 379 + print('timeleft,delta',h.timeleft,delta) 380 + if h.timeleft - delta <= 0 then 381 + user:hud_remove(h.id) 382 + u.hud_ench = nil 383 + else 384 + h.timeleft = h.timeleft - delta 385 + h.fn = false 386 + enchpwrhud(user, false, h.fac) 387 + end 388 + end) 389 + end 390 +end 323 391 324 392 minetest.register_on_dignode(function(pos, node, puncher) 325 393 if puncher == nil then return end -- i don't know why 326 394 -- this is necessary but you get rare crashes without it 395 + 396 + -- perform leyline checks and call notify if necessary 397 + if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then 398 + sorcery.lib.node.notifyneighbors(pos) 399 + end 327 400 328 401 -- we're goint to do something VERY evil here and 329 402 -- replace the air with a "glow-air" that removes 330 403 -- itself after a short period of time, to create 331 404 -- a flash of light when an enchanted tool's used 332 405 -- to dig out a node 333 406 local tool = puncher:get_wielded_item() ................................................................................ 363 436 if ch > sp.reliability then goto skip end 364 437 sparks[#sparks + 1] = { 365 438 color = sorcery.lib.color(data.tone):brighten(1.1); 366 439 count = strength * 7; 367 440 } 368 441 ::skip::end end 369 442 if totalcost > 0 then 370 - local conservation = sorcery.enchant.strength(tool,'conserve') * 0.5 371 - totalcost = totalcost - (totalcost * conservation) 372 - ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0))) 443 + local conservation = math.floor(sorcery.enchant.strength(tool,'conserve') * 6) 444 + -- totalcost = totalcost - (totalcost * conservation) 445 + if conservation == 0 or math.random(conservation) == 1 then 446 + ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0))) 447 + end 373 448 end 374 449 if #sparks == 0 then return end 375 450 if math.random(5) == 1 then 376 451 minetest.set_node(pos, {name='sorcery:air_flash_' .. tostring(math.random(10))}) 377 452 end 378 453 local range = function(min, max) 379 454 local span = max - min ................................................................................ 418 493 ench.spells = {} 419 494 sorcery.enchant.set(tool,ench) 420 495 else 421 496 sorcery.enchant.set(tool,ench,true) 422 497 end 423 498 puncher:set_wielded_item(tool) 424 499 425 - -- perform leyline checks and call notify if necessary 426 - if minetest.get_item_group(node.name, 'sorcery_ley_device') ~= 0 then 427 - sorcery.lib.node.notifyneighbors(pos) 428 - end 500 + local epct = ench.energy / material.data.maxenergy 501 + enchpwrhud(puncher, true, epct) 429 502 end) 430 - 431 -minetest.register_chatcommand('enchants', { 432 - description = 'Log information about the currently held object\'s enchantment'; 433 - privs = { server = true }; 434 - func = function(caller,params) 435 - local tool = minetest.get_player_by_name(caller):get_wielded_item() 436 - minetest.chat_send_player(caller, dump(sorcery.enchant.get(tool))) 437 - local binary = tool:get_meta():get_string('sorcery_enchantment_recs') 438 - local dumpout = '' 439 - for i=1,string.len(binary) do 440 - dumpout = dumpout .. string.format('%x%s',string.byte(binary,i),(i%16==0 and '\n') or ' ') 441 - end 442 - print(dumpout) 443 - end; 444 -})
Modified gems.lua from [533039aa40] to [8e18232927].
1 1 --- gemstones 2 2 local shards_per_gem = 9 3 3 4 4 sorcery.register_gem = function(name,gem) 5 5 local itemname = gem.foreign or 'sorcery:gem_' .. name 6 6 local shardname = gem.foreign_shard or 'sorcery:gem_' .. name .. '_shard' 7 7 local amuletname = gem.foreign_amulet or 'sorcery:gem_' .. name .. '_amulet' 8 + 9 + sorcery.data.gems[name].parts = { 10 + item = itemname; 11 + shard = shardname; 12 + amulet = amuletname; 13 + } 8 14 9 15 local tools, armors = sorcery.matreg.tools, sorcery.matreg.armors 10 16 if gem.tools then for t,c in pairs(tools) do 11 17 sorcery.matreg.lookup[(gem.items and gem.items[t]) or ('sorcery:' .. t .. '_' .. name)] = { 12 18 gem = true; 13 19 id = name; data = gem; 14 20 value = c.cost*shards_per_gem;
Added gravitator.lua version [31896c5f81].
1 +local modes = { 2 + off = {next = 'stop'; power = 0}; 3 + stop = {next = 'slow'; power = 0.4; factor = 0; color = {255,126,113}}; 4 + slow = {next = 'lift'; power = 0.2; factor = 0.5; color = {255,255,100}}; 5 + lift = {next = 'crush'; power = 0.6; factor = -0.25; color = {113,255,126}}; 6 + crush = {next = 'off'; power = 1; factor = 2; color = {113,126,255}}; 7 +} 8 +for kind, p in pairs(modes) do 9 + local radius = 4 10 + local enoughpower = function(pos,mode) 11 + if mode and modes[mode] == nil then return false end 12 + local n = modes[mode or kind] 13 + local l = sorcery.ley.netcaps(pos,1,nil,n.power) 14 + local maxfree = l.self.powerdraw + l.freepower 15 + return maxfree >= n.power 16 + end 17 + local setmeta = function(pos,nextmode) 18 + local label = 'Gravitator' 19 + if nextmode ~= 'off' then 20 + label = label .. ' (' .. nextmode .. ')' 21 + minetest.get_node_timer(pos):start(4) 22 + end 23 + local meta = minetest.get_meta(pos) 24 + meta:set_string('infotext',label) 25 + end 26 + minetest.register_node('sorcery:gravitator_' .. kind, { 27 + description = 'Gravitator'; 28 + drop = 'sorcery:gravitator_off'; 29 + paramtype2 = 'facedir'; 30 + groups = { 31 + cracky = 2; 32 + sorcery_magitech = 1; 33 + sorcery_ley_device = 1; 34 + 35 + effect_trigger = (kind == 'off') and 0 or 1; 36 + }; 37 + tiles = { 38 + 'sorcery_gravitator_side.png'; 39 + 'sorcery_gravitator_side.png'; 40 + 'sorcery_gravitator_side.png'; 41 + 'sorcery_gravitator_side.png'; 42 + 'sorcery_gravitator_side.png'; 43 + 'sorcery_gravitator_panel_'..kind..'.png'; 44 + }; 45 + effect_near = p.factor and { 46 + impacts = { 47 + gravity = p.factor; 48 + }; 49 + distance = radius; 50 + spread = 1.5; 51 + } or nil; 52 + _sorcery = { 53 + ley = { 54 + mode = 'consume', affinity = {'counterpraxic'}; 55 + power = p.power; 56 + }; 57 + on_leychange = function(pos) 58 + local meta = minetest.get_meta(pos) 59 + if kind ~= 'off' then 60 + if not enoughpower(pos) then 61 + local old = minetest.get_node(pos) 62 + old.name = 'sorcery:gravitator_off' 63 + minetest.swap_node(pos,old) 64 + meta:set_string('lastmode',kind) 65 + setmeta(pos,'off') 66 + end 67 + elseif meta:contains('lastmode') then 68 + local nm = meta:get_string('lastmode') 69 + if enoughpower(pos,nm) then 70 + local old = minetest.get_node(pos) 71 + old.name = 'sorcery:gravitator_' .. nm 72 + minetest.set_node(pos,old) 73 + setmeta(pos,nm) 74 + end 75 + end 76 + end; 77 + }; 78 + on_construct = function(pos) 79 + setmeta(pos,'off') 80 + end; 81 + on_timer = function(pos) 82 + if p.color == nil then return false end 83 + 84 + local vee = {x=0,y=-1,z=0}; 85 + minetest.add_particlespawner { 86 + amount = 128; 87 + time = 4; 88 + minpos = vector.subtract(pos,radius); 89 + maxpos = vector.add(pos,radius); 90 + minvel = vector.multiply(vee, p.factor*0.5); 91 + maxvel = vector.multiply(vee, p.factor); 92 + minexptime = 1; 93 + maxexptime = 1.3; 94 + minsize = 0.2, maxsize = 1.4; 95 + glow = 12; 96 + texture = sorcery.lib.image('sorcery_spark.png'):multiply(sorcery.lib.color(p.color)):render(); 97 + animation = { 98 + type = 'vertical_frames'; 99 + aspect_w = 16, aspect_h = 16; 100 + length = 1.4; 101 + } 102 + } 103 + return true; 104 + end; 105 + on_rightclick = function(pos) 106 + minetest.sound_play('doors_steel_door_open', { 107 + gain = 0.6; 108 + pos = pos; 109 + }, true) 110 + 111 + local nextmode = p.next 112 + while true do 113 + local nm = modes[nextmode] 114 + if nm.power == 0 then break end 115 + if nm.power <= p.power then break end 116 + if enoughpower(pos,nextmode) then break end 117 + nextmode = nm.next 118 + end 119 + 120 + local old = minetest.get_node(pos) 121 + minetest.set_node(pos, { 122 + name = 'sorcery:gravitator_' .. nextmode; 123 + param1 = old.param1; 124 + param2 = old.param2; 125 + }) 126 + 127 + setmeta(pos,nextmode) 128 + end; 129 + }) 130 +end
Modified harvester.lua from [40c411e2ef] to [81d31df3a3].
33 33 emerald:render(); 34 34 }; 35 35 36 36 on_timer = function(pos,elapse) 37 37 local meta = minetest.get_meta(pos) 38 38 local inv = meta:get_inventory() 39 39 if inv:is_empty('charge') then return false end 40 + 41 + local put_in_hopper = sorcery.lib.node.discharger(pos) 42 + local discharge = function(item,idx) 43 + inv:set_stack('charge',put_in_hopper(item)) 44 + end 40 45 41 46 local ley = sorcery.ley.estimate(pos) 42 47 local charged = false 43 48 for i=1,inv:get_size('charge') do 44 49 local curve = function(x) return ((x*10)^2)/10 end 45 50 local item = inv:get_stack('charge',i) 46 51 if minetest.get_item_group(item:get_name(), 'sorcery_wand') ~= 0 then ................................................................................ 50 55 local repair_per_tick = (65536 / 80) * curve(ley.force) * mese 51 56 local spell = item:get_meta():get_string('sorcery_wand_spell') 52 57 if spell == '' then goto skip end 53 58 local aff = sorcery.data.spells[spell].leytype 54 59 if aff == ley.aff[1] or aff == ley.aff[2] then 55 60 repair_per_tick = repair_per_tick * 2 end 56 61 item:set_wear(math.max(0,item:get_wear() - repair_per_tick * (elapse / 60))) 62 + if item:get_wear() == 0 then item = put_in_hopper(item) end 57 63 else 58 64 local e = sorcery.enchant.get(item) 59 65 if #e.spells == 0 then goto skip end -- item is not magical 60 66 local mat = sorcery.enchant.getsubj(item) 61 67 if e.energy < mat.data.maxenergy then 62 68 local energy_per_tick = (100 * curve(ley.force)) + ((mat.data.energysource or 0)*2) 63 69 e.energy = math.min(e.energy + energy_per_tick, mat.data.maxenergy) 64 70 sorcery.enchant.set(item,e,true) 65 - else goto skip end -- already fully charged 71 + else discharge(item,i) goto skip end -- already fully charged 66 72 end 67 73 -- print('repair cycle! repairing item'..item:get_name()..' by',repair_per_tick * (elapse / 60)) 68 74 inv:set_stack('charge',i,item) 69 75 charged = true 70 76 ::skip::end 71 77 72 78 return charged
Modified hotmetallurgy.lua from [b05dd85eee] to [ac0bc31ba3].
158 158 end 159 159 160 160 local update_smelter = function(pos) 161 161 local meta = minetest.get_meta(pos) 162 162 local inv = meta:get_inventory() 163 163 local proto = minetest.registered_nodes[minetest.get_node(pos).name]._proto 164 164 local recipe, count, factor, meltpoint = find_recipe(inv) 165 - if recipe and proto.temp >= meltpoint then 165 + if recipe --[[and proto.temp >= meltpoint]] then 166 166 minetest.get_node_timer(pos):start(1) 167 167 else 168 168 meta:set_float('burntime',0) 169 169 end 170 170 end 171 171 172 172 local smelter_step = function(kind,active,pos,delta) ................................................................................ 298 298 minetest.register_node(id_current, { 299 299 _active = (state == 'closed'); 300 300 _proto = kind; 301 301 description = desc; 302 302 drawtype = "mesh"; 303 303 mesh = 'sorcery-kiln-' .. state .. '.obj'; 304 304 drop = id; 305 + groups = { cracky = 2; sorcery_device_kiln = (state == 'closed') and 1 or 2; } 305 306 sunlight_propagates = true; 306 307 paramtype1 = 'light'; 307 308 paramtype2 = 'facedir'; 308 309 selection_box = box[state]; 309 310 collision_box = box[state]; 310 311 tiles = tex[state]; 311 312 light_source = (state == 'closed' and 7) or 0; ................................................................................ 375 376 local id = 'sorcery:smelter_' .. kind.material .. kind.size_name 376 377 kind.id = id 377 378 for _, active in pairs {false, true} do 378 379 minetest.register_node((active and id .. '_active') or id, { 379 380 _proto = kind; 380 381 description = desc; 381 382 drop = id; 382 - groups = { cracky = 2; }; 383 + groups = { 384 + cracky = 2; 385 + sorcery_device_smelter = active and 1 or 2; 386 + }; 383 387 paramtype2 = 'facedir'; 384 388 light_source = (active and 9) or 0; 385 389 on_construct = function(pos) 386 390 local meta = minetest.get_meta(pos) 387 391 local inv = meta:get_inventory() 388 392 inv:set_size('input',kind.size) 389 393 inv:set_size('output',kind.outsize) ................................................................................ 414 418 recipe = recipe; 415 419 output = id; 416 420 } 417 421 end 418 422 419 423 for _, t in pairs { 420 424 {1, nil, 'clay'}; 421 - {2, 'hot','aluminum'}; 422 - {3, 'volcanic','platinum'}; 423 - {4, 'stellar','duridium'}; 424 - {5, 'nova','impervium'}; 425 + -- {2, 'hot','aluminum'}; 426 + -- {3, 'volcanic','platinum'}; 427 + -- {4, 'stellar','duridium'}; 428 + -- {5, 'nova','impervium'}; 425 429 } do register_kiln { 426 430 temp = t[1], temp_name = t[2]; 427 431 material = t[3]; 428 432 size = 3, outsize = 4, fuelsize = 1; -- future-proofing 429 433 } 430 434 431 435 for _, s in pairs {
Modified infuser.lua from [c25534932e] to [994388d832].
143 143 -- for i=0,4 do 144 144 spawn('sorcery_spark.png^[multiply:#FF8FDD', 1, 32 * 4) 145 145 -- end 146 146 -- for i=0,4 do 147 147 spawn('sorcery_spark.png^[multiply:#FFB1F6', 0.5, 64 * 4) 148 148 -- end 149 149 150 + local discharge = sorcery.lib.node.discharger(pos) 151 + 150 152 if newtime >= infusion_time then 151 153 -- finished 152 154 local ingredient = infusion[1]:get_name() 153 155 for i = 1,#potions do 154 156 if potions[i]:is_empty() then goto skip end 155 157 local base = potions[i]:get_name() 156 158 local potion = potions[i]:get_definition() ................................................................................ 159 161 elixir._proto.apply(newstack, potion._proto) 160 162 newstack:get_meta():set_string('description', sorcery.lib.ui.tooltip { 161 163 title = potion._proto.name .. ' Draught'; 162 164 desc = potion._proto.desc; 163 165 color = sorcery.lib.color(potion._proto.color):readable(); 164 166 props = effects_table(newstack); 165 167 }); 166 - inv:set_stack('potions',i,newstack) 168 + inv:set_stack('potions',i,discharge(newstack)) 167 169 else 168 170 for _,v in pairs(sorcery.data.infusions) do 169 171 if v.infuse == ingredient and v.into == base then 170 172 -- transform the base into the infusion 171 - inv:set_stack('potions',i,ItemStack(v.output)) 173 + inv:set_stack('potions',i,discharge(ItemStack(v.output))) 172 174 end 173 175 end 174 176 end 175 177 ::skip:: end 176 178 177 179 inv:set_stack('infusion',1,ItemStack(sorcery.data.infusion_leftovers[ingredient])) 178 180
Modified init.lua from [97099862fc] to [330ca92ebf].
49 49 'potions', 'oils', 'greases', 50 50 'draughts', 'elixirs', 51 51 'philters', 'extracts'; 52 52 'register'; 53 53 } 54 54 55 55 for _,u in pairs { 56 - 'attunement'; 'metal', 'gems'; 'itemclass'; 57 - 'leylines'; 'potions', 'infuser'; 'altar'; 56 + 'attunement'; 'context'; 'itemclass'; 'potions'; 57 + 'metal', 'gems'; 'leylines'; 'infuser'; 'altar'; 58 58 'wands'; 'tools', 'crafttools'; 'enchanter'; 59 59 'harvester'; 'metallurgy-hot', 'metallurgy-cold'; 60 60 'entities'; 'recipes'; 'coins'; 'interop'; 61 61 'tnodes'; 'forcefield'; 'farcaster'; 'portal'; 62 62 'cookbook', 'writing'; 'disassembly'; 'displacer'; 63 + 'gravitator'; 64 + 65 + 'admin'; 63 66 } do sorcery.load(u) end 67 +
Modified interop.lua from [b53d891f54] to [913cc0d6da].
7 7 if meta:get_string('sorcery_seal_mode') == 'wand' or name ~= meta:get_string('owner') then 8 8 return true 9 9 end 10 10 end 11 11 return nextfn(pos,name) 12 12 end 13 13 end 14 + 15 +if minetest.get_modpath('hopper') then 16 + hopper:add_container { 17 + {'side', 'group:sorcery_device_generator','fuel'}; 18 + {'bottom','group:sorcery_device_generator','fuel'}; 19 + 20 + {'side', 'sorcery:coin_press','ingot'}; 21 + {'bottom','sorcery:coin_press','gem'}; 22 + -- output handled on our side; requires automation 23 + 24 + {'bottom','sorcery:infuser','infusion'}; 25 + {'side', 'sorcery:infuser','potions'}; 26 + -- output handled on our side 27 + 28 + {'top', 'sorcery:displacer','cache'}; 29 + {'side', 'sorcery:displacer','cache'}; 30 + {'bottom','sorcery:displacer','cache'}; 31 + 32 + {'side','sorcery:displacer_transmit_gem','code'}; 33 + {'side','sorcery:displacer_receive_gem', 'code'}; 34 + 35 + {'side','group:sorcery_device_kiln','fuel'}; 36 + {'top', 'group:sorcery_device_kiln','output'}; 37 + 38 + {'top', 'group:sorcery_device_smelter','output'}; 39 + {'bottom','group:sorcery_device_smelter','input'}; 40 + {'side', 'group:sorcery_device_smelter','fuel'}; 41 + 42 + {'top', 'sorcery:mill', 'output'}; 43 + {'side', 'sorcery:mill', 'grinder'}; 44 + {'bottom', 'sorcery:mill', 'input'}; 45 + 46 + {'bottom', 'sorcery:harvester', 'charge'}; 47 + -- output handled on our side 48 + } 49 +end
Modified itemclass.lua from [bee797c513] to [c60971c6b0].
37 37 local mat = sorcery.matreg.lookup[name] 38 38 if mat and mat.gem then return mat end 39 39 end; 40 40 }; 41 41 grindable = { 42 42 compat = 'grindables'; 43 43 subclass = {'metallic'}; 44 + conform = { 45 + metallic = function(m) 46 + if m and m.data and m.data.parts and m.data.parts.powder then 47 + return { 48 + hardness = m.data.hardness; 49 + value = m.value or 1, grindcost = 1; 50 + powder = m.data.parts.powder; 51 + } 52 + end 53 + end; 54 + }; 44 55 predicate = function(name) 45 56 local def = minetest.registered_items[name]._sorcery 46 57 if not def then return nil end 47 58 def = def.material 48 59 if def and def.grindvalue then 49 60 return def end 50 61 end; ................................................................................ 62 73 -- matreg is a registry binding crafted items, 63 74 -- like armors and tools, to the material they 64 75 -- are made out of 65 76 local mat = sorcery.matreg.lookup[name] 66 77 if mat and mat.metal then return mat end 67 78 end; 68 79 }; 80 + ore = { 81 + groups = { 'ore' }; 82 + compat = 'ore'; 83 + predicate = function(name) 84 + -- maybe revise this at some point once sorcery is extricated 85 + -- from instant_ores and we have more control over the items 86 + -- we generate 87 + local orepfx = "stone_with_" -- }:< 88 + local barename = string.sub(name, string.find(name, ':') + 1) 89 + if string.sub(barename,1,string.len(orepfx)) == orepfx then 90 + local iname = string.sub(barename,string.len(orepfx) + 1) 91 + if sorcery.data.metals[iname] then 92 + return { metal = true, id = iname } 93 + elseif sorcery.data.gems[iname] then 94 + return { gem = true, id = iname } 95 + end 96 + end 97 + end; 98 + }; 69 99 }; 70 100 get = function(name,class) 71 101 local c = sorcery.itemclass.classes[class] 72 102 local o 73 103 if not c then return false end 74 104 75 105 if c.predicate then ................................................................................ 81 111 o = sorcery.data.compat[c.compat][name] 82 112 if o then return o end 83 113 end 84 114 85 115 if c.subclass then 86 116 for _,s in pairs(c.subclass) do 87 117 o = sorcery.itemclass.get(name,s) 88 - if o then return o end 118 + if o then 119 + if c.conform and c.conform[s] then 120 + return c.conform[s](o) 121 + else return o end 122 + end 89 123 end 90 124 end 91 125 92 126 if c.groups then 93 127 for _,g in pairs(c.groups) do 94 128 o = minetest.get_item_group(name,g) 95 129 if o > 0 then return { kind = o } end
Modified leylines.lua from [a383f4a3c9] to [0e41979f02].
60 60 'sorcery_conduit_copper_side.png'; 61 61 }; 62 62 groups = { 63 63 sorcery_ley_device = 1; 64 64 cracky = 3; 65 65 }; 66 66 _sorcery = { 67 - ley = { mode = 'signal'; power = 10 }; 67 + ley = { mode = 'signal'; power = 100 }; 68 68 }; 69 69 }) 70 70 minetest.register_craft { 71 71 output = 'sorcery:conduit 4'; 72 72 recipe = { 73 73 {'default:copper_ingot', 'default:copper_ingot', 'default:copper_ingot'}; 74 74 {'default:copper_ingot', 'sorcery:electrumblock', 'default:copper_ingot'}; ................................................................................ 160 160 paramtype2 = 'facedir'; 161 161 groups = { 162 162 cracky = 2; 163 163 choppy = 1; 164 164 sorcery_ley_device = 1; 165 165 }; 166 166 _sorcery = { 167 - ley = { mode = 'signal'; power = 5; } 167 + ley = { mode = 'signal'; power = 50; } 168 168 }; 169 169 tiles = tiles; 170 170 }) 171 171 minetest.register_craft { 172 172 output = id .. ' 4'; 173 173 recipe = { 174 174 {item, 'sorcery:conduit'}; ................................................................................ 265 265 if props and props.on_leychange then 266 266 props.on_leychange(pos) 267 267 end 268 268 end 269 269 end 270 270 sorcery.ley.notify = function(pos) 271 271 local n = sorcery.ley.mapnet(pos) 272 - sorcery.ley.notifymap(n.map) 272 + if n then sorcery.ley.notifymap(n.map) end 273 273 end 274 274 275 275 sorcery.ley.field_to_current = function(strength,time) 276 276 local ley_factor = 0.25 277 277 -- a ley harvester will produce this much current with 278 278 -- access to a full-strength leyline 279 279 ................................................................................ 311 311 sorcery_ley_device = 1; 312 312 sorcery_magitech = 1; 313 313 }; 314 314 on_construct = function(pos) 315 315 local meta = minetest.get_meta(pos) 316 316 meta:set_string('infotext','Condenser') 317 317 end; 318 - on_rightclick = function(pos) 319 - local c = sorcery.ley.netcaps(pos,1) 320 - c.net.devices.signal = nil 321 - print('LEYNET', dump(c)) 322 - end; 323 318 _sorcery = { 324 319 ley = { mode = 'produce'; 325 320 power = function(pos,time) 326 321 return sorcery.ley.field_to_current(sorcery.ley.estimate(pos).force, time); 327 322 end; 328 323 affinity = function(pos) 329 324 return sorcery.ley.estimate(pos).aff ................................................................................ 699 694 ]], math.floor(burnprog * 100)) .. lamps) 700 695 end 701 696 for _,active in pairs{true,false} do 702 697 local id = 'sorcery:generator' .. (active and '_active' or '') 703 698 minetest.register_node(id, { 704 699 description = 'Generator'; 705 700 paramtype2 = 'facedir'; 706 - groups = { cracky = 2; sorcery_ley_device = 1; }; 701 + groups = { cracky = 2; sorcery_ley_device = 1; sorcery_device_generator = active and 1 or 2}; 707 702 drop = 'sorcery:generator'; 708 703 tiles = { 709 704 'sorcery_ley_generator_top.png'; 710 705 'sorcery_ley_generator_bottom.png'; 711 706 'sorcery_ley_generator_side.png'; 712 707 'sorcery_ley_generator_side.png'; 713 708 'sorcery_ley_generator_back.png';
Modified lib/node.lua from [3ae145b117] to [1330514938].
69 69 if vector.equals(pos,v) then return true end 70 70 end 71 71 return false 72 72 end 73 73 local i,stack = 1,{startpoint} repeat 74 74 local pos = stack[i] 75 75 local n = minetest.get_node(pos).name 76 + if n == 'ignore' then 77 + minetest.load_area(pos) 78 + n = minetest.get_node(pos).name 79 + end 76 80 if sorcery.lib.tbl.has(names, n) then -- match found 77 81 -- record the find 78 82 nodes[pos] = n 79 83 if positions[n] then positions[n][#positions[n]] = pos 80 84 else positions[n] = {pos} end 81 85 82 86 -- check selected neighbors to see if any need scanning ................................................................................ 92 96 until i > #stack 93 97 return nodes, positions 94 98 end; 95 99 96 100 forneighbor = function(pos, n, fn) 97 101 for _,p in pairs(n) do 98 102 local sum = vector.add(pos, p) 99 - fn(sum, minetest.get_node(sum)) 103 + local n = minetest.get_node(sum) 104 + if n.name == 'ignore' then 105 + minetest.load_area(sum) 106 + n = minetest.get_node(sum) 107 + end 108 + fn(sum, n) 109 + end 110 + end; 111 + 112 + force = function(pos,preload_for) 113 + local n = minetest.get_node_or_nil(pos) 114 + if n then return n end 115 + if preload_for then 116 + sorcery.lib.node.preload(pos,preload_for) 117 + else 118 + minetest.load_area(pos) 100 119 end 120 + return minetest.get_node(pos) 101 121 end; 102 122 103 123 -- when items have already been removed; notify cannot be relied on 104 124 -- to reach the entire network; this function accounts for the gap 105 125 notifyneighbors = function(pos) 106 126 sorcery.lib.node.forneighbor(pos, sorcery.ley.txofs, function(pos,node) 107 127 if minetest.get_item_group(node.name,'sorcery_ley_device') ~= 0 then ................................................................................ 118 138 } 119 139 end; 120 140 121 141 preload = function(pos, user) 122 142 minetest.load_area(pos) 123 143 user:send_mapblock(sorcery.lib.node.blockpos(pos)) 124 144 end; 145 + 146 + discharger = function(pos) 147 + local below = sorcery.lib.node.force(vector.subtract(pos,{x=0,y=1,z=0})) 148 + if below.name == 'hopper:hopper' 149 + or below.name == 'hopper:hopper_side' then 150 + local hopper = minetest.get_meta(below):get_inventory() 151 + return function(i) 152 + if hopper:room_for_item('main',i) then 153 + return hopper:add_item('main',i), true 154 + end 155 + return i, false 156 + end 157 + else 158 + return function(i) return i, false end 159 + end 160 + end; 125 161 }
Modified metal.lua from [dce6dabf6f] to [32259e26c1].
131 131 power = metal.power; 132 132 speed = metal.speed; 133 133 artificial = metal.artificial; 134 134 cooktime = metal.cooktime; 135 135 hardness = (metal.hardness/8) * 3; -- scaled wrt diamond 136 136 level = math.ceil(((metal.hardness/8) * 3)) + 1; 137 137 ingot_image = (metal.image and metal.image.ingot) or nil; 138 + ore_image = 'default_stone.png^sorcery_' .. name .. '_ore.png'; 138 139 lump_image = (metal.image and metal.image.lump) or nil; 139 140 armor_weight = metal.armor_weight; 140 141 armor_protection = metal.armor_protection; 141 142 } 142 143 end 143 144 minetest.register_craftitem(fragment, { 144 145 inventory_image = 'sorcery_' .. name .. '_fragment.png'; ................................................................................ 180 181 })) 181 182 end 182 183 if metal.sinter then 183 184 local powders = {} 184 185 for _,m in pairs(metal.sinter) do 185 186 powders[#powders+1] = 'sorcery:powder_' .. m 186 187 end 187 - if metal.sinter_catalyst then for _,m in pairs(metal.sinter_catalyst) 188 - do powders[#powders+1] = m end end 188 + local repl = {} 189 + if metal.sinter_catalyst then 190 + for _,m in pairs(metal.sinter_catalyst) do 191 + powders[#powders+1] = m 192 + if sorcery.data.infusion_leftovers[m] then 193 + repl[#repl+1] = {m, sorcery.data.infusion_leftovers[m]} 194 + end 195 + end 196 + end 197 + 189 198 minetest.register_craft { 190 199 type = 'shapeless'; 191 200 output = powder .. ' ' .. tostring(#powders); 192 201 recipe = powders; 202 + replacements = repl; 193 203 }; 194 204 end 195 205 end
Modified metallurgy-cold.lua from [a94be8d51a] to [e432fc7b5e].
19 19 -- factor by which wear is increased when grinding 20 20 -- above your paygrade 21 21 22 22 grind_factor = 10; 23 23 -- adjusts the amount of time it takes to grind 24 24 -- metal into powder 25 25 26 - grind_wear = 2000; 26 + grind_wear = 1000; 27 27 -- amount of damage done to a grind head grinding 28 28 -- metal of equal hardness. increased or decreased 29 29 -- depending on differential 30 30 31 31 grind_torque_factor = 0.1; 32 32 -- how many points of hardness translate into how 33 33 -- much ley-current needed (per second) ................................................................................ 232 232 local grind_wear = {} 233 233 local grinders_present = false 234 234 grinders_on = {false,false} 235 235 for i=1,inv:get_size('grinder') do 236 236 local gh = inv:get_stack('grinder',i) 237 237 if not gh:is_empty() then 238 238 grinders_present = true 239 - local hh = sorcery.data.metals[gh:get_definition()._proto.metal].hardness 239 + local gproto = gh:get_definition()._proto 240 + local hh = 0 241 + if gproto.metal then 242 + hh = sorcery.data.metals[gproto.metal].hardness 243 + elseif gproto.gem then 244 + hh = sorcery.data.gems[gproto.gem].hardness 245 + end 240 246 local dif = mp.hardness - hh 241 247 local wear 242 248 if dif == 0 then 243 249 wear = constants.grind_wear 244 250 elseif dif < 0 then 245 251 wear = constants.grind_wear * ((dif * -1)/constants.grind_range) 246 252 elseif dif > 0 then ................................................................................ 330 336 recipe = { 331 337 {'basic_materials:chain_steel','basic_materials:gear_steel','basic_materials:chain_steel'}; 332 338 {'basic_materials:gear_steel', 'basic_materials:steel_bar', 'basic_materials:gear_steel'}; 333 339 {'default:tin_ingot','default:steelblock','default:tin_ingot'}; 334 340 }; 335 341 } 336 342 for name,metal in pairs(sorcery.data.metals) do 343 + if metal.no_tools and not metal.grindhead then goto skip end 337 344 local i,f = metal.parts.ingot, metal.parts.fragment 338 345 local id = 'sorcery:mill_grindhead_' .. name 339 346 minetest.register_tool(id,{ 340 347 description = sorcery.lib.str.capitalize(name) .. ' Grinding Head'; 341 348 inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(metal.tone)):render(); 342 349 groups = { sorcery_mill_grindhead = 1, sorcery_metallurgy = 1 }; 343 350 _proto = { ................................................................................ 348 355 output = id; 349 356 recipe = { 350 357 {f,i,f}; 351 358 {i,'',i}; 352 359 {f,i,f}; 353 360 }; 354 361 } 355 -end 362 +::skip::end 363 + 364 +for name,gem in pairs(sorcery.data.gems) do 365 + if not gem.tools and not gem.grindhead then goto skip end 366 + local i,f = gem.parts.item, gem.parts.shard 367 + local id = 'sorcery:mill_grindhead_' .. name 368 + minetest.register_tool(id,{ 369 + description = sorcery.lib.str.capitalize(name) .. ' Grinding Head'; 370 + inventory_image = sorcery.lib.image('sorcery_mill_grindhead.png'):multiply(sorcery.lib.color(gem.tone)):render(); 371 + groups = { sorcery_mill_grindhead = 1, sorcery_metallurgy = 1 }; 372 + _proto = { 373 + gem = name; 374 + }; 375 + }); 376 + minetest.register_craft { 377 + output = id; 378 + recipe = { 379 + {f,i,f}; 380 + {i,'',i}; 381 + {f,i,f}; 382 + }; 383 + } 384 +::skip::end
Added models/sorcery-idol-blood.obj version [59ec52cbdf].
1 +# Blender v2.82 (sub 7) OBJ File: 'idol.blend' 2 +# www.blender.org 3 +mtllib sorcery-idol-blood.mtl 4 +o obsidian_Cube.002 5 +v -0.041172 0.418064 -0.024969 6 +v 0.033948 0.418064 -0.024969 7 +v 0.033948 0.418064 0.026311 8 +v -0.041172 0.418064 0.026311 9 +v -0.041172 0.512206 -0.024969 10 +v 0.033948 0.512206 -0.024969 11 +v 0.033948 0.512206 0.026311 12 +v -0.041172 0.512206 0.026311 13 +v -0.076580 0.512206 -0.049140 14 +v 0.069355 0.512206 -0.049141 15 +v 0.069355 0.512206 0.050482 16 +v -0.076580 0.512206 0.050482 17 +v -0.076580 0.535538 -0.049140 18 +v 0.069355 0.535538 -0.049141 19 +v 0.069355 0.535538 0.050482 20 +v -0.076580 0.535538 0.050482 21 +v -0.032642 0.535538 -0.019147 22 +v 0.025418 0.535538 -0.019147 23 +v 0.025418 0.535538 0.020488 24 +v -0.032642 0.535538 0.020488 25 +v -0.032642 0.696839 -0.019147 26 +v 0.025418 0.696839 -0.019147 27 +v 0.025418 0.696839 0.020488 28 +v -0.032642 0.696839 0.020488 29 +v -0.241735 0.512206 0.050482 30 +v -0.241735 0.512206 -0.049140 31 +v 0.234511 0.512206 -0.049141 32 +v 0.234511 0.512206 0.050482 33 +v -0.241735 0.535538 0.050482 34 +v -0.241735 0.535538 -0.049140 35 +v 0.234511 0.535538 -0.049141 36 +v 0.234511 0.535538 0.050482 37 +v 0.096881 0.512206 0.050482 38 +v 0.124407 0.512206 0.050482 39 +v 0.151933 0.512206 0.050482 40 +v 0.179459 0.512206 0.050482 41 +v 0.206985 0.512206 0.050482 42 +v 0.206985 0.535538 0.050482 43 +v 0.179459 0.535538 0.050482 44 +v 0.151933 0.535538 0.050482 45 +v 0.124407 0.535538 0.050482 46 +v 0.096881 0.535538 0.050482 47 +v 0.206985 0.535538 -0.049141 48 +v 0.179459 0.535538 -0.049141 49 +v 0.151933 0.535538 -0.049141 50 +v 0.124407 0.535538 -0.049141 51 +v 0.096881 0.535538 -0.049141 52 +v 0.206985 0.512206 -0.049141 53 +v 0.179459 0.512206 -0.049141 54 +v 0.151933 0.512206 -0.049141 55 +v 0.124407 0.512206 -0.049141 56 +v 0.096881 0.512206 -0.049141 57 +v -0.104106 0.535538 -0.049140 58 +v -0.131631 0.535538 -0.049140 59 +v -0.159157 0.535538 -0.049140 60 +v -0.186683 0.535538 -0.049140 61 +v -0.214209 0.535538 -0.049140 62 +v -0.214209 0.535538 0.050482 63 +v -0.186683 0.535538 0.050482 64 +v -0.159157 0.535538 0.050482 65 +v -0.131631 0.535538 0.050482 66 +v -0.104106 0.535538 0.050482 67 +v -0.104106 0.512206 -0.049140 68 +v -0.131631 0.512206 -0.049140 69 +v -0.159157 0.512206 -0.049140 70 +v -0.186683 0.512206 -0.049140 71 +v -0.214209 0.512206 -0.049140 72 +v -0.104106 0.512206 0.050482 73 +v -0.131631 0.512206 0.050482 74 +v -0.159157 0.512206 0.050482 75 +v -0.186683 0.512206 0.050482 76 +v -0.214209 0.512206 0.050482 77 +v -0.084837 0.512206 0.031238 78 +v -0.084837 0.512206 -0.029897 79 +v 0.077613 0.512206 -0.029897 80 +v 0.077613 0.512206 0.031238 81 +v 0.088623 0.512206 -0.029897 82 +v 0.088623 0.512206 0.031238 83 +v 0.128536 0.512206 0.031238 84 +v 0.147804 0.512206 0.031238 85 +v 0.179459 0.512206 0.031238 86 +v 0.206985 0.512206 0.031238 87 +v 0.206985 0.512206 -0.029897 88 +v 0.179459 0.512206 -0.029897 89 +v 0.147804 0.512206 -0.029897 90 +v 0.128536 0.512206 -0.029897 91 +v -0.095848 0.512206 -0.029897 92 +v -0.135760 0.512206 -0.029897 93 +v -0.155028 0.512206 -0.029897 94 +v -0.186683 0.512206 -0.029897 95 +v -0.214209 0.512206 -0.029897 96 +v -0.095848 0.512206 0.031238 97 +v -0.135760 0.512206 0.031238 98 +v -0.155028 0.512206 0.031238 99 +v -0.186683 0.512206 0.031238 100 +v -0.214209 0.512206 0.031238 101 +v -0.084837 0.447812 0.031238 102 +v -0.084837 0.447812 -0.029897 103 +v 0.077613 0.447812 -0.029897 104 +v 0.077613 0.447812 0.031238 105 +v 0.088623 0.447812 -0.029897 106 +v 0.088623 0.447812 0.031238 107 +v 0.128536 0.383719 0.031238 108 +v 0.147804 0.383719 0.031238 109 +v 0.179459 0.290128 0.031238 110 +v 0.206985 0.290128 0.031238 111 +v 0.206985 0.290128 -0.029897 112 +v 0.179459 0.290128 -0.029897 113 +v 0.147804 0.383719 -0.029897 114 +v 0.128536 0.383719 -0.029897 115 +v -0.095848 0.447812 -0.029897 116 +v -0.135760 0.383719 -0.029897 117 +v -0.155028 0.383719 -0.029897 118 +v -0.186683 0.290128 -0.029897 119 +v -0.214209 0.290128 -0.029897 120 +v -0.095848 0.447812 0.031238 121 +v -0.135760 0.383719 0.031238 122 +v -0.155028 0.383719 0.031238 123 +v -0.186683 0.290128 0.031238 124 +v -0.214209 0.290128 0.031238 125 +vt 0.553838 0.327048 126 +vt 0.446162 0.327048 127 +vt 0.446162 0.524722 128 +vt 0.553838 0.524722 129 +vt 0.578867 0.553838 130 +vt 0.421134 0.553838 131 +vt 0.346786 0.604591 132 +vt 0.653214 0.604591 133 +vt 0.578867 0.327048 134 +vt 0.421134 0.327048 135 +vt 0.421134 0.524722 136 +vt 0.578867 0.524722 137 +vt 0.446162 0.327048 138 +vt 0.553838 0.327048 139 +vt 0.553838 0.524722 140 +vt 0.446162 0.524722 141 +vt 0.421134 0.327048 142 +vt 0.578867 0.327048 143 +vt 0.578867 0.524722 144 +vt 0.421134 0.524722 145 +vt 0.057798 0.573714 146 +vt 0.057798 0.524722 147 +vt -0.000000 0.524722 148 +vt -0.000000 0.573714 149 +vt 0.578867 0.446162 150 +vt 0.653214 0.395409 151 +vt 0.421134 0.446162 152 +vt 0.346786 0.395409 153 +vt 0.346786 0.604591 154 +vt 0.346786 0.395409 155 +vt 0.439044 0.458388 156 +vt 0.439044 0.541612 157 +vt 0.346786 0.524722 158 +vt 0.653214 0.524722 159 +vt 0.653214 0.573714 160 +vt 0.346786 0.573714 161 +vt 0.942202 0.604591 162 +vt 0.942202 0.395409 163 +vt 1.000000 0.395409 164 +vt 1.000000 0.604591 165 +vt 0.653214 0.524722 166 +vt 0.346786 0.524722 167 +vt 0.346786 0.573714 168 +vt 0.653214 0.573714 169 +vt 0.458388 0.573714 170 +vt 0.541612 0.573714 171 +vt 0.541612 0.912407 172 +vt 0.458388 0.912407 173 +vt 0.653214 0.604591 174 +vt 0.560957 0.541612 175 +vt 0.653214 0.395409 176 +vt 0.560957 0.458388 177 +vt 0.560957 0.458388 178 +vt 0.560957 0.541612 179 +vt 0.439044 0.541612 180 +vt 0.439044 0.458388 181 +vt 0.439044 0.573714 182 +vt 0.560957 0.573714 183 +vt 0.560957 0.912407 184 +vt 0.439044 0.912407 185 +vt 0.541612 0.573714 186 +vt 0.458388 0.573714 187 +vt 0.458388 0.912407 188 +vt 0.541612 0.912407 189 +vt 0.560957 0.573714 190 +vt 0.439044 0.573714 191 +vt 0.439044 0.912407 192 +vt 0.560957 0.912407 193 +vt 0.395409 0.524722 194 +vt 0.604591 0.524722 195 +vt 0.604591 0.573714 196 +vt 0.395409 0.573714 197 +vt 0.604591 0.524722 198 +vt 0.395409 0.524722 199 +vt 0.395409 0.573714 200 +vt 0.604591 0.573714 201 +vt 0.942202 0.573714 202 +vt 0.942202 0.524722 203 +vt 1.000000 0.524722 204 +vt 1.000000 0.573714 205 +vt 0.942202 0.395409 206 +vt 0.942202 0.604591 207 +vt 1.000000 0.604591 208 +vt 1.000000 0.395409 209 +vt 0.057798 0.395409 210 +vt 0.057798 0.604591 211 +vt -0.000000 0.604591 212 +vt -0.000000 0.395409 213 +vt 0.057798 0.524722 214 +vt 0.057798 0.573714 215 +vt -0.000000 0.573714 216 +vt -0.000000 0.524722 217 +vt 0.057798 0.604591 218 +vt 0.057798 0.395409 219 +vt -0.000000 0.395409 220 +vt -0.000000 0.604591 221 +vt 0.942202 0.524722 222 +vt 0.942202 0.573714 223 +vt 1.000000 0.573714 224 +vt 1.000000 0.524722 225 +vt 0.288988 0.395409 226 +vt 0.288988 0.435815 227 +vt 0.346786 0.435815 228 +vt 0.288988 0.604591 229 +vt 0.231191 0.395409 230 +vt 0.231191 0.604591 231 +vt 0.231191 0.435815 232 +vt 0.231191 0.564185 233 +vt 0.173393 0.604591 234 +vt 0.173393 0.395409 235 +vt 0.115595 0.395409 236 +vt 0.115595 0.604591 237 +vt 0.711012 0.604591 238 +vt 0.711012 0.395409 239 +vt 0.711012 0.435815 240 +vt 0.711012 0.564185 241 +vt 0.288988 0.573714 242 +vt 0.288988 0.524722 243 +vt 0.231191 0.573714 244 +vt 0.231191 0.524722 245 +vt 0.173393 0.573714 246 +vt 0.173393 0.524722 247 +vt 0.115595 0.573714 248 +vt 0.115595 0.524722 249 +vt 0.288988 0.604591 250 +vt 0.288988 0.395409 251 +vt 0.231191 0.604591 252 +vt 0.231191 0.395409 253 +vt 0.173393 0.604591 254 +vt 0.173393 0.395409 255 +vt 0.115595 0.604591 256 +vt 0.115595 0.395409 257 +vt 0.288988 0.524722 258 +vt 0.288988 0.573714 259 +vt 0.231191 0.524722 260 +vt 0.231191 0.573714 261 +vt 0.173393 0.524722 262 +vt 0.173393 0.573714 263 +vt 0.115595 0.524722 264 +vt 0.115595 0.573714 265 +vt 0.711012 0.573714 266 +vt 0.711012 0.524722 267 +vt 0.768809 0.573714 268 +vt 0.768809 0.524722 269 +vt 0.826607 0.573714 270 +vt 0.826607 0.524722 271 +vt 0.884405 0.573714 272 +vt 0.884405 0.524722 273 +vt 0.653214 0.435815 274 +vt 0.768809 0.604591 275 +vt 0.768809 0.395409 276 +vt 0.288988 0.564185 277 +vt 0.826607 0.395409 278 +vt 0.826607 0.604591 279 +vt 0.884405 0.604591 280 +vt 0.884405 0.395409 281 +vt 0.826607 0.564185 282 +vt 0.768809 0.564185 283 +vt 0.711012 0.524722 284 +vt 0.711012 0.573714 285 +vt 0.768809 0.524722 286 +vt 0.768809 0.573714 287 +vt 0.826607 0.524722 288 +vt 0.826607 0.573714 289 +vt 0.884405 0.524722 290 +vt 0.884405 0.573714 291 +vt 0.711012 0.395409 292 +vt 0.711012 0.604591 293 +vt 0.768809 0.395409 294 +vt 0.768809 0.604591 295 +vt 0.826607 0.395409 296 +vt 0.826607 0.604591 297 +vt 0.884405 0.395409 298 +vt 0.884405 0.604591 299 +vt 0.435815 0.524722 300 +vt 0.564185 0.524722 301 +vt 0.564185 0.389511 302 +vt 0.435815 0.389511 303 +vt 0.435815 0.524722 304 +vt 0.564185 0.524722 305 +vt 0.564185 0.058412 306 +vt 0.435815 0.058412 307 +vt 0.231191 0.524722 308 +vt 0.173393 0.524722 309 +vt 0.173393 0.254932 310 +vt 0.231191 0.254932 311 +vt 0.826607 0.524722 312 +vt 0.768809 0.524722 313 +vt 0.768809 0.254932 314 +vt 0.826607 0.254932 315 +vt 0.564185 0.524722 316 +vt 0.435815 0.524722 317 +vt 0.435815 0.254932 318 +vt 0.564185 0.254932 319 +vt 0.115595 0.524722 320 +vt 0.057798 0.524722 321 +vt 0.057798 0.058412 322 +vt 0.115595 0.058412 323 +vt 0.768809 0.435815 324 +vt 0.942202 0.564185 325 +vt 0.884405 0.564185 326 +vt 0.173393 0.564185 327 +vt 0.173393 0.435815 328 +vt 0.346786 0.564185 329 +vt 0.826607 0.435815 330 +vt 0.115595 0.435815 331 +vt 0.115595 0.564185 332 +vt 0.653214 0.564185 333 +vt 0.057798 0.435815 334 +vt 0.884405 0.435815 335 +vt 0.057798 0.564185 336 +vt 0.942202 0.435815 337 +vt 0.346786 0.564185 338 +vt 0.346786 0.435815 339 +vt 0.288988 0.435815 340 +vt 0.288988 0.564185 341 +vt 0.231191 0.564185 342 +vt 0.231191 0.435815 343 +vt 0.173393 0.435815 344 +vt 0.173393 0.564185 345 +vt 0.115595 0.564185 346 +vt 0.115595 0.435815 347 +vt 0.057798 0.435815 348 +vt 0.057798 0.564185 349 +vt 0.653214 0.435815 350 +vt 0.653214 0.564185 351 +vt 0.711012 0.564185 352 +vt 0.711012 0.435815 353 +vt 0.768809 0.435815 354 +vt 0.768809 0.564185 355 +vt 0.826607 0.564185 356 +vt 0.826607 0.435815 357 +vt 0.884405 0.435815 358 +vt 0.884405 0.564185 359 +vt 0.942202 0.564185 360 +vt 0.942202 0.435815 361 +vt 0.942202 0.524722 362 +vt 0.884405 0.524722 363 +vt 0.884405 0.058412 364 +vt 0.942202 0.058412 365 +vt 0.435815 0.524722 366 +vt 0.564185 0.524722 367 +vt 0.564185 0.389511 368 +vt 0.435815 0.389511 369 +vt 0.564185 0.524722 370 +vt 0.435815 0.524722 371 +vt 0.435815 0.058412 372 +vt 0.564185 0.058412 373 +vt 0.564185 0.524722 374 +vt 0.435815 0.524722 375 +vt 0.435815 0.389511 376 +vt 0.564185 0.389511 377 +vt 0.653214 0.524722 378 +vt 0.711012 0.524722 379 +vt 0.711012 0.389511 380 +vt 0.653214 0.389511 381 +vt 0.564185 0.524722 382 +vt 0.435815 0.524722 383 +vt 0.435815 0.254932 384 +vt 0.564185 0.254932 385 +vt 0.346786 0.524722 386 +vt 0.288988 0.524722 387 +vt 0.288988 0.389511 388 +vt 0.346786 0.389511 389 +vt 0.768809 0.524722 390 +vt 0.826607 0.524722 391 +vt 0.826607 0.254932 392 +vt 0.768809 0.254932 393 +vt 0.435815 0.524722 394 +vt 0.564185 0.524722 395 +vt 0.564185 0.254932 396 +vt 0.435815 0.254932 397 +vt 0.288988 0.524722 398 +vt 0.346786 0.524722 399 +vt 0.346786 0.389511 400 +vt 0.288988 0.389511 401 +vt 0.884405 0.524722 402 +vt 0.942202 0.524722 403 +vt 0.942202 0.058412 404 +vt 0.884405 0.058412 405 +vt 0.564185 0.524722 406 +vt 0.435815 0.524722 407 +vt 0.435815 0.058412 408 +vt 0.564185 0.058412 409 +vt 0.173393 0.524722 410 +vt 0.231191 0.524722 411 +vt 0.231191 0.254932 412 +vt 0.173393 0.254932 413 +vt 0.564185 0.524722 414 +vt 0.435815 0.524722 415 +vt 0.435815 0.389511 416 +vt 0.564185 0.389511 417 +vt 0.435815 0.524722 418 +vt 0.564185 0.524722 419 +vt 0.564185 0.058412 420 +vt 0.435815 0.058412 421 +vt 0.057798 0.524722 422 +vt 0.115595 0.524722 423 +vt 0.115595 0.058412 424 +vt 0.057798 0.058412 425 +vt 0.435815 0.524722 426 +vt 0.564185 0.524722 427 +vt 0.564185 0.254932 428 +vt 0.435815 0.254932 429 +vt 0.711012 0.524722 430 +vt 0.653214 0.524722 431 +vt 0.653214 0.389511 432 +vt 0.711012 0.389511 433 +vt 1.000000 0.158676 434 +vt 0.000000 0.158676 435 +vt 0.000000 0.841324 436 +vt 1.000000 0.841324 437 +vn 1.0000 0.0000 -0.0000 438 +vn 0.0000 -1.0000 0.0000 439 +vn 0.0000 0.0000 1.0000 440 +vn -1.0000 0.0000 0.0000 441 +vn -0.0000 0.0000 -1.0000 442 +vn 0.0000 1.0000 0.0000 443 +g obsidian_Cube.002_obsidian 444 +usemtl obsidian 445 +s off 446 +f 3/1/1 2/2/1 6/3/1 7/4/1 447 +f 8/5/2 7/6/2 11/7/2 12/8/2 448 +f 4/9/3 3/10/3 7/11/3 8/12/3 449 +f 1/13/4 4/14/4 8/15/4 5/16/4 450 +f 2/17/5 1/18/5 5/19/5 6/20/5 451 +f 38/21/3 37/22/3 28/23/3 32/24/3 452 +f 5/25/2 8/5/2 12/8/2 9/26/2 453 +f 6/27/2 5/25/2 9/26/2 10/28/2 454 +f 7/6/2 6/27/2 10/28/2 11/7/2 455 +f 15/29/6 14/30/6 18/31/6 19/32/6 456 +f 10/33/5 9/34/5 13/35/5 14/36/5 457 +f 58/37/6 57/38/6 30/39/6 29/40/6 458 +f 12/41/3 11/42/3 15/43/3 16/44/3 459 +f 17/45/4 20/46/4 24/47/4 21/48/4 460 +f 16/49/6 15/29/6 19/32/6 20/50/6 461 +f 13/51/6 16/49/6 20/50/6 17/52/6 462 +f 14/30/6 13/51/6 17/52/6 18/31/6 463 +f 21/53/6 24/54/6 23/55/6 22/56/6 464 +f 18/57/5 17/58/5 21/59/5 22/60/5 465 +f 19/61/1 18/62/1 22/63/1 23/64/1 466 +f 20/65/3 19/66/3 23/67/3 24/68/3 467 +f 26/69/4 25/70/4 29/71/4 30/72/4 468 +f 28/73/1 27/74/1 31/75/1 32/76/1 469 +f 57/77/5 67/78/5 26/79/5 30/80/5 470 +f 67/81/2 72/82/2 25/83/2 26/84/2 471 +f 43/85/6 38/86/6 32/87/6 31/88/6 472 +f 48/89/5 43/90/5 31/91/5 27/92/5 473 +f 37/93/2 48/94/2 27/95/2 28/96/2 474 +f 72/97/3 58/98/3 29/99/3 25/100/3 475 +f 10/28/2 52/101/2 77/102/2 75/103/2 476 +f 33/104/2 52/101/2 51/105/2 34/106/2 477 +f 34/106/2 51/105/2 86/107/2 79/108/2 478 +f 35/109/2 50/110/2 49/111/2 36/112/2 479 +f 68/113/2 63/114/2 87/115/2 92/116/2 480 +f 10/33/5 14/36/5 47/117/5 52/118/5 481 +f 52/118/5 47/117/5 46/119/5 51/120/5 482 +f 51/120/5 46/119/5 45/121/5 50/122/5 483 +f 50/122/5 45/121/5 44/123/5 49/124/5 484 +f 49/124/5 44/123/5 43/90/5 48/89/5 485 +f 14/30/6 15/29/6 42/125/6 47/126/6 486 +f 47/126/6 42/125/6 41/127/6 46/128/6 487 +f 46/128/6 41/127/6 40/129/6 45/130/6 488 +f 45/130/6 40/129/6 39/131/6 44/132/6 489 +f 44/132/6 39/131/6 38/86/6 43/85/6 490 +f 15/43/3 11/42/3 33/133/3 42/134/3 491 +f 42/134/3 33/133/3 34/135/3 41/136/3 492 +f 41/136/3 34/135/3 35/137/3 40/138/3 493 +f 40/138/3 35/137/3 36/139/3 39/140/3 494 +f 39/140/3 36/139/3 37/22/3 38/21/3 495 +f 12/41/3 16/44/3 62/141/3 68/142/3 496 +f 68/142/3 62/141/3 61/143/3 69/144/3 497 +f 69/144/3 61/143/3 60/145/3 70/146/3 498 +f 70/146/3 60/145/3 59/147/3 71/148/3 499 +f 71/148/3 59/147/3 58/98/3 72/97/3 500 +f 63/114/2 9/26/2 74/149/2 87/115/2 501 +f 63/114/2 68/113/2 69/150/2 64/151/2 502 +f 52/101/2 33/104/2 78/152/2 77/102/2 503 +f 65/153/2 70/154/2 71/155/2 66/156/2 504 +f 69/150/2 70/154/2 94/157/2 93/158/2 505 +f 13/35/5 9/34/5 63/159/5 53/160/5 506 +f 53/160/5 63/159/5 64/161/5 54/162/5 507 +f 54/162/5 64/161/5 65/163/5 55/164/5 508 +f 55/164/5 65/163/5 66/165/5 56/166/5 509 +f 56/166/5 66/165/5 67/78/5 57/77/5 510 +f 16/49/6 13/51/6 53/167/6 62/168/6 511 +f 62/168/6 53/167/6 54/169/6 61/170/6 512 +f 61/170/6 54/169/6 55/171/6 60/172/6 513 +f 60/172/6 55/171/6 56/173/6 59/174/6 514 +f 59/174/6 56/173/6 57/38/6 58/37/6 515 +f 74/175/1 73/176/1 97/177/1 98/178/1 516 +f 90/179/1 95/180/1 119/181/1 114/182/1 517 +f 86/183/5 85/184/5 109/185/5 110/186/5 518 +f 89/187/5 88/188/5 112/189/5 113/190/5 519 +f 94/191/4 89/192/4 113/193/4 118/194/4 520 +f 84/195/5 83/196/5 107/197/5 108/198/5 521 +f 64/151/2 69/150/2 93/158/2 88/199/2 522 +f 71/155/2 72/82/2 96/200/2 95/201/2 523 +f 50/110/2 35/109/2 80/202/2 85/203/2 524 +f 33/104/2 11/7/2 76/204/2 78/152/2 525 +f 65/153/2 64/151/2 88/199/2 89/205/2 526 +f 70/154/2 65/153/2 89/205/2 94/157/2 527 +f 36/112/6 49/111/6 84/206/6 81/207/6 528 +f 9/26/2 12/8/2 73/208/2 74/149/2 529 +f 49/111/2 48/94/2 83/209/2 84/206/2 530 +f 66/156/6 71/155/6 95/201/6 90/210/6 531 +f 48/94/2 37/93/2 82/211/2 83/209/2 532 +f 35/109/2 34/106/2 79/108/2 80/202/2 533 +f 11/7/2 10/28/2 75/103/2 76/204/2 534 +f 67/81/2 66/156/2 90/210/2 91/212/2 535 +f 72/82/3 67/81/3 91/212/3 96/200/3 536 +f 12/8/2 68/113/2 92/116/2 73/208/2 537 +f 51/105/2 50/110/2 85/203/2 86/107/2 538 +f 37/93/2 36/112/2 81/207/2 82/211/2 539 +f 100/213/2 99/214/2 101/215/2 102/216/2 540 +f 103/217/2 110/218/2 109/219/2 104/220/2 541 +f 105/221/2 108/222/2 107/223/2 106/224/2 542 +f 98/225/2 97/226/2 116/227/2 111/228/2 543 +f 112/229/2 117/230/2 118/231/2 113/232/2 544 +f 114/233/2 119/234/2 120/235/2 115/236/2 545 +f 91/237/5 90/238/5 114/239/5 115/240/5 546 +f 77/241/1 78/242/1 102/243/1 101/244/1 547 +f 96/245/4 91/246/4 115/247/4 120/248/4 548 +f 76/249/4 75/250/4 99/251/4 100/252/4 549 +f 73/253/3 92/254/3 116/255/3 97/256/3 550 +f 79/257/4 86/258/4 110/259/4 103/260/4 551 +f 75/261/5 77/262/5 101/263/5 99/264/5 552 +f 93/265/3 94/266/3 118/267/3 117/268/3 553 +f 85/269/1 80/270/1 104/271/1 109/272/1 554 +f 78/273/3 76/274/3 100/275/3 102/276/3 555 +f 95/277/3 96/278/3 120/279/3 119/280/3 556 +f 81/281/4 84/282/4 108/283/4 105/284/4 557 +f 80/285/3 79/286/3 103/287/3 104/288/3 558 +f 92/289/4 87/290/4 111/291/4 116/292/4 559 +f 83/293/1 82/294/1 106/295/1 107/296/1 560 +f 82/297/3 81/298/3 105/299/3 106/300/3 561 +f 88/301/1 93/302/1 117/303/1 112/304/1 562 +f 87/305/5 74/306/5 98/307/5 111/308/5 563 +f 1/309/2 2/310/2 3/311/2 4/312/2 564 +o gold 565 +v -0.253612 -0.440095 0.150671 566 +v -0.253612 -0.500000 0.150671 567 +v -0.253612 -0.440095 -0.149329 568 +v -0.253612 -0.500000 -0.149329 569 +v 0.246388 -0.440095 0.150671 570 +v 0.246388 -0.500000 0.150671 571 +v 0.246388 -0.440095 -0.149329 572 +v 0.246388 -0.500000 -0.149329 573 +v -0.051687 -0.440095 -0.050353 574 +v 0.044462 -0.440095 -0.050353 575 +v 0.044462 -0.440095 0.051694 576 +v -0.051687 -0.440095 0.051694 577 +v -0.051687 -0.235535 -0.050353 578 +v 0.044462 -0.235535 -0.050353 579 +v 0.044462 -0.235535 0.051694 580 +v -0.051687 -0.235535 0.051694 581 +v -0.051687 -0.166005 -0.050353 582 +v 0.044462 -0.166005 -0.050353 583 +v 0.044462 -0.166005 0.051694 584 +v -0.051687 -0.166005 0.051694 585 +v -0.245071 -0.235535 0.051694 586 +v -0.245071 -0.235535 -0.050353 587 +v 0.237847 -0.235535 -0.050353 588 +v 0.237847 -0.235535 0.051694 589 +v -0.245071 -0.166005 0.051694 590 +v -0.245071 -0.166005 -0.050353 591 +v 0.237847 -0.166005 -0.050353 592 +v 0.237847 -0.166005 0.051694 593 +v -0.051687 0.295002 -0.038288 594 +v 0.044462 0.295002 -0.038288 595 +v 0.044462 0.295002 0.039629 596 +v -0.051687 0.295002 0.039629 597 +v 0.093939 0.295002 0.039629 598 +v -0.101164 0.295002 -0.038288 599 +v 0.093939 0.295002 -0.038288 600 +v -0.101164 0.295002 0.039629 601 +v 0.246495 0.248128 -0.038288 602 +v 0.246495 0.201254 -0.038288 603 +v 0.246495 0.201254 0.039629 604 +v 0.246495 0.248128 0.039629 605 +v -0.253720 0.201254 0.039629 606 +v -0.253720 0.248128 0.039629 607 +v -0.253720 0.248128 -0.038288 608 +v -0.253720 0.201254 -0.038288 609 +v -0.253720 0.201254 0.022466 610 +v -0.253720 0.248128 0.022466 611 +v -0.253720 0.248128 -0.021125 612 +v -0.253720 0.201254 -0.021125 613 +v -0.253720 0.185648 0.022466 614 +v -0.253720 0.263734 0.022466 615 +v -0.253720 0.263734 -0.021125 616 +v -0.253720 0.185648 -0.021125 617 +v -0.300567 0.263734 0.022466 618 +v -0.300567 0.263734 -0.021124 619 +v -0.253720 0.283424 0.022466 620 +v -0.253720 0.283424 -0.021125 621 +v -0.300567 0.283424 0.022466 622 +v -0.300567 0.283424 -0.021124 623 +v -0.233962 0.263734 0.022466 624 +v -0.233962 0.263734 -0.021125 625 +v -0.320325 0.263734 0.022466 626 +v -0.320325 0.263734 -0.021124 627 +v -0.233962 0.283424 0.022466 628 +v -0.233962 0.283424 -0.021125 629 +v -0.320325 0.283424 0.022466 630 +v -0.320325 0.283424 -0.021124 631 +v 0.246495 0.248128 -0.022435 632 +v 0.246495 0.201254 -0.022435 633 +v 0.246495 0.201254 0.023776 634 +v 0.246495 0.248128 0.023776 635 +v 0.246495 0.262724 -0.022435 636 +v 0.246495 0.186657 -0.022435 637 +v 0.246495 0.186657 0.023776 638 +v 0.246495 0.262724 0.023776 639 +v 0.294296 0.186657 -0.022435 640 +v 0.294296 0.186657 0.023776 641 +v 0.246495 0.167428 -0.022435 642 +v 0.246495 0.167428 0.023776 643 +v 0.294296 0.167428 -0.022435 644 +v 0.294296 0.167428 0.023776 645 +v 0.211036 0.186657 -0.022435 646 +v 0.211036 0.186657 0.023776 647 +v 0.329755 0.186657 -0.022435 648 +v 0.329755 0.186657 0.023776 649 +v 0.211036 0.167428 -0.022435 650 +v 0.211036 0.167428 0.023776 651 +v 0.329755 0.167428 -0.022435 652 +v 0.329755 0.167428 0.023776 653 +v 0.294296 0.186657 -0.033582 654 +v 0.246495 0.186657 -0.033582 655 +v 0.246495 0.186657 0.034923 656 +v 0.294296 0.186657 0.034923 657 +v 0.294296 0.167428 -0.033582 658 +v 0.246495 0.167428 -0.033582 659 +v 0.246495 0.167428 0.034923 660 +v 0.294296 0.167428 0.034923 661 +v 0.329755 0.186657 0.034923 662 +v 0.329755 0.167428 0.034923 663 +v 0.329755 0.167428 -0.033582 664 +v 0.329755 0.186657 -0.033582 665 +v 0.211036 0.186657 0.034923 666 +v 0.211036 0.167428 0.034923 667 +v 0.211036 0.186657 -0.033582 668 +v 0.211036 0.167428 -0.033582 669 +v -0.253720 0.263734 0.029950 670 +v -0.300567 0.263734 0.029950 671 +v -0.253720 0.263734 -0.028609 672 +v -0.300567 0.263734 -0.028609 673 +v -0.253720 0.283424 0.029950 674 +v -0.300567 0.283424 0.029950 675 +v -0.253720 0.283424 -0.028609 676 +v -0.300567 0.283424 -0.028609 677 +v -0.320325 0.263734 -0.028609 678 +v -0.320325 0.283424 -0.028609 679 +v -0.233962 0.283424 -0.028609 680 +v -0.233962 0.263734 -0.028609 681 +v -0.320325 0.263734 0.029950 682 +v -0.320325 0.283424 0.029950 683 +v -0.233962 0.283424 0.029950 684 +v -0.233962 0.263734 0.029950 685 +v -0.051687 0.305172 0.039629 686 +v -0.051687 0.305172 -0.038288 687 +v 0.044462 0.305172 -0.038288 688 +v 0.044462 0.305172 0.039629 689 +v 0.093939 0.305172 0.039629 690 +v -0.101164 0.305172 -0.038288 691 +v 0.093939 0.305172 -0.038288 692 +v -0.101164 0.305172 0.039629 693 +vt 1.000000 0.067349 694 +vt 1.000000 0.186161 695 +vt 0.000000 0.186161 696 +vt 0.000000 0.067349 697 +vt 0.000000 0.067349 698 +vt 0.000000 0.186161 699 +vt 1.000000 0.186161 700 +vt 1.000000 0.067349 701 +vt 1.000000 0.800000 702 +vt 1.000000 0.200000 703 +vt 0.000000 0.200000 704 +vt 0.000000 0.800000 705 +vt 0.200000 0.186161 706 +vt 0.800000 0.186161 707 +vt 0.800000 0.067349 708 +vt 0.200000 0.067349 709 +vt 0.800000 0.186161 710 +vt 0.200000 0.186161 711 +vt 0.200000 0.067349 712 +vt 0.800000 0.067349 713 +vt 1.000000 0.200000 714 +vt 1.000000 0.800000 715 +vt 0.596149 0.602047 716 +vt 0.596149 0.397953 717 +vt 0.596149 0.186161 718 +vt 0.403852 0.186161 719 +vt 0.403852 0.595280 720 +vt 0.596149 0.595280 721 +vt 0.000000 0.800000 722 +vt 0.403852 0.602047 723 +vt 0.000000 0.200000 724 +vt 0.403852 0.397953 725 +vt 0.596149 0.734340 726 +vt 0.596149 0.595280 727 +vt 0.982917 0.595280 728 +vt 0.982917 0.734340 729 +vt 0.397953 0.186161 730 +vt 0.602047 0.186161 731 +vt 0.602047 0.595280 732 +vt 0.397953 0.595280 733 +vt 0.403852 0.186161 734 +vt 0.596149 0.186161 735 +vt 0.403852 0.595280 736 +vt 0.602047 0.186161 737 +vt 0.397953 0.186161 738 +vt 0.397953 0.595280 739 +vt 0.602047 0.595280 740 +vt 0.999999 0.605656 741 +vt 0.599550 0.605656 742 +vt 0.599550 0.394344 743 +vt 0.999999 0.394344 744 +vt 0.403852 0.734340 745 +vt 0.403852 0.734340 746 +vt 0.017082 0.595280 747 +vt 0.017082 0.734340 748 +vt 0.596149 0.734340 749 +vt 0.397953 0.595280 750 +vt 0.602047 0.595280 751 +vt 0.602047 0.734340 752 +vt 0.397953 0.734340 753 +vt 0.602047 0.595280 754 +vt 0.397953 0.595280 755 +vt 0.397953 0.734340 756 +vt 0.602047 0.734340 757 +vt 0.596149 0.397953 758 +vt 0.596149 0.602047 759 +vt 0.982917 0.602047 760 +vt 0.982917 0.397953 761 +vt 0.017082 0.734340 762 +vt 0.017082 0.595280 763 +vt 0.403852 0.602047 764 +vt 0.403852 0.397953 765 +vt 0.017082 0.397953 766 +vt 0.017082 0.602047 767 +vt 0.982917 0.734340 768 +vt 0.982917 0.595280 769 +vt -0.000001 0.394344 770 +vt 0.400451 0.394344 771 +vt 0.400451 0.605656 772 +vt -0.000001 0.605656 773 +vt 0.439425 0.782114 774 +vt 0.375678 0.782114 775 +vt 0.375678 0.795218 776 +vt 0.439425 0.795218 777 +vt 0.375678 0.782114 778 +vt 0.439425 0.782114 779 +vt 0.439425 0.795218 780 +vt 0.375678 0.795218 781 +vt 0.179123 0.450394 782 +vt 0.179123 0.550783 783 +vt 0.179123 0.530358 784 +vt 0.179123 0.470819 785 +vt 0.823606 0.450394 786 +vt 0.823606 0.550783 787 +vt 0.823606 0.528669 788 +vt 0.823606 0.472507 789 +vt 0.823606 0.550783 790 +vt 0.823606 0.450394 791 +vt 0.823606 0.472507 792 +vt 0.823606 0.528669 793 +vt 0.285735 0.220882 794 +vt 0.285735 0.220882 795 +vt 0.285735 0.220882 796 +vt 0.285735 0.220882 797 +vt 0.285735 0.779118 798 +vt 0.285735 0.779118 799 +vt 0.285735 0.779118 800 +vt 0.285735 0.779118 801 +vt 0.477230 0.615028 802 +vt 0.477230 0.628979 803 +vt 0.471927 0.628979 804 +vt 0.471927 0.615028 805 +vt 0.703302 0.550113 806 +vt 0.717302 0.550113 807 +vt 0.717302 0.544810 808 +vt 0.703302 0.544810 809 +vt 0.703302 0.580998 810 +vt 0.703302 0.550113 811 +vt 0.717302 0.550113 812 +vt 0.717302 0.580998 813 +vt 0.717302 0.580998 814 +vt 0.703302 0.580998 815 +vt 0.703302 0.586301 816 +vt 0.717302 0.586301 817 +vt 0.508116 0.615028 818 +vt 0.508116 0.628979 819 +vt 0.508116 0.615028 820 +vt 0.477230 0.615028 821 +vt 0.477230 0.628979 822 +vt 0.508116 0.628979 823 +vt 0.670110 0.550113 824 +vt 0.670110 0.544810 825 +vt 0.703302 0.544810 826 +vt 0.670110 0.580998 827 +vt 0.656110 0.580998 828 +vt 0.656110 0.550113 829 +vt 0.670110 0.580998 830 +vt 0.670110 0.550113 831 +vt 0.656110 0.550113 832 +vt 0.656110 0.580998 833 +vt 0.717302 0.586301 834 +vt 0.703302 0.586301 835 +vt 0.670110 0.586301 836 +vt 1.000000 0.983381 837 +vt -0.000000 0.983381 838 +vt -0.000000 0.016619 839 +vt 1.000000 0.016619 840 +vt 0.179123 0.550783 841 +vt 0.179123 0.450394 842 +vt 0.179123 0.470819 843 +vt 0.179123 0.530358 844 +vt 0.724426 0.196247 845 +vt 0.724426 0.196247 846 +vt 0.724426 0.196247 847 +vt 0.724426 0.196247 848 +vt 0.724426 0.803753 849 +vt 0.724426 0.803753 850 +vt 0.724426 0.803753 851 +vt 0.724426 0.803753 852 +vt 0.701318 0.305374 853 +vt 1.000000 0.305374 854 +vt 1.000000 0.211481 855 +vt 0.701318 0.211481 856 +vt 0.694626 0.419013 857 +vt 0.694626 0.580986 858 +vt 0.788519 0.580986 859 +vt 0.788519 0.419013 860 +vt 0.701318 0.305374 861 +vt 0.298683 0.305374 862 +vt 0.298683 0.211481 863 +vt 0.701318 0.211481 864 +vt 0.000000 0.694626 865 +vt 0.298683 0.694626 866 +vt 0.298683 0.788519 867 +vt 0.000000 0.788519 868 +vt 0.305374 0.580987 869 +vt 0.305374 0.419014 870 +vt 0.694626 0.580986 871 +vt 0.305374 0.580987 872 +vt 0.305374 0.419014 873 +vt 0.694626 0.419013 874 +vt 0.701318 0.694626 875 +vt 1.000000 0.694626 876 +vt 0.298683 0.694626 877 +vt 0.000000 0.694626 878 +vt 0.000000 0.788519 879 +vt 0.298683 0.788519 880 +vt 0.701318 0.788519 881 +vt 0.000000 0.305374 882 +vt 0.298683 0.305374 883 +vt 0.000000 0.305374 884 +vt 0.701318 0.694626 885 +vt 1.000000 0.305374 886 +vt 1.000000 0.694626 887 +vt 0.298683 0.580986 888 +vt 0.298683 0.419013 889 +vt 0.000000 0.419013 890 +vt 0.000000 0.580986 891 +vt 0.701318 0.580986 892 +vt 0.701318 0.419013 893 +vt 1.000000 0.580986 894 +vt 1.000000 0.419013 895 +vt 0.701318 0.580987 896 +vt 0.298683 0.580987 897 +vt 0.298683 0.419014 898 +vt 0.701318 0.419014 899 +vt 1.000000 0.419014 900 +vt 1.000000 0.580987 901 +vt 0.000000 0.580987 902 +vt 0.000000 0.419014 903 +vt 0.211481 0.419014 904 +vt 0.211481 0.580987 905 +vt 1.000000 0.211481 906 +vt 0.701318 0.788519 907 +vt 0.788519 0.419013 908 +vt 0.788519 0.580986 909 +vt 0.000000 0.211481 910 +vt 0.211481 0.580987 911 +vt 0.211481 0.419014 912 +vt 0.298683 0.211481 913 +vt 0.000000 0.211481 914 +vt 1.000000 0.788519 915 +vt 1.000000 0.788519 916 +vt 0.670110 0.615028 917 +vt 0.703302 0.615028 918 +vt 0.703302 0.628979 919 +vt 0.670110 0.628979 920 +vt 0.703302 0.615028 921 +vt 0.703302 0.628979 922 +vt 0.717302 0.628979 923 +vt 0.717302 0.615028 924 +vt 0.670110 0.615028 925 +vt 0.670110 0.628979 926 +vt 0.717302 0.615028 927 +vt 0.717302 0.628979 928 +vt 0.656110 0.615028 929 +vt 0.656110 0.628979 930 +vt 0.656110 0.628979 931 +vt 0.656110 0.615028 932 +vt 0.656110 0.586301 933 +vt 0.670110 0.586301 934 +vt 0.471927 0.615028 935 +vt 0.471927 0.628979 936 +vt 0.656110 0.544810 937 +vt 0.670110 0.544810 938 +vt 0.513419 0.615028 939 +vt 0.513419 0.628979 940 +vt 0.656110 0.544810 941 +vt 0.513419 0.628979 942 +vt 0.513419 0.615028 943 +vt 0.656110 0.586301 944 +vt 0.717302 0.544810 945 +vt 0.563304 0.550783 946 +vt 0.563304 0.450394 947 +vt 0.627051 0.450394 948 +vt 0.627051 0.550783 949 +vt 0.439425 0.450394 950 +vt 0.439425 0.550783 951 +vt 0.375678 0.550783 952 +vt 0.375678 0.450394 953 +vt 0.550783 0.782114 954 +vt 0.450394 0.782114 955 +vt 0.450394 0.795218 956 +vt 0.550783 0.795218 957 +vt 0.550783 0.782114 958 +vt 0.450394 0.782114 959 +vt 0.450394 0.795218 960 +vt 0.550783 0.795218 961 +vt 0.627051 0.782114 962 +vt 0.563304 0.782114 963 +vt 0.563304 0.795218 964 +vt 0.627051 0.795218 965 +vt 0.563304 0.782114 966 +vt 0.627051 0.782114 967 +vt 0.627051 0.795218 968 +vt 0.563304 0.795218 969 +vt 0.450394 0.782114 970 +vt 0.550783 0.782114 971 +vt 0.550783 0.795218 972 +vt 0.450394 0.795218 973 +vt 0.450394 0.782114 974 +vt 0.550783 0.782114 975 +vt 0.550783 0.795218 976 +vt 0.450394 0.795218 977 +vt 0.746405 0.699681 978 +vt 0.999999 0.699681 979 +vt 0.999999 0.300319 980 +vt 0.746405 0.300319 981 +vt 0.253596 0.300319 982 +vt -0.000001 0.300319 983 +vt -0.000001 0.699681 984 +vt 0.253596 0.699681 985 +vt 0.000000 0.034757 986 +vt 0.000000 0.965243 987 +vt 1.000000 0.965243 988 +vt 1.000000 0.034757 989 +vt 0.000000 0.034757 990 +vt 1.000000 0.034757 991 +vt 1.000000 0.965243 992 +vt 0.000000 0.965243 993 +vn -0.0000 0.0000 -1.0000 994 +vn 0.0000 0.0000 1.0000 995 +vn 0.0000 -1.0000 -0.0000 996 +vn 1.0000 0.0000 -0.0000 997 +vn -1.0000 0.0000 0.0000 998 +vn 0.0000 1.0000 -0.0000 999 +g gold_gold_gold 1000 +usemtl gold 1001 +s off 1002 +f 124/313/7 123/314/7 127/315/7 128/316/7 1003 +f 126/317/8 125/318/8 121/319/8 122/320/8 1004 +f 122/321/9 124/322/9 128/323/9 126/324/9 1005 +f 127/325/10 125/326/10 126/327/10 128/328/10 1006 +f 121/329/11 123/330/11 124/331/11 122/332/11 1007 +f 123/333/12 121/334/12 132/335/12 129/336/12 1008 +f 132/337/8 131/338/8 135/339/8 136/340/8 1009 +f 121/334/12 125/341/12 131/342/12 132/335/12 1010 +f 125/341/12 127/343/12 130/344/12 131/342/12 1011 +f 127/343/12 123/333/12 129/336/12 130/344/12 1012 +f 137/345/7 133/346/7 142/347/7 146/348/7 1013 +f 129/349/11 132/350/11 136/351/11 133/352/11 1014 +f 130/353/7 129/354/7 133/346/7 134/355/7 1015 +f 131/356/10 130/357/10 134/358/10 135/359/10 1016 +f 145/360/12 140/361/12 137/362/12 146/363/12 1017 +f 134/355/7 133/346/7 137/345/7 138/364/7 1018 +f 139/365/8 135/339/8 144/366/8 148/367/8 1019 +f 136/340/8 135/339/8 139/365/8 140/368/8 1020 +f 142/369/11 141/370/11 145/371/11 146/372/11 1021 +f 144/373/10 143/374/10 147/375/10 148/376/10 1022 +f 133/377/9 136/378/9 141/379/9 142/380/9 1023 +f 134/355/7 138/364/7 147/381/7 143/382/7 1024 +f 135/383/9 134/384/9 143/385/9 144/386/9 1025 +f 136/340/8 140/368/8 145/387/8 141/388/8 1026 +f 147/389/12 138/390/12 139/391/12 148/392/12 1027 +f 137/362/12 140/361/12 139/391/12 138/390/12 1028 +f 151/393/8 153/394/8 245/395/8 244/396/8 1029 +f 155/397/7 150/398/7 243/399/7 247/400/7 1030 +f 157/401/12 160/402/12 190/403/12 187/404/12 1031 +f 164/405/9 161/406/9 165/407/9 168/408/9 1032 +f 162/409/12 163/410/12 167/411/12 166/412/12 1033 +f 167/413/8 168/414/8 172/415/8 171/416/8 1034 +f 165/417/8 166/418/8 170/419/8 169/420/8 1035 +f 182/421/11 186/422/11 234/423/11 233/424/11 1036 +f 174/425/9 182/426/9 233/427/9 228/428/9 1037 +f 177/429/12 178/430/12 186/431/12 185/432/12 1038 +f 181/433/9 173/434/9 226/435/9 237/436/9 1039 +f 182/421/11 181/437/11 185/438/11 186/422/11 1040 +f 179/439/10 180/440/10 184/441/10 183/442/10 1041 +f 174/425/9 173/434/9 181/433/9 182/426/9 1042 +f 178/430/12 176/443/12 231/444/12 232/445/12 1043 +f 176/443/12 175/446/12 183/447/12 184/448/12 1044 +f 170/449/9 171/450/9 180/451/9 179/452/9 1045 +f 177/429/12 185/432/12 238/453/12 230/454/12 1046 +f 175/446/12 177/429/12 230/454/12 229/455/12 1047 +f 193/456/12 196/457/12 195/458/12 192/459/12 1048 +f 159/460/9 158/461/9 188/462/9 189/463/9 1049 +f 188/464/8 187/465/8 191/466/8 192/467/8 1050 +f 190/468/8 189/469/8 193/470/8 194/471/8 1051 +f 197/472/9 205/473/9 224/474/9 214/475/9 1052 +f 208/476/10 204/477/10 217/478/10 218/479/10 1053 +f 192/480/12 195/481/12 209/482/12 210/483/12 1054 +f 204/484/12 196/485/12 212/486/12 217/487/12 1055 +f 203/488/10 204/477/10 208/476/10 207/489/10 1056 +f 202/490/11 201/491/11 205/492/11 206/493/11 1057 +f 197/472/9 198/494/9 206/495/9 205/473/9 1058 +f 200/496/9 208/497/9 218/498/9 216/499/9 1059 +f 198/494/9 200/496/9 216/499/9 215/500/9 1060 +f 195/481/12 196/485/12 204/484/12 203/501/12 1061 +f 200/496/9 199/502/9 207/503/9 208/497/9 1062 +f 193/504/12 192/480/12 201/505/12 202/506/12 1063 +f 212/507/8 216/508/8 218/509/8 217/510/8 1064 +f 212/507/8 211/511/8 215/512/8 216/508/8 1065 +f 215/512/8 211/511/8 221/513/8 222/514/8 1066 +f 210/515/7 209/516/7 213/517/7 214/518/7 1067 +f 210/515/7 214/518/7 224/519/7 223/520/7 1068 +f 213/517/7 209/516/7 220/521/7 219/522/7 1069 +f 203/488/10 207/489/10 219/523/10 220/524/10 1070 +f 201/505/12 192/480/12 210/483/12 223/525/12 1071 +f 196/485/12 193/504/12 211/526/12 212/486/12 1072 +f 202/490/11 206/493/11 222/527/11 221/528/11 1073 +f 195/481/12 203/501/12 220/529/12 209/482/12 1074 +f 205/492/11 201/491/11 223/530/11 224/531/11 1075 +f 207/503/9 199/502/9 213/532/9 219/533/9 1076 +f 193/504/12 202/506/12 221/534/12 211/526/12 1077 +f 199/502/9 197/472/9 214/475/9 213/532/9 1078 +f 206/495/9 198/494/9 215/500/9 222/535/9 1079 +f 227/536/7 228/537/7 232/538/7 231/539/7 1080 +f 226/540/8 230/541/8 238/542/8 237/543/8 1081 +f 226/540/8 225/544/8 229/545/8 230/541/8 1082 +f 232/538/7 228/537/7 233/546/7 234/547/7 1083 +f 229/545/8 225/544/8 240/548/8 239/549/8 1084 +f 227/536/7 231/539/7 235/550/7 236/551/7 1085 +f 183/447/12 175/446/12 229/455/12 239/552/12 1086 +f 173/434/9 170/449/9 225/553/9 226/435/9 1087 +f 184/441/10 180/440/10 236/554/10 235/555/10 1088 +f 176/443/12 184/448/12 235/556/12 231/444/12 1089 +f 171/450/9 174/425/9 228/428/9 227/557/9 1090 +f 185/438/11 181/437/11 237/558/11 238/559/11 1091 +f 180/451/9 171/450/9 227/557/9 236/560/9 1092 +f 179/439/10 183/442/10 239/561/10 240/562/10 1093 +f 170/449/9 179/452/9 240/563/9 225/553/9 1094 +f 186/431/12 178/430/12 232/445/12 234/564/12 1095 +f 241/565/12 242/566/12 246/567/12 248/568/12 1096 +f 243/569/12 244/570/12 245/571/12 247/572/12 1097 +f 152/573/10 149/574/10 242/575/10 241/576/10 1098 +f 153/577/10 155/578/10 247/579/10 245/580/10 1099 +f 156/581/8 152/582/8 241/583/8 248/584/8 1100 +f 149/585/7 154/586/7 246/587/7 242/588/7 1101 +f 150/589/11 151/590/11 244/591/11 243/592/11 1102 +f 154/593/11 156/594/11 248/595/11 246/596/11 1103 +f 152/597/9 156/598/9 154/599/9 149/600/9 1104 +f 150/601/9 155/602/9 153/603/9 151/604/9 1105 +f 171/605/9 170/606/9 173/607/9 174/608/9 1106 +f 176/609/12 178/610/12 177/611/12 175/612/12 1107 +o body 1108 +v -0.051687 -0.166005 -0.038288 1109 +v 0.044462 -0.166005 -0.038288 1110 +v 0.044462 -0.166005 0.039629 1111 +v -0.051687 -0.166005 0.039629 1112 +v -0.150641 -0.166005 0.039629 1113 +v -0.150641 -0.166005 -0.038288 1114 +v 0.143417 -0.166005 -0.038288 1115 +v 0.143417 -0.166005 0.039629 1116 +v -0.051687 0.060632 -0.038288 1117 +v 0.044462 0.060632 -0.038288 1118 +v 0.044462 0.060632 0.039629 1119 +v -0.051687 0.060632 0.039629 1120 +v -0.150641 0.060632 0.039629 1121 +v -0.150641 0.060632 -0.038288 1122 +v 0.143417 0.060632 -0.038288 1123 +v 0.143417 0.060632 0.039629 1124 +v 0.044462 -0.081230 -0.038288 1125 +v -0.051687 -0.081230 -0.038288 1126 +v -0.051687 -0.081230 0.039629 1127 +v -0.150641 -0.081230 0.039629 1128 +v -0.150641 -0.081230 -0.038288 1129 +v 0.143417 -0.081230 -0.038288 1130 +v 0.143417 -0.081230 0.039629 1131 +v 0.044462 -0.081230 0.039629 1132 +v 0.044462 -0.081230 -0.066455 1133 +v 0.044462 -0.166005 -0.066455 1134 +v 0.143417 -0.166005 0.067796 1135 +v 0.044462 -0.166005 0.067796 1136 +v -0.150641 -0.166005 -0.066455 1137 +v -0.051687 -0.166005 -0.066455 1138 +v 0.143417 -0.166005 -0.066455 1139 +v -0.051687 -0.166005 0.067796 1140 +v -0.150641 -0.166005 0.067796 1141 +v -0.150641 -0.081230 0.067796 1142 +v 0.143417 -0.081230 0.067796 1143 +v -0.051687 -0.081230 -0.066455 1144 +v -0.051687 -0.081230 0.067796 1145 +v -0.150641 -0.081230 -0.066455 1146 +v 0.143417 -0.081230 -0.066455 1147 +v 0.044462 -0.081230 0.067796 1148 +v 0.044462 -0.081230 -0.107817 1149 +v 0.044462 -0.166005 -0.107817 1150 +v 0.143417 -0.166005 0.109158 1151 +v 0.044462 -0.166005 0.109158 1152 +v -0.150641 -0.166005 -0.107817 1153 +v -0.051687 -0.166005 -0.107817 1154 +v 0.143417 -0.166005 -0.107817 1155 +v -0.051687 -0.166005 0.109158 1156 +v -0.150641 -0.166005 0.109158 1157 +v -0.150641 -0.081230 0.109158 1158 +v 0.143417 -0.081230 0.109158 1159 +v -0.051687 -0.081230 -0.107817 1160 +v -0.051687 -0.081230 0.109158 1161 +v -0.150641 -0.081230 -0.107817 1162 +v 0.143417 -0.081230 -0.107817 1163 +v 0.044462 -0.081230 0.109158 1164 +v 0.143417 -0.358086 0.067796 1165 +v 0.044462 -0.358086 0.067796 1166 +v -0.150641 -0.358086 -0.066455 1167 +v -0.051687 -0.358086 -0.066455 1168 +v 0.143417 -0.358086 -0.066455 1169 +v 0.044462 -0.358086 -0.066455 1170 +v -0.051687 -0.358086 0.067796 1171 +v -0.150641 -0.358086 0.067796 1172 +v 0.143417 -0.358086 0.109158 1173 +v 0.044462 -0.358086 0.109158 1174 +v -0.150641 -0.358086 -0.107817 1175 +v -0.051687 -0.358086 -0.107817 1176 +v 0.143417 -0.358086 -0.107817 1177 +v 0.044462 -0.358086 -0.107817 1178 +v -0.051687 -0.358086 0.109158 1179 +v -0.150641 -0.358086 0.109158 1180 +v 0.093939 0.060632 0.039629 1181 +v -0.101164 0.060632 -0.038288 1182 +v 0.093939 0.060632 -0.038288 1183 +v -0.101164 0.060632 0.039629 1184 +v -0.051687 0.295002 -0.038288 1185 +v 0.044462 0.295002 -0.038288 1186 +v 0.044462 0.295002 0.039629 1187 +v -0.051687 0.295002 0.039629 1188 +v 0.093939 0.295002 0.039629 1189 +v -0.101164 0.295002 -0.038288 1190 +v 0.093939 0.295002 -0.038288 1191 +v -0.101164 0.295002 0.039629 1192 +v 0.093939 0.248128 -0.038288 1193 +v 0.093939 0.201254 -0.038288 1194 +v 0.093939 0.154380 -0.038288 1195 +v 0.093939 0.107506 -0.038288 1196 +v 0.044462 0.107506 -0.038288 1197 +v 0.044462 0.154380 -0.038288 1198 +v 0.044462 0.201254 -0.038288 1199 +v 0.044462 0.248128 -0.038288 1200 +v 0.093939 0.107506 0.039629 1201 +v 0.093939 0.154380 0.039629 1202 +v 0.093939 0.201254 0.039629 1203 +v 0.093939 0.248128 0.039629 1204 +v 0.044462 0.248128 0.039629 1205 +v 0.044462 0.201254 0.039629 1206 +v 0.044462 0.154380 0.039629 1207 +v 0.044462 0.107506 0.039629 1208 +v -0.101164 0.107506 0.039629 1209 +v -0.101164 0.154380 0.039629 1210 +v -0.101164 0.201254 0.039629 1211 +v -0.101164 0.248128 0.039629 1212 +v -0.101164 0.248128 -0.038288 1213 +v -0.101164 0.201254 -0.038288 1214 +v -0.101164 0.154380 -0.038288 1215 +v -0.101164 0.107506 -0.038288 1216 +v -0.051687 0.107506 -0.038288 1217 +v -0.051687 0.154380 -0.038288 1218 +v -0.051687 0.201254 -0.038288 1219 +v -0.051687 0.248128 -0.038288 1220 +v -0.051687 0.107506 0.039629 1221 +v -0.051687 0.154380 0.039629 1222 +v -0.051687 0.201254 0.039629 1223 +v -0.051687 0.248128 0.039629 1224 +v 0.167664 0.154380 -0.038288 1225 +v 0.167664 0.107506 -0.038288 1226 +v 0.167664 0.107506 0.039629 1227 +v 0.167664 0.154380 0.039629 1228 +v -0.176901 0.107506 0.039629 1229 +v -0.176901 0.154380 0.039629 1230 +v -0.176902 0.154380 -0.038288 1231 +v -0.176902 0.107506 -0.038288 1232 +v 0.246495 0.248128 -0.038288 1233 +v 0.246495 0.201254 -0.038288 1234 +v 0.246495 0.201254 0.039629 1235 +v 0.246495 0.248128 0.039629 1236 +v -0.253720 0.201254 0.039629 1237 +v -0.253720 0.248128 0.039629 1238 +v -0.253720 0.248128 -0.038288 1239 +v -0.253720 0.201254 -0.038288 1240 +v -0.051687 0.313148 -0.038288 1241 +v 0.044462 0.313148 -0.038288 1242 +v 0.044462 0.313148 0.039629 1243 +v -0.051687 0.313148 0.039629 1244 +v -0.071481 0.313148 -0.054329 1245 +v 0.064256 0.313148 -0.054329 1246 +v 0.064256 0.313148 0.055670 1247 +v -0.071481 0.313148 0.055670 1248 +v -0.071481 0.418064 -0.054329 1249 +v 0.064256 0.418064 -0.054329 1250 +v 0.064256 0.418064 0.055670 1251 +v -0.071481 0.418064 0.055670 1252 +v -0.220548 0.107506 0.039629 1253 +v -0.220548 0.154380 0.039629 1254 +v -0.220548 0.154380 -0.038288 1255 +v -0.220548 0.107506 -0.038288 1256 +v -0.176902 0.154380 -0.068779 1257 +v -0.176902 0.107506 -0.068779 1258 +v -0.220548 0.154380 -0.068779 1259 +v -0.220548 0.107506 -0.068779 1260 +v -0.176902 0.154380 -0.106304 1261 +v -0.176902 0.107506 -0.106304 1262 +v -0.220548 0.154380 -0.106304 1263 +v -0.220548 0.107506 -0.106304 1264 +v 0.334162 0.154380 -0.068779 1265 +v 0.334162 0.107506 -0.068779 1266 +v 0.334162 0.154380 -0.106305 1267 +v 0.334162 0.107506 -0.106305 1268 +v 0.218783 0.154380 -0.038288 1269 +v 0.218783 0.107506 -0.038288 1270 +v 0.218783 0.107506 0.039629 1271 +v 0.218783 0.154380 0.039629 1272 +v 0.167664 0.107506 0.064794 1273 +v 0.167664 0.154380 0.064794 1274 +v 0.218783 0.107506 0.064794 1275 +v 0.218783 0.154380 0.064794 1276 +v 0.167664 0.107506 0.096965 1277 +v 0.167664 0.154380 0.096965 1278 +v 0.218783 0.107506 0.096965 1279 +v 0.218783 0.154380 0.096965 1280 +v -0.282072 0.107506 0.064794 1281 +v -0.282072 0.154380 0.064794 1282 +v -0.282072 0.107506 0.096966 1283 +v -0.282072 0.154380 0.096966 1284 +vt 0.563304 0.297373 1285 +vt 0.690798 0.297373 1286 +vt 0.690798 0.480150 1287 +vt 0.627051 0.480150 1288 +vt 0.563304 0.480150 1289 +vt 0.690798 0.297373 1290 +vt 0.563304 0.297373 1291 +vt 0.563304 0.480150 1292 +vt 0.627051 0.480150 1293 +vt 0.690798 0.480150 1294 +vt 0.439425 0.297373 1295 +vt 0.439425 0.480150 1296 +vt 0.450394 0.721721 1297 +vt 0.550783 0.721721 1298 +vt 0.550783 0.782114 1299 +vt 0.450394 0.782114 1300 +vt 0.375678 0.450394 1301 +vt 0.375678 0.550783 1302 +vt 0.311931 0.550783 1303 +vt 0.311931 0.450394 1304 +vt 0.627051 0.550783 1305 +vt 0.627051 0.450394 1306 +vt 0.690798 0.450394 1307 +vt 0.690798 0.550783 1308 +vt 0.550783 0.297373 1309 +vt 0.450394 0.297373 1310 +vt 0.450394 0.480150 1311 +vt 0.550783 0.480150 1312 +vt 0.439425 0.297373 1313 +vt 0.439425 0.480150 1314 +vt 0.311931 0.297373 1315 +vt 0.375678 0.480150 1316 +vt 0.311931 0.480150 1317 +vt 0.311931 0.297373 1318 +vt 0.311931 0.480150 1319 +vt 0.375678 0.480150 1320 +vt 0.450394 0.297373 1321 +vt 0.550783 0.297373 1322 +vt 0.550783 0.480150 1323 +vt 0.450394 0.480150 1324 +vt 0.450394 0.188148 1325 +vt 0.550783 0.188148 1326 +vt 0.450394 0.297373 1327 +vt 0.450394 0.188148 1328 +vt 0.414103 0.188148 1329 +vt 0.414103 0.297373 1330 +vt 0.690798 0.450394 1331 +vt 0.563304 0.450394 1332 +vt 0.563304 0.414103 1333 +vt 0.690798 0.414103 1334 +vt 0.550783 0.188148 1335 +vt 0.450394 0.188148 1336 +vt 0.550783 0.297373 1337 +vt 0.550783 0.188148 1338 +vt 0.587073 0.188148 1339 +vt 0.587073 0.297373 1340 +vt 0.450394 0.188148 1341 +vt 0.450394 0.297373 1342 +vt 0.414103 0.297373 1343 +vt 0.414103 0.188148 1344 +vt 0.360812 0.188148 1345 +vt 0.360812 0.297373 1346 +vt 0.563304 0.587073 1347 +vt 0.690798 0.587073 1348 +vt 0.690798 0.640364 1349 +vt 0.563304 0.640364 1350 +vt 0.587073 0.188148 1351 +vt 0.587073 0.297373 1352 +vt 0.640364 0.297373 1353 +vt 0.640364 0.188148 1354 +vt 0.439425 0.414103 1355 +vt 0.311931 0.414103 1356 +vt 0.311931 0.360812 1357 +vt 0.439425 0.360812 1358 +vt 0.311931 0.550783 1359 +vt 0.439425 0.550783 1360 +vt 0.439425 0.587073 1361 +vt 0.311931 0.587073 1362 +vt 0.550783 0.188148 1363 +vt 0.550783 0.297373 1364 +vt 0.587073 0.297373 1365 +vt 0.587073 0.188148 1366 +vt 0.587073 0.188148 1367 +vt 0.587073 0.297373 1368 +vt 0.439425 0.450394 1369 +vt 0.311931 0.450394 1370 +vt 0.414103 0.297373 1371 +vt 0.414103 0.188148 1372 +vt 0.414103 0.188148 1373 +vt 0.414103 0.297373 1374 +vt 0.563304 0.550783 1375 +vt 0.690798 0.550783 1376 +vt 0.439425 0.188148 1377 +vt 0.311931 0.188148 1378 +vt 0.311931 0.297373 1379 +vt 0.439425 0.297373 1380 +vt 0.311931 0.188148 1381 +vt 0.439425 0.188148 1382 +vt 0.439425 0.297373 1383 +vt 0.311931 0.297373 1384 +vt 0.690798 0.188148 1385 +vt 0.563304 0.188148 1386 +vt 0.563304 0.297373 1387 +vt 0.690798 0.297373 1388 +vt 0.563304 0.188148 1389 +vt 0.690798 0.188148 1390 +vt 0.690798 0.297373 1391 +vt 0.563304 0.297373 1392 +vt 0.360812 0.297373 1393 +vt 0.360812 0.188148 1394 +vt 0.563304 0.360812 1395 +vt 0.690798 0.360812 1396 +vt 0.640364 0.297373 1397 +vt 0.640364 0.188148 1398 +vt 0.640364 0.188148 1399 +vt 0.587073 -0.059331 1400 +vt 0.640364 -0.059331 1401 +vt 0.360812 0.297373 1402 +vt 0.360812 0.188148 1403 +vt 0.640364 -0.059331 1404 +vt 0.587073 -0.059331 1405 +vt 0.360812 0.188148 1406 +vt 0.360812 0.297373 1407 +vt 0.690798 -0.059331 1408 +vt 0.563304 -0.059331 1409 +vt 0.640364 0.297373 1410 +vt 0.640364 -0.059331 1411 +vt 0.587073 -0.059331 1412 +vt 0.439425 0.640364 1413 +vt 0.311931 0.640364 1414 +vt 0.640364 0.188148 1415 +vt 0.640364 0.297373 1416 +vt 0.439425 0.587073 1417 +vt 0.311931 0.587073 1418 +vt 0.311931 0.640364 1419 +vt 0.439425 0.640364 1420 +vt 0.563304 0.414103 1421 +vt 0.690798 0.414103 1422 +vt 0.690798 0.360812 1423 +vt 0.563304 0.360812 1424 +vt 0.311931 0.414103 1425 +vt 0.439425 0.414103 1426 +vt 0.439425 0.360812 1427 +vt 0.311931 0.360812 1428 +vt 0.690798 0.587073 1429 +vt 0.563304 0.587073 1430 +vt 0.563304 0.640364 1431 +vt 0.690798 0.640364 1432 +vt 0.360812 -0.059331 1433 +vt 0.414103 -0.059331 1434 +vt 0.439425 0.188148 1435 +vt 0.311931 0.188148 1436 +vt 0.311931 -0.059331 1437 +vt 0.439425 -0.059331 1438 +vt 0.414103 -0.059331 1439 +vt 0.360812 -0.059331 1440 +vt 0.563304 0.188148 1441 +vt 0.690798 0.188148 1442 +vt 0.690798 -0.059331 1443 +vt 0.563304 -0.059331 1444 +vt 0.414103 -0.059331 1445 +vt 0.360812 -0.059331 1446 +vt 0.311931 0.188148 1447 +vt 0.439425 0.188148 1448 +vt 0.439425 -0.059331 1449 +vt 0.311931 -0.059331 1450 +vt 0.439425 -0.059331 1451 +vt 0.311931 -0.059331 1452 +vt 0.587073 -0.059331 1453 +vt 0.640364 -0.059331 1454 +vt 0.690798 0.188148 1455 +vt 0.563304 0.188148 1456 +vt 0.563304 -0.059331 1457 +vt 0.690798 -0.059331 1458 +vt 0.360812 -0.059331 1459 +vt 0.414103 -0.059331 1460 +vt 0.563304 -0.059331 1461 +vt 0.690798 -0.059331 1462 +vt 0.311931 -0.059331 1463 +vt 0.439425 -0.059331 1464 +vt 0.439425 0.721721 1465 +vt 0.375678 0.721721 1466 +vt 0.375678 0.782114 1467 +vt 0.439425 0.782114 1468 +vt 0.375678 0.721721 1469 +vt 0.439425 0.721721 1470 +vt 0.439425 0.782114 1471 +vt 0.375678 0.782114 1472 +vt 0.563304 0.782114 1473 +vt 0.439425 0.805494 1474 +vt 0.563304 0.805494 1475 +vt 0.563304 0.721721 1476 +vt 0.563304 0.782114 1477 +vt 0.627051 0.721721 1478 +vt 0.627051 0.782114 1479 +vt 0.550783 0.721721 1480 +vt 0.450394 0.721721 1481 +vt 0.450394 0.782114 1482 +vt 0.550783 0.782114 1483 +vt 0.627051 0.721721 1484 +vt 0.563304 0.721721 1485 +vt 0.627051 0.782114 1486 +vt 0.439425 0.540542 1487 +vt 0.563304 0.540542 1488 +vt 0.439425 0.600935 1489 +vt 0.563304 0.600935 1490 +vt 0.439425 0.661328 1491 +vt 0.563304 0.661328 1492 +vt 0.627051 0.540542 1493 +vt 0.627051 0.600935 1494 +vt 0.627051 0.661328 1495 +vt 0.550783 0.480150 1496 +vt 0.450394 0.480150 1497 +vt 0.450394 0.540542 1498 +vt 0.550783 0.540542 1499 +vt 0.375678 0.550783 1500 +vt 0.375678 0.450394 1501 +vt 0.280691 0.450394 1502 +vt 0.280691 0.550783 1503 +vt 0.550783 0.600935 1504 +vt 0.450394 0.600935 1505 +vt 0.450394 0.661328 1506 +vt 0.550783 0.661328 1507 +vt 0.375678 0.550783 1508 +vt 0.375678 0.450394 1509 +vt 0.179123 0.450394 1510 +vt 0.179123 0.550783 1511 +vt 0.627051 0.540542 1512 +vt 0.563304 0.540542 1513 +vt 0.627051 0.600935 1514 +vt 0.563304 0.600935 1515 +vt 0.627051 0.661328 1516 +vt 0.563304 0.661328 1517 +vt 0.439425 0.540542 1518 +vt 0.439425 0.600935 1519 +vt 0.439425 0.661328 1520 +vt 0.375678 0.540542 1521 +vt 0.375678 0.600935 1522 +vt 0.375678 0.661328 1523 +vt 0.375678 0.540542 1524 +vt 0.375678 0.600935 1525 +vt 0.375678 0.661328 1526 +vt 0.450394 0.480150 1527 +vt 0.550783 0.480150 1528 +vt 0.550783 0.540542 1529 +vt 0.450394 0.540542 1530 +vt 0.280691 0.540542 1531 +vt 0.280691 0.600935 1532 +vt 0.450394 0.600935 1533 +vt 0.550783 0.600935 1534 +vt 0.550783 0.661328 1535 +vt 0.450394 0.661328 1536 +vt 0.179123 0.661328 1537 +vt 0.179123 0.721721 1538 +vt 0.280691 0.540542 1539 +vt 0.280691 0.600935 1540 +vt 0.214828 0.600935 1541 +vt 0.214828 0.540542 1542 +vt 0.724632 0.550783 1543 +vt 0.724632 0.450394 1544 +vt 0.780867 0.450394 1545 +vt 0.780867 0.550783 1546 +vt 0.627051 0.450394 1547 +vt 0.627051 0.550783 1548 +vt 0.724632 0.550783 1549 +vt 0.724632 0.450394 1550 +vt 0.724632 0.540542 1551 +vt 0.724632 0.600935 1552 +vt 0.375678 0.450394 1553 +vt 0.375678 0.550783 1554 +vt 0.280691 0.550783 1555 +vt 0.280691 0.450394 1556 +vt 0.627051 0.550783 1557 +vt 0.627051 0.450394 1558 +vt 0.724632 0.600935 1559 +vt 0.724632 0.540542 1560 +vt 0.627051 0.450394 1561 +vt 0.627051 0.550783 1562 +vt 0.823606 0.550783 1563 +vt 0.823606 0.450394 1564 +vt 0.179123 0.721721 1565 +vt 0.179123 0.661328 1566 +vt 0.375678 0.450394 1567 +vt 0.375678 0.550783 1568 +vt 0.179123 0.550783 1569 +vt 0.179123 0.450394 1570 +vt 0.823606 0.661328 1571 +vt 0.823606 0.721721 1572 +vt 0.627051 0.550783 1573 +vt 0.627051 0.450394 1574 +vt 0.823606 0.450394 1575 +vt 0.823606 0.550783 1576 +vt 0.823606 0.721721 1577 +vt 0.823606 0.661328 1578 +vt 0.577883 0.453146 1579 +vt 0.577883 0.546854 1580 +vt 0.422117 0.546854 1581 +vt 0.422117 0.453146 1582 +vt 0.450394 0.782114 1583 +vt 0.550783 0.782114 1584 +vt 0.550783 0.805494 1585 +vt 0.450394 0.805494 1586 +vt 0.563304 0.805494 1587 +vt 0.439425 0.805494 1588 +vt 0.550783 0.782114 1589 +vt 0.450394 0.782114 1590 +vt 0.450394 0.805494 1591 +vt 0.550783 0.805494 1592 +vt 0.439425 0.450394 1593 +vt 0.563304 0.450394 1594 +vt 0.588807 0.429726 1595 +vt 0.413922 0.429726 1596 +vt 0.563304 0.550783 1597 +vt 0.588807 0.571450 1598 +vt 0.439425 0.550783 1599 +vt 0.413922 0.571450 1600 +vt 0.571450 0.805494 1601 +vt 0.429726 0.805494 1602 +vt 0.429726 0.940669 1603 +vt 0.571450 0.940669 1604 +vt 0.253596 0.300319 1605 +vt 0.253596 0.699681 1606 +vt -0.000001 0.699681 1607 +vt -0.000001 0.300319 1608 +vt 0.588807 0.805494 1609 +vt 0.413922 0.805494 1610 +vt 0.413922 0.940669 1611 +vt 0.588807 0.940669 1612 +vt 0.429726 0.805494 1613 +vt 0.571450 0.805494 1614 +vt 0.571450 0.940669 1615 +vt 0.429726 0.940669 1616 +vt 0.413922 0.805494 1617 +vt 0.588807 0.805494 1618 +vt 0.588807 0.940669 1619 +vt 0.413922 0.940669 1620 +vt 0.422117 0.546854 1621 +vt 0.577883 0.546854 1622 +vt 0.577883 0.453146 1623 +vt 0.422117 0.453146 1624 +vt 0.450394 0.540542 1625 +vt 0.550783 0.540542 1626 +vt 0.550783 0.600935 1627 +vt 0.450394 0.600935 1628 +vt 0.780867 0.450394 1629 +vt 0.780867 0.411108 1630 +vt 0.724632 0.411108 1631 +vt 0.780867 0.550783 1632 +vt 0.780867 0.600935 1633 +vt 0.780867 0.540542 1634 +vt 0.780867 0.411108 1635 +vt 0.724632 0.411108 1636 +vt 0.724632 0.362760 1637 +vt 0.780867 0.362760 1638 +vt 0.450394 0.600935 1639 +vt 0.450394 0.540542 1640 +vt 0.411108 0.540542 1641 +vt 0.411108 0.600935 1642 +vt 0.411108 0.600935 1643 +vt 0.411108 0.540542 1644 +vt 0.724632 0.600935 1645 +vt 0.724632 0.540542 1646 +vt 0.780867 0.540542 1647 +vt 0.780867 0.600935 1648 +vt 0.724632 0.600935 1649 +vt 0.724632 0.540542 1650 +vt 0.066173 0.540542 1651 +vt 0.066173 0.600935 1652 +vt 0.780867 0.362760 1653 +vt 0.724632 0.362760 1654 +vt 0.362760 0.600935 1655 +vt 0.362760 0.540542 1656 +vt 0.411108 0.600935 1657 +vt 0.411108 0.540542 1658 +vt 0.362760 0.540542 1659 +vt 0.362760 0.600935 1660 +vt 0.066173 0.362760 1661 +vt 0.066173 0.411108 1662 +vt 0.066173 0.411108 1663 +vt 0.066173 0.362760 1664 +vt 0.066173 0.600935 1665 +vt 0.066173 0.540542 1666 +vt 0.550783 0.540542 1667 +vt 0.450394 0.540542 1668 +vt 0.450394 0.600935 1669 +vt 0.550783 0.600935 1670 +vt 0.214828 0.550783 1671 +vt 0.214828 0.450394 1672 +vt 0.214828 0.550783 1673 +vt 0.214828 0.583205 1674 +vt 0.280691 0.583205 1675 +vt 0.214828 0.450394 1676 +vt 0.214828 0.624655 1677 +vt 0.280691 0.624655 1678 +vt 0.583205 0.600935 1679 +vt 0.583205 0.540542 1680 +vt 0.550783 0.600935 1681 +vt 0.550783 0.540542 1682 +vt 0.583205 0.540542 1683 +vt 0.583205 0.600935 1684 +vt 0.280691 0.583205 1685 +vt 0.214828 0.583205 1686 +vt 0.280691 0.600935 1687 +vt 0.280691 0.540542 1688 +vt 0.214828 0.540542 1689 +vt 0.214828 0.600935 1690 +vt 0.624655 0.600935 1691 +vt 0.624655 0.540542 1692 +vt 0.280691 0.624655 1693 +vt 0.214828 0.624655 1694 +vt 0.860134 0.600935 1695 +vt 0.860134 0.540542 1696 +vt 0.583205 0.600935 1697 +vt 0.583205 0.540542 1698 +vt 0.624655 0.540542 1699 +vt 0.624655 0.600935 1700 +vt 0.860134 0.583205 1701 +vt 0.860134 0.624655 1702 +vt 0.860134 0.624655 1703 +vt 0.860134 0.583205 1704 +vt 0.280691 0.600935 1705 +vt 0.280691 0.540542 1706 +vt 0.860134 0.540542 1707 +vt 0.860134 0.600935 1708 +vt 1.000000 0.094809 1709 +vt 1.000000 0.905191 1710 +vt 0.000000 0.905191 1711 +vt 0.000000 0.094809 1712 +vt 0.746405 0.699681 1713 +vt 0.746405 0.300319 1714 +vt 0.999999 0.300319 1715 +vt 0.999999 0.699681 1716 +vt 0.000000 0.905191 1717 +vt 1.000000 0.905191 1718 +vt 1.000000 0.094809 1719 +vt 0.000000 0.094809 1720 +vt 0.868542 -0.000000 1721 +vt 0.131458 -0.000000 1722 +vt 0.131458 0.209808 1723 +vt 0.868542 0.209808 1724 +vt 0.868542 0.790192 1725 +vt 0.131458 0.790192 1726 +vt 0.131458 1.000000 1727 +vt 0.868542 1.000000 1728 +vt 0.131455 0.790192 1729 +vt 0.868546 0.790192 1730 +vt 0.868546 0.209808 1731 +vt 0.131455 0.209808 1732 +vt 0.868546 -0.000000 1733 +vt 0.131455 -0.000000 1734 +vt 0.868546 1.000000 1735 +vt 0.131455 1.000000 1736 +vn -0.0000 -0.0000 -1.0000 1737 +vn 0.0000 0.0000 1.0000 1738 +vn -1.0000 0.0000 0.0000 1739 +vn 0.0000 1.0000 -0.0000 1740 +vn 1.0000 0.0000 -0.0000 1741 +vn 0.0000 -1.0000 0.0000 1742 +g body_body_body 1743 +usemtl body 1744 +s off 1745 +f 266/613/13 269/614/13 262/615/13 322/616/13 257/617/13 1746 +f 268/618/14 267/619/14 260/620/14 324/621/14 261/622/14 1747 +f 265/623/13 266/613/13 257/617/13 258/624/13 1748 +f 353/625/15 352/626/15 332/627/15 330/628/15 1749 +f 323/629/16 321/630/16 264/631/16 263/632/16 1750 +f 324/633/16 322/634/16 262/635/16 261/636/16 1751 +f 271/637/17 270/638/17 263/639/17 264/640/17 1752 +f 267/619/14 272/641/14 259/642/14 260/620/14 1753 +f 270/643/13 265/623/13 258/624/13 323/644/13 263/645/13 1754 +f 272/641/14 271/646/14 264/647/14 321/648/14 259/642/14 1755 +f 269/649/15 268/650/15 261/651/15 262/652/15 1756 +f 254/653/15 253/654/15 268/650/15 269/649/15 1757 +f 266/655/17 249/656/17 278/657/17 284/658/17 1758 +f 269/659/16 266/660/16 284/661/16 286/662/16 1759 +f 256/663/17 255/664/17 270/638/17 271/637/17 1760 +f 272/665/15 251/666/15 276/667/15 288/668/15 1761 +f 250/669/15 265/670/15 273/671/15 274/672/15 1762 +f 284/658/17 278/657/17 294/673/17 300/674/17 1763 +f 285/675/16 282/676/16 298/677/16 301/678/16 1764 +f 275/679/17 283/680/17 299/681/17 291/682/17 1765 +f 273/683/16 287/684/16 303/685/16 289/686/16 1766 +f 271/687/16 272/688/16 288/689/16 283/690/16 1767 +f 252/691/17 267/692/17 285/693/17 280/694/17 1768 +f 268/650/15 253/654/15 281/695/15 282/696/15 1769 +f 265/697/16 270/698/16 287/684/16 273/683/16 1770 +f 254/653/15 269/649/15 286/699/15 277/700/15 1771 +f 270/638/17 255/664/17 279/701/17 287/702/17 1772 +f 256/663/17 271/637/17 283/680/17 275/679/17 1773 +f 267/703/16 268/704/16 282/676/16 285/675/16 1774 +f 292/705/14 291/706/14 299/707/14 304/708/14 1775 +f 295/709/13 290/710/13 289/711/13 303/712/13 1776 +f 297/713/14 296/714/14 301/715/14 298/716/14 1777 +f 294/717/13 293/718/13 302/719/13 300/720/13 1778 +f 274/672/15 273/671/15 289/721/15 290/722/15 1779 +f 286/662/16 284/661/16 300/723/16 302/724/16 1780 +f 280/694/17 285/693/17 301/725/17 296/726/17 1781 +f 292/727/15 276/667/15 306/728/15 314/729/15 1782 +f 277/700/15 286/699/15 302/730/15 293/731/15 1783 +f 275/679/17 291/682/17 313/732/17 305/733/17 1784 +f 287/702/17 279/701/17 295/734/17 303/735/17 1785 +f 296/714/14 297/713/14 320/736/14 319/737/14 1786 +f 288/668/15 276/667/15 292/727/15 304/738/15 1787 +f 280/694/17 296/726/17 319/739/17 311/740/17 1788 +f 283/690/16 288/689/16 304/741/16 299/742/16 1789 +f 282/696/15 281/695/15 297/743/15 298/744/15 1790 +f 306/745/18 305/746/18 313/747/18 314/748/18 1791 +f 308/749/18 307/750/18 315/751/18 316/752/18 1792 +f 309/753/18 310/754/18 318/755/18 317/756/18 1793 +f 312/757/18 311/758/18 319/759/18 320/760/18 1794 +f 277/700/15 293/731/15 315/761/15 307/762/15 1795 +f 276/763/13 275/764/13 305/765/13 306/766/13 1796 +f 295/734/17 279/701/17 309/767/17 317/768/17 1797 +f 278/769/14 277/770/14 307/771/14 308/772/14 1798 +f 294/673/17 278/657/17 308/773/17 316/774/17 1799 +f 279/775/14 274/776/14 310/777/14 309/778/14 1800 +f 291/706/14 292/705/14 314/779/14 313/780/14 1801 +f 297/743/15 281/695/15 312/781/15 320/782/15 1802 +f 281/783/13 280/784/13 311/785/13 312/786/13 1803 +f 274/672/15 290/722/15 318/787/15 310/788/15 1804 +f 293/718/13 294/717/13 316/789/13 315/790/13 1805 +f 290/710/13 295/709/13 317/791/13 318/792/13 1806 +f 265/670/15 250/669/15 251/666/15 272/665/15 1807 +f 266/655/17 267/692/17 252/691/17 249/656/17 1808 +f 345/793/14 344/794/14 329/795/14 327/796/14 1809 +f 333/797/13 340/798/13 326/799/13 331/800/13 1810 +f 328/801/14 327/796/14 383/802/14 384/803/14 1811 +f 340/798/13 360/804/13 325/805/13 326/799/13 1812 +f 360/804/13 353/806/13 330/807/13 325/805/13 1813 +f 344/808/17 333/809/17 331/810/17 329/811/17 1814 +f 352/812/14 364/813/14 328/801/14 332/814/14 1815 +f 364/813/14 345/793/14 327/796/14 328/801/14 1816 +f 260/620/14 259/642/14 348/815/14 361/816/14 1817 +f 361/816/14 348/815/14 347/817/14 362/818/14 1818 +f 362/818/14 347/817/14 346/819/14 363/820/14 1819 +f 363/820/14 346/819/14 345/793/14 364/813/14 1820 +f 324/621/14 260/620/14 361/816/14 349/821/14 1821 +f 349/821/14 361/816/14 362/818/14 350/822/14 1822 +f 350/822/14 362/818/14 363/820/14 351/823/14 1823 +f 351/823/14 363/820/14 364/813/14 352/812/14 1824 +f 321/824/17 323/825/17 336/826/17 341/827/17 1825 +f 341/828/18 336/829/18 366/830/18 367/831/18 1826 +f 342/832/17 335/833/17 334/834/17 343/835/17 1827 +f 343/836/18 334/837/18 374/838/18 375/839/18 1828 +f 257/617/13 322/616/13 356/840/13 357/841/13 1829 +f 357/841/13 356/840/13 355/842/13 358/843/13 1830 +f 358/843/13 355/842/13 354/844/13 359/845/13 1831 +f 359/845/13 354/844/13 353/806/13 360/804/13 1832 +f 258/624/13 257/617/13 357/841/13 337/846/13 1833 +f 337/846/13 357/841/13 358/843/13 338/847/13 1834 +f 338/847/13 358/843/13 359/845/13 339/848/13 1835 +f 339/848/13 359/845/13 360/804/13 340/798/13 1836 +f 323/644/13 258/624/13 337/846/13 336/849/13 1837 +f 336/849/13 337/846/13 338/847/13 335/850/13 1838 +f 335/850/13 338/847/13 339/848/13 334/851/13 1839 +f 334/851/13 339/848/13 340/798/13 333/797/13 1840 +f 259/642/14 321/648/14 341/852/14 348/815/14 1841 +f 348/815/14 341/852/14 342/853/14 347/817/14 1842 +f 347/817/14 342/853/14 343/854/14 346/819/14 1843 +f 346/819/14 343/854/14 344/794/14 345/793/14 1844 +f 322/855/15 324/856/15 349/857/15 356/858/15 1845 +f 342/853/14 341/852/14 367/859/14 368/860/14 1846 +f 355/861/15 350/862/15 351/863/15 354/864/15 1847 +f 344/794/14 343/854/14 375/865/14 376/866/14 1848 +f 366/867/13 365/868/13 409/869/13 410/870/13 1849 +f 370/871/16 371/872/16 395/873/16 394/874/16 1850 +f 356/875/18 349/876/18 369/877/18 372/878/18 1851 +f 336/849/13 335/850/13 365/868/13 366/867/13 1852 +f 355/842/13 356/840/13 372/879/13 371/880/13 1853 +f 335/881/16 342/882/16 368/883/16 365/884/16 1854 +f 350/885/16 355/886/16 371/872/16 370/871/16 1855 +f 349/821/14 350/822/14 370/887/14 369/888/14 1856 +f 354/889/18 351/890/18 377/891/18 380/892/18 1857 +f 334/851/13 333/797/13 373/893/13 374/894/13 1858 +f 333/895/16 344/896/16 376/897/16 373/898/16 1859 +f 353/806/13 354/844/13 380/899/13 379/900/13 1860 +f 352/901/16 353/902/16 379/903/16 378/904/16 1861 +f 351/823/14 352/812/14 378/905/14 377/906/14 1862 +f 377/907/15 378/908/15 379/909/15 380/910/15 1863 +f 325/911/15 328/912/15 384/913/15 381/914/15 1864 +f 326/799/13 325/805/13 381/915/13 382/916/13 1865 +f 327/917/17 326/918/17 382/919/17 383/920/17 1866 +f 382/921/18 381/922/18 385/923/18 386/924/18 1867 +f 381/922/18 384/925/18 388/926/18 385/923/18 1868 +f 384/925/18 383/927/18 387/928/18 388/926/18 1869 +f 383/927/18 382/921/18 386/924/18 387/928/18 1870 +f 387/929/17 386/930/17 390/931/17 391/932/17 1871 +f 326/933/16 327/934/16 329/935/16 331/936/16 1872 +f 388/937/14 387/938/14 391/939/14 392/940/14 1873 +f 385/941/15 388/942/15 392/943/15 389/944/15 1874 +f 386/945/13 385/946/13 389/947/13 390/948/13 1875 +f 373/949/17 376/950/17 375/951/17 374/952/17 1876 +f 396/953/15 393/954/15 394/955/15 395/956/15 1877 +f 372/878/18 396/957/18 400/958/18 398/959/18 1878 +f 372/878/18 369/877/18 393/960/18 396/957/18 1879 +f 369/888/14 370/887/14 394/961/14 393/962/14 1880 +f 399/963/16 397/964/16 401/965/16 403/966/16 1881 +f 395/873/16 371/872/16 397/964/16 399/963/16 1882 +f 371/967/17 372/968/17 398/969/17 397/970/17 1883 +f 396/953/15 395/956/15 399/971/15 400/972/15 1884 +f 401/973/13 402/974/13 404/975/13 403/976/13 1885 +f 397/977/14 398/978/14 406/979/14 405/980/14 1886 +f 398/959/18 400/958/18 404/981/18 402/982/18 1887 +f 400/972/15 399/971/15 403/983/15 404/984/15 1888 +f 405/985/17 406/986/17 408/987/17 407/988/17 1889 +f 398/959/18 402/982/18 408/989/18 406/990/18 1890 +f 401/965/16 397/964/16 405/991/16 407/992/16 1891 +f 402/974/13 401/973/13 407/993/13 408/994/13 1892 +f 411/995/17 410/996/17 409/997/17 412/998/17 1893 +f 365/884/16 368/883/16 412/999/16 409/1000/16 1894 +f 367/831/18 411/1001/18 415/1002/18 413/1003/18 1895 +f 367/831/18 366/830/18 410/1004/18 411/1001/18 1896 +f 413/1003/18 415/1002/18 419/1005/18 417/1006/18 1897 +f 411/995/17 412/998/17 416/1007/17 415/1008/17 1898 +f 368/1009/15 367/1010/15 413/1011/15 414/1012/15 1899 +f 412/999/16 368/883/16 414/1013/16 416/1014/16 1900 +f 418/1015/14 417/1016/14 419/1017/14 420/1018/14 1901 +f 415/1008/17 416/1007/17 420/1019/17 419/1020/17 1902 +f 416/1014/16 414/1013/16 418/1021/16 420/1022/16 1903 +f 417/1016/14 418/1015/14 424/1023/14 423/1024/14 1904 +f 422/1025/15 421/1026/15 423/1027/15 424/1028/15 1905 +f 418/1021/16 414/1013/16 422/1029/16 424/1030/16 1906 +f 413/1003/18 417/1006/18 423/1031/18 421/1032/18 1907 +f 414/1033/13 413/1034/13 421/1035/13 422/1036/13 1908 +f 389/1037/16 392/1038/16 391/1039/16 390/1040/16 1909 +f 328/1041/16 325/1042/16 330/1043/16 332/1044/16 1910 +f 272/1045/18 267/1046/18 266/1047/18 265/1048/18 1911 +f 277/1049/18 278/1050/18 249/1051/18 254/1052/18 1912 +f 253/1053/18 254/1052/18 249/1051/18 252/1054/18 1913 +f 280/1055/18 281/1056/18 253/1053/18 252/1054/18 1914 +f 256/1057/18 251/1058/18 250/1059/18 255/1060/18 1915 +f 274/1061/18 279/1062/18 255/1060/18 250/1059/18 1916 +f 276/1063/18 251/1058/18 256/1057/18 275/1064/18 1917 +o bronze 1918 +v -0.253720 0.185648 0.022466 1919 +v -0.253720 0.263734 0.022466 1920 +v -0.253720 0.263734 -0.021125 1921 +v -0.253720 0.185648 -0.021125 1922 +v -0.300567 0.185648 0.022466 1923 +v -0.300567 0.263734 0.022466 1924 +v -0.300567 0.263734 -0.021124 1925 +v -0.300567 0.185648 -0.021124 1926 +v 0.246495 0.262724 -0.022435 1927 +v 0.246495 0.186657 -0.022435 1928 +v 0.246495 0.186657 0.023776 1929 +v 0.246495 0.262724 0.023776 1930 +v 0.294296 0.262724 -0.022435 1931 +v 0.294296 0.186657 -0.022435 1932 +v 0.294296 0.186657 0.023776 1933 +v 0.294296 0.262724 0.023776 1934 +vt 0.779118 -0.000000 1935 +vt 0.220882 0.000001 1936 +vt 0.220882 1.000000 1937 +vt 0.779118 1.000000 1938 +vt 0.285735 0.220882 1939 +vt 0.285735 0.779118 1940 +vt 0.885676 0.779118 1941 +vt 0.885676 0.220882 1942 +vt 0.000000 0.034757 1943 +vt 1.000000 0.034757 1944 +vt 1.000000 0.965243 1945 +vt 0.000000 0.965243 1946 +vt 0.220882 0.128582 1947 +vt 0.779118 0.128582 1948 +vt 0.779118 1.128582 1949 +vt 0.220882 1.128582 1950 +vt 0.285735 0.128582 1951 +vt 0.285735 1.128582 1952 +vt 0.885676 1.128582 1953 +vt 0.885676 0.128582 1954 +vt 0.285735 1.128582 1955 +vt 0.285735 0.128582 1956 +vt 0.885676 0.128582 1957 +vt 0.885676 1.128582 1958 +vt 0.724426 -0.129151 1959 +vt 0.724426 0.870849 1960 +vt 0.096033 0.870849 1961 +vt 0.096033 -0.129151 1962 +vt -0.000000 0.983381 1963 +vt 1.000000 0.983381 1964 +vt 1.000000 0.016619 1965 +vt -0.000000 0.016619 1966 +vt 0.803753 -0.129151 1967 +vt 0.196247 -0.129151 1968 +vt 0.196247 0.870849 1969 +vt 0.803753 0.870849 1970 +vt 0.724426 0.196247 1971 +vt 0.724426 0.803753 1972 +vt 0.096033 0.803753 1973 +vt 0.096033 0.196247 1974 +vt 0.724426 0.870849 1975 +vt 0.724426 -0.129151 1976 +vt 0.096033 -0.129151 1977 +vt 0.096033 0.870849 1978 +vt 0.196247 1.000000 1979 +vt 0.196247 0.000000 1980 +vt 0.803753 -0.000000 1981 +vt 0.803753 1.000000 1982 +vn 1.0000 0.0000 0.0000 1983 +vn -0.0000 -1.0000 -0.0000 1984 +vn 0.0000 1.0000 0.0000 1985 +vn -1.0000 0.0000 0.0000 1986 +vn 0.0000 0.0000 1.0000 1987 +vn -0.0000 0.0000 -1.0000 1988 +g bronze_bronze_bronze 1989 +usemtl bronze 1990 +s off 1991 +f 425/1065/19 428/1066/19 427/1067/19 426/1068/19 1992 +f 428/1069/20 425/1070/20 429/1071/20 432/1072/20 1993 +f 427/1073/21 431/1074/21 430/1075/21 426/1076/21 1994 +f 432/1077/22 429/1078/22 430/1079/22 431/1080/22 1995 +f 425/1081/23 426/1082/23 430/1083/23 429/1084/23 1996 +f 427/1085/24 428/1086/24 432/1087/24 431/1088/24 1997 +f 434/1089/24 433/1090/24 437/1091/24 438/1092/24 1998 +f 439/1093/20 435/1094/20 434/1095/20 438/1096/20 1999 +f 439/1097/19 438/1098/19 437/1099/19 440/1100/19 2000 +f 433/1101/21 436/1102/21 440/1103/21 437/1104/21 2001 +f 436/1105/23 435/1106/23 439/1107/23 440/1108/23 2002 +f 433/1109/22 434/1110/22 435/1111/22 436/1112/22 2003 +o tin 2004 +v -0.250998 0.279734 0.026300 2005 +v -0.250998 0.279734 -0.017291 2006 +v -0.297845 0.279734 0.026300 2007 +v -0.297845 0.279734 -0.017291 2008 +v -0.250998 0.520259 0.026300 2009 +v -0.250998 0.520259 -0.017291 2010 +v -0.297845 0.520259 0.026300 2011 +v -0.297845 0.520259 -0.017291 2012 +v 0.249218 0.163738 -0.018601 2013 +v 0.249218 0.163738 0.027610 2014 +v 0.297018 0.163738 -0.018601 2015 +v 0.297018 0.163738 0.027610 2016 +v 0.249218 -0.188531 -0.018601 2017 +v 0.249218 -0.188531 0.027610 2018 +v 0.297018 -0.188531 -0.018601 2019 +v 0.297018 -0.188531 0.027610 2020 +vt 0.469250 0.629123 2021 +vt 0.530750 0.629123 2022 +vt 0.530750 0.968469 2023 +vt 0.469250 0.968469 2024 +vt 0.853202 0.530750 2025 +vt 0.853202 0.469250 2026 +vt 0.919296 0.469250 2027 +vt 0.919296 0.530750 2028 +vt 0.919296 0.629123 2029 +vt 0.853202 0.629123 2030 +vt 0.853202 0.968469 2031 +vt 0.919296 0.968469 2032 +vt 0.530750 0.629123 2033 +vt 0.469250 0.629123 2034 +vt 0.469250 0.968469 2035 +vt 0.530750 0.968469 2036 +vt 0.853202 0.629123 2037 +vt 0.919296 0.629123 2038 +vt 0.919296 0.968469 2039 +vt 0.853202 0.968469 2040 +vt 0.147471 0.465470 2041 +vt 0.080032 0.465470 2042 +vt 0.080032 -0.031531 2043 +vt 0.147471 -0.031531 2044 +vt 0.147471 0.532599 2045 +vt 0.147471 0.467401 2046 +vt 0.080032 0.467401 2047 +vt 0.080032 0.532599 2048 +vt 0.532599 0.465470 2049 +vt 0.467401 0.465470 2050 +vt 0.467401 -0.031531 2051 +vt 0.532599 -0.031531 2052 +vt 0.080032 0.465470 2053 +vt 0.147471 0.465470 2054 +vt 0.147471 -0.031531 2055 +vt 0.080032 -0.031531 2056 +vt 0.467401 0.465470 2057 +vt 0.532599 0.465470 2058 +vt 0.532599 -0.031531 2059 +vt 0.467401 -0.031531 2060 +vt 1.000000 0.983381 2061 +vt -0.000000 0.983381 2062 +vt -0.000000 0.016619 2063 +vt 1.000000 0.016619 2064 +vt 0.000000 0.034757 2065 +vt 0.000000 0.965243 2066 +vt 1.000000 0.965243 2067 +vt 1.000000 0.034757 2068 +vn -1.0000 0.0000 0.0000 2069 +vn 0.0000 1.0000 0.0000 2070 +vn 0.0000 0.0000 1.0000 2071 +vn 1.0000 0.0000 0.0000 2072 +vn -0.0000 0.0000 -1.0000 2073 +vn -0.0000 -1.0000 -0.0000 2074 +g tin_tin_tin 2075 +usemtl tin 2076 +s off 2077 +f 444/1113/25 443/1114/25 447/1115/25 448/1116/25 2078 +f 445/1117/26 446/1118/26 448/1119/26 447/1120/26 2079 +f 443/1121/27 441/1122/27 445/1123/27 447/1124/27 2080 +f 441/1125/28 442/1126/28 446/1127/28 445/1128/28 2081 +f 442/1129/29 444/1130/29 448/1131/29 446/1132/29 2082 +f 449/1133/29 451/1134/29 455/1135/29 453/1136/29 2083 +f 454/1137/30 453/1138/30 455/1139/30 456/1140/30 2084 +f 450/1141/25 449/1142/25 453/1143/25 454/1144/25 2085 +f 452/1145/27 450/1146/27 454/1147/27 456/1148/27 2086 +f 451/1149/28 452/1150/28 456/1151/28 455/1152/28 2087 +f 450/1153/26 452/1154/26 451/1155/26 449/1156/26 2088 +f 442/1157/30 441/1158/30 443/1159/30 444/1160/30
Modified potions.lua from [bf24fbd87b] to [6c72918b5d].
97 97 groups = { 98 98 sorcery_potion = 2; 99 99 sorcery_draught = 1; 100 100 sorcery_magical = 1; 101 101 sorcery_usable_magic = 1; 102 102 }; 103 103 on_use = function(stack, user, pointat) 104 - if potion.effect(stack, user) == false then return nil end 104 + local pproto = stack:get_definition()._proto 105 + if potion.effect(stack, user, pproto) == false then return nil end 105 106 local meta = stack:get_meta() 106 107 local force = meta:get_int('force'); 107 108 minetest.add_particlespawner { 108 109 amount = 200 + (30 * force); 109 - time = stack:get_definition()._proto:duration(meta); 110 + time = pproto:duration(meta); 110 111 minpos = { x = -0.1; y = 0; z = -0.1; }; 111 112 maxpos = { x = 0.1; y = 2; z = 0.1; }; 112 113 minvel = { x = -0.1; y = 0; z = -0.1; }; 113 114 maxvel = { x = 0.1; y = 0; z = 0.1; }; 114 115 minacc = { x = 0; y = 0.1; z = 0; }; 115 116 maxacc = { x = 0; y = 1; z = 0; }; 116 117 minexptime = 1;
Modified recipes.lua from [7adbea13be] to [c312eb6c73].
359 359 output = 'sorcery:portal_pad'; 360 360 recipe = { 361 361 {'basic_materials:steel_bar','xpanes:bar_flat','basic_materials:steel_bar'}; 362 362 {'sorcery:gem_amethyst','sorcery:beam_generator','sorcery:gem_amethyst'}; 363 363 {'basic_materials:steel_bar','default:tin_ingot','basic_materials:steel_bar'}; 364 364 } 365 365 } 366 + 367 +minetest.register_craft { 368 + output = 'sorcery:gravity_manipulator'; 369 + recipe = { 370 + {'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'}; 371 + {'sorcery:inverter_coil','sorcery:core_counterpraxic','sorcery:levitanium_ingot'}; 372 + {'sorcery:cobalt_ingot','sorcery:screw_platinum','basic_materials:silver_wire'}; 373 + }; 374 +} 375 + 376 +minetest.register_craft { 377 + output = 'sorcery:gravitator_off'; 378 + recipe = { 379 + {'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'}; 380 + {'xpanes:pane_flat','sorcery:gravity_manipulator','basic_materials:plastic_sheet'}; 381 + {'sorcery:platinum_ingot','basic_materials:plastic_sheet','sorcery:platinum_ingot'}; 382 + }; 383 +} 384 + 385 +minetest.register_craftitem('sorcery:gravity_manipulator', { 386 + description = 'Gravity Manipulator'; 387 + inventory_image = 'sorcery_gravity_manipulator.png'; 388 + groups = { 389 + sorcery_magitech = 1; 390 + }; 391 +}) 366 392 367 393 minetest.register_craftitem('sorcery:tuning_disc',{ 368 394 description = 'Tuning Disc'; 369 395 inventory_image = 'sorcery_tuning_disc.png'; 370 396 groups = { 371 397 sorcery_magitech = 1; metal = 1; 372 398 };
Added textures/sorcery_aluminum_ore.png version [9daddeb433].
cannot compute difference between binary files
Added textures/sorcery_cobalt_ore.png version [09827dfd82].
cannot compute difference between binary files
Modified textures/sorcery_core_counterpraxic.png from [e3aaf06222] to [39479c1b28].
cannot compute difference between binary files
Added textures/sorcery_enchant_glimmer.png version [d92d1302fd].
cannot compute difference between binary files
Added textures/sorcery_enchant_glitter.png version [2872a22baf].
cannot compute difference between binary files
Added textures/sorcery_gravitator_panel_crush.png version [61f151d4e3].
cannot compute difference between binary files
Added textures/sorcery_gravitator_panel_lift.png version [607e0d2a18].
cannot compute difference between binary files
Added textures/sorcery_gravitator_panel_off.png version [4ef1021164].
cannot compute difference between binary files
Added textures/sorcery_gravitator_panel_slow.png version [d6bbdcb829].
cannot compute difference between binary files
Added textures/sorcery_gravitator_panel_stop.png version [99c6937d1a].
cannot compute difference between binary files
Added textures/sorcery_gravitator_side.png version [f72e073bca].
cannot compute difference between binary files
Added textures/sorcery_gravity_manipulator.png version [f01b379bf4].
cannot compute difference between binary files
Added textures/sorcery_iridium_ore.png version [b017777bda].
cannot compute difference between binary files
Added textures/sorcery_levitanium_ore.png version [dbc5d31e75].
cannot compute difference between binary files
Added textures/sorcery_lithium_ore.png version [99373498fd].
cannot compute difference between binary files
Added textures/sorcery_platinum_ore.png version [4ec4985ec9].
cannot compute difference between binary files
Added textures/sorcery_silver_ore.png version [8e84c2f224].
cannot compute difference between binary files
Added textures/sorcery_tungsten_ore.png version [fabcffe445].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_0.png version [aebcb77ec1].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_1.png version [d03261c06f].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_10.png version [66eafce742].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_11.png version [9a69465e5c].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_12.png version [5db337f18b].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_13.png version [00c1eef083].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_14.png version [4ac1d3242f].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_15.png version [58fe058e6b].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_16.png version [8dd3a566b5].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_2.png version [2a4cdfb7eb].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_3.png version [3906c0dad8].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_4.png version [9f97dafed9].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_5.png version [224a393ff3].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_6.png version [ab952652b7].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_7.png version [044c6ab65b].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_8.png version [48dcf6b6d6].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_9.png version [440f647fa2].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_0.png version [6bde9edc7b].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_1.png version [6bde9edc7b].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_10.png version [29f838a2be].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_11.png version [29f838a2be].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_12.png version [48fe5c3d7d].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_13.png version [48fe5c3d7d].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_14.png version [d3aa3fa899].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_15.png version [d3aa3fa899].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_16.png version [8dd3a566b5].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_2.png version [b19fd7a676].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_3.png version [b19fd7a676].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_4.png version [3fb2f1935a].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_5.png version [3fb2f1935a].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_6.png version [20c3d5c4fd].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_7.png version [20c3d5c4fd].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_8.png version [c8a0d9df2a].
cannot compute difference between binary files
Added textures/sorcery_ui_manaring_flash_9.png version [c8a0d9df2a].
cannot compute difference between binary files
Modified tools.lua from [27b08793ec] to [4a5f13d256].
22 22 23 23 local inv = user:get_inventory() 24 24 local btl = ItemStack('vessels:glass_bottle') 25 25 if not inv:contains_item('main', btl) then 26 26 return nil 27 27 end 28 28 29 - local damage 30 29 local blood 31 30 local target 31 + local caps 32 32 if selfharm then 33 - damage = 3 34 33 blood = ItemStack('sorcery:blood 1') 35 34 target = user 35 + caps = { 36 + full_punch_interval = 1.0, 37 + damage_groups = { fleshy = 3 }, 38 + } 36 39 else 37 40 if not minetest.is_player(pointat) then 38 41 return nil 39 42 end 40 - damage = 5 41 - blood = ItemStack('sorcery:blood 3') 42 43 target = pointat 44 + caps = stack:get_tool_capabilities() 45 + blood = ItemStack { 46 + name = 'sorcery:blood'; 47 + count = math.floor(caps.damage_groups.fleshy * 1.5); 48 + } 43 49 end 44 50 local pos = target:get_pos() 45 51 pos.y = pos.y + 1.5 46 52 47 53 local wear = 65535 / dagger_uses 48 54 stack:add_wear(wear) 49 55 50 56 inv:remove_item('main',btl) 51 57 inv:add_item('main',blood) 52 58 53 - target:punch(user, 1.0, { 54 - full_punch_interval = 1.0, 55 - damage_groups = { fleshy = damage }, 56 - }, nil) 59 + target:punch(user, 1.0, caps, nil) 57 60 for i=0, 48 do 58 61 minetest.add_particle{ 59 62 texture = 'sorcery_blood_' .. math.random(5) .. '.png', 60 63 size = 7, 61 64 expirationtime = 2 + math.random(), 62 65 glow = 1, 63 66 pos = pos, ................................................................................ 70 73 x = 0, 71 74 y = -1, 72 75 z = 0 73 76 } 74 77 } 75 78 end 76 79 77 - if math.random(3) == 1 then 80 + if math.random(3 + sorcery.enchant.strength(stack,'sanctify') * 6) == 1 then 78 81 -- we've used up the consecration 79 82 local unholy = ItemStack("sorcery:dagger") 80 83 unholy:set_wear(stack:get_wear()) 84 + local ench = sorcery.enchant.get(stack) 85 + if #ench.spells > 0 then 86 + sorcery.enchant.set(unholy,ench) 87 + end 81 88 return unholy 82 89 else 83 90 -- consecration is holding, return dagger as-is 84 91 return stack 85 92 end 86 93 end 87 94 end