armor tweaks

master
NathanSalapat 2020-07-19 19:48:40 -05:00
parent 505d29daba
commit 7152a7ae1c
12 changed files with 201 additions and 136 deletions

View File

@ -11,3 +11,7 @@ Authors of media (sounds)
Yuval (CC0 1.0)
https://freesound.org/people/Yuval/sounds/197023/
env_sounds_water.*.ogg
Halion (CC0 1.0)
https://freesound.org/people/Halion/sounds/17785/
env_sounds_lava.*.ogg

View File

@ -1,11 +1,41 @@
-- Parameters
local radius = 8 -- Water node search radius around player
-- Node search radius around player
local radius = 8
-- End of parameters
local allsounds = {
["env_sounds_water"] = {
trigger = {"default:water_flowing", "default:river_water_flowing"},
base_volume = 0.04,
max_volume = 0.4,
per_node = 0.004,
},
["env_sounds_lava"] = {
trigger = {"default:lava_source", "default:lava_flowing"},
base_volume = 0,
max_volume = 0.6,
per_node = {
["default:lava_source"] = 0.008,
["default:lava_flowing"] = 0.002,
},
},
}
if minetest.settings:get_bool("river_source_sounds") then
table.insert(allsounds["env_sounds_water"].trigger,
"default:river_water_source")
end
local river_source_sounds = minetest.settings:get_bool("river_source_sounds")
-- Cache the union of all trigger nodes
local cache_triggers = {}
for sound, def in pairs(allsounds) do
for _, name in ipairs(def.trigger) do
table.insert(cache_triggers, name)
end
end
-- Update sound for player
@ -13,39 +43,57 @@ local river_source_sounds = minetest.settings:get_bool("river_source_sounds")
local function update_sound(player)
local player_name = player:get_player_name()
local ppos = player:get_pos()
ppos = vector.add(ppos, player:get_properties().eye_height)
local areamin = vector.subtract(ppos, radius)
local areamax = vector.add(ppos, radius)
local water_nodes = {"default:water_flowing", "default:river_water_flowing"}
if river_source_sounds then
table.insert(water_nodes, "default:river_water_source")
end
local wpos, _ = minetest.find_nodes_in_area(areamin, areamax, water_nodes)
local waters = #wpos
if waters == 0 then
local pos = minetest.find_nodes_in_area(areamin, areamax, cache_triggers, true)
if next(pos) == nil then -- If table empty
return
end
for sound, def in pairs(allsounds) do
-- Find average position
local posav = {0, 0, 0}
local count = 0
for _, name in ipairs(def.trigger) do
if pos[name] then
for _, p in ipairs(pos[name]) do
posav[1] = posav[1] + p.x
posav[2] = posav[2] + p.y
posav[3] = posav[3] + p.z
end
count = count + #pos[name]
end
end
-- Find average position of water positions
local wposav = vector.new()
for _, pos in ipairs(wpos) do
wposav.x = wposav.x + pos.x
wposav.y = wposav.y + pos.y
wposav.z = wposav.z + pos.z
if count > 0 then
posav = vector.new(posav[1] / count, posav[2] / count,
posav[3] / count)
-- Calculate gain
local gain = def.base_volume
if type(def.per_node) == 'table' then
for name, multiplier in pairs(def.per_node) do
if pos[name] then
gain = gain + #pos[name] * multiplier
end
end
else
gain = gain + count * def.per_node
end
gain = math.min(gain, def.max_volume)
minetest.sound_play(sound, {
pos = posav,
to_player = player_name,
gain = gain,
}, true)
end
end
wposav = vector.divide(wposav, waters)
minetest.sound_play(
"env_sounds_water",
{
pos = wposav,
to_player = player_name,
gain = math.min(0.04 + waters * 0.004, 0.4),
}
)
end
-- Update sound 'on joinplayer'
-- Update sound when player joins
minetest.register_on_joinplayer(function(player)
update_sound(player)

Binary file not shown.

Binary file not shown.

View File

@ -1,117 +1,127 @@
Helmets .25
Chestplate .5
Leggings .5
Chest:plate .5
Legging:s .5
Boots .25
Wooden Armor
Heal 0
Block 24
DMG Resist 1
Fire 0
Oxygen Regen 0
Speed 0.92
Jump 1
Gravity 1
Heal: 0
Block: 24
DMG Resist: 1
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 0.92
Jump Multiplier: 1
Gravity Multiplier: 1
Steel Armor
Heal 0
Block 36
DMG Resist 2
Fire 0
Oxygen Regen 0
Speed 0.91
Jump 1
Gravity 1.09
steel Armor
Heal: 0
Block: 36
DMG Resist: 2
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 0.91
Jump Multiplier: 1
Gravity Multiplier: 1.09
Bronze Armor
Heal 0
Block 48
DMG Resist 3
Fire 0
Oxygen Regen 0
Speed 0.91
Jump 1
Gravity 1.09
Heal: 0
Block: 48
DMG Resist: 3
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 0.91
Jump Multiplier: 1
Gravity Multiplier: 1.09
Gold Armor
Heal 0
Block 60
DMG Resist 4
Fire 0
Oxygen Regen 0
Speed 0.74
Jump 1
Gravity 1.13
Heal: 0
Block: 60
DMG Resist: 4
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 0.74
Jump Multiplier: 1
Gravity Multiplier: 1.13
Diamond Armor
Heal 0
Block 72
DMG Resist 5
Fire 0
Oxygen Regen 0
Speed 0.74
Jump 1
Gravity 1
Heal: 0
Block: 72
DMG Resist: 5
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 1
Jump Multiplier: 1
Gravity Multiplier: 1
Diamond Huntite
Heal 0
Block 78
DMG Resist 6
Fire 6
Oxygen Regen 0
Speed 1
Jump 1
Gravity 1
Heal: 0
Block: 78
DMG Resist: 6
Fire Rating: 6
Oxygen Regen: 0
Speed Multiplier: 1
Jump Multiplier: 1
Gravity Multiplier: 1
Diamond Actinolite
Heal 0
Block 78
DMG Resist 6
Fire 0
Oxygen Regen 0
Speed 1
Jump 1
Gravity 0.3
Heal: 0
Block: 78
DMG Resist: 6
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 1
Jump Multiplier: 1
Gravity Multiplier: 0.3
Diamond Prismarine
Heal: 0
Block: 78
DMG Resist: 6
Fire Rating: 0
Oxygen Regen: 4
Speed Multiplier: 1
Jump Multiplier: 1
Gravity Multiplier: 1
Diamond Bloodstone
Heal 4
Block 78
DMG Resist 6
Fire 0
Oxygen Regen 0
Speed 1
Jump 1
Gravity 1
Heal: 4
Block: 78
DMG Resist: 6
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 1
Jump Multiplier: 1
Gravity Multiplier: 1
Diamond Garnet
Heal 0
Block 78
DMG Resist 6
Fire 0
Oxygen Regen 0
Speed 2.2
Jump 1
Gravity 1
Heal: 0
Block: 78
DMG Resist: 6
Fire Rating: 0
Oxygen Regen: 0
Speed Multiplier: 2.2
Jump Multiplier: 1
Gravity Multiplier: 1
Titanium Armor
Heal 0
Block 102
DMG Resist 4
Fire 0
Oxygen Regen
Speed 1.8
Jump 1.4
Gravity .9
Heal: 0
Block: 102
DMG Resist: 4
Fire Rating: 0
Oxygen Regen:
Speed Multiplier: 1.8
Jump Multiplier: 1.4
Gravity Multiplier: .9
Thennium
Heal 1.2
Block 90
DMG Resist 8
Fire 2
Oxygen Regen 2.2
Speed 1
Jump 1
Gravity 1
Heal: 1.2
Block: 90
DMG Resist: 8
Fire Rating: 2
Oxygen Regen: 1
Speed Multiplier: 1.1
Jump Multiplier: 1
Gravity Multiplier: .6

View File

@ -4,7 +4,7 @@ armor:register_armor('epic:thennium_helmet', {
texture = 'epic_helmet_thennium.png',
preview = 'epic_helmet_thennium_pre.png',
inventory_image = 'epic_helmet_thennium_inv.png',
groups = {armor_head=1, armor_block=15, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, armor_dmg_resist=2},
groups = {armor_head=1, armor_block=15, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, physics_gravity=-.1, armor_dmg_resist=2},
armor_groups = {fleshy=1},
damage_groups = {cracky=2, snappy=1, choppy=1, level=5},
})
@ -15,7 +15,7 @@ armor:register_armor('epic:thennium_chestplate', {
texture = 'epic_chestplate_thennium.png',
preview = 'epic_chestplate_thennium_pre.png',
inventory_image = 'epic_chestplate_thennium_inv.png',
groups = {armor_torso=1, armor_block=30, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, armor_dmg_resist=2},
groups = {armor_torso=1, armor_block=30, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, physics_gravity=-.1, armor_dmg_resist=2},
armor_groups = {fleshy=1},
damage_groups = {cracky=2, snappy=1, level=5},
})
@ -26,7 +26,7 @@ armor:register_armor('epic:thennium_leggings', {
texture = 'epic_leggings_thennium.png',
preview = 'epic_leggings_thennium_pre.png',
inventory_image = 'epic_leggings_thennium_inv.png',
groups = {armor_legs=1, armor_block=30, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, armor_dmg_resist=2},
groups = {armor_legs=1, armor_block=30, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, physics_gravity=-.1, armor_dmg_resist=2},
armor_groups = {fleshy=1},
damage_groups = {cracky=2, snappy=1, level=5},
})
@ -37,7 +37,7 @@ armor:register_armor('epic:thennium_boots', {
texture = 'epic_boots_thennium.png',
preview = 'epic_boots_thennium_pre.png',
inventory_image = 'epic_boots_thennium_inv.png',
groups = {armor_feet=1, armor_block=15, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, armor_dmg_resist=2},
groups = {armor_feet=1, armor_block=15, armor_use=100, armor_water=.3, armor_fire=.5, armor_heal=.3, physics_gravity=-.1, physics_speed=.1, armor_dmg_resist=2},
armor_groups = {fleshy=1},
damage_groups = {cracky=2, snappy=1, level=5},
})

View File

@ -106,8 +106,6 @@ function epic.space_to_top_and_side(pos)
local top = {x = pos.x, y = pos.y + 1, z = pos.z}
local side_node = minetest.get_node(side)
local top_node = minetest.get_node(top)
print ('top node is '..(top_node.name))
print ('side node is '..(side_node.name))
local side_def = minetest.registered_nodes[side_node.name] or nil
local top_def = minetest.registered_nodes[top_node.name] or nil
if not top_def.buildable_to or not side_def.buildable_to then

View File

@ -393,6 +393,7 @@ minetest.register_on_player_hpchange(function(player, hp_change)
local time = last_punch_time[name] or 0
local attackchance = attack_chance[name] or 100
if time ~= 'fire' then
print ('breath is '..(player:get_breath())..' and hunger is '..(hbhunger.hunger[name]))
if player:get_breath() > 0 and hbhunger.hunger[name] >= 1 then
local dmg_resist = math.floor(armor.def[name].dmg_resist)
local block = armor.def[name].block

View File

@ -35,7 +35,7 @@ minetest.register_alias("adminshield", "shields:shield_admin")
armor:register_armor("shields:shield_wood", {
description = S("Wooden Shield"),
inventory_image = "shields_inv_shield_wood.png",
groups = {armor_shield=1, armor_heal=0, armor_block=15, armor_use=2000, flammable=1, armor_dmg_resist=.25},
groups = {armor_shield=1, armor_block=5, armor_use=2000, flammable=1, armor_dmg_resist=.25},
armor_groups = {fleshy=5},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1},
reciprocate_damage = true,
@ -49,7 +49,7 @@ armor:register_armor("shields:shield_wood", {
armor:register_armor("shields:shield_enhanced_wood", {
description = S("Enhanced Wood Shield"),
inventory_image = "shields_inv_shield_enhanced_wood.png",
groups = {armor_shield=1, armor_heal=0, armor_use=2000},
groups = {armor_shield=1, armor_block=7, armor_use=2000, armor_dmg_resist=.5},
armor_groups = {fleshy=8},
damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=2},
reciprocate_damage = true,
@ -72,8 +72,8 @@ minetest.register_craft({
armor:register_armor("shields:shield_steel", {
description = S("Steel Shield"),
inventory_image = "shields_inv_shield_steel.png",
groups = {armor_shield=1, armor_heal=0, armor_use=800,
physics_speed=-0.03, physics_gravity=0.03},
groups = {armor_shield=1, armor_block=10, armor_use=800,
physics_speed=-0.03, physics_gravity=0.03, armor_dmg_resist=.75},
armor_groups = {fleshy=10},
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
reciprocate_damage = true,
@ -88,8 +88,8 @@ armor:register_armor("shields:shield_steel", {
armor:register_armor("shields:shield_bronze", {
description = S("Bronze Shield"),
inventory_image = "shields_inv_shield_bronze.png",
groups = {armor_shield=1, armor_heal=6, armor_use=400,
physics_speed=-0.03, physics_gravity=0.03},
groups = {armor_shield=1, armor_block=15, armor_use=400,
physics_speed=-0.03, physics_gravity=0.03, armor_dmg_resist=1},
armor_groups = {fleshy=10},
damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
reciprocate_damage = true,
@ -104,7 +104,7 @@ armor:register_armor("shields:shield_bronze", {
armor:register_armor("shields:shield_diamond", {
description = S("Diamond Shield"),
inventory_image = "shields_inv_shield_diamond.png",
groups = {armor_shield=1, armor_heal=12, armor_use=200},
groups = {armor_shield=1, armor_block=20, armor_use=200, armor_dmg_resist=2},
armor_groups = {fleshy=15},
damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
reciprocate_damage = true,
@ -119,8 +119,8 @@ armor:register_armor("shields:shield_diamond", {
armor:register_armor("shields:shield_gold", {
description = S("Gold Shield"),
inventory_image = "shields_inv_shield_gold.png",
groups = {armor_shield=1, armor_heal=6, armor_use=300,
physics_speed=-0.04, physics_gravity=0.04},
groups = {armor_shield=1, armor_use=300, armor_block=17,
physics_speed=-0.04, physics_gravity=0.04, armor_dmg_resist=1.5},
armor_groups = {fleshy=10},
damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2},
reciprocate_damage = true,

View File

@ -111,6 +111,7 @@ minetest.register_craft({
local old_handle_node_drops = minetest.handle_node_drops
function minetest.handle_node_drops(pos, drops, digger)
if not digger then return end
-- are we holding Lava Pick?
if digger:get_wielded_item():get_name() ~= ('mobs:pick_lava') then
return old_handle_node_drops(pos, drops, digger)

View File

@ -1,5 +1,6 @@
local news = {
'7/18/20',
'Printing press checks above node before placing.',
'Massive overhaul of armor/combat systems.',
'',
'7/11/20',

View File

@ -1,5 +1,5 @@
local function loom_formspec(progress)
formspec =
local formspec =
'size[8,8.5]'..
'list[current_name;input;.5,1;1,1;]'..
'label[1.5,1.5;Input string]'..
@ -36,13 +36,14 @@ minetest.register_node('stations:weaving_loom', {
},
groups = {oddly_breakable_by_hand = 1, choppy=3},
after_place_node = function(pos, placer, itemstack)
if not epic.space_to_side(pos) then
if not epic.space_to_top_and_side(pos) then
minetest.remove_node(pos)
return itemstack
end
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
epic.remove_side_node(pos, oldnode)
epic.remove_top_node(pos)
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)
@ -136,13 +137,14 @@ minetest.register_node('stations:weaving_loom_locked', {
},
groups = {oddly_breakable_by_hand = 1, choppy=3},
after_place_node = function(pos, placer, itemstack)
if not epic.space_to_side(pos) then
if not epic.space_to_top_and_side(pos) then
minetest.remove_node(pos)
return itemstack
end
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
epic.remove_side_node(pos, oldnode)
epic.remove_top_node(pos)
end,
on_construct = function(pos)
local meta = minetest.get_meta(pos)