170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
...
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
...
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
...
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
|
end
sorcery.enchant.strength = function(stack,id)
-- this functions should be used whenever you need to
-- determine the power of a particular enchantment on
-- an enchanted item.
local e = sorcery.enchant.get(stack)
local p = 0.0
local slots = sorcery.matreg.lookup[stack:get_name()].data.slots
-- TODO handle strength-boosting spells!
for _,s in pairs(e.spells) do
if s.id == id then p = p + ((s.boost * slots[s.slot].confluence)/10) end
end
return p
end
sorcery.enchant.stackup = function(stack)
-- stack update function. this should be called whenever
-- the enchantment status of a stack changes; it will
-- alter/reset tool capabilities and tooltip as necessary
local e = sorcery.enchant.get(stack)
local meta = stack:get_meta()
................................................................................
local material = sorcery.enchant.getsubj(tool)
local totalcost = 0
do local done = {} for _,sp in pairs(ench.spells) do
if done[sp.id] then goto skip end
done[sp.id] = true
local data = sorcery.data.enchants[sp.id]
local strength = sorcery.enchant.strength(tool,sp.id)
local ch = math.random(1,100)
local props = {
fail = ch > sp.reliability;
user = puncher;
pos = pos;
node = node;
tool = tool;
................................................................................
enchantment = ench;
power = strength;
spell = sp;
sparks = sparks;
cost = data.cost;
}
if data.on_dig then data.on_dig(props) end
if props.cost ~= 0 then totalcost = totalcost + math.max(1,math.floor(props.cost * strength)) end
if ch > sp.reliability then goto skip end
sparks[#sparks + 1] = {
color = sorcery.lib.color(data.tone):brighten(1.1);
count = strength * 7;
}
::skip::end end
if totalcost > 0 then
local conservation = math.floor(sorcery.enchant.strength(tool,'conserve') * 6)
-- totalcost = totalcost - (totalcost * conservation)
if conservation == 0 or math.random(conservation) == 1 then
ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0)))
................................................................................
};
velocity = {
x = range(-1.3,1.3);
z = range(-1.3,1.3);
y = range( 0.3,0.9);
};
expirationtime = life;
size = range(0.5,1.5);
texture = sorcery.lib.image('sorcery_spark.png'):multiply(s.color):render();
glow = 14;
animation = {
type = "vertical_frames";
aspect_w = 16;
aspect_h = 16;
length = life + 0.1;
|
|
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
...
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
...
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
...
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
|
end
sorcery.enchant.strength = function(stack,id)
-- this functions should be used whenever you need to
-- determine the power of a particular enchantment on
-- an enchanted item.
local e = sorcery.enchant.get(stack)
local p = 0.0
local ct = 0
local slots = sorcery.matreg.lookup[stack:get_name()].data.slots
-- TODO handle strength-boosting spells!
for _,s in pairs(e.spells) do
if s.id == id then
p = p + ((s.boost * slots[s.slot].confluence)/10)
ct = ct + 1
end
end
return p, ct
end
sorcery.enchant.stackup = function(stack)
-- stack update function. this should be called whenever
-- the enchantment status of a stack changes; it will
-- alter/reset tool capabilities and tooltip as necessary
local e = sorcery.enchant.get(stack)
local meta = stack:get_meta()
................................................................................
local material = sorcery.enchant.getsubj(tool)
local totalcost = 0
do local done = {} for _,sp in pairs(ench.spells) do
if done[sp.id] then goto skip end
done[sp.id] = true
local data = sorcery.data.enchants[sp.id]
local strength, nsp = sorcery.enchant.strength(tool,sp.id)
local ch = math.random(1,100)
local props = {
fail = ch > sp.reliability;
user = puncher;
pos = pos;
node = node;
tool = tool;
................................................................................
enchantment = ench;
power = strength;
spell = sp;
sparks = sparks;
cost = data.cost;
}
if data.on_dig then data.on_dig(props) end
if props.cost ~= 0 then totalcost = totalcost + math.max(1,props.cost * nsp) --[[math.max(1,math.floor(props.cost * strength))]] end
-- strength does not increase cost but number of spell slots occupied does -- incentive for the player to be more clever, less brute-force-y
if ch > sp.reliability then goto skip end
sparks[#sparks + 1] = {
color = sorcery.lib.color(data.tone):brighten(1.1);
count = strength * 8;
}
::skip::end end
if totalcost > 0 then
local conservation = math.floor(sorcery.enchant.strength(tool,'conserve') * 6)
-- totalcost = totalcost - (totalcost * conservation)
if conservation == 0 or math.random(conservation) == 1 then
ench.energy = math.max(0,ench.energy - (totalcost - (material.data.energysource or 0)))
................................................................................
};
velocity = {
x = range(-1.3,1.3);
z = range(-1.3,1.3);
y = range( 0.3,0.9);
};
expirationtime = life;
size = range(0.2,1.5);
texture = sorcery.lib.image('sorcery_spark.png'):multiply(s.color):render();
glow = 14;
animation = {
type = "vertical_frames";
aspect_w = 16;
aspect_h = 16;
length = life + 0.1;
|