Add option for non-jumpable fences and walls

Add an option, default disabled, to extend the collision boxes upwards.
This commit is contained in:
mbartlett21 2019-09-17 06:38:02 +10:00 committed by Paramat
parent 1f7ea89cb6
commit c42a525ce8
5 changed files with 68 additions and 35 deletions

@ -60,6 +60,9 @@ default:torch 99,default:cobble 99
# Default value is true. # Default value is true.
#enable_bed_night_skip = true #enable_bed_night_skip = true
# If enabled, fences and walls cannot be jumped over.
#enable_fence_tall = false
# Whether the engine's spawn search, which does not check for a suitable # Whether the engine's spawn search, which does not check for a suitable
# starting biome, is used. # starting biome, is used.
# Default value is false. # Default value is false.

@ -273,6 +273,7 @@ end
-- --
-- Fence registration helper -- Fence registration helper
-- --
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
function default.register_fence(name, def) function default.register_fence(name, def)
minetest.register_craft({ minetest.register_craft({
@ -291,7 +292,7 @@ function default.register_fence(name, def)
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "connected", type = "connected",
fixed = {{-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}}, fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
-- connect_top = -- connect_top =
-- connect_bottom = -- connect_bottom =
connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/8 }, connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/8 },
@ -301,7 +302,17 @@ function default.register_fence(name, def)
connect_back = {{-1/16, 3/16, 1/8, 1/16, 5/16, 1/2 }, connect_back = {{-1/16, 3/16, 1/8, 1/16, 5/16, 1/2 },
{-1/16, -5/16, 1/8, 1/16, -3/16, 1/2 }}, {-1/16, -5/16, 1/8, 1/16, -3/16, 1/2 }},
connect_right = {{ 1/8, 3/16, -1/16, 1/2, 5/16, 1/16}, connect_right = {{ 1/8, 3/16, -1/16, 1/2, 5/16, 1/16},
{1/8,-5/16,-1/16,1/2,-3/16,1/16}}, { 1/8, -5/16, -1/16, 1/2, -3/16, 1/16}}
},
collision_box = {
type = "connected",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
-- connect_top =
-- connect_bottom =
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
}, },
connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"}, connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"},
inventory_image = fence_texture, inventory_image = fence_texture,
@ -349,24 +360,28 @@ function default.register_fence_rail(name, def)
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "connected", type = "connected",
fixed = { fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16},
{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16}, {-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}},
{-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}
},
-- connect_top = -- connect_top =
-- connect_bottom = -- connect_bottom =
connect_front = { connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16},
{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16},
{-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}}, {-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}},
connect_left = { connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16},
{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16},
{-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}}, {-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}},
connect_back = { connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 },
{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2},
{-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }}, {-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }},
connect_right = { connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16},
{1/16, 3/16, -1/16, 1/2, 5/16, 1/16}, { 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}
{1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}, },
collision_box = {
type = "connected",
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
-- connect_top =
-- connect_bottom =
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
}, },
connects_to = {"group:fence", "group:wall"}, connects_to = {"group:fence", "group:wall"},
inventory_image = fence_rail_texture, inventory_image = fence_rail_texture,

@ -725,6 +725,7 @@ minetest.register_craft({
----fence gate---- ----fence gate----
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
function doors.register_fencegate(name, def) function doors.register_fencegate(name, def)
local fence = { local fence = {
@ -748,7 +749,7 @@ function doors.register_fencegate(name, def)
end, end,
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}
}, },
} }
@ -774,7 +775,7 @@ function doors.register_fencegate(name, def)
fence_closed.sound = "doors_fencegate_open" fence_closed.sound = "doors_fencegate_open"
fence_closed.collision_box = { fence_closed.collision_box = {
type = "fixed", type = "fixed",
fixed = {-1/2, -1/2, -1/4, 1/2, 1/2, 1/4}, fixed = {-1/2, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
} }
local fence_open = table.copy(fence) local fence_open = table.copy(fence)
@ -784,8 +785,8 @@ function doors.register_fencegate(name, def)
fence_open.groups.not_in_creative_inventory = 1 fence_open.groups.not_in_creative_inventory = 1
fence_open.collision_box = { fence_open.collision_box = {
type = "fixed", type = "fixed",
fixed = {{-1/2, -1/2, -1/4, -3/8, 1/2, 1/4}, fixed = {{-1/2, -1/2, -1/8, -3/8, 1/2 + fence_collision_extra, 1/8},
{-1/2, -3/8, -1/2, -3/8, 3/8, 0}}, {-1/2, -3/8, -1/2, -3/8, 3/8, 0 }}
} }
minetest.register_node(":" .. name .. "_closed", fence_closed) minetest.register_node(":" .. name .. "_closed", fence_closed)

@ -2,10 +2,11 @@
walls = {} walls = {}
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
-- Load support for MT game translation. -- Load support for MT game translation.
local S = minetest.get_translator("walls") local S = minetest.get_translator("walls")
walls.register = function(wall_name, wall_desc, wall_texture_table, wall_mat, wall_sounds) walls.register = function(wall_name, wall_desc, wall_texture_table, wall_mat, wall_sounds)
--make wall_texture_table paramenter backwards compatible for mods passing single texture --make wall_texture_table paramenter backwards compatible for mods passing single texture
if type(wall_texture_table) ~= "table" then if type(wall_texture_table) ~= "table" then
@ -17,12 +18,22 @@ walls.register = function(wall_name, wall_desc, wall_texture_table, wall_mat, wa
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "connected", type = "connected",
fixed = {{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4}}, fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
-- connect_bottom = -- connect_bottom =
connect_front = {{-3/16, -1/2, -1/2, 3/16, 3/8, -1/4}}, connect_front = {-3/16, -1/2, -1/2, 3/16, 3/8, -1/4},
connect_left = {{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16}}, connect_left = {-1/2, -1/2, -3/16, -1/4, 3/8, 3/16},
connect_back = {{-3/16, -1/2, 1/4, 3/16, 3/8, 1/2}}, connect_back = {-3/16, -1/2, 1/4, 3/16, 3/8, 1/2},
connect_right = {{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}}, connect_right = { 1/4, -1/2, -3/16, 1/2, 3/8, 3/16},
},
collision_box = {
type = "connected",
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2 + fence_collision_extra, 1/4},
-- connect_top =
-- connect_bottom =
connect_front = {-1/4,-1/2,-1/2,1/4,1/2 + fence_collision_extra,-1/4},
connect_left = {-1/2,-1/2,-1/4,-1/4,1/2 + fence_collision_extra,1/4},
connect_back = {-1/4,-1/2,1/4,1/4,1/2 + fence_collision_extra,1/2},
connect_right = {1/4,-1/2,-1/4,1/2,1/2 + fence_collision_extra,1/4},
}, },
connects_to = { "group:wall", "group:stone", "group:fence" }, connects_to = { "group:wall", "group:stone", "group:fence" },
paramtype = "light", paramtype = "light",

@ -32,6 +32,9 @@ enable_bed_respawn (Respawn at bed) bool true
# in beds. # in beds.
enable_bed_night_skip (Skip night when sleeping) bool true enable_bed_night_skip (Skip night when sleeping) bool true
# If enabled, fences and walls cannot be jumped over.
enable_fence_tall (Tall fences and walls) bool false
# When TNT explodes, it destroys nearby nodes and damages nearby players. # When TNT explodes, it destroys nearby nodes and damages nearby players.
# This setting is disabled by default on servers. # This setting is disabled by default on servers.
enable_tnt (TNT) bool true enable_tnt (TNT) bool true