From fa1d442dcedf1f3f1ba5e39ae67960205ef84487 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Fri, 29 Mar 2024 10:19:02 +0100 Subject: [PATCH 1/7] Add per-block pathfinding costs --- mods/rp_pathfinder/init.lua | 56 +++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/mods/rp_pathfinder/init.lua b/mods/rp_pathfinder/init.lua index 55f7e42e..72a30a49 100644 --- a/mods/rp_pathfinder/init.lua +++ b/mods/rp_pathfinder/init.lua @@ -57,14 +57,48 @@ local function get_distance_2d(pos1, pos2) return distX + distZ end --- 3D distance heuristic between pos1 and pos2 -local function get_distance_3d(pos1, pos2) - local distX = math.abs(pos1.x - pos2.x) - local distY = math.abs(pos1.y - pos2.y) - local distZ = math.abs(pos1.z - pos2.z) - - -- Manhattan distance - return distX + distY + distZ +-- Get actual cost to walk from pos1 to pos2 (which must be a neighbor) +local function get_neighbor_cost(pos1, pos2, get_node) + local floor = vector.offset(pos2, 0, -1, 0) + local floornode = get_node(floor) + local fnn = floornode.name + if fnn == "rp_default:heated_dirt_path" then + return 1 + elseif minetest.get_item_group(fnn, "path") ~= 0 then + return 3 + elseif minetest.get_item_group(fnn, "stone") ~= 0 or + minetest.get_item_group(fnn, "bricks") ~= 0 or + fnn == "rp_default:cobble" or + fnn == "rp_default:compressed_sandstone" or + fnn == "rp_default:reinforced_compressed_sandstone" or + fnn == "rp_default:reinforced_frame" or + fnn == "rp_default:reinforced_cobble" or + fnn == "rp_default:frame" or + fnn == "rp_default:glass" or + fnn == "rp_mobs_mobs:wool" or + fnn == "rp_mobs_mobs:wool_painted" or + fnn == "rp_default:block_bronze" or + fnn == "rp_default:block_steel" or + fnn == "rp_default:block_carbon_steel" or + fnn == "rp_default:block_wrought_iron" or + fnn == "rp_default:block_tin" or + fnn == "rp_default:block_copper" or + minetest.get_item_group(fnn, "planks") ~= 0 then + return 6 + elseif minetest.get_item_group(fnn, "furnace") ~= 0 or + minetest.get_item_group(fnn, "chest") ~= 0 or + minetest.get_item_group(fnn, "bed") ~= 0 or + fnn == "rp_itemshow:showcase" or + fnn == "rp_default:bookshelf" or + fnn == "rp_decor:barrel" or + fnn == "rp_music:player" or + fnn == "rp_jewel:bench" then + return 50 + elseif fnn == "rp_default:cactus" or fnn == "rp_tnt:tnt" or fnn == "rp_tnt:tnt_burning" then + return 100 + else + return 9 + end end -- Checks nodes above pos to be non-blocking. @@ -360,7 +394,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) -- Add the first search node to open set at the start - local h_first = get_distance_3d(pos1, pos2) + local h_first = get_neighbor_cost(pos1, pos2, get_node) set_search_node(open_set, start_hash, { pos = pos1, parent = nil, @@ -472,7 +506,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) local g = 0 -- cost from start local h -- estimated cost from search node to finish local f -- g+h - local neighbor_cost = current_data.g + get_distance_3d(current_data.pos, neighbor.pos) + local neighbor_cost = current_data.g + get_neighbor_cost(current_data.pos, neighbor.pos, get_node) local neighbor_data = get_search_node(open_set, neighbor.hash) local neighbor_exists if neighbor_data then @@ -482,7 +516,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) neighbor_exists = false end if not neighbor_exists or neighbor_cost < g then - h = get_distance_3d(neighbor.pos, pos2) + h = get_neighbor_cost(neighbor.pos, pos2, get_node) g = neighbor_cost f = g + h set_search_node(open_set, neighbor.hash, { From f63b3d7aa3280c83e53d0ac9f94b947cb241533a Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 22 May 2024 22:21:17 +0200 Subject: [PATCH 2/7] Pathfinder: Refactor floor cost --- mods/rp_pathfinder/init.lua | 72 +++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/mods/rp_pathfinder/init.lua b/mods/rp_pathfinder/init.lua index c767d06e..f6ce4487 100644 --- a/mods/rp_pathfinder/init.lua +++ b/mods/rp_pathfinder/init.lua @@ -104,50 +104,54 @@ local function get_distance_2d(pos1, pos2) return distX + distZ end --- Get actual cost to walk from pos1 to pos2 (which must be a neighbor) -local function get_neighbor_cost(pos1, pos2, get_node) - local floor = vector.offset(pos2, 0, -1, 0) - local floornode = get_node(floor) - local fnn = floornode.name - if fnn == "rp_default:heated_dirt_path" then +local function get_floor_cost(node) + local nn = node.name + if nn == "rp_default:heated_dirt_path" then return 1 - elseif minetest.get_item_group(fnn, "path") ~= 0 then + elseif minetest.get_item_group(nn, "path") ~= 0 then return 3 - elseif minetest.get_item_group(fnn, "stone") ~= 0 or - minetest.get_item_group(fnn, "bricks") ~= 0 or - fnn == "rp_default:cobble" or - fnn == "rp_default:compressed_sandstone" or - fnn == "rp_default:reinforced_compressed_sandstone" or - fnn == "rp_default:reinforced_frame" or - fnn == "rp_default:reinforced_cobble" or - fnn == "rp_default:frame" or - fnn == "rp_default:glass" or - fnn == "rp_mobs_mobs:wool" or - fnn == "rp_mobs_mobs:wool_painted" or - fnn == "rp_default:block_bronze" or - fnn == "rp_default:block_steel" or - fnn == "rp_default:block_carbon_steel" or - fnn == "rp_default:block_wrought_iron" or - fnn == "rp_default:block_tin" or - fnn == "rp_default:block_copper" or - minetest.get_item_group(fnn, "planks") ~= 0 then + elseif minetest.get_item_group(nn, "stone") ~= 0 or + minetest.get_item_group(nn, "bricks") ~= 0 or + nn == "rp_default:cobble" or + nn == "rp_default:compressed_sandstone" or + nn == "rp_default:reinforced_compressed_sandstone" or + nn == "rp_default:reinforced_frame" or + nn == "rp_default:reinforced_cobble" or + nn == "rp_default:frame" or + nn == "rp_default:glass" or + nn == "rp_mobs_mobs:wool" or + nn == "rp_mobs_mobs:wool_painted" or + nn == "rp_default:block_bronze" or + nn == "rp_default:block_steel" or + nn == "rp_default:block_carbon_steel" or + nn == "rp_default:block_wrought_iron" or + nn == "rp_default:block_tin" or + nn == "rp_default:block_copper" or + minetest.get_item_group(nn, "planks") ~= 0 then return 6 - elseif minetest.get_item_group(fnn, "furnace") ~= 0 or - minetest.get_item_group(fnn, "chest") ~= 0 or - minetest.get_item_group(fnn, "bed") ~= 0 or - fnn == "rp_itemshow:showcase" or - fnn == "rp_default:bookshelf" or - fnn == "rp_decor:barrel" or - fnn == "rp_music:player" or - fnn == "rp_jewel:bench" then + elseif minetest.get_item_group(nn, "furnace") ~= 0 or + minetest.get_item_group(nn, "chest") ~= 0 or + minetest.get_item_group(nn, "bed") ~= 0 or + nn == "rp_itemshow:showcase" or + nn == "rp_default:bookshelf" or + nn == "rp_decor:barrel" or + nn == "rp_music:player" or + nn == "rp_jewel:bench" then return 50 - elseif fnn == "rp_default:cactus" or fnn == "rp_tnt:tnt" or fnn == "rp_tnt:tnt_burning" then + elseif nn == "rp_default:cactus" or nn == "rp_tnt:tnt" or nn == "rp_tnt:tnt_burning" then return 100 else return 9 end end +-- Get actual cost to walk from pos1 to pos2 (which must be a neighbor) +local function get_neighbor_cost(pos1, pos2, get_node) + local floor = vector.offset(pos2, 0, -1, 0) + local floornode = get_node(floor) + return get_floor_cost(floornode) +end + -- Checks nodes above pos to be non-blocking. -- Returns true if all nodes are non-blocking, -- false otherwise From 42f7871a8380ddc8794b41acf7ebbf541d8d336d Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 29 May 2024 18:14:19 +0200 Subject: [PATCH 3/7] Move pathfinder costs to villager.lua --- mods/rp_mobs_mobs/mobs/villager.lua | 45 +++++++++++++++++++++ mods/rp_pathfinder/API.md | 4 ++ mods/rp_pathfinder/init.lua | 61 +++++++---------------------- 3 files changed, 64 insertions(+), 46 deletions(-) diff --git a/mods/rp_mobs_mobs/mobs/villager.lua b/mods/rp_mobs_mobs/mobs/villager.lua index 0764f987..64712c7d 100644 --- a/mods/rp_mobs_mobs/mobs/villager.lua +++ b/mods/rp_mobs_mobs/mobs/villager.lua @@ -155,6 +155,50 @@ local is_node_swimmable = function(node) end end +-- Cost function for rp_pathfinder. Returns the cost of walking +-- *on* a node. +local function get_floor_cost(node) + local nn = node.name + if nn == "rp_default:heated_dirt_path" then + return 1 + elseif minetest.get_item_group(nn, "path") ~= 0 then + return 3 + elseif minetest.get_item_group(nn, "stone") ~= 0 or + minetest.get_item_group(nn, "bricks") ~= 0 or + nn == "rp_default:cobble" or + nn == "rp_default:compressed_sandstone" or + nn == "rp_default:reinforced_compressed_sandstone" or + nn == "rp_default:reinforced_frame" or + nn == "rp_default:reinforced_cobble" or + nn == "rp_default:frame" or + nn == "rp_default:glass" or + nn == "rp_mobs_mobs:wool" or + nn == "rp_mobs_mobs:wool_painted" or + nn == "rp_default:block_bronze" or + nn == "rp_default:block_steel" or + nn == "rp_default:block_carbon_steel" or + nn == "rp_default:block_wrought_iron" or + nn == "rp_default:block_tin" or + nn == "rp_default:block_copper" or + minetest.get_item_group(nn, "planks") ~= 0 then + return 6 + elseif minetest.get_item_group(nn, "furnace") ~= 0 or + minetest.get_item_group(nn, "chest") ~= 0 or + minetest.get_item_group(nn, "bed") ~= 0 or + nn == "rp_itemshow:showcase" or + nn == "rp_default:bookshelf" or + nn == "rp_decor:barrel" or + nn == "rp_music:player" or + nn == "rp_jewel:bench" then + return 50 + elseif nn == "rp_default:cactus" or nn == "rp_tnt:tnt" or nn == "rp_tnt:tnt_burning" then + return 100 + else + return 9 + end +end + + local PATHFINDER_SEARCHDISTANCE = 30 local PATHFINDER_TIMEOUT = 1.0 local PATHFINDER_OPTIONS = { @@ -166,6 +210,7 @@ local PATHFINDER_OPTIONS = { respect_disable_jump = true, handler_walkable = is_node_walkable, handler_blocking = is_node_blocking, + get_floor_cost = get_floor_cost, use_vmanip = true, } diff --git a/mods/rp_pathfinder/API.md b/mods/rp_pathfinder/API.md index 29d9bd83..f607e644 100644 --- a/mods/rp_pathfinder/API.md +++ b/mods/rp_pathfinder/API.md @@ -44,6 +44,10 @@ restrictions and does not cut corners. * `handler_climbable`: A function that takes a node table and returns true if the node is considered climable (default: if `climbing` field of node is true) + * `get_floor_cost`: Function that takes a node table and returns + the cost (a number) of walking _on_ the given node. The villager searches + for the path with the lowest total cost. By default, the cost is 1 + for all nodes. The function _MUST NOT_ return a negative cost! * `use_vmanip`: If true, nodes will be queried using a LuaVoxelManip; otherwise, `minetest.get_node` will be used. Required for async usage. diff --git a/mods/rp_pathfinder/init.lua b/mods/rp_pathfinder/init.lua index f6ce4487..5c3664be 100644 --- a/mods/rp_pathfinder/init.lua +++ b/mods/rp_pathfinder/init.lua @@ -104,52 +104,20 @@ local function get_distance_2d(pos1, pos2) return distX + distZ end -local function get_floor_cost(node) - local nn = node.name - if nn == "rp_default:heated_dirt_path" then - return 1 - elseif minetest.get_item_group(nn, "path") ~= 0 then - return 3 - elseif minetest.get_item_group(nn, "stone") ~= 0 or - minetest.get_item_group(nn, "bricks") ~= 0 or - nn == "rp_default:cobble" or - nn == "rp_default:compressed_sandstone" or - nn == "rp_default:reinforced_compressed_sandstone" or - nn == "rp_default:reinforced_frame" or - nn == "rp_default:reinforced_cobble" or - nn == "rp_default:frame" or - nn == "rp_default:glass" or - nn == "rp_mobs_mobs:wool" or - nn == "rp_mobs_mobs:wool_painted" or - nn == "rp_default:block_bronze" or - nn == "rp_default:block_steel" or - nn == "rp_default:block_carbon_steel" or - nn == "rp_default:block_wrought_iron" or - nn == "rp_default:block_tin" or - nn == "rp_default:block_copper" or - minetest.get_item_group(nn, "planks") ~= 0 then - return 6 - elseif minetest.get_item_group(nn, "furnace") ~= 0 or - minetest.get_item_group(nn, "chest") ~= 0 or - minetest.get_item_group(nn, "bed") ~= 0 or - nn == "rp_itemshow:showcase" or - nn == "rp_default:bookshelf" or - nn == "rp_decor:barrel" or - nn == "rp_music:player" or - nn == "rp_jewel:bench" then - return 50 - elseif nn == "rp_default:cactus" or nn == "rp_tnt:tnt" or nn == "rp_tnt:tnt_burning" then - return 100 - else - return 9 - end -end - -- Get actual cost to walk from pos1 to pos2 (which must be a neighbor) -local function get_neighbor_cost(pos1, pos2, get_node) +-- * pos1: Origin position +-- * pos2: Target position (neighbor of pos1) +-- * get_node: get_node function +-- * get_floor_cost(node): Function that, given a node table, returns the +-- cost of walking *on* this node (default cost is 1) +local function get_neighbor_cost(pos1, pos2, get_node, get_floor_cost) local floor = vector.offset(pos2, 0, -1, 0) local floornode = get_node(floor) - return get_floor_cost(floornode) + if not get_floor_cost then + return 1 + else + return get_floor_cost(floornode) + end end -- Checks nodes above pos to be non-blocking. @@ -402,6 +370,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) local max_jump = options.max_jump or 0 local respect_disable_jump = options.respect_disable_jump or false local respect_climb_restrictions = options.respect_climb_restrictions + local get_floor_cost = options.get_floor_cost if respect_climb_restrictions == nil then respect_climb_restrictions = true end @@ -484,7 +453,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) -- Add the first search node to open set at the start - local h_first = get_neighbor_cost(pos1, pos2, get_node) + local h_first = get_neighbor_cost(pos1, pos2, get_node, get_floor_cost) set_search_node(open_set, start_hash, { pos = pos1, parent = nil, @@ -615,7 +584,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) local g = 0 -- cost from start local h -- estimated cost from search node to finish local f -- g+h - local neighbor_cost = current_data.g + get_neighbor_cost(current_data.pos, neighbor.pos, get_node) + local neighbor_cost = current_data.g + get_neighbor_cost(current_data.pos, neighbor.pos, get_node, get_floor_cost) local neighbor_data = get_search_node(open_set, neighbor.hash) local neighbor_exists if neighbor_data then @@ -625,7 +594,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout) neighbor_exists = false end if not neighbor_exists or neighbor_cost < g then - h = get_neighbor_cost(neighbor.pos, pos2, get_node) + h = get_neighbor_cost(neighbor.pos, pos2, get_node, get_floor_cost) g = neighbor_cost f = g + h set_search_node(open_set, neighbor.hash, { From a4f6392ed680a9dce060e55c5c4593934e5d8010 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 29 May 2024 18:30:36 +0200 Subject: [PATCH 4/7] Slight performance boost for pathfinder --- mods/rp_pathfinder/init.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mods/rp_pathfinder/init.lua b/mods/rp_pathfinder/init.lua index 5c3664be..5bfcaf61 100644 --- a/mods/rp_pathfinder/init.lua +++ b/mods/rp_pathfinder/init.lua @@ -111,13 +111,12 @@ end -- * get_floor_cost(node): Function that, given a node table, returns the -- cost of walking *on* this node (default cost is 1) local function get_neighbor_cost(pos1, pos2, get_node, get_floor_cost) - local floor = vector.offset(pos2, 0, -1, 0) - local floornode = get_node(floor) if not get_floor_cost then return 1 - else - return get_floor_cost(floornode) end + local floor = vector.offset(pos2, 0, -1, 0) + local floornode = get_node(floor) + return get_floor_cost(floornode) end -- Checks nodes above pos to be non-blocking. From 9d59b467ad6fe8d8db6c9f905ff440b8915fd95d Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 16 Jul 2024 22:40:03 +0200 Subject: [PATCH 5/7] Add pathfinder_* and furnace groups --- DEV_GROUPS.md | 23 ++++++- mods/rp_bed/init.lua | 4 +- mods/rp_book/bookshelf.lua | 2 +- mods/rp_decor/init.lua | 2 +- mods/rp_default/chest.lua | 4 +- mods/rp_default/fertilizer.lua | 4 ++ mods/rp_default/furnace.lua | 4 +- mods/rp_default/nodes_base.lua | 94 ++++++++++++++--------------- mods/rp_default/nodes_plants.lua | 2 +- mods/rp_default/nodes_trees.lua | 14 ++--- mods/rp_door/init.lua | 1 + mods/rp_farming/nodes.lua | 4 +- mods/rp_gold/init.lua | 4 +- mods/rp_itemshow/init.lua | 3 +- mods/rp_jewels/init.lua | 2 +- mods/rp_locks/init.lua | 2 +- mods/rp_lumien/init.lua | 6 +- mods/rp_mobs_mobs/crafts.lua | 2 +- mods/rp_mobs_mobs/mobs/villager.lua | 38 +++--------- mods/rp_music/init.lua | 4 +- mods/rp_partialblocks/register.lua | 60 +++++++++--------- mods/rp_pathfinder/API.md | 3 + mods/rp_tnt/init.lua | 4 +- 23 files changed, 147 insertions(+), 139 deletions(-) diff --git a/DEV_GROUPS.md b/DEV_GROUPS.md index f5c4be5d..d8a88fc3 100644 --- a/DEV_GROUPS.md +++ b/DEV_GROUPS.md @@ -92,6 +92,25 @@ any of the other digging groups, make sure dig times of the weakest tool are still faster than with the hand (test this in-game to make sure). Also, never use `handy` and `oddly_breakable_by_hand` at the same time. +### Pathfinder groups + +These groups very roughly categorize nodes for pathfinding. Specifically, +the cost function in the `rp_pathfinder` mod. The groups +are based on how the node would "feel" when you're barefoot. +The pathfinder can use the groups to use preferences for paths. +It’s not restricted to these groups, however, as the groups are intentionally +very broad. + +It is recommended that every walkable node has at least one pathfinder +group. Non-walkable nodes don't need this. + +* `pathfinder_crumbly`: Floor gives in (dirt, etc.) +* `pathfinder_fibrous`: Fiber- or plant-based floor (grass, leaves, ...) +* `pathfinder_spiky`: Somewhat spiky floor with sharp edges (cactus, gravel, ...) +* `pathfinder_thin`: Block has a very thin walking surface (door, ...) +* `pathfinder_hard`: Generic hard floor (stone, wood, ...) +* `pathfinder_soft`: Generic soft floor (sand, cotton, ...) + ### Interactive node groups: * `soil`: For blocks that allow several plants to grow * `leafdecay`: Node decays if not close to a `tree` group node (max. distance = rating). @@ -162,11 +181,13 @@ Unlike `attached_node`, they also work if the node is not `walkable`. Use these * `dry_leaves`: Dry leaves * `lush_leaves`: Any non-dry leaves -* `spikes`: Spikes +* `furniture`: Any piece of furniture, including workstations (e.g.: bed, chest, furnace, jeweller's workbench) * `item_showcase`: Item showcase * `chest`: Chest (1=not locked, 2=with lock) * `furnace`: Furnace (1=inactive, 2=active) +* `spikes`: Spikes + * `plantable_dry`: You can plant farming plants on it and this node is considered to be dry * `plantable_wet`: You can plant farming plants on it and this node is considered to be wet * `plantable_sandy`: You can plant farming plants on it and this node is considered to be made out of sand diff --git a/mods/rp_bed/init.lua b/mods/rp_bed/init.lua index 88c0ebd5..f5fc7416 100644 --- a/mods/rp_bed/init.lua +++ b/mods/rp_bed/init.lua @@ -603,7 +603,7 @@ minetest.register_node( {name="bed_back_overlay.png",color="white"}, }, use_texture_alpha = "clip", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, creative_decoblock = 1, interactive_node = 1, paintable = 1 }, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, creative_decoblock = 1, interactive_node = 1, paintable = 1, furniture = 1, pathfinder_soft = 1}, is_ground_content = false, sounds = sounds, node_box = { @@ -775,7 +775,7 @@ minetest.register_node( {name="bed_inside_overlay.png",color="white"}, }, use_texture_alpha = "clip", - groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, not_in_creative_inventory = 1, paintable = 1 }, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, bed = 1, fall_damage_add_percent = -15, not_in_creative_inventory = 1, paintable = 1, furniture = 1, pathfinder_soft = 1 }, sounds = sounds, node_box = { type = "fixed", diff --git a/mods/rp_book/bookshelf.lua b/mods/rp_book/bookshelf.lua index 8cec50bb..2d20c12c 100644 --- a/mods/rp_book/bookshelf.lua +++ b/mods/rp_book/bookshelf.lua @@ -85,7 +85,7 @@ local bookshelf_def = { _tt_help = S("Provides 8 inventory slots"), tiles = {"rp_book_bookshelf_base.png", "rp_book_bookshelf_base.png", "rp_book_bookshelf_base_side.png^rp_book_bookshelf_overlay.png"}, paramtype2 = "4dir", - groups = {choppy = 3,oddly_breakable_by_hand = 2,container=1,paintable=2}, + groups = {choppy = 3,oddly_breakable_by_hand = 2,container=1,paintable=2,furniture=1,pathfinder_hard=1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), on_construct = function(pos) diff --git a/mods/rp_decor/init.lua b/mods/rp_decor/init.lua index f25768db..7fd096dd 100644 --- a/mods/rp_decor/init.lua +++ b/mods/rp_decor/init.lua @@ -5,7 +5,7 @@ minetest.register_node("rp_decor:barrel", { tiles = {"rp_decor_barrel_top.png", "rp_decor_barrel_top.png", "rp_decor_barrel_sides.png"}, paramtype2 = "facedir", on_place = minetest.rotate_node, - groups = { choppy = 2, level = -1, creative_decoblock = 1, flammable = 2 }, + groups = { choppy = 2, level = -1, creative_decoblock = 1, flammable = 2, furniture = 1, pathfinder_hard = 1 }, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 1, }) diff --git a/mods/rp_default/chest.lua b/mods/rp_default/chest.lua index 8395a5de..083264af 100644 --- a/mods/rp_default/chest.lua +++ b/mods/rp_default/chest.lua @@ -50,7 +50,7 @@ minetest.register_node( tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_sides.png", "default_chest_sides.png", "default_chest_sides.png", "default_chest_front.png"}, paramtype2 = "4dir", - groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, chest = 1, container = 1, paintable = 2}, + groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, chest = 1, container = 1, paintable = 2, furniture = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), on_construct = function(pos) @@ -86,7 +86,7 @@ minetest.register_node( -- Actual legit overlay {name="default_chest_front_painted_overlay.png",color="white"}}, paramtype2 = "color4dir", - groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, chest = 1, container = 1, paintable = 1, not_in_creative_inventory = 1}, + groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, chest = 1, container = 1, paintable = 1, not_in_creative_inventory = 1, furniture = 1, pathfinder_hard = 1}, palette = "rp_paint_palette_64d.png", is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), diff --git a/mods/rp_default/fertilizer.lua b/mods/rp_default/fertilizer.lua index 9aeafa33..2a725dde 100644 --- a/mods/rp_default/fertilizer.lua +++ b/mods/rp_default/fertilizer.lua @@ -20,6 +20,7 @@ minetest.register_node( plantable_soil = 1, plantable_fertilizer = 1, fall_damage_add_percent = -5, + pathfinder_crumbly = 1, }, drop = "rp_default:dirt", sounds = rp_sounds.node_sound_dirt_defaults(), @@ -42,6 +43,7 @@ minetest.register_node( plantable_dry = 1, plantable_fertilizer = 1, fall_damage_add_percent = -10, + pathfinder_crumbly = 1, }, drop = "rp_default:dry_dirt", sounds = rp_sounds.node_sound_dry_dirt_defaults(), @@ -64,6 +66,7 @@ minetest.register_node( plantable_wet = 1, plantable_fertilizer = 1, fall_damage_add_percent = -10, + pathfinder_crumbly = 1, }, drop = "rp_default:swamp_dirt", sounds = rp_sounds.node_sound_swamp_dirt_defaults(), @@ -82,6 +85,7 @@ minetest.register_node( plantable_sandy = 1, plantable_fertilizer = 1, fall_damage_add_percent = -10, + pathfinder_soft = 1, }, drop = "rp_default:sand", sounds = rp_sounds.node_sound_sand_defaults(), diff --git a/mods/rp_default/furnace.lua b/mods/rp_default/furnace.lua index 3b1678f7..94fb795d 100644 --- a/mods/rp_default/furnace.lua +++ b/mods/rp_default/furnace.lua @@ -171,7 +171,7 @@ minetest.register_node( tiles ={"rp_default_furnace_top.png", "rp_default_furnace_top.png", "rp_default_furnace_sides.png", "rp_default_furnace_sides.png", "rp_default_furnace_sides.png", "rp_default_furnace_front.png"}, paramtype2 = "4dir", - groups = {cracky = 2,container=1,interactive_node=1,furnace=1}, + groups = {cracky = 2,container=1,interactive_node=1,furnace=1,furniture=1,pathfinder_hard=1}, is_ground_content = false, sounds = rp_sounds.node_sound_stone_defaults(), on_construct = function(pos) @@ -207,7 +207,7 @@ minetest.register_node( paramtype2 = "4dir", light_source = 8, drop = "rp_default:furnace", - groups = {cracky = 2, container=1,interactive_node=1, furnace=2,not_in_creative_inventory=1}, + groups = {cracky = 2, container=1,interactive_node=1, furnace=2,not_in_creative_inventory=1,furniture=1,pathfinder_hard=1}, is_ground_content = false, sounds = rp_sounds.node_sound_stone_defaults(), on_construct = function(pos) diff --git a/mods/rp_default/nodes_base.lua b/mods/rp_default/nodes_base.lua index 1f515900..5422ae15 100644 --- a/mods/rp_default/nodes_base.lua +++ b/mods/rp_default/nodes_base.lua @@ -12,7 +12,7 @@ minetest.register_node( { description = S("Stone with Sulfur"), tiles = {"default_stone.png^default_mineral_sulfur.png"}, - groups = {cracky = 2, stone = 1, ore = 1}, + groups = {cracky = 2, stone = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:lump_sulfur", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -23,7 +23,7 @@ minetest.register_node( { description = S("Stone with Graphite"), tiles = {"default_stone.png^default_mineral_graphite.png"}, - groups = {cracky = 2, stone = 1, ore = 1}, + groups = {cracky = 2, stone = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:sheet_graphite", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -34,7 +34,7 @@ minetest.register_node( { description = S("Stone with Coal"), tiles = {"default_stone.png^default_mineral_coal.png"}, - groups = {cracky = 2, stone = 1, ore = 1}, + groups = {cracky = 2, stone = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:lump_coal", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -45,7 +45,7 @@ minetest.register_node( { description = S("Stone with Iron"), tiles = {"default_stone.png^default_mineral_iron.png"}, - groups = {cracky = 2, stone = 1, magnetic = 1, ore = 1}, + groups = {cracky = 2, stone = 1, magnetic = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:lump_iron", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -56,7 +56,7 @@ minetest.register_node( { description = S("Stone with Tin"), tiles = {"default_stone.png^default_mineral_tin.png"}, - groups = {cracky = 1, stone = 1, ore = 1}, + groups = {cracky = 1, stone = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:lump_tin", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -67,7 +67,7 @@ minetest.register_node( { description = S("Stone with Copper"), tiles = {"default_stone.png^default_mineral_copper.png"}, - groups = {cracky = 1, stone = 1, ore = 1}, + groups = {cracky = 1, stone = 1, ore = 1, pathfinder_hard = 1}, drop = "rp_default:lump_copper", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -80,7 +80,7 @@ minetest.register_node( { description = S("Stone"), tiles = {"default_stone.png"}, - groups = {cracky = 2, stone = 1}, + groups = {cracky = 2, stone = 1, pathfinder_hard = 1}, drop = "rp_default:cobble", sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 1, @@ -92,7 +92,7 @@ minetest.register_node( description = S("Cobble"), tiles = {"default_cobbles.png"}, stack_max = 240, - groups = {cracky = 3, stone = 1}, + groups = {cracky = 3, stone = 1, pathfinder_hard = 1}, sounds = rp_sounds.node_sound_stone_defaults(), is_ground_content = false, _rp_blast_resistance = 2, @@ -104,7 +104,7 @@ minetest.register_node( description = S("Reinforced Cobble"), tiles = {"default_reinforced_cobbles.png"}, is_ground_content = false, - groups = {cracky = 1, stone = 1}, + groups = {cracky = 1, stone = 1, pathfinder_hard = 1}, sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 6, }) @@ -114,7 +114,7 @@ minetest.register_node( { description = S("Gravel"), tiles = {"default_gravel.png"}, - groups = {crumbly = 2, falling_node = 1, gravel = 1}, + groups = {crumbly = 2, falling_node = 1, gravel = 1, pathfinder_spiky = 1}, sounds = rp_sounds.node_sound_gravel_defaults(), }) @@ -125,7 +125,7 @@ minetest.register_node( { description = S("Coal Block"), tiles = {"default_block_coal.png"}, - groups = {cracky = 3}, + groups = {cracky = 3, pathfinder_spiky = 1}, sounds = rp_sounds.node_sound_coal_defaults(), _rp_blast_resistance = 1, }) @@ -152,7 +152,7 @@ minetest.register_node( { description = S("Wrought Iron Block"), tiles = {"default_block_wrought_iron.png"}, - groups = {cracky = 2, magnetic = 1}, + groups = {cracky = 2, magnetic = 1, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_WROUGHT_IRON), is_ground_content = false, _rp_blast_resistance = 8, @@ -163,7 +163,7 @@ minetest.register_node( { description = S("Steel Block"), tiles = {"default_block_steel.png"}, - groups = {cracky = 2}, + groups = {cracky = 2, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_STEEL), is_ground_content = false, _rp_blast_resistance = 9, @@ -174,7 +174,7 @@ minetest.register_node( { description = S("Carbon Steel Block"), tiles = {"default_block_carbon_steel.png"}, - groups = {cracky = 1}, + groups = {cracky = 1, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_CARBON_STEEL), is_ground_content = false, _rp_blast_resistance = 9.25, @@ -185,7 +185,7 @@ minetest.register_node( { description = S("Bronze Block"), tiles = {"default_block_bronze.png"}, - groups = {cracky = 1}, + groups = {cracky = 1, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_BRONZE), is_ground_content = false, _rp_blast_resistance = 9.5, @@ -196,7 +196,7 @@ minetest.register_node( { description = S("Copper Block"), tiles = {"default_block_copper.png"}, - groups = {cracky = 2}, + groups = {cracky = 2, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_COPPER), is_ground_content = false, _rp_blast_resistance = 7, @@ -207,7 +207,7 @@ minetest.register_node( { description = S("Tin Block"), tiles = {"default_block_tin.png"}, - groups = {cracky = 2}, + groups = {cracky = 2, pathfinder_hard = 1}, sounds = make_metal_sounds(default.METAL_PITCH_TIN), is_ground_content = false, _rp_blast_resistance = 8.5, @@ -221,7 +221,7 @@ minetest.register_node( description = S("Dirt"), tiles = {"default_dirt.png"}, stack_max = 240, - groups = {crumbly = 3, soil = 1, dirt = 1, normal_dirt = 1, plantable_soil = 1, fall_damage_add_percent = -5}, + groups = {crumbly = 3, soil = 1, dirt = 1, normal_dirt = 1, plantable_soil = 1, fall_damage_add_percent = -5, pathfinder_crumbly = 1}, sounds = rp_sounds.node_sound_dirt_defaults(), _fertilized_node = "rp_default:fertilized_dirt", @@ -252,7 +252,7 @@ minetest.register_node( description = S("Dry Dirt"), tiles = { "default_dry_dirt.png" }, stack_max = 240, - groups = {crumbly = 3, soil = 1, dirt = 1, dry_dirt = 1, plantable_dry = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, soil = 1, dirt = 1, dry_dirt = 1, plantable_dry = 1, fall_damage_add_percent = -10, pathfinder_crumbly = 1}, sounds = rp_sounds.node_sound_dry_dirt_defaults(), _fertilized_node = "rp_default:fertilized_dry_dirt", }) @@ -263,7 +263,7 @@ minetest.register_node( description = S("Swamp Dirt"), tiles = { "default_swamp_dirt.png" }, stack_max = 240, - groups = {crumbly = 3, soil = 1, dirt = 1, swamp_dirt = 1, plantable_wet = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, soil = 1, dirt = 1, swamp_dirt = 1, plantable_wet = 1, fall_damage_add_percent = -10, pathfinder_crumbly = 1}, sounds = rp_sounds.node_sound_swamp_dirt_defaults(), _fertilized_node = "rp_default:fertilized_swamp_dirt", @@ -298,7 +298,7 @@ minetest.register_node( "default_dirt.png", "default_dirt.png^default_dry_grass_side.png" }, - groups = {crumbly = 3, soil = 1, dirt = 1, normal_dirt = 1, plantable_soil = 1, grass_cover = 1, + groups = {crumbly = 3, soil = 1, dirt = 1, normal_dirt = 1, plantable_soil = 1, grass_cover = 1, pathfinder_fibrous = 1, fall_damage_add_percent = -5}, drop = { max_items = 3, @@ -329,7 +329,7 @@ minetest.register_node( "default_swamp_dirt.png^default_swamp_grass_side.png" }, groups = {crumbly = 3, soil = 1, dirt = 1, swamp_dirt = 1, plantable_wet = 1, grass_cover = 1, - fall_damage_add_percent = -10}, + fall_damage_add_percent = -10, pathfinder_fibrous = 1}, drop = { max_items = 3, items = { @@ -359,7 +359,7 @@ minetest.register_node( "default_dirt.png^default_grass_side.png", }, groups = {crumbly = 3, soil = 1, dirt = 1, normal_dirt = 1, plantable_soil = 1, grass_cover = 1, - fall_damage_add_percent = -5}, + fall_damage_add_percent = -5, pathfinder_fibrous = 1}, drop = { max_items = 3, items = { @@ -393,7 +393,7 @@ minetest.register_node( fixed = {-0.5, -0.5, -0.5, 0.5, 0.5-2/16, 0.5} }, tiles = { "default_dirt.png" }, - groups = {crumbly = 3, path = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, path = 1, fall_damage_add_percent = -10, pathfinder_crumbly = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_dirt_defaults(), }) @@ -409,7 +409,7 @@ minetest.register_node( fixed = {-0.5, -0.5, -0.5, 0.5, -2/16, 0.5} }, tiles = { "default_dirt.png" }, - groups = {crumbly = 3, level = -1, path = 2, slab = 2, creative_decoblock = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, level = -1, path = 2, slab = 2, creative_decoblock = 1, fall_damage_add_percent = -10, pathfinder_crumbly = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_dirt_defaults(), on_place = function(itemstack, placer, pointed_thing) @@ -451,7 +451,7 @@ minetest.register_node( fixed = {-0.5, -0.5, -0.5, 0.5, 0.5-2/16, 0.5} }, tiles = { "default_dirt.png" }, - groups = {crumbly = 3, path = 1, creative_decoblock = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, path = 1, creative_decoblock = 1, fall_damage_add_percent = -10, pathfinder_crumbly = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_dirt_defaults(), }) @@ -464,7 +464,7 @@ minetest.register_node( description = S("Brick Block"), tiles = {"default_brick.png"}, is_ground_content = false, - groups = {cracky = 2, paintable = 2}, + groups = {cracky = 2, paintable = 2, pathfinder_hard = 1}, sounds = rp_sounds.node_sound_stone_defaults(), _rp_blast_resistance = 2, }) @@ -476,7 +476,7 @@ minetest.register_node( overlay_tiles = {{name="rp_default_brick_paintable_overlay.png",color="white"}}, use_texture_alpha = "blend", is_ground_content = false, - groups = {cracky = 2, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {cracky = 2, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, sounds = rp_sounds.node_sound_stone_defaults(), paramtype2 = "color", palette = "rp_paint_palette_256.png", @@ -491,7 +491,7 @@ minetest.register_node( { description = S("Sand"), tiles = {"default_sand.png"}, - groups = {crumbly = 3, falling_node = 1, sand = 1, plantable_sandy = 1, fall_damage_add_percent = -10}, + groups = {crumbly = 3, falling_node = 1, sand = 1, plantable_sandy = 1, fall_damage_add_percent = -10, pathfinder_soft = 1}, sounds = rp_sounds.node_sound_sand_defaults(), _fertilized_node = "rp_default:fertilized_sand", }) @@ -501,7 +501,7 @@ minetest.register_node( { description = S("Sandstone"), tiles = {"default_sandstone.png"}, - groups = {crumbly = 2, cracky = 3, sandstone = 1}, + groups = {crumbly = 2, cracky = 3, sandstone = 1, pathfinder_hard = 1}, drop = "rp_default:sand 2", sounds = rp_sounds.node_sound_stone_defaults({ dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.4}, @@ -515,7 +515,7 @@ minetest.register_node( { description = S("Compressed Sandstone"), tiles = {"default_compressed_sandstone_top.png", "default_compressed_sandstone_top.png", "default_compressed_sandstone.png"}, - groups = {cracky = 2, sandstone = 1}, + groups = {cracky = 2, sandstone = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_stone_defaults({ dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2}, @@ -529,7 +529,7 @@ minetest.register_node( { description = S("Reinforced Compressed Sandstone"), tiles = {"rp_default_reinforced_compressed_sandstone.png"}, - groups = {cracky = 2, sandstone = 1}, + groups = {cracky = 2, sandstone = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_stone_defaults({ dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2}, @@ -549,7 +549,7 @@ minetest.register_node( use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, - groups = {cracky = 3,oddly_breakable_by_hand = 2, glass=1, paintable=2}, + groups = {cracky = 3,oddly_breakable_by_hand = 2, glass=1, paintable=2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_glass_defaults(), drop = "rp_default:glass", @@ -568,7 +568,7 @@ minetest.register_node( use_texture_alpha = "blend", paramtype = "light", sunlight_propagates = true, - groups = {cracky = 3,oddly_breakable_by_hand = 2, glass=1, paintable=1, not_in_creative_inventory=1, not_in_craft_guide = 1}, + groups = {cracky = 3,oddly_breakable_by_hand = 2, glass=1, paintable=1, not_in_creative_inventory=1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_glass_defaults(), drop = "rp_default:glass", @@ -584,7 +584,7 @@ minetest.register_node( { description = S("Wooden Planks"), tiles = {"default_wood.png"}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 0.5, @@ -596,7 +596,7 @@ minetest.register_node( tiles = {"rp_default_wood_painted.png"}, -- HACK: This is a workaround to fix the coloring of the crack overlay overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), @@ -611,7 +611,7 @@ minetest.register_node( { description = S("Oak Planks"), tiles = {"default_wood_oak.png"}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable = 2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 0.5, @@ -623,7 +623,7 @@ minetest.register_node( tiles = {"rp_default_wood_oak_painted.png"}, -- HACK: This is a workaround to fix the coloring of the crack overlay overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), palette = "rp_paint_palette_256.png", @@ -637,7 +637,7 @@ minetest.register_node( { description = S("Birch Planks"), tiles = {"default_wood_birch.png"}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=2}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 0.5, @@ -649,7 +649,7 @@ minetest.register_node( tiles = {"rp_default_wood_birch_painted.png"}, -- HACK: This is a workaround to fix the coloring of the crack overlay overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, - groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {planks = 1, wood = 1, choppy = 3, oddly_breakable_by_hand = 3, paintable=1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), palette = "rp_paint_palette_256.png", @@ -667,7 +667,7 @@ minetest.register_node( { description = S("Frame"), tiles = {"default_frame.png"}, - groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, paintable = 2}, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, paintable = 2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 0.75, @@ -681,7 +681,7 @@ minetest.register_node( overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, paramtype2 = "color", palette = "rp_paint_palette_256.png", - groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), drop = "rp_default:frame", @@ -693,7 +693,7 @@ minetest.register_node( { description = S("Reinforced Frame"), tiles = {"default_reinforced_frame.png"}, - groups = {wood = 1, choppy = 1, paintable = 2}, + groups = {wood = 1, choppy = 1, paintable = 2, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), _rp_blast_resistance = 5, @@ -706,7 +706,7 @@ minetest.register_node( overlay_tiles = {{name="rp_default_reinforced_frame_overlay.png",color="white"}}, paramtype2 = "color", palette = "rp_paint_palette_256.png", - groups = {wood = 1, choppy = 1, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1}, + groups = {wood = 1, choppy = 1, paintable = 1, not_in_creative_inventory = 1, not_in_craft_guide = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), drop = "rp_default:reinforced_frame", @@ -724,7 +724,7 @@ minetest.register_node( "rp_default_reed_block_top.png", "rp_default_reed_block_side.png", }, - groups = {snappy=2, fall_damage_add_percent=-10}, + groups = {snappy=2, fall_damage_add_percent=-10, pathfinder_soft=1}, is_ground_content = false, sounds = rp_sounds.node_sound_grass_defaults(), _rp_blast_resistance = 0.5, @@ -738,7 +738,7 @@ minetest.register_node( "rp_default_dried_reed_block_top.png", "rp_default_dried_reed_block_side.png", }, - groups = {snappy=2, fall_damage_add_percent=-15}, + groups = {snappy=2, fall_damage_add_percent=-15, pathfinder_soft=1}, is_ground_content = false, sounds = rp_sounds.node_sound_straw_defaults(), _rp_blast_resistance = 0.5, @@ -752,7 +752,7 @@ minetest.register_node( tiles = { "rp_default_hay.png", }, - groups = {snappy=3, fall_damage_add_percent=-30}, + groups = {snappy=3, fall_damage_add_percent=-30, pathfinder_soft = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_grass_defaults({ footstep = { name = "rp_default_footstep_hay", gain = 1.0 }, diff --git a/mods/rp_default/nodes_plants.lua b/mods/rp_default/nodes_plants.lua index 1af01d4d..b34fb8d7 100644 --- a/mods/rp_default/nodes_plants.lua +++ b/mods/rp_default/nodes_plants.lua @@ -64,7 +64,7 @@ minetest.register_node( }, tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_sides.png"}, -- damage_per_second = 1, - groups = {snappy = 2, choppy = 2, fall_damage_add_percent = 20, plant = 1, food = 2}, + groups = {snappy = 2, choppy = 2, fall_damage_add_percent = 20, plant = 1, food = 2, pathfinder_spiky = 1}, sounds = rp_sounds.node_sound_defaults({ footstep = { name = "rp_default_footstep_cactus", gain = 1.0 }, dig = { name = "rp_default_dig_cactus", gain = 0.5 }, diff --git a/mods/rp_default/nodes_trees.lua b/mods/rp_default/nodes_trees.lua index b0ddaed7..14ede19f 100644 --- a/mods/rp_default/nodes_trees.lua +++ b/mods/rp_default/nodes_trees.lua @@ -157,7 +157,7 @@ minetest.register_node( { description = S("Tree"), tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, - groups = {choppy = 2,tree = 1,oddly_breakable_by_hand = 1}, + groups = {choppy = 2,tree = 1,oddly_breakable_by_hand = 1, pathfinder_hard = 1}, sounds = snd_tree, _rp_blast_resistance = 1, }) @@ -167,7 +167,7 @@ minetest.register_node( { description = S("Oak Tree"), tiles = {"default_tree_oak_top.png", "default_tree_oak_top.png", "default_tree_oak.png"}, - groups = {choppy = 2, tree = 1, oddly_breakable_by_hand = 1}, + groups = {choppy = 2, tree = 1, oddly_breakable_by_hand = 1, pathfinder_hard = 1}, sounds = snd_tree, _rp_blast_resistance = 1, }) @@ -177,7 +177,7 @@ minetest.register_node( { description = S("Birch Tree"), tiles = {"default_tree_birch_top.png", "default_tree_birch_top.png", "default_tree_birch.png"}, - groups = {choppy = 2, tree = 1, oddly_breakable_by_hand = 1}, + groups = {choppy = 2, tree = 1, oddly_breakable_by_hand = 1, pathfinder_hard = 1}, sounds = snd_tree, _rp_blast_resistance = 1, }) @@ -193,7 +193,7 @@ minetest.register_node( tiles = {"default_leaves.png"}, paramtype = "light", waving = 1, - groups = {snappy = 3, leafdecay = 3, fall_damage_add_percent = -10, leaves = 1, lush_leaves = 1}, + groups = {snappy = 3, leafdecay = 3, fall_damage_add_percent = -10, leaves = 1, lush_leaves = 1, pathfinder_fibrous = 1}, drop = { max_items = 1, items = { @@ -218,7 +218,7 @@ minetest.register_node( tiles = {"default_leaves_oak.png"}, paramtype = "light", waving = 1, - groups = {snappy = 3, leafdecay = 4, fall_damage_add_percent = -5, leaves = 1, lush_leaves = 1}, + groups = {snappy = 3, leafdecay = 4, fall_damage_add_percent = -5, leaves = 1, lush_leaves = 1, pathfinder_fibrous = 1}, drop = { max_items = 1, items = { @@ -243,7 +243,7 @@ minetest.register_node( tiles = {"default_leaves_birch.png"}, paramtype = "light", waving = 1, - groups = {snappy = 3, leafdecay = 6, fall_damage_add_percent = -5, leaves = 1, lush_leaves = 1}, + groups = {snappy = 3, leafdecay = 6, fall_damage_add_percent = -5, leaves = 1, lush_leaves = 1, pathfinder_fibrous = 1}, drop = { max_items = 1, items = { @@ -268,7 +268,7 @@ minetest.register_node( tiles = {"default_dry_leaves.png"}, paramtype = "light", waving = 1, - groups = {snappy = 3, leafdecay = 3, fall_damage_add_percent = -20, leaves = 1, dry_leaves = 1}, + groups = {snappy = 3, leafdecay = 3, fall_damage_add_percent = -20, leaves = 1, dry_leaves = 1, pathfinder_fibrous = 1}, drop = { max_items = 1, items = { diff --git a/mods/rp_door/init.lua b/mods/rp_door/init.lua index e7493ca2..a9f963f3 100644 --- a/mods/rp_door/init.lua +++ b/mods/rp_door/init.lua @@ -332,6 +332,7 @@ function door.register_door(name, def) local groups_node = table.copy(def.groups) groups_node.not_in_creative_inventory = 1 + groups_node.pathfinder_thin = 1 local groups_node_b_1 = table.copy(groups_node) -- door position: 1 = bottom, 2 = top diff --git a/mods/rp_farming/nodes.lua b/mods/rp_farming/nodes.lua index acaf793c..3b7cc905 100644 --- a/mods/rp_farming/nodes.lua +++ b/mods/rp_farming/nodes.lua @@ -270,7 +270,7 @@ minetest.register_node( is_ground_content = false, groups = {snappy = 2, oddly_breakable_by_hand = 3, fall_damage_add_percent = -15, fuzzy = 1, - unmagnetic = 1, paintable = 1}, + unmagnetic = 1, paintable = 1, pathfinder_soft=1}, sounds = rp_sounds.node_sound_fuzzy_defaults({ footstep = { name = "rp_sounds_footstep_fuzzy", gain = 0.7, pitch = 1.3 }, dig = {name="rp_sounds_dig_fuzzy", gain=0.5, pitch = 1.3 }, @@ -290,7 +290,7 @@ minetest.register_node( description = S("Straw"), tiles = {"rp_farming_straw.png"}, is_ground_content = false, - groups = {snappy = 3, fall_damage_add_percent = -15}, + groups = {snappy = 3, fall_damage_add_percent = -15, pathfinder_fibrous=1}, sounds = rp_sounds.node_sound_straw_defaults(), } ) diff --git a/mods/rp_gold/init.lua b/mods/rp_gold/init.lua index 135cd029..3ef06c8e 100644 --- a/mods/rp_gold/init.lua +++ b/mods/rp_gold/init.lua @@ -572,7 +572,7 @@ minetest.register_node( { description = S("Stone with Gold"), tiles ={"default_stone.png^gold_mineral_gold.png"}, - groups = {cracky=1, stone=1, ore=1}, + groups = {cracky=1, stone=1, ore=1, pathfinder_hard=1}, drop = "rp_gold:lump_gold", is_ground_content = true, sounds = rp_sounds.node_sound_stone_defaults(), @@ -601,7 +601,7 @@ minetest.register_node( { description = S("Gold Block"), tiles = {"gold_block.png"}, - groups = {cracky = 2}, + groups = {cracky = 2, pathfinder_hard=1}, sounds = make_metal_sounds(gold.PITCH), is_ground_content = false, _rp_blast_resistance = 8, diff --git a/mods/rp_itemshow/init.lua b/mods/rp_itemshow/init.lua index 65e1b113..6b870375 100644 --- a/mods/rp_itemshow/init.lua +++ b/mods/rp_itemshow/init.lua @@ -267,6 +267,7 @@ minetest.register_node("rp_itemshow:frame",{ sunlight_propagates = true, groups = { choppy = 2, dig_immediate = 2, creative_decoblock = 1, paintable = 1, + pathfinder_thin = 1, -- So that placing a magnocompass on it will point -- the needle to the correct direction special_magnocompass_place_handling = 1}, @@ -347,7 +348,7 @@ minetest.register_node("rp_itemshow:showcase", { tiles = {"rp_itemshow_showcase.png"}, use_texture_alpha = "clip", paramtype = "light", - groups = { item_showcase = 1, cracky = 3, oddly_breakable_by_hand = 2, uses_canonical_compass = 1, creative_decoblock = 1 }, + groups = { item_showcase = 1, cracky = 3, oddly_breakable_by_hand = 2, uses_canonical_compass = 1, creative_decoblock = 1, furniture = 1, pathfinder_hard = 1 }, sounds = rp_sounds.node_sound_glass_defaults(), is_ground_content = false, diff --git a/mods/rp_jewels/init.lua b/mods/rp_jewels/init.lua index 2ae5e085..d7065511 100644 --- a/mods/rp_jewels/init.lua +++ b/mods/rp_jewels/init.lua @@ -313,7 +313,7 @@ minetest.register_node( _tt_help = S("Tools can be upgraded with jewels here"), tiles ={"jewels_bench_top.png", "jewels_bench_bottom.png", "jewels_bench_sides.png"}, paramtype2 = "4dir", - groups = {choppy=2,oddly_breakable_by_hand=2,interactive_node=1}, + groups = {choppy=2,oddly_breakable_by_hand=2,interactive_node=1,furniture=1,pathfinder_hard=1}, is_ground_content = false, sounds = rp_sounds.node_sound_wood_defaults(), diff --git a/mods/rp_locks/init.lua b/mods/rp_locks/init.lua index ad0823fb..450ec064 100644 --- a/mods/rp_locks/init.lua +++ b/mods/rp_locks/init.lua @@ -297,7 +297,7 @@ local chest_def = { }, use_texture_alpha = "blend", paramtype2 = "4dir", - groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, locked = 1, chest = 2, container = 1, paintable = 2}, + groups = {choppy = 2, oddly_breakable_by_hand = 2, level = -1, locked = 1, chest = 2, container = 1, paintable = 2, furniture = 1, pathfinder_hard = 1}, is_ground_content = false, sounds = rp_sounds.node_sound_planks_defaults(), on_construct = function(pos) diff --git a/mods/rp_lumien/init.lua b/mods/rp_lumien/init.lua index 9ac3adfd..ecca5b1a 100644 --- a/mods/rp_lumien/init.lua +++ b/mods/rp_lumien/init.lua @@ -102,7 +102,7 @@ minetest.register_node( minetest.add_item(pos, "rp_lumien:crystal_off") end, - groups = {crumbly = 3, not_in_creative_inventory = 1}, + groups = {crumbly = 3, not_in_creative_inventory = 1, furniture = 1, pathfinder_hard = 1}, light_source = LUMIEN_CRYSTAL_LIGHT_MAX, _rp_itemshow_offset = vector.new(-0.2, 0, -0.2), drop = "rp_lumien:crystal_off", @@ -131,7 +131,7 @@ minetest.register_node( minetest.add_item(pos, "rp_lumien:crystal_off") end, - groups = {crumbly = 3, creative_decoblock = 1}, + groups = {crumbly = 3, creative_decoblock = 1, furniture = 1, pathfinder_hard = 1}, light_source = LUMIEN_CRYSTAL_LIGHT_MIN, _tt_light_source_max = LUMIEN_CRYSTAL_LIGHT_MAX, _rp_itemshow_offset = vector.new(-0.2, 0, -0.2), @@ -143,7 +143,7 @@ minetest.register_node( { description = S("Lumien Block"), tiles = {"lumien_block.png"}, - groups = {cracky = 1, mineral_natural=1}, + groups = {cracky = 1, mineral_natural=1, pathfinder_hard = 1}, light_source = LUMIEN_BLOCK_LIGHT, sounds = get_sounds(), _rp_blast_resistance = 3, diff --git a/mods/rp_mobs_mobs/crafts.lua b/mods/rp_mobs_mobs/crafts.lua index 2b447f87..08722568 100644 --- a/mods/rp_mobs_mobs/crafts.lua +++ b/mods/rp_mobs_mobs/crafts.lua @@ -15,7 +15,7 @@ minetest.register_node( -- HACK: This is a workaround to fix the coloring of the crack overlay overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, is_ground_content = false, - groups = {snappy = 2, oddly_breakable_by_hand = 3, fall_damage_add_percent = -25, fuzzy = 1, unmagnetic = 1, paintable = 1}, + groups = {snappy = 2, oddly_breakable_by_hand = 3, fall_damage_add_percent = -25, fuzzy = 1, unmagnetic = 1, paintable = 1, pathfinder_soft = 1}, sounds = rp_sounds.node_sound_fuzzy_defaults(), paramtype2 = "color", palette = "rp_paint_palette_256.png", diff --git a/mods/rp_mobs_mobs/mobs/villager.lua b/mods/rp_mobs_mobs/mobs/villager.lua index 64712c7d..bcab8cb7 100644 --- a/mods/rp_mobs_mobs/mobs/villager.lua +++ b/mods/rp_mobs_mobs/mobs/villager.lua @@ -161,38 +161,16 @@ local function get_floor_cost(node) local nn = node.name if nn == "rp_default:heated_dirt_path" then return 1 - elseif minetest.get_item_group(nn, "path") ~= 0 then - return 3 - elseif minetest.get_item_group(nn, "stone") ~= 0 or - minetest.get_item_group(nn, "bricks") ~= 0 or - nn == "rp_default:cobble" or - nn == "rp_default:compressed_sandstone" or - nn == "rp_default:reinforced_compressed_sandstone" or - nn == "rp_default:reinforced_frame" or - nn == "rp_default:reinforced_cobble" or - nn == "rp_default:frame" or - nn == "rp_default:glass" or - nn == "rp_mobs_mobs:wool" or - nn == "rp_mobs_mobs:wool_painted" or - nn == "rp_default:block_bronze" or - nn == "rp_default:block_steel" or - nn == "rp_default:block_carbon_steel" or - nn == "rp_default:block_wrought_iron" or - nn == "rp_default:block_tin" or - nn == "rp_default:block_copper" or - minetest.get_item_group(nn, "planks") ~= 0 then - return 6 - elseif minetest.get_item_group(nn, "furnace") ~= 0 or - minetest.get_item_group(nn, "chest") ~= 0 or - minetest.get_item_group(nn, "bed") ~= 0 or - nn == "rp_itemshow:showcase" or - nn == "rp_default:bookshelf" or - nn == "rp_decor:barrel" or - nn == "rp_music:player" or - nn == "rp_jewel:bench" then - return 50 elseif nn == "rp_default:cactus" or nn == "rp_tnt:tnt" or nn == "rp_tnt:tnt_burning" then return 100 + elseif minetest.get_item_group(nn, "furniture") ~= 0 then + return 50 + elseif minetest.get_item_group(nn, "path") ~= 0 then + return 3 + elseif minetest.get_item_group(nn, "pathfinder_hard") ~= 0 then + return 6 + elseif minetest.get_item_group(nn, "pathfinder_crumbly") ~= 0 then + return 7 else return 9 end diff --git a/mods/rp_music/init.lua b/mods/rp_music/init.lua index c7ccb288..66d28d6b 100644 --- a/mods/rp_music/init.lua +++ b/mods/rp_music/init.lua @@ -294,7 +294,7 @@ if minetest.settings:get_bool("music_enable") then rp_music.toggle(pos) end, - groups = {handy = 3, attached_node = 1, interactive_node = 1, paintable = 1}, + groups = {handy = 3, attached_node = 1, interactive_node = 1, paintable = 1, furniture = 1, pathfinder_hard = 1}, drop = "rp_music:player", }) @@ -369,7 +369,7 @@ else note_particle(pos, "rp_music_no_music.png") end, - groups = {handy = 3, attached_node = 1, interactive_node = 1} + groups = {handy = 3, attached_node = 1, interactive_node = 1, furniture = 1, pathfinder_hard = 1} }) end diff --git a/mods/rp_partialblocks/register.lua b/mods/rp_partialblocks/register.lua index 92c88174..c5c77d31 100644 --- a/mods/rp_partialblocks/register.lua +++ b/mods/rp_partialblocks/register.lua @@ -11,93 +11,93 @@ local empty_overlay = {{name="rp_textures_blank_paintable_overlay.png",color="wh -- Stonelike materials partialblocks.register_material( - "cobble", S("Cobble Slab"), S("Cobble Stair"), "rp_default:cobble", {cracky=3}, false, nil, "w") + "cobble", S("Cobble Slab"), S("Cobble Stair"), "rp_default:cobble", {cracky=3, pathfinder_hard=1}, false, nil, "w") partialblocks.register_material( - "stone", S("Stone Slab"), S("Stone Stair"), "rp_default:stone", {cracky=2}, false, nil, "w") + "stone", S("Stone Slab"), S("Stone Stair"), "rp_default:stone", {cracky=2, pathfinder_hard=1}, false, nil, "w") partialblocks.register_material( - "sandstone", S("Sandstone Slab"), S("Sandstone Stair"), "rp_default:sandstone", {crumbly=2, cracky=3}, false, nil, "w") + "sandstone", S("Sandstone Slab"), S("Sandstone Stair"), "rp_default:sandstone", {crumbly=2, cracky=3, pathfinder_hard=1}, false, nil, "w") partialblocks.register_material( - "brick", S("Brick Slab"), S("Brick Stair"), "rp_default:brick", {cracky=2, paintable=2}, false, nil, "w") + "brick", S("Brick Slab"), S("Brick Stair"), "rp_default:brick", {cracky=2, paintable=2, pathfinder_hard=1}, false, nil, "w") partialblocks.register_material( - "brick_painted", S("Painted Brick Slab"), S("Painted Brick Stair"), "rp_default:brick_painted", {cracky=2, paintable=1, not_in_creative_inventory=1}, false, nil, "w", nil, "w", false) + "brick_painted", S("Painted Brick Slab"), S("Painted Brick Stair"), "rp_default:brick_painted", {cracky=2, paintable=1, pathfinder_hard=1, not_in_creative_inventory=1}, false, nil, "w", nil, "w", false) -- Woodlike partialblocks.register_material( - "wood", S("Wooden Slab"), S("Wooden Stair"), "rp_default:planks", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, true, nil, "w") + "wood", S("Wooden Slab"), S("Wooden Stair"), "rp_default:planks", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2, pathfinder_hard=1}, true, nil, "w") partialblocks.register_material( - "wood_painted", S("Painted Wooden Slab"), S("Painted Wooden Stair"), "rp_default:planks_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1}, true, nil, "w", empty_overlay, "w", false) + "wood_painted", S("Painted Wooden Slab"), S("Painted Wooden Stair"), "rp_default:planks_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1, pathfinder_hard=1}, true, nil, "w", empty_overlay, "w", false) partialblocks.register_material( - "oak", S("Oak Slab"), S("Oak Stair"), "rp_default:planks_oak", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, true, nil, "w") + "oak", S("Oak Slab"), S("Oak Stair"), "rp_default:planks_oak", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2, pathfinder_hard=1}, true, nil, "w") partialblocks.register_material( - "oak_painted", S("Painted Oak Slab"), S("Painted Oak Stair"), "rp_default:planks_oak_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1}, true, nil, "w", empty_overlay, "w", false) + "oak_painted", S("Painted Oak Slab"), S("Painted Oak Stair"), "rp_default:planks_oak_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1, pathfinder_hard=1}, true, nil, "w", empty_overlay, "w", false) partialblocks.register_material( - "birch", S("Birch Slab"), S("Birch Stair"), "rp_default:planks_birch", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, true, nil, "w") + "birch", S("Birch Slab"), S("Birch Stair"), "rp_default:planks_birch", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2, pathfinder_hard=1}, true, nil, "w") partialblocks.register_material( - "birch_painted", S("Painted Birch Slab"), S("Painted Birch Stair"), "rp_default:planks_birch_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1}, true, nil, "w", empty_overlay, "w", false) + "birch_painted", S("Painted Birch Slab"), S("Painted Birch Stair"), "rp_default:planks_birch_painted", {choppy = 3, oddly_breakable_by_hand = 3, not_in_creative_inventory=1, paintable = 1, pathfinder_hard=1}, true, nil, "w", empty_overlay, "w", false) -- Reed partialblocks.register_material( - "reed", S("Reed Slab"), S("Reed Stair"), "rp_default:reed_block", {snappy = 2, fall_damage_add_percent=-10}, true, nil, "w") + "reed", S("Reed Slab"), S("Reed Stair"), "rp_default:reed_block", {snappy = 2, fall_damage_add_percent=-10, pathfinder_soft=1}, true, nil, "w") partialblocks.register_material( - "dried_reed", S("Dried Reed Slab"), S("Dried Reed Stair"), "rp_default:dried_reed_block", {snappy = 2, fall_damage_add_percent=-15}, true, nil, "w") + "dried_reed", S("Dried Reed Slab"), S("Dried Reed Stair"), "rp_default:dried_reed_block", {snappy = 2, fall_damage_add_percent=-15, pathfinder_soft=1}, true, nil, "w") partialblocks.register_material( - "straw", S("Straw Slab"), S("Straw Stair"), "rp_farming:straw", {snappy = 3, fall_damage_add_percent=-15}, true, nil, "w") + "straw", S("Straw Slab"), S("Straw Stair"), "rp_farming:straw", {snappy = 3, fall_damage_add_percent=-15, pathfinder_soft=1}, true, nil, "w") partialblocks.register_material( - "hay", S("Hay Slab"), S("Hay Stair"), "rp_default:hay", {snappy = 3, fall_damage_add_percent=-30}, true, nil, "w") + "hay", S("Hay Slab"), S("Hay Stair"), "rp_default:hay", {snappy = 3, fall_damage_add_percent=-30, pathfinder_soft=1}, true, nil, "w") -- Frames partialblocks.register_material( - "frame", S("Frame Slab"), S("Frame Stair"), "rp_default:frame", {choppy = 2, oddly_breakable_by_hand = 1, paintable = 2}, true, "a|"..pbp.."frame", "a|"..pbp.."frame") + "frame", S("Frame Slab"), S("Frame Stair"), "rp_default:frame", {choppy = 2, oddly_breakable_by_hand = 1, paintable = 2, pathfinder_hard=1}, true, "a|"..pbp.."frame", "a|"..pbp.."frame") partialblocks.register_material( - "frame_painted", S("Painted Frame Slab"), S("Painted Frame Stair"), "rp_default:frame_painted", {choppy = 2, oddly_breakable_by_hand = 1, not_in_creative_inventory=1, paintable = 1}, true, "a|"..pbp.."frame_painted", "a|"..pbp.."frame_painted", nil, nil, false) + "frame_painted", S("Painted Frame Slab"), S("Painted Frame Stair"), "rp_default:frame_painted", {choppy = 2, oddly_breakable_by_hand = 1, not_in_creative_inventory=1, paintable = 1, pathfinder_hard=1}, true, "a|"..pbp.."frame_painted", "a|"..pbp.."frame_painted", nil, nil, false) -- The reinforced partialblocks have their level forced to 0, so are as hard to dig as the basenode. They're reinforced, after all. partialblocks.register_material( - "reinforced_frame", S("Reinforced Frame Slab"), S("Reinforced Frame Stair"), "rp_default:reinforced_frame", {choppy = 1, level = 0, paintable = 2}, true, "a|"..pbp.."reinforced_frame", "a|"..pbp.."reinforced_frame") + "reinforced_frame", S("Reinforced Frame Slab"), S("Reinforced Frame Stair"), "rp_default:reinforced_frame", {choppy = 1, level = 0, paintable = 2, pathfinder_hard=1}, true, "a|"..pbp.."reinforced_frame", "a|"..pbp.."reinforced_frame") partialblocks.register_material( - "reinforced_frame_painted", S("Painted Reinforced Frame Slab"), S("Painted Reinforced Frame Stair"), "rp_default:reinforced_frame_painted", {choppy = 1, level = 0, not_in_creative_inventory=1, paintable = 1}, true, "a|"..pbp.."reinforced_frame_painted", "a|"..pbp.."reinforced_frame_painted", "A|"..pbp.."reinforced_frame_painted_overlay", "A|"..pbp.."reinforced_frame_painted_overlay", false) + "reinforced_frame_painted", S("Painted Reinforced Frame Slab"), S("Painted Reinforced Frame Stair"), "rp_default:reinforced_frame_painted", {choppy = 1, level = 0, not_in_creative_inventory=1, paintable = 1, pathfinder_hard=1}, true, "a|"..pbp.."reinforced_frame_painted", "a|"..pbp.."reinforced_frame_painted", "A|"..pbp.."reinforced_frame_painted_overlay", "A|"..pbp.."reinforced_frame_painted_overlay", false) partialblocks.register_material( - "reinforced_cobble", S("Reinforced Cobble Slab"), S("Reinforced Cobble Stair"), "rp_default:reinforced_cobble", {cracky = 1, level = 0}, false, "A|"..pbp.."reinforced_cobbles", "A|"..pbp.."reinforced_cobbles") + "reinforced_cobble", S("Reinforced Cobble Slab"), S("Reinforced Cobble Stair"), "rp_default:reinforced_cobble", {cracky = 1, level = 0, pathfinder_hard=1}, false, "A|"..pbp.."reinforced_cobbles", "A|"..pbp.."reinforced_cobbles") -- Coal partialblocks.register_material( - "coal", S("Coal Slab"), S("Coal Stair"), "rp_default:block_coal", { cracky = 3 }, true, "a|"..pbp.."block_coal", "a|"..pbp.."block_coal") + "coal", S("Coal Slab"), S("Coal Stair"), "rp_default:block_coal", { cracky = 3, pathfinder_spiky = 1 }, true, "a|"..pbp.."block_coal", "a|"..pbp.."block_coal") -- Metal partialblocks.register_material( - "steel", S("Steel Slab"), S("Steel Stair"), "rp_default:block_steel", { cracky = 2, level = 0 }, false, "a|"..pbp.."block_steel", "a|"..pbp.."block_steel") + "steel", S("Steel Slab"), S("Steel Stair"), "rp_default:block_steel", { cracky = 2, level = 0, pathfinder_hard=1 }, false, "a|"..pbp.."block_steel", "a|"..pbp.."block_steel") partialblocks.register_material( - "carbon_steel", S("Carbon Steel Slab"), S("Carbon Steel Stair"), "rp_default:block_carbon_steel", { cracky = 1, level = 0 }, false, "a|"..pbp.."block_carbon_steel", "a|"..pbp.."block_carbon_steel") + "carbon_steel", S("Carbon Steel Slab"), S("Carbon Steel Stair"), "rp_default:block_carbon_steel", { cracky = 1, level = 0, pathfinder_hard=1 }, false, "a|"..pbp.."block_carbon_steel", "a|"..pbp.."block_carbon_steel") partialblocks.register_material( - "wrought_iron", S("Wrought Iron Slab"), S("Wrought Iron Stair"), "rp_default:block_wrought_iron", { cracky = 2, magnetic = 1 }, false, "a|"..pbp.."block_wrought_iron", "a|"..pbp.."block_wrought_iron") + "wrought_iron", S("Wrought Iron Slab"), S("Wrought Iron Stair"), "rp_default:block_wrought_iron", { cracky = 2, magnetic = 1, pathfinder_hard=1 }, false, "a|"..pbp.."block_wrought_iron", "a|"..pbp.."block_wrought_iron") partialblocks.register_material( - "bronze", S("Bronze Slab"), S("Bronze Stair"), "rp_default:block_bronze", { cracky = 1, level = 0 }, false, "a|"..pbp.."block_bronze", "a|"..pbp.."block_bronze") + "bronze", S("Bronze Slab"), S("Bronze Stair"), "rp_default:block_bronze", { cracky = 1, level = 0, pathfinder_hard=1 }, false, "a|"..pbp.."block_bronze", "a|"..pbp.."block_bronze") partialblocks.register_material( - "copper", S("Copper Slab"), S("Copper Stair"), "rp_default:block_copper", { cracky = 2 }, false, "a|"..pbp.."block_copper", "a|"..pbp.."block_copper") + "copper", S("Copper Slab"), S("Copper Stair"), "rp_default:block_copper", { cracky = 2, pathfinder_hard=1 }, false, "a|"..pbp.."block_copper", "a|"..pbp.."block_copper") partialblocks.register_material( - "tin", S("Tin Slab"), S("Tin Stair"), "rp_default:block_tin", { cracky = 2, level = 0 }, false, "a|"..pbp.."block_tin", "a|"..pbp.."block_tin") + "tin", S("Tin Slab"), S("Tin Stair"), "rp_default:block_tin", { cracky = 2, level = 0, pathfinder_hard=1 }, false, "a|"..pbp.."block_tin", "a|"..pbp.."block_tin") partialblocks.register_material( - "gold", S("Gold Slab"), S("Gold Stair"), "rp_gold:block_gold", { cracky = 2 }, false, "a|"..pbp.."block_gold", "a|"..pbp.."block_gold") + "gold", S("Gold Slab"), S("Gold Stair"), "rp_gold:block_gold", { cracky = 2, pathfinder_hard=1 }, false, "a|"..pbp.."block_gold", "a|"..pbp.."block_gold") -- Compressed sandstone local cs_stair_tiles = { @@ -108,7 +108,7 @@ local cs_stair_tiles = { "default_compressed_sandstone.png", "default_compressed_sandstone.png" } partialblocks.register_material( - "compressed_sandstone", S("Compressed Sandstone Slab"), S("Compressed Sandstone Stair"), "rp_default:compressed_sandstone", { cracky = 2 }, false, nil, cs_stair_tiles) + "compressed_sandstone", S("Compressed Sandstone Slab"), S("Compressed Sandstone Stair"), "rp_default:compressed_sandstone", { cracky = 2, pathfinder_hard=1 }, false, nil, cs_stair_tiles) partialblocks.register_material( - "reinforced_compressed_sandstone", S("Reinforced Compressed Sandstone Slab"), S("Reinforced Compressed Sandstone Stair"), "rp_default:reinforced_compressed_sandstone", { cracky = 2 }, false, "a|"..pbp.."reinforced_compressed_sandstone", "a|"..pbp.."reinforced_compressed_sandstone") + "reinforced_compressed_sandstone", S("Reinforced Compressed Sandstone Slab"), S("Reinforced Compressed Sandstone Stair"), "rp_default:reinforced_compressed_sandstone", { cracky = 2, pathfinder_hard=1 }, false, "a|"..pbp.."reinforced_compressed_sandstone", "a|"..pbp.."reinforced_compressed_sandstone") diff --git a/mods/rp_pathfinder/API.md b/mods/rp_pathfinder/API.md index f607e644..59986607 100644 --- a/mods/rp_pathfinder/API.md +++ b/mods/rp_pathfinder/API.md @@ -48,6 +48,9 @@ restrictions and does not cut corners. the cost (a number) of walking _on_ the given node. The villager searches for the path with the lowest total cost. By default, the cost is 1 for all nodes. The function _MUST NOT_ return a negative cost! + It’s recommended this function utilizes pathfinder node groups + as laid out in `DEV_GROUPS.md` in the root Repixture directory. + But it’s not mandatory to only rely on these groups. * `use_vmanip`: If true, nodes will be queried using a LuaVoxelManip; otherwise, `minetest.get_node` will be used. Required for async usage. diff --git a/mods/rp_tnt/init.lua b/mods/rp_tnt/init.lua index a584404d..4d5b69c1 100644 --- a/mods/rp_tnt/init.lua +++ b/mods/rp_tnt/init.lua @@ -198,7 +198,7 @@ minetest.register_node( _rp_tt_has_ignitible_text = true, -- prevent rp_tt mod from adding automatic tooltip tiles = {top_tex, "tnt_bottom.png", "tnt_sides.png"}, is_ground_content = false, - groups = {handy = 2, interactive_node=1}, + groups = {handy = 2, interactive_node=1, pathfinder_hard=1}, sounds = rp_sounds.node_sound_wood_defaults(), on_blast = function(pos, intensity) @@ -243,7 +243,7 @@ minetest.register_node( light_source = 5, drop = "", is_ground_content = false, - groups = {handy = 2, not_in_creative_inventory=1}, + groups = {handy = 2, not_in_creative_inventory=1, pathfinder_hard=1}, sounds = rp_sounds.node_sound_wood_defaults(), on_timer = tnt_burning_on_timer, on_construct = function(pos) From c4ff09449bd249f6496c0cb52a0fb1eb152659ef Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 16 Jul 2024 22:43:14 +0200 Subject: [PATCH 6/7] Tweak villager path costs --- mods/rp_mobs_mobs/mobs/villager.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mods/rp_mobs_mobs/mobs/villager.lua b/mods/rp_mobs_mobs/mobs/villager.lua index bcab8cb7..75651ee9 100644 --- a/mods/rp_mobs_mobs/mobs/villager.lua +++ b/mods/rp_mobs_mobs/mobs/villager.lua @@ -166,13 +166,11 @@ local function get_floor_cost(node) elseif minetest.get_item_group(nn, "furniture") ~= 0 then return 50 elseif minetest.get_item_group(nn, "path") ~= 0 then - return 3 + return 2 elseif minetest.get_item_group(nn, "pathfinder_hard") ~= 0 then - return 6 - elseif minetest.get_item_group(nn, "pathfinder_crumbly") ~= 0 then - return 7 + return 4 else - return 9 + return 6 end end From 56336d213b12ba3a9bd9851e61c28e061f2e2b83 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 16 Jul 2024 22:45:12 +0200 Subject: [PATCH 7/7] Villager now utilizes pathfinder_thin group --- mods/rp_mobs_mobs/mobs/villager.lua | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mods/rp_mobs_mobs/mobs/villager.lua b/mods/rp_mobs_mobs/mobs/villager.lua index 75651ee9..796a37b8 100644 --- a/mods/rp_mobs_mobs/mobs/villager.lua +++ b/mods/rp_mobs_mobs/mobs/villager.lua @@ -61,11 +61,8 @@ local is_node_walkable = function(node) if not def then -- Unknown nodes are walkable return true - elseif node.name == "rp_itemshow:frame" then - -- Item frames are to thin to walk *on* - return false - elseif minetest.get_item_group(node.name, "door") ~= 0 then - -- Same for doors + elseif minetest.get_item_group(node.name, "pathfinder_thin") ~= 0 then + -- Refuse to walk on very thin nodes like item frames to avoid fall-through return false elseif minetest.get_item_group(node.name, "fence") ~= 0 then -- We refuse to walk on fences (although we could)