sorcery  Check-in [4b5ada2414]

Overview
Comment:updates
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 4b5ada2414bc770bbad7a7d222c45572b8eff739e026ce1b1bb3f24338057030
User & Date: lexi on 2022-03-18 01:50:41
Other Links: manifest | tags
Context
2024-03-17
00:35
bugfixes Leaf check-in: 032f54d1d5 user: lexi tags: trunk
2022-03-18
01:50
updates check-in: 4b5ada2414 user: lexi tags: trunk
2021-10-27
18:11
fix group matching check-in: 9599e69051 user: lexi tags: trunk
Changes

Modified data/resonance.lua from [c464435f82] to [a891ed08b5].

     1         --- resonance is a mechanic whereby give which 'resonate' can be
            1  +-- resonance is a mechanic whereby items which 'resonate' can be
     2      2   -- transformed into each other by use of the divide/meld wands
     3      3   
     4      4   local function
     5      5   undersign(signs) return function(ctx)
     6      6   	local stars = sorcery.calendar.stars(ctx.today);
     7      7   	for _,s in pairs(signs) do
     8      8   		if stars.sign.id == s then return true end

Modified data/runes.lua from [655b36ebed] to [269be1ec2d].

     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  +-- TODO add blood ritual that adds an extra "charge" to an amulet
            8  +
     7      9   local L = sorcery.lib
     8     10   local sparkle_region = function(s)
     9     11   	s.spell.visual_subjects {
    10     12   		amount = s.amt, time = s.time, -- attached = s;
    11     13   		minpos = s.minpos;
    12     14   		maxpos = s.maxpos;
    13     15   		minvel = { x = -0.4, y = -0.2, z = -0.4 };
................................................................................
   662    664   									wreck[#wreck+1] = pos
   663    665   								end
   664    666   							end
   665    667   							sorcery.spell.cast {
   666    668   								name = 'sorcery:spellshatter';
   667    669   								caster = ctx.caster;
   668    670   								anchor = epicenter;
   669         -								--disjunction = true;
   670         -								--range = radius;
          671  +								disjunction = true;
          672  +								range = radius;
   671    673   								duration = 10;
   672    674   								timeline = {
   673    675   									[0] = function(s)
   674    676   										s.visual_caster {
   675    677   											texture = tex;
   676    678   											amount = 100, time = 0.2;
   677    679   											minpos = { x = -0.1, y = -0.5, z = -0.1 };
................................................................................
  1017   1019   					sorcery.vfx.bloodburst(vector.add(tgt:get_pos(),{x=0,y=tgth/2,z=0}),20)
  1018   1020   					minetest.sound_play('sorcery_bloody_burst', { pos = pos, gain = 1.5 })
  1019   1021   					tgt:set_hp(0)
  1020   1022   				end;
  1021   1023   				frame = {
  1022   1024   					iridium = {
  1023   1025   						name = 'Massacre';
  1024         -						desc = "Unleash the dark and wicked force that lurks within this fell amulet to instantaneously slay all those who surround you, friend and foe alike";
         1026  +						desc = "Unleash the dark and wicked force that lurks within this fell amulet to instantaneously slay all those who surround you — friend and foe alike";
  1025   1027   					};
  1026   1028   				};
  1027   1029   			};
  1028   1030   		};
  1029   1031   	};
  1030   1032   	excavate = {
  1031   1033   		name = 'Excavate';

Modified recipes.lua from [4091d897f1] to [4c15c3b3eb].

   795    795   		minetest.register_craft {
   796    796   			output = dye .. ' 4';
   797    797   			recipe = {
   798    798   				{'',    pd[2],                     ''};
   799    799   				{pd[1],'basic_materials:paraffin', pd[3]};
   800    800   				{'',   'bucket:bucket_water',      ''};
   801    801   			};
          802  +			replacements = {
          803  +				{'bucket:bucket_water', 'bucket:bucket_empty'};
          804  +			};
   802    805   		}
   803    806   	end
   804    807   end
   805    808   
   806    809   local potion_auto_recipe = function(id, substance, tools, container)
   807    810   	local recipe = tools
   808    811   	local replace = {}

Modified spell.lua from [a858b6f5bf] to [3808158930].

   245    245   		s.jobs[#s.jobs+1] = minetest.after(howlong, function()
   246    246   			-- this is somewhat awkward. since we're using a non-polling approach, we
   247    247   			-- need to find a way to account for a caster or subject walking into an
   248    248   			-- existing antimagic field, or someone with an existing antimagic aura
   249    249   			-- walking into range of the anchor. so every time a spell effect would
   250    250   			-- take place, we first check to see if it's in range of something nasty
   251    251   			if not s.disjunction and -- avoid self-disjunction
   252         -				(s.caster and sorcery.spell.probe(s.caster:get_pos()).disjunction) or
   253         -				(s.anchor and sorcery.spell.probe(s.anchor,s.range).disjunction) then
          252  +				((s.caster and sorcery.spell.probe(s.caster:get_pos()).disjunction) or
          253  +				 (s.anchor and sorcery.spell.probe(s.anchor,s.range).disjunction)) then
   254    254   				sorcery.spell.disjoin{spell=s}
   255    255   			else
   256    256   				if not s.disjunction then for _,sub in pairs(s.subjects) do
   257    257   					local sp = sub.player:get_pos()
   258    258   					if sorcery.spell.probe(sp).disjunction then
   259    259   						sorcery.spell.disjoin{pos=sp}
   260    260   					end

Modified vfx.lua from [dc765bd287] to [ee7b81ab5a].

   206    206   	else
   207    207   		local dir = vector.subtract(tgt.above,tgt.under)
   208    208   		minvel = vector.multiply(dir, 0.3)
   209    209   		maxvel = vector.multiply(dir, 1.2)
   210    210   	end
   211    211   	print(minetest.get_player_by_name('singleplayer'))
   212    212   	return minetest.add_particlespawner {
   213         -		amount = 450;--50;
   214         -		time = 2;--0.5;
          213  +		amount = 50;
          214  +		time = 0.5;
   215    215   		-- old syntax
   216    216   		minpos = vector.subtract(tgt.under, 0.5);
   217    217   		maxpos = vector.add(tgt.under, 0.5);
   218    218   		minvel = minvel, maxvel = maxvel;
   219    219   		minexptime = 1, maxexptime = 2;
   220    220   		minsize = 0.5, maxsize = 2;
   221    221   		texture = L.image('sorcery_spark.png'):multiply(color):render();
   222         -
   223         -		--new syntax
   224         -		-- can't use this shit until it gets merged :(
   225         -	-- 		pos = {
   226         -	-- 			min = vector.subtract(tgt.under, 0.5);
   227         -	-- 			max = vector.add(tgt.under, 0.5);
   228         -	-- 		};
   229         --- 		pos = {
   230         --- 			min = vector.subtract(tgt.under, 0.8);
   231         --- 			max = vector.add     (tgt.under, 0.8);
   232         --- 		};
   233         --- 		vel_tween = {
   234         --- 			{min = minvel, max = maxvel};
   235         --- 			{min = minvel * 3, max = maxvel * 3};
   236         --- 		};
   237         --- 		acc = {
   238         --- 			min = vector.new(0,-2,0);
   239         --- 			max = vector.new(0,-5,0);
   240         --- 		};
   241         --- 		bounce = { min = 0.3, max = 2 };
   242         --- 		exptime = { min = 0.5, max = 10 };
   243         --- 		size = { min = 0.5, max = 1 };
   244         --- 		collisiondetection = true;
   245         ---
   246         --- 		texpool = {
   247         --- 			{
   248         --- 				img = L.image('sorcery_spark.png'):multiply(color):render();
   249         --- -- 				img = 'sorcery_inferno_crystal.png';
   250         --- 				alpha_tween = { 0.8, 1; style = 'pulse', reps = 4};
   251         --- -- 	        scale = {x=4,y=0.5};
   252         --- 				scale_tween = { {x=2,y=3}; {x=0,y=0}; style = 'pulse', reps = 6 };
   253         --- 			};
   254         --- 	-- 			{
   255         --- 	-- 				img = L.image('sorcery_divine_radiance_1.png'):multiply(L.color(255,0,0)):render();
   256         --- 	-- 				fade = 'pulse';
   257         --- 	-- 				fade_reps = 3;
   258         --- 	-- 			};
   259         --- 		};
   260         --- 		radius = {
   261         --- 			min = vector.new(0,0,0);
   262         --- 			max = 0;
   263         --- 		};
   264         -		-- animation = {
   265         -		-- 	type = 'vertical_frames';
   266         -		-- 	aspect_w = 16, aspect_h = 16;
   267         -		-- 	length = -1;
   268         -		-- };
   269         -		-- glow = 14;
          222  +		animation = {
          223  +			type = 'vertical_frames';
          224  +			aspect_w = 16, aspect_h = 16;
          225  +			length = 2.1;
          226  +		};
          227  +		glow = 14;
   270    228   	}
   271    229   end
   272    230   
   273    231   sorcery.vfx.bloodburst = function(pos,size)
   274    232   	for i=0, size or 48 do
   275    233   		minetest.add_particle{
   276    234   			texture = 'sorcery_blood_' .. math.random(5) .. '.png',