Comment: | * remove former hacky registration system, replace with consistent and flexible API; rewrite metal/gem generation to take advantage of this new API; tweaks to init system to enable world-local tweaks to lore and sorcery behavior * initial documentation commit * initial steps towards calendar - add default date format, astrolabe; prepare infra for division/melding/transmutation spells, various tweaks and fixes |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
3f6a913e4e6dd7db76536dfddcffdef0 |
User & Date: | lexi on 2020-09-29 12:40:28 |
Other Links: | manifest | tags |
2020-10-19
| ||
09:52 | continue dev on celestial mechanics, add melding+division spells (resonance), refine itemclasses, add keypunch and punchcards, add paper pulp, add a shitload of visuals, add convenience scripts for working with the wiki, make the flamebolt spell actually useful instead of just a pretty lightshow, add essences, inferno crystal, and other goodies; iterate on wands, lots of shit i can't remember, various bugfixes check-in: ea6e475e44 user: lexi tags: trunk | |
2020-09-29
| ||
12:40 | * remove former hacky registration system, replace with consistent and flexible API; rewrite metal/gem generation to take advantage of this new API; tweaks to init system to enable world-local tweaks to lore and sorcery behavior * initial documentation commit * initial steps towards calendar - add default date format, astrolabe; prepare infra for division/melding/transmutation spells, various tweaks and fixes check-in: 3f6a913e4e user: lexi tags: trunk | |
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 | |
Added astrolabe.lua version [6f8619640d].
1 +local albox = { 2 + type = 'fixed'; 3 + fixed = { 4 + -0.43,-0.5,-0.43; 5 + 0.43, 0.3, 0.43; 6 + }; 7 +} 8 +minetest.register_node('sorcery:astrolabe',{ 9 + description = 'Astrolabe'; 10 + drawtype = 'mesh'; 11 + mesh = 'sorcery-astrolabe.obj'; 12 + groups = { 13 + cracky = 2, choppy = 2; 14 + oddly_breakable_by_hand = 2; 15 + sorcery_tech = 1; 16 + }; 17 + selection_box = albox, collision_box = albox; 18 + after_dig_node = sorcery.lib.node.purge_containers; 19 + tiles = { 20 + 'default_steel_block.png'; 21 + 'default_bronze_block.png'; 22 + 'default_copper_block.png'; 23 + 'default_aspen_wood.png'; 24 + }; 25 + _sorcery = { 26 + recipe = { 27 + note = 'Unravel the secrets of the stars'; 28 + }; 29 + }; 30 +})
Added calendar.lua version [f67589c567].
1 +if not sorcery then 2 + sorcery = { data = { 3 + calendar = dofile('data/calendar.lua'); 4 + signs = dofile('data/signs.lua'); 5 + } } 6 +end 7 + 8 +sorcery.calendar = {} 9 + 10 +sorcery.calendar.stats = function(style) 11 + if not style then style = sorcery.data.calendar.default end 12 + local s = sorcery.data.calendar.styles[style] 13 + local days, moons, weeks = s.days, s.moons, s.weeks 14 + 15 + return { 16 + days_in_year = #moons * #weeks * #days; 17 + days_in_week = #days; 18 + days_in_moon = #days * #weeks; 19 + weeks_in_moon = #weeks; 20 + weeks_in_year = #weeks * #moons; 21 + moons_in_year = #moons; 22 + } 23 +end 24 + 25 +sorcery.calendar.date = function(day,style) 26 + local s = sorcery.calendar.stats(style) 27 + 28 + local day_of_year = day % s.days_in_year; 29 + local day_of_moon = day_of_year % s.days_in_moon; 30 + local day_of_week = day_of_moon % s.days_in_week; 31 + 32 + return { 33 + day_of_year = 1 + day_of_year; 34 + day_of_moon = 1 + day_of_moon; 35 + day_of_week = 1 + day_of_week; 36 + week_of_moon = 1 + math.floor(day_of_moon / s.days_in_week); 37 + week_of_year = 1 + math.floor(day_of_year / s.days_in_week); 38 + moon_of_year = 1 + math.floor(day_of_year / s.days_in_moon); 39 + year = math.floor(day / s.days_in_year); 40 + moons_passed = math.floor(day / s.days_in_moon); 41 + weeks_passed = math.floor(day / s.days_in_week); 42 + } 43 +end 44 + 45 +sorcery.calendar.stars = function(day,style) 46 + local periods = math.floor(day / sorcery.data.calendar.days_per_stellar_cycle) 47 + 48 + local elapsed = 0 49 + local cycle = 1 50 + while true do 51 + for _, c in pairs(sorcery.data.signs) do 52 + if c.cycle then 53 + if cycle % c.cycle ~= 0 then goto skip end 54 + end 55 + elapsed = elapsed + c.duration 56 + if elapsed >= periods then 57 + return { 58 + sign = c; 59 + cycle = cycle; 60 + } 61 + end 62 + ::skip::end 63 + cycle = cycle + 1 64 + end 65 +end 66 + 67 +sorcery.calendar.longdate = function(day) 68 + if not style then style = sorcery.data.calendar.default end 69 + return sorcery.data.calendar.styles[style].longdate(sorcery.calendar.date(day)) 70 +end 71 + 72 +sorcery.calendar.shortdate = function(day,style) 73 + if not style then style = sorcery.data.calendar.default end 74 + return sorcery.data.calendar.styles[style].shortdate(sorcery.calendar.date(day)) 75 +end 76 + 77 +sorcery.calendar.stardate = function(day) 78 + local s = sorcery.calendar.stars(day) 79 + return string.format('sign of the %s, stellar cycle %u', s.sign.patron, s.cycle) 80 +end 81 + 82 +-- math.randomseed(os.time()) 83 +-- local d = math.random(500,256000) 84 +-- print(string.format('%s :: %s in the %s', 85 +-- sorcery.calendar.shortdate(d), 86 +-- sorcery.calendar.longdate(d), 87 +-- sorcery.calendar.stardate(d)))
Modified coins.lua from [2702148c37] to [7e4d0ae5aa].
12 12 local g = sorcery.data.gems[gem] 13 13 local desc = (m.desc or metal) .. ' Coin' 14 14 local coinimg = u.image('sorcery_coin.png'):multiply(u.color(m.tone)) 15 15 local id = 'sorcery:coin_' .. metal 16 16 if gem then 17 17 desc = (g.desc or gem) .. '-' .. desc 18 18 coinimg = u.image('sorcery_coin_gem.png'):multiply(u.color(g.tone)):blit(coinimg) 19 - id = id .. '_' .. gem 19 + local gemid = id .. '_' .. gem 20 + minetest.register_craft { 21 + type = 'shapeless'; 22 + recipe = { 'xdecor:hammer', gemid }; 23 + output = g.parts.shard; 24 + replacements = { 25 + {'xdecor:hammer', 'xdecor:hammer'}; 26 + {gemid, id}; 27 + }; 28 + } 29 + id = gemid 30 + else 31 + minetest.register_craft { 32 + type = 'cooking'; 33 + recipe = id .. ' 2'; 34 + output = m.parts.fragment; 35 + } 20 36 end 21 37 22 38 minetest.register_craftitem(id, { 23 39 description = u.str.capitalize(desc); 24 40 inventory_image = coinimg:render(); 25 - groups = { sorcery_coin = 1 }; 41 + groups = { 42 + coin = 1; sorcery_coin = 1; metal = 1; 43 + not_in_creative_inventory = 1; 44 + -- nice try mr lenin 45 + }; 46 + _sorcery = { 47 + material = (gem == nil) and { 48 + metal = true; id = metal, data = m; 49 + grindcost = 2, grindvalue = 1; 50 + } or nil; 51 + }; 26 52 }) 27 53 end 28 -for metal in pairs(sorcery.data.metals) do 54 +-- for metal in pairs(sorcery.data.metals) do 55 +sorcery.register.metals.foreach('sorcery:mkcoins',{'sorcery:generate'}, function(metal) 29 56 register_coin(metal) 30 - for gem in pairs(sorcery.data.gems) do 57 + -- for gem in pairs(sorcery.data.gems) do 58 + sorcery.register.gems.foreach('sorcery:mkcoins_' .. metal, {'sorcery:generate'}, function(gem) 31 59 register_coin(metal,gem) 32 - end 33 -end 60 + end) 61 +end) 34 62 local update_press_output = function(meta) 35 63 local inv = meta:get_inventory() 36 64 local slot_ingot = inv:get_stack('ingot',1) 37 65 local slot_gem = inv:get_stack('gem',1) 38 66 local metalname, gemname 39 67 local coincount 40 68 if not inv:is_empty('ingot') then 41 69 local id = slot_ingot:get_name() 42 70 for name,metal in pairs(sorcery.data.metals) do 43 - if id == metal.ingot then 71 + if id == metal.parts.ingot then 44 72 metalname = name 45 73 coincount = slot_ingot:get_count() 46 74 goto foundmetal 47 75 end 48 76 end 49 77 end 50 78 inv:set_stack('output',1,ItemStack(nil)) 51 79 do return end 52 80 53 81 ::foundmetal:: if not inv:is_empty('gem') then 54 82 local id = slot_gem:get_name() 55 83 for name,gem in pairs(sorcery.data.gems) do 56 - if gem.foreign then 57 - if id == gem.foreign then gemname = name 58 - else goto skip end 59 - else 60 - if id == 'sorcery:gem_' .. name then gemname = name 61 - else goto skip end 62 - end 84 + if id == gem.parts.item 85 + then gemname = name 86 + else goto skip end 63 87 coincount = math.min(coincount, slot_gem:get_count()) 64 88 do break end 65 89 ::skip::end 66 90 end 67 91 68 92 coincount = coincount * coins_per_ingot 69 93 ................................................................................ 118 142 listring[current_player;main] 119 143 ]]) 120 144 end; 121 145 allow_metadata_inventory_put = function(pos,list,idx,stack,user) 122 146 local id = stack:get_name() 123 147 if list == 'ingot' then 124 148 for name,metal in pairs(sorcery.data.metals) do 125 - if id == metal.ingot then goto okay end 149 + if id == metal.parts.ingot then goto okay end 126 150 end 127 151 elseif list == 'gem' then 128 152 for name,gem in pairs(sorcery.data.gems) do 129 153 if gem.foreign then 130 154 if id == gem.foreign then goto okay end 131 155 else 132 156 if id == 'sorcery:gem_' .. name then goto okay end ................................................................................ 136 160 do return 0 end 137 161 ::okay:: return max_components 138 162 end; 139 163 -- mercifully there is never any case where moving between the 140 164 -- inventories of the node is allowable 141 165 allow_metadata_inventory_move = function() return 0 end; 142 166 allow_metadata_inventory_take = function(pos,list,idx,stack,user) 143 - local meta = minetest.get_meta(pos) 144 - local inv = meta:get_inventory() 145 - return inv:get_stack(list,idx):get_count() 167 + local count = stack:get_count() 168 + if list == 'output' then 169 + return (count % coins_per_ingot) == 0 and count or 0 170 + else return count end 146 171 end; 147 172 on_metadata_inventory_put = function(pos,list,idx,stack,user) 148 173 update_press_output(minetest.get_meta(pos)) 149 174 end; 150 175 on_metadata_inventory_take = function(pos,list,idx,stack,user) 151 176 local meta = minetest.get_meta(pos) 152 177 if list == 'output' then
Modified compat.lua from [c2cb3e762c] to [13321ca8da].
28 28 end 29 29 30 30 if minetest.get_modpath("new_campfire") then 31 31 minetest.register_alias('sorcery:ash', 'new_campfire:ash') 32 32 else 33 33 minetest.register_craftitem('sorcery:ash', { 34 34 description = 'Ash'; 35 - inventory_image = 'sorcery_iron_powder.png^[colorize:#FFFFFF:100'; 35 + inventory_image = 'sorcery_iron_powder.png^[colorize:#FFFFFF:60'; 36 36 }) 37 37 minetest.register_alias('new_campfire:ash', 'sorcery:ash') 38 38 end 39 39 40 40 -- xdecor offers a conflicting and somewhat poorly designed enchantment 41 41 -- mechanism; make it inaccessible but don't fuck up already existing 42 42 -- enchanters in the world 43 -minetest.clear_craft { output='xdecor:enchanter'; } 43 +minetest.clear_craft { output='xdecor:enchantment_table'; } 44 +minetest.override_item('xdecor:enchantment_table', { 45 + groups = sorcery.lib.tbl.merge(minetest.registered_items['xdecor:enchantment_table'].groups, { 46 + not_in_creative_inventory = 1; 47 + }) 48 +}) 44 49 45 50 return { 46 51 defp = function(name) 47 52 return minetest.registered_items[name] or minetest.registered_aliases[name] 48 53 end; 49 54 }
Modified cookbook.lua from [f535fa81e6] to [62888214aa].
78 78 (restrict.mod and module ~= restrict.mod) 79 79 or (restrict.group and (minetest.get_item_group(k, restrict.group) == 0)) 80 80 ))) then names[#names + 1] = k end 81 81 end 82 82 end 83 83 return names[math.random(#names)] 84 84 end end 85 -local find_builtin = function(out) 86 - local rec = {} 87 - local i = minetest.get_craft_recipe(out) 88 - if i == nil or i.items == nil or #i.items == 0 then return nil end 89 - local w = (i.width == 0) and 3 or i.width 90 - -- for j=1,#i.items do 91 - for j,item in pairs(i.items) do 92 - local row = math.floor((j-1) / w) 93 - local col = (j-1) % w 94 - if i.items[j] then 95 - rec[1 + (row * 3) + col] = i.items[j] 85 +local find_builtin = function(method,kind) 86 + return function(out) 87 + local rec = {} 88 + local crec = sorcery.lib.tbl.walk(minetest.registered_items[out],{'_sorcery','recipe','canonical',kind}) 89 + local w=0, lst 90 + if crec then 91 + lst = {} 92 + for i,v in pairs(crec) do 93 + if #v > w then w = #v end 94 + for j,n in pairs(v) do 95 + lst[#lst+1] = n 96 + end 97 + end 98 + else 99 + -- WHY IS THIS INTERFACE SO CLUMSY 100 + local all,i = minetest.get_all_craft_recipes(out), nil 101 + for _,r in pairs(all) do 102 + if r.method == method and r.items and #r.items>0 then 103 + i = r break 104 + end 105 + end 106 + if i == nil or i.items == nil or #i.items == 0 then return nil end 107 + w = (i.width == 0) and 3 or i.width 108 + lst = i.items 109 + end 110 + -- for j=1,#i.items do 111 + for j,item in pairs(lst) do 112 + local row = math.floor((j-1) / w) 113 + local col = (j-1) % w 114 + if item then 115 + rec[1 + (row * 3) + col] = item 116 + end 96 117 end 118 + return rec 97 119 end 98 - return rec 99 120 end 100 121 local function group_eval(i) 101 122 if string.sub(i,1,6) == 'group:' then 102 123 local g = string.sub(i,7) 103 124 if constants.group_ids[g] then 104 125 return constants.group_ids[g].cnitem, 105 126 constants.group_ids[g].caption ................................................................................ 164 185 name = 'Crafting Guide'; 165 186 node = 'xdecor:workbench'; 166 187 booksuf = 'Codex'; 167 188 w = 3, h = 3; 168 189 chance = 2; 169 190 slots = slot3x3; 170 191 pick = pick_builtin('normal'); 171 - find = find_builtin; 192 + find = find_builtin('normal','craft'); 172 193 props = props_builtin; 173 194 apply_exclusions = true; 174 195 }; 175 196 -- smelt = { 176 197 -- w = 3, h = 3; 177 198 -- slots = slot3x3; 178 199 -- }; ................................................................................ 180 201 name = 'Cooking Recipe'; 181 202 node = 'default:furnace'; 182 203 booksuf = 'Cookbook'; 183 204 w = 1, h = 1; 184 205 chance = 3; 185 206 slots = {{-0.2,0}}; 186 207 pick = pick_builtin('cooking'); 187 - find = find_builtin; 208 + find = find_builtin('cooking','cook'); 188 209 props = props_builtin; 189 210 apply_exclusions = true; 190 211 }; 191 212 infuse = { 192 213 name = 'Infusion Recipe'; 193 214 node = 'sorcery:infuser'; 194 215 booksuf = 'Pharmacopeia'; ................................................................................ 356 377 357 378 return recipe_kinds[kind].pick(restrict), kind 358 379 end 359 380 360 381 local render_recipe = function(kind,ingredients,result,notes_right) 361 382 local k = recipe_kinds[kind] 362 383 local t = '' 384 + local props = k.props(result) 363 385 for i=1,#k.slots do 386 + local ing = ingredients[i] 364 387 local x, y = k.slots[i][1], k.slots[i][2] 365 - if ingredients[i] and ingredients[i] ~= '' then 388 + if ing and ing ~= '' then 366 389 local tt 367 - if k.indesc then tt = k.indesc(ingredients[i]) else tt = desc_builtin(ingredients[i]) end 390 + if k.indesc then tt = k.indesc(ing) else tt = desc_builtin(ing) end 368 391 t = t .. string.format([[ 369 392 item_image[%f,%f;1,1;%s] 370 393 tooltip[%f,%f;1,1;%s] 371 - ]], x,y, minetest.formspec_escape(group_eval(ingredients[i])), 394 + ]], x,y, minetest.formspec_escape(group_eval(ing)), 372 395 x,y, minetest.formspec_escape(tt)) 373 396 else 374 397 if k.drawslots == nil or k.drawslots then 375 398 t = string.format('box[%f,%f;0.1,0.1;#00000060]',x+0.45,y+0.45) .. t 376 399 end 377 400 end 378 401 end 379 402 local img, ot 380 - local props = k.props(result) 381 403 if props.note then 382 404 local nx, ny, nw, nh 383 405 if notes_right then 384 406 nx = 5.25 ny = 0 385 407 nw = 4 nh = 3 386 408 else 387 409 nx = 0 ny = 3
Added data/calendar.lua version [9f638b5b65].
1 +-- you can use your own month names and so on; even if you change 2 +-- the length of the year the code will adapt 3 + 4 +local days = { 5 + 'Day of the Frozen River'; 'Day of Fell Shadow'; 6 + 'Day of Peaceful Splendor'; 'Day of Somber Reflection'; 7 + 'Day of Wrathful Visitation'; 'Day of Wistful Remembrance'; 8 + 'Day of the Warm Hearth'; 'Day of Joyous Worship'; 9 + 'Day of the Fond Farewell'; 10 +} 11 + 12 +local weeks = { 13 + "Merchant's Week"; "Chandler's Week"; "Miller's Week"; 14 + "Bard's Week"; "Cobbler's Week"; 15 +} 16 + 17 +local moons = { 18 + 'Splendormoon'; 19 + 'Embermoon'; 20 + 'Saddlemoon'; 21 + 'Candlemoon'; 22 + 'Cindermoon'; 23 + 'Diremoon'; 24 + 'Chancelmoon'; 25 + 'Starmoon'; 26 + 'Harvestmoon'; 27 +} 28 + 29 +local yearadj = { 30 + 'Whimpering'; 31 + 'Overturned'; 32 + 'Silent'; 33 + 'Whimsical'; 34 + 'Turbulent'; 35 + 'Parsimonius'; 36 + 'Rhadamanthine'; 37 + 'Exuberant'; 38 + 'Winsome'; 39 + 'Bifurcated'; 40 +} 41 + 42 +local yearnoun = { 43 + 'Princeling'; 44 + 'Applecart'; 45 + 'Oxcart'; 46 + 'Parsnip'; 47 + 'Lotus'; 48 + 'Daffodil'; 49 +} 50 + 51 +local yg = function(y) 52 + local pos = -3 53 + local neg = y < 0 54 + y = tostring(math.abs(y)) 55 + local n = '' 56 + while true do 57 + local w = string.sub(y,pos,pos+2) 58 + if w == nil or w == '' then break end 59 + n = w .. ',' .. n 60 + pos = pos - 3 61 + end 62 + if neg then n = '-' .. n end 63 + return string.sub(n,1,-2) 64 +end 65 + 66 +return { 67 + days_per_stellar_cycle = 17; 68 + default = 'imperial'; 69 + styles = { 70 + imperial = { 71 + name = 'Imperial Archipelagian Calendar'; 72 + days = days, weeks = weeks, moons = moons; 73 + longdate = function(date) 74 + local day = days [date.day_of_week ] 75 + local week = weeks[date.week_of_moon] 76 + local moon = moons[date.moon_of_year] 77 + return string.format('%s on %s in %s after %s years of the Imperial Revolution',day,week,moon,yg(date.year)) 78 + end; 79 + shortdate = function(date) 80 + return string.format('%u/%u %s I.R.', date.day_of_moon, date.moon_of_year, yg(date.year)) 81 + end; 82 + } 83 + } 84 +}
Modified data/extracts.lua from [8583c46b62] to [c62e0cc7f2].
13 13 raspberry = {"group:food_raspberries", {228,51,210}}; 14 14 chili = {"farming:chili_pepper", {243,75,49}}; 15 15 pine = {"default:pine_sapling", {41,166,80}}; 16 16 cocoa = {"farming:cocoa_beans", {146,38,0}}; 17 17 grape = {"farming:grapes", {206,56,214}}; 18 18 kelp = {"default:sand_with_kelp", {109,185,145}}; 19 19 fern = {"default:fern_1", {164,238,47}}; 20 + marram = {"default:marram_grass_1", {127,255,210}}; 20 21 };
Modified data/gems.lua from [0836376152] to [a046b8be6a].
45 45 {affinity = {'praxic'}, confluence = 1}; 46 46 {affinity = {'praxic'}, confluence = 0.5}; 47 47 {affinity = {'cognic'}, confluence = 1}; 48 48 {affinity = {'syncretic'}, confluence = 0.9}; 49 49 }; 50 50 }; 51 51 luxite = { 52 - tone = {133,255,94}; 52 + tone = {189,255,236}; 53 53 rarity = 130; 54 54 }; 55 55 ruby = { 56 56 tone = {255,94,161}; 57 57 rarity = 150; 58 58 }; 59 59 amethyst = {
Modified data/gods.lua from [90d2603045] to [4ff6f034b6].
123 123 }; 124 124 }; 125 125 126 126 blood = { 127 127 name = 'Faramesti Surax'; 128 128 bless = { 129 129 potions = { 130 - Force = {50, 7}; 131 - Longevity = {65, 3}; 130 + Force = {favor=50, cost=5, chance=7}; 131 + Longevity = {favor=65, cost=7, chance=3}; 132 132 }; 133 133 tools = { 134 - rend = {80, 15}; 134 + rend = {favor=80, cost=15, chance=20}; 135 135 }; 136 136 }; 137 137 generosity = 4; 138 138 stinginess = 9; 139 139 idol = { 140 140 desc = "Blood Idol"; 141 141 width = 0.7;
Deleted data/register.lua version [d2f1e722e5].
1 -return { 2 - infusion = function(r) 3 - sorcery.data.infusions[#sorcery.data.infusions + 1] = r 4 - end; 5 - alloy = function(mix) 6 - sorcery.data.alloys[#sorcery.data.alloys + 1] = mix 7 - end; 8 - kiln_recipe = function(mix) 9 - sorcery.data.kilnrecs[#sorcery.data.kilnrecs + 1] = mix 10 - end; 11 - infusion_leftover = function(orig, leave) 12 - sorcery.data.infusion_leftovers[orig] = leave 13 - end; 14 -}
Added data/resonance.lua version [63249807d4].
1 +-- resonance is a mechanic whereby items which 'resonate' can be 2 +-- transformed into each other by use of the divide/meld wands
Added data/signs.lua version [15046a03f7].
1 +-- this unit defines astrological signs of various magical 2 +-- significance. used to determine whether the stars are aligned 3 + 4 +return { 5 + {id = 'minx', patron = 'Minx'; duration = 4 }; 6 + {id = 'ocelot', patron = 'Ocelot'; duration = 3, cycle = 3}; 7 + {id = 'wyvern', patron = 'Wyvern'; duration = 2, cycle = 2}; 8 + {id = 'dove', patron = 'Dove'; duration = 4 }; 9 + {id = 'leper', patron = 'Leper'; duration = 1, cycle = 3 }; 10 + {id = 'petrel', patron = 'Petrel'; duration = 5 }; 11 + {id = 'kestrel', patron = 'Kestrel'; duration = 6 }; 12 + {id = 'serpent', patron = 'Serpent'; duration = 3, cycle = 2}; 13 + {id = 'wserpent', patron = 'Winged Serpent'; duration = 3, cycle = 4 }; 14 + {id = 'lamb', patron = 'Lamb'; duration = 4}; 15 + {id = 'glamb', patron = 'Golden Lamb'; duration = 6, cycle = 5}; 16 + {id = 'grackle', patron = 'Grackle'; duration = 3}; 17 + {id = 'thief', patron = 'Thief'; duration = 2, cycle = 6}; 18 + {id = 'egret', patron = 'Egret'; duration = 3}; 19 + {id = 'chipmunk', patron = 'Chipmunk'; duration = 2}; 20 + {id = 'ibis', patron = 'Ibis'; duration = 3, cycle = 7}; 21 + {id = 'fox', patron = 'Fox'; duration = 3, cycle = 8}; 22 + {id = 'cfox', patron = 'Cowled Fox'; duration = 3, cycle = 9}; 23 + {id = 'tern', patron = 'Tern'; duration = 3, cycle = 3}; 24 + {id = 'pilgrim', patron = 'Pilgrim'; duration = 3, cycle = 2}; 25 + 26 + -- every 7 cycles, several extra signs occur in short succession 27 + {id = 'csteer', patron = 'Crowned Steer'; duration = 1, cycle = 7}; 28 + {id = 'cmoose', patron = 'Crowned Moose'; duration = 1, cycle = 7}; 29 + {id = 'cgoat', patron = 'Crowned Goat'; duration = 1, cycle = 7}; 30 + {id = 'cweasel', patron = 'Crowned Weasel'; duration = 1, cycle = 7}; 31 + {id = 'wolfprince', patron = 'Wolf-Prince'; duration = 2, cycle = 7}; 32 +}
Modified data/spells.lua from [c7b64d56d8] to [24333d0a0e].
391 391 obliterate = { 392 392 name = 'obliteration'; 393 393 uses = 129; 394 394 color = {175,6,212}; 395 395 affinity = {'aspen','dark'}; 396 396 leytype = 'occlutic'; 397 397 desc = 'Totally and irreversibly obliterate all items on an enchanter.'; 398 + cast = function(ctx) 399 + if not ctx.target or ctx.target.type ~= 'node' then return false end 400 + local tgt = minetest.get_node(ctx.target.under) 401 + if tgt.name ~= 'sorcery:enchanter' then return false end 402 + 403 + local inv = minetest.get_meta(ctx.target.under):get_inventory() 404 + for _,name in pairs{'foci','item'} do 405 + for i=1,inv:get_size(name) do 406 + inv:set_stack(name,i,ItemStack(nil)) 407 + end 408 + end 409 + 410 + enchantment_sparkle(ctx,sorcery.lib.color(255,12,0)) 411 + enchantment_sparkle(ctx,sorcery.lib.color(85,18,35)) 412 + enchantment_sparkle(ctx,sorcery.lib.color(0,0,0)) 413 + end 398 414 }; 399 415 sacrifice = { 400 416 name = 'sacrifice'; 401 417 uses = 58; 402 418 color = {212,6,63}; 403 419 affinity = {'aspen','blazing'}; 404 420 leytype = 'syncretic';
Added data/transmutation.lua version [c466f67e6e].
1 +-- transmutation is a mechanic whereby a metal can be sacrificed 2 +-- at the enchanter by use of a transmutation wand to get another 3 +-- metal unpredictably, possibly increasing in value, possibly 4 +-- not. 5 + 6 +return { 7 + gold = { 8 + [-2] = {'brass', 5}; 9 + [-1] = {'silver', 3}; -- one chance in three of silver - undesirable 10 + [1] = {'lithium', 2}; 11 + [2] = {'cobalt', 3}; 12 + [3] = {'iridium', 50}; 13 + fallback = 1; 14 + }; 15 +}
Modified depends.txt from [77f19ef08b] to [c1cf87f0b5].
3 3 farming 4 4 xdecor 5 5 basic_materials 6 6 vessels 7 7 late 8 8 instant_ores 9 9 screwdriver 10 +hopper?
Modified disassembly.lua from [5366481e82] to [9a3b11da34].
1 +local disassembler_formspec = function(pos) 2 + local m = minetest.get_meta(pos) 3 + local i = m:get_inventory() 4 + local form = [[ 5 + formspec_version[3] 6 + size[10.25,7] real_coordinates[true] 7 + list[current_player;main;0.25,2;8,4] 8 + ]] 9 + local slot = function(name,x,y,ghost) 10 + local s = string.format('list[context;%s;%f,%f;1,1;]', name, x, y) 11 + if ghost and i:is_empty(name) then 12 + s = string.format('image[%f,%f;1,1;sorcery_ui_ghost_%s.png]',x,y,ghost) .. s 13 + end 14 + form = form .. s 15 + end 16 + slot('item',0.25,0.5) 17 + slot('paper',2.25,0.5,'paper') 18 + slot('ink',3.50,0.5,'ink_bottle') 19 + slot('pen',4.75,0.5,'pen') 20 + slot('output',9,0.5) 21 + form = form .. [[ 22 + listring[context;output] 23 + listring[current_player;main] listring[context;paper] 24 + listring[current_player;main] listring[context;ink] 25 + listring[current_player;main] listring[context;item] 26 + listring[current_player;main] 27 + ]] 28 + m:set_string('formspec',form) 29 +end 1 30 local update_disassembler = function(pos) 2 31 local m = minetest.get_meta(pos) 3 32 local i = m:get_inventory() 4 33 local paper = i:get_stack('paper',1) 5 34 local item = i:get_stack('item',1) 35 + local ink = i:get_stack('ink',1) 36 + local pen = i:get_stack('pen',1) 6 37 7 - local ink_count 8 - for j=1,i:get_size('ink') do 9 - local ink = i:get_stack('ink',j) 10 - local c = ink:get_count() 11 - if ink_count then 12 - if c < ink_count then ink_count = c end 13 - else ink_count = c end 14 - end 38 + local ink_count = ink:get_count() 15 39 16 - ink_count = ink_count or 0 17 40 local maxrecs = math.min(ink_count, paper:get_count(), item:get_count()) 41 + if pen:is_empty() then maxrecs = 0 end 18 42 19 43 if maxrecs > 0 and sorcery.cookbook.classes.craft.find(item:get_name()) then 20 44 local rec = ItemStack{name = 'sorcery:recipe', count = maxrecs} 21 45 sorcery.cookbook.setrecipe(rec, 'craft', item:get_name()) 22 46 i:set_stack('output',1,rec) 23 47 else 24 48 i:set_stack('output',1,ItemStack()) 25 49 end 50 + disassembler_formspec(pos) 26 51 end 27 52 local dsbox = { 28 53 type = 'fixed'; 29 54 fixed = { 30 55 -0.5, -0.5, -0.5; 31 56 0.5, 0.0, 0.5; 32 57 }; ................................................................................ 55 80 }; 56 81 after_dig_node = sorcery.lib.node.purge_container; 57 82 on_construct = function(pos) 58 83 local m = minetest.get_meta(pos) 59 84 local i = m:get_inventory() 60 85 i:set_size('item',1) 61 86 i:set_size('paper',1) 62 - i:set_size('ink',3) 87 + i:set_size('ink',1) 88 + i:set_size('pen',1) 63 89 i:set_size('output',1) 64 90 m:set_string('infotext','Disassembly Kit') 65 - m:set_string('formspec', [[ 66 - formspec_version[3] 67 - size[10.25,7] real_coordinates[true] 68 - list[current_player;main;0.25,2;8,4] 69 - 70 - list[context;item;0.25,0.5;1,1;] 71 - list[context;paper;2.25,0.5;1,1;] 72 - list[context;ink;4.25,0.5;3,1;] 73 - list[context;output;9,0.5;1,1;] 74 - 75 - listring[context;output] 76 - listring[current_player;main] listring[context;paper] 77 - listring[current_player;main] listring[context;ink] 78 - listring[current_player;main] listring[context;item] 79 - listring[current_player;main] 80 - ]]) 91 + disassembler_formspec(pos) 81 92 end; 82 93 on_metadata_inventory_put = update_disassembler; 83 94 on_metadata_inventory_take = function(pos,list,idx,stack,user) 84 95 local m = minetest.get_meta(pos) 85 96 local i = m:get_inventory() 86 97 local paper = i:get_stack('paper',1) 87 98 local item = i:get_stack('item',1) 88 99 89 100 if list == 'output' then 90 101 local count = stack:get_count() 91 - local leftover = sorcery.data.infusion_leftovers[item:get_name()] 102 + local leftover = sorcery.register.residue.db[item:get_name()] 92 103 local lstack if leftover then 93 104 lstack = ItemStack(leftover) 94 105 lstack:set_count(lstack:get_count() * count) 95 106 -- this slightly idiosyncratic code is used to ensure that 96 - -- itemstrings can be used in the infusion leftovers table 107 + -- itemstrings can be used in the residue table 97 108 end 98 109 item:take_item(count) 99 110 if item:get_count() > 0 then 100 111 if leftover then 101 112 lstack = user:get_inventory():add_item(lstack) 102 113 if lstack:get_count() > 0 then minetest.add_item(pos,lstack) end 103 114 end ................................................................................ 105 116 else 106 117 if leftover then 107 118 i:set_stack('item',1,lstack) 108 119 else 109 120 i:set_stack('item',1,ItemStack()) 110 121 end 111 122 end 112 - for j=1,i:get_size('ink') do 113 - local ink = i:get_stack('ink',j) 114 - ink:take_item(count) 115 - i:set_stack('ink',j,ink) 116 - end 123 + local ink = i:get_stack('ink',1) 124 + local paper = i:get_stack('paper',1) 125 + ink:take_item(count) paper:take_item(count) 126 + i:set_stack('ink',1,ink) i:set_stack('paper',1,paper) 127 + local penstack = i:get_stack('pen',1) 128 + local pen = penstack:get_definition()._sorcery 129 + local uses = pen.material.data.durability * 0.10 130 + local dmg = 65535 / math.random(math.floor(uses*0.5),uses) 131 + print('adding damage',dmg,penstack:get_wear()) 132 + penstack:add_wear(dmg) 133 + print('wear now',penstack:get_wear()) 134 + i:set_stack('pen',1,penstack) 117 135 end 118 136 119 137 update_disassembler(pos) 120 138 end; 121 139 allow_metadata_inventory_put = function(pos,list,idx,stack,user) 122 140 local name = stack:get_name() 123 141 if list == 'paper' then 124 142 if name == 'default:paper' then return stack:get_count() end 125 143 elseif list == 'ink' then 126 - if minetest.get_item_group(name,'dye') > 0 then return stack:get_count() end 144 + if minetest.get_item_group(name,'ink') > 0 then return stack:get_count() end 145 + elseif list == 'pen' then 146 + if minetest.get_item_group(name,'sorcery_pen') > 0 then return stack:get_count() end 127 147 elseif list == 'item' then 128 148 return stack:get_count() 129 149 elseif list == 'output' then 130 150 return 0 131 151 end 132 152 return 0 133 153 end;
Modified gems.lua from [8e18232927] to [378fef1f36].
1 1 --- gemstones 2 2 local shards_per_gem = 9 3 3 4 -sorcery.register_gem = function(name,gem) 4 +local 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 8 9 9 sorcery.data.gems[name].parts = { 10 10 item = itemname; 11 11 shard = shardname; ................................................................................ 36 36 inventory_image = 'sorcery_gem_' .. name .. '_shard.png'; 37 37 groups = { gemshard = 1; crystalshard = 1; sorcery_shard = 1; }; 38 38 _sorcery = { 39 39 material = { 40 40 gem = true; 41 41 id = name, data = gem; 42 42 raw = true, value = 1; 43 + }; 44 + recipe = { 45 + canonical = { 46 + craft = { 47 + {'','xdecor:hammer',''}; 48 + {'',itemname,''}; 49 + }; 50 + } 43 51 }; 44 52 }; 45 53 }) 46 54 end 47 55 if not gem.foreign_amulet then 48 56 minetest.register_craftitem(amuletname, { 49 57 description = sorcery.lib.str.capitalize(name) .. ' amulet'; ................................................................................ 194 202 minetest.override_item(ore, {drop = newdrops}) 195 203 -- might be possible to just edit it in place, since we're 196 204 -- referring to registered_nodes anyway, but i don't want 197 205 -- to chance it; god knows what's going on under the hood 198 206 end 199 207 end 200 208 201 -for g,v in pairs(sorcery.data.gems) do sorcery.register_gem(g,v) end 209 +-- for g,v in pairs(sorcery.data.gems) do sorcery.register_gem(g,v) end 210 +sorcery.register.gems.foreach('sorcery:generate',{},register_gem) 202 211 203 212 sorcery.gem = { 204 213 getdrops = function(fac) 205 214 items = {} 206 215 for g,v in pairs(sorcery.data.gems) do 207 216 items[#items + 1] = { 208 217 rarity = gem.rarity * fac;
Modified gravitator.lua from [31896c5f81] to [8ccd951dd6].
27 27 description = 'Gravitator'; 28 28 drop = 'sorcery:gravitator_off'; 29 29 paramtype2 = 'facedir'; 30 30 groups = { 31 31 cracky = 2; 32 32 sorcery_magitech = 1; 33 33 sorcery_ley_device = 1; 34 - 35 - effect_trigger = (kind == 'off') and 0 or 1; 34 + not_in_creative_inventory = kind == 'off' and nil or 1; 35 + effect_trigger = (kind == 'off') and nil or 1; 36 36 }; 37 37 tiles = { 38 38 'sorcery_gravitator_side.png'; 39 39 'sorcery_gravitator_side.png'; 40 40 'sorcery_gravitator_side.png'; 41 41 'sorcery_gravitator_side.png'; 42 42 'sorcery_gravitator_side.png';
Modified harvester.lua from [61997cebcf] to [de45db35b3].
91 91 ]]) 92 92 end; 93 93 on_metadata_inventory_put = update_inv; 94 94 on_metadata_inventory_move = update_inv; 95 95 96 96 _sorcery = { 97 97 recipe = { 98 - info = "Standalone recharger for wands, amulets, and enchanted tools that draws on the ambient force from the local leylines"; 98 + note = "Standalone recharger for wands, amulets, and enchanted tools that draws on the ambient force from the local leylines"; 99 99 }; 100 100 }; 101 101 }) 102 102 103 103 minetest.register_craftitem('sorcery:harvester_receptacle', { 104 104 description = 'Harvester Receptacle'; 105 105 inventory_image = 'sorcery_harvester_receptacle.png';
Modified infuser.lua from [0d2fb4d9eb] to [13d8509748].
90 90 local base = potions[i]:get_name() 91 91 local potion = potions[i]:get_definition() 92 92 if elixir_can_apply(elixir,potion) then 93 93 -- at least one combination makes a valid potion; 94 94 -- we can start the infuser 95 95 goto start 96 96 end 97 - for _,v in pairs(sorcery.data.infusions) do 97 + for _,v in pairs(sorcery.register.infusions.db) do 98 98 if v.infuse == ingredient and v.into == base then 99 99 -- at least one combination makes a valid 100 100 -- potion; we can start the infuser 101 101 goto start 102 102 end 103 103 end 104 104 ::skip:: end ................................................................................ 163 163 title = potion._proto.name .. ' Draught'; 164 164 desc = potion._proto.desc; 165 165 color = sorcery.lib.color(potion._proto.color):readable(); 166 166 props = effects_table(newstack); 167 167 }); 168 168 inv:set_stack('potions',i,discharge(newstack)) 169 169 else 170 - for _,v in pairs(sorcery.data.infusions) do 170 + for _,v in pairs(sorcery.register.infusions.db) do 171 171 if v.infuse == ingredient and v.into == base then 172 172 -- transform the base into the infusion 173 173 inv:set_stack('potions',i,discharge(ItemStack(v.output))) 174 174 end 175 175 end 176 176 end 177 177 ::skip:: end 178 178 179 - inv:set_stack('infusion',1,ItemStack(sorcery.data.infusion_leftovers[ingredient])) 179 + inv:set_stack('infusion',1,ItemStack(sorcery.register.residue.db[ingredient])) 180 180 181 181 infuser_stop(pos) 182 182 return false 183 183 else 184 184 meta:set_float('runtime', newtime) 185 185 meta:set_string('formspec', infuser_formspec(percent)) 186 186 meta:set_string('infotext', 'Infuser (active)')
Modified init.lua from [330ca92ebf] to [f5b9efd3d5].
1 1 do 2 2 local path = minetest.get_modpath('sorcery'); 3 3 local get = function(unit) 4 4 return dofile(path .. '/' .. unit .. '.lua') 5 5 end 6 + local test = function(file) -- :/ 7 + local hnd = io.open(file,'r') 8 + if hnd == nil then return false else 9 + hnd:close() 10 + return true 11 + end 12 + end 13 + local worldcfg = function(str) 14 + return minetest.get_worldpath() .. '/' .. str 15 + end 16 + local cfg = function(str) return worldcfg('sorcery/' .. str) end 17 + local selfname = minetest.get_current_modname() 18 + local stage = function(s,...) 19 + local f = sorcery.cfg(s .. '.lua') 20 + if test(f) then return loadfile(f)(...) or true end 21 + return false 22 + end 23 + 6 24 sorcery = { 25 + self = selfname; 7 26 path = path; 8 27 load = function(name) get(name) end; 9 - unit = function(ns,sfx) 28 + worldcfg = worldcfg, cfg = cfg; 29 + stage = stage; 30 + log = function(module,text) 31 + if module then 32 + minetest.log('info',string.format('[%s :: %s] %s',selfname,module,text)) 33 + else 34 + minetest.log('info',string.format('[%s] %s',selfname,text)) 35 + end 36 + end; 37 + act = function(module,text) 38 + minetest.log('action',string.format('[%s :: %s] %s',selfname,module,text)) 39 + end; 40 + unit = function(ns,sfx,override) 10 41 local target 11 42 if ns then 12 43 sorcery[ns] = {} 13 44 target = sorcery[ns] 14 45 else target = sorcery end 46 + if override == true then override = '' 47 + elseif override then override = override .. '-' end 48 + local loaded = {} 15 49 return function(lst) 16 - for i=1,#lst do 17 - target[lst[i]] = get(((ns and ns..'/') or '')..lst[i]) 50 + for i,name in pairs(lst) do 51 + if not loaded[name] then 52 + loaded[name] = true 53 + local fpath = ((ns and ns..'/') or '')..name 54 + local extra = cfg(string.format('%s%s-extra.lua', override,name)) 55 + local replace = cfg(string.format('%s%s.lua', override,name)) 56 + local default = get(fpath) 57 + if override and test(replace) then 58 + sorcery.log(name,'loading local replacement for ' .. fpath .. ' from ' .. replace) 59 + target[name] = loadfile(replace)(default) 60 + else 61 + target[name] = default 62 + if override and test(extra) then 63 + sorcery.log(name,'loading local extras for ' .. fpath .. ' from ' .. extra) 64 + local extbl = loadfile(extra)(default) 65 + for k,v in pairs(extbl) do target[name][k] = v end 66 + end 67 + end 68 + end 18 69 end 19 70 end 20 71 end; 21 72 } 22 73 end 23 74 24 75 -- unfortunately we can't just iterate over the files 25 76 -- and load them automatically, as interdependencies 26 77 -- exist (especially with /lib) and we need to be very 27 78 -- careful about the order they're loaded in 28 79 29 -sorcery.unit('data') {'ui'} 80 +local data = sorcery.unit('data',nil,'lore') 81 +local root = sorcery.unit() 82 +sorcery.stage('bootstrap',data,root) 83 + 84 +data {'ui'} 30 85 sorcery.unit('lib') { 31 86 -- convenience 32 87 'str'; 33 88 -- serialization 34 89 'marshal', 'json'; 35 90 -- data structures 36 91 'tbl', 'class'; 37 92 -- wrappers 38 93 'color', 'image', 'ui'; 39 94 -- game 40 95 'node'; 41 96 } 42 97 43 -sorcery.unit() { 'compat', 'matreg' } 44 -sorcery.unit('data') { 45 - 'compat'; 46 - 'affinities'; 'gods'; 47 - 'enchants', 'spells'; 48 - 'gems', 'metals'; 49 - 'potions', 'oils', 'greases', 50 - 'draughts', 'elixirs', 51 - 'philters', 'extracts'; 52 - 'register'; 53 -} 98 +sorcery.stage('worldbuilding',data,root) 99 +root {'compat','matreg'} 100 +if not sorcery.stage('loadlore', data, root) then 101 + data { 102 + 'compat'; 103 + 'affinities'; 'gods'; 104 + 'calendar', 'signs'; 105 + 'enchants', 'spells'; 106 + 'gems', 'metals'; 107 + 'potions', 'oils', 'greases', 108 + 'draughts', 'elixirs', 109 + 'philters', 'extracts'; 110 + } 111 +end 112 + 113 +sorcery.load('registration') do 114 + local exclude = {'compat','ui'} 115 + for k,v in pairs(sorcery.data) do 116 + if not sorcery.lib.tbl.has(exclude,k) then 117 + sorcery.registry.mk(k,v) 118 + end 119 + end 120 +end 54 121 122 +sorcery.stage('startup',data) 55 123 for _,u in pairs { 56 124 'attunement'; 'context'; 'itemclass'; 'potions'; 57 125 'metal', 'gems'; 'leylines'; 'infuser'; 'altar'; 58 126 'wands'; 'tools', 'crafttools'; 'enchanter'; 59 127 'harvester'; 'metallurgy-hot', 'metallurgy-cold'; 60 128 'entities'; 'recipes'; 'coins'; 'interop'; 61 129 'tnodes'; 'forcefield'; 'farcaster'; 'portal'; 62 130 'cookbook', 'writing'; 'disassembly'; 'displacer'; 63 - 'gravitator'; 131 + 'gravitator'; 'precipitator'; 'astrolabe'; 64 132 65 133 'admin'; 66 134 } do sorcery.load(u) end 135 +sorcery.stage('finalize') 67 136 137 +sorcery.registry.defercheck()
Modified itemclass.lua from [25dadd17e3] to [56d754e26c].
108 108 end; 109 109 }; 110 110 }; 111 111 get = function(name,class) 112 112 local c = sorcery.itemclass.classes[class] 113 113 local o 114 114 if not c then return false end 115 + if type(name) ~= 'string' then name = name:get_name() end 115 116 116 117 if c.predicate then 117 118 o = c.predicate(name) 118 119 if o then return o end 119 120 end 120 121 121 122 if c.compat then
Modified leylines.lua from [58178ad533] to [110ec2eec9].
699 699 ]], math.floor(burnprog * 100)) .. lamps) 700 700 end 701 701 for _,active in pairs{true,false} do 702 702 local id = 'sorcery:generator' .. (active and '_active' or '') 703 703 minetest.register_node(id, { 704 704 description = 'Generator'; 705 705 paramtype2 = 'facedir'; 706 - groups = { cracky = 2; sorcery_ley_device = 1; sorcery_device_generator = active and 1 or 2}; 706 + groups = { 707 + cracky = 2; 708 + sorcery_ley_device = 1; 709 + sorcery_device_generator = active and 1 or 2; 710 + not_in_creative_inventory = active and nil or 1; 711 + }; 707 712 drop = 'sorcery:generator'; 708 713 tiles = { 709 714 'sorcery_ley_generator_top.png'; 710 715 'sorcery_ley_generator_bottom.png'; 711 716 'sorcery_ley_generator_side.png'; 712 717 'sorcery_ley_generator_side.png'; 713 718 'sorcery_ley_generator_back.png';
Modified lib/str.lua from [e883d78392] to [64ce434f04].
9 9 ['\xf2'] = '\2'; 10 10 ['\xf3'] = '\3'; 11 11 } 12 12 return { 13 13 capitalize = function(str) 14 14 return string.upper(string.sub(str, 1,1)) .. string.sub(str, 2) 15 15 end; 16 + 17 + explode = function(str,delim) 18 + local i = 1 19 + local tbl = {} 20 + repeat 21 + local ss = string.sub(str, i) 22 + local d = string.find(ss, delim, 1, true) or string.len(ss)+1 23 + tbl[#tbl+1] = string.sub(ss,1,d-1) 24 + i = i + d 25 + until i > string.len(str) 26 + return tbl 27 + end; 16 28 17 29 rand = function(min,max) 18 30 if not min then min = 16 end 19 31 if not max then max = min end 20 32 local str = '' 21 33 local r_int = 0x39 - 0x30 22 34 local r_upper = r_int + (0x5a - 0x41)
Modified lib/tbl.lua from [5046584198] to [4e80a60df8].
15 15 16 16 fn.copy = function(t) 17 17 local new = {} 18 18 for i,v in pairs(t) do new[i] = v end 19 19 setmetatable(new,getmetatable(t)) 20 20 return new 21 21 end 22 + 23 +fn.deepcopy = table.copy or function(t) 24 + new = {} 25 + for k,v in pairs(t) do 26 + if type(v) == 'table' then 27 + new[k] = fn.deepcopy(v) 28 + else 29 + new[k] = v 30 + end 31 + end 32 + return new 33 +end 22 34 23 35 fn.merge = function(base,override) 24 36 local new = fn.copy(base) 25 37 for k,v in pairs(override) do 26 38 new[k] = v 39 + end 40 + return new 41 +end 42 + 43 +fn.deepmerge = function(base,override) 44 + local new = {} 45 + local keys = fn.merge(fn.keys(base),fn.keys(override)) 46 + for _,k in pairs(keys) do 47 + if type(base[k]) == 'table' and 48 + type(override[k]) == 'table' then 49 + new[k] = fn.deepmerge(base[k], override[k]) 50 + elseif override[k] then 51 + new[k] = override[k] 52 + else 53 + new[k] = base[k] 54 + end 27 55 end 28 56 return new 29 57 end 30 58 31 59 fn.append = function(r1, r2) 32 60 local new = fn.copy(r1) 33 61 for i=1,#r2 do ................................................................................ 105 133 else 106 134 for i=0,#tbl do 107 135 acc = fn(acc,tbl[i],i) 108 136 end 109 137 end 110 138 return acc 111 139 end 140 + 141 +fn.walk = function(tbl,path) 142 + if type(path) == 'table' then 143 + for _,p in pairs(path) do 144 + if tbl[p] == nil then return nil end 145 + tbl = tbl[p] 146 + end 147 + else 148 + tbl = tbl[path] 149 + end 150 + return tbl 151 +end 112 152 113 153 return fn
Added lore.md version [044261e67c].
1 +# sorcery default lore 2 +while individual worlds can can modify, augment, or replace it, sorcery comes with a default 'lorepack' (set of data interpreted by the mod mechanics). this is a minimal guide designed to get you started exploring it, and for developers to give them a sense of how the lore data is interpreted and what is done with it. the lore itself is purposely *not* exhaustively documented, as figuring out what you can do and writing in-game books on the topic is meant to be a core social mechanic!
Modified metal.lua from [32259e26c1] to [f9db217ceb].
5 5 name = "sorcery:delete_duranium_ore_again"; 6 6 nodenames = {'sorcery:stone_with_duranium'}; 7 7 action = function(pos,node) 8 8 minetest.set_node(pos, {name = 'default:stone'}) 9 9 end 10 10 } 11 11 12 -sorcery.data.alloys = {} 13 -sorcery.data.kilnrecs = {} 12 +sorcery.registry.mk('alloys',false) 13 +sorcery.registry.mk('kilnrecs',false) 14 14 sorcery.data.metallookup = { 15 15 -- compat bullshit 16 16 ['moreores:silver_ingot'] = { 17 17 id = 'silver'; data = sorcery.data.metals.silver; 18 18 value = fragments_per_ingot; 19 19 }; 20 20 ['moreores:silver_block'] = { ................................................................................ 37 37 ['morelights_vintage:brass_block'] = { 38 38 id = 'brass'; data = sorcery.data.metals.brass; 39 39 value = fragments_per_ingot * 9; 40 40 }; 41 41 } 42 42 43 43 local tools, armors = sorcery.matreg.tools, sorcery.matreg.armors 44 -for name, metal in pairs(sorcery.data.metals) do 44 +-- for name, metal in pairs(sorcery.data.metals) do 45 +sorcery.register.metals.foreach('sorcery:generate',{},function(name,metal) 45 46 local ingot = metal.ingot or 'sorcery:' .. name .. '_ingot' 46 47 local block = metal.block or 'sorcery:' .. name .. 'block' 47 48 local screw = 'sorcery:screw_' .. name 48 49 local fragment = 'sorcery:fragment_' .. name 49 50 local powder = 'sorcery:powder_' .. name 50 51 metal.parts = { 51 52 ingot = ingot; ................................................................................ 76 77 id = name; data = metal; 77 78 value = fragments_per_ingot * 9; 78 79 } 79 80 sorcery.data.metallookup[fragment] = { 80 81 id = name; data = metal; 81 82 value = 1; 82 83 } 83 - sorcery.data.metallookup[screw] = { 84 - id = name; data = metal; 85 - value = 0; -- prevent use in smelting 86 - } 87 84 minetest.register_craftitem(screw, { 88 85 description = sorcery.lib.str.capitalize(name) .. ' Screw'; 89 86 inventory_image = sorcery.lib.image('sorcery_screw.png'):multiply(sorcery.lib.color(metal.tone)):render(); 87 + _sorcery = { 88 + material = { 89 + id = name, data = metal; 90 + grindcost = 2, grindvalue = 1; 91 + value = 0.5; 92 + }; 93 + }; 90 94 }) 91 95 minetest.register_craftitem(powder, { 92 96 description = sorcery.lib.str.capitalize(name) .. ' Powder'; 93 97 inventory_image = 'sorcery_' .. name .. '_powder.png'; 94 98 }) 95 99 if metal.dye then 96 100 minetest.register_craft { ................................................................................ 140 144 armor_weight = metal.armor_weight; 141 145 armor_protection = metal.armor_protection; 142 146 } 143 147 end 144 148 minetest.register_craftitem(fragment, { 145 149 inventory_image = 'sorcery_' .. name .. '_fragment.png'; 146 150 description = sorcery.lib.str.capitalize(name) .. ' Fragment'; 151 + _sorcery = { 152 + recipe = { 153 + canonical = { 154 + cook = {{ingot}}; 155 + }; 156 + }; 157 + }; 147 158 }) 148 159 minetest.register_craft { 149 160 type = 'cooking'; 150 161 recipe = powder; 151 162 cooktime = (metal.cooktime or 4) * 0.25; 152 163 output = fragment; 153 164 } ................................................................................ 171 182 minetest.register_craft { 172 183 type = 'fuel'; 173 184 recipe = powder; 174 185 burntime = metal.fuel; 175 186 } 176 187 end 177 188 if metal.mix then 178 - sorcery.data.register.alloy(sorcery.lib.tbl.merge(metal.mix, { 189 + sorcery.register.alloys.link(sorcery.lib.tbl.merge(metal.mix, { 179 190 output = name; 180 191 cooktime = metal.cooktime or 10; 181 192 })) 182 193 end 183 194 if metal.sinter then 184 195 local powders = {} 185 196 for _,m in pairs(metal.sinter) do 186 197 powders[#powders+1] = 'sorcery:powder_' .. m 187 198 end 188 199 local repl = {} 189 200 if metal.sinter_catalyst then 190 201 for _,m in pairs(metal.sinter_catalyst) do 191 202 powders[#powders+1] = m 192 - if sorcery.data.infusion_leftovers[m] then 193 - repl[#repl+1] = {m, sorcery.data.infusion_leftovers[m]} 203 + if sorcery.register.residue.db[m] then 204 + repl[#repl+1] = {m, sorcery.register.residue.db[m]} 194 205 end 195 206 end 196 207 end 197 208 198 209 minetest.register_craft { 199 210 type = 'shapeless'; 200 211 output = powder .. ' ' .. tostring(#powders); 201 212 recipe = powders; 202 213 replacements = repl; 203 214 }; 204 215 end 205 -end 216 +end)
Modified metallurgy-cold.lua from [c145d6a94a] to [0187673a26].
79 79 minetest.get_node_timer(pos):start(constants.mill_refresh) 80 80 end 81 81 local mill_fits_in_slot = function(slot,item) 82 82 if slot == 'grinder' then 83 83 if minetest.get_item_group(item:get_name(), 'sorcery_mill_grindhead')~=0 84 84 then return 1 end 85 85 elseif slot == 'input' then 86 - local metal = sorcery.data.metallookup[item:get_name()] 87 - local mat = sorcery.matreg.lookup[item:get_name()] 88 - local comp = sorcery.data.compat.grindables[item:get_name()] 89 - if metal or (mat and mat.metal) or comp then 86 + if sorcery.itemclass.get(item,'grindable') then 90 87 return item:get_count() 91 - else 92 - mat = item:get_definition()._sorcery and 93 - item:get_definition()._sorcery.material 94 - if mat and mat.grindvalue then 95 - return item:get_count() 96 - end 97 88 end 89 + -- local metal = sorcery.data.metallookup[item:get_name()] 90 + -- local mat = sorcery.matreg.lookup[item:get_name()] 91 + -- local comp = sorcery.data.compat.grindables[item:get_name()] 92 + -- if metal or (mat and mat.metal) or comp then 93 + -- return item:get_count() 94 + -- else 95 + -- mat = item:get_definition()._sorcery and 96 + -- item:get_definition()._sorcery.material 97 + -- if mat and mat.metal or mat.powder then 98 + -- return item:get_count() 99 + -- end 100 + -- end 98 101 end 99 102 return 0 100 103 end 101 104 local matprops = function(item) 102 105 local metal = sorcery.data.metallookup[item:get_name()] 106 + local props = item:get_definition()._sorcery 103 107 if not metal then 104 108 -- allow grinding of armor and tools back to their 105 109 -- original components 106 110 local mat = sorcery.matreg.lookup[item:get_name()] 107 111 if mat and mat.metal then 108 112 metal = mat 113 + elseif props and props.material and props.material.metal then 114 + metal = props.material 109 115 end 110 116 end 111 - local mp = (item:get_definition()._sorcery and 112 - item:get_definition()._sorcery.material) 117 + local mp = (props and props.material) 113 118 or sorcery.data.compat.grindables[item:get_name()] 114 119 or {} 115 120 116 121 if metal then mp = { 117 122 hardness = mp.hardness or metal.data.hardness; 118 123 grindvalue = ((mp.grindvalue or metal.value) or (metal and constants.metal_grindvalue)); 119 124 powder = mp.powder or metal.data.parts.powder; 120 125 grindcost = mp.grindcost or constants.metal_grindcost; -- invariant for metal 121 126 } end 122 127 128 + mp.hardness = mp.hardness or constants.default_hardness; 123 129 mp.torque = constants.grind_torque_factor * mp.hardness 124 130 mp.grindvalue = mp.grindvalue or constants.default_grindvalue 125 131 mp.grindcost = mp.grindcost or constants.default_grindcost 126 - mp.hardness = mp.hardness or constants.default_hardness; 127 132 128 133 if item:get_wear() ~= 0 then 129 134 -- prevent cheating by recovering metal from items before they 130 135 -- are destroyed 131 136 local wearfac = (item:get_wear() / 65535) 132 137 mp.grindvalue = math.max(1,math.ceil(mp.grindvalue * wearfac)) 133 138 mp.hardness = math.max(1,math.ceil(mp.grindcost * wearfac)) ................................................................................ 281 286 local speedboost = math.max(0.05,((grindpower - mp.hardness)/constants.grind_range) * grinders) 282 287 reqtime = mp.grindvalue * mp.hardness * constants.grind_factor * (1-speedboost) 283 288 if elapsed >= reqtime then 284 289 item:take_item(mp.grindcost) 285 290 inv:set_stack('input',1,item) 286 291 local pw = ItemStack{ 287 292 name=mp.powder; 288 - count=mp.grindvalue; 293 + count=math.floor(mp.grindvalue); 289 294 } 290 295 if inv:room_for_item('output',pw) then 291 296 inv:add_item('output',pw) 292 297 else 293 298 minetest.add_item(pos,pw) 294 299 end 295 300 elapsed = 0
Modified metallurgy-hot.lua from [c9beb59240] to [52848574bf].
128 128 local find_recipe = function(inv) 129 129 local mix = {} 130 130 local count = 0 131 131 for i=1,inv:get_size('input') do 132 132 local m = inv:get_stack('input',i) 133 133 if m:is_empty() then goto skip end 134 134 local l = sorcery.data.metallookup[m:get_name()] 135 + if not l then 136 + local p = sorcery.lib.tbl.walk(m:get_definition()._sorcery,{'material'}) 137 + if p.metal then l = p end 138 + end 135 139 if not l then return false end 136 140 mix[l.id] = (mix[l.id] or 0) + l.value 137 141 count = count + l.value 138 142 ::skip::end 143 + count = math.floor(count) 139 144 -- everything is metal, we've finished summing it up. 140 145 -- let's see if the assembled items match the ratio 141 146 -- specified in any of the smelting recipes. 142 147 local matches = 0 143 - for _,rec in pairs(sorcery.data.alloys) do 148 + for _,rec in pairs(sorcery.register.alloys.db) do 144 149 local fac = nil 145 150 local meltpoint = 1 146 151 if rec.metals == nil then goto skip_recipe end 147 152 for metal, ratio in pairs(rec.metals) do 148 153 if mix[metal] and mix[metal] % ratio == 0 then 149 154 if fac then 150 155 if mix[metal] / ratio ~= fac then goto skip_recipe end ................................................................................ 208 213 for i=1,inv:get_size('input') do 209 214 local s = inv:get_stack('input',i) 210 215 if s:is_empty() then goto skip end 211 216 s:take_item(1) inv:set_stack('input',i,s) 212 217 ::skip::end 213 218 214 219 local outstack 215 - if count % fragments_per_ingot == 0 then 216 - outstack = ItemStack { 217 - name = sorcery.data.metals[recipe.output].ingot or 'sorcery:' .. recipe.output .. '_ingot'; 218 - count = count / fragments_per_ingot; 219 - } 220 + if type(output) == 'table' then 221 + for v,item in pairs(output) do 222 + if count % v == 0 then 223 + outstack = ItemStack { 224 + name = item; 225 + count = count / v; 226 + } 227 + end 228 + end 220 229 else 221 - outstack = ItemStack { 222 - name = 'sorcery:fragment_' .. recipe.output; 223 - count = count; 224 - } 230 + if count % (fragments_per_ingot * 9) == 0 then 231 + outstack = ItemStack { 232 + name = sorcery.data.metals[recipe.output].parts.block; 233 + count = count / (fragments_per_ingot*9); 234 + } 235 + elseif count % fragments_per_ingot == 0 then 236 + outstack = ItemStack { 237 + name = sorcery.data.metals[recipe.output].parts.ingot; 238 + count = count / fragments_per_ingot; 239 + } 240 + else 241 + outstack = ItemStack { 242 + name = 'sorcery:fragment_' .. recipe.output; 243 + count = count; 244 + } 245 + end 225 246 end 226 247 227 248 local leftover = inv:add_item('output',outstack) 228 249 if not leftover:is_empty() then 229 250 minetest.add_item(pos, leftover) 230 251 end 231 252 end ................................................................................ 302 323 drawtype = "mesh"; 303 324 after_dig_node = sorcery.lib.node.purge_container; 304 325 mesh = 'sorcery-kiln-' .. state .. '.obj'; 305 326 drop = id; 306 327 groups = { 307 328 cracky = (state == 'open' and 2) or nil; 308 329 sorcery_metallurgy = 1; 330 + not_in_creative_inventory = (state == open) and nil or 1; 309 331 }; 310 332 sunlight_propagates = true; 311 333 paramtype1 = 'light'; 312 334 paramtype2 = 'facedir'; 313 335 selection_box = box[state]; 314 336 collision_box = box[state]; 315 337 tiles = tex[state]; ................................................................................ 384 406 _proto = kind; 385 407 description = desc; 386 408 drop = id; 387 409 after_dig_node = sorcery.lib.node.purge_container; 388 410 groups = { 389 411 cracky = (active and 2) or nil; 390 412 sorcery_metallurgy = 1; 413 + not_in_creative_inventory = active and 1 or nil; 391 414 }; 392 415 paramtype2 = 'facedir'; 393 416 light_source = (active and 9) or 0; 394 417 on_construct = function(pos) 395 418 local meta = minetest.get_meta(pos) 396 419 local inv = meta:get_inventory() 397 420 inv:set_size('input',kind.size)
Added models/sorcery-astrolabe.obj version [d217d918f2].
1 +# Blender v2.82 (sub 7) OBJ File: 'astrolabe.blend' 2 +# www.blender.org 3 +mtllib sorcery-astrolabe.mtl 4 +o steel 5 +v -0.031600 0.038922 -0.405254 6 +v -0.110054 0.038922 -0.391303 7 +v -0.184278 0.038922 -0.362313 8 +v -0.251421 0.038922 -0.319401 9 +v -0.308902 0.038922 -0.264214 10 +v -0.354512 0.038922 -0.198873 11 +v -0.386499 0.038922 -0.125890 12 +v -0.403632 0.038922 -0.048069 13 +v -0.405254 0.038922 0.031599 14 +v -0.391302 0.038922 0.110053 15 +v -0.362313 0.038922 0.184278 16 +v -0.319401 0.038922 0.251421 17 +v -0.264214 0.038922 0.308902 18 +v -0.198873 0.038922 0.354512 19 +v -0.125890 0.038922 0.386498 20 +v -0.048069 0.038922 0.403632 21 +v 0.031600 0.038922 0.405254 22 +v 0.110054 0.038922 0.391302 23 +v 0.184278 0.038922 0.362313 24 +v 0.251421 0.038922 0.319400 25 +v 0.308902 0.038922 0.264213 26 +v 0.354512 0.038922 0.198873 27 +v 0.386498 0.038922 0.125889 28 +v 0.403632 0.038922 0.048068 29 +v 0.405254 0.038922 -0.031600 30 +v 0.391302 0.038922 -0.110054 31 +v 0.362313 0.038922 -0.184279 32 +v 0.319400 0.038922 -0.251422 33 +v 0.264213 0.038922 -0.308903 34 +v 0.198872 0.038922 -0.354513 35 +v 0.125889 0.038922 -0.386499 36 +v 0.048068 0.038922 -0.403632 37 +v -0.031600 -0.038922 -0.405254 38 +v -0.110054 -0.038922 -0.391303 39 +v -0.184278 -0.038922 -0.362313 40 +v -0.251421 -0.038922 -0.319401 41 +v -0.308902 -0.038922 -0.264214 42 +v -0.354512 -0.038922 -0.198873 43 +v -0.386499 -0.038922 -0.125890 44 +v -0.403632 -0.038922 -0.048069 45 +v -0.405254 -0.038922 0.031599 46 +v -0.391302 -0.038922 0.110053 47 +v -0.362313 -0.038922 0.184278 48 +v -0.319401 -0.038922 0.251421 49 +v -0.264214 -0.038922 0.308902 50 +v -0.198873 -0.038922 0.354512 51 +v -0.125890 -0.038922 0.386498 52 +v -0.048069 -0.038922 0.403632 53 +v 0.031600 -0.038922 0.405254 54 +v 0.110054 -0.038922 0.391302 55 +v 0.184278 -0.038922 0.362313 56 +v 0.251421 -0.038922 0.319400 57 +v 0.308902 -0.038922 0.264213 58 +v 0.354512 -0.038922 0.198873 59 +v 0.386498 -0.038922 0.125889 60 +v 0.403632 -0.038922 0.048068 61 +v 0.405254 -0.038922 -0.031600 62 +v 0.391302 -0.038922 -0.110054 63 +v 0.362313 -0.038922 -0.184279 64 +v 0.319400 -0.038922 -0.251422 65 +v 0.264213 -0.038922 -0.308903 66 +v 0.198872 -0.038922 -0.354513 67 +v 0.125889 -0.038922 -0.386499 68 +v 0.048068 -0.038922 -0.403632 69 +v -0.036264 0.038922 -0.465073 70 +v -0.126297 0.038922 -0.449061 71 +v -0.211478 0.038922 -0.415792 72 +v -0.288532 0.038922 -0.366545 73 +v -0.354497 0.038922 -0.303212 74 +v -0.406839 0.038922 -0.228228 75 +v -0.443547 0.038922 -0.144472 76 +v -0.463210 0.038922 -0.055163 77 +v -0.465072 0.038922 0.036264 78 +v -0.449061 0.038922 0.126297 79 +v -0.415792 0.038922 0.211478 80 +v -0.366545 0.038922 0.288532 81 +v -0.303212 0.038922 0.354497 82 +v -0.228228 0.038922 0.406839 83 +v -0.144471 0.038922 0.443547 84 +v -0.055163 0.038922 0.463210 85 +v 0.036264 0.038922 0.465070 86 +v 0.126297 0.038922 0.449061 87 +v 0.211478 0.038922 0.415792 88 +v 0.288532 0.038922 0.366545 89 +v 0.354497 0.038922 0.303212 90 +v 0.406839 0.038922 0.228227 91 +v 0.443547 0.038922 0.144471 92 +v 0.463210 0.038922 0.055163 93 +v 0.465072 0.038922 -0.036264 94 +v 0.449061 0.038922 -0.126298 95 +v 0.415792 0.038922 -0.211479 96 +v 0.366545 0.038922 -0.288532 97 +v 0.303212 0.038922 -0.354497 98 +v 0.228227 0.038922 -0.406840 99 +v 0.144471 0.038922 -0.443547 100 +v 0.055162 0.038922 -0.463210 101 +v -0.036264 -0.038922 -0.465073 102 +v -0.126297 -0.038922 -0.449061 103 +v -0.211478 -0.038922 -0.415792 104 +v -0.288532 -0.038922 -0.366545 105 +v -0.354497 -0.038922 -0.303212 106 +v -0.406839 -0.038922 -0.228228 107 +v -0.443547 -0.038922 -0.144472 108 +v -0.463210 -0.038922 -0.055163 109 +v -0.465072 -0.038922 0.036264 110 +v -0.449061 -0.038922 0.126297 111 +v -0.415792 -0.038922 0.211478 112 +v -0.366545 -0.038922 0.288532 113 +v -0.303212 -0.038922 0.354497 114 +v -0.228228 -0.038922 0.406839 115 +v -0.144471 -0.038922 0.443547 116 +v -0.055163 -0.038922 0.463210 117 +v 0.036264 -0.038922 0.465070 118 +v 0.126297 -0.038922 0.449061 119 +v 0.211478 -0.038922 0.415792 120 +v 0.288532 -0.038922 0.366545 121 +v 0.354497 -0.038922 0.303212 122 +v 0.406839 -0.038922 0.228227 123 +v 0.443547 -0.038922 0.144471 124 +v 0.463210 -0.038922 0.055163 125 +v 0.465072 -0.038922 -0.036264 126 +v 0.449061 -0.038922 -0.126298 127 +v 0.415792 -0.038922 -0.211479 128 +v 0.366545 -0.038922 -0.288532 129 +v 0.303212 -0.038922 -0.354497 130 +v 0.228227 -0.038922 -0.406840 131 +v 0.144471 -0.038922 -0.443547 132 +v 0.055162 -0.038922 -0.463210 133 +v -0.010652 0.019986 0.329882 134 +v 0.034390 0.065822 0.322211 135 +v 0.077602 0.109626 0.302151 136 +v 0.117323 0.149716 0.270472 137 +v 0.152028 0.184550 0.228394 138 +v 0.180382 0.212791 0.177531 139 +v 0.201296 0.233352 0.119839 140 +v 0.213966 0.245444 0.057536 141 +v 0.217905 0.248602 -0.006985 142 +v 0.212963 0.242705 -0.071245 143 +v 0.199328 0.227979 -0.132773 144 +v 0.177525 0.204990 -0.189206 145 +v 0.148391 0.174621 -0.238374 146 +v 0.113047 0.138041 -0.278388 147 +v 0.072850 0.096653 -0.307710 148 +v 0.029346 0.052050 -0.325214 149 +v -0.015795 0.005945 -0.330227 150 +v -0.060836 -0.039891 -0.322556 151 +v -0.104048 -0.083695 -0.302496 152 +v -0.143769 -0.123785 -0.270817 153 +v -0.178474 -0.158620 -0.228739 154 +v -0.206828 -0.186860 -0.177876 155 +v -0.227742 -0.207422 -0.120184 156 +v -0.240412 -0.219514 -0.057881 157 +v -0.244352 -0.222672 0.006641 158 +v -0.239409 -0.216774 0.070900 159 +v -0.225774 -0.202048 0.132428 160 +v -0.203971 -0.179059 0.188861 161 +v -0.174837 -0.148691 0.238029 162 +v -0.139493 -0.112110 0.278043 163 +v -0.099296 -0.070722 0.307365 164 +v -0.055792 -0.026119 0.324869 165 +v 0.015795 -0.005945 0.330227 166 +v 0.060836 0.039891 0.322556 167 +v 0.104048 0.083695 0.302496 168 +v 0.143770 0.123785 0.270818 169 +v 0.178474 0.158620 0.228739 170 +v 0.206828 0.186860 0.177876 171 +v 0.227742 0.207422 0.120185 172 +v 0.240413 0.219514 0.057881 173 +v 0.244352 0.222672 -0.006640 174 +v 0.239409 0.216774 -0.070899 175 +v 0.225774 0.202048 -0.132428 176 +v 0.203971 0.179059 -0.188860 177 +v 0.174838 0.148691 -0.238028 178 +v 0.139493 0.112110 -0.278042 179 +v 0.099297 0.070723 -0.307365 180 +v 0.055792 0.026119 -0.324868 181 +v 0.010652 -0.019986 -0.329881 182 +v -0.034390 -0.065822 -0.322210 183 +v -0.077602 -0.109626 -0.302150 184 +v -0.117323 -0.149716 -0.270472 185 +v -0.152028 -0.184550 -0.228393 186 +v -0.180382 -0.212791 -0.177530 187 +v -0.201296 -0.233352 -0.119839 188 +v -0.213966 -0.245444 -0.057535 189 +v -0.217905 -0.248602 0.006986 190 +v -0.212963 -0.242705 0.071246 191 +v -0.199328 -0.227979 0.132774 192 +v -0.177524 -0.204989 0.189206 193 +v -0.148391 -0.174621 0.238374 194 +v -0.113047 -0.138040 0.278388 195 +v -0.072850 -0.096653 0.307711 196 +v -0.029345 -0.052050 0.325215 197 +v -0.010496 0.020411 0.349876 198 +v 0.037274 0.069023 0.341741 199 +v 0.083104 0.115482 0.320465 200 +v 0.125231 0.158000 0.286868 201 +v 0.162038 0.194945 0.242240 202 +v 0.192110 0.224896 0.188296 203 +v 0.214291 0.246703 0.127110 204 +v 0.227729 0.259528 0.061031 205 +v 0.231907 0.262877 -0.007398 206 +v 0.226665 0.256623 -0.075550 207 +v 0.212204 0.241004 -0.140806 208 +v 0.189080 0.216622 -0.200657 209 +v 0.158182 0.184414 -0.252804 210 +v 0.120696 0.145618 -0.295242 211 +v 0.078065 0.101723 -0.326340 212 +v 0.031924 0.054418 -0.344905 213 +v -0.015950 0.005519 -0.350221 214 +v -0.063720 -0.043093 -0.342086 215 +v -0.109550 -0.089551 -0.320810 216 +v -0.151678 -0.132069 -0.287213 217 +v -0.188485 -0.169014 -0.242585 218 +v -0.218557 -0.198965 -0.188641 219 +v -0.240738 -0.220772 -0.127454 220 +v -0.254176 -0.233597 -0.061376 221 +v -0.258354 -0.236947 0.007053 222 +v -0.253111 -0.230692 0.075205 223 +v -0.238650 -0.215073 0.140461 224 +v -0.215526 -0.190692 0.200312 225 +v -0.184628 -0.158483 0.252459 226 +v -0.147142 -0.119687 0.294897 227 +v -0.104511 -0.075792 0.325995 228 +v -0.058371 -0.028487 0.344560 229 +v 0.015950 -0.005519 0.350222 230 +v 0.063720 0.043093 0.342086 231 +v 0.109550 0.089551 0.320811 232 +v 0.151678 0.132069 0.287213 233 +v 0.188485 0.169014 0.242585 234 +v 0.218557 0.198965 0.188642 235 +v 0.240738 0.220772 0.127455 236 +v 0.254176 0.233597 0.061377 237 +v 0.258354 0.236947 -0.007053 238 +v 0.253112 0.230692 -0.075205 239 +v 0.238650 0.215074 -0.140460 240 +v 0.215526 0.190692 -0.200312 241 +v 0.184628 0.158484 -0.252458 242 +v 0.147143 0.119687 -0.294896 243 +v 0.104511 0.075793 -0.325995 244 +v 0.058371 0.028487 -0.344559 245 +v 0.010496 -0.020411 -0.349876 246 +v -0.037274 -0.069023 -0.341740 247 +v -0.083104 -0.115481 -0.320464 248 +v -0.125231 -0.158000 -0.286867 249 +v -0.162038 -0.194945 -0.242239 250 +v -0.192110 -0.224896 -0.188296 251 +v -0.214291 -0.246703 -0.127109 252 +v -0.227729 -0.259528 -0.061031 253 +v -0.231907 -0.262877 0.007399 254 +v -0.226665 -0.256622 0.075551 255 +v -0.212204 -0.241004 0.140807 256 +v -0.189080 -0.216622 0.200658 257 +v -0.158181 -0.184414 0.252804 258 +v -0.120696 -0.145617 0.295242 259 +v -0.078064 -0.101723 0.326341 260 +v -0.031924 -0.054417 0.344905 261 +v -0.012163 -0.014207 0.330129 262 +v -0.055292 0.033688 0.324257 263 +v -0.096825 0.079812 0.305925 264 +v -0.135165 0.122393 0.275835 265 +v -0.168841 0.159794 0.235146 266 +v -0.196556 0.190578 0.185420 267 +v -0.217247 0.213562 0.128568 268 +v -0.230119 0.227862 0.066776 269 +v -0.234675 0.232930 0.002417 270 +v -0.230742 0.228570 -0.062035 271 +v -0.218471 0.214950 -0.124102 272 +v -0.198333 0.192593 -0.181401 273 +v -0.171102 0.162359 -0.231729 274 +v -0.137825 0.125409 -0.273151 275 +v -0.099779 0.083164 -0.304076 276 +v -0.058429 0.037246 -0.323316 277 +v -0.015361 -0.010579 -0.330131 278 +v 0.027767 -0.058474 -0.324260 279 +v 0.069300 -0.104598 -0.305927 280 +v 0.107641 -0.147179 -0.275838 281 +v 0.141316 -0.184580 -0.235148 282 +v 0.169032 -0.215364 -0.185422 283 +v 0.189723 -0.238347 -0.128570 284 +v 0.202594 -0.252648 -0.066778 285 +v 0.207151 -0.257716 -0.002419 286 +v 0.203218 -0.253356 0.062033 287 +v 0.190947 -0.239736 0.124100 288 +v 0.170808 -0.217379 0.181399 289 +v 0.143577 -0.187145 0.231726 290 +v 0.110300 -0.150195 0.273149 291 +v 0.072255 -0.107949 0.304074 292 +v 0.030904 -0.062032 0.323314 293 +v 0.015361 0.010579 0.330132 294 +v -0.027767 0.058474 0.324260 295 +v -0.069300 0.104598 0.305927 296 +v -0.107641 0.147179 0.275838 297 +v -0.141316 0.184580 0.235149 298 +v -0.169032 0.215363 0.185423 299 +v -0.189723 0.238347 0.128571 300 +v -0.202594 0.252648 0.066778 301 +v -0.207151 0.257716 0.002420 302 +v -0.203218 0.253356 -0.062032 303 +v -0.190947 0.239736 -0.124100 304 +v -0.170809 0.217379 -0.181398 305 +v -0.143578 0.187145 -0.231726 306 +v -0.110300 0.150195 -0.273148 307 +v -0.072255 0.107950 -0.304073 308 +v -0.030904 0.062032 -0.323313 309 +v 0.012163 0.014207 -0.330128 310 +v 0.055292 -0.033688 -0.324257 311 +v 0.096825 -0.079812 -0.305924 312 +v 0.135165 -0.122393 -0.275835 313 +v 0.168841 -0.159794 -0.235145 314 +v 0.196556 -0.190578 -0.185419 315 +v 0.217247 -0.213562 -0.128567 316 +v 0.230118 -0.227862 -0.066775 317 +v 0.234675 -0.232930 -0.002416 318 +v 0.230742 -0.228570 0.062036 319 +v 0.218471 -0.214950 0.124103 320 +v 0.198333 -0.192593 0.181402 321 +v 0.171102 -0.162359 0.231729 322 +v 0.137824 -0.125409 0.273152 323 +v 0.099779 -0.083164 0.304077 324 +v 0.058428 -0.037246 0.323317 325 +v -0.012115 -0.014262 0.340129 326 +v -0.056550 0.035084 0.334079 327 +v -0.099341 0.082605 0.315191 328 +v -0.138843 0.126476 0.284190 329 +v -0.173538 0.165009 0.242268 330 +v -0.202093 0.196726 0.191036 331 +v -0.223411 0.220406 0.132462 332 +v -0.236672 0.235140 0.068798 333 +v -0.241367 0.240361 0.002490 334 +v -0.237315 0.235869 -0.063914 335 +v -0.224672 0.221836 -0.127861 336 +v -0.203924 0.198802 -0.186896 337 +v -0.175868 0.167652 -0.238747 338 +v -0.141582 0.129583 -0.281424 339 +v -0.102385 0.086058 -0.313287 340 +v -0.059781 0.038750 -0.333109 341 +v 0.029025 -0.059870 -0.334081 342 +v 0.071816 -0.107391 -0.315193 343 +v 0.111318 -0.151261 -0.284193 344 +v 0.146013 -0.189795 -0.242271 345 +v 0.174569 -0.221511 -0.191038 346 +v 0.195886 -0.245191 -0.132465 347 +v 0.209147 -0.259925 -0.068800 348 +v 0.213842 -0.265146 -0.002492 349 +v 0.209790 -0.260654 0.063912 350 +v 0.197147 -0.246622 0.127859 351 +v 0.176399 -0.223588 0.186893 352 +v 0.148343 -0.192438 0.238745 353 +v 0.114058 -0.154369 0.281422 354 +v 0.074860 -0.110844 0.313284 355 +v 0.032257 -0.063535 0.333107 356 +v 0.015410 0.010524 0.340131 357 +v -0.029025 0.059870 0.334082 358 +v -0.071816 0.107391 0.315194 359 +v -0.111318 0.151261 0.284193 360 +v -0.146013 0.189795 0.242271 361 +v -0.174569 0.221511 0.191039 362 +v -0.195886 0.245191 0.132465 363 +v -0.209147 0.259925 0.068801 364 +v -0.213842 0.265146 0.002493 365 +v -0.209790 0.260654 -0.063911 366 +v -0.197147 0.246622 -0.127859 367 +v -0.176399 0.223588 -0.186893 368 +v -0.148343 0.192438 -0.238745 369 +v -0.114058 0.154369 -0.281422 370 +v -0.074860 0.110844 -0.313284 371 +v -0.032257 0.063536 -0.333106 372 +v 0.056550 -0.035084 -0.334079 373 +v 0.099341 -0.082605 -0.315190 374 +v 0.138843 -0.126476 -0.284190 375 +v 0.173538 -0.165009 -0.242268 376 +v 0.202093 -0.196726 -0.191035 377 +v 0.223411 -0.220406 -0.132462 378 +v 0.236672 -0.235139 -0.068797 379 +v 0.241367 -0.240361 -0.002489 380 +v 0.237315 -0.235869 0.063914 381 +v 0.224672 -0.221836 0.127862 382 +v 0.203923 -0.198802 0.186896 383 +v 0.175867 -0.167652 0.238748 384 +v 0.141582 -0.129583 0.281425 385 +v 0.102384 -0.086058 0.313287 386 +v 0.059781 -0.038749 0.333110 387 +v -0.023270 -0.001795 -0.338887 388 +v 0.002710 0.024705 -0.338640 389 +v 0.002647 0.024774 -0.328622 390 +v -0.001722 0.020318 -0.328664 391 +v -0.023333 -0.001727 -0.328943 392 +vt 0.708974 0.575575 393 +vt 0.765974 0.575575 394 +vt 0.765974 0.503540 395 +vt 0.708974 0.503540 396 +vt 0.665191 0.575575 397 +vt 0.665191 0.503540 398 +vt 0.739820 0.503540 399 +vt 0.739820 0.575575 400 +vt 0.805233 0.575575 401 +vt 0.805233 0.503540 402 +vt 0.739820 0.503540 403 +vt 0.739820 0.575575 404 +vt 0.584213 0.575575 405 +vt 0.584213 0.503540 406 +vt 0.260180 0.575575 407 +vt 0.260180 0.503540 408 +vt 0.194767 0.503540 409 +vt 0.194767 0.575575 410 +vt 0.500000 0.575575 411 +vt 0.500000 0.503540 412 +vt 0.334809 0.575575 413 +vt 0.334809 0.503540 414 +vt 0.415787 0.575575 415 +vt 0.415787 0.503540 416 +vt 0.415787 0.575575 417 +vt 0.415787 0.503540 418 +vt 0.334809 0.575575 419 +vt 0.334809 0.503540 420 +vt 0.500000 0.575575 421 +vt 0.500000 0.503540 422 +vt 0.260180 0.575575 423 +vt 0.260180 0.503540 424 +vt 0.584213 0.575575 425 +vt 0.584213 0.503540 426 +vt 0.194767 0.575575 427 +vt 0.194767 0.503540 428 +vt 0.665191 0.575575 429 +vt 0.665191 0.503540 430 +vt 0.260180 0.575575 431 +vt 0.260180 0.503540 432 +vt 0.739820 0.575575 433 +vt 0.739820 0.503540 434 +vt 0.334809 0.575575 435 +vt 0.334809 0.503540 436 +vt 0.415787 0.575575 437 +vt 0.415787 0.503540 438 +vt 0.500000 0.503540 439 +vt 0.500000 0.575575 440 +vt 0.805233 0.575575 441 +vt 0.805233 0.503540 442 +vt 0.415787 0.575575 443 +vt 0.415787 0.503540 444 +vt 0.334809 0.575575 445 +vt 0.334809 0.503540 446 +vt 0.739820 0.575575 447 +vt 0.739820 0.503540 448 +vt 0.500000 0.575575 449 +vt 0.500000 0.503540 450 +vt 0.260180 0.575575 451 +vt 0.260180 0.503540 452 +vt 0.665190 0.575575 453 +vt 0.665190 0.503540 454 +vt 0.584213 0.575575 455 +vt 0.584213 0.503540 456 +vt 0.194768 0.575575 457 +vt 0.194768 0.503540 458 +vt 0.584212 0.575575 459 +vt 0.584212 0.503540 460 +vt 0.665191 0.575575 461 +vt 0.665191 0.503540 462 +vt 0.805232 0.503540 463 +vt 0.805232 0.575575 464 +vt 0.500000 0.876144 465 +vt 0.426618 0.868917 466 +vt 0.415787 0.923371 467 +vt 0.500000 0.931666 468 +vt 0.356056 0.847512 469 +vt 0.334809 0.898806 470 +vt 0.291026 0.812752 471 +vt 0.260180 0.858916 472 +vt 0.234026 0.765974 473 +vt 0.194768 0.805233 474 +vt 0.187248 0.708974 475 +vt 0.141084 0.739820 476 +vt 0.152488 0.643944 477 +vt 0.101194 0.665191 478 +vt 0.131083 0.573382 479 +vt 0.076629 0.584213 480 +vt 0.123856 0.500000 481 +vt 0.068334 0.500000 482 +vt 0.131083 0.426618 483 +vt 0.076629 0.415787 484 +vt 0.152488 0.356056 485 +vt 0.101194 0.334809 486 +vt 0.187248 0.291025 487 +vt 0.141084 0.260180 488 +vt 0.234026 0.234026 489 +vt 0.194768 0.194767 490 +vt 0.291026 0.187247 491 +vt 0.260180 0.141084 492 +vt 0.356056 0.152488 493 +vt 0.334809 0.101194 494 +vt 0.426618 0.131083 495 +vt 0.415787 0.076629 496 +vt 0.500000 0.123856 497 +vt 0.500000 0.068336 498 +vt 0.573382 0.131083 499 +vt 0.584213 0.076629 500 +vt 0.643944 0.152488 501 +vt 0.665191 0.101194 502 +vt 0.708975 0.187248 503 +vt 0.739820 0.141084 504 +vt 0.765974 0.234026 505 +vt 0.805233 0.194768 506 +vt 0.812753 0.291026 507 +vt 0.858916 0.260180 508 +vt 0.847512 0.356056 509 +vt 0.898806 0.334810 510 +vt 0.868917 0.426618 511 +vt 0.923371 0.415787 512 +vt 0.876144 0.500000 513 +vt 0.931666 0.500000 514 +vt 0.868917 0.573382 515 +vt 0.923371 0.584213 516 +vt 0.847512 0.643945 517 +vt 0.898806 0.665191 518 +vt 0.812752 0.708975 519 +vt 0.858916 0.739820 520 +vt 0.765974 0.765975 521 +vt 0.805232 0.805233 522 +vt 0.708974 0.812753 523 +vt 0.739820 0.858916 524 +vt 0.643944 0.847512 525 +vt 0.665190 0.898806 526 +vt 0.573382 0.868917 527 +vt 0.584212 0.923371 528 +vt 0.426618 0.868917 529 +vt 0.500000 0.876144 530 +vt 0.500000 0.931666 531 +vt 0.415787 0.923371 532 +vt 0.356056 0.847512 533 +vt 0.334809 0.898806 534 +vt 0.291026 0.812752 535 +vt 0.260180 0.858916 536 +vt 0.234026 0.765974 537 +vt 0.194768 0.805233 538 +vt 0.187248 0.708974 539 +vt 0.141084 0.739820 540 +vt 0.131083 0.573382 541 +vt 0.152488 0.643944 542 +vt 0.101194 0.665191 543 +vt 0.076629 0.584213 544 +vt 0.123856 0.500000 545 +vt 0.068334 0.500000 546 +vt 0.131083 0.426618 547 +vt 0.076629 0.415787 548 +vt 0.152488 0.356056 549 +vt 0.101194 0.334809 550 +vt 0.234026 0.234026 551 +vt 0.187248 0.291025 552 +vt 0.141084 0.260180 553 +vt 0.194768 0.194767 554 +vt 0.291026 0.187247 555 +vt 0.260180 0.141084 556 +vt 0.356056 0.152488 557 +vt 0.334809 0.101194 558 +vt 0.426618 0.131083 559 +vt 0.415787 0.076629 560 +vt 0.500000 0.123856 561 +vt 0.500000 0.068336 562 +vt 0.573382 0.131083 563 +vt 0.584213 0.076629 564 +vt 0.643944 0.152488 565 +vt 0.665191 0.101194 566 +vt 0.708975 0.187248 567 +vt 0.739820 0.141084 568 +vt 0.765974 0.234026 569 +vt 0.805233 0.194768 570 +vt 0.812753 0.291026 571 +vt 0.858916 0.260180 572 +vt 0.868917 0.426618 573 +vt 0.847512 0.356056 574 +vt 0.898806 0.334810 575 +vt 0.923371 0.415787 576 +vt 0.876144 0.500000 577 +vt 0.931666 0.500000 578 +vt 0.868917 0.573382 579 +vt 0.923371 0.584213 580 +vt 0.847512 0.643945 581 +vt 0.898806 0.665191 582 +vt 0.765974 0.765975 583 +vt 0.812752 0.708975 584 +vt 0.858916 0.739820 585 +vt 0.805232 0.805233 586 +vt 0.708974 0.812753 587 +vt 0.739820 0.858916 588 +vt 0.643944 0.847512 589 +vt 0.665190 0.898806 590 +vt 0.573382 0.868917 591 +vt 0.584212 0.923371 592 +vt 0.926035 0.627582 593 +vt 0.893852 0.630339 594 +vt 0.894026 0.578467 595 +vt 0.922967 0.575988 596 +vt 0.438346 0.355695 597 +vt 0.410006 0.364110 598 +vt 0.403735 0.313455 599 +vt 0.434948 0.304165 600 +vt 0.103843 0.618889 601 +vt 0.072497 0.627582 602 +vt 0.069430 0.575988 603 +vt 0.097852 0.568121 604 +vt 0.467257 0.352631 605 +vt 0.467083 0.300759 606 +vt 0.133709 0.604924 607 +vt 0.125336 0.555342 608 +vt 0.496198 0.355111 609 +vt 0.499266 0.303516 610 +vt 0.161818 0.586615 611 +vt 0.151669 0.538341 612 +vt 0.524621 0.362977 613 +vt 0.530612 0.312209 614 +vt 0.188225 0.564978 615 +vt 0.176852 0.517923 616 +vt 0.552105 0.375757 617 +vt 0.560478 0.326175 618 +vt 0.213211 0.540997 619 +vt 0.201064 0.494914 620 +vt 0.578438 0.392757 621 +vt 0.588587 0.344483 622 +vt 0.237170 0.515577 623 +vt 0.224597 0.470120 624 +vt 0.603621 0.413175 625 +vt 0.614994 0.366120 626 +vt 0.260539 0.489545 627 +vt 0.247823 0.444317 628 +vt 0.627832 0.436184 629 +vt 0.639980 0.390101 630 +vt 0.283756 0.463680 631 +vt 0.271155 0.418267 632 +vt 0.772897 0.584461 633 +vt 0.746656 0.562530 634 +vt 0.758131 0.515591 635 +vt 0.783200 0.536323 636 +vt 0.651366 0.460978 637 +vt 0.663939 0.415522 638 +vt 0.307238 0.438743 639 +vt 0.295030 0.392744 640 +vt 0.800818 0.603170 641 +vt 0.809407 0.553725 642 +vt 0.674592 0.486781 643 +vt 0.687308 0.441553 644 +vt 0.331362 0.415507 645 +vt 0.323841 0.422751 646 +vt 0.319887 0.368568 647 +vt 0.830504 0.617643 648 +vt 0.836775 0.566988 649 +vt 0.697924 0.512831 650 +vt 0.710524 0.467418 651 +vt 0.356431 0.394775 652 +vt 0.335557 0.412037 653 +vt 0.346128 0.346637 654 +vt 0.861717 0.626933 655 +vt 0.865115 0.575403 656 +vt 0.721799 0.538355 657 +vt 0.734007 0.492355 658 +vt 0.382638 0.377373 659 +vt 0.374049 0.327928 660 +vt 0.926035 0.627582 661 +vt 0.922967 0.575988 662 +vt 0.894026 0.578467 663 +vt 0.893852 0.630339 664 +vt 0.438346 0.355695 665 +vt 0.434948 0.304165 666 +vt 0.403735 0.313455 667 +vt 0.410006 0.364110 668 +vt 0.103843 0.618889 669 +vt 0.097852 0.568121 670 +vt 0.069430 0.575988 671 +vt 0.072497 0.627582 672 +vt 0.467257 0.352631 673 +vt 0.467083 0.300759 674 +vt 0.133709 0.604924 675 +vt 0.125336 0.555342 676 +vt 0.496198 0.355111 677 +vt 0.499266 0.303516 678 +vt 0.161818 0.586615 679 +vt 0.151669 0.538341 680 +vt 0.524621 0.362977 681 +vt 0.530612 0.312209 682 +vt 0.188225 0.564978 683 +vt 0.176852 0.517923 684 +vt 0.552105 0.375757 685 +vt 0.560478 0.326175 686 +vt 0.213211 0.540997 687 +vt 0.201064 0.494914 688 +vt 0.578438 0.392757 689 +vt 0.588587 0.344483 690 +vt 0.237170 0.515577 691 +vt 0.224597 0.470120 692 +vt 0.603621 0.413175 693 +vt 0.614994 0.366120 694 +vt 0.260539 0.489545 695 +vt 0.247823 0.444317 696 +vt 0.627832 0.436184 697 +vt 0.639980 0.390101 698 +vt 0.283756 0.463680 699 +vt 0.271155 0.418267 700 +vt 0.772897 0.584461 701 +vt 0.783200 0.536323 702 +vt 0.758131 0.515591 703 +vt 0.746656 0.562530 704 +vt 0.651366 0.460978 705 +vt 0.663939 0.415522 706 +vt 0.307238 0.438743 707 +vt 0.295030 0.392744 708 +vt 0.800818 0.603170 709 +vt 0.809407 0.553725 710 +vt 0.674592 0.486781 711 +vt 0.687308 0.441553 712 +vt 0.331362 0.415507 713 +vt 0.319887 0.368568 714 +vt 0.830504 0.617643 715 +vt 0.836775 0.566988 716 +vt 0.697924 0.512831 717 +vt 0.710524 0.467418 718 +vt 0.356431 0.394775 719 +vt 0.346128 0.346637 720 +vt 0.861717 0.626933 721 +vt 0.865115 0.575403 722 +vt 0.721799 0.538355 723 +vt 0.734007 0.492355 724 +vt 0.382638 0.377373 725 +vt 0.374049 0.327928 726 +vt 0.314619 0.373692 727 +vt 0.295030 0.392744 728 +vt 0.307238 0.438743 729 +vt 0.335355 0.412205 730 +vt 0.926035 0.627582 731 +vt 0.893852 0.630339 732 +vt 0.894026 0.578467 733 +vt 0.922967 0.575988 734 +vt 0.438346 0.355695 735 +vt 0.410006 0.364110 736 +vt 0.403735 0.313455 737 +vt 0.434948 0.304165 738 +vt 0.103843 0.618889 739 +vt 0.072497 0.627582 740 +vt 0.069430 0.575988 741 +vt 0.097852 0.568121 742 +vt 0.467257 0.352631 743 +vt 0.467083 0.300759 744 +vt 0.133709 0.604924 745 +vt 0.125336 0.555342 746 +vt 0.496198 0.355111 747 +vt 0.499266 0.303516 748 +vt 0.161818 0.586615 749 +vt 0.151669 0.538341 750 +vt 0.524621 0.362977 751 +vt 0.530612 0.312209 752 +vt 0.188225 0.564978 753 +vt 0.176852 0.517923 754 +vt 0.552105 0.375757 755 +vt 0.560478 0.326175 756 +vt 0.213211 0.540997 757 +vt 0.201064 0.494914 758 +vt 0.578438 0.392757 759 +vt 0.588587 0.344483 760 +vt 0.237170 0.515577 761 +vt 0.224597 0.470120 762 +vt 0.603621 0.413175 763 +vt 0.614994 0.366120 764 +vt 0.260539 0.489545 765 +vt 0.247823 0.444317 766 +vt 0.627832 0.436184 767 +vt 0.639980 0.390101 768 +vt 0.283756 0.463680 769 +vt 0.271155 0.418267 770 +vt 0.772897 0.584461 771 +vt 0.746656 0.562530 772 +vt 0.758131 0.515591 773 +vt 0.783200 0.536323 774 +vt 0.651366 0.460978 775 +vt 0.663939 0.415522 776 +vt 0.307238 0.438743 777 +vt 0.295030 0.392744 778 +vt 0.800818 0.603170 779 +vt 0.809407 0.553725 780 +vt 0.674592 0.486781 781 +vt 0.687308 0.441553 782 +vt 0.331362 0.415507 783 +vt 0.314395 0.373910 784 +vt 0.319887 0.368568 785 +vt 0.830504 0.617643 786 +vt 0.836775 0.566988 787 +vt 0.697924 0.512831 788 +vt 0.710524 0.467418 789 +vt 0.356431 0.394775 790 +vt 0.346128 0.346637 791 +vt 0.861717 0.626933 792 +vt 0.865115 0.575403 793 +vt 0.721799 0.538355 794 +vt 0.734007 0.492355 795 +vt 0.382638 0.377373 796 +vt 0.374049 0.327928 797 +vt 0.926035 0.627582 798 +vt 0.922967 0.575988 799 +vt 0.894026 0.578467 800 +vt 0.893852 0.630339 801 +vt 0.438346 0.355695 802 +vt 0.434948 0.304165 803 +vt 0.403735 0.313455 804 +vt 0.410006 0.364110 805 +vt 0.103843 0.618889 806 +vt 0.097852 0.568121 807 +vt 0.069430 0.575988 808 +vt 0.072497 0.627582 809 +vt 0.467257 0.352631 810 +vt 0.467083 0.300759 811 +vt 0.133709 0.604924 812 +vt 0.125336 0.555342 813 +vt 0.496198 0.355111 814 +vt 0.499266 0.303516 815 +vt 0.161818 0.586615 816 +vt 0.151669 0.538341 817 +vt 0.524621 0.362977 818 +vt 0.530612 0.312209 819 +vt 0.188225 0.564978 820 +vt 0.176852 0.517923 821 +vt 0.552105 0.375757 822 +vt 0.560478 0.326175 823 +vt 0.213211 0.540997 824 +vt 0.201064 0.494914 825 +vt 0.578438 0.392757 826 +vt 0.588587 0.344483 827 +vt 0.237170 0.515577 828 +vt 0.224597 0.470120 829 +vt 0.603621 0.413175 830 +vt 0.614994 0.366120 831 +vt 0.260539 0.489545 832 +vt 0.247823 0.444317 833 +vt 0.627832 0.436184 834 +vt 0.639980 0.390101 835 +vt 0.283756 0.463680 836 +vt 0.271155 0.418267 837 +vt 0.772897 0.584461 838 +vt 0.783200 0.536323 839 +vt 0.758131 0.515591 840 +vt 0.746656 0.562530 841 +vt 0.651366 0.460978 842 +vt 0.663939 0.415522 843 +vt 0.800818 0.603170 844 +vt 0.809407 0.553725 845 +vt 0.674592 0.486781 846 +vt 0.687308 0.441553 847 +vt 0.830504 0.617643 848 +vt 0.836775 0.566988 849 +vt 0.697924 0.512831 850 +vt 0.710524 0.467418 851 +vt 0.861717 0.626933 852 +vt 0.865115 0.575403 853 +vt 0.721799 0.538355 854 +vt 0.734007 0.492355 855 +vt 0.382638 0.377373 856 +vt 0.374049 0.327928 857 +vt 0.346128 0.346637 858 +vt 0.356431 0.394775 859 +vt 0.000000 0.000000 860 +vt 0.000000 0.000000 861 +vt 0.000000 0.000000 862 +vt 0.000000 0.000000 863 +vt 0.000000 0.000000 864 +vt 0.000000 0.000000 865 +vt 0.000000 0.000000 866 +vt 0.000000 0.000000 867 +vt 0.000000 0.000000 868 +vt 0.000000 0.000000 869 +vt 0.000000 0.000000 870 +vt 0.000000 0.000000 871 +vt 0.000000 0.000000 872 +vt 0.000000 0.000000 873 +vt 0.000000 0.000000 874 +vt 0.000000 0.000000 875 +vt 0.000000 0.000000 876 +vt 0.000000 0.000000 877 +vt 0.000000 0.000000 878 +vt 0.000000 0.000000 879 +vt 0.000000 0.000000 880 +vt 0.000000 0.000000 881 +vt 0.000000 0.000000 882 +vt 0.000000 0.000000 883 +vt 0.000000 0.000000 884 +vt 0.000000 0.000000 885 +vt 0.000000 0.000000 886 +vt 0.000000 0.000000 887 +vt 0.000000 0.000000 888 +vt 0.000000 0.000000 889 +vt 0.000000 0.000000 890 +vt 0.000000 0.000000 891 +vt 0.000000 0.000000 892 +vt 0.000000 0.000000 893 +vt 0.000000 0.000000 894 +vt 0.000000 0.000000 895 +vt 0.000000 0.000000 896 +vt 0.000000 0.000000 897 +vt 0.000000 0.000000 898 +vt 0.000000 0.000000 899 +vt 0.000000 0.000000 900 +vt 0.000000 0.000000 901 +vt 0.000000 0.000000 902 +vt 0.000000 0.000000 903 +vt 0.000000 0.000000 904 +vt 0.000000 0.000000 905 +vt 0.000000 0.000000 906 +vt 0.000000 0.000000 907 +vt 0.000000 0.000000 908 +vt 0.000000 0.000000 909 +vt 0.000000 0.000000 910 +vt 0.000000 0.000000 911 +vt 0.000000 0.000000 912 +vt 0.000000 0.000000 913 +vt 0.000000 0.000000 914 +vt 0.000000 0.000000 915 +vt 0.000000 0.000000 916 +vt 0.000000 0.000000 917 +vt 0.321518 0.424988 918 +vt 0.321736 0.424778 919 +vt 0.000000 0.000000 920 +vt 0.000000 0.000000 921 +vt 0.000000 0.000000 922 +vt 0.000000 0.000000 923 +vn -0.8200 -0.0000 -0.5724 924 +vn 0.9159 0.0000 0.4014 925 +vn -0.6926 0.0000 -0.7214 926 +vn 0.9766 -0.0000 0.2150 927 +vn 0.9998 -0.0000 0.0204 928 +vn -0.9159 0.0000 -0.4014 929 +vn 0.9846 0.0000 -0.1751 930 +vn -0.9766 0.0000 -0.2150 931 +vn 0.9315 -0.0000 -0.3638 932 +vn -0.9998 0.0000 -0.0204 933 +vn 0.8426 0.0000 -0.5385 934 +vn -0.9846 0.0000 0.1751 935 +vn 0.7214 0.0000 -0.6926 936 +vn -0.9315 -0.0000 0.3638 937 +vn 0.5724 0.0000 -0.8200 938 +vn -0.8426 -0.0000 0.5385 939 +vn 0.4014 0.0000 -0.9159 940 +vn 0.1751 -0.0000 0.9846 941 +vn -0.7214 0.0000 0.6926 942 +vn 0.2150 -0.0000 -0.9766 943 +vn 0.3638 -0.0000 0.9315 944 +vn -0.5724 0.0000 0.8200 945 +vn 0.0203 -0.0000 -0.9998 946 +vn 0.5385 -0.0000 0.8426 947 +vn -0.4014 0.0000 0.9159 948 +vn -0.1751 0.0000 -0.9846 949 +vn 0.6926 0.0000 0.7214 950 +vn -0.2150 0.0000 0.9766 951 +vn -0.3638 0.0000 -0.9315 952 +vn 0.8200 -0.0000 0.5724 953 +vn -0.0204 -0.0000 0.9998 954 +vn -0.5385 0.0000 -0.8426 955 +vn -0.0000 -1.0000 -0.0000 956 +vn 0.0000 1.0000 0.0000 957 +vn 0.6211 0.6395 0.4531 958 +vn -0.4502 -0.4692 -0.7597 959 +vn 0.6722 0.6892 0.2705 960 +vn -0.5461 -0.5652 -0.6183 961 +vn 0.6975 0.7124 0.0775 962 +vn -0.6211 -0.6395 -0.4531 963 +vn 0.6960 0.7082 -0.1185 964 +vn -0.6722 -0.6892 -0.2705 965 +vn 0.6677 0.6768 -0.3100 966 +vn -0.6975 -0.7124 -0.0775 967 +vn 0.6138 0.6194 -0.4895 968 +vn -0.6960 -0.7082 0.1185 969 +vn 0.5362 0.5382 -0.6502 970 +vn -0.6677 -0.6768 0.3100 971 +vn 0.4381 0.4364 -0.7859 972 +vn -0.6138 -0.6194 0.4895 973 +vn 0.3232 0.3177 -0.8914 974 +vn 0.0764 0.0911 0.9929 975 +vn -0.5362 -0.5382 0.6502 976 +vn 0.1958 0.1868 -0.9627 977 +vn 0.2107 0.2275 0.9507 978 +vn -0.4381 -0.4364 0.7859 979 +vn 0.0609 0.0488 -0.9970 980 +vn 0.3369 0.3552 0.8720 981 +vn -0.3232 -0.3177 0.8914 982 +vn -0.0764 -0.0911 -0.9929 983 +vn 0.4502 0.4692 0.7597 984 +vn -0.1958 -0.1868 0.9627 985 +vn -0.2107 -0.2275 -0.9507 986 +vn 0.5461 0.5652 0.6183 987 +vn -0.0609 -0.0488 0.9970 988 +vn -0.3369 -0.3552 -0.8720 989 +vn 0.7140 -0.7001 0.0093 990 +vn 0.0704 -0.0783 0.9944 991 +vn -0.7140 0.7001 -0.0093 992 +vn -0.5879 0.6528 0.4778 993 +vn 0.4208 -0.4672 -0.7776 994 +vn -0.6389 0.7095 0.2973 995 +vn 0.5142 -0.5709 -0.6400 996 +vn -0.6655 0.7390 0.1053 997 +vn 0.5879 -0.6528 -0.4778 998 +vn -0.6664 0.7400 -0.0907 999 +vn 0.6389 -0.7095 -0.2973 1000 +vn -0.6417 0.7127 -0.2833 1001 +vn 0.6655 -0.7390 -0.1053 1002 +vn -0.5924 0.6579 -0.4649 1003 +vn 0.6664 -0.7401 0.0907 1004 +vn -0.5203 0.5779 -0.6287 1005 +vn 0.6417 -0.7127 0.2833 1006 +vn -0.4282 0.4757 -0.7683 1007 +vn 0.5924 -0.6579 0.4649 1008 +vn -0.3197 0.3551 -0.8784 1009 +vn -0.0608 0.0674 0.9959 1010 +vn 0.5203 -0.5779 0.6287 1011 +vn -0.1989 0.2210 -0.9548 1012 +vn -0.1896 0.2104 0.9590 1013 +vn 0.4282 -0.4757 0.7683 1014 +vn -0.0704 0.0783 -0.9944 1015 +vn -0.3112 0.3454 0.8854 1016 +vn 0.3197 -0.3551 0.8784 1017 +vn 0.0608 -0.0674 -0.9959 1018 +vn -0.4208 0.4672 0.7776 1019 +vn 0.1989 -0.2210 0.9548 1020 +vn 0.1896 -0.2105 -0.9590 1021 +vn -0.5142 0.5709 0.6400 1022 +vn 0.3112 -0.3454 -0.8854 1023 +vn 0.4283 -0.4757 0.7683 1024 +vn -0.1896 0.2105 0.9590 1025 +vn 0.7431 0.6692 0.0001 1026 +vn -0.7431 -0.6692 -0.0001 1027 +vn -0.0433 0.0403 0.9982 1028 +g steel_steel_steel 1029 +usemtl steel 1030 +s off 1031 +f 6/1/1 5/2/1 37/3/1 38/4/1 1032 +f 71/5/2 103/6/2 102/7/2 70/8/2 1033 +f 85/9/3 117/10/3 116/11/3 84/12/3 1034 +f 72/13/4 104/14/4 103/6/4 71/5/4 1035 +f 86/15/1 118/16/1 117/17/1 85/18/1 1036 +f 73/19/5 105/20/5 104/14/5 72/13/5 1037 +f 87/21/6 119/22/6 118/16/6 86/15/6 1038 +f 74/23/7 106/24/7 105/20/7 73/19/7 1039 +f 88/25/8 120/26/8 119/22/8 87/21/8 1040 +f 75/27/9 107/28/9 106/24/9 74/23/9 1041 +f 89/29/10 121/30/10 120/26/10 88/25/10 1042 +f 76/31/11 108/32/11 107/28/11 75/27/11 1043 +f 90/33/12 122/34/12 121/30/12 89/29/12 1044 +f 77/35/13 109/36/13 108/32/13 76/31/13 1045 +f 91/37/14 123/38/14 122/34/14 90/33/14 1046 +f 78/39/15 110/40/15 109/36/15 77/35/15 1047 +f 92/41/16 124/42/16 123/38/16 91/37/16 1048 +f 79/43/17 111/44/17 110/40/17 78/39/17 1049 +f 66/45/18 98/46/18 97/47/18 65/48/18 1050 +f 93/49/19 125/50/19 124/42/19 92/41/19 1051 +f 80/51/20 112/52/20 111/44/20 79/43/20 1052 +f 67/53/21 99/54/21 98/46/21 66/45/21 1053 +f 94/55/22 126/56/22 125/50/22 93/49/22 1054 +f 81/57/23 113/58/23 112/52/23 80/51/23 1055 +f 68/59/24 100/60/24 99/54/24 67/53/24 1056 +f 95/61/25 127/62/25 126/56/25 94/55/25 1057 +f 82/63/26 114/64/26 113/58/26 81/57/26 1058 +f 69/65/27 101/66/27 100/60/27 68/59/27 1059 +f 96/67/28 128/68/28 127/62/28 95/61/28 1060 +f 83/69/29 115/70/29 114/64/29 82/63/29 1061 +f 70/8/30 102/7/30 101/71/30 69/72/30 1062 +f 65/48/31 97/47/31 128/68/31 96/67/31 1063 +f 84/12/32 116/11/32 115/70/32 83/69/32 1064 +f 1/73/33 2/74/33 66/75/33 65/76/33 1065 +f 2/74/33 3/77/33 67/78/33 66/75/33 1066 +f 3/77/33 4/79/33 68/80/33 67/78/33 1067 +f 4/79/33 5/81/33 69/82/33 68/80/33 1068 +f 5/81/33 6/83/33 70/84/33 69/82/33 1069 +f 6/83/33 7/85/33 71/86/33 70/84/33 1070 +f 7/85/33 8/87/33 72/88/33 71/86/33 1071 +f 8/87/33 9/89/33 73/90/33 72/88/33 1072 +f 9/89/33 10/91/33 74/92/33 73/90/33 1073 +f 10/91/33 11/93/33 75/94/33 74/92/33 1074 +f 11/93/33 12/95/33 76/96/33 75/94/33 1075 +f 12/95/33 13/97/33 77/98/33 76/96/33 1076 +f 13/97/33 14/99/33 78/100/33 77/98/33 1077 +f 14/99/33 15/101/33 79/102/33 78/100/33 1078 +f 15/101/33 16/103/33 80/104/33 79/102/33 1079 +f 16/103/33 17/105/33 81/106/33 80/104/33 1080 +f 17/105/33 18/107/33 82/108/33 81/106/33 1081 +f 18/107/33 19/109/33 83/110/33 82/108/33 1082 +f 19/109/33 20/111/33 84/112/33 83/110/33 1083 +f 20/111/33 21/113/33 85/114/33 84/112/33 1084 +f 21/113/33 22/115/33 86/116/33 85/114/33 1085 +f 22/115/33 23/117/33 87/118/33 86/116/33 1086 +f 23/117/33 24/119/33 88/120/33 87/118/33 1087 +f 24/119/33 25/121/33 89/122/33 88/120/33 1088 +f 25/121/33 26/123/33 90/124/33 89/122/33 1089 +f 26/123/33 27/125/33 91/126/33 90/124/33 1090 +f 27/125/33 28/127/33 92/128/33 91/126/33 1091 +f 28/127/33 29/129/33 93/130/33 92/128/33 1092 +f 29/129/33 30/131/33 94/132/33 93/130/33 1093 +f 30/131/33 31/133/33 95/134/33 94/132/33 1094 +f 31/133/33 32/135/33 96/136/33 95/134/33 1095 +f 32/135/33 1/73/33 65/76/33 96/136/33 1096 +f 34/137/34 33/138/34 97/139/34 98/140/34 1097 +f 35/141/34 34/137/34 98/140/34 99/142/34 1098 +f 36/143/34 35/141/34 99/142/34 100/144/34 1099 +f 37/145/34 36/143/34 100/144/34 101/146/34 1100 +f 38/147/34 37/145/34 101/146/34 102/148/34 1101 +f 40/149/34 39/150/34 103/151/34 104/152/34 1102 +f 41/153/34 40/149/34 104/152/34 105/154/34 1103 +f 42/155/34 41/153/34 105/154/34 106/156/34 1104 +f 43/157/34 42/155/34 106/156/34 107/158/34 1105 +f 45/159/34 44/160/34 108/161/34 109/162/34 1106 +f 46/163/34 45/159/34 109/162/34 110/164/34 1107 +f 47/165/34 46/163/34 110/164/34 111/166/34 1108 +f 48/167/34 47/165/34 111/166/34 112/168/34 1109 +f 49/169/34 48/167/34 112/168/34 113/170/34 1110 +f 50/171/34 49/169/34 113/170/34 114/172/34 1111 +f 51/173/34 50/171/34 114/172/34 115/174/34 1112 +f 52/175/34 51/173/34 115/174/34 116/176/34 1113 +f 53/177/34 52/175/34 116/176/34 117/178/34 1114 +f 54/179/34 53/177/34 117/178/34 118/180/34 1115 +f 56/181/34 55/182/34 119/183/34 120/184/34 1116 +f 57/185/34 56/181/34 120/184/34 121/186/34 1117 +f 58/187/34 57/185/34 121/186/34 122/188/34 1118 +f 59/189/34 58/187/34 122/188/34 123/190/34 1119 +f 61/191/34 60/192/34 124/193/34 125/194/34 1120 +f 62/195/34 61/191/34 125/194/34 126/196/34 1121 +f 63/197/34 62/195/34 126/196/34 127/198/34 1122 +f 64/199/34 63/197/34 127/198/34 128/200/34 1123 +f 33/138/34 64/199/34 128/200/34 97/139/34 1124 +f 135/201/35 134/202/35 166/203/35 167/204/35 1125 +f 149/205/36 148/206/36 180/207/36 181/208/36 1126 +f 136/209/37 135/210/37 167/211/37 168/212/37 1127 +f 150/213/38 149/205/38 181/208/38 182/214/38 1128 +f 137/215/39 136/209/39 168/212/39 169/216/39 1129 +f 151/217/40 150/213/40 182/214/40 183/218/40 1130 +f 138/219/41 137/215/41 169/216/41 170/220/41 1131 +f 152/221/42 151/217/42 183/218/42 184/222/42 1132 +f 139/223/43 138/219/43 170/220/43 171/224/43 1133 +f 153/225/44 152/221/44 184/222/44 185/226/44 1134 +f 140/227/45 139/223/45 171/224/45 172/228/45 1135 +f 154/229/46 153/225/46 185/226/46 186/230/46 1136 +f 141/231/47 140/227/47 172/228/47 173/232/47 1137 +f 155/233/48 154/229/48 186/230/48 187/234/48 1138 +f 142/235/49 141/231/49 173/232/49 174/236/49 1139 +f 156/237/50 155/233/50 187/234/50 188/238/50 1140 +f 143/239/51 142/235/51 174/236/51 175/240/51 1141 +f 130/241/52 129/242/52 161/243/52 162/244/52 1142 +f 157/245/53 156/237/53 188/238/53 189/246/53 1143 +f 144/247/54 143/239/54 175/240/54 176/248/54 1144 +f 131/249/55 130/241/55 162/244/55 163/250/55 1145 +f 158/251/56 157/245/56 189/246/56 190/252/56 1146 +f 145/253/57 386/254/57 144/247/57 176/248/57 177/255/57 1147 +f 132/256/58 131/249/58 163/250/58 164/257/58 1148 +f 159/258/59 158/251/59 190/252/59 191/259/59 1149 +f 146/260/60 387/261/60 145/253/60 177/255/60 178/262/60 1150 +f 133/263/61 132/256/61 164/257/61 165/264/61 1151 +f 160/265/62 159/258/62 191/259/62 192/266/62 1152 +f 147/267/63 146/260/63 178/262/63 179/268/63 1153 +f 134/202/64 133/263/64 165/264/64 166/203/64 1154 +f 129/242/65 160/265/65 192/266/65 161/243/65 1155 +f 148/206/66 147/267/66 179/268/66 180/207/66 1156 +f 199/269/40 231/270/40 230/271/40 198/272/40 1157 +f 213/273/61 245/274/61 244/275/61 212/276/61 1158 +f 200/277/42 232/278/42 231/279/42 199/280/42 1159 +f 214/281/64 246/282/64 245/274/64 213/273/64 1160 +f 201/283/44 233/284/44 232/278/44 200/277/44 1161 +f 215/285/35 247/286/35 246/282/35 214/281/35 1162 +f 202/287/46 234/288/46 233/284/46 201/283/46 1163 +f 216/289/37 248/290/37 247/286/37 215/285/37 1164 +f 203/291/48 235/292/48 234/288/48 202/287/48 1165 +f 217/293/39 249/294/39 248/290/39 216/289/39 1166 +f 204/295/50 236/296/50 235/292/50 203/291/50 1167 +f 218/297/41 250/298/41 249/294/41 217/293/41 1168 +f 205/299/53 237/300/53 236/296/53 204/295/53 1169 +f 219/301/43 251/302/43 250/298/43 218/297/43 1170 +f 206/303/56 238/304/56 237/300/56 205/299/56 1171 +f 220/305/45 252/306/45 251/302/45 219/301/45 1172 +f 207/307/59 239/308/59 238/304/59 206/303/59 1173 +f 194/309/60 226/310/60 225/311/60 193/312/60 1174 +f 221/313/47 253/314/47 252/306/47 220/305/47 1175 +f 208/315/62 240/316/62 239/308/62 207/307/62 1176 +f 195/317/63 227/318/63 226/310/63 194/309/63 1177 +f 222/319/49 254/320/49 253/314/49 221/313/49 1178 +f 209/321/65 241/322/65 240/316/65 208/315/65 1179 +f 196/323/66 228/324/66 227/318/66 195/317/66 1180 +f 223/325/51 255/326/51 254/320/51 222/319/51 1181 +f 210/327/52 242/328/52 241/322/52 209/321/52 1182 +f 197/329/36 229/330/36 228/324/36 196/323/36 1183 +f 224/331/54 256/332/54 255/326/54 223/325/54 1184 +f 211/333/55 243/334/55 242/328/55 210/327/55 1185 +f 198/272/38 230/271/38 229/330/38 197/329/38 1186 +f 193/312/57 225/311/57 256/332/57 224/331/57 1187 +f 212/276/58 244/275/58 243/334/58 211/333/58 1188 +f 129/242/67 130/241/67 194/309/67 193/312/67 1189 +f 130/241/67 131/249/67 195/317/67 194/309/67 1190 +f 131/249/67 132/256/67 196/323/67 195/317/67 1191 +f 132/256/67 133/263/67 197/329/67 196/323/67 1192 +f 133/263/67 134/202/67 198/272/67 197/329/67 1193 +f 134/202/67 135/201/67 199/269/67 198/272/67 1194 +f 135/210/67 136/209/67 200/277/67 199/280/67 1195 +f 136/209/67 137/215/67 201/283/67 200/277/67 1196 +f 137/215/67 138/219/67 202/287/67 201/283/67 1197 +f 138/219/67 139/223/67 203/291/67 202/287/67 1198 +f 139/223/67 140/227/67 204/295/67 203/291/67 1199 +f 140/227/67 141/231/67 205/299/67 204/295/67 1200 +f 141/231/67 142/235/67 206/303/67 205/299/67 1201 +f 142/235/67 143/239/67 207/307/67 206/303/67 1202 +f 143/239/67 144/247/67 208/315/67 207/307/67 1203 +f 384/335/68 367/336/68 336/337/68 383/338/68 1204 +f 146/260/67 147/267/67 211/333/67 210/327/67 1205 +f 147/267/67 148/206/67 212/276/67 211/333/67 1206 +f 148/206/67 149/205/67 213/273/67 212/276/67 1207 +f 149/205/67 150/213/67 214/281/67 213/273/67 1208 +f 150/213/67 151/217/67 215/285/67 214/281/67 1209 +f 151/217/67 152/221/67 216/289/67 215/285/67 1210 +f 152/221/67 153/225/67 217/293/67 216/289/67 1211 +f 153/225/67 154/229/67 218/297/67 217/293/67 1212 +f 154/229/67 155/233/67 219/301/67 218/297/67 1213 +f 155/233/67 156/237/67 220/305/67 219/301/67 1214 +f 156/237/67 157/245/67 221/313/67 220/305/67 1215 +f 157/245/67 158/251/67 222/319/67 221/313/67 1216 +f 158/251/67 159/258/67 223/325/67 222/319/67 1217 +f 159/258/67 160/265/67 224/331/67 223/325/67 1218 +f 160/265/67 129/242/67 193/312/67 224/331/67 1219 +f 162/244/69 161/243/69 225/311/69 226/310/69 1220 +f 163/250/69 162/244/69 226/310/69 227/318/69 1221 +f 164/257/69 163/250/69 227/318/69 228/324/69 1222 +f 165/264/69 164/257/69 228/324/69 229/330/69 1223 +f 166/203/69 165/264/69 229/330/69 230/271/69 1224 +f 167/204/69 166/203/69 230/271/69 231/270/69 1225 +f 168/212/69 167/211/69 231/279/69 232/278/69 1226 +f 169/216/69 168/212/69 232/278/69 233/284/69 1227 +f 170/220/69 169/216/69 233/284/69 234/288/69 1228 +f 171/224/69 170/220/69 234/288/69 235/292/69 1229 +f 172/228/69 171/224/69 235/292/69 236/296/69 1230 +f 173/232/69 172/228/69 236/296/69 237/300/69 1231 +f 174/236/69 173/232/69 237/300/69 238/304/69 1232 +f 175/240/69 174/236/69 238/304/69 239/308/69 1233 +f 176/248/69 175/240/69 239/308/69 240/316/69 1234 +f 177/255/69 176/248/69 240/316/69 241/322/69 1235 +f 178/262/69 177/255/69 241/322/69 242/328/69 1236 +f 179/268/69 178/262/69 242/328/69 243/334/69 1237 +f 180/207/69 179/268/69 243/334/69 244/275/69 1238 +f 181/208/69 180/207/69 244/275/69 245/274/69 1239 +f 182/214/69 181/208/69 245/274/69 246/282/69 1240 +f 183/218/69 182/214/69 246/282/69 247/286/69 1241 +f 184/222/69 183/218/69 247/286/69 248/290/69 1242 +f 185/226/69 184/222/69 248/290/69 249/294/69 1243 +f 186/230/69 185/226/69 249/294/69 250/298/69 1244 +f 187/234/69 186/230/69 250/298/69 251/302/69 1245 +f 188/238/69 187/234/69 251/302/69 252/306/69 1246 +f 189/246/69 188/238/69 252/306/69 253/314/69 1247 +f 190/252/69 189/246/69 253/314/69 254/320/69 1248 +f 191/259/69 190/252/69 254/320/69 255/326/69 1249 +f 192/266/69 191/259/69 255/326/69 256/332/69 1250 +f 161/243/69 192/266/69 256/332/69 225/311/69 1251 +f 263/339/70 262/340/70 294/341/70 295/342/70 1252 +f 277/343/71 276/344/71 308/345/71 309/346/71 1253 +f 264/347/72 263/348/72 295/349/72 296/350/72 1254 +f 278/351/73 277/343/73 309/346/73 310/352/73 1255 +f 265/353/74 264/347/74 296/350/74 297/354/74 1256 +f 279/355/75 278/351/75 310/352/75 311/356/75 1257 +f 266/357/76 265/353/76 297/354/76 298/358/76 1258 +f 280/359/77 279/355/77 311/356/77 312/360/77 1259 +f 267/361/78 266/357/78 298/358/78 299/362/78 1260 +f 281/363/79 280/359/79 312/360/79 313/364/79 1261 +f 268/365/80 267/361/80 299/362/80 300/366/80 1262 +f 282/367/81 281/363/81 313/364/81 314/368/81 1263 +f 269/369/82 268/365/82 300/366/82 301/370/82 1264 +f 283/371/83 282/367/83 314/368/83 315/372/83 1265 +f 270/373/84 269/369/84 301/370/84 302/374/84 1266 +f 284/375/85 283/371/85 315/372/85 316/376/85 1267 +f 271/377/86 270/373/86 302/374/86 303/378/86 1268 +f 258/379/87 257/380/87 289/381/87 290/382/87 1269 +f 285/383/88 284/375/88 316/376/88 317/384/88 1270 +f 272/385/89 271/377/89 303/378/89 304/386/89 1271 +f 259/387/90 258/379/90 290/382/90 291/388/90 1272 +f 286/389/91 285/383/91 317/384/91 318/390/91 1273 +f 273/391/92 272/385/92 304/386/92 385/392/92 305/393/92 1274 +f 260/394/93 259/387/93 291/388/93 292/395/93 1275 +f 287/396/94 286/389/94 318/390/94 319/397/94 1276 +f 274/398/95 273/391/95 305/393/95 306/399/95 1277 +f 261/400/96 260/394/96 292/395/96 293/401/96 1278 +f 288/402/97 287/396/97 319/397/97 320/403/97 1279 +f 275/404/98 274/398/98 306/399/98 307/405/98 1280 +f 262/340/99 261/400/99 293/401/99 294/341/99 1281 +f 257/380/68 288/402/68 320/403/68 289/381/68 1282 +f 276/344/100 275/404/100 307/405/100 308/345/100 1283 +f 327/406/75 358/407/75 357/408/75 326/409/75 1284 +f 340/410/96 371/411/96 370/412/96 339/413/96 1285 +f 328/414/77 359/415/77 358/416/77 327/417/77 1286 +f 341/418/99 372/419/99 371/411/99 340/410/99 1287 +f 329/420/79 360/421/79 359/415/79 328/414/79 1288 +f 342/422/70 373/423/70 372/419/70 341/418/70 1289 +f 330/424/81 361/425/81 360/421/81 329/420/81 1290 +f 343/426/72 374/427/72 373/423/72 342/422/72 1291 +f 331/428/83 362/429/83 361/425/83 330/424/83 1292 +f 344/430/74 375/431/74 374/427/74 343/426/74 1293 +f 332/432/85 363/433/85 362/429/85 331/428/85 1294 +f 345/434/76 376/435/76 375/431/76 344/430/76 1295 +f 333/436/88 364/437/88 363/433/88 332/432/88 1296 +f 346/438/78 377/439/78 376/435/78 345/434/78 1297 +f 334/440/101 365/441/101 364/437/101 333/436/101 1298 +f 347/442/80 378/443/80 377/439/80 346/438/80 1299 +f 335/444/94 366/445/94 365/441/94 334/440/94 1300 +f 322/446/95 353/447/95 352/448/95 321/449/95 1301 +f 348/450/82 379/451/82 378/443/82 347/442/82 1302 +f 336/337/97 367/336/97 366/445/97 335/444/97 1303 +f 323/452/98 354/453/98 353/447/98 322/446/98 1304 +f 349/454/84 380/455/84 379/451/84 348/450/84 1305 +f 324/456/100 355/457/100 354/453/100 323/452/100 1306 +f 350/458/86 381/459/86 380/455/86 349/454/86 1307 +f 325/460/71 356/461/71 355/457/71 324/456/71 1308 +f 351/462/89 382/463/89 381/459/89 350/458/89 1309 +f 338/464/102 369/465/102 368/466/102 337/467/102 1310 +f 326/409/73 357/408/73 356/461/73 325/460/73 1311 +f 321/449/92 352/448/92 382/463/92 351/462/92 1312 +f 339/413/93 370/412/93 369/465/93 338/464/93 1313 +f 257/380/103 258/379/103 322/446/103 321/449/103 1314 +f 258/379/103 259/387/103 323/452/103 322/446/103 1315 +f 259/387/103 260/394/103 324/456/103 323/452/103 1316 +f 260/394/103 261/400/103 325/460/103 324/456/103 1317 +f 261/400/103 262/340/103 326/409/103 325/460/103 1318 +f 262/340/103 263/339/103 327/406/103 326/409/103 1319 +f 263/348/103 264/347/103 328/414/103 327/417/103 1320 +f 264/347/103 265/353/103 329/420/103 328/414/103 1321 +f 265/353/103 266/357/103 330/424/103 329/420/103 1322 +f 266/357/103 267/361/103 331/428/103 330/424/103 1323 +f 267/361/103 268/365/103 332/432/103 331/428/103 1324 +f 268/365/103 269/369/103 333/436/103 332/432/103 1325 +f 269/369/103 270/373/103 334/440/103 333/436/103 1326 +f 270/373/103 271/377/103 335/444/103 334/440/103 1327 +f 271/377/103 272/385/103 336/337/103 335/444/103 1328 +f 336/337/103 272/385/103 387/261/103 383/338/103 1329 +f 274/398/103 275/404/103 338/464/103 337/467/103 1330 +f 275/404/103 276/344/103 339/413/103 338/464/103 1331 +f 276/344/103 277/343/103 340/410/103 339/413/103 1332 +f 277/343/103 278/351/103 341/418/103 340/410/103 1333 +f 278/351/103 279/355/103 342/422/103 341/418/103 1334 +f 279/355/103 280/359/103 343/426/103 342/422/103 1335 +f 280/359/103 281/363/103 344/430/103 343/426/103 1336 +f 281/363/103 282/367/103 345/434/103 344/430/103 1337 +f 282/367/103 283/371/103 346/438/103 345/434/103 1338 +f 283/371/103 284/375/103 347/442/103 346/438/103 1339 +f 284/375/103 285/383/103 348/450/103 347/442/103 1340 +f 285/383/103 286/389/103 349/454/103 348/450/103 1341 +f 286/389/103 287/396/103 350/458/103 349/454/103 1342 +f 287/396/103 288/402/103 351/462/103 350/458/103 1343 +f 288/402/103 257/380/103 321/449/103 351/462/103 1344 +f 290/382/104 289/381/104 352/448/104 353/447/104 1345 +f 291/388/104 290/382/104 353/447/104 354/453/104 1346 +f 292/395/104 291/388/104 354/453/104 355/457/104 1347 +f 293/401/104 292/395/104 355/457/104 356/461/104 1348 +f 294/341/104 293/401/104 356/461/104 357/408/104 1349 +f 295/342/104 294/341/104 357/408/104 358/407/104 1350 +f 296/350/104 295/349/104 358/416/104 359/415/104 1351 +f 297/354/104 296/350/104 359/415/104 360/421/104 1352 +f 298/358/104 297/354/104 360/421/104 361/425/104 1353 +f 299/362/104 298/358/104 361/425/104 362/429/104 1354 +f 300/366/104 299/362/104 362/429/104 363/433/104 1355 +f 301/370/104 300/366/104 363/433/104 364/437/104 1356 +f 302/374/104 301/370/104 364/437/104 365/441/104 1357 +f 303/378/104 302/374/104 365/441/104 366/445/104 1358 +f 304/386/104 303/378/104 366/445/104 367/336/104 1359 +f 307/405/104 306/399/104 368/466/104 369/465/104 1360 +f 308/345/104 307/405/104 369/465/104 370/412/104 1361 +f 309/346/104 308/345/104 370/412/104 371/411/104 1362 +f 310/352/104 309/346/104 371/411/104 372/419/104 1363 +f 311/356/104 310/352/104 372/419/104 373/423/104 1364 +f 312/360/104 311/356/104 373/423/104 374/427/104 1365 +f 313/364/104 312/360/104 374/427/104 375/431/104 1366 +f 314/368/104 313/364/104 375/431/104 376/435/104 1367 +f 315/372/104 314/368/104 376/435/104 377/439/104 1368 +f 316/376/104 315/372/104 377/439/104 378/443/104 1369 +f 317/384/104 316/376/104 378/443/104 379/451/104 1370 +f 318/390/104 317/384/104 379/451/104 380/455/104 1371 +f 319/397/104 318/390/104 380/455/104 381/459/104 1372 +f 320/403/104 319/397/104 381/459/104 382/463/104 1373 +f 289/381/104 320/403/104 382/463/104 352/448/104 1374 +f 103/151/34 39/150/34 38/147/34 102/148/34 1375 +f 108/161/34 44/160/34 43/157/34 107/158/34 1376 +f 124/193/34 60/192/34 59/189/34 123/190/34 1377 +f 119/183/34 55/182/34 54/179/34 118/180/34 1378 +f 14/468/22 13/469/22 45/470/22 46/471/22 1379 +f 44/472/11 43/473/11 11/474/11 12/475/11 1380 +f 9/89/12 41/153/12 42/155/12 10/476/12 1381 +f 43/473/9 42/477/9 10/476/9 11/474/9 1382 +f 29/478/22 30/479/22 62/480/22 61/481/22 1383 +f 62/480/25 30/479/25 31/482/25 63/483/25 1384 +f 6/484/2 7/485/2 39/486/2 38/487/2 1385 +f 4/488/27 5/489/27 37/490/27 36/491/27 1386 +f 15/492/25 14/468/25 46/471/25 47/493/25 1387 +f 2/494/21 3/495/21 35/496/21 34/497/21 1388 +f 22/498/30 21/499/30 53/500/30 54/501/30 1389 +f 17/502/31 16/503/31 48/504/31 49/505/31 1390 +f 32/506/31 1/507/31 33/508/31 64/509/31 1391 +f 29/478/13 28/510/13 60/511/13 61/481/13 1392 +f 12/475/13 13/469/13 45/470/13 44/472/13 1393 +f 63/483/28 31/482/28 32/506/28 64/509/28 1394 +f 19/512/21 18/513/21 50/514/21 51/515/21 1395 +f 20/516/24 19/512/24 51/515/24 52/517/24 1396 +f 28/510/11 27/518/11 59/519/11 60/511/11 1397 +f 21/499/27 20/516/27 52/517/27 53/500/27 1398 +f 24/520/4 23/521/4 55/522/4 56/523/4 1399 +f 35/496/24 3/495/24 4/488/24 36/491/24 1400 +f 49/505/18 50/514/18 18/513/18 17/502/18 1401 +f 8/524/4 40/525/4 39/486/4 7/485/4 1402 +f 48/504/28 16/503/28 15/492/28 47/493/28 1403 +f 33/508/18 1/507/18 2/494/18 34/497/18 1404 +f 23/521/2 22/498/2 54/501/2 55/522/2 1405 +f 26/123/9 58/187/9 59/189/9 27/518/9 1406 +f 25/121/7 57/185/7 58/187/7 26/123/7 1407 +f 24/520/5 56/523/5 57/185/5 25/121/5 1408 +f 8/524/10 40/525/10 41/153/10 9/89/10 1409 +f 208/315/67 144/247/67 385/526/67 384/527/67 1410 +f 384/335/104 385/392/104 304/386/104 367/336/104 1411 +f 208/315/67 384/527/67 209/321/67 1412 +f 384/527/67 383/338/67 209/321/67 1413 +f 209/321/67 383/338/67 210/327/67 1414 +f 210/327/67 383/338/67 387/261/67 146/260/67 1415 +f 368/466/105 384/335/105 383/338/105 337/467/105 1416 +f 306/528/104 385/529/104 384/530/104 368/531/104 1417 +f 273/391/103 274/398/103 337/467/103 1418 +f 337/467/103 383/338/103 273/391/103 1419 +f 387/261/103 273/391/103 383/338/103 1420 +o bronze 1421 +v 0.173510 -0.188755 -0.202857 1422 +v 0.076886 -0.221335 -0.228002 1423 +v -0.017971 -0.231176 -0.230477 1424 +v -0.111298 -0.221335 -0.213328 1425 +v 0.203459 -0.094377 -0.237871 1426 +v 0.088018 -0.110667 -0.294772 1427 +v -0.023774 -0.115588 -0.304892 1428 +v -0.132646 -0.110667 -0.277566 1429 +v 0.212506 0.000000 -0.248448 1430 +v 0.091465 -0.000000 -0.313878 1431 +v -0.025415 -0.000000 -0.325944 1432 +v -0.139012 0.000000 -0.295907 1433 +v 0.203459 0.094377 -0.237871 1434 +v 0.088018 0.110667 -0.294772 1435 +v -0.023774 0.115588 -0.304892 1436 +v -0.132646 0.110667 -0.277566 1437 +v -0.202857 -0.188755 -0.173510 1438 +v -0.228002 -0.221335 -0.076886 1439 +v -0.230477 -0.231176 0.017971 1440 +v -0.213328 -0.221335 0.111298 1441 +v -0.237871 -0.094377 -0.203459 1442 +v -0.294772 -0.110667 -0.088018 1443 +v -0.304892 -0.115588 0.023774 1444 +v -0.277566 -0.110667 0.132646 1445 +v -0.248448 -0.000000 -0.212506 1446 +v -0.313878 0.000000 -0.091465 1447 +v -0.325944 0.000000 0.025415 1448 +v -0.295907 0.000000 0.139012 1449 +v -0.237871 0.094377 -0.203459 1450 +v -0.294772 0.110667 -0.088018 1451 +v -0.304892 0.115588 0.023774 1452 +v -0.277566 0.110667 0.132646 1453 +v -0.173510 -0.188755 0.202857 1454 +v -0.076886 -0.221335 0.228002 1455 +v 0.017971 -0.231176 0.230477 1456 +v 0.111298 -0.221335 0.213328 1457 +v -0.203459 -0.094377 0.237871 1458 +v -0.088018 -0.110667 0.294772 1459 +v 0.023774 -0.115588 0.304892 1460 +v 0.132646 -0.110667 0.277566 1461 +v -0.212506 -0.000000 0.248448 1462 +v -0.091465 0.000000 0.313878 1463 +v 0.025415 0.000000 0.325944 1464 +v 0.139012 -0.000000 0.295907 1465 +v -0.203459 0.094377 0.237871 1466 +v -0.088018 0.110667 0.294772 1467 +v 0.023774 0.115588 0.304892 1468 +v 0.132646 0.110667 0.277566 1469 +v 0.202857 -0.188755 0.173510 1470 +v 0.228002 -0.221335 0.076886 1471 +v 0.230477 -0.231176 -0.017971 1472 +v 0.213328 -0.221335 -0.111298 1473 +v 0.237871 -0.094377 0.203459 1474 +v 0.294772 -0.110667 0.088018 1475 +v 0.304892 -0.115588 -0.023774 1476 +v 0.277566 -0.110667 -0.132646 1477 +v 0.248448 0.000000 0.212506 1478 +v 0.313878 -0.000000 0.091465 1479 +v 0.325944 0.000000 -0.025415 1480 +v 0.295907 -0.000000 -0.139012 1481 +v 0.237871 0.094377 0.203459 1482 +v 0.294772 0.110667 0.088018 1483 +v 0.304892 0.115588 -0.023774 1484 +v 0.277566 0.110667 -0.132646 1485 +v 0.118936 -0.287038 0.101729 1486 +v 0.008986 -0.305818 0.115238 1487 +v -0.101729 -0.287038 0.118936 1488 +v 0.115238 -0.305818 -0.008986 1489 +v 0.000000 -0.326933 0.000000 1490 +v -0.115238 -0.305818 0.008986 1491 +v 0.101729 -0.287038 -0.118936 1492 +v -0.008986 -0.305818 -0.115238 1493 +v -0.118936 -0.287038 -0.101729 1494 +v 0.173510 0.188755 -0.202857 1495 +v 0.076886 0.221335 -0.228002 1496 +v -0.017971 0.231176 -0.230477 1497 +v -0.111298 0.221335 -0.213328 1498 +v -0.202857 0.188755 -0.173510 1499 +v 0.213328 0.221335 -0.111298 1500 +v 0.101729 0.287038 -0.118936 1501 +v -0.008986 0.305818 -0.115238 1502 +v -0.118936 0.287038 -0.101729 1503 +v -0.228002 0.221335 -0.076886 1504 +v 0.230477 0.231176 -0.017971 1505 +v 0.115238 0.305818 -0.008986 1506 +v 0.000000 0.326933 -0.000000 1507 +v -0.115238 0.305818 0.008986 1508 +v -0.230477 0.231176 0.017971 1509 +v 0.228002 0.221335 0.076886 1510 +v 0.118936 0.287038 0.101729 1511 +v 0.008986 0.305818 0.115238 1512 +v -0.101729 0.287038 0.118936 1513 +v -0.213328 0.221335 0.111298 1514 +v 0.202857 0.188755 0.173510 1515 +v 0.111298 0.221335 0.213328 1516 +v 0.017971 0.231176 0.230477 1517 +v -0.076886 0.221335 0.228002 1518 +v -0.173510 0.188755 0.202857 1519 +vt 0.507969 0.347291 1520 +vt 0.547223 0.341050 1521 +vt 0.538517 0.415417 1522 +vt 0.498706 0.406436 1523 +vt 0.582474 0.349307 1524 +vt 0.571984 0.427658 1525 +vt 0.614052 0.368999 1526 +vt 0.604560 0.442802 1527 +vt 0.643757 0.399897 1528 +vt 0.641634 0.461050 1529 +vt 0.531214 0.479431 1530 +vt 0.492041 0.460529 1531 +vt 0.564772 0.494797 1532 +vt 0.598895 0.507439 1533 +vt 0.639793 0.516562 1534 +vt 0.522506 0.542810 1535 +vt 0.485626 0.514681 1536 +vt 0.556919 0.561801 1537 +vt 0.593788 0.572359 1538 +vt 0.637674 0.572055 1539 +vt 0.506645 0.613877 1540 +vt 0.477462 0.574086 1541 +vt 0.542702 0.639352 1542 +vt 0.587098 0.647606 1543 +vt 0.634265 0.633125 1544 +vt 0.675283 0.376871 1545 +vt 0.679469 0.452343 1546 +vt 0.078468 0.376871 1547 +vt 0.110099 0.364441 1548 +vt 0.115497 0.444372 1549 +vt 0.082654 0.452343 1550 +vt 0.143314 0.362142 1551 +vt 0.148595 0.437406 1552 +vt 0.179054 0.371777 1553 +vt 0.187219 0.431181 1554 +vt 0.681202 0.517866 1555 +vt 0.119486 0.512562 1556 +vt 0.084387 0.517866 1557 +vt 0.153988 0.502136 1558 +vt 0.193633 0.485333 1559 +vt 0.681848 0.583469 1560 +vt 0.124162 0.580673 1561 +vt 0.085033 0.583469 1562 +vt 0.161321 0.566277 1563 +vt 0.200298 0.539427 1564 +vt 0.680034 0.659313 1565 +vt 0.133808 0.660111 1566 +vt 0.083219 0.659313 1567 +vt 0.176902 0.638347 1568 +vt 0.209562 0.598572 1569 +vt 0.208238 0.331986 1570 +vt 0.224099 0.403052 1571 +vt 0.244294 0.306511 1572 +vt 0.258511 0.384062 1573 +vt 0.288691 0.298257 1574 +vt 0.295381 0.373504 1575 +vt 0.335857 0.312738 1576 +vt 0.339266 0.373808 1577 +vt 0.232807 0.466432 1578 +vt 0.266365 0.451066 1579 +vt 0.300488 0.438423 1580 +vt 0.341385 0.429301 1581 +vt 0.240110 0.530446 1582 +vt 0.273576 0.518205 1583 +vt 0.306153 0.503061 1584 +vt 0.343226 0.484813 1585 +vt 0.248815 0.604813 1586 +vt 0.284067 0.596556 1587 +vt 0.315645 0.576864 1588 +vt 0.345350 0.545966 1589 +vt 0.381627 0.286550 1590 +vt 0.383441 0.362394 1591 +vt 0.432215 0.285752 1592 +vt 0.422569 0.365190 1593 +vt 0.475310 0.307516 1594 +vt 0.459729 0.379586 1595 +vt 0.382794 0.427997 1596 +vt 0.417893 0.433300 1597 +vt 0.452395 0.443727 1598 +vt 0.381061 0.493520 1599 +vt 0.413905 0.501491 1600 +vt 0.447002 0.508457 1601 +vt 0.376876 0.568992 1602 +vt 0.408506 0.581422 1603 +vt 0.441721 0.583721 1604 +vt 0.320768 0.227079 1605 +vt 0.202722 0.235209 1606 +vt 0.159516 0.289702 1607 +vt 0.476877 0.210594 1608 +vt 0.917583 0.227079 1609 +vt 0.799537 0.235209 1610 +vt 0.667037 0.219944 1611 +vt 0.756331 0.289702 1612 +vt 0.697186 0.285012 1613 +vt 0.100371 0.285012 1614 +vt 0.534141 0.266843 1615 +vt 0.603138 0.273163 1616 +vt 0.648165 0.313533 1617 +vt 0.706914 0.364441 1618 +vt 0.457923 0.656161 1619 +vt 0.501129 0.710653 1620 +vt 0.619175 0.718784 1621 +vt 0.398778 0.660851 1622 +vt 0.368629 0.725919 1623 +vt 0.775284 0.735269 1624 +vt 0.730623 0.660111 1625 +vt 0.349758 0.632330 1626 +vt 0.304730 0.672700 1627 +vt 0.178469 0.735269 1628 +vt 0.235733 0.679020 1629 +vn 0.4106 -0.4701 -0.7813 1630 +vn 0.0892 -0.5288 -0.8440 1631 +vn -0.2190 -0.5288 -0.8200 1632 +vn -0.5267 -0.4701 -0.7082 1633 +vn 0.4623 -0.1546 -0.8731 1634 +vn 0.0988 -0.1747 -0.9797 1635 +vn -0.2495 -0.1747 -0.9525 1636 +vn -0.5921 -0.1546 -0.7909 1637 +vn 0.4623 0.1546 -0.8731 1638 +vn 0.0988 0.1747 -0.9797 1639 +vn -0.2495 0.1747 -0.9525 1640 +vn -0.5921 0.1546 -0.7909 1641 +vn 0.4106 0.4701 -0.7813 1642 +vn 0.0892 0.5288 -0.8440 1643 +vn -0.2190 0.5288 -0.8200 1644 +vn -0.5267 0.4701 -0.7082 1645 +vn -0.7813 -0.4701 -0.4106 1646 +vn -0.8440 -0.5288 -0.0892 1647 +vn -0.8200 -0.5288 0.2190 1648 +vn -0.7082 -0.4701 0.5267 1649 +vn -0.8731 -0.1546 -0.4623 1650 +vn -0.9797 -0.1747 -0.0988 1651 +vn -0.9525 -0.1747 0.2495 1652 +vn -0.7909 -0.1546 0.5921 1653 +vn -0.8731 0.1546 -0.4623 1654 +vn -0.9797 0.1747 -0.0988 1655 +vn -0.9525 0.1747 0.2495 1656 +vn -0.7909 0.1546 0.5921 1657 +vn -0.7813 0.4701 -0.4106 1658 +vn -0.8440 0.5288 -0.0892 1659 +vn -0.8200 0.5288 0.2190 1660 +vn -0.7082 0.4701 0.5267 1661 +vn -0.4106 -0.4701 0.7813 1662 +vn -0.0892 -0.5288 0.8440 1663 +vn 0.2190 -0.5288 0.8200 1664 +vn 0.5267 -0.4701 0.7082 1665 +vn -0.4623 -0.1546 0.8731 1666 +vn -0.0988 -0.1747 0.9797 1667 +vn 0.2495 -0.1747 0.9525 1668 +vn 0.5921 -0.1546 0.7909 1669 +vn -0.4623 0.1546 0.8731 1670 +vn -0.0988 0.1747 0.9797 1671 +vn 0.2495 0.1747 0.9525 1672 +vn 0.5921 0.1546 0.7909 1673 +vn -0.4106 0.4701 0.7813 1674 +vn -0.0892 0.5288 0.8440 1675 +vn 0.2190 0.5288 0.8200 1676 +vn 0.5267 0.4701 0.7082 1677 +vn 0.7813 -0.4701 0.4106 1678 +vn 0.8440 -0.5288 0.0892 1679 +vn 0.8200 -0.5288 -0.2190 1680 +vn 0.7082 -0.4701 -0.5267 1681 +vn 0.8731 -0.1546 0.4623 1682 +vn 0.9797 -0.1747 0.0988 1683 +vn 0.9525 -0.1747 -0.2495 1684 +vn 0.7909 -0.1546 -0.5921 1685 +vn 0.8731 0.1546 0.4623 1686 +vn 0.9797 0.1747 0.0988 1687 +vn 0.9525 0.1747 -0.2495 1688 +vn 0.7909 0.1546 -0.5921 1689 +vn 0.7813 0.4701 0.4106 1690 +vn 0.8440 0.5288 0.0892 1691 +vn 0.8200 0.5288 -0.2190 1692 +vn 0.7082 0.4701 -0.5267 1693 +vn 0.5052 -0.7470 0.4321 1694 +vn 0.1952 -0.8346 0.5152 1695 +vn -0.1130 -0.8346 0.5392 1696 +vn -0.4321 -0.7470 0.5052 1697 +vn 0.5392 -0.8346 0.1130 1698 +vn 0.1877 -0.9690 0.1606 1699 +vn -0.1606 -0.9690 0.1877 1700 +vn -0.5152 -0.8346 0.1952 1701 +vn 0.5152 -0.8346 -0.1952 1702 +vn 0.1606 -0.9690 -0.1877 1703 +vn -0.1877 -0.9690 -0.1606 1704 +vn -0.5392 -0.8346 -0.1130 1705 +vn 0.4321 -0.7470 -0.5052 1706 +vn 0.1130 -0.8346 -0.5392 1707 +vn -0.1952 -0.8346 -0.5152 1708 +vn -0.5052 -0.7470 -0.4321 1709 +vn 0.4321 0.7470 -0.5052 1710 +vn 0.1130 0.8346 -0.5392 1711 +vn -0.1952 0.8346 -0.5152 1712 +vn -0.5052 0.7470 -0.4321 1713 +vn 0.5152 0.8346 -0.1952 1714 +vn 0.1606 0.9690 -0.1877 1715 +vn -0.1877 0.9690 -0.1606 1716 +vn -0.5392 0.8346 -0.1130 1717 +vn 0.5392 0.8346 0.1130 1718 +vn 0.1877 0.9690 0.1606 1719 +vn -0.1606 0.9690 0.1877 1720 +vn -0.5152 0.8346 0.1952 1721 +vn 0.5052 0.7470 0.4321 1722 +vn 0.1952 0.8346 0.5152 1723 +vn -0.1130 0.8346 0.5392 1724 +vn -0.4321 0.7470 0.5052 1725 +g bronze_bronze_bronze 1726 +usemtl bronze 1727 +s off 1728 +f 388/532/106 389/533/106 393/534/106 392/535/106 1729 +f 389/533/107 390/536/107 394/537/107 393/534/107 1730 +f 390/536/108 391/538/108 395/539/108 394/537/108 1731 +f 391/538/109 404/540/109 408/541/109 395/539/109 1732 +f 392/535/110 393/534/110 397/542/110 396/543/110 1733 +f 393/534/111 394/537/111 398/544/111 397/542/111 1734 +f 394/537/112 395/539/112 399/545/112 398/544/112 1735 +f 395/539/113 408/541/113 412/546/113 399/545/113 1736 +f 396/543/114 397/542/114 401/547/114 400/548/114 1737 +f 397/542/115 398/544/115 402/549/115 401/547/115 1738 +f 398/544/116 399/545/116 403/550/116 402/549/116 1739 +f 399/545/117 412/546/117 416/551/117 403/550/117 1740 +f 400/548/118 401/547/118 462/552/118 461/553/118 1741 +f 401/547/119 402/549/119 463/554/119 462/552/119 1742 +f 402/549/120 403/550/120 464/555/120 463/554/120 1743 +f 403/550/121 416/551/121 465/556/121 464/555/121 1744 +f 404/540/122 405/557/122 409/558/122 408/541/122 1745 +f 405/559/123 406/560/123 410/561/123 409/562/123 1746 +f 406/560/124 407/563/124 411/564/124 410/561/124 1747 +f 407/563/125 420/565/125 424/566/125 411/564/125 1748 +f 408/541/126 409/558/126 413/567/126 412/546/126 1749 +f 409/562/127 410/561/127 414/568/127 413/569/127 1750 +f 410/561/128 411/564/128 415/570/128 414/568/128 1751 +f 411/564/129 424/566/129 428/571/129 415/570/129 1752 +f 412/546/130 413/567/130 417/572/130 416/551/130 1753 +f 413/569/131 414/568/131 418/573/131 417/574/131 1754 +f 414/568/132 415/570/132 419/575/132 418/573/132 1755 +f 415/570/133 428/571/133 432/576/133 419/575/133 1756 +f 416/551/134 417/572/134 470/577/134 465/556/134 1757 +f 417/574/135 418/573/135 475/578/135 470/579/135 1758 +f 418/573/136 419/575/136 480/580/136 475/578/136 1759 +f 419/575/137 432/576/137 485/581/137 480/580/137 1760 +f 420/565/138 421/582/138 425/583/138 424/566/138 1761 +f 421/582/139 422/584/139 426/585/139 425/583/139 1762 +f 422/584/140 423/586/140 427/587/140 426/585/140 1763 +f 423/586/141 436/588/141 440/589/141 427/587/141 1764 +f 424/566/142 425/583/142 429/590/142 428/571/142 1765 +f 425/583/143 426/585/143 430/591/143 429/590/143 1766 +f 426/585/144 427/587/144 431/592/144 430/591/144 1767 +f 427/587/145 440/589/145 444/593/145 431/592/145 1768 +f 428/571/146 429/590/146 433/594/146 432/576/146 1769 +f 429/590/147 430/591/147 434/595/147 433/594/147 1770 +f 430/591/148 431/592/148 435/596/148 434/595/148 1771 +f 431/592/149 444/593/149 448/597/149 435/596/149 1772 +f 432/576/150 433/594/150 484/598/150 485/581/150 1773 +f 433/594/151 434/595/151 483/599/151 484/598/151 1774 +f 434/595/152 435/596/152 482/600/152 483/599/152 1775 +f 435/596/153 448/597/153 481/601/153 482/600/153 1776 +f 436/588/154 437/602/154 441/603/154 440/589/154 1777 +f 437/602/155 438/604/155 442/605/155 441/603/155 1778 +f 438/604/156 439/606/156 443/607/156 442/605/156 1779 +f 439/606/157 388/532/157 392/535/157 443/607/157 1780 +f 440/589/158 441/603/158 445/608/158 444/593/158 1781 +f 441/603/159 442/605/159 446/609/159 445/608/159 1782 +f 442/605/160 443/607/160 447/610/160 446/609/160 1783 +f 443/607/161 392/535/161 396/543/161 447/610/161 1784 +f 444/593/162 445/608/162 449/611/162 448/597/162 1785 +f 445/608/163 446/609/163 450/612/163 449/611/163 1786 +f 446/609/164 447/610/164 451/613/164 450/612/164 1787 +f 447/610/165 396/543/165 400/548/165 451/613/165 1788 +f 448/597/166 449/611/166 476/614/166 481/601/166 1789 +f 449/611/167 450/612/167 471/615/167 476/614/167 1790 +f 450/612/168 451/613/168 466/616/168 471/615/168 1791 +f 451/613/169 400/548/169 461/553/169 466/616/169 1792 +f 436/588/170 423/586/170 452/617/170 437/602/170 1793 +f 423/586/171 422/584/171 453/618/171 452/617/171 1794 +f 422/584/172 421/582/172 454/619/172 453/618/172 1795 +f 421/582/173 420/565/173 407/563/173 454/619/173 1796 +f 437/602/174 452/617/174 455/620/174 438/604/174 1797 +f 452/621/175 453/622/175 456/623/175 455/620/175 1798 +f 453/622/176 454/624/176 457/625/176 456/623/176 1799 +f 454/619/177 407/563/177 406/560/177 457/626/177 1800 +f 438/604/178 455/620/178 458/627/178 439/606/178 1801 +f 455/620/179 456/623/179 459/628/179 458/627/179 1802 +f 456/623/180 457/625/180 460/629/180 459/628/180 1803 +f 457/625/181 406/630/181 405/557/181 460/629/181 1804 +f 439/606/182 458/627/182 389/533/182 388/532/182 1805 +f 458/627/183 459/628/183 390/536/183 389/533/183 1806 +f 459/628/184 460/629/184 391/538/184 390/536/184 1807 +f 460/629/185 405/557/185 404/540/185 391/538/185 1808 +f 461/553/186 462/552/186 467/631/186 466/616/186 1809 +f 462/552/187 463/554/187 468/632/187 467/631/187 1810 +f 463/554/188 464/555/188 469/633/188 468/632/188 1811 +f 464/555/189 465/556/189 470/577/189 469/633/189 1812 +f 466/616/190 467/631/190 472/634/190 471/615/190 1813 +f 467/631/191 468/632/191 473/635/191 472/634/191 1814 +f 468/632/192 469/633/192 474/636/192 473/635/192 1815 +f 469/633/193 470/577/193 475/637/193 474/636/193 1816 +f 471/615/194 472/634/194 477/638/194 476/614/194 1817 +f 472/634/195 473/635/195 478/639/195 477/638/195 1818 +f 473/635/196 474/640/196 479/641/196 478/639/196 1819 +f 474/640/197 475/578/197 480/580/197 479/641/197 1820 +f 476/614/198 477/638/198 482/600/198 481/601/198 1821 +f 477/638/199 478/639/199 483/599/199 482/600/199 1822 +f 478/639/200 479/641/200 484/598/200 483/599/200 1823 +f 479/641/201 480/580/201 485/581/201 484/598/201 1824 +o copper 1825 +v 0.311802 0.108758 0.030700 1826 +v 0.284564 0.167463 0.031155 1827 +v 0.246396 0.219727 0.031627 1828 +v 0.198765 0.263540 0.032098 1829 +v 0.143502 0.297218 0.032551 1830 +v 0.082730 0.319468 0.032968 1831 +v 0.018784 0.329435 0.033332 1832 +v -0.045877 0.326734 0.033630 1833 +v -0.108770 0.311471 0.033851 1834 +v -0.167477 0.284232 0.033986 1835 +v -0.219741 0.246062 0.034029 1836 +v -0.263556 0.198431 0.033980 1837 +v -0.297236 0.143167 0.033839 1838 +v -0.319488 0.082394 0.033613 1839 +v -0.329456 0.018448 0.033310 1840 +v -0.326757 -0.046213 0.032942 1841 +v -0.311495 -0.109105 0.032522 1842 +v -0.284257 -0.167811 0.032068 1843 +v -0.246089 -0.220074 0.031596 1844 +v -0.198458 -0.263887 0.031124 1845 +v -0.143195 -0.297566 0.030671 1846 +v -0.082423 -0.319816 0.030255 1847 +v -0.018477 -0.329782 0.029890 1848 +v 0.046184 -0.327081 0.029592 1849 +v 0.109077 -0.311818 0.029371 1850 +v 0.167783 -0.284578 0.029237 1851 +v 0.220048 -0.246409 0.029193 1852 +v 0.263863 -0.198777 0.029243 1853 +v 0.297543 -0.143513 0.029383 1854 +v 0.319794 -0.082741 0.029609 1855 +v 0.329762 -0.018795 0.029912 1856 +v 0.327063 0.045866 0.030281 1857 +v 0.311496 0.109105 -0.032522 1858 +v 0.284258 0.167811 -0.032068 1859 +v 0.246090 0.220074 -0.031596 1860 +v 0.198459 0.263887 -0.031124 1861 +v 0.143196 0.297566 -0.030671 1862 +v 0.082423 0.319816 -0.030255 1863 +v 0.018478 0.329782 -0.029890 1864 +v -0.046184 0.327082 -0.029592 1865 +v -0.109076 0.311818 -0.029371 1866 +v -0.167783 0.284579 -0.029237 1867 +v -0.220048 0.246410 -0.029193 1868 +v -0.263862 0.198778 -0.029243 1869 +v -0.297542 0.143514 -0.029383 1870 +v -0.319794 0.082741 -0.029609 1871 +v -0.329762 0.018796 -0.029912 1872 +v -0.327063 -0.045865 -0.030281 1873 +v -0.311802 -0.108757 -0.030700 1874 +v -0.284563 -0.167463 -0.031155 1875 +v -0.246395 -0.219727 -0.031627 1876 +v -0.198765 -0.263540 -0.032098 1877 +v -0.143501 -0.297218 -0.032551 1878 +v -0.082729 -0.319468 -0.032968 1879 +v -0.018784 -0.329434 -0.033332 1880 +v 0.045878 -0.326734 -0.033630 1881 +v 0.108771 -0.311471 -0.033851 1882 +v 0.167477 -0.284231 -0.033986 1883 +v 0.219742 -0.246062 -0.034029 1884 +v 0.263556 -0.198430 -0.033980 1885 +v 0.297236 -0.143166 -0.033839 1886 +v 0.319488 -0.082393 -0.033613 1887 +v 0.329456 -0.018448 -0.033310 1888 +v 0.326757 0.046214 -0.032942 1889 +v 0.335402 0.117006 0.030631 1890 +v 0.306101 0.180157 0.031120 1891 +v 0.265042 0.236379 0.031628 1892 +v 0.213805 0.283509 0.032135 1893 +v 0.154357 0.319738 0.032622 1894 +v 0.088983 0.343673 0.033070 1895 +v 0.020195 0.354394 0.033462 1896 +v -0.049363 0.351489 0.033783 1897 +v -0.117018 0.335071 0.034021 1898 +v -0.180170 0.305768 0.034166 1899 +v -0.236393 0.264708 0.034212 1900 +v -0.283525 0.213470 0.034159 1901 +v -0.319755 0.154021 0.034008 1902 +v -0.343692 0.088646 0.033765 1903 +v -0.354415 0.019858 0.033439 1904 +v -0.351512 -0.049699 0.033042 1905 +v -0.335095 -0.117354 0.032591 1906 +v -0.305794 -0.180505 0.032102 1907 +v -0.264736 -0.236726 0.031594 1908 +v -0.213498 -0.283857 0.031087 1909 +v -0.154050 -0.320085 0.030600 1910 +v -0.088676 -0.344020 0.030152 1911 +v -0.019888 -0.354741 0.029760 1912 +v 0.049670 -0.351836 0.029439 1913 +v 0.117325 -0.335418 0.029202 1914 +v 0.180477 -0.306115 0.029057 1915 +v 0.236699 -0.265055 0.029010 1916 +v 0.283832 -0.213816 0.029063 1917 +v 0.320062 -0.154367 0.029214 1918 +v 0.343999 -0.088993 0.029458 1919 +v 0.354721 -0.020205 0.029784 1920 +v 0.351818 0.049353 0.030180 1921 +v 0.335095 0.117354 -0.032591 1922 +v 0.305795 0.180505 -0.032102 1923 +v 0.264736 0.236726 -0.031594 1924 +v 0.213498 0.283857 -0.031087 1925 +v 0.154050 0.320085 -0.030600 1926 +v 0.088676 0.344020 -0.030152 1927 +v 0.019889 0.354741 -0.029760 1928 +v -0.049670 0.351837 -0.029439 1929 +v -0.117324 0.335418 -0.029202 1930 +v -0.180476 0.306116 -0.029057 1931 +v -0.236699 0.265056 -0.029010 1932 +v -0.283831 0.213817 -0.029063 1933 +v -0.320061 0.154368 -0.029215 1934 +v -0.343998 0.088994 -0.029458 1935 +v -0.354721 0.020206 -0.029784 1936 +v -0.351818 -0.049352 -0.030180 1937 +v -0.335401 -0.117006 -0.030631 1938 +v -0.306100 -0.180157 -0.031120 1939 +v -0.265042 -0.236378 -0.031628 1940 +v -0.213804 -0.283509 -0.032135 1941 +v -0.154356 -0.319738 -0.032622 1942 +v -0.088982 -0.343673 -0.033070 1943 +v -0.020194 -0.354394 -0.033462 1944 +v 0.049364 -0.351489 -0.033783 1945 +v 0.117019 -0.335070 -0.034021 1946 +v 0.180171 -0.305768 -0.034166 1947 +v 0.236393 -0.264708 -0.034212 1948 +v 0.283525 -0.213469 -0.034159 1949 +v 0.319756 -0.154020 -0.034008 1950 +v 0.343692 -0.088646 -0.033765 1951 +v 0.354415 -0.019858 -0.033439 1952 +v 0.351512 0.049700 -0.033042 1953 +v -0.285966 0.036617 -0.253880 1954 +v -0.330001 0.036617 -0.193213 1955 +v -0.361354 0.036617 -0.125120 1956 +v -0.378821 0.036617 -0.052219 1957 +v -0.381729 0.036617 0.022688 1958 +v -0.369968 0.036617 0.096724 1959 +v -0.343989 0.036617 0.167043 1960 +v -0.304791 0.036617 0.230942 1961 +v -0.253880 0.036617 0.285966 1962 +v -0.193213 0.036617 0.330001 1963 +v -0.125120 0.036617 0.361354 1964 +v -0.052220 0.036617 0.378820 1965 +v 0.022688 0.036617 0.381729 1966 +v 0.096724 0.036617 0.369968 1967 +v 0.167042 0.036617 0.343989 1968 +v 0.230942 0.036617 0.304791 1969 +v 0.285966 0.036617 0.253880 1970 +v 0.330001 0.036617 0.193213 1971 +v 0.361354 0.036617 0.125120 1972 +v 0.378820 0.036617 0.052219 1973 +v 0.381729 0.036617 -0.022689 1974 +v 0.369968 0.036617 -0.096724 1975 +v 0.343989 0.036617 -0.167043 1976 +v 0.304791 0.036617 -0.230942 1977 +v 0.253880 0.036617 -0.285967 1978 +v 0.193212 0.036617 -0.330001 1979 +v 0.125120 0.036617 -0.361354 1980 +v 0.052219 0.036617 -0.378821 1981 +v -0.022689 0.036617 -0.381729 1982 +v -0.096725 0.036617 -0.369968 1983 +v -0.167043 0.036617 -0.343989 1984 +v -0.230942 0.036617 -0.304791 1985 +v -0.285966 -0.036617 -0.253880 1986 +v -0.330001 -0.036617 -0.193213 1987 +v -0.361354 -0.036617 -0.125120 1988 +v -0.378821 -0.036617 -0.052219 1989 +v -0.381729 -0.036617 0.022688 1990 +v -0.369968 -0.036617 0.096724 1991 +v -0.343989 -0.036617 0.167043 1992 +v -0.304791 -0.036617 0.230942 1993 +v -0.253880 -0.036617 0.285966 1994 +v -0.193213 -0.036617 0.330001 1995 +v -0.125120 -0.036617 0.361354 1996 +v -0.052220 -0.036617 0.378820 1997 +v 0.022688 -0.036617 0.381729 1998 +v 0.096724 -0.036617 0.369968 1999 +v 0.167042 -0.036617 0.343989 2000 +v 0.230942 -0.036617 0.304791 2001 +v 0.285966 -0.036617 0.253880 2002 +v 0.330001 -0.036617 0.193213 2003 +v 0.361354 -0.036617 0.125120 2004 +v 0.378820 -0.036617 0.052219 2005 +v 0.381729 -0.036617 -0.022689 2006 +v 0.369968 -0.036617 -0.096724 2007 +v 0.343989 -0.036617 -0.167043 2008 +v 0.304791 -0.036617 -0.230942 2009 +v 0.253880 -0.036617 -0.285966 2010 +v 0.193212 -0.036617 -0.330001 2011 +v 0.125120 -0.036617 -0.361354 2012 +v 0.052219 -0.036617 -0.378821 2013 +v -0.022689 -0.036617 -0.381729 2014 +v -0.096725 -0.036617 -0.369968 2015 +v -0.167043 -0.036617 -0.343989 2016 +v -0.230942 -0.036617 -0.304791 2017 +v -0.300923 0.036617 -0.267158 2018 +v -0.347260 0.036617 -0.203318 2019 +v -0.380253 0.036617 -0.131664 2020 +v -0.398633 0.036617 -0.054950 2021 +v -0.401693 0.036617 0.023875 2022 +v -0.389317 0.036617 0.101782 2023 +v -0.361980 0.036617 0.175779 2024 +v -0.320732 0.036617 0.243020 2025 +v -0.267159 0.036617 0.300922 2026 +v -0.203318 0.036616 0.347260 2027 +v -0.131664 0.036617 0.380253 2028 +v -0.054951 0.036616 0.398632 2029 +v 0.023875 0.036617 0.401693 2030 +v 0.101782 0.036616 0.389317 2031 +v 0.175779 0.036617 0.361980 2032 +v 0.243020 0.036617 0.320732 2033 +v 0.300922 0.036617 0.267158 2034 +v 0.347260 0.036617 0.203318 2035 +v 0.380253 0.036617 0.131664 2036 +v 0.398632 0.036617 0.054950 2037 +v 0.401693 0.036617 -0.023875 2038 +v 0.389317 0.036617 -0.101783 2039 +v 0.361979 0.036617 -0.175779 2040 +v 0.320731 0.036617 -0.243021 2041 +v 0.267158 0.036617 -0.300923 2042 +v 0.203317 0.036617 -0.347260 2043 +v 0.131663 0.036617 -0.380253 2044 +v 0.054950 0.036617 -0.398633 2045 +v -0.023875 0.036617 -0.401693 2046 +v -0.101783 0.036617 -0.389317 2047 +v -0.175779 0.036617 -0.361979 2048 +v -0.243021 0.036617 -0.320731 2049 +v -0.300923 -0.036617 -0.267158 2050 +v -0.347260 -0.036617 -0.203318 2051 +v -0.380253 -0.036617 -0.131664 2052 +v -0.398633 -0.036617 -0.054950 2053 +v -0.401693 -0.036617 0.023875 2054 +v -0.389317 -0.036617 0.101782 2055 +v -0.361980 -0.036617 0.175779 2056 +v -0.320732 -0.036617 0.243020 2057 +v -0.267159 -0.036617 0.300922 2058 +v -0.203318 -0.036617 0.347260 2059 +v -0.131664 -0.036617 0.380253 2060 +v -0.054951 -0.036617 0.398633 2061 +v 0.023875 -0.036617 0.401693 2062 +v 0.101782 -0.036617 0.389317 2063 +v 0.175779 -0.036617 0.361980 2064 +v 0.243020 -0.036617 0.320732 2065 +v 0.300922 -0.036617 0.267158 2066 +v 0.347260 -0.036617 0.203318 2067 +v 0.380252 -0.036617 0.131664 2068 +v 0.398632 -0.036617 0.054950 2069 +v 0.401693 -0.036617 -0.023875 2070 +v 0.389317 -0.036617 -0.101783 2071 +v 0.361979 -0.036617 -0.175779 2072 +v 0.320731 -0.036617 -0.243021 2073 +v 0.267158 -0.036617 -0.300923 2074 +v 0.203317 -0.036617 -0.347260 2075 +v 0.131663 -0.036617 -0.380253 2076 +v 0.054950 -0.036617 -0.398633 2077 +v -0.023875 -0.036617 -0.401693 2078 +v -0.101783 -0.036617 -0.389317 2079 +v -0.175779 -0.036617 -0.361979 2080 +v -0.243021 -0.036617 -0.320731 2081 +v -0.004523 0.247626 -0.255435 2082 +v -0.003788 0.292526 -0.202484 2083 +v -0.001613 0.326284 -0.141853 2084 +v 0.001921 0.347600 -0.075871 2085 +v 0.006676 0.355656 -0.007075 2086 +v 0.012471 0.350142 0.061892 2087 +v 0.019082 0.331271 0.128379 2088 +v 0.026255 0.299767 0.189832 2089 +v 0.033715 0.256841 0.243889 2090 +v 0.041175 0.204143 0.288472 2091 +v 0.048348 0.143697 0.321868 2092 +v 0.054959 0.077827 0.342794 2093 +v 0.060753 0.009065 0.350446 2094 +v 0.065509 -0.059948 0.344529 2095 +v 0.069042 -0.126559 0.325271 2096 +v 0.071218 -0.188209 0.293412 2097 +v 0.071953 -0.242528 0.250177 2098 +v 0.071218 -0.287429 0.197226 2099 +v 0.069042 -0.321186 0.136595 2100 +v 0.065508 -0.342502 0.070613 2101 +v 0.060753 -0.350559 0.001817 2102 +v 0.054959 -0.345045 -0.067150 2103 +v 0.048348 -0.326173 -0.133638 2104 +v 0.041175 -0.294669 -0.195090 2105 +v 0.033715 -0.251743 -0.249147 2106 +v 0.026255 -0.199045 -0.293730 2107 +v 0.019082 -0.138599 -0.327127 2108 +v 0.012471 -0.072730 -0.348053 2109 +v 0.006676 -0.003967 -0.355704 2110 +v 0.001921 0.065046 -0.349787 2111 +v -0.001613 0.131657 -0.330529 2112 +v -0.003789 0.193307 -0.298670 2113 +v -0.071953 0.242529 -0.250177 2114 +v -0.071218 0.287429 -0.197226 2115 +v -0.069042 0.321187 -0.136595 2116 +v -0.065509 0.342503 -0.070613 2117 +v -0.060753 0.350559 -0.001817 2118 +v -0.054959 0.345045 0.067150 2119 +v -0.048348 0.326174 0.133637 2120 +v -0.041175 0.294670 0.195090 2121 +v -0.033715 0.251744 0.249147 2122 +v -0.026255 0.199046 0.293730 2123 +v -0.019082 0.138600 0.327126 2124 +v -0.012471 0.072730 0.348052 2125 +v -0.006676 0.003968 0.355704 2126 +v -0.001921 -0.065045 0.349787 2127 +v 0.001612 -0.131657 0.330529 2128 +v 0.003788 -0.193306 0.298670 2129 +v 0.004523 -0.247625 0.255434 2130 +v 0.003788 -0.292526 0.202484 2131 +v 0.001612 -0.326283 0.141852 2132 +v -0.001921 -0.347600 0.075871 2133 +v -0.006677 -0.355656 0.007075 2134 +v -0.012471 -0.350142 -0.061892 2135 +v -0.019082 -0.331270 -0.128380 2136 +v -0.026255 -0.299766 -0.189833 2137 +v -0.033715 -0.256840 -0.243889 2138 +v -0.041175 -0.204142 -0.288472 2139 +v -0.048348 -0.143696 -0.321869 2140 +v -0.054959 -0.077827 -0.342795 2141 +v -0.060753 -0.009064 -0.350446 2142 +v -0.065509 0.059949 -0.344529 2143 +v -0.069042 0.126560 -0.325271 2144 +v -0.071218 0.188210 -0.293412 2145 +v -0.006683 0.261465 -0.269711 2146 +v -0.005906 0.308901 -0.213770 2147 +v -0.003607 0.344565 -0.149715 2148 +v 0.000126 0.367085 -0.080007 2149 +v 0.005150 0.375595 -0.007326 2150 +v 0.011271 0.369770 0.065535 2151 +v 0.018255 0.349833 0.135777 2152 +v 0.025834 0.316550 0.200701 2153 +v 0.033715 0.271201 0.257810 2154 +v 0.041596 0.215527 0.304910 2155 +v 0.049174 0.151668 0.340192 2156 +v 0.056158 0.082078 0.362300 2157 +v 0.062280 0.009433 0.370384 2158 +v 0.067304 -0.063477 0.364133 2159 +v 0.071037 -0.133850 0.343787 2160 +v 0.073336 -0.198981 0.310129 2161 +v 0.074112 -0.256367 0.264452 2162 +v 0.073336 -0.303804 0.208512 2163 +v 0.071037 -0.339467 0.144456 2164 +v 0.067304 -0.361987 0.074749 2165 +v 0.062280 -0.370498 0.002068 2166 +v 0.056158 -0.364673 -0.070793 2167 +v 0.049174 -0.344736 -0.141035 2168 +v 0.041596 -0.311453 -0.205959 2169 +v 0.033715 -0.266103 -0.263068 2170 +v 0.025834 -0.210429 -0.310168 2171 +v 0.018255 -0.146570 -0.345450 2172 +v 0.011271 -0.076980 -0.367558 2173 +v 0.005150 -0.004335 -0.375642 2174 +v 0.000126 0.068575 -0.369391 2175 +v -0.003607 0.138948 -0.349045 2176 +v -0.005906 0.204079 -0.315387 2177 +v -0.074112 0.256368 -0.264453 2178 +v -0.073336 0.303804 -0.208512 2179 +v -0.071037 0.339468 -0.144457 2180 +v -0.067304 0.361987 -0.074749 2181 +v -0.062280 0.370498 -0.002068 2182 +v -0.056158 0.364673 0.070793 2183 +v -0.049174 0.344736 0.141035 2184 +v -0.041596 0.311453 0.205958 2185 +v -0.033715 0.266104 0.263068 2186 +v -0.025834 0.210430 0.310168 2187 +v -0.018255 0.146571 0.345450 2188 +v -0.011271 0.076981 0.367558 2189 +v -0.005150 0.004336 0.375641 2190 +v -0.000126 -0.068574 0.369391 2191 +v 0.003607 -0.138947 0.349045 2192 +v 0.005906 -0.204078 0.315387 2193 +v 0.006682 -0.261464 0.269710 2194 +v 0.005906 -0.308901 0.213769 2195 +v 0.003607 -0.344564 0.149714 2196 +v -0.000126 -0.367084 0.080007 2197 +v -0.005150 -0.375595 0.007326 2198 +v -0.011271 -0.369770 -0.065536 2199 +v -0.018256 -0.349833 -0.135778 2200 +v -0.025834 -0.316550 -0.200701 2201 +v -0.033715 -0.271200 -0.257810 2202 +v -0.041596 -0.215526 -0.304911 2203 +v -0.049174 -0.151667 -0.340193 2204 +v -0.056158 -0.082078 -0.362300 2205 +v -0.062280 -0.009432 -0.370384 2206 +v -0.067304 0.063478 -0.364133 2207 +v -0.071037 0.133851 -0.343787 2208 +v -0.073336 0.198982 -0.310129 2209 +vt 0.926035 0.627582 2210 +vt 0.893852 0.630339 2211 +vt 0.894026 0.578467 2212 +vt 0.922967 0.575988 2213 +vt 0.438346 0.355695 2214 +vt 0.410006 0.364110 2215 +vt 0.403735 0.313455 2216 +vt 0.434948 0.304165 2217 +vt 0.103843 0.618889 2218 +vt 0.072497 0.627582 2219 +vt 0.069430 0.575988 2220 +vt 0.097852 0.568121 2221 +vt 0.467257 0.352631 2222 +vt 0.467083 0.300759 2223 +vt 0.133709 0.604924 2224 +vt 0.125336 0.555342 2225 +vt 0.496198 0.355111 2226 +vt 0.499266 0.303516 2227 +vt 0.161818 0.586615 2228 +vt 0.151669 0.538341 2229 +vt 0.524621 0.362977 2230 +vt 0.530612 0.312209 2231 +vt 0.188225 0.564978 2232 +vt 0.176852 0.517923 2233 +vt 0.552105 0.375757 2234 +vt 0.560478 0.326175 2235 +vt 0.213211 0.540997 2236 +vt 0.201064 0.494914 2237 +vt 0.578438 0.392757 2238 +vt 0.588587 0.344483 2239 +vt 0.237170 0.515577 2240 +vt 0.224597 0.470120 2241 +vt 0.603621 0.413175 2242 +vt 0.614994 0.366120 2243 +vt 0.260539 0.489545 2244 +vt 0.247823 0.444317 2245 +vt 0.627832 0.436184 2246 +vt 0.639980 0.390101 2247 +vt 0.283756 0.463680 2248 +vt 0.271155 0.418267 2249 +vt 0.772897 0.584461 2250 +vt 0.746656 0.562530 2251 +vt 0.758131 0.515591 2252 +vt 0.783200 0.536323 2253 +vt 0.651366 0.460978 2254 +vt 0.663939 0.415522 2255 +vt 0.307238 0.438743 2256 +vt 0.295030 0.392744 2257 +vt 0.800818 0.603170 2258 +vt 0.809407 0.553725 2259 +vt 0.674592 0.486781 2260 +vt 0.687308 0.441553 2261 +vt 0.331362 0.415507 2262 +vt 0.319887 0.368568 2263 +vt 0.830504 0.617643 2264 +vt 0.836775 0.566988 2265 +vt 0.697924 0.512831 2266 +vt 0.710524 0.467418 2267 +vt 0.356431 0.394775 2268 +vt 0.346128 0.346637 2269 +vt 0.861717 0.626933 2270 +vt 0.865115 0.575403 2271 +vt 0.721799 0.538355 2272 +vt 0.734007 0.492355 2273 +vt 0.382638 0.377373 2274 +vt 0.374049 0.327928 2275 +vt 0.926035 0.627582 2276 +vt 0.922967 0.575988 2277 +vt 0.894026 0.578467 2278 +vt 0.893852 0.630339 2279 +vt 0.438346 0.355695 2280 +vt 0.434948 0.304165 2281 +vt 0.403735 0.313455 2282 +vt 0.410006 0.364110 2283 +vt 0.103843 0.618889 2284 +vt 0.097852 0.568121 2285 +vt 0.069430 0.575988 2286 +vt 0.072497 0.627582 2287 +vt 0.467257 0.352631 2288 +vt 0.467083 0.300759 2289 +vt 0.133709 0.604924 2290 +vt 0.125336 0.555342 2291 +vt 0.496198 0.355111 2292 +vt 0.499266 0.303516 2293 +vt 0.161818 0.586615 2294 +vt 0.151669 0.538341 2295 +vt 0.524621 0.362977 2296 +vt 0.530612 0.312209 2297 +vt 0.188225 0.564978 2298 +vt 0.176852 0.517923 2299 +vt 0.552105 0.375757 2300 +vt 0.560478 0.326175 2301 +vt 0.213211 0.540997 2302 +vt 0.201064 0.494914 2303 +vt 0.578438 0.392757 2304 +vt 0.588587 0.344483 2305 +vt 0.237170 0.515577 2306 +vt 0.224597 0.470120 2307 +vt 0.603621 0.413175 2308 +vt 0.614994 0.366120 2309 +vt 0.260539 0.489545 2310 +vt 0.247823 0.444317 2311 +vt 0.627832 0.436184 2312 +vt 0.639980 0.390101 2313 +vt 0.283756 0.463680 2314 +vt 0.271155 0.418267 2315 +vt 0.772897 0.584461 2316 +vt 0.783200 0.536323 2317 +vt 0.758131 0.515591 2318 +vt 0.746656 0.562530 2319 +vt 0.651366 0.460978 2320 +vt 0.663939 0.415522 2321 +vt 0.307238 0.438743 2322 +vt 0.295030 0.392744 2323 +vt 0.800818 0.603170 2324 +vt 0.809407 0.553725 2325 +vt 0.674592 0.486781 2326 +vt 0.687308 0.441553 2327 +vt 0.331362 0.415507 2328 +vt 0.319887 0.368568 2329 +vt 0.830504 0.617643 2330 +vt 0.836775 0.566988 2331 +vt 0.697924 0.512831 2332 +vt 0.710524 0.467418 2333 +vt 0.356431 0.394775 2334 +vt 0.346128 0.346637 2335 +vt 0.861717 0.626933 2336 +vt 0.865115 0.575403 2337 +vt 0.721799 0.538355 2338 +vt 0.734007 0.492355 2339 +vt 0.382638 0.377373 2340 +vt 0.374049 0.327928 2341 +vt 0.924091 0.586444 2342 +vt 0.892918 0.585851 2343 +vt 0.894928 0.557945 2344 +vt 0.923274 0.558538 2345 +vt 0.441148 0.445412 2346 +vt 0.413778 0.451403 2347 +vt 0.406874 0.423497 2348 +vt 0.436498 0.417506 2349 +vt 0.103579 0.584252 2350 +vt 0.072609 0.586444 2351 +vt 0.071793 0.558538 2352 +vt 0.100013 0.556346 2353 +vt 0.469187 0.442055 2354 +vt 0.467178 0.414149 2355 +vt 0.133706 0.579358 2356 +vt 0.127704 0.551452 2357 +vt 0.497534 0.441462 2358 +vt 0.498350 0.413556 2359 +vt 0.162562 0.571951 2360 +vt 0.154580 0.544045 2361 +vt 0.525754 0.443654 2362 +vt 0.529319 0.415748 2363 +vt 0.189994 0.562315 2364 +vt 0.180522 0.534409 2365 +vt 0.553444 0.448548 2366 +vt 0.559446 0.420642 2367 +vt 0.216083 0.550821 2368 +vt 0.205574 0.522915 2369 +vt 0.580321 0.455955 2370 +vt 0.588303 0.428049 2371 +vt 0.241073 0.537909 2372 +vt 0.229909 0.510003 2373 +vt 0.606263 0.465591 2374 +vt 0.615735 0.437685 2375 +vt 0.265296 0.524077 2376 +vt 0.253797 0.496171 2377 +vt 0.631314 0.477085 2378 +vt 0.641824 0.449179 2379 +vt 0.289121 0.509856 2380 +vt 0.277565 0.481950 2381 +vt 0.777520 0.557633 2382 +vt 0.751935 0.545479 2383 +vt 0.762765 0.517573 2384 +vt 0.787484 0.529727 2385 +vt 0.655650 0.489997 2386 +vt 0.666813 0.462091 2387 +vt 0.312916 0.495793 2388 +vt 0.301574 0.467887 2389 +vt 0.804360 0.568109 2390 +vt 0.813034 0.540203 2391 +vt 0.679538 0.503829 2392 +vt 0.691037 0.475923 2393 +vt 0.337024 0.482427 2394 +vt 0.326194 0.454521 2395 +vt 0.832615 0.576503 2396 +vt 0.839518 0.548597 2397 +vt 0.703306 0.518050 2398 +vt 0.714862 0.490144 2399 +vt 0.361744 0.470273 2400 +vt 0.351780 0.442367 2401 +vt 0.862238 0.582494 2402 +vt 0.866888 0.554588 2403 +vt 0.727314 0.532113 2404 +vt 0.738656 0.504207 2405 +vt 0.387294 0.459797 2406 +vt 0.378619 0.431891 2407 +vt 0.924091 0.586444 2408 +vt 0.923274 0.558538 2409 +vt 0.894928 0.557945 2410 +vt 0.892918 0.585851 2411 +vt 0.441148 0.445412 2412 +vt 0.436498 0.417506 2413 +vt 0.406874 0.423497 2414 +vt 0.413778 0.451403 2415 +vt 0.103579 0.584252 2416 +vt 0.100013 0.556346 2417 +vt 0.071793 0.558538 2418 +vt 0.072609 0.586444 2419 +vt 0.469187 0.442055 2420 +vt 0.467178 0.414149 2421 +vt 0.133706 0.579358 2422 +vt 0.127704 0.551452 2423 +vt 0.497534 0.441462 2424 +vt 0.498350 0.413556 2425 +vt 0.162562 0.571951 2426 +vt 0.154580 0.544045 2427 +vt 0.525754 0.443654 2428 +vt 0.529319 0.415748 2429 +vt 0.189994 0.562315 2430 +vt 0.180522 0.534409 2431 +vt 0.553444 0.448548 2432 +vt 0.559446 0.420642 2433 +vt 0.216083 0.550821 2434 +vt 0.205574 0.522915 2435 +vt 0.580321 0.455955 2436 +vt 0.588303 0.428049 2437 +vt 0.241073 0.537909 2438 +vt 0.229909 0.510003 2439 +vt 0.606263 0.465591 2440 +vt 0.615735 0.437685 2441 +vt 0.265296 0.524077 2442 +vt 0.253797 0.496171 2443 +vt 0.631314 0.477085 2444 +vt 0.641824 0.449179 2445 +vt 0.289121 0.509856 2446 +vt 0.277565 0.481950 2447 +vt 0.777520 0.557633 2448 +vt 0.787484 0.529727 2449 +vt 0.762765 0.517573 2450 +vt 0.751935 0.545479 2451 +vt 0.655650 0.489997 2452 +vt 0.666813 0.462091 2453 +vt 0.312916 0.495793 2454 +vt 0.301574 0.467887 2455 +vt 0.804360 0.568109 2456 +vt 0.813034 0.540203 2457 +vt 0.679538 0.503829 2458 +vt 0.691037 0.475923 2459 +vt 0.337024 0.482427 2460 +vt 0.326194 0.454521 2461 +vt 0.832615 0.576503 2462 +vt 0.839518 0.548597 2463 +vt 0.703306 0.518050 2464 +vt 0.714862 0.490144 2465 +vt 0.361744 0.470273 2466 +vt 0.351780 0.442367 2467 +vt 0.862238 0.582494 2468 +vt 0.866888 0.554588 2469 +vt 0.727314 0.532113 2470 +vt 0.738656 0.504207 2471 +vt 0.387294 0.459797 2472 +vt 0.378619 0.431891 2473 +vt 0.921167 0.578126 2474 +vt 0.890749 0.577589 2475 +vt 0.892709 0.552369 2476 +vt 0.920370 0.552905 2477 +vt 0.449904 0.450665 2478 +vt 0.423196 0.456079 2479 +vt 0.416459 0.430859 2480 +vt 0.445366 0.425445 2481 +vt 0.120498 0.576144 2482 +vt 0.090278 0.578126 2483 +vt 0.089481 0.552905 2484 +vt 0.117019 0.550924 2485 +vt 0.477265 0.447631 2486 +vt 0.475304 0.422411 2487 +vt 0.149897 0.571722 2488 +vt 0.144040 0.546501 2489 +vt 0.504926 0.447095 2490 +vt 0.505722 0.421874 2491 +vt 0.178056 0.565027 2492 +vt 0.170266 0.539807 2493 +vt 0.532464 0.449076 2494 +vt 0.535943 0.423856 2495 +vt 0.204824 0.556319 2496 +vt 0.195581 0.531098 2497 +vt 0.559484 0.453499 2498 +vt 0.565341 0.428278 2499 +vt 0.230282 0.545930 2500 +vt 0.220027 0.520710 2501 +vt 0.585711 0.460193 2502 +vt 0.593500 0.434973 2503 +vt 0.254667 0.534261 2504 +vt 0.243774 0.509041 2505 +vt 0.611026 0.468902 2506 +vt 0.620269 0.443681 2507 +vt 0.278305 0.521760 2508 +vt 0.267084 0.496540 2509 +vt 0.635471 0.479290 2510 +vt 0.645726 0.454070 2511 +vt 0.301554 0.508908 2512 +vt 0.290277 0.483687 2513 +vt 0.778141 0.552087 2514 +vt 0.753175 0.541103 2515 +vt 0.763743 0.515882 2516 +vt 0.787864 0.526867 2517 +vt 0.659218 0.490959 2518 +vt 0.670112 0.465739 2519 +vt 0.324773 0.496198 2520 +vt 0.313705 0.470977 2521 +vt 0.804332 0.561555 2522 +vt 0.812796 0.536334 2523 +vt 0.682529 0.503460 2524 +vt 0.693750 0.478240 2525 +vt 0.348298 0.484118 2526 +vt 0.337730 0.458897 2527 +vt 0.831903 0.569141 2528 +vt 0.838640 0.543921 2529 +vt 0.705722 0.516313 2530 +vt 0.716998 0.491092 2531 +vt 0.372420 0.473133 2532 +vt 0.362697 0.447913 2533 +vt 0.860811 0.574555 2534 +vt 0.865348 0.549335 2535 +vt 0.729150 0.529023 2536 +vt 0.740217 0.503803 2537 +vt 0.397352 0.463666 2538 +vt 0.388887 0.438445 2539 +vt 0.921167 0.578126 2540 +vt 0.920370 0.552905 2541 +vt 0.892709 0.552369 2542 +vt 0.890749 0.577589 2543 +vt 0.449904 0.450665 2544 +vt 0.445366 0.425445 2545 +vt 0.416459 0.430859 2546 +vt 0.423196 0.456079 2547 +vt 0.120498 0.576144 2548 +vt 0.117019 0.550924 2549 +vt 0.089481 0.552905 2550 +vt 0.090278 0.578126 2551 +vt 0.477265 0.447631 2552 +vt 0.475304 0.422411 2553 +vt 0.149897 0.571722 2554 +vt 0.144040 0.546501 2555 +vt 0.504926 0.447095 2556 +vt 0.505722 0.421874 2557 +vt 0.178056 0.565027 2558 +vt 0.170266 0.539807 2559 +vt 0.532464 0.449076 2560 +vt 0.535943 0.423856 2561 +vt 0.204824 0.556319 2562 +vt 0.195581 0.531098 2563 +vt 0.559484 0.453499 2564 +vt 0.565341 0.428278 2565 +vt 0.230282 0.545930 2566 +vt 0.220027 0.520710 2567 +vt 0.585711 0.460193 2568 +vt 0.593500 0.434973 2569 +vt 0.254667 0.534261 2570 +vt 0.243774 0.509041 2571 +vt 0.611026 0.468902 2572 +vt 0.620269 0.443681 2573 +vt 0.278305 0.521760 2574 +vt 0.267084 0.496540 2575 +vt 0.635471 0.479290 2576 +vt 0.645726 0.454070 2577 +vt 0.301554 0.508908 2578 +vt 0.290277 0.483687 2579 +vt 0.778141 0.552087 2580 +vt 0.787864 0.526867 2581 +vt 0.763743 0.515882 2582 +vt 0.753175 0.541103 2583 +vt 0.659218 0.490959 2584 +vt 0.670112 0.465739 2585 +vt 0.324773 0.496198 2586 +vt 0.313705 0.470977 2587 +vt 0.804332 0.561555 2588 +vt 0.812796 0.536334 2589 +vt 0.682529 0.503460 2590 +vt 0.693750 0.478240 2591 +vt 0.348298 0.484118 2592 +vt 0.337730 0.458897 2593 +vt 0.831903 0.569141 2594 +vt 0.838640 0.543921 2595 +vt 0.705722 0.516313 2596 +vt 0.716998 0.491092 2597 +vt 0.372420 0.473133 2598 +vt 0.362697 0.447913 2599 +vt 0.860811 0.574555 2600 +vt 0.865348 0.549335 2601 +vt 0.729150 0.529023 2602 +vt 0.740217 0.503803 2603 +vt 0.397352 0.463666 2604 +vt 0.388887 0.438445 2605 +vn 0.1540 0.9881 0.0047 2606 +vn -0.5204 -0.8539 -0.0022 2607 +vn -0.0417 0.9991 0.0057 2608 +vn -0.3438 -0.9390 -0.0035 2609 +vn -0.2358 0.9718 0.0065 2610 +vn -0.1540 -0.9881 -0.0047 2611 +vn -0.4209 0.9071 0.0070 2612 +vn 0.0417 -0.9991 -0.0057 2613 +vn -0.5898 0.8076 0.0073 2614 +vn 0.2358 -0.9718 -0.0065 2615 +vn -0.7360 0.6770 0.0073 2616 +vn 0.4209 -0.9071 -0.0070 2617 +vn -0.8539 0.5204 0.0070 2618 +vn 0.5898 -0.8076 -0.0073 2619 +vn -0.9390 0.3438 0.0064 2620 +vn 0.7360 -0.6770 -0.0073 2621 +vn -0.9881 0.1540 0.0056 2622 +vn 0.9071 0.4209 -0.0021 2623 +vn 0.8539 -0.5204 -0.0070 2624 +vn -0.9991 -0.0417 0.0046 2625 +vn 0.8076 0.5898 -0.0007 2626 +vn 0.9390 -0.3438 -0.0064 2627 +vn -0.9718 -0.2358 0.0034 2628 +vn 0.6770 0.7360 0.0008 2629 +vn 0.9881 -0.1540 -0.0056 2630 +vn -0.9071 -0.4209 0.0021 2631 +vn 0.5204 0.8539 0.0022 2632 +vn 0.9991 0.0417 -0.0046 2633 +vn -0.8076 -0.5898 0.0007 2634 +vn 0.3438 0.9390 0.0035 2635 +vn 0.9718 0.2358 -0.0034 2636 +vn -0.6770 -0.7360 -0.0008 2637 +vn 0.5898 -0.8075 -0.0073 2638 +vn -0.5898 0.8075 0.0073 2639 +vn -0.0048 0.0055 -1.0000 2640 +vn 0.0048 -0.0055 1.0000 2641 +vn -0.9380 0.0000 0.3465 2642 +vn 0.9992 0.0000 0.0388 2643 +vn -0.8524 0.0000 0.5229 2644 +vn 0.9876 -0.0000 -0.1569 2645 +vn -0.7340 0.0000 0.6791 2646 +vn 0.9380 0.0000 -0.3466 2647 +vn -0.5874 0.0000 0.8093 2648 +vn 0.8524 -0.0000 -0.5229 2649 +vn -0.4182 0.0000 0.9083 2650 +vn 0.7340 -0.0000 -0.6791 2651 +vn -0.2330 0.0000 0.9725 2652 +vn 0.5874 -0.0000 -0.8093 2653 +vn -0.0388 0.0000 0.9992 2654 +vn 0.4182 0.0000 -0.9083 2655 +vn 0.1569 0.0000 0.9876 2656 +vn 0.2330 -0.0000 -0.9725 2657 +vn 0.3465 0.0000 0.9380 2658 +vn -0.8093 -0.0000 -0.5874 2659 +vn 0.0388 0.0000 -0.9992 2660 +vn 0.5229 0.0000 0.8524 2661 +vn -0.9083 0.0000 -0.4182 2662 +vn -0.1569 0.0000 -0.9876 2663 +vn 0.6791 0.0000 0.7340 2664 +vn -0.9725 0.0000 -0.2330 2665 +vn -0.3466 -0.0000 -0.9380 2666 +vn 0.8093 -0.0000 0.5874 2667 +vn -0.9992 0.0000 -0.0388 2668 +vn -0.5229 -0.0000 -0.8524 2669 +vn 0.9083 -0.0000 0.4182 2670 +vn -0.9876 0.0000 0.1569 2671 +vn -0.6791 0.0000 -0.7340 2672 +vn 0.9725 -0.0000 0.2330 2673 +vn 0.9380 0.0000 -0.3465 2674 +vn -0.9380 0.0000 0.3466 2675 +vn -0.3465 -0.0000 -0.9380 2676 +vn 0.3466 0.0000 0.9380 2677 +vn 0.0000 -1.0000 0.0000 2678 +vn -0.0000 1.0000 -0.0000 2679 +vn -0.0509 0.9594 0.2774 2680 +vn 0.0835 -0.9904 0.1102 2681 +vn -0.0313 0.8880 0.4589 2682 +vn 0.0685 -0.9940 -0.0852 2683 +vn -0.0106 0.7824 0.6227 2684 +vn 0.0509 -0.9594 -0.2774 2685 +vn 0.0106 0.6467 0.7627 2686 +vn 0.0313 -0.8880 -0.4589 2687 +vn 0.0313 0.4862 0.8733 2688 +vn 0.0106 -0.7824 -0.6227 2689 +vn 0.0509 0.3070 0.9503 2690 +vn -0.0106 -0.6467 -0.7627 2691 +vn 0.0685 0.1160 0.9909 2692 +vn -0.0313 -0.4862 -0.8733 2693 +vn 0.0835 -0.0794 0.9933 2694 +vn -0.0509 -0.3070 -0.9503 2695 +vn 0.0952 -0.2718 0.9576 2696 +vn -0.1074 0.7590 -0.6421 2697 +vn -0.0685 -0.1160 -0.9909 2698 +vn 0.1033 -0.4538 0.8851 2699 +vn -0.1033 0.8706 -0.4810 2700 +vn -0.0835 0.0794 -0.9933 2701 +vn 0.1074 -0.6183 0.7786 2702 +vn -0.0952 0.9487 -0.3014 2703 +vn -0.0952 0.2718 -0.9576 2704 +vn 0.1074 -0.7590 0.6421 2705 +vn -0.0835 0.9904 -0.1102 2706 +vn -0.1033 0.4538 -0.8851 2707 +vn 0.1033 -0.8706 0.4810 2708 +vn -0.0685 0.9940 0.0852 2709 +vn -0.1074 0.6183 -0.7786 2710 +vn 0.0952 -0.9487 0.3014 2711 +vn -0.9942 -0.0751 0.0775 2712 +vn 0.9942 0.0751 -0.0775 2713 +g copper_copper_copper 2714 +usemtl copper 2715 +s off 2716 +f 492/642/202 491/643/202 523/644/202 524/645/202 2717 +f 506/646/203 505/647/203 537/648/203 538/649/203 2718 +f 493/650/204 492/651/204 524/652/204 525/653/204 2719 +f 507/654/205 506/646/205 538/649/205 539/655/205 2720 +f 494/656/206 493/650/206 525/653/206 526/657/206 2721 +f 508/658/207 507/654/207 539/655/207 540/659/207 2722 +f 495/660/208 494/656/208 526/657/208 527/661/208 2723 +f 509/662/209 508/658/209 540/659/209 541/663/209 2724 +f 496/664/210 495/660/210 527/661/210 528/665/210 2725 +f 510/666/211 509/662/211 541/663/211 542/667/211 2726 +f 497/668/212 496/664/212 528/665/212 529/669/212 2727 +f 511/670/213 510/666/213 542/667/213 543/671/213 2728 +f 498/672/214 497/668/214 529/669/214 530/673/214 2729 +f 512/674/215 511/670/215 543/671/215 544/675/215 2730 +f 499/676/216 498/672/216 530/673/216 531/677/216 2731 +f 513/678/217 512/674/217 544/675/217 545/679/217 2732 +f 500/680/218 499/676/218 531/677/218 532/681/218 2733 +f 487/682/219 486/683/219 518/684/219 519/685/219 2734 +f 514/686/220 513/678/220 545/679/220 546/687/220 2735 +f 501/688/221 500/680/221 532/681/221 533/689/221 2736 +f 488/690/222 487/682/222 519/685/222 520/691/222 2737 +f 515/692/223 514/686/223 546/687/223 547/693/223 2738 +f 502/694/224 501/688/224 533/689/224 534/695/224 2739 +f 489/696/225 488/690/225 520/691/225 521/697/225 2740 +f 516/698/226 515/692/226 547/693/226 548/699/226 2741 +f 503/700/227 502/694/227 534/695/227 535/701/227 2742 +f 490/702/228 489/696/228 521/697/228 522/703/228 2743 +f 517/704/229 516/698/229 548/699/229 549/705/229 2744 +f 504/706/230 503/700/230 535/701/230 536/707/230 2745 +f 491/643/231 490/702/231 522/703/231 523/644/231 2746 +f 486/683/232 517/704/232 549/705/232 518/684/232 2747 +f 505/647/233 504/706/233 536/707/233 537/648/233 2748 +f 556/708/207 588/709/207 587/710/207 555/711/207 2749 +f 570/712/228 602/713/228 601/714/228 569/715/228 2750 +f 557/716/209 589/717/209 588/718/209 556/719/209 2751 +f 571/720/231 603/721/231 602/713/231 570/712/231 2752 +f 558/722/211 590/723/211 589/717/211 557/716/211 2753 +f 572/724/202 604/725/202 603/721/202 571/720/202 2754 +f 559/726/213 591/727/213 590/723/213 558/722/213 2755 +f 573/728/204 605/729/204 604/725/204 572/724/204 2756 +f 560/730/234 592/731/234 591/727/234 559/726/234 2757 +f 574/732/206 606/733/206 605/729/206 573/728/206 2758 +f 561/734/217 593/735/217 592/731/217 560/730/217 2759 +f 575/736/208 607/737/208 606/733/208 574/732/208 2760 +f 562/738/220 594/739/220 593/735/220 561/734/220 2761 +f 576/740/235 608/741/235 607/737/235 575/736/235 2762 +f 563/742/223 595/743/223 594/739/223 562/738/223 2763 +f 577/744/212 609/745/212 608/741/212 576/740/212 2764 +f 564/746/226 596/747/226 595/743/226 563/742/226 2765 +f 551/748/227 583/749/227 582/750/227 550/751/227 2766 +f 578/752/214 610/753/214 609/745/214 577/744/214 2767 +f 565/754/229 597/755/229 596/747/229 564/746/229 2768 +f 552/756/230 584/757/230 583/749/230 551/748/230 2769 +f 579/758/216 611/759/216 610/753/216 578/752/216 2770 +f 566/760/232 598/761/232 597/755/232 565/754/232 2771 +f 553/762/233 585/763/233 584/757/233 552/756/233 2772 +f 580/764/218 612/765/218 611/759/218 579/758/218 2773 +f 567/766/219 599/767/219 598/761/219 566/760/219 2774 +f 554/768/203 586/769/203 585/763/203 553/762/203 2775 +f 581/770/221 613/771/221 612/765/221 580/764/221 2776 +f 568/772/222 600/773/222 599/767/222 567/766/222 2777 +f 555/711/205 587/710/205 586/769/205 554/768/205 2778 +f 550/751/224 582/750/224 613/771/224 581/770/224 2779 +f 569/715/225 601/714/225 600/773/225 568/772/225 2780 +f 486/683/236 487/682/236 551/748/236 550/751/236 2781 +f 487/682/236 488/690/236 552/756/236 551/748/236 2782 +f 488/690/236 489/696/236 553/762/236 552/756/236 2783 +f 489/696/236 490/702/236 554/768/236 553/762/236 2784 +f 490/702/236 491/643/236 555/711/236 554/768/236 2785 +f 491/643/236 492/642/236 556/708/236 555/711/236 2786 +f 492/651/236 493/650/236 557/716/236 556/719/236 2787 +f 493/650/236 494/656/236 558/722/236 557/716/236 2788 +f 494/656/236 495/660/236 559/726/236 558/722/236 2789 +f 495/660/236 496/664/236 560/730/236 559/726/236 2790 +f 496/664/236 497/668/236 561/734/236 560/730/236 2791 +f 497/668/236 498/672/236 562/738/236 561/734/236 2792 +f 498/672/236 499/676/236 563/742/236 562/738/236 2793 +f 499/676/236 500/680/236 564/746/236 563/742/236 2794 +f 500/680/236 501/688/236 565/754/236 564/746/236 2795 +f 501/688/236 502/694/236 566/760/236 565/754/236 2796 +f 502/694/236 503/700/236 567/766/236 566/760/236 2797 +f 503/700/236 504/706/236 568/772/236 567/766/236 2798 +f 504/706/236 505/647/236 569/715/236 568/772/236 2799 +f 505/647/236 506/646/236 570/712/236 569/715/236 2800 +f 506/646/236 507/654/236 571/720/236 570/712/236 2801 +f 507/654/236 508/658/236 572/724/236 571/720/236 2802 +f 508/658/236 509/662/236 573/728/236 572/724/236 2803 +f 509/662/236 510/666/236 574/732/236 573/728/236 2804 +f 510/666/236 511/670/236 575/736/236 574/732/236 2805 +f 511/670/236 512/674/236 576/740/236 575/736/236 2806 +f 512/674/236 513/678/236 577/744/236 576/740/236 2807 +f 513/678/236 514/686/236 578/752/236 577/744/236 2808 +f 514/686/236 515/692/236 579/758/236 578/752/236 2809 +f 515/692/236 516/698/236 580/764/236 579/758/236 2810 +f 516/698/236 517/704/236 581/770/236 580/764/236 2811 +f 517/704/236 486/683/236 550/751/236 581/770/236 2812 +f 519/685/237 518/684/237 582/750/237 583/749/237 2813 +f 520/691/237 519/685/237 583/749/237 584/757/237 2814 +f 521/697/237 520/691/237 584/757/237 585/763/237 2815 +f 522/703/237 521/697/237 585/763/237 586/769/237 2816 +f 523/644/237 522/703/237 586/769/237 587/710/237 2817 +f 524/645/237 523/644/237 587/710/237 588/709/237 2818 +f 525/653/237 524/652/237 588/718/237 589/717/237 2819 +f 526/657/237 525/653/237 589/717/237 590/723/237 2820 +f 527/661/237 526/657/237 590/723/237 591/727/237 2821 +f 528/665/237 527/661/237 591/727/237 592/731/237 2822 +f 529/669/237 528/665/237 592/731/237 593/735/237 2823 +f 530/673/237 529/669/237 593/735/237 594/739/237 2824 +f 531/677/237 530/673/237 594/739/237 595/743/237 2825 +f 532/681/237 531/677/237 595/743/237 596/747/237 2826 +f 533/689/237 532/681/237 596/747/237 597/755/237 2827 +f 534/695/237 533/689/237 597/755/237 598/761/237 2828 +f 535/701/237 534/695/237 598/761/237 599/767/237 2829 +f 536/707/237 535/701/237 599/767/237 600/773/237 2830 +f 537/648/237 536/707/237 600/773/237 601/714/237 2831 +f 538/649/237 537/648/237 601/714/237 602/713/237 2832 +f 539/655/237 538/649/237 602/713/237 603/721/237 2833 +f 540/659/237 539/655/237 603/721/237 604/725/237 2834 +f 541/663/237 540/659/237 604/725/237 605/729/237 2835 +f 542/667/237 541/663/237 605/729/237 606/733/237 2836 +f 543/671/237 542/667/237 606/733/237 607/737/237 2837 +f 544/675/237 543/671/237 607/737/237 608/741/237 2838 +f 545/679/237 544/675/237 608/741/237 609/745/237 2839 +f 546/687/237 545/679/237 609/745/237 610/753/237 2840 +f 547/693/237 546/687/237 610/753/237 611/759/237 2841 +f 548/699/237 547/693/237 611/759/237 612/765/237 2842 +f 549/705/237 548/699/237 612/765/237 613/771/237 2843 +f 518/684/237 549/705/237 613/771/237 582/750/237 2844 +f 620/774/238 619/775/238 651/776/238 652/777/238 2845 +f 634/778/239 633/779/239 665/780/239 666/781/239 2846 +f 621/782/240 620/783/240 652/784/240 653/785/240 2847 +f 635/786/241 634/778/241 666/781/241 667/787/241 2848 +f 622/788/242 621/782/242 653/785/242 654/789/242 2849 +f 636/790/243 635/786/243 667/787/243 668/791/243 2850 +f 623/792/244 622/788/244 654/789/244 655/793/244 2851 +f 637/794/245 636/790/245 668/791/245 669/795/245 2852 +f 624/796/246 623/792/246 655/793/246 656/797/246 2853 +f 638/798/247 637/794/247 669/795/247 670/799/247 2854 +f 625/800/248 624/796/248 656/797/248 657/801/248 2855 +f 639/802/249 638/798/249 670/799/249 671/803/249 2856 +f 626/804/250 625/800/250 657/801/250 658/805/250 2857 +f 640/806/251 639/802/251 671/803/251 672/807/251 2858 +f 627/808/252 626/804/252 658/805/252 659/809/252 2859 +f 641/810/253 640/806/253 672/807/253 673/811/253 2860 +f 628/812/254 627/808/254 659/809/254 660/813/254 2861 +f 615/814/255 614/815/255 646/816/255 647/817/255 2862 +f 642/818/256 641/810/256 673/811/256 674/819/256 2863 +f 629/820/257 628/812/257 660/813/257 661/821/257 2864 +f 616/822/258 615/814/258 647/817/258 648/823/258 2865 +f 643/824/259 642/818/259 674/819/259 675/825/259 2866 +f 630/826/260 629/820/260 661/821/260 662/827/260 2867 +f 617/828/261 616/822/261 648/823/261 649/829/261 2868 +f 644/830/262 643/824/262 675/825/262 676/831/262 2869 +f 631/832/263 630/826/263 662/827/263 663/833/263 2870 +f 618/834/264 617/828/264 649/829/264 650/835/264 2871 +f 645/836/265 644/830/265 676/831/265 677/837/265 2872 +f 632/838/266 631/832/266 663/833/266 664/839/266 2873 +f 619/775/267 618/834/267 650/835/267 651/776/267 2874 +f 614/815/268 645/836/268 677/837/268 646/816/268 2875 +f 633/779/269 632/838/269 664/839/269 665/780/269 2876 +f 684/840/270 716/841/270 715/842/270 683/843/270 2877 +f 698/844/264 730/845/264 729/846/264 697/847/264 2878 +f 685/848/245 717/849/245 716/850/245 684/851/245 2879 +f 699/852/267 731/853/267 730/845/267 698/844/267 2880 +f 686/854/247 718/855/247 717/849/247 685/848/247 2881 +f 700/856/271 732/857/271 731/853/271 699/852/271 2882 +f 687/858/249 719/859/249 718/855/249 686/854/249 2883 +f 701/860/240 733/861/240 732/857/240 700/856/240 2884 +f 688/862/251 720/863/251 719/859/251 687/858/251 2885 +f 702/864/242 734/865/242 733/861/242 701/860/242 2886 +f 689/866/253 721/867/253 720/863/253 688/862/253 2887 +f 703/868/244 735/869/244 734/865/244 702/864/244 2888 +f 690/870/256 722/871/256 721/867/256 689/866/256 2889 +f 704/872/246 736/873/246 735/869/246 703/868/246 2890 +f 691/874/259 723/875/259 722/871/259 690/870/259 2891 +f 705/876/248 737/877/248 736/873/248 704/872/248 2892 +f 692/878/272 724/879/272 723/875/272 691/874/272 2893 +f 679/880/263 711/881/263 710/882/263 678/883/263 2894 +f 706/884/250 738/885/250 737/877/250 705/876/250 2895 +f 693/886/265 725/887/265 724/879/265 692/878/265 2896 +f 680/888/266 712/889/266 711/881/266 679/880/266 2897 +f 707/890/252 739/891/252 738/885/252 706/884/252 2898 +f 694/892/268 726/893/268 725/887/268 693/886/268 2899 +f 681/894/269 713/895/269 712/889/269 680/888/269 2900 +f 708/896/273 740/897/273 739/891/273 707/890/273 2901 +f 695/898/255 727/899/255 726/893/255 694/892/255 2902 +f 682/900/239 714/901/239 713/895/239 681/894/239 2903 +f 709/902/257 741/903/257 740/897/257 708/896/257 2904 +f 696/904/258 728/905/258 727/899/258 695/898/258 2905 +f 683/843/241 715/842/241 714/901/241 682/900/241 2906 +f 678/883/260 710/882/260 741/903/260 709/902/260 2907 +f 697/847/261 729/846/261 728/905/261 696/904/261 2908 +f 614/815/274 615/814/274 679/880/274 678/883/274 2909 +f 615/814/274 616/822/274 680/888/274 679/880/274 2910 +f 616/822/274 617/828/274 681/894/274 680/888/274 2911 +f 617/828/274 618/834/274 682/900/274 681/894/274 2912 +f 618/834/274 619/775/274 683/843/274 682/900/274 2913 +f 619/775/274 620/774/274 684/840/274 683/843/274 2914 +f 620/783/274 621/782/274 685/848/274 684/851/274 2915 +f 621/782/274 622/788/274 686/854/274 685/848/274 2916 +f 622/788/274 623/792/274 687/858/274 686/854/274 2917 +f 623/792/274 624/796/274 688/862/274 687/858/274 2918 +f 624/796/274 625/800/274 689/866/274 688/862/274 2919 +f 625/800/274 626/804/274 690/870/274 689/866/274 2920 +f 626/804/274 627/808/274 691/874/274 690/870/274 2921 +f 627/808/274 628/812/274 692/878/274 691/874/274 2922 +f 628/812/274 629/820/274 693/886/274 692/878/274 2923 +f 629/820/274 630/826/274 694/892/274 693/886/274 2924 +f 630/826/274 631/832/274 695/898/274 694/892/274 2925 +f 631/832/274 632/838/274 696/904/274 695/898/274 2926 +f 632/838/274 633/779/274 697/847/274 696/904/274 2927 +f 633/779/274 634/778/274 698/844/274 697/847/274 2928 +f 634/778/274 635/786/274 699/852/274 698/844/274 2929 +f 635/786/274 636/790/274 700/856/274 699/852/274 2930 +f 636/790/274 637/794/274 701/860/274 700/856/274 2931 +f 637/794/274 638/798/274 702/864/274 701/860/274 2932 +f 638/798/274 639/802/274 703/868/274 702/864/274 2933 +f 639/802/274 640/806/274 704/872/274 703/868/274 2934 +f 640/806/274 641/810/274 705/876/274 704/872/274 2935 +f 641/810/274 642/818/274 706/884/274 705/876/274 2936 +f 642/818/274 643/824/274 707/890/274 706/884/274 2937 +f 643/824/274 644/830/274 708/896/274 707/890/274 2938 +f 644/830/274 645/836/274 709/902/274 708/896/274 2939 +f 645/836/274 614/815/274 678/883/274 709/902/274 2940 +f 647/817/275 646/816/275 710/882/275 711/881/275 2941 +f 648/823/275 647/817/275 711/881/275 712/889/275 2942 +f 649/829/275 648/823/275 712/889/275 713/895/275 2943 +f 650/835/275 649/829/275 713/895/275 714/901/275 2944 +f 651/776/275 650/835/275 714/901/275 715/842/275 2945 +f 652/777/275 651/776/275 715/842/275 716/841/275 2946 +f 653/785/275 652/784/275 716/850/275 717/849/275 2947 +f 654/789/275 653/785/275 717/849/275 718/855/275 2948 +f 655/793/275 654/789/275 718/855/275 719/859/275 2949 +f 656/797/275 655/793/275 719/859/275 720/863/275 2950 +f 657/801/275 656/797/275 720/863/275 721/867/275 2951 +f 658/805/275 657/801/275 721/867/275 722/871/275 2952 +f 659/809/275 658/805/275 722/871/275 723/875/275 2953 +f 660/813/275 659/809/275 723/875/275 724/879/275 2954 +f 661/821/275 660/813/275 724/879/275 725/887/275 2955 +f 662/827/275 661/821/275 725/887/275 726/893/275 2956 +f 663/833/275 662/827/275 726/893/275 727/899/275 2957 +f 664/839/275 663/833/275 727/899/275 728/905/275 2958 +f 665/780/275 664/839/275 728/905/275 729/846/275 2959 +f 666/781/275 665/780/275 729/846/275 730/845/275 2960 +f 667/787/275 666/781/275 730/845/275 731/853/275 2961 +f 668/791/275 667/787/275 731/853/275 732/857/275 2962 +f 669/795/275 668/791/275 732/857/275 733/861/275 2963 +f 670/799/275 669/795/275 733/861/275 734/865/275 2964 +f 671/803/275 670/799/275 734/865/275 735/869/275 2965 +f 672/807/275 671/803/275 735/869/275 736/873/275 2966 +f 673/811/275 672/807/275 736/873/275 737/877/275 2967 +f 674/819/275 673/811/275 737/877/275 738/885/275 2968 +f 675/825/275 674/819/275 738/885/275 739/891/275 2969 +f 676/831/275 675/825/275 739/891/275 740/897/275 2970 +f 677/837/275 676/831/275 740/897/275 741/903/275 2971 +f 646/816/275 677/837/275 741/903/275 710/882/275 2972 +f 748/906/276 747/907/276 779/908/276 780/909/276 2973 +f 762/910/277 761/911/277 793/912/277 794/913/277 2974 +f 749/914/278 748/915/278 780/916/278 781/917/278 2975 +f 763/918/279 762/910/279 794/913/279 795/919/279 2976 +f 750/920/280 749/914/280 781/917/280 782/921/280 2977 +f 764/922/281 763/918/281 795/919/281 796/923/281 2978 +f 751/924/282 750/920/282 782/921/282 783/925/282 2979 +f 765/926/283 764/922/283 796/923/283 797/927/283 2980 +f 752/928/284 751/924/284 783/925/284 784/929/284 2981 +f 766/930/285 765/926/285 797/927/285 798/931/285 2982 +f 753/932/286 752/928/286 784/929/286 785/933/286 2983 +f 767/934/287 766/930/287 798/931/287 799/935/287 2984 +f 754/936/288 753/932/288 785/933/288 786/937/288 2985 +f 768/938/289 767/934/289 799/935/289 800/939/289 2986 +f 755/940/290 754/936/290 786/937/290 787/941/290 2987 +f 769/942/291 768/938/291 800/939/291 801/943/291 2988 +f 756/944/292 755/940/292 787/941/292 788/945/292 2989 +f 743/946/293 742/947/293 774/948/293 775/949/293 2990 +f 770/950/294 769/942/294 801/943/294 802/951/294 2991 +f 757/952/295 756/944/295 788/945/295 789/953/295 2992 +f 744/954/296 743/946/296 775/949/296 776/955/296 2993 +f 771/956/297 770/950/297 802/951/297 803/957/297 2994 +f 758/958/298 757/952/298 789/953/298 790/959/298 2995 +f 745/960/299 744/954/299 776/955/299 777/961/299 2996 +f 772/962/300 771/956/300 803/957/300 804/963/300 2997 +f 759/964/301 758/958/301 790/959/301 791/965/301 2998 +f 746/966/302 745/960/302 777/961/302 778/967/302 2999 +f 773/968/303 772/962/303 804/963/303 805/969/303 3000 +f 760/970/304 759/964/304 791/965/304 792/971/304 3001 +f 747/907/305 746/966/305 778/967/305 779/908/305 3002 +f 742/947/306 773/968/306 805/969/306 774/948/306 3003 +f 761/911/307 760/970/307 792/971/307 793/912/307 3004 +f 812/972/281 844/973/281 843/974/281 811/975/281 3005 +f 826/976/302 858/977/302 857/978/302 825/979/302 3006 +f 813/980/283 845/981/283 844/982/283 812/983/283 3007 +f 827/984/305 859/985/305 858/977/305 826/976/305 3008 +f 814/986/285 846/987/285 845/981/285 813/980/285 3009 +f 828/988/276 860/989/276 859/985/276 827/984/276 3010 +f 815/990/287 847/991/287 846/987/287 814/986/287 3011 +f 829/992/278 861/993/278 860/989/278 828/988/278 3012 +f 816/994/289 848/995/289 847/991/289 815/990/289 3013 +f 830/996/280 862/997/280 861/993/280 829/992/280 3014 +f 817/998/291 849/999/291 848/995/291 816/994/291 3015 +f 831/1000/282 863/1001/282 862/997/282 830/996/282 3016 +f 818/1002/294 850/1003/294 849/999/294 817/998/294 3017 +f 832/1004/284 864/1005/284 863/1001/284 831/1000/284 3018 +f 819/1006/297 851/1007/297 850/1003/297 818/1002/297 3019 +f 833/1008/286 865/1009/286 864/1005/286 832/1004/286 3020 +f 820/1010/300 852/1011/300 851/1007/300 819/1006/300 3021 +f 807/1012/301 839/1013/301 838/1014/301 806/1015/301 3022 +f 834/1016/288 866/1017/288 865/1009/288 833/1008/288 3023 +f 821/1018/303 853/1019/303 852/1011/303 820/1010/303 3024 +f 808/1020/304 840/1021/304 839/1013/304 807/1012/304 3025 +f 835/1022/290 867/1023/290 866/1017/290 834/1016/290 3026 +f 822/1024/306 854/1025/306 853/1019/306 821/1018/306 3027 +f 809/1026/307 841/1027/307 840/1021/307 808/1020/307 3028 +f 836/1028/292 868/1029/292 867/1023/292 835/1022/292 3029 +f 823/1030/293 855/1031/293 854/1025/293 822/1024/293 3030 +f 810/1032/277 842/1033/277 841/1027/277 809/1026/277 3031 +f 837/1034/295 869/1035/295 868/1029/295 836/1028/295 3032 +f 824/1036/296 856/1037/296 855/1031/296 823/1030/296 3033 +f 811/975/279 843/974/279 842/1033/279 810/1032/279 3034 +f 806/1015/298 838/1014/298 869/1035/298 837/1034/298 3035 +f 825/979/299 857/978/299 856/1037/299 824/1036/299 3036 +f 742/947/308 743/946/308 807/1012/308 806/1015/308 3037 +f 743/946/308 744/954/308 808/1020/308 807/1012/308 3038 +f 744/954/308 745/960/308 809/1026/308 808/1020/308 3039 +f 745/960/308 746/966/308 810/1032/308 809/1026/308 3040 +f 746/966/308 747/907/308 811/975/308 810/1032/308 3041 +f 747/907/308 748/906/308 812/972/308 811/975/308 3042 +f 748/915/308 749/914/308 813/980/308 812/983/308 3043 +f 749/914/308 750/920/308 814/986/308 813/980/308 3044 +f 750/920/308 751/924/308 815/990/308 814/986/308 3045 +f 751/924/308 752/928/308 816/994/308 815/990/308 3046 +f 752/928/308 753/932/308 817/998/308 816/994/308 3047 +f 753/932/308 754/936/308 818/1002/308 817/998/308 3048 +f 754/936/308 755/940/308 819/1006/308 818/1002/308 3049 +f 755/940/308 756/944/308 820/1010/308 819/1006/308 3050 +f 756/944/308 757/952/308 821/1018/308 820/1010/308 3051 +f 757/952/308 758/958/308 822/1024/308 821/1018/308 3052 +f 758/958/308 759/964/308 823/1030/308 822/1024/308 3053 +f 759/964/308 760/970/308 824/1036/308 823/1030/308 3054 +f 760/970/308 761/911/308 825/979/308 824/1036/308 3055 +f 761/911/308 762/910/308 826/976/308 825/979/308 3056 +f 762/910/308 763/918/308 827/984/308 826/976/308 3057 +f 763/918/308 764/922/308 828/988/308 827/984/308 3058 +f 764/922/308 765/926/308 829/992/308 828/988/308 3059 +f 765/926/308 766/930/308 830/996/308 829/992/308 3060 +f 766/930/308 767/934/308 831/1000/308 830/996/308 3061 +f 767/934/308 768/938/308 832/1004/308 831/1000/308 3062 +f 768/938/308 769/942/308 833/1008/308 832/1004/308 3063 +f 769/942/308 770/950/308 834/1016/308 833/1008/308 3064 +f 770/950/308 771/956/308 835/1022/308 834/1016/308 3065 +f 771/956/308 772/962/308 836/1028/308 835/1022/308 3066 +f 772/962/308 773/968/308 837/1034/308 836/1028/308 3067 +f 773/968/308 742/947/308 806/1015/308 837/1034/308 3068 +f 775/949/309 774/948/309 838/1014/309 839/1013/309 3069 +f 776/955/309 775/949/309 839/1013/309 840/1021/309 3070 +f 777/961/309 776/955/309 840/1021/309 841/1027/309 3071 +f 778/967/309 777/961/309 841/1027/309 842/1033/309 3072 +f 779/908/309 778/967/309 842/1033/309 843/974/309 3073 +f 780/909/309 779/908/309 843/974/309 844/973/309 3074 +f 781/917/309 780/916/309 844/982/309 845/981/309 3075 +f 782/921/309 781/917/309 845/981/309 846/987/309 3076 +f 783/925/309 782/921/309 846/987/309 847/991/309 3077 +f 784/929/309 783/925/309 847/991/309 848/995/309 3078 +f 785/933/309 784/929/309 848/995/309 849/999/309 3079 +f 786/937/309 785/933/309 849/999/309 850/1003/309 3080 +f 787/941/309 786/937/309 850/1003/309 851/1007/309 3081 +f 788/945/309 787/941/309 851/1007/309 852/1011/309 3082 +f 789/953/309 788/945/309 852/1011/309 853/1019/309 3083 +f 790/959/309 789/953/309 853/1019/309 854/1025/309 3084 +f 791/965/309 790/959/309 854/1025/309 855/1031/309 3085 +f 792/971/309 791/965/309 855/1031/309 856/1037/309 3086 +f 793/912/309 792/971/309 856/1037/309 857/978/309 3087 +f 794/913/309 793/912/309 857/978/309 858/977/309 3088 +f 795/919/309 794/913/309 858/977/309 859/985/309 3089 +f 796/923/309 795/919/309 859/985/309 860/989/309 3090 +f 797/927/309 796/923/309 860/989/309 861/993/309 3091 +f 798/931/309 797/927/309 861/993/309 862/997/309 3092 +f 799/935/309 798/931/309 862/997/309 863/1001/309 3093 +f 800/939/309 799/935/309 863/1001/309 864/1005/309 3094 +f 801/943/309 800/939/309 864/1005/309 865/1009/309 3095 +f 802/951/309 801/943/309 865/1009/309 866/1017/309 3096 +f 803/957/309 802/951/309 866/1017/309 867/1023/309 3097 +f 804/963/309 803/957/309 867/1023/309 868/1029/309 3098 +f 805/969/309 804/963/309 868/1029/309 869/1035/309 3099 +f 774/948/309 805/969/309 869/1035/309 838/1014/309 3100 +o wood 3101 +v -0.354512 -0.038922 -0.198873 3102 +v -0.386499 -0.038922 -0.125890 3103 +v -0.362313 -0.038922 0.184278 3104 +v -0.319401 -0.038922 0.251421 3105 +v 0.354512 -0.038922 0.198873 3106 +v 0.386498 -0.038922 0.125889 3107 +v 0.362313 -0.038922 -0.184279 3108 +v 0.319400 -0.038922 -0.251422 3109 +v -0.406839 -0.038922 -0.228228 3110 +v -0.443547 -0.038922 -0.144472 3111 +v -0.415792 -0.038922 0.211478 3112 +v -0.366545 -0.038922 0.288532 3113 +v 0.406839 -0.038922 0.228227 3114 +v 0.443547 -0.038922 0.144471 3115 +v 0.415792 -0.038922 -0.211479 3116 +v 0.366545 -0.038922 -0.288532 3117 +v -0.386499 -0.500000 -0.125890 3118 +v -0.354512 -0.500000 -0.198873 3119 +v -0.319401 -0.500000 0.251421 3120 +v -0.362313 -0.500000 0.184278 3121 +v 0.386498 -0.500000 0.125889 3122 +v 0.354512 -0.500000 0.198873 3123 +v 0.319400 -0.500000 -0.251422 3124 +v 0.362313 -0.500000 -0.184279 3125 +v -0.443547 -0.500000 -0.144472 3126 +v -0.406839 -0.500000 -0.228228 3127 +v -0.366545 -0.500000 0.288532 3128 +v -0.415792 -0.500000 0.211478 3129 +v 0.443547 -0.500000 0.144471 3130 +v 0.406839 -0.500000 0.228227 3131 +v 0.366545 -0.500000 -0.288532 3132 +v 0.415792 -0.500000 -0.211479 3133 +vt 1.388065 0.664137 3134 +vt 1.486764 0.664137 3135 +vt 0.030939 0.664137 3136 +vt 1.519146 0.664137 3137 +vt -0.486764 0.664137 3138 +vt -0.388064 0.664137 3139 +vt -0.180972 0.664137 3140 +vt -0.632414 0.664137 3141 +vt 1.486764 0.664137 3142 +vt 1.388064 0.664137 3143 +vt 1.180972 0.664137 3144 +vt 1.632414 0.664137 3145 +vt -0.388064 0.664137 3146 +vt -0.486764 0.664137 3147 +vt 0.969060 0.664137 3148 +vt -0.519145 0.664137 3149 +vt 1.632414 -0.547378 3150 +vt 1.486764 -0.547378 3151 +vt -0.519145 0.664137 3152 +vt -0.388064 -0.547378 3153 +vt -0.519145 -0.547378 3154 +vt -0.093386 0.664137 3155 +vt 0.091269 0.664137 3156 +vt 0.091269 -0.547378 3157 +vt -0.093386 -0.547378 3158 +vt 0.030939 0.664137 3159 +vt -0.180972 -0.547378 3160 +vt 0.030939 -0.547378 3161 +vt -0.486764 1.062816 3162 +vt -0.388064 1.247470 3163 +vt -0.519145 1.335056 3164 +vt -0.632414 1.123146 3165 +vt -0.388064 0.060699 3166 +vt -0.486764 0.245354 3167 +vt -0.632414 0.185024 3168 +vt -0.519145 -0.026887 3169 +vt 1.486764 0.245354 3170 +vt 1.388065 0.060700 3171 +vt 1.519146 -0.026887 3172 +vt 1.632414 0.185025 3173 +vt 1.388064 1.247471 3174 +vt 1.486764 1.062817 3175 +vt 1.632414 1.123147 3176 +vt 1.519145 1.335057 3177 +vt 0.969061 0.664137 3178 +vt 1.180972 -0.547378 3179 +vt 0.969061 -0.547378 3180 +vt 1.093386 0.664137 3181 +vt 0.908732 0.664137 3182 +vt 0.908732 -0.547378 3183 +vt 1.093386 -0.547378 3184 +vt 1.519145 0.664137 3185 +vt 1.388064 -0.547378 3186 +vt 1.519145 -0.547378 3187 +vt -0.519145 -0.547378 3188 +vt -0.388064 -0.547378 3189 +vt 1.180971 0.664137 3190 +vt 0.969060 -0.547378 3191 +vt 1.180971 -0.547378 3192 +vt 0.908731 0.664137 3193 +vt 1.093385 0.664137 3194 +vt 1.093385 -0.547378 3195 +vt 0.908731 -0.547378 3196 +vt -0.632414 0.664137 3197 +vt -0.486764 -0.547378 3198 +vt -0.632414 -0.547378 3199 +vt 1.519146 -0.547378 3200 +vt 1.388065 -0.547378 3201 +vt -0.180972 0.664137 3202 +vt 0.030939 -0.547378 3203 +vt -0.180972 -0.547378 3204 +vt 0.091269 0.664137 3205 +vt -0.093385 0.664137 3206 +vt -0.093385 -0.547378 3207 +vt 0.091269 -0.547378 3208 +vt 1.632414 0.664137 3209 +vt 1.486764 -0.547378 3210 +vt 1.632414 -0.547378 3211 +vt -0.632414 -0.547378 3212 +vt -0.486764 -0.547378 3213 +vn 0.0000 -1.0000 -0.0000 3214 +vn -0.4533 0.0000 -0.8913 3215 +vn -0.6185 0.0000 -0.7858 3216 +vn -0.8426 0.0000 0.5385 3217 +vn 0.8426 0.0000 -0.5385 3218 +vn 0.0000 1.0000 0.0000 3219 +vn 0.6185 0.0000 0.7858 3220 +vn -0.4893 0.0000 0.8721 3221 +vn 0.9159 0.0000 0.4014 3222 +vn -0.9159 0.0000 -0.4014 3223 +vn 0.3097 -0.0000 -0.9508 3224 +vn 0.4893 -0.0000 -0.8721 3225 +vn -0.3097 0.0000 0.9508 3226 +vn 0.4533 0.0000 0.8913 3227 +g wood_wood_wood 3228 +usemtl wood 3229 +s off 3230 +f 874/1038/310 875/1039/310 883/1040/310 882/1041/310 3231 +f 872/1042/310 873/1043/310 881/1044/310 880/1045/310 3232 +f 876/1046/310 877/1047/310 885/1048/310 884/1049/310 3233 +f 870/1050/310 871/1051/310 879/1052/310 878/1053/310 3234 +f 876/1046/311 884/1049/311 901/1054/311 893/1055/311 3235 +f 881/1056/312 873/1043/312 888/1057/312 896/1058/312 3236 +f 873/1059/313 872/1060/313 889/1061/313 888/1062/313 3237 +f 880/1063/314 881/1044/314 896/1064/314 897/1065/314 3238 +f 886/1066/315 887/1067/315 895/1068/315 894/1069/315 3239 +f 888/1070/315 889/1071/315 897/1072/315 896/1073/315 3240 +f 890/1074/315 891/1075/315 899/1076/315 898/1077/315 3241 +f 892/1078/315 893/1079/315 901/1080/315 900/1081/315 3242 +f 884/1082/313 885/1048/313 900/1083/313 901/1084/313 3243 +f 877/1085/314 876/1086/314 893/1087/314 892/1088/314 3244 +f 885/1089/316 877/1047/316 892/1090/316 900/1091/316 3245 +f 870/1050/317 878/1053/317 895/1092/317 887/1093/317 3246 +f 878/1094/318 879/1052/318 894/1095/318 895/1096/318 3247 +f 871/1097/319 870/1098/319 887/1099/319 886/1100/319 3248 +f 879/1101/320 871/1051/320 886/1102/320 894/1103/320 3249 +f 874/1038/321 882/1041/321 899/1104/321 891/1105/321 3250 +f 882/1106/319 883/1040/319 898/1107/319 899/1108/319 3251 +f 875/1109/318 874/1110/318 891/1111/318 890/1112/318 3252 +f 883/1113/322 875/1039/322 890/1114/322 898/1115/322 3253 +f 872/1042/323 880/1045/323 897/1116/323 889/1117/323
Modified potions.lua from [6c72918b5d] to [ed6c69759e].
1 1 local u = sorcery.lib 2 -sorcery.data.infusions = {} -- not sure where to put this tbh 3 -sorcery.data.infusion_leftovers = {} 2 +sorcery.registry.mk('infusions',false) 3 +sorcery.registry.mk('residue',false) 4 4 5 5 sorcery.register_potion = function(name,label,desc,color,imgvariant,glow,extra) 6 6 local image = 'sorcery_liquid_'..(imgvariant or 'dull')..'.png' .. 7 7 '^[multiply:'..tostring(color).. 8 8 '^vessels_glass_bottle.png' 9 9 10 - sorcery.data.register.infusion_leftover('sorcery:' .. name, 'vessels:glass_bottle') 10 + sorcery.register.residue.link('sorcery:' .. name, 'vessels:glass_bottle') 11 11 local node = { 12 12 description = color:darken(0.8):bg( 13 13 sorcery.lib.ui.tooltip { 14 14 title = label; 15 15 desc = desc; 16 16 color = color:readable(); 17 17 } ................................................................................ 44 44 node.groups.vessel = 1; 45 45 node.groups.not_in_creative_inventory = 1; 46 46 minetest.register_node("sorcery:"..name, node) 47 47 end 48 48 49 49 sorcery.register_oil = function(name,label,desc,color,imgvariant,extra) 50 50 local image = 'xdecor_bowl.png^(sorcery_oil_' .. (imgvariant or 'dull') .. '.png^[colorize:'..tostring(color)..':140)' 51 - sorcery.data.register.infusion_leftover('sorcery:' .. name, 'xdecor:bowl') 51 + sorcery.register.residue.link('sorcery:' .. name, 'xdecor:bowl') 52 52 extra.description = label; 53 53 extra.inventory_image = image; 54 54 if not extra.groups then extra.groups = {} end 55 55 minetest.register_craftitem('sorcery:' .. name, extra) 56 56 end 57 57 58 58 sorcery.register_potion('blood', 'Blood', 'A bottle of sacrificial blood, imbued\nwith stolen life force', u.color(219,19,14)) 59 59 sorcery.register_potion('potion_water', 'Water Bottle', 'A bottle of plain water', u.color(43,90,162)) 60 60 sorcery.register_potion('holy_water', 'Holy Water','A bottle of consecrated water',u.color(94,138,206),'sparkle',6) 61 61 62 62 local create_infusion_recipe = function(id,potion,default_basis,proto) 63 63 if potion.infusion then 64 - sorcery.data.register.infusion { 64 + sorcery.register.infusions.link { 65 65 infuse = potion.infusion; 66 66 into = potion.basis or default_basis; 67 67 output = 'sorcery:' .. id; 68 68 _proto = proto; 69 69 } 70 70 end 71 71 end 72 72 73 -for n,v in pairs(sorcery.data.potions) do 73 +-- for n,v in pairs(sorcery.data.potions) do 74 +sorcery.register.potions.foreach('sorcery:mknodes',{},function(n,v) 74 75 local color = u.color(v.color) 75 76 local kind = v.style 76 77 local glow = v.glow 77 78 local id = 'potion_' .. string.lower(n) 78 79 local desc = 'A ' .. ((glow and 'glowing ') or '') .. 79 80 'bottle of ' .. string.lower(n) .. 80 81 ((kind == 'sparkle' and ', fiercely bubbling') or '') .. ................................................................................ 84 85 _proto = v; 85 86 groups = { 86 87 sorcery_potion = 1; 87 88 sorcery_magical = 1; 88 89 }; 89 90 }) 90 91 create_infusion_recipe(id,v,'sorcery:potion_serene',{data=v,name=fullname}) 91 -end 92 +end) 92 93 93 -for n,potion in pairs(sorcery.data.draughts) do 94 +-- for n,potion in pairs(sorcery.data.draughts) do 95 +sorcery.register.draughts.foreach('sorcery:mknodes',{},function(n,potion) 94 96 local name = 'draught_' .. n 95 97 local behavior = { 96 98 _proto = potion; 97 99 groups = { 98 100 sorcery_potion = 2; 99 101 sorcery_draught = 1; 100 102 sorcery_magical = 1; ................................................................................ 101 103 sorcery_usable_magic = 1; 102 104 }; 103 105 on_use = function(stack, user, pointat) 104 106 local pproto = stack:get_definition()._proto 105 107 if potion.effect(stack, user, pproto) == false then return nil end 106 108 local meta = stack:get_meta() 107 109 local force = meta:get_int('force'); 110 + local duration = pproto:duration(meta); 108 111 minetest.add_particlespawner { 109 - amount = 200 + (30 * force); 110 - time = pproto:duration(meta); 112 + amount = (7 + (10 * force)) * duration; 113 + time = duration; 111 114 minpos = { x = -0.1; y = 0; z = -0.1; }; 112 115 maxpos = { x = 0.1; y = 2; z = 0.1; }; 113 116 minvel = { x = -0.1; y = 0; z = -0.1; }; 114 117 maxvel = { x = 0.1; y = 0; z = 0.1; }; 115 118 minacc = { x = 0; y = 0.1; z = 0; }; 116 119 maxacc = { x = 0; y = 1; z = 0; }; 117 120 minexptime = 1; ................................................................................ 141 144 sorcery.register_potion(name, fullname, 142 145 potion.desc, 143 146 u.color(potion.color), 144 147 potion.style or 'dull', 145 148 potion.glow or 0, 146 149 behavior) 147 150 create_infusion_recipe(name,potion,'sorcery:potion_luminous',{data=potion,name=fullname}) 148 -end 151 +end) 149 152 150 -for n,elixir in pairs(sorcery.data.elixirs) do 153 +-- for n,elixir in pairs(sorcery.data.elixirs) do 154 +sorcery.register.elixirs.foreach('sorcery:mknodes',{},function(n,elixir) 151 155 local color = u.color(elixir.color) 152 156 local id = 'elixir_' .. string.lower(n) 153 157 local fullname = 'Elixir of ' .. n 154 158 sorcery.register_potion(id, fullname, nil, color, 'dull', false, { 155 159 _proto = elixir; 156 160 groups = { 157 161 sorcery_elixir = 1; 158 162 sorcery_magical = 1; 159 163 }; 160 164 }) 161 165 create_infusion_recipe(id,elixir,'sorcery:potion_misty',{data=elixir,name=fullname}) 162 -end 166 +end) 163 167 164 -for n,v in pairs(sorcery.data.oils) do 168 +-- for n,v in pairs(sorcery.data.oils) do 169 +sorcery.register.oils.foreach('sorcery:mknodes',{},function(n,v) 165 170 local color = u.color(v.color) 166 171 local kind = v.style 167 172 local id = 'oil_' .. n 168 173 n = v.name or u.str.capitalize(n) 169 174 sorcery.register_oil(id, n .. ' Oil', nil, color, kind, { 170 175 groups = { sorcery_oil = 1 }; 171 176 }) 172 -end 177 +end) 173 178 174 -for n,v in pairs(sorcery.data.greases) do 179 +-- for n,v in pairs(sorcery.data.greases) do 180 +sorcery.register.greases.foreach('sorcery:mknodes',{},function(n,v) 175 181 local color = u.color(v.color) 176 182 local kind = v.style 177 183 sorcery.register_oil('grease_' .. n, u.str.capitalize(n) .. ' Grease', nil, color, kind, { 178 184 groups = { sorcery_grease = 1 } 179 185 }) 180 -end 186 +end) 181 187 182 -for n,v in pairs(sorcery.data.philters) do 188 +-- for n,v in pairs(sorcery.data.philters) do 189 +sorcery.register.philters.foreach('sorcery:mknodes',{},function(n,v) 183 190 local color = u.color(v.color) 184 191 local id = 'philter_' .. n 185 192 local name = v.name or u.str.capitalize(n) 186 193 local fullname = name .. ' Philter' 187 194 sorcery.register_potion(id, fullname, v.desc, color, 'sparkle',v.glow or 4, { 188 195 _proto = v; 189 196 _protoname = n; 190 197 groups = { 191 198 sorcery_magical = 1; 192 199 sorcery_philter = 1; 193 200 }; 194 201 }) 195 202 create_infusion_recipe(id,v,'sorcery:potion_viscous',{data=v,name=fullname}) 196 -end 203 +end) 197 204 198 -for n,v in pairs(sorcery.data.extracts) do 205 +-- for n,v in pairs(sorcery.data.extracts) do 206 +sorcery.register.extracts.foreach('sorcery:mknodes',{},function(n,v) 199 207 local item = v[1] 200 208 local color = u.color(v[2]) 201 209 local name = 'extract_' .. n 202 210 sorcery.register_potion(name, u.str.capitalize(n) .. ' Extract', nil, color, 'sparkle', false, { 203 211 groups = { 204 - sorcery_extracts = 1; 212 + sorcery_extract = 1; 205 213 }; 206 214 }) 207 215 208 216 local add_alcohol = function(booze) 209 217 minetest.register_craft { 210 218 type = "shapeless"; 211 219 recipe = { ................................................................................ 220 228 }; 221 229 } 222 230 end 223 231 -- need a relatively pure alcohol for this, tho other alcohols can be used 224 232 -- for potionmaking in other ways 225 233 add_alcohol('farming:bottle_ethanol') 226 234 add_alcohol('wine:glass_vodka') 227 -end 235 +end)
Added precipitator.lua version [74e73185fe].
1 +-- the precipitator is a ley device that takes fluids as input 2 +-- and produces solid outputs in the form of powder. for instance, 3 +-- water can be poured in to precipitate out magnesium(?)
Modified recipes.lua from [b5f23ba87a] to [41529558e5].
648 648 {'group:wood','default:stick','group:wood'}; 649 649 }; 650 650 replacements = { 651 651 {'screwdriver:screwdriver','screwdriver:screwdriver'}; 652 652 }; 653 653 }; 654 654 655 -sorcery.data.register.infusion_leftover('sorcery:ink','vessels:glass_bottle') 656 -sorcery.data.register.infusion_leftover('sorcery:erasure_fluid','vessels:glass_bottle') 655 +sorcery.register.residue.link('sorcery:ink','vessels:glass_bottle') 656 +sorcery.register.residue.link('sorcery:erasure_fluid','vessels:glass_bottle') 657 657 658 658 ---- altar 659 659 minetest.register_craftitem('sorcery:candle', { 660 660 -- TODO make candle node 661 661 inventory_image = 'sorcery_candle.png'; 662 662 description = 'Votive Candle'; 663 663 groups = { ................................................................................ 708 708 recipe = sorcery.lib.tbl.append(recipe, substance.core) 709 709 elseif container then 710 710 recipe[#recipe + 1] = container 711 711 end 712 712 if substance.mix and #substance.mix > 0 then 713 713 recipe = sorcery.lib.tbl.append(recipe, substance.mix) 714 714 for _,r in pairs(substance.mix) do 715 - if sorcery.data.infusion_leftovers[r] then 715 + if sorcery.register.residue.db[r] then 716 716 replace[#replace + 1] = { 717 - r, sorcery.data.infusion_leftovers[r] 717 + r, sorcery.register.residue.db[r] 718 718 } 719 719 end 720 720 end 721 721 end 722 722 723 723 minetest.register_craft { 724 724 type = 'shapeless';
Added registration.lua version [d98f045dad].
1 +if not sorcery then sorcery = {DEBUG=true} end 2 +sorcery.register = {} 3 +sorcery.registry = { 4 + defercheck = function() return true end 5 + -- used to warn about deferments that have not been discharged by a certain threshold 6 +} 7 +sorcery.registry.mk = function(name,db) 8 + local reg = {} 9 + if db == nil then 10 + -- predefined db 11 + db = sorcery.data[name] 12 + elseif db == false then -- auxiliary db, stored in registry itself 13 + reg.db = {} 14 + db = reg.db 15 + end 16 + local dat = { 17 + iters = {}; 18 + state = {}; 19 + defer = {}; 20 + } 21 + reg.invoke = function(fnid,tgtid) 22 + local fno = dat.iters[fnid] 23 + if not fno then return false end 24 + 25 + local runid = fnid .. '@' ..tgtid 26 + if dat.state[runid] then return true end 27 + 28 + if fno.deps then for k,f in pairs(fno.deps) do 29 + if reg.invoke(f,tgtid) == false then return false end 30 + end end 31 + 32 + fno.fn(tgtid, db[tgtid]) 33 + 34 + dat.state[runid] = true 35 + return true 36 + end 37 + reg.foreach = function(ident,deps,fn) 38 + dat.iters[ident] = {deps = deps, fn = fn} 39 + for k in pairs(db) do 40 + if reg.invoke(ident,k) == false then 41 + -- not all dependencies are available 42 + -- to run yet; must defer until then 43 + dat.defer[#dat.defer+1] = ident 44 + return false 45 + end 46 + end 47 + for i,dfn in pairs(dat.defer) do 48 + local deferred = dat.iters[dfn] 49 + for _,d in pairs(deferred.deps) do 50 + if not dat.iters[d] then goto skipdfmt end 51 + end 52 + -- a deferred function can now be run, do so 53 + table.remove(dat.defer,i) 54 + reg.foreach(dfn,deferred.deps,deferred.fn) 55 + ::skipdfmt::end 56 + 57 + return true 58 + end 59 + reg.link = function(key,value) 60 + -- support simple arrays as well as kv stores 61 + if value == nil then 62 + value = key 63 + key = #db+1 64 + end 65 + db[key] = value 66 + for id in pairs(dat.iters) do 67 + reg.invoke(id,key) 68 + end 69 + end 70 + reg.meld = function(tbl) 71 + for k,v in pairs(tbl) do reg.add(k,v) end 72 + end 73 + sorcery.register[name] = reg 74 + 75 + local nextfn = sorcery.registry.defercheck 76 + sorcery.registry.defercheck = function() 77 + if #dat.defer ~= 0 then 78 + print('WARNING: ' .. tostring(#dat.defer) .. ' deferred iterator(s) have not yet been discharged for registry “' .. name .. '”') 79 + local log = sorcery.log and function(text) 80 + sorcery.log('registry',text) 81 + end or print 82 + for i,v in pairs(dat.defer) do 83 + log('\t' .. tostring(i) .. ') ' .. v) 84 + end 85 + log('there is likely a missing dependency or dependency ordering problem. also make sure you have spelled the names of the iterator dependencies correctly') 86 + return false 87 + end 88 + nextfn() 89 + end 90 + return reg 91 +end 92 + 93 +if sorcery.DEBUG then 94 + local function dump(tbl,indent) 95 + indent = indent or 0 96 + local space = string.rep(' ',indent*4) 97 + for k,v in pairs(tbl) do 98 + if type(v) == 'table' then 99 + print(string.format('%s%s = {',space,k)) 100 + dump(v,indent + 1) 101 + print(string.format('%s}', space)) 102 + else 103 + print(string.format('%s%s = %q',space,k,tostring(v))) 104 + end 105 + end 106 + end 107 + 108 + local metals = { 109 + oregonium = {desc = 'Oregonium'}; 110 + nevadite = {desc = 'Nevadite'}; 111 + } 112 + local myreg = sorcery.registry.mk('metals',metals) 113 + 114 + sorcery.register.metals.link('californium', { 115 + desc = "Californium"; 116 + }) 117 + 118 + sorcery.register.metals.foreach('sorcery:mkingot',{'sorcery:mkfrag'}, function(k,v) 119 + local ingot = 'sorcery:' .. k .. '_ingot' 120 + print('registered',ingot) 121 + v.parts = v.parts or {} 122 + v.parts.ingot = ingot; 123 + end) 124 + 125 + sorcery.registry.defercheck() 126 + 127 + sorcery.register.metals.link('washingtonium', { 128 + desc = "Washingtonium"; 129 + }) 130 + 131 + sorcery.register.metals.foreach('sorcery:mkfrag',{}, function(k,v) 132 + local fragment = 'sorcery:' .. k .. '_fragment' 133 + print('registered',fragment) 134 + v.parts = v.parts or {} 135 + v.parts.fragment = fragment; 136 + end) 137 + 138 + sorcery.register.metals.link('biloxite', { 139 + desc = "Biloxite"; 140 + }) 141 + 142 + dump(metals) 143 + if sorcery.registry.defercheck() then 144 + print('lingering deferments!') 145 + else 146 + print('all good!') 147 + end 148 +end
Added sorcery.md version [f0c3989e05].
1 +# sorcery 2 + 3 +`sorcery` is a wide-ranging mod that adds many features, devices, powers, and mechanics to the minetest default game. it aims to add a distinctive cosmology, or world-system, to the game, based around mese, alchemy, spellcasting, and worship. it is intended to be pro-social, lore-flexible, and to interoperate well with other mods wherever possible. 4 + 5 +# dependencies 6 + 7 +## first-party 8 + * default 9 + * stairs 10 + * screwdriver 11 + * vessels 12 + 13 +## third-party 14 + * **xdecor** for various tools and ingredients, especially honey and the hammer 15 + * **basic_materials** for crafting ingredients 16 + * **instant_ores** for ore generation. temporary, will be removed and replaced with home-grown mechanism soon 17 + * **farming redo** for potion ingredients 18 + * **late** for spell, potion, and gravitator effects 19 + * **note**: in order for the gravitator to work, the late condition interval must be lowered from its default of 1.0 to 0.1. this currently can only be done by altering a variable at the top of conditions.lua, though a note in the source suggests a configuration option will be added eventually. hopefully this is so. 20 + 21 +# interoperability 22 +sorcery has special functionality to ensure it can cooperate with various other modules, although they are not required for it to function. 23 + 24 +## xdecor 25 +by default, `sorcery` disables the xdecor enchanter, since `sorcery` offers its own, much more sophisticated enchantment mechanism. however, the two can coexist if you really want; a configuration flag can be used to prevent `sorcery` disabling the xdecor enchanter. 26 + 27 +## hopper 28 +many `sorcery` devices support interactions with the hopper. devices that produce outputs after a period of time like the infuser will automatically inject their output into a hopper if one is placed below it, and if the device has multiple slots, they can usually be accessed by configuring a hopper to insert from the side or from above. 29 + 30 +## others 31 +* if `moreores` is in use, `sorcery` will use its silver rather than creating its own. mithril is not used by `sorcery`. 32 +* `sorcery` will use `new_campfire`'s ash if it's available, otherwise creating its own. 33 + 34 +# lore 35 +`sorcery` supplies a default system of lore (that is, the arbitrary objects that the basic principles of the setting operate over) but this can be augmented or replaced on a per-world basis. for instance, you can substitute your own gods for the Harvest Goddess, Blood God, change their names, and so on, or simply make your own additions to the pantheon. since lore overrides are stored outside the minetest tree, it can be updated without destroying your changes. 36 + 37 +lore is stored separately from the rest of the game logic, in the 'data' directory of the `sorcery` mod. it is arranged in a hierarchy of thematically-organized tables. for instance, the table of gods can be found in data/gods.lua. ideally, lore tables should contain plain data, though they can also contain lambdas if necessary. lore files are evaluated in the second stage of the init process, after library code has been loaded but before any game logic has been instantiated. lore can thus depend on libraries where reasonable (though e.g. colors should be stored as 3-tuples rather than `sorcery.lib.color` objects, and images as texture strings, unless there is a very good reason to do otherwise). 38 + 39 +lore files should never depend on functions in the `minetest` or `core` namespace! if you really need such functionality, gate it off with an if statement and be sure to return something useful in the event that the namespace isn't defined. *lore is just data:* as a general principle, non-minetest code should be able to evaluate and make use of the lore files, for instance to produce an HTML file tabulating the various potions and how to create them. lore should also not mutate the global environment: while there is currently nothing preventing it from doing so, steps will likely be taken in the future to give each lore module a clean environment to keep it from contaminating the global namespace. right now, all functions and variables declared in a lore file should be defined `local`. the only job of a lore file is to return a table. 40 + 41 +`sorcery` looks in a directory called `sorcery` in the world-data directory for world-specific lore and other overrides. below are three example lore modifications to give you a sense for how this system works. 42 + 43 +## replacing the gods 44 +this is probably the most common action you'll want to take -- if your world has its own defined setting and already has its own gods, or you just want to give it a bit of a local flavor, you probably won't want the default pantheon that `sorcery` comes with. 45 + 46 +to do this, we'll need to create a file called `$world/sorcery/lore-gods.lua` where $world is the world's root data directory, e.g. `/srv/mt/geographica` 47 + 48 +``` 49 +-- /srv/mt/geographica/sorcery/lore-gods.lua 50 + 51 +return { 52 + fire = { 53 + name = 'Aduram the Scorching'; 54 + 55 + -- personality 56 + laziness = 3; -- controls how frequently the god takes action upon the mortal world 57 + stinginess = 5; -- the higher the stinginess value, the less frequently the god will give gifts to worshippers 58 + generosity = 7; -- likeliness to overlook disfavored behavior and give items of high value 59 + color = {255,0,0}; 60 + 61 + idol = { 62 + desc = 'Fiery Idol'; 63 + width = 0.5, height = 1; 64 + tex = { ‹list of textures› }; 65 + }; 66 + sacrifice = { 67 + ['tnt:gunpowder'] = 2; -- players can leave gunpowder on his altars to gain 2 points of favor 68 + }; 69 + gifts = { 70 + ['fire:flint'] = {30, 3}; -- one-in-three likelihood of gifting flint at idols that have reached 30 favor 71 + }; 72 + consecrate = { 73 + ['default:steel_ingot'] = {5, 'fire:flint_and_steel'} -- transform steel ingots on his altar into firestarter at a cost of 5 favor 74 + }; 75 + bless = { 76 + potions = { 77 + Force = {favor=70, cost=5, chance=15} -- 1-in-15 chance of applying the Elixir of Force effect to a potion on his altar once the attached idol has reached 30 favor, at a cost of 5 favor 78 + }; 79 + tools = { 80 + speed = {favor=120, cost=25, chance=5} -- apply speed enchantment 81 + }; 82 + } 83 + }; 84 + water = { 85 + name = 'Uskaluth the Drenched'; 86 + ‹···› 87 + }; 88 +} 89 +``` 90 + 91 +when you define gods, be mindful of the personality you wish to create and worship practices you wish to provoke. how attentive must their worshippers be to maintain a useful relationship? how often are sacrifices required? how many sacrifices are necessary before the god will start performing miracles? it's easy to make gods completely overpowered gamebreakers, so be cautious, and don't gift anything terribly valuable -- or if you do, give it very rarely. 92 + 93 +note that you would also need to supply idol models called `sorcery-idol-fire.obj` and `sorcery-idol-water.obj`. gods with the ids `harvest` or `blood` will use predefined idols. 94 + 95 +## adding gods 96 +if you're happy with the default pantheon, but your spiritual life just isn't complete without the fiery rage of Aduram, you can change the name of `sorcery/lore-gods.lua` to `sorcery/lore-gods-extra.lua`. this way, the table it returns will be merged preferentially into the table of default gods. 97 + 98 +## modifying gods 99 +more complex operations can also be performed. let's say the Blood God is ruining your vibe and you want to delete him (her? it?) from the pantheon. or the Harvest Goddess needs a name more in line with your local cosmology. these are both easy: 100 + 101 +``` 102 +-- /srv/mt/geographica/sorcery/lore-gods.lua 103 +local gods = ... 104 +gods.harvest.name = 'Disastra bel-Malphegor' 105 +gods.blood = nil 106 +return gods 107 +``` 108 + 109 +this has the handy property that any changes made upstream to the Harvest Goddess will be respected if you update the mod, without overriding the changes made in lore-gods.lua. 110 + 111 +or, if you want to extract a specific god from the default pantheon and include it with your own: 112 + 113 +``` 114 +-- /srv/mt/geographica/sorcery/lore-gods.lua 115 +local gods = ... 116 +local mygods = dofile('pantheon.lua') 117 +mygods.harvest = gods.harvest 118 +mygods.harvest.name = 'Disastra bel-Malphegor' 119 +return mygods 120 +``` 121 + 122 +## compatibility tables 123 +if you use a mod that neither supports `sorcery` nor is supported by it, the proper solution is of course to open a ticket in the former's bug tracker, but as a quick fix you can also tweak the `sorcery` compatibility tables with a `$world/sorcery/lore-compat.lua` file. 124 + 125 +``` 126 +-- /srv/mt/geographica/sorcery/lore-compat.lua 127 +return sorcery.lib.tbl.deepmerge((...), { 128 + grindables = { 129 + ['bonemeal:bone'] = { 130 + powder = 'bonemeal:bonemeal'; 131 + hardness = 3; 132 + value = 3; 133 + grindcost = 1; 134 + }; 135 + }; 136 +}) 137 +``` 138 + 139 +note that we have to use deepmerge instead of naming the file `lore-compat-extra.lua` and returning a simple table because the init routine only performs a shallow merge, meaning that it would wipe out the entire provided version of `sorcery.data.compat.grindables`! no bueno. 140 + 141 +## local tweaks 142 +if you need to change `sorcery`'s behavior in a way that isn't possible through modifying the lore, you can create a file `$world/sorcery/finalize.lua` which will be run at the end of the init process and which will have access to all of the machinery created by the various modules of the mod. `worldbuilding.lua` is like `finalize.lua` but it is run before any lore is loaded. finally, `bootstrap.lua` will be run before anything else, including library code, is loaded, but after the core `sorcery` structure and its loading functions have been created. 143 + 144 +in the unlikely event that the lore-loading process itself is incompatible with the changes you're trying to make, you can create a `loadlore.lua` file that will be run instead of the usual routine. you'll then be responsible for loading all of the game's lore; the default lore will not even be read! this will be most useful if you're loading or generating your own lore from an unusual source, such as somewhere on the network. 145 + 146 +if you want to write a lore loader but include some of the default lore, you can use the loading function passed to `loadlore.lua`: 147 + 148 +``` 149 +-- /srv/mt/geographica/loadlore.lua 150 +local load_lore, load_module = ... 151 +sorcery.data = dofile('load-remote-lore.lua') 152 +load_lore {'enchants', 'spells'} 153 +``` 154 + 155 +as you can see here, once the lore is loaded, it is stored in the variable `data`. there is a subtle distinction you need to bear in mind: `data` represents the full set of lore-derived information `sorcery` has to work with, which is not necessarily the same as the lore itself. for example, certain modules could generate extra information and attach them to the entries in the `data` table, which can be (and is) written to at runtime. the one invariant that the `data` table should observe is that once a record is added, it may neither be mutated nor removed (though additional sub-records can always be added) -- `sorcery` is not written to handle such eventualities and it may produce anything from glitches to crashes. the term `lore` references specifically the core records stored on disk from which the `data` table is generated, and a `lorepack` is a full, integrated collection of lore. (there are cases where modifying or deleting from `data` may be necessary for a `sorcery`-aware mod, for instance to prevent players from creating a certain default potion, but this is very fraught and you should only ever do it if you thoroughly understand the internals and exactly what you're doing, with the caveat that what works in this version may break the next.) 156 + 157 +# writing sorcery-aware mods 158 +`sorcery` exposes an API that is usable by other mods. to use it, you need to understand a little about how `sorcery` handles lore. local tweaks are simple because they inject changes into the pipeline before `sorcery` makes use of any of the lore. part of the setup stage is the creation of various lore-derived recipes, items, nodes, and so on. so if your mod loads after `sorcery` is finished loading (which it must, if it expects to call into the `sorcery` API), it can't take advantage of the same mechanism that world tweaks can, as it needs to not just insert the data but notify `sorcery` that something has been added so it can create the appropriate objects. 159 + 160 +to handle this complex situation, `sorcery` uses *registers.* a register is set of functions and data used for tracking actions and dependencies between them. registers are automatically created for each lore category, except those specifically excluded by the bootstrapping routine. for instance, the extract register can be found at `sorcery.register.extract`. a register has several functions, only three of which are relevant to you: `link`, `meld`, and `foreach`. 161 + 162 +## link 163 +`link([key,] value)` inserts a new entry into the database the register manages. so to add a new extract for, say, sand, we could call `sorcery.register.extracts.link('sand',{'default:sand',{255,255,0})`. this would insert the record `sand => {'default:sand, {255,255,0}}` into `sorcery.data.extracts`. it would also take all of the actions that would have been taken if the entry had been present in `sorcery.data.extracts` when the `sorcery` mod bootstrapped itself. 164 + 165 +``` 166 +sorcery.register.infusion.link { 167 + infuse = 'farming:sugar'; 168 + into = 'sorcery:potion_serene'; 169 + output = 'mymod:sweet_potion'; 170 +} 171 +sorcery.register.residue.link('farming:sugar','sorcery:ash') 172 +``` 173 + 174 +this will permit use of the infuser to create a **Sweet Potion** (presumably defined by your own mod) by infusing **sugar** into a **Serene Potion**, leaving behind **ash**. 175 + 176 +new alloys can also be registered for use with the smelter: 177 + 178 +``` 179 +sorcery.register.alloys.link { 180 + output = { 181 + [1] = 'mymod:excelsium_fragment'; 182 + [4] = 'mymod:excelsium_ingot'; 183 + [4 * 9] = 'mymod:excelsium_block'; 184 + }; 185 + cooktime = 69; 186 + metals = { 187 + lithium = 1; 188 + silver = 4; 189 + aluminum = 4; 190 + }; 191 +} 192 +``` 193 + 194 +this defines an alloy called Excelsium that can be produced by mixing four parts silver, four parts aluminum, and one part lithium -- e.g. one lithium fragment, one aluminum ingot, and one silver ingot. `metals` must specify metals registered with the `sorcery` mod; `output` can be either the name of a registered metal or a table of items and part-values that can be produced. at least output[1] must always be present! 195 + 196 +the kiln is not currently functional, but once it is, it will be possible to create kiln recipes with the `sorcery.register.kilnrecs.link` function. 197 + 198 +## foreach 199 +`foreach(id,deps,fn)` should be called for any registration actions that need to take place for a registry's contents. let's say you want to create a container than holds large volumes of an extract, like an extract keg. to do this, you'd need to create a node for each extract. but you can't just iterate `sorcery.data.extracts` because new extracts might be added long after your code is run. the solution is `foreach`: you give it an identifier, a list of dependency identifiers, and a function, and it then ensures that function will be called once for everything that winds up in `sorcery.data.extracts`. 200 + 201 +it is crucial to understand the difference between a data `for` loop and registry `foreach`, because they are not interchangeable. a function passed to `foreach` may be called immediately, ten minutes later, both, or never (if there are missing dependencies). for instance, you cannot write a function that uses `foreach` to tally the mass of all metals, because it would run whenever a new metal was created, long after your function had stopped running, and it would only run once ever for each metal. in that case, you would need to use `for`. 202 + 203 +let's consider our keg storage mod. we would want to create several things: first, the individual per-extract keg nodes; second, a node that takes an empty keg and, say, 99 of an extract, and transforms them into an extract keg. to register the kegs, we might use code like 204 + 205 +``` 206 +minetest.register_node('keg:empty', { description = 'Empty Keg'; ‹···›}) 207 +sorcery.register.extracts.foreach('keg:generate',{},function(name,data) 208 + minetest.register_node('keg:extract_' .. name, { 209 + description = sorcery.lib.str.capitalize(name) .. ' Extract Keg'; 210 + color = sorcery.lib.color(data[2]):hex(); 211 + ‹···› 212 + }) 213 +end) 214 +``` 215 + 216 +but in the on_metadata_inventory_put code for keg-filling node, to identify the proper keg, we might instead use code like 217 + 218 +``` 219 +local inv = minetest.get_meta(pos):get_inventory() 220 +local fluid = inv:get_stack('fluid',1) 221 +if fluid:get_count() < 99 then return end 222 + 223 +local fname = fluid:get_name() 224 +if minetest.get_item_group(fname, 'sorcery_extract') ~= 0 then 225 + for k,v in pairs(sorcery.data.extracts) 226 + if fname == 'sorcery:extract_' .. k then 227 + inv:set_stack('preview',1,ItemStack('keg:extract_' .. k)) 228 + return 229 + end 230 + end 231 +end 232 +``` 233 + 234 +`foreach` could NOT be used in this case. 235 + 236 +every time you register a `foreach`, you need to give it a unique identifier and list its dependencies. the identifier need only be unique among functions linked to that specific registry. dependencies are used so that when new items are linked to a registry, the queued functions are executed in the correct order. for instance, if you had a foreach function in the extracts registry that modified the definition table of the keg nodes, you would need to list `'keg:generate'` in its dependency array. 237 + 238 +spelling dependencies correctly is crucial. if you call `foreach` with the name of a dependency that is not yet known to the registry, it will not be executed until that dependency is added. so if you misspell a dependency, the `foreach` function you add will never execute! 239 + 240 +it's helpful therefore to insert calls to `sorcery.registry.defercheck()` at code boundaries, e.g. the end of your init file. this will print a warning to the logs and return false if there are any deferred iterators that have not yet been run. otherwise it will silently return true. `sorcery` checks its own iterators this way. 241 + 242 +## meld 243 +registries also have the `meld(tbl)` convenience function, which is useful if you have a `sorcery`-like lore table you want to merge in, say a table of metals your mod adds. in this case, you could simply call `sorcery.register.metals.meld(mymod.data.metals)` instead of faffing around with for loops. 244 + 245 +## creating registries 246 +you're not restricted to the registries already in existence. you can create registries of your own with the function `sorcery.registry.mk(name[,db])`. this will create (or overwrite!) registries in the `sorcery.register` table, and return a reference to that registry. the db argument can be absent, in which case it will look for a database under `sorcery.data[name]` or fail if one cannot be found. this will generally not be what you want if you're using it from another mod, so you'll want to either pass a reference to an existing table under your control, or the argument `false` which will tell `mk` to create a store in the registry itself under the table `db`, which is useful for ephemeral data that is generated entirely at runtime from existing lore entries like alloys or infusion residue.
Modified wands.lua from [a570130d91] to [2dc21e25ed].
32 32 }; 33 33 }; 34 34 core = { 35 35 obsidian = { 36 36 item = 'default:obsidian_shard'; 37 37 sturdiness = 1.5; 38 38 }; 39 + diamond = { 40 + item = 'sorcery:shard_diamond'; 41 + sturdiness = 1.7; 42 + reliability = 0.75; 43 + }; 44 + mese = { 45 + item = 'default:mese_fragment'; 46 + generate = 2; 47 + }; 39 48 cobalt = { 40 49 item = 'sorcery:powder_cobalt'; 41 50 power = 1.4; 42 51 }; 43 52 iridium = { 44 53 item = 'sorcery:powder_iridium'; 45 54 sturdiness = 1.25; ................................................................................ 368 377 after_dig_node = function(pos,node,meta,digger) 369 378 local stack = meta.inventory.wand[1] 370 379 if stack and not stack:is_empty() then 371 380 -- luv 2 defensive coding 372 381 minetest.add_item(pos, stack) 373 382 end 374 383 end; 384 + groups = { 385 + not_in_creative_inventory = 1; 386 + sorcery_wand_stand = 1; 387 + choppy = 2; 388 + oddly_breakable_by_hand = 2; 389 + }; 375 390 on_rightclick = function(pos,node,user,stack) 376 391 local meta = minetest.get_meta(pos) 377 392 local stand = meta:get_inventory() 378 393 local wand = stand:get_stack('wand',1) 379 394 if stack:is_empty() then 380 395 stack = wand 381 396 else ................................................................................ 698 713 "default_aspen_wood.png"; 699 714 "sorcery_wandworking_station_side.png"; 700 715 } 701 716 local base = { 702 717 description = "Wandworking Station"; 703 718 groups = { 704 719 choppy = 2; 720 + not_in_creative_inventory = water and 1 or nil; 705 721 }; 706 722 paramtype2 = 'facedir'; 707 723 on_construct = function(pos) 708 724 local meta = minetest.get_meta(pos) 709 725 local inv = meta:get_inventory() 710 726 inv:set_size('tank',4) 711 727 inv:set_size('input',1)