Comment: | optimize pngs, finish spellshatter spell, tweak rune forge algorithm to be more fair & reasonable, new spell-casting vfx |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
cb09c77754a372126ba17fca4047463a |
User & Date: | lexi on 2021-07-31 19:13:12 |
Other Links: | manifest | tags |
2021-08-01
| ||
13:42 | remove debug statements >_< check-in: de7d27795b user: lexi tags: trunk | |
2021-07-31
| ||
19:13 | optimize pngs, finish spellshatter spell, tweak rune forge algorithm to be more fair & reasonable, new spell-casting vfx check-in: cb09c77754 user: lexi tags: trunk | |
2021-07-24
| ||
01:01 | add beds, external lights, fix various glitches check-in: d44d0ac782 user: lexi tags: trunk | |
Modified data/runes.lua from [67a4930ba7] to [4936c92bc2].
1 1 -- a rune is an abstract object created by a runeforge, which can be 2 2 -- applied to an amulet in order to imbue that amulet with unique 3 3 -- and fearsome powers. the specific spell depends on the stone the 4 4 -- rune is applied to, and not all runes can necessarily be applied 5 5 -- to all stones. 6 6 7 +local L = sorcery.lib 7 8 local sparkle_region = function(s) 8 9 s.spell.visual_subjects { 9 10 amount = s.amt, time = s.time, -- attached = s; 10 11 minpos = s.minpos; 11 12 maxpos = s.maxpos; 12 13 minvel = { x = -0.4, y = -0.2, z = -0.4 }; 13 14 maxvel = { x = 0.4, y = 0.2, z = 0.4 }; ................................................................................ 122 123 sorcery.spell.disjoin{target=target} 123 124 end 124 125 125 126 return { 126 127 translocate = { 127 128 name = 'Translocate'; 128 129 tone = {0,235,233}; 129 - minpower = 3; 130 - rarity = 7; 130 + minpower = 2; 131 + rarity = 8; 131 132 amulets = { 132 133 amethyst = { 133 134 name = 'Joining'; 134 135 desc = 'Give this amulet to another and with a snap of their fingers they can arrive safely at your side from anywhere in the world — though returning whence they came may be a more difficult matter'; 135 136 apply = function(ctx) 136 137 local maker = ctx.user:get_player_name() 137 138 ctx.meta:set_string('rune_join_target',maker) ................................................................................ 408 409 }; 409 410 }; 410 411 }; 411 412 disjoin = { 412 413 name = 'Disjoin'; 413 414 tone = {159,235,0}; 414 415 minpower = 4; 415 - rarity = 34; 416 + rarity = 10; 416 417 amulets = { 417 418 sapphire = { 418 419 name = 'Unsealing'; 419 420 desc = 'Wielding this amulet, a touch of your hand will unravel even the mightiest protective magics, leaving doors unsealed and walls free to tear down'; 421 + sound = 'sorcery_disjoin'; 420 422 cast = function(ctx) 421 423 if ctx.target.type ~= 'node' then return false end 422 424 local r = 2 + math.floor(ctx.stats.power / 2) 423 425 local cast = false 424 426 for x = -r,r do 425 427 for y = -r,r do 426 428 for z = -r,r do ................................................................................ 442 444 end 443 445 return cast 444 446 end; 445 447 }; 446 448 amethyst = { 447 449 name = 'Purging'; 448 450 desc = 'Free yourself from the grip of any malicious spellwork with a snap of your fingers — interrupting all of your own active spells in the process, including impending translocations'; 451 + sound = 'sorcery_disjoin'; 449 452 cast = function(ctx) purge(ctx.caster) end; 450 453 }; 451 454 emerald = { 452 455 name = 'Disjunction Field'; 453 456 desc = 'Render an area totally opaque to spellwork for a period of time, disrupting any existing spells and preventing further spellcasting therein'; 457 + sound = 'sorcery_disjoin'; 454 458 }; 455 459 ruby = { 456 460 name = 'Disjunction'; 457 461 desc = 'Wield this amulet against a spellcaster to disrupt and abort all their spells in progress, perhaps to trap a foe intent on translocating away, or unleash its force upon the victim of a malign hex to free them from its clutches'; 458 462 mingrade = 3; 463 + sound = 'sorcery_disjoin'; 459 464 cast = function(ctx) 460 465 if ctx.target.type == 'object' 461 466 then purge(ctx.target.ref) 462 467 else return false 463 468 end 464 469 end; 465 470 frame = { ................................................................................ 469 474 desc = 'Not only will your victim\'s spells be nullified, but all enchanted objects they carry will be stripped of their power — or possibly even destroyed outright'; 470 475 }; 471 476 }; 472 477 }; 473 478 luxite = { 474 479 name = 'Disjunctive Aura'; 475 480 desc = 'For a time, all magic undertaken in your vicinity will fail totally — including your own'; 481 + sound = 'sorcery_disjoin'; 476 482 cast = function(ctx) 477 483 local h = ctx.heading.eyeheight*1.1 478 484 sorcery.spell.cast { 479 485 name = 'sorcery:disjunctive-aura'; 480 486 caster = ctx.caster, attach = 'caster'; 481 487 subjects = {{player=ctx.caster}}; 482 488 disjunction = true, range = 4 + ctx.stats.power; ................................................................................ 510 516 minpos = { x = 0-range, y = -0.5, z = 0-range }; 511 517 maxpos = { x = range, y = h, z = range }; 512 518 img = sorcery.lib.image('sorcery_flicker.png'):glow(sorcery.lib.color(120,255,30)); 513 519 } 514 520 end; 515 521 }; 516 522 sounds = { 517 - [0.00] = {sound='sorcery_disjoin', where='caster'}; 523 + -- [0.00] = {sound='sorcery_disjoin', where='caster'}; 518 524 [{whence=0,secs=0.8}] = { 519 525 sound='sorcery_disjoin_bg', where='subjects'; 520 526 gain=0.5, stop = {whence=1,secs=-1.5} 521 527 }; 522 528 [1.00] = {sound='sorcery_powerdown', where='caster'}; 523 529 }; 524 530 } 525 531 end 526 532 }; 527 533 diamond = { 528 534 name = 'Mundanity'; 529 535 desc = 'Strip away the effects of all active potions and spells in your immediate vicinity, leaving adversaries without their magicks to enhance and protect them, and allies free of any curses they may be hobbled by -- and, of course, vice versa'; 536 + sound = 'sorcery_disjoin'; 530 537 cast = function(ctx) 531 538 local where = ctx.caster:get_pos() 532 539 local what = minetest.get_objects_inside_radius(where, 3 + (2*ctx.stats.power)) 533 540 local who = {} 534 541 local pfac = math.min(1, ctx.stats.power/8) 535 542 for _, w in pairs(what) do 536 543 if w:is_player() and w ~= ctx.caster then ................................................................................ 623 630 }; 624 631 } 625 632 end; 626 633 frame = { 627 634 iridium = { 628 635 name = 'Spellshatter'; 629 636 desc = 'Blast out a tidal wave of anti-magic that will nullify active spells, but also disenchant or destroy all magical items in range of its violently mundane grip'; 637 + sound = 'sorcery_disjoin'; 630 638 cast = function(ctx) 631 639 local where = ctx.caster:get_pos() 632 640 local radius = 3 + (2*ctx.stats.power) 633 641 local what = minetest.get_objects_inside_radius(where, radius) 634 642 local who = {} 635 643 local pfac = math.min(1, ctx.stats.power/8) 636 644 for _, w in pairs(what) do ................................................................................ 685 693 minsize = 0.7, maxsize = 2; 686 694 animation = { 687 695 type = 'vertical_frames', length = (21/6) + 0.1; 688 696 aspect_w = 16, aspect_h = 16; 689 697 } 690 698 } 691 699 end; 700 + }; 701 + sounds = { 702 + [{whence=0,secs=0.8}] = { 703 + sound='sorcery_disjoin_bg', where=where; 704 + gain=0.5, stop = {whence=1,secs=-0.6} 705 + }; 692 706 }; 693 707 intervals = { 694 708 {period = 0.1, after = 0.15, fn = function(c) 695 709 for i = 1,80 do 696 710 local life = 0.2 + math.random() * 2 697 711 local dir = vector.new(math.random()-0.5,0,math.random()-0.5):normalize() 698 712 local pos = epicenter + (dir * (math.random()*radius)) ................................................................................ 709 723 } 710 724 } 711 725 end 712 726 if next(wreck) then 713 727 local k,p = sorcery.lib.tbl.pick(wreck) 714 728 715 729 minetest.add_particle { 716 - texture = sorcery.lib.image('sorcery_sparking.png'):glow(sorcery.lib.color(255,0,0)):render(); 730 + texture = L.image('sorcery_sparking.png'):glow(L.color(0,255,0)):render(); 717 731 pos = vector.offset(p,math.random(),math.random(),math.random()); 718 732 expirationtime = 1; 719 733 size = 5 + math.random() * 4; 720 734 glow = 14; 721 735 animation = { 722 736 type = 'vertical_frames', length = 0.3; 723 737 aspect_w = 64, aspect_h = 64; 724 738 } 725 739 } 726 740 minetest.add_particle { 727 - texture = sorcery.lib.image('sorcery_crackle.png'):glow(sorcery.lib.color(255,0,0)):render(); 741 + texture = L.image('sorcery_crackle.png'):glow(L.color(0,255,0)):render(); 728 742 pos = vector.offset(p,math.random(),math.random(),math.random()); 729 743 expirationtime = 1; 730 744 size = 4 + math.random() * 6; 731 745 glow = 14; 732 746 animation = { 733 - type = 'vertical_frames', length = 0.6; 747 + type = 'vertical_frames', length = 1.1; 734 748 aspect_w = 64, aspect_h = 64; 735 749 } 736 750 } 751 + if math.random(1,7) == 1 then 752 + minetest.sound_play('sorcery_' .. (math.random(1,2)==1 and 'rip' or 'crunch'), { 753 + pos = p; 754 + gain = math.random(5,13)*0.1; 755 + }, true) 756 + minetest.after(0.2, function() minetest.remove_node(p) end) 757 + sorcery.vfx.show { 758 + amount = 120, time = 0.3; 759 + kind = 'flicker', color = L.color(80,255,10);--(255,12,0); 760 + pos = p, radius = 0.4; 761 + velrange = 1, accrange = vector.new(0.0,0.2,0.0); 762 + minsize = 5, maxsize = 20; 763 + life = 0.6, varylife = 0.1; 764 + } 765 + sorcery.vfx.show { 766 + amount = 80, time = 0.2; 767 + minsize = 0.1, maxsize = 0.8; 768 + pos = p, radius = 0.6; 769 + node = minetest.get_node(p); 770 + vel = vector.new(0,7,0); 771 + velrange = vector.new(2, 4, 2); 772 + acc = vector.new(0,-9,0); 773 + life = 3, varylife = 0.4; 774 + } 775 + -- minetest.add_particlespawner { 776 + -- amount = 60, time = 0.2; 777 + -- texture = L.image('sorcery_flicker.png'):glow():render(); 778 + -- minpos = vector.offset(p, -0.5, -0.5, -0.5); 779 + -- maxpos = vector.offset(p, 0.5, 0.5, 0.5); 780 + -- minacc = vector.new(0.0, -0.2, 0.0); 781 + -- maxacc = vector.new(0.0, 0.2, 0.0); 782 + -- minvel = vector.new(-1,-1,-1); 783 + -- maxvel = vector.new(1,1,1); 784 + -- minsize = 0.5, maxsize = 4; 785 + -- minexptime = 0.6, maxexptime = 0.7; 786 + -- animation = { 787 + -- type = 'vertical_frames'; 788 + -- aspect_w = 16, aspect_h = 16; 789 + -- length = 0.8; 790 + -- } 791 + -- } 792 + table.remove(wreck,k) 793 + end 737 794 end 738 795 end}; 739 796 }; 740 797 } 741 798 end; 742 799 }; 743 800 }; ................................................................................ 744 801 }; 745 802 } 746 803 }; 747 804 repulse = { 748 805 name = 'Repulse'; 749 806 tone = {0,180,235}; 750 807 minpower = 1; 751 - rarity = 5; 808 + rarity = 7; 752 809 amulets = { 753 810 amethyst = { 754 811 name = 'Hurling'; 755 812 desc = 'Wielding this amulet, a mere flick of your fingers will lift any target of your choice bodily into the air and press upon them with tremendous repulsive force, throwing them like a hapless ragdoll out of your path'; 756 813 cast = function(ctx) 757 814 if not (ctx.target and ctx.target.type == 'object') then return false end 758 815 local tgt = ctx.target.ref 759 816 local line = vector.subtract(ctx.caster:get_pos(), tgt:get_pos()) 760 817 -- direction vector from target to caster 761 818 local dir,mag = sorcery.lib.math.vsep(line) 762 819 if mag > 6 then return false end -- no cheating! 763 820 local force = 20 + (ctx.stats.power * 2.5) 764 - minetest.sound_play('sorcery_hurl',{pos=tgt:get_pos()},true) 765 - local immortal = tgt:get_luaentity():get_armor_groups().immortal or 0 821 + minetest.sound_play('sorcery_slide',{pos=tgt:get_pos()},true) 822 + local immortal = 0 823 + -- if tgt and tgt.get_armor_groups then 824 + immortal = tgt:get_armor_groups().immortal or 0 825 + -- end 766 826 if minetest.is_player(tgt) or immortal == 0 then 767 827 tgt:punch(ctx.caster, 1, { 768 828 full_punch_interval = 1; 769 829 damage_groups = { fleshy = force / 10 }; 770 830 }) 771 831 end 772 832 sparktrail(nil,tgt,sorcery.lib.color(101,226,255)) ................................................................................ 798 858 end; 799 859 [{whence=0, secs=1}] = function(s) 800 860 s.affect { 801 861 duration = power * 0.50; 802 862 raise = 0.5; 803 863 -- fall = (power * 0.25) * 0.3; 804 864 impacts = { 805 - gravity = 0.1; 865 + gravity = 0.2; 806 866 }; 807 867 } 808 868 end; 809 869 }; 810 870 intervals = { 811 871 {period = 0.2, after = {whence=0, secs=2}; fn = function(c) 812 872 -- return gravity to normal once they touch down ................................................................................ 864 924 for _,sub in pairs(s.subjects) do 865 925 sub.player:add_velocity{y=-power*2;x=0,z=0} 866 926 end 867 927 end or nil; 868 928 }; 869 929 sounds = { 870 930 [0.3] = { 871 - sound = 'sorcery_hurl'; 931 + sound = 'sorcery_slide'; 872 932 where = 'subjects'; 873 933 ephemeral = true; 874 934 }; 875 935 [1] = (ctx.amulet.frame == 'cobalt') and { 876 936 sound = 'sorcery_hurl'; 877 937 where = 'subjects'; 878 938 ephemeral = true; ................................................................................ 904 964 desc = 'Unleash a tidal wave of force in every direction, blasting friends and foes alike away from you with enough violence to sprain and fracture bone'; 905 965 }; 906 966 }; 907 967 }; 908 968 obliterate = { 909 969 name = 'Obliterate'; 910 970 tone = {255,0,10}; 911 - minpower = 5; 912 - rarity = 30; 971 + minpower = 4; 972 + rarity = 10; 913 973 amulets = { 914 974 amethyst = { 915 975 name = 'Sapping'; 916 976 desc = 'Punch a hole in enemy fortifications big enough to slip through but small enough to avoid immediate attention'; 917 977 }; 918 978 ruby = { 919 979 name = 'Shattering'; ................................................................................ 963 1023 }; 964 1024 }; 965 1025 }; 966 1026 }; 967 1027 excavate = { 968 1028 name = 'Excavate'; 969 1029 tone = {0,68,235}; 970 - minpower = 3; 971 - rarity = 17; 1030 + minpower = 2; 1031 + rarity = 9; 972 1032 amulets = { 973 1033 luxite = { 974 1034 name = 'Stonestride'; 975 1035 desc = 'Rock walls will open up before you when you brandish this amulet before them, closing up again behind you without leaving a trace of your passage'; 976 1036 }; 977 1037 sapphire = { 978 1038 name = 'Tunnelling'; ................................................................................ 1091 1151 desc = 'Cut a wide shaft up into the ceiling of a cavern'; 1092 1152 }; 1093 1153 }; 1094 1154 }; 1095 1155 genesis = { 1096 1156 name = 'Genesis'; 1097 1157 tone = {235,0,175}; 1098 - minpower = 5; 1099 - rarity = 23; 1158 + minpower = 3; 1159 + rarity = 12; 1100 1160 amulets = { 1101 1161 amethyst = { 1102 1162 name = 'Shelter'; 1103 1163 desc = 'Pour the power of this amulet into the soil or sand and out will grow a warm and well-lit place of shelter, no matter how far you may be from civilization.'; 1104 1164 cast = function(ctx) 1105 1165 local ctr = ctx.caster:get_pos() 1106 1166 local dim = { rmax = 2 + 6 * (ctx.stats.power*0.1) } ................................................................................ 1710 1770 }; 1711 1771 }; 1712 1772 }; 1713 1773 }; 1714 1774 dominate = { 1715 1775 name = 'Dominate'; 1716 1776 tone = {235,0,228}; 1717 - minpower = 4; 1718 - rarity = 13; 1777 + minpower = 3; 1778 + rarity = 12; 1719 1779 amulets = { 1720 1780 amethyst = { 1721 1781 name = 'Suffocation'; 1722 1782 desc = 'Wrap this spell tightly around your victim\'s throat, cutting off their oxygen until you release them.'; 1723 1783 }; 1724 1784 emerald = { 1725 1785 name = 'Caging';
Modified gems.lua from [7d79adb54e] to [3215634528].
87 87 pos = user:get_pos(); 88 88 yaw = user:get_look_dir(); 89 89 pitch = user:get_look_vertical(); 90 90 angle = user:get_look_horizontal(); 91 91 eyeheight = user:get_properties().eye_height; 92 92 }; 93 93 94 - sound = "xdecor_enchanting"; --FIXME make own sounds 94 + sound = sp.sound or "xdecor_enchanting"; --FIXME make own sounds 95 95 sparkle = true; 96 96 } 97 97 local res = sp.cast(ctx) 98 98 99 - if res == nil or res == true then 99 + if res == nil or res == true and ctx.sound then 100 100 minetest.sound_play(ctx.sound, { 101 101 pos = user:get_pos(); 102 102 gain = 1; 103 103 }) 104 104 end 105 105 if ctx.sparkle then 106 - sorcery.vfx.cast_sparkle(user, ctx.color, stats.power,0.5) 106 + sorcery.vfx.cast_sparkle(user, ctx.color, stats.power,0.2) 107 107 end 108 108 local infinirune = minetest.check_player_privs(user, 'sorcery:infinirune') 109 109 if res == nil then 110 110 if not infinirune then sorcery.amulet.setrune(usedamulet) end 111 111 end 112 112 113 113 if stack:get_count() == 1 then ................................................................................ 164 164 recipe = { 165 165 {amuletname}; 166 166 {disc}; 167 167 -- {'', frag,''}; 168 168 -- {frag,amuletname,frag}; 169 169 -- {'', frag,''}; 170 170 }; 171 + } 172 + minetest.register_craft { 173 + output = amuletname; 174 + type = 'shapeless'; 175 + recipe = { framedid, 'xdecor:hammer'; }; 176 + replacements = { 177 + {'xdecor:hammer', 'xdecor:hammer'}; 178 + {framedid, disc}; 179 + }; 171 180 } 172 181 end) 173 182 end 174 183 minetest.register_craft { 175 184 type = 'shapeless'; 176 185 recipe = (minetest.get_modpath('xdecor') and { 177 186 'xdecor:hammer', itemname;
Modified runeforge.lua from [b7d5d6135c] to [dd6f797d8b].
2 2 -- to generate runes and that wears down over time, to make amulets more 3 3 -- expensive than they currently are? the existing system is neat but 4 4 -- i think amulets are a little overpowered for something that just 5 5 -- passively consumes ley-current 6 6 -- -- are phials & rune-wrenches enough for this now? 7 7 8 8 local constants = { 9 - rune_mine_interval = 240; 9 + rune_mine_interval = 180; 10 10 -- how often a powered forge rolls for new runes 11 11 12 12 rune_cache_max = 6; 13 13 -- how many runes a runeforge can hold at a time 14 14 15 15 rune_grades = {'Fragile', 'Weak', 'Ordinary', 'Pristine', 'Sublime'}; 16 16 -- how many grades of rune quality/power there are ................................................................................ 40 40 }; 41 41 } 42 42 local calc_phial_props = function(phial) --> mine interval: float, power factor: float 43 43 local m = phial:get_meta() 44 44 local g = phial:get_definition()._proto.data.grade 45 45 local i = constants.rune_mine_interval 46 46 local fac = (g-1) / 5 47 - fac = fac + 0.2 * m:get_int('speed') 47 + fac = fac + 0.1 * m:get_int('speed') 48 48 return math.max(3,i - ((i*0.5) * fac)), 0.5 * fac 49 49 end 50 50 sorcery.register.runes.foreach('sorcery:generate',{},function(name,rune) 51 51 local id = 'sorcery:rune_' .. name 52 52 rune.image = rune.image or string.format('sorcery_rune_%s.png',name) 53 53 rune.item = id 54 54 local c = sorcery.lib.color(rune.tone) ................................................................................ 226 226 local proto = stack:get_definition()._sorcery.amulet 227 227 if not m:contains('amulet_rune') then return nil end 228 228 local rune = m:get_string('amulet_rune') 229 229 local rg = m:get_int('amulet_rune_grade') 230 230 local rd = sorcery.data.runes[rune] 231 231 local spell = rd.amulets[proto.base] 232 232 if not spell then return nil end 233 - local title,desc,cast,apply,remove,mingrade = spell.name, spell.desc, spell.cast, spell.apply, spell.remove, spell.mingrade -- FIXME in serious need of refactoring 233 + local title,desc,cast,apply,remove,mingrade,sound = spell.name, spell.desc, spell.cast, spell.apply, spell.remove, spell.mingrade,spell.sound -- FIXME in serious need of refactoring 234 234 local base_spell = true 235 235 236 236 if proto.frame and spell.frame and spell.frame[proto.frame] then 237 237 local sp = spell.frame[proto.frame] 238 238 if not sp.mingrade or rg >= sp.mingrade then 239 239 title = sp.name or title 240 240 desc = sp.desc or desc 241 241 cast = sp.cast or cast 242 242 apply = sp.apply or apply 243 243 remove = sp.remove or remove 244 244 mingrade = sp.mingrade or mingrade 245 + sound = sp.sound or sound 245 246 base_spell = false 246 247 end 247 248 end 248 249 250 + -- PLEASE, GOD, REFACTOR ME 249 251 return { 250 252 rune = rune, grade = rg; 251 253 spell = spell, mingrade = mingrade; 252 - name = title, desc = desc; 254 + name = title, desc = desc, sound = sound; 253 255 cast = cast, apply = apply, remove = remove; 254 256 frame = proto.frame; 255 257 framestats = proto.frame and sorcery.data.metals[proto.frame].amulet; 256 258 tone = sorcery.lib.color(rd.tone); 257 259 base_spell = base_spell; 258 260 } 259 261 end ................................................................................ 271 273 if time and has_phial() and pow_min and not probe.disjunction then -- roll for runes 272 274 local phial = i:get_stack('phial',1) 273 275 local int, powerfac = calc_phial_props(phial) 274 276 local pf = phial:get_meta():get_int('force') 275 277 local rolls = math.floor(time/int) 276 278 local newrunes = {} 277 279 for _=1,rolls do 280 + print('--- rune roll',_,'pf',pf) 278 281 local choices = {} 279 282 for name,rune in pairs(sorcery.data.runes) do 280 - -- print('considering',name) 281 - -- print('-- power',rune.minpower,(rune.minpower*powerfac)*time,'//',l.self.powerdraw,l.self.powerdraw/time,'free',l.freepower,'max',l.maxpower) 282 - if (rune.minpower*powerfac)*time <= l.self.powerdraw and math.random(rune.rarity - pf) == 1 then 283 + local powreq = (rune.minpower*powerfac)*time 284 + print('- rune', name) 285 + print('powreq',powreq) 286 + print('power draw',l.self.powerdraw) 287 + if powreq <= l.self.powerdraw then 288 + print(' ! sufficient power for rune') 283 289 choices[#choices + 1] = rune 284 290 end 285 291 end 292 + for k,v in pairs(choices) do print(' * choice',k,v.item) end 286 293 if #choices > 0 then 287 - -- if multiple runes were rolled up, be nice to the player 288 - -- and pick the rarest one to give them 289 - local rare, choice = 0 290 - for i,c in pairs(choices) do 291 - if c.rarity > rare then 292 - rare = c.rarity 293 - choice = c 294 + for try = 1,#choices do 295 + print(' -- try',try) 296 + local _, choice = sorcery.lib.tbl.pick(choices) 297 + local adjrare = math.max(2, choice.rarity - pf) 298 + print(choice.item,'rarity',choice.rarity, 'adjusted', adjrare) 299 + if math.random(adjrare) == 1 then 300 + print(' ! picking ', choice.item) 301 + newrunes[#newrunes + 1] = ItemStack(choice.item) 302 + break 294 303 end 295 304 end 296 - newrunes[#newrunes + 1] = ItemStack(choice.item) 297 305 end 298 306 -- print('rune choices:',dump(choices)) 299 307 -- print('me',dump(l.self)) 300 308 end 301 309 302 310 for _,r in pairs(newrunes) do 303 311 if i:room_for_item('cache',r) and has_phial() then ................................................................................ 420 428 local i = m:get_inventory() 421 429 i:set_size('cache',constants.rune_cache_max) 422 430 i:set_size('wrench',1) i:set_size('phial',1) i:set_size('refuse',1) 423 431 i:set_size('amulet',1) i:set_size('active',1) 424 432 m:set_string('infotext','Rune Forge') 425 433 runeforge_update(pos) 426 434 end; 427 - after_dig_node = sorcery.lib.node.purge_only {'amulet','wrench'}; 435 + after_dig_node = sorcery.lib.node.purge_only {'amulet','wrench','refuse','phial'}; 428 436 on_timer = runeforge_update; 429 437 on_metadata_inventory_move = function(pos, fl,fi, tl,ti, count, user) 430 438 local inv = minetest.get_meta(pos):get_inventory() 431 439 local wrench if not inv:is_empty('wrench') then 432 440 wrench = inv:get_stack('wrench',1):get_definition()._proto 433 441 end 434 442 local wwear = function(cap)
Modified textures/sorcery_aether_coruscator.png from [cd811a55fe] to [ef8ded092e].
cannot compute difference between binary files
Modified textures/sorcery_aetherial_harmonizer.png from [8e627df916] to [4b86394030].
cannot compute difference between binary files
Modified textures/sorcery_aluminum_fragment.png from [a37622efed] to [9574722f6b].
cannot compute difference between binary files
Modified textures/sorcery_aluminum_ore.png from [9daddeb433] to [c64ced441f].
cannot compute difference between binary files
Modified textures/sorcery_aluminum_pick.png from [00ec310e93] to [266ffd0854].
cannot compute difference between binary files
Modified textures/sorcery_aluminum_powder.png from [90765bbba2] to [ee8894f642].
cannot compute difference between binary files
Modified textures/sorcery_aluminum_sword.png from [0a9f808a14] to [d3ff62c552].
cannot compute difference between binary files
Modified textures/sorcery_amulet.png from [9548ac041a] to [1fec4bee23].
cannot compute difference between binary files
Modified textures/sorcery_amulet_frame_cobalt.png from [3cd2449b29] to [03581951d2].
cannot compute difference between binary files
Modified textures/sorcery_amulet_frame_gold.png from [c26ecea1e3] to [3f4e9ea977].
cannot compute difference between binary files
Modified textures/sorcery_amulet_frame_iridium.png from [9dc3aa0c0f] to [1a2fff3d07].
cannot compute difference between binary files
Modified textures/sorcery_amulet_frame_tungsten.png from [6075b8196a] to [22b5ae6c57].
cannot compute difference between binary files
Modified textures/sorcery_amulet_sparkle.png from [060f589cac] to [5b0e4685c3].
cannot compute difference between binary files
Modified textures/sorcery_beam_generator.png from [58c2e4401c] to [1ec60caf50].
cannot compute difference between binary files
Modified textures/sorcery_blood_1.png from [e5a6d411e5] to [8153f7cf4e].
cannot compute difference between binary files
Modified textures/sorcery_blood_2.png from [af7224a5c6] to [d5817418ba].
cannot compute difference between binary files
Modified textures/sorcery_blood_3.png from [f78b6f9ea8] to [ad48fab8a0].
cannot compute difference between binary files
Modified textures/sorcery_blood_4.png from [52377a856a] to [745c8db451].
cannot compute difference between binary files
Modified textures/sorcery_blood_5.png from [9fed30d56f] to [51ee6b5f1f].
cannot compute difference between binary files
Modified textures/sorcery_brass_fragment.png from [2e8179d88a] to [cc5a4e4152].
cannot compute difference between binary files
Modified textures/sorcery_brass_powder.png from [72cc1a227d] to [cd2377aade].
cannot compute difference between binary files
Modified textures/sorcery_bronze_fragment.png from [b4c2175ac8] to [dedcc5bbc6].
cannot compute difference between binary files
Modified textures/sorcery_bronze_powder.png from [1f5965ab69] to [fb42fde961].
cannot compute difference between binary files
Modified textures/sorcery_candle.png from [bf169bc9fa] to [a860a8d7fc].
cannot compute difference between binary files
Modified textures/sorcery_catalytic_convector.png from [2535be977e] to [3b085d96b6].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_fragment.png from [dd9ea5f70e] to [98ee8532da].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_ore.png from [09827dfd82] to [ff7d7d7cef].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_pick.png from [a29aae0a50] to [7f702b0fbe].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_powder.png from [d40093df7d] to [874e60d86a].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_sword.png from [9f00538add] to [8fd70120db].
cannot compute difference between binary files
Modified textures/sorcery_cobalt_wire.png from [1bbb441d29] to [b509f09889].
cannot compute difference between binary files
Modified textures/sorcery_coin.png from [fc92861388] to [8fd4284f0d].
cannot compute difference between binary files
Modified textures/sorcery_coin_gem.png from [ea0d6b6069] to [8e6a28e6e9].
cannot compute difference between binary files
Modified textures/sorcery_condenser.png from [4dc6d2863f] to [ba9b67f5dd].
cannot compute difference between binary files
Modified textures/sorcery_conduction_plate.png from [1b9d9e47f7] to [569cc0eaa4].
cannot compute difference between binary files
Modified textures/sorcery_conduit_copper_side.png from [f1ead52faf] to [e61b6a63b2].
cannot compute difference between binary files
Modified textures/sorcery_conduit_copper_top.png from [8c1a859f77] to [f69ba0084f].
cannot compute difference between binary files
Modified textures/sorcery_copper_fragment.png from [b7d00a6825] to [3179ea111e].
cannot compute difference between binary files
Modified textures/sorcery_copper_powder.png from [f251fc6c10] to [c1fe22dcc4].
cannot compute difference between binary files
Modified textures/sorcery_core_counterpraxic.png from [e3aaf06222] to [6f1a036a92].
cannot compute difference between binary files
Modified textures/sorcery_core_mandatic.png from [b6c2d06b72] to [dab110f4ea].
cannot compute difference between binary files
Modified textures/sorcery_core_syncretic.png from [e7d1b92a14] to [6de85ad6bc].
cannot compute difference between binary files
Modified textures/sorcery_crackle.png from [58d455dd12] to [11403faf13].
cannot compute difference between binary files
Modified textures/sorcery_crucible_aluminum.png from [f493780a48] to [13ed85cb3b].
cannot compute difference between binary files
Modified textures/sorcery_crucible_clay.png from [2dfb16403b] to [3519f10e3d].
cannot compute difference between binary files
Modified textures/sorcery_crucible_clay_molding.png from [a6928655d6] to [061078d6a0].
cannot compute difference between binary files
Modified textures/sorcery_crucible_duridium.png from [3b1e95eec0] to [4d7265a4f9].
cannot compute difference between binary files
Modified textures/sorcery_crucible_platinum.png from [a6c806c3a1] to [1298eb990a].
cannot compute difference between binary files
Modified textures/sorcery_current_felicitator.png from [377884433f] to [9355b87323].
cannot compute difference between binary files
Modified textures/sorcery_dagger.png from [90260263cf] to [0ca4097d99].
cannot compute difference between binary files
Modified textures/sorcery_dagger_glow.png from [cc2d006b05] to [5d9ea2ede5].
cannot compute difference between binary files
Modified textures/sorcery_diamond_outline.png from [8801c22cef] to [9adb5df4bc].
cannot compute difference between binary files
Modified textures/sorcery_disc.png from [3f68afb16e] to [bc968d78ab].
cannot compute difference between binary files
Modified textures/sorcery_disc_impervium.png from [0d454327bd] to [13b9208b67].
cannot compute difference between binary files
Modified textures/sorcery_disc_steel.png from [c212e5c1db] to [b60afdee98].
cannot compute difference between binary files
Modified textures/sorcery_displacer_front.png from [51a09bc368] to [9e76e12626].
cannot compute difference between binary files
Modified textures/sorcery_displacer_module_receive.png from [99916d60d5] to [16111f41c9].
cannot compute difference between binary files
Modified textures/sorcery_displacer_module_transmit.png from [ee8e01ea67] to [b9979946af].
cannot compute difference between binary files
Modified textures/sorcery_displacer_side.png from [fe755fceaa] to [ec69661229].
cannot compute difference between binary files
Modified textures/sorcery_displacer_top.png from [e8a57f9374] to [cb61014c08].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_1.png from [a6051837ed] to [ddc9fe807b].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_2.png from [67375e0690] to [6a7336b32a].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_3.png from [96e1d5aad2] to [725cfae3e3].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_4.png from [9188276ad6] to [d5da0c9ca4].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_5.png from [5857f30d4c] to [75055879e8].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_6.png from [fa85d0503b] to [4a09fda5ff].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_7.png from [00207df4e6] to [098c2df953].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_8.png from [478d15d1bd] to [e71d40a586].
cannot compute difference between binary files
Modified textures/sorcery_divine_radiance_9.png from [494a990e0a] to [d8f42ceb7d].
cannot compute difference between binary files
Modified textures/sorcery_draconium_fragment.png from [daf6a96b07] to [2908882477].
cannot compute difference between binary files
Modified textures/sorcery_draconium_pick.png from [0594568178] to [9e40f49107].
cannot compute difference between binary files
Modified textures/sorcery_draconium_powder.png from [83c429250a] to [8e48b03577].
cannot compute difference between binary files
Modified textures/sorcery_draconium_sword.png from [d24b6d0aca] to [bc77e36a19].
cannot compute difference between binary files
Modified textures/sorcery_drop.png from [7237a7e209] to [133f7a521a].
cannot compute difference between binary files
Modified textures/sorcery_droplet.png from [fee2bce25e] to [a09e40590d].
cannot compute difference between binary files
Modified textures/sorcery_duranium_fragment.png from [7d415a62db] to [077c08e9af].
cannot compute difference between binary files
Modified textures/sorcery_duridium_fragment.png from [7d415a62db] to [077c08e9af].
cannot compute difference between binary files
Modified textures/sorcery_duridium_pick.png from [6a881a18af] to [f12fe7b0aa].
cannot compute difference between binary files
Modified textures/sorcery_duridium_powder.png from [1bb4df86fd] to [88377dbc48].
cannot compute difference between binary files
Modified textures/sorcery_duridium_sword.png from [7b322d9198] to [dddcd9f1da].
cannot compute difference between binary files
Modified textures/sorcery_electrum_fragment.png from [c636d62fc0] to [bb9078b46f].
cannot compute difference between binary files
Modified textures/sorcery_electrum_powder.png from [18417a63d0] to [ea77279751].
cannot compute difference between binary files
Modified textures/sorcery_emitter_barrier_bottom.png from [a6363e789d] to [e3f591cf0c].
cannot compute difference between binary files
Modified textures/sorcery_emitter_barrier_front.png from [76e1531fe0] to [b59c06e452].
cannot compute difference between binary files
Modified textures/sorcery_emitter_barrier_side.png from [b566c1148a] to [c02b037e5e].
cannot compute difference between binary files
Modified textures/sorcery_emitter_barrier_top.png from [2705ace703] to [407d79fc4a].
cannot compute difference between binary files
Modified textures/sorcery_enchant_conserve.png from [3451249f04] to [1301a377b9].
cannot compute difference between binary files
Modified textures/sorcery_enchant_dowse.png from [efa02ac638] to [99266215cd].
cannot compute difference between binary files
Modified textures/sorcery_enchant_endure.png from [84094793b8] to [b01372f23b].
cannot compute difference between binary files
Modified textures/sorcery_enchant_glimmer.png from [d92d1302fd] to [4ff8e2f006].
cannot compute difference between binary files
Modified textures/sorcery_enchant_glitter.png from [2872a22baf] to [294d38acb7].
cannot compute difference between binary files
Modified textures/sorcery_enchant_harvest.png from [40b1201c27] to [ce00330cc8].
cannot compute difference between binary files
Modified textures/sorcery_enchant_pierce.png from [fd3ecbaa4b] to [1c91a96d16].
cannot compute difference between binary files
Modified textures/sorcery_enchant_rend.png from [3f9d55bb9f] to [2a27ddf4a2].
cannot compute difference between binary files
Modified textures/sorcery_enchanter_bg.png from [5aab98de3b] to [e2caa4526a].
cannot compute difference between binary files
Modified textures/sorcery_enchanter_channeler.png from [cf624a00b3] to [311bd87431].
cannot compute difference between binary files
Modified textures/sorcery_enchanter_glyphs.png from [55cb1589bc] to [2d060cc1bf].
cannot compute difference between binary files
Modified textures/sorcery_enchanter_pedestal.png from [acba9558af] to [db8269e799].
cannot compute difference between binary files
Modified textures/sorcery_enchanter_ui.png from [2d2ff89774] to [34bdb14b1b].
cannot compute difference between binary files
Modified textures/sorcery_erasure_fluid_bottle.png from [6cc2e06a0c] to [8a59856008].
cannot compute difference between binary files
Modified textures/sorcery_essence_flame.png from [ad79abd24b] to [777e110dcc].
cannot compute difference between binary files
Modified textures/sorcery_essence_force.png from [e8aa8d2e8b] to [c37f2aa5e9].
cannot compute difference between binary files
Modified textures/sorcery_essence_frost.png from [22caf1a2b1] to [b53df8d88a].
cannot compute difference between binary files
Modified textures/sorcery_eternium_fragment.png from [e8291dc4b5] to [be88feb60c].
cannot compute difference between binary files
Modified textures/sorcery_eternium_pick.png from [441dd90fc1] to [e088b95e90].
cannot compute difference between binary files
Modified textures/sorcery_eternium_powder.png from [48054b80d7] to [eca77e6cdf].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_linear_bottom.png from [118744afe2] to [ec7f1adaaf].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_linear_side.png from [408a859773] to [a66c6e761a].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_linear_top.png from [4fda01e825] to [1126e70441].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_nonlocal_back.png from [2b03768188] to [582b9e44c1].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_nonlocal_front.png from [c925e1401d] to [92980f867a].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_nonlocal_side.png from [c091ae564e] to [d474244d5b].
cannot compute difference between binary files
Modified textures/sorcery_farcaster_nonlocal_top.png from [b273235492] to [f30e3af893].
cannot compute difference between binary files
Modified textures/sorcery_field_emitter.png from [aee8d20a12] to [e8d66640fa].
cannot compute difference between binary files
Modified textures/sorcery_fireball.png from [6de20cfcd2] to [5020807d4b].
cannot compute difference between binary files
Modified textures/sorcery_flicker.png from [d2be38b136] to [6b9cc64d8b].
cannot compute difference between binary files
Modified textures/sorcery_fog.png from [f33fe7d904] to [54da5feb7d].
cannot compute difference between binary files
Modified textures/sorcery_gem_amethyst.png from [de673e3513] to [c8be7c174e].
cannot compute difference between binary files
Modified textures/sorcery_gem_amethyst_shard.png from [01ea7e16ed] to [bccc8fde38].
cannot compute difference between binary files
Modified textures/sorcery_gem_diamond_shard.png from [1d314919ff] to [bdde34f8ca].
cannot compute difference between binary files
Modified textures/sorcery_gem_emerald.png from [a6ac5a662a] to [a60cde7bef].
cannot compute difference between binary files
Modified textures/sorcery_gem_emerald_shard.png from [79e596eb64] to [f28336e9c6].
cannot compute difference between binary files
Modified textures/sorcery_gem_lumite.png from [da90c310c7] to [b63ba0ca88].
cannot compute difference between binary files
Modified textures/sorcery_gem_lumite_shard.png from [551a18760e] to [3ab328367e].
cannot compute difference between binary files
Modified textures/sorcery_gem_luxite.png from [da90c310c7] to [b63ba0ca88].
cannot compute difference between binary files
Modified textures/sorcery_gem_luxite_shard.png from [551a18760e] to [3ab328367e].
cannot compute difference between binary files
Modified textures/sorcery_gem_ruby.png from [612ff8492f] to [f89a7441f3].
cannot compute difference between binary files
Modified textures/sorcery_gem_ruby_shard.png from [4eb5d055b0] to [ff3210a5a6].
cannot compute difference between binary files
Modified textures/sorcery_gem_sapphire.png from [b347de3f3d] to [10737a5165].
cannot compute difference between binary files
Modified textures/sorcery_gem_sapphire_shard.png from [d7fa09ef8c] to [a46db5e6ab].
cannot compute difference between binary files
Modified textures/sorcery_glitter.png from [e4de7bf843] to [68702f63cd].
cannot compute difference between binary files
Modified textures/sorcery_gold_fragment.png from [f362acc18f] to [13b199ae10].
cannot compute difference between binary files
Modified textures/sorcery_gold_powder.png from [e415c0e827] to [fcdafae53c].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_panel_crush.png from [61f151d4e3] to [db791d2a32].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_panel_lift.png from [607e0d2a18] to [6f9704c7db].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_panel_off.png from [4ef1021164] to [836086ef6b].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_panel_slow.png from [d6bbdcb829] to [f5341611aa].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_panel_stop.png from [99c6937d1a] to [f6b2e33a53].
cannot compute difference between binary files
Modified textures/sorcery_gravitator_side.png from [f72e073bca] to [4895a48537].
cannot compute difference between binary files
Modified textures/sorcery_gravity_manipulator.png from [f01b379bf4] to [91d444b4f4].
cannot compute difference between binary files
Modified textures/sorcery_harvester_receptacle.png from [300237c666] to [914ca70906].
cannot compute difference between binary files
Modified textures/sorcery_impervium_fragment.png from [d92d8970c5] to [9bb3a8eb39].
cannot compute difference between binary files
Modified textures/sorcery_impervium_pick.png from [72b553feae] to [57471b194f].
cannot compute difference between binary files
Modified textures/sorcery_impervium_powder.png from [a542329e06] to [d050a364bf].
cannot compute difference between binary files
Modified textures/sorcery_inferno_crystal.png from [1a58b10f86] to [b73b017129].
cannot compute difference between binary files
Modified textures/sorcery_infuser_chamber.png from [05e93c632f] to [e2535a24ae].
cannot compute difference between binary files
Modified textures/sorcery_infuser_concentrator.png from [3fa2cbf91c] to [9c16ac7a5e].
cannot compute difference between binary files
Modified textures/sorcery_infuser_mod_prolongator.png from [ac985c3831] to [9dbfc1bc9d].
cannot compute difference between binary files
Modified textures/sorcery_infuser_tube.png from [631bf73fd1] to [f2c4355ae2].
cannot compute difference between binary files
Modified textures/sorcery_ingot_outline.png from [aa2b24c821] to [1a5d835f01].
cannot compute difference between binary files
Modified textures/sorcery_ink_bottle.png from [9cd1cb7026] to [892526e75d].
cannot compute difference between binary files
Modified textures/sorcery_inversion_matrix.png from [13e557b968] to [cd0e1d72d7].
cannot compute difference between binary files
Modified textures/sorcery_inverter_coil.png from [a40914f554] to [e999d85e84].
cannot compute difference between binary files
Modified textures/sorcery_iridium_fragment.png from [688bc8d1fa] to [70a8b31eff].
cannot compute difference between binary files
Modified textures/sorcery_iridium_ore.png from [b017777bda] to [3054ee871d].
cannot compute difference between binary files
Modified textures/sorcery_iridium_pick.png from [c38156cead] to [1b982747f1].
cannot compute difference between binary files
Modified textures/sorcery_iridium_powder.png from [aef440b9aa] to [4df6ac8a78].
cannot compute difference between binary files
Modified textures/sorcery_iridium_sword.png from [1e823db68a] to [b79feb1de3].
cannot compute difference between binary files
Modified textures/sorcery_lens_amplifier.png from [115f332269] to [5982043abf].
cannot compute difference between binary files
Modified textures/sorcery_lens_concave.png from [ea0ab99b0c] to [2efe2f207a].
cannot compute difference between binary files
Modified textures/sorcery_lens_convex.png from [a982f601d4] to [9216161265].
cannot compute difference between binary files
Modified textures/sorcery_lens_overlay_gold.png from [fba3b50dd8] to [6b3481be9c].
cannot compute difference between binary files
Modified textures/sorcery_lens_rectifier.png from [227ae0dc1a] to [b0bb9ed6e5].
cannot compute difference between binary files
Modified textures/sorcery_levitanium_fragment.png from [133d713fe8] to [b36743db0c].
cannot compute difference between binary files
Modified textures/sorcery_levitanium_ore.png from [dbc5d31e75] to [5768663650].
cannot compute difference between binary files
Modified textures/sorcery_levitanium_powder.png from [9eacd80255] to [e857d7bb5a].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_back.png from [aedb4f096c] to [5df1b6633b].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_bottom.png from [f23afab857] to [eecf96db0a].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_front_off.png from [811455addd] to [243e09162e].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_front_on.png from [cf5b54dd34] to [1e8fa85829].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_side.png from [07ad2d2926] to [39496d6436].
cannot compute difference between binary files
Modified textures/sorcery_ley_generator_top.png from [7147d2203f] to [9da026953e].
cannot compute difference between binary files
Modified textures/sorcery_ley_plug.png from [ac3ad24938] to [6462e62704].
cannot compute difference between binary files
Modified textures/sorcery_ley_puncture.png from [5c29b49287] to [8d1e9b2b53].
cannot compute difference between binary files
Modified textures/sorcery_ley_switch_base.png from [eca6656993] to [527cc6653e].
cannot compute difference between binary files
Modified textures/sorcery_ley_switch_down.png from [5722e6a77c] to [282f727f8c].
cannot compute difference between binary files
Modified textures/sorcery_ley_switch_panel.png from [3f4a278966] to [a1c1ee522c].
cannot compute difference between binary files
Modified textures/sorcery_ley_switch_up.png from [3e480e03fd] to [9e8feb4fbb].
cannot compute difference between binary files
Modified textures/sorcery_leyline_stabilizer.png from [148e93c8c1] to [3f0a5ceb18].
cannot compute difference between binary files
Modified textures/sorcery_lithium_fragment.png from [a9d6a0503b] to [9f0581e647].
cannot compute difference between binary files
Modified textures/sorcery_lithium_ore.png from [99373498fd] to [e5f359834f].
cannot compute difference between binary files
Modified textures/sorcery_lithium_powder.png from [c8272b7787] to [2b446abc7f].
cannot compute difference between binary files
Modified textures/sorcery_metal_iridium.png from [0232c814fa] to [60a3284edb].
cannot compute difference between binary files
Modified textures/sorcery_metal_iridium_shiny.png from [f46801542e] to [35606819aa].
cannot compute difference between binary files
Modified textures/sorcery_metal_vidrium.png from [59842011f5] to [b7efc17a80].
cannot compute difference between binary files
Modified textures/sorcery_metal_vidrium_shiny.png from [5b59bab96d] to [b2090df4b7].
cannot compute difference between binary files
Modified textures/sorcery_mill_back.png from [7495982119] to [bdcd6ac298].
cannot compute difference between binary files
Modified textures/sorcery_mill_bottom.png from [2a6d4c6eae] to [7e58767ec0].
cannot compute difference between binary files
Modified textures/sorcery_mill_front.png from [a435aaac6a] to [1d1b1f7c24].
cannot compute difference between binary files
Modified textures/sorcery_mill_grindhead.png from [7f26b51b05] to [b09f142f3e].
cannot compute difference between binary files
Modified textures/sorcery_mill_grindhead_shade.png from [9d6a7ea7b2] to [063526191a].
cannot compute difference between binary files
Modified textures/sorcery_mill_side.png from [6da51e5a57] to [4a17318392].
cannot compute difference between binary files
Modified textures/sorcery_mill_top.png from [790b4e6ed9] to [21aee0b42b].
cannot compute difference between binary files
Modified textures/sorcery_moon_phases.png from [acb81162df] to [2299bafb0b].
cannot compute difference between binary files
Modified textures/sorcery_node_liquid.png from [1e803e25e4] to [fe30ef36c1].
cannot compute difference between binary files
Modified textures/sorcery_oil_dull.png from [b7e1fbe16b] to [64e8cd8c6c].
cannot compute difference between binary files
Modified textures/sorcery_oil_sparkle.png from [878f389914] to [1f3e53e61d].
cannot compute difference between binary files
Modified textures/sorcery_pen.png from [dbab6605a4] to [65c4b663ec].
cannot compute difference between binary files
Modified textures/sorcery_pen_nib.png from [20a8f60412] to [616e59b551].
cannot compute difference between binary files
Modified textures/sorcery_pentacle.png from [52fed99c8a] to [ab5a8c3ebd].
cannot compute difference between binary files
Modified textures/sorcery_pentacle_power_cognic.png from [f3393f63e3] to [46f323c326].
cannot compute difference between binary files
Modified textures/sorcery_pentacle_power_counterpraxic.png from [8766a9b24c] to [f8ea8d9d7e].
cannot compute difference between binary files
Modified textures/sorcery_pentacle_power_entropic.png from [931aa622a8] to [7dead51a70].
cannot compute difference between binary files
Modified textures/sorcery_pentacle_power_praxic.png from [1cf736ae19] to [1b7af7a718].
cannot compute difference between binary files
Modified textures/sorcery_pentacle_power_syncretic.png from [5db686cb80] to [33959b1dbd].
cannot compute difference between binary files
Modified textures/sorcery_pipe.png from [b548e1e3c7] to [50199b07e1].
cannot compute difference between binary files
Modified textures/sorcery_planet_phases.png from [e8e7b4670e] to [3cadff195c].
cannot compute difference between binary files
Modified textures/sorcery_platinum_fragment.png from [f3d2d85804] to [2177764a1d].
cannot compute difference between binary files
Modified textures/sorcery_platinum_ore.png from [4ec4985ec9] to [c2d5506651].
cannot compute difference between binary files
Modified textures/sorcery_platinum_pick.png from [d53a4d228b] to [c328ca6615].
cannot compute difference between binary files
Modified textures/sorcery_platinum_powder.png from [a2a2fa62a8] to [6fc8d84ce3].
cannot compute difference between binary files
Modified textures/sorcery_platinum_sword.png from [df7ab5492d] to [05e2aa4dda].
cannot compute difference between binary files
Modified textures/sorcery_portal_front.png from [64f724c208] to [0374434c0a].
cannot compute difference between binary files
Modified textures/sorcery_portal_pad_bottom.png from [be4807eea7] to [54968c7287].
cannot compute difference between binary files
Modified textures/sorcery_portal_pad_front.png from [1bc5617d20] to [7f0c95b287].
cannot compute difference between binary files
Modified textures/sorcery_portal_pad_side.png from [c75e2555a9] to [eb5eacf924].
cannot compute difference between binary files
Modified textures/sorcery_portal_pad_top.png from [accc2af1a9] to [29a5372045].
cannot compute difference between binary files
Modified textures/sorcery_portal_side.png from [df1d5fcacb] to [ab76207eff].
cannot compute difference between binary files
Modified textures/sorcery_portal_top.png from [ce9e9950a7] to [35bea40663].
cannot compute difference between binary files
Modified textures/sorcery_powder_firestorm.png from [c9ba8b2b43] to [f6c4278cf5].
cannot compute difference between binary files
Modified textures/sorcery_pulp.png from [27b1ecfa58] to [4e21886c16].
cannot compute difference between binary files
Modified textures/sorcery_pulp_inky.png from [386c7a53ef] to [560fec792b].
cannot compute difference between binary files
Modified textures/sorcery_pulp_sheet.png from [b7b1aab632] to [5222a83e1b].
cannot compute difference between binary files
Modified textures/sorcery_pulse_rectifier.png from [c06567df62] to [0865c3361f].
cannot compute difference between binary files
Modified textures/sorcery_punchcard.png from [d1c8b3f9f3] to [0ea8ff0f48].
cannot compute difference between binary files
Modified textures/sorcery_punchcard_punched.png from [7a6b5d17b3] to [ca795e2dbe].
cannot compute difference between binary files
Modified textures/sorcery_radiatic_filament.png from [843838bba4] to [89e693781a].
cannot compute difference between binary files
Modified textures/sorcery_rune_disjoin.png from [a7f795bf63] to [72e49d923f].
cannot compute difference between binary files
Modified textures/sorcery_rune_dominate.png from [d2ed48d357] to [b8e0b6b571].
cannot compute difference between binary files
Modified textures/sorcery_rune_excavate.png from [916ec7193a] to [77e4e7dea1].
cannot compute difference between binary files
Modified textures/sorcery_rune_genesis.png from [7091d5d260] to [f8d6278438].
cannot compute difference between binary files
Modified textures/sorcery_rune_luminate.png from [2fa0002e5a] to [18a2327f22].
cannot compute difference between binary files
Modified textures/sorcery_rune_obliterate.png from [1d8576869e] to [e848733528].
cannot compute difference between binary files
Modified textures/sorcery_rune_repulse.png from [821db474a1] to [b4c2786163].
cannot compute difference between binary files
Modified textures/sorcery_rune_translocate.png from [662d2c9a2c] to [babe9ce634].
cannot compute difference between binary files
Modified textures/sorcery_rune_wrench.png from [c39260a038] to [98bfac0275].
cannot compute difference between binary files
Modified textures/sorcery_rune_wrench_iridium.png from [076b434e79] to [a7092598d7].
cannot compute difference between binary files
Modified textures/sorcery_scissors_aluminum.png from [2d37a11f3d] to [959ef39532].
cannot compute difference between binary files
Modified textures/sorcery_scissors_bronze.png from [d1baf6e9c4] to [596e05fba0].
cannot compute difference between binary files
Modified textures/sorcery_scissors_iridium.png from [19c8d02f68] to [c38fe839da].
cannot compute difference between binary files
Modified textures/sorcery_scissors_steel.png from [4a46c3698e] to [131246ae3a].
cannot compute difference between binary files
Modified textures/sorcery_scissors_tungsten.png from [b8529839fc] to [ed729af6de].
cannot compute difference between binary files
Modified textures/sorcery_screw.png from [0f1a74e38b] to [499de43308].
cannot compute difference between binary files
Modified textures/sorcery_silver_fragment.png from [971b79b54a] to [492d990569].
cannot compute difference between binary files
Modified textures/sorcery_silver_ore.png from [8e84c2f224] to [276c706809].
cannot compute difference between binary files
Modified textures/sorcery_silver_powder.png from [084c4156da] to [58a4278ca7].
cannot compute difference between binary files
Modified textures/sorcery_smelter_bottom.png from [e669ec6634] to [6f77986f02].
cannot compute difference between binary files
Modified textures/sorcery_smelter_front.png from [82848fe3a3] to [7632308bf9].
cannot compute difference between binary files
Modified textures/sorcery_smelter_front_hot.png from [2516f6fec9] to [41dfd6fa08].
cannot compute difference between binary files
Modified textures/sorcery_smelter_side.png from [c2098d1960] to [732beda4c9].
cannot compute difference between binary files
Modified textures/sorcery_smelter_top_2.png from [9b04da96f9] to [48ef3075d2].
cannot compute difference between binary files
Modified textures/sorcery_smelter_top_3.png from [63a8f0ebfc] to [e35b972ec2].
cannot compute difference between binary files
Modified textures/sorcery_smelter_top_4.png from [40859d3ac3] to [0f48811e4d].
cannot compute difference between binary files
Modified textures/sorcery_sparking.png from [6a1bae8d93] to [2f5ee50cea].
cannot compute difference between binary files
Modified textures/sorcery_sparkle.png from [6a08a098f8] to [6895bd99f2].
cannot compute difference between binary files
Modified textures/sorcery_sputter.png from [3a75e25024] to [f603c89b6c].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_blue.png from [6a04f2cd64] to [0074d91b2b].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_green.png from [298a31bc72] to [c6a5ed415b].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_off.png from [e77628e4ce] to [f2975fbb94].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_purple.png from [1d0c592359] to [2f0fcc5fe1].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_red.png from [87e8ab6d25] to [ed3b8628fc].
cannot compute difference between binary files
Modified textures/sorcery_statlamp_yellow.png from [458f0fd969] to [a8027f3205].
cannot compute difference between binary files
Modified textures/sorcery_steel_fragment.png from [16e2d50a85] to [b3591fc629].
cannot compute difference between binary files
Modified textures/sorcery_steel_powder.png from [0f9fc0ea2b] to [b5102a1a0a].
cannot compute difference between binary files
Modified textures/sorcery_suppression_matrix.png from [9c64f4969e] to [57d83d3cd9].
cannot compute difference between binary files
Modified textures/sorcery_tacit_couple.png from [d637fb94c7] to [28e64c2648].
cannot compute difference between binary files
Modified textures/sorcery_tacit_web.png from [ddc29e7188] to [7c9bfafe07].
cannot compute difference between binary files
Modified textures/sorcery_tap_inv.png from [0ade756825] to [4d3cf85550].
cannot compute difference between binary files
Modified textures/sorcery_tin_fragment.png from [2e3adf5243] to [8ed224e69e].
cannot compute difference between binary files
Modified textures/sorcery_tin_powder.png from [01dbc5d6c6] to [e8db951a7f].
cannot compute difference between binary files
Modified textures/sorcery_translocator_front.png from [51a09bc368] to [9e76e12626].
cannot compute difference between binary files
Modified textures/sorcery_translocator_module_receive.png from [99916d60d5] to [16111f41c9].
cannot compute difference between binary files
Modified textures/sorcery_translocator_module_receive_panel.png from [dadefd439a] to [a8047b9160].
cannot compute difference between binary files
Modified textures/sorcery_translocator_module_transmit.png from [ee8e01ea67] to [b9979946af].
cannot compute difference between binary files
Modified textures/sorcery_translocator_module_transmit_bg.png from [0f4d8aeb55] to [3705f5630b].
cannot compute difference between binary files
Modified textures/sorcery_translocator_module_transmit_panel.png from [c0f1b6ee7b] to [3a82829433].
cannot compute difference between binary files
Modified textures/sorcery_translocator_side.png from [fe755fceaa] to [ec69661229].
cannot compute difference between binary files
Modified textures/sorcery_translocator_top.png from [e8a57f9374] to [cb61014c08].
cannot compute difference between binary files
Modified textures/sorcery_trough_bottom.png from [5c4632abf2] to [81fde81e4b].
cannot compute difference between binary files
Modified textures/sorcery_trough_side.png from [1761840248] to [ca03800219].
cannot compute difference between binary files
Modified textures/sorcery_trough_side_handle.png from [1624a277c4] to [a81a5c46c7].
cannot compute difference between binary files
Modified textures/sorcery_trough_top_overlay.png from [d2285d9446] to [62549bec86].
cannot compute difference between binary files
Modified textures/sorcery_tungsten_fragment.png from [784aa60809] to [268421d49b].
cannot compute difference between binary files
Modified textures/sorcery_tungsten_ore.png from [fabcffe445] to [17cb107100].
cannot compute difference between binary files
Modified textures/sorcery_tungsten_pick.png from [058aab1c69] to [10283c48db].
cannot compute difference between binary files
Modified textures/sorcery_tungsten_powder.png from [8aba8a538e] to [cd69291b95].
cannot compute difference between binary files
Modified textures/sorcery_tungsten_sword.png from [db252be33e] to [38bafd26f8].
cannot compute difference between binary files
Modified textures/sorcery_tuning_disc.png from [4820ec8236] to [667b3d216f].
cannot compute difference between binary files
Modified textures/sorcery_tyrannium_fragment.png from [799ab0fe68] to [272ac293ef].
cannot compute difference between binary files
Modified textures/sorcery_tyrannium_pick.png from [4d3128e9b0] to [b7df4a7977].
cannot compute difference between binary files
Modified textures/sorcery_tyrannium_powder.png from [44795f36cc] to [b24c9bdef4].
cannot compute difference between binary files
Modified textures/sorcery_tyrannium_sword.png from [e379761923] to [85564ce4d9].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_amulet.png from [1e1e56f3c1] to [cf5ee61b7e].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_ink_bottle.png from [7c2f6ae8df] to [8dc98a9d22].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_paper.png from [2fd8d9799a] to [642460668d].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_pen.png from [35aabc24b3] to [05c82c2481].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_punchcard.png from [8580093926] to [72d2d17801].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_rune.png from [8e47e791d3] to [bde391a846].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_rune_wrench.png from [1bd60d3986] to [5391c9ff41].
cannot compute difference between binary files
Modified textures/sorcery_ui_ghost_wand.png from [0e9bf2eef0] to [677808bf01].
cannot compute difference between binary files
Modified textures/sorcery_ui_infuse_tube.png from [095d88d1aa] to [e971aee3d9].
cannot compute difference between binary files
Modified textures/sorcery_ui_inkwell_bar.png from [619704ff57] to [091dfb431e].
cannot compute difference between binary files
Modified textures/sorcery_ui_inkwell_bar_black.png from [790e8f3039] to [7a8cee9d9c].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_0.png from [aebcb77ec1] to [0c0a15f50e].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_1.png from [d03261c06f] to [c9c7368215].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_10.png from [66eafce742] to [5a52cd71b1].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_11.png from [9a69465e5c] to [d6beca04c0].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_12.png from [5db337f18b] to [60565763d6].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_13.png from [00c1eef083] to [1910895fb8].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_14.png from [4ac1d3242f] to [aef74db7e8].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_15.png from [58fe058e6b] to [599fd06a40].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_16.png from [8dd3a566b5] to [aa58eddf8e].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_2.png from [2a4cdfb7eb] to [d27d7af624].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_3.png from [3906c0dad8] to [c4d04d950b].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_4.png from [9f97dafed9] to [0c80791293].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_5.png from [224a393ff3] to [9764071968].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_6.png from [ab952652b7] to [aa38dbb102].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_7.png from [044c6ab65b] to [563f2f750c].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_8.png from [48dcf6b6d6] to [e85d9d084d].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_9.png from [440f647fa2] to [912a192a70].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_0.png from [6bde9edc7b] to [804b69c92a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_1.png from [6bde9edc7b] to [804b69c92a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_10.png from [29f838a2be] to [8d70ba6863].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_11.png from [29f838a2be] to [8d70ba6863].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_12.png from [48fe5c3d7d] to [2fd8d65496].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_13.png from [48fe5c3d7d] to [2fd8d65496].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_14.png from [d3aa3fa899] to [c46cce6913].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_15.png from [d3aa3fa899] to [c46cce6913].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_16.png from [8dd3a566b5] to [aa58eddf8e].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_2.png from [b19fd7a676] to [154a11ac5a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_3.png from [b19fd7a676] to [154a11ac5a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_4.png from [3fb2f1935a] to [22b595de00].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_5.png from [3fb2f1935a] to [22b595de00].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_6.png from [20c3d5c4fd] to [385666a50a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_7.png from [20c3d5c4fd] to [385666a50a].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_8.png from [c8a0d9df2a] to [cd032e719e].
cannot compute difference between binary files
Modified textures/sorcery_ui_manaring_flash_9.png from [c8a0d9df2a] to [cd032e719e].
cannot compute difference between binary files
Modified textures/sorcery_ui_pg_next.png from [6be954ccbc] to [b35b74afa1].
cannot compute difference between binary files
Modified textures/sorcery_ui_thaum_1.png from [e137ef73f2] to [dad7e9df06].
cannot compute difference between binary files
Modified textures/sorcery_ui_thaum_2.png from [1bf5943350] to [6ab2f22786].
cannot compute difference between binary files
Modified textures/sorcery_ui_thaum_3.png from [3bb23f844d] to [ef61d81be5].
cannot compute difference between binary files
Modified textures/sorcery_unobtanium_fragment.png from [bf98fc8591] to [7bf4e8706c].
cannot compute difference between binary files
Modified textures/sorcery_unobtanium_pick.png from [1eefd73a4c] to [926e148c04].
cannot compute difference between binary files
Modified textures/sorcery_unobtanium_powder.png from [9962b3a315] to [e97c7355c1].
cannot compute difference between binary files
Modified textures/sorcery_unobtanium_sword.png from [086d4d4f9e] to [4714a40217].
cannot compute difference between binary files
Modified textures/sorcery_valve.png from [3ab7bc9586] to [3355f880f1].
cannot compute difference between binary files
Modified textures/sorcery_vice.png from [949f16d3cc] to [1fdbcd0ba5].
cannot compute difference between binary files
Modified textures/sorcery_vidrium_fragment.png from [bb35934799] to [1b36cc176b].
cannot compute difference between binary files
Modified textures/sorcery_vidrium_powder.png from [a51f419db4] to [c36e07b70c].
cannot compute difference between binary files
Modified textures/sorcery_vidrium_wire.png from [2621ccf9ee] to [6c9e39323d].
cannot compute difference between binary files
Modified textures/sorcery_wand_amethyst_tip.png from [689089654b] to [68c25d5323].
cannot compute difference between binary files
Modified textures/sorcery_wand_base_acacia.png from [08d9e0c827] to [6506215c57].
cannot compute difference between binary files
Modified textures/sorcery_wand_base_apple.png from [76a4e88a19] to [620b31aa6a].
cannot compute difference between binary files
Modified textures/sorcery_wand_base_aspen.png from [d1b967913c] to [64359c7641].
cannot compute difference between binary files
Modified textures/sorcery_wand_base_jungle.png from [445befeab0] to [7d54d27e62].
cannot compute difference between binary files
Modified textures/sorcery_wand_base_pine.png from [d705a8687e] to [b61c89672d].
cannot compute difference between binary files
Modified textures/sorcery_wand_copper_wire.png from [c631d4917f] to [74c73597d1].
cannot compute difference between binary files
Modified textures/sorcery_wand_diamond_tip.png from [55bf8defd0] to [1506b1768e].
cannot compute difference between binary files
Modified textures/sorcery_wand_emerald_tip.png from [28e29410ff] to [cbe59f7aa5].
cannot compute difference between binary files
Modified textures/sorcery_wand_gold_wire.png from [43b17c033a] to [f9f89c9865].
cannot compute difference between binary files
Modified textures/sorcery_wand_luxite_tip.png from [38ca0fd520] to [719af1a1f7].
cannot compute difference between binary files
Modified textures/sorcery_wand_mese_tip.png from [d1c5dd63a4] to [2c28d37ef2].
cannot compute difference between binary files
Modified textures/sorcery_wand_ruby_tip.png from [8a5494e018] to [49fc363b6b].
cannot compute difference between binary files
Modified textures/sorcery_wand_sapphire_tip.png from [3887ed3731] to [fd0d2627ea].
cannot compute difference between binary files
Modified textures/sorcery_wand_silver_wire.png from [5bc9b27ae4] to [c110db0eb7].
cannot compute difference between binary files
Modified textures/sorcery_wand_steel_wire.png from [e1894022cc] to [d7733712ab].
cannot compute difference between binary files
Modified textures/sorcery_wandworking_station_side.png from [e0b319811e] to [45c605b77e].
cannot compute difference between binary files
Modified textures/sorcery_wandworking_station_top.png from [f562cd81e5] to [4a3e795256].
cannot compute difference between binary files
Modified textures/sorcery_wandworking_station_top_rotated.png from [e95deb0ffe] to [9477e4aa01].
cannot compute difference between binary files
Modified textures/sorcery_wandworking_station_top_water.png from [2860f8c72e] to [2e4c7e3707].
cannot compute difference between binary files
Modified textures/sorcery_warding_plate.png from [0aaf624823] to [58f6c685b8].
cannot compute difference between binary files
Modified vfx.lua from [e1c11d0a7c] to [936cc31413].
1 1 sorcery.vfx = {} 2 2 local L = sorcery.lib 3 + 4 +sorcery.vfx.particle = { 5 + flicker = { fw = 64 }; 6 + crackle = { fw = 64 }; 7 + sparking = { fw = 16 }; 8 + spark = { fw = 16 }; 9 + sputter = { fw = 16 }; 10 + glitter = { fw = 16 }; 11 + poof = { fw = 16 }; 12 + fog = { fw = 16}; 13 +} 14 + 15 +sorcery.vfx.show = function(def) 16 + local sp = {} 17 + local p 18 + if def.kind then 19 + p = sorcery.vfx.particle[def.kind] 20 + local img = L.image(p.img or string.format('sorcery_%s.png', def.kind)) 21 + if def.color then img = img:glow(def.color) end 22 + if def.warp then img = def:warp(img) end 23 + sp.texture = img:render() 24 + else 25 + sp.texture = def.texture 26 + end 27 + 28 + sp.collisiondetection = def.collisiondetection 29 + sp.collision_removal = def.collision_removal 30 + sp.object_collision = def.object_collision 31 + 32 + local function q(bp, rp, ao, so) 33 + ao = ao or bp 34 + so = so or bp 35 + local min, max 36 + 37 + if def[bp] or def[rp] then 38 + local b = def[bp] or vector.new(0,0,0) 39 + if def[rp] then 40 + local r 41 + if type(def[rp]) == 'number' then 42 + r = vector.new(def[rp],def[rp],def[rp]) 43 + else r = def[rp] end 44 + min = vector.subtract(b, r) 45 + max = vector.add (b, r) 46 + else 47 + min, max = b,b 48 + end 49 + else 50 + local dflt = vector.new(0,0,0) 51 + min, max = def['min'..bp] or dflt, def['max'..bp] or dflt 52 + end 53 + 54 + if def.amount and def.amount > 1 then 55 + sp['min'..ao], sp['max'..ao] = min, max 56 + else 57 + if vector.equals(min,max) then sp[so] = min else 58 + local d = vector.subtract(max, min) 59 + sp[so] = vector.add(min, vector.multiply(d, math.random())) 60 + end 61 + end 62 + end 63 + q('pos','radius') 64 + q('vel','velrange', 'vel', 'velocity') 65 + q('acc','accrange', 'acc', 'acceleration') 66 + local vary = def.varysize or 0 67 + if def.amount and def.amount > 1 then 68 + sp.amount = def.amount 69 + sp.time = def.time or def.life or 1 70 + def.life = def.life or sp.time 71 + 72 + sp.minsize = def.minsize or ((def.size or 1) - vary) 73 + sp.maxsize = def.maxsize or ((def.size or 1) + vary) 74 + sp.attached = def.attached 75 + else 76 + if def.minsize and def.maxsize then 77 + sp.size = def.minsize + ((def.maxsize - def.minsize) * math.random()) 78 + elseif vary > 0 then 79 + sp.size = ((def.size or 1) - vary) + (vary*2*math.random()) 80 + else sp.size = def.size end 81 + if def.attached then 82 + sp.pos = vector.add( 83 + vector.rotate(sp.pos, 84 + {x = 0, y = def.attached:get_yaw() or def.attached:get_look_horizontal(), z = 0} 85 + ), 86 + def.attached:get_pos() 87 + ) 88 + 89 + sp.velocity = vector.add(sp.velocity, def.attached:get_velocity()) 90 + end 91 + end 92 + sp.node = def.node 93 + sp.playername = def.playername 94 + sp.vertical = def.vertical 95 + sp.glow = def.glow 96 + if def.life then 97 + if sp.amount then 98 + if def.varylife then 99 + sp.minexptime = def.life - def.varylife 100 + sp.maxexptime = def.life + def.varylife 101 + else 102 + sp.minexptime, sp.maxexptime = def.life, def.life 103 + end 104 + else 105 + sp.expirationtime = def.life 106 + end 107 + end 108 + if p and p.fw then 109 + sp.animation = { 110 + type = 'vertical_frames'; 111 + aspect_w = p.fw, aspect_h = p.fh or p.fw; 112 + length = (sp.maxexptime or sp.life or 1) + 0.1; 113 + } 114 + end 115 + if sp.amount then 116 + minetest.add_particlespawner(sp) 117 + else 118 + minetest.add_particle(sp) 119 + end 120 +end 3 121 4 122 sorcery.vfx.glowspark = function(color) 5 123 local spark = L.image('sorcery_spark.png') 6 124 return spark:blit(spark:multiply(color)) 7 125 end 8 126 9 127 sorcery.vfx.cast_sparkle = function(caster,color,strength,duration,pos) 10 128 local ofs = pos 11 129 and function(x) return vector.add(pos,x) end 12 130 or function(x) return x end 13 131 local height = caster:get_properties().eye_height 14 - minetest.add_particlespawner { 15 - amount = 70 * strength; 16 - time = duration or 1.5; 132 + sorcery.vfx.show { 133 + amount = 4 * (0.5+strength*0.5), time = duration or 1.5; 134 + kind = 'spark', color = color, glow = 14, life = 0.5; 135 + -- minpos = ofs({ x = 0.0, z = 0.6, y = height - 0.7}); 136 + -- maxpos = ofs({ x = 0.4, z = 0.2, y = height - 0.3}); 137 + pos = ofs(vector.new(0.2, height - 0.5, 0.4)), radius = 0.2; 138 + vel = vector.new(0,0,0.8); 139 + velrange = 0.7, acc = vector.new(0,0.5,0); 140 + minsize = 5, maxsize = 10; 17 141 attached = caster; 18 - -- texture = L.image('sorcery_spark.png'):multiply(color):render(); 19 - texture = sorcery.vfx.glowspark(color):render(); 20 - minpos = ofs({ x = 0.0, z = 0.6, y = height*0.7}); 21 - maxpos = ofs({ x = 0.4, z = 0.2, y = height*1.1}); 22 - minvel = { x = -0.5, z = -0.5, y = -0.5}; 23 - maxvel = { x = 0.5, z = 0.5, y = 0.5}; 24 - minacc = { x = 0.0, z = 0.0, y = 0.5}; 25 - maxacc = { x = 0.0, z = 0.0, y = 0.5}; 26 - minsize = 0.4, maxsize = 0.8; 27 - minexptime = 1, maxexptime = 1; 28 - glow = 14; 29 - animation = { 30 - type = 'vertical_frames'; 31 - aspect_w = 16; 32 - aspect_h = 16; 33 - length = 1.1; 34 - }; 142 + } 143 + sorcery.vfx.show { 144 + amount = 140 * strength, time = 0.3 + (duration or 1.5); 145 + kind = 'sputter', color = color, glow = 14, life = 3; 146 + pos = ofs(vector.new(0.2, height - 0.5, 0.5)), radius = 0.3; 147 + vel = vector.new(0,0,1.2); 148 + velrange = 0.4, acc = vector.new(0,0.5,-0.7); 149 + minsize = 0.05, maxsize = 0.4; 150 + attached = caster; 35 151 } 152 + -- minetest.add_particlespawner { 153 + -- amount = 40 * strength; 154 + -- time = duration or 1.5; 155 + -- attached = caster; 156 + -- -- texture = L.image('sorcery_spark.png'):multiply(color):render(); 157 + -- texture = sorcery.vfx.glowspark(color):render(); 158 + -- minvel = { x = -0.5, z = -0.5, y = -0.5}; 159 + -- maxvel = { x = 0.5, z = 0.5, y = 0.5}; 160 + -- minacc = { x = 0.0, z = 0.0, y = 0.5}; 161 + -- maxacc = { x = 0.0, z = 0.0, y = 0.5}; 162 + -- minsize = 0.2, maxsize = 1.5; 163 + -- minexptime = 1, maxexptime = 1; 164 + -- glow = 14; 165 + -- animation = { 166 + -- type = 'vertical_frames'; 167 + -- aspect_w = 16; 168 + -- aspect_h = 16; 169 + -- length = 1.1; 170 + -- }; 171 + -- } 36 172 end 37 173 38 174 sorcery.vfx.body_sparkle = function(body,color,str,pos) 39 175 local tex = L.image('sorcery_spark.png') 40 176 local pi = tex:blit(tex:multiply(color)):render() 41 177 local ofs = pos 42 178 and function(x) return vector.add(pos,x) end