Merge branch 'villager_pathfind_cost'

This commit is contained in:
Wuzzy 2024-07-16 22:53:04 +02:00
commit ea31b01bc3
24 changed files with 179 additions and 121 deletions

View File

@ -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). 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. 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.
Its 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: ### Interactive node groups:
* `soil`: For blocks that allow several plants to grow * `soil`: For blocks that allow several plants to grow
* `leafdecay`: Node decays if not close to a `tree` group node (max. distance = rating). * `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 * `dry_leaves`: Dry leaves
* `lush_leaves`: Any non-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 * `item_showcase`: Item showcase
* `chest`: Chest (1=not locked, 2=with lock) * `chest`: Chest (1=not locked, 2=with lock)
* `furnace`: Furnace (1=inactive, 2=active) * `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_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_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 * `plantable_sandy`: You can plant farming plants on it and this node is considered to be made out of sand

View File

@ -606,7 +606,7 @@ minetest.register_node(
{name="bed_back_overlay.png",color="white"}, {name="bed_back_overlay.png",color="white"},
}, },
use_texture_alpha = "clip", 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, is_ground_content = false,
sounds = sounds, sounds = sounds,
node_box = { node_box = {
@ -778,7 +778,7 @@ minetest.register_node(
{name="bed_inside_overlay.png",color="white"}, {name="bed_inside_overlay.png",color="white"},
}, },
use_texture_alpha = "clip", 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, sounds = sounds,
node_box = { node_box = {
type = "fixed", type = "fixed",

View File

@ -85,7 +85,7 @@ local bookshelf_def = {
_tt_help = S("Provides 8 inventory slots"), _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"}, tiles = {"rp_book_bookshelf_base.png", "rp_book_bookshelf_base.png", "rp_book_bookshelf_base_side.png^rp_book_bookshelf_overlay.png"},
paramtype2 = "4dir", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
on_construct = function(pos) on_construct = function(pos)

View File

@ -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"}, tiles = {"rp_decor_barrel_top.png", "rp_decor_barrel_top.png", "rp_decor_barrel_sides.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = minetest.rotate_node, 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(), sounds = rp_sounds.node_sound_planks_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
}) })

View File

@ -50,7 +50,7 @@ minetest.register_node(
tiles = {"default_chest_top.png", "default_chest_top.png", "default_chest_sides.png", 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"}, "default_chest_sides.png", "default_chest_sides.png", "default_chest_front.png"},
paramtype2 = "4dir", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
on_construct = function(pos) on_construct = function(pos)
@ -86,7 +86,7 @@ minetest.register_node(
-- Actual legit overlay -- Actual legit overlay
{name="default_chest_front_painted_overlay.png",color="white"}}, {name="default_chest_front_painted_overlay.png",color="white"}},
paramtype2 = "color4dir", 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", palette = "rp_paint_palette_64d.png",
is_ground_content = false, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),

View File

@ -20,6 +20,7 @@ minetest.register_node(
plantable_soil = 1, plantable_soil = 1,
plantable_fertilizer = 1, plantable_fertilizer = 1,
fall_damage_add_percent = -5, fall_damage_add_percent = -5,
pathfinder_crumbly = 1,
}, },
drop = "rp_default:dirt", drop = "rp_default:dirt",
sounds = rp_sounds.node_sound_dirt_defaults(), sounds = rp_sounds.node_sound_dirt_defaults(),
@ -42,6 +43,7 @@ minetest.register_node(
plantable_dry = 1, plantable_dry = 1,
plantable_fertilizer = 1, plantable_fertilizer = 1,
fall_damage_add_percent = -10, fall_damage_add_percent = -10,
pathfinder_crumbly = 1,
}, },
drop = "rp_default:dry_dirt", drop = "rp_default:dry_dirt",
sounds = rp_sounds.node_sound_dry_dirt_defaults(), sounds = rp_sounds.node_sound_dry_dirt_defaults(),
@ -64,6 +66,7 @@ minetest.register_node(
plantable_wet = 1, plantable_wet = 1,
plantable_fertilizer = 1, plantable_fertilizer = 1,
fall_damage_add_percent = -10, fall_damage_add_percent = -10,
pathfinder_crumbly = 1,
}, },
drop = "rp_default:swamp_dirt", drop = "rp_default:swamp_dirt",
sounds = rp_sounds.node_sound_swamp_dirt_defaults(), sounds = rp_sounds.node_sound_swamp_dirt_defaults(),
@ -82,6 +85,7 @@ minetest.register_node(
plantable_sandy = 1, plantable_sandy = 1,
plantable_fertilizer = 1, plantable_fertilizer = 1,
fall_damage_add_percent = -10, fall_damage_add_percent = -10,
pathfinder_soft = 1,
}, },
drop = "rp_default:sand", drop = "rp_default:sand",
sounds = rp_sounds.node_sound_sand_defaults(), sounds = rp_sounds.node_sound_sand_defaults(),

View File

@ -171,7 +171,7 @@ minetest.register_node(
tiles ={"rp_default_furnace_top.png", "rp_default_furnace_top.png", "rp_default_furnace_sides.png", 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"}, "rp_default_furnace_sides.png", "rp_default_furnace_sides.png", "rp_default_furnace_front.png"},
paramtype2 = "4dir", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
on_construct = function(pos) on_construct = function(pos)
@ -207,7 +207,7 @@ minetest.register_node(
paramtype2 = "4dir", paramtype2 = "4dir",
light_source = 8, light_source = 8,
drop = "rp_default:furnace", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
on_construct = function(pos) on_construct = function(pos)

View File

@ -12,7 +12,7 @@ minetest.register_node(
{ {
description = S("Stone with Sulfur"), description = S("Stone with Sulfur"),
tiles = {"default_stone.png^default_mineral_sulfur.png"}, 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", drop = "rp_default:lump_sulfur",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -23,7 +23,7 @@ minetest.register_node(
{ {
description = S("Stone with Graphite"), description = S("Stone with Graphite"),
tiles = {"default_stone.png^default_mineral_graphite.png"}, 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", drop = "rp_default:sheet_graphite",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -34,7 +34,7 @@ minetest.register_node(
{ {
description = S("Stone with Coal"), description = S("Stone with Coal"),
tiles = {"default_stone.png^default_mineral_coal.png"}, 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", drop = "rp_default:lump_coal",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -45,7 +45,7 @@ minetest.register_node(
{ {
description = S("Stone with Iron"), description = S("Stone with Iron"),
tiles = {"default_stone.png^default_mineral_iron.png"}, 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", drop = "rp_default:lump_iron",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -56,7 +56,7 @@ minetest.register_node(
{ {
description = S("Stone with Tin"), description = S("Stone with Tin"),
tiles = {"default_stone.png^default_mineral_tin.png"}, 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", drop = "rp_default:lump_tin",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -67,7 +67,7 @@ minetest.register_node(
{ {
description = S("Stone with Copper"), description = S("Stone with Copper"),
tiles = {"default_stone.png^default_mineral_copper.png"}, 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", drop = "rp_default:lump_copper",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -80,7 +80,7 @@ minetest.register_node(
{ {
description = S("Stone"), description = S("Stone"),
tiles = {"default_stone.png"}, tiles = {"default_stone.png"},
groups = {cracky = 2, stone = 1}, groups = {cracky = 2, stone = 1, pathfinder_hard = 1},
drop = "rp_default:cobble", drop = "rp_default:cobble",
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
@ -92,7 +92,7 @@ minetest.register_node(
description = S("Cobble"), description = S("Cobble"),
tiles = {"default_cobbles.png"}, tiles = {"default_cobbles.png"},
stack_max = 240, stack_max = 240,
groups = {cracky = 3, stone = 1}, groups = {cracky = 3, stone = 1, pathfinder_hard = 1},
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 2, _rp_blast_resistance = 2,
@ -104,7 +104,7 @@ minetest.register_node(
description = S("Reinforced Cobble"), description = S("Reinforced Cobble"),
tiles = {"default_reinforced_cobbles.png"}, tiles = {"default_reinforced_cobbles.png"},
is_ground_content = false, is_ground_content = false,
groups = {cracky = 1, stone = 1}, groups = {cracky = 1, stone = 1, pathfinder_hard = 1},
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 6, _rp_blast_resistance = 6,
}) })
@ -114,7 +114,7 @@ minetest.register_node(
{ {
description = S("Gravel"), description = S("Gravel"),
tiles = {"default_gravel.png"}, 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(), sounds = rp_sounds.node_sound_gravel_defaults(),
}) })
@ -125,7 +125,7 @@ minetest.register_node(
{ {
description = S("Coal Block"), description = S("Coal Block"),
tiles = {"default_block_coal.png"}, tiles = {"default_block_coal.png"},
groups = {cracky = 3}, groups = {cracky = 3, pathfinder_spiky = 1},
sounds = rp_sounds.node_sound_coal_defaults(), sounds = rp_sounds.node_sound_coal_defaults(),
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
}) })
@ -152,7 +152,7 @@ minetest.register_node(
{ {
description = S("Wrought Iron Block"), description = S("Wrought Iron Block"),
tiles = {"default_block_wrought_iron.png"}, 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), sounds = make_metal_sounds(default.METAL_PITCH_WROUGHT_IRON),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 8, _rp_blast_resistance = 8,
@ -163,7 +163,7 @@ minetest.register_node(
{ {
description = S("Steel Block"), description = S("Steel Block"),
tiles = {"default_block_steel.png"}, tiles = {"default_block_steel.png"},
groups = {cracky = 2}, groups = {cracky = 2, pathfinder_hard = 1},
sounds = make_metal_sounds(default.METAL_PITCH_STEEL), sounds = make_metal_sounds(default.METAL_PITCH_STEEL),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 9, _rp_blast_resistance = 9,
@ -174,7 +174,7 @@ minetest.register_node(
{ {
description = S("Carbon Steel Block"), description = S("Carbon Steel Block"),
tiles = {"default_block_carbon_steel.png"}, tiles = {"default_block_carbon_steel.png"},
groups = {cracky = 1}, groups = {cracky = 1, pathfinder_hard = 1},
sounds = make_metal_sounds(default.METAL_PITCH_CARBON_STEEL), sounds = make_metal_sounds(default.METAL_PITCH_CARBON_STEEL),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 9.25, _rp_blast_resistance = 9.25,
@ -185,7 +185,7 @@ minetest.register_node(
{ {
description = S("Bronze Block"), description = S("Bronze Block"),
tiles = {"default_block_bronze.png"}, tiles = {"default_block_bronze.png"},
groups = {cracky = 1}, groups = {cracky = 1, pathfinder_hard = 1},
sounds = make_metal_sounds(default.METAL_PITCH_BRONZE), sounds = make_metal_sounds(default.METAL_PITCH_BRONZE),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 9.5, _rp_blast_resistance = 9.5,
@ -196,7 +196,7 @@ minetest.register_node(
{ {
description = S("Copper Block"), description = S("Copper Block"),
tiles = {"default_block_copper.png"}, tiles = {"default_block_copper.png"},
groups = {cracky = 2}, groups = {cracky = 2, pathfinder_hard = 1},
sounds = make_metal_sounds(default.METAL_PITCH_COPPER), sounds = make_metal_sounds(default.METAL_PITCH_COPPER),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 7, _rp_blast_resistance = 7,
@ -207,7 +207,7 @@ minetest.register_node(
{ {
description = S("Tin Block"), description = S("Tin Block"),
tiles = {"default_block_tin.png"}, tiles = {"default_block_tin.png"},
groups = {cracky = 2}, groups = {cracky = 2, pathfinder_hard = 1},
sounds = make_metal_sounds(default.METAL_PITCH_TIN), sounds = make_metal_sounds(default.METAL_PITCH_TIN),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 8.5, _rp_blast_resistance = 8.5,
@ -221,7 +221,7 @@ minetest.register_node(
description = S("Dirt"), description = S("Dirt"),
tiles = {"default_dirt.png"}, tiles = {"default_dirt.png"},
stack_max = 240, 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(), sounds = rp_sounds.node_sound_dirt_defaults(),
_fertilized_node = "rp_default:fertilized_dirt", _fertilized_node = "rp_default:fertilized_dirt",
@ -252,7 +252,7 @@ minetest.register_node(
description = S("Dry Dirt"), description = S("Dry Dirt"),
tiles = { "default_dry_dirt.png" }, tiles = { "default_dry_dirt.png" },
stack_max = 240, 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(), sounds = rp_sounds.node_sound_dry_dirt_defaults(),
_fertilized_node = "rp_default:fertilized_dry_dirt", _fertilized_node = "rp_default:fertilized_dry_dirt",
}) })
@ -263,7 +263,7 @@ minetest.register_node(
description = S("Swamp Dirt"), description = S("Swamp Dirt"),
tiles = { "default_swamp_dirt.png" }, tiles = { "default_swamp_dirt.png" },
stack_max = 240, 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(), sounds = rp_sounds.node_sound_swamp_dirt_defaults(),
_fertilized_node = "rp_default:fertilized_swamp_dirt", _fertilized_node = "rp_default:fertilized_swamp_dirt",
@ -298,7 +298,7 @@ minetest.register_node(
"default_dirt.png", "default_dirt.png",
"default_dirt.png^default_dry_grass_side.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}, fall_damage_add_percent = -5},
drop = { drop = {
max_items = 3, max_items = 3,
@ -329,7 +329,7 @@ minetest.register_node(
"default_swamp_dirt.png^default_swamp_grass_side.png" "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, 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 = { drop = {
max_items = 3, max_items = 3,
items = { items = {
@ -359,7 +359,7 @@ minetest.register_node(
"default_dirt.png^default_grass_side.png", "default_dirt.png^default_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,
fall_damage_add_percent = -5}, fall_damage_add_percent = -5, pathfinder_fibrous = 1},
drop = { drop = {
max_items = 3, max_items = 3,
items = { items = {
@ -393,7 +393,7 @@ minetest.register_node(
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5-2/16, 0.5} fixed = {-0.5, -0.5, -0.5, 0.5, 0.5-2/16, 0.5}
}, },
tiles = { "default_dirt.png" }, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_dirt_defaults(), 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} fixed = {-0.5, -0.5, -0.5, 0.5, -2/16, 0.5}
}, },
tiles = { "default_dirt.png" }, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_dirt_defaults(), sounds = rp_sounds.node_sound_dirt_defaults(),
on_place = function(itemstack, placer, pointed_thing) 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} fixed = {-0.5, -0.5, -0.5, 0.5, 0.5-2/16, 0.5}
}, },
tiles = { "default_dirt.png" }, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_dirt_defaults(), sounds = rp_sounds.node_sound_dirt_defaults(),
}) })
@ -464,7 +464,7 @@ minetest.register_node(
description = S("Brick Block"), description = S("Brick Block"),
tiles = {"default_brick.png"}, tiles = {"default_brick.png"},
is_ground_content = false, is_ground_content = false,
groups = {cracky = 2, paintable = 2}, groups = {cracky = 2, paintable = 2, pathfinder_hard = 1},
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
_rp_blast_resistance = 2, _rp_blast_resistance = 2,
}) })
@ -476,7 +476,7 @@ minetest.register_node(
overlay_tiles = {{name="rp_default_brick_paintable_overlay.png",color="white"}}, overlay_tiles = {{name="rp_default_brick_paintable_overlay.png",color="white"}},
use_texture_alpha = "blend", use_texture_alpha = "blend",
is_ground_content = false, 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(), sounds = rp_sounds.node_sound_stone_defaults(),
paramtype2 = "color", paramtype2 = "color",
palette = "rp_paint_palette_256.png", palette = "rp_paint_palette_256.png",
@ -491,7 +491,7 @@ minetest.register_node(
{ {
description = S("Sand"), description = S("Sand"),
tiles = {"default_sand.png"}, 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(), sounds = rp_sounds.node_sound_sand_defaults(),
_fertilized_node = "rp_default:fertilized_sand", _fertilized_node = "rp_default:fertilized_sand",
}) })
@ -501,7 +501,7 @@ minetest.register_node(
{ {
description = S("Sandstone"), description = S("Sandstone"),
tiles = {"default_sandstone.png"}, 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", drop = "rp_default:sand 2",
sounds = rp_sounds.node_sound_stone_defaults({ sounds = rp_sounds.node_sound_stone_defaults({
dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.4}, dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.4},
@ -515,7 +515,7 @@ minetest.register_node(
{ {
description = S("Compressed Sandstone"), description = S("Compressed Sandstone"),
tiles = {"default_compressed_sandstone_top.png", "default_compressed_sandstone_top.png", "default_compressed_sandstone.png"}, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_stone_defaults({ sounds = rp_sounds.node_sound_stone_defaults({
dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2}, dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2},
@ -529,7 +529,7 @@ minetest.register_node(
{ {
description = S("Reinforced Compressed Sandstone"), description = S("Reinforced Compressed Sandstone"),
tiles = {"rp_default_reinforced_compressed_sandstone.png"}, tiles = {"rp_default_reinforced_compressed_sandstone.png"},
groups = {cracky = 2, sandstone = 1}, groups = {cracky = 2, sandstone = 1, pathfinder_hard = 1},
is_ground_content = false, is_ground_content = false,
sounds = rp_sounds.node_sound_stone_defaults({ sounds = rp_sounds.node_sound_stone_defaults({
dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2}, dug = {name="rp_sounds_dug_stone", gain=0.9, pitch=1.2},
@ -549,7 +549,7 @@ minetest.register_node(
use_texture_alpha = "clip", use_texture_alpha = "clip",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_glass_defaults(), sounds = rp_sounds.node_sound_glass_defaults(),
drop = "rp_default:glass", drop = "rp_default:glass",
@ -568,7 +568,7 @@ minetest.register_node(
use_texture_alpha = "blend", use_texture_alpha = "blend",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_glass_defaults(), sounds = rp_sounds.node_sound_glass_defaults(),
drop = "rp_default:glass", drop = "rp_default:glass",
@ -598,7 +598,7 @@ for p=1, #planks do
{ {
description = desc, description = desc,
tiles = {tex}, tiles = {tex},
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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
_rp_blast_resistance = 0.5, _rp_blast_resistance = 0.5,
@ -610,7 +610,7 @@ for p=1, #planks do
tiles = {tex_paint}, tiles = {tex_paint},
-- HACK: This is a workaround to fix the coloring of the crack overlay -- HACK: This is a workaround to fix the coloring of the crack overlay
overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
@ -628,7 +628,7 @@ minetest.register_node(
{ {
description = S("Frame"), description = S("Frame"),
tiles = {"default_frame.png"}, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
_rp_blast_resistance = 0.75, _rp_blast_resistance = 0.75,
@ -642,7 +642,7 @@ minetest.register_node(
overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}},
paramtype2 = "color", paramtype2 = "color",
palette = "rp_paint_palette_256.png", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
drop = "rp_default:frame", drop = "rp_default:frame",
@ -654,7 +654,7 @@ minetest.register_node(
{ {
description = S("Reinforced Frame"), description = S("Reinforced Frame"),
tiles = {"default_reinforced_frame.png"}, 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
_rp_blast_resistance = 5, _rp_blast_resistance = 5,
@ -667,7 +667,7 @@ minetest.register_node(
overlay_tiles = {{name="rp_default_reinforced_frame_overlay.png",color="white"}}, overlay_tiles = {{name="rp_default_reinforced_frame_overlay.png",color="white"}},
paramtype2 = "color", paramtype2 = "color",
palette = "rp_paint_palette_256.png", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
drop = "rp_default:reinforced_frame", drop = "rp_default:reinforced_frame",
@ -685,7 +685,7 @@ minetest.register_node(
"rp_default_reed_block_top.png", "rp_default_reed_block_top.png",
"rp_default_reed_block_side.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, is_ground_content = false,
sounds = rp_sounds.node_sound_grass_defaults(), sounds = rp_sounds.node_sound_grass_defaults(),
_rp_blast_resistance = 0.5, _rp_blast_resistance = 0.5,
@ -699,7 +699,7 @@ minetest.register_node(
"rp_default_dried_reed_block_top.png", "rp_default_dried_reed_block_top.png",
"rp_default_dried_reed_block_side.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, is_ground_content = false,
sounds = rp_sounds.node_sound_straw_defaults(), sounds = rp_sounds.node_sound_straw_defaults(),
_rp_blast_resistance = 0.5, _rp_blast_resistance = 0.5,
@ -713,7 +713,7 @@ minetest.register_node(
tiles = { tiles = {
"rp_default_hay.png", "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, is_ground_content = false,
sounds = rp_sounds.node_sound_grass_defaults({ sounds = rp_sounds.node_sound_grass_defaults({
footstep = { name = "rp_default_footstep_hay", gain = 1.0 }, footstep = { name = "rp_default_footstep_hay", gain = 1.0 },

View File

@ -64,7 +64,7 @@ minetest.register_node(
}, },
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_sides.png"}, tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_sides.png"},
-- damage_per_second = 1, -- 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({ sounds = rp_sounds.node_sound_defaults({
footstep = { name = "rp_default_footstep_cactus", gain = 1.0 }, footstep = { name = "rp_default_footstep_cactus", gain = 1.0 },
dig = { name = "rp_default_dig_cactus", gain = 0.5 }, dig = { name = "rp_default_dig_cactus", gain = 0.5 },

View File

@ -198,7 +198,7 @@ minetest.register_node(
{ {
description = S("Tree"), description = S("Tree"),
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, 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, sounds = snd_tree,
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
}) })
@ -208,7 +208,7 @@ minetest.register_node(
{ {
description = S("Oak Tree"), description = S("Oak Tree"),
tiles = {"default_tree_oak_top.png", "default_tree_oak_top.png", "default_tree_oak.png"}, 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, sounds = snd_tree,
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
}) })
@ -218,7 +218,7 @@ minetest.register_node(
{ {
description = S("Birch Tree"), description = S("Birch Tree"),
tiles = {"default_tree_birch_top.png", "default_tree_birch_top.png", "default_tree_birch.png"}, 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, sounds = snd_tree,
_rp_blast_resistance = 1, _rp_blast_resistance = 1,
}) })
@ -244,7 +244,7 @@ minetest.register_node(
tiles = {"default_leaves.png"}, tiles = {"default_leaves.png"},
paramtype = "light", paramtype = "light",
waving = 1, 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 = { drop = {
max_items = 1, max_items = 1,
items = { items = {
@ -269,7 +269,7 @@ minetest.register_node(
tiles = {"default_leaves_oak.png"}, tiles = {"default_leaves_oak.png"},
paramtype = "light", paramtype = "light",
waving = 1, 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 = { drop = {
max_items = 1, max_items = 1,
items = { items = {
@ -294,7 +294,7 @@ minetest.register_node(
tiles = {"default_leaves_birch.png"}, tiles = {"default_leaves_birch.png"},
paramtype = "light", paramtype = "light",
waving = 1, 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 = { drop = {
max_items = 1, max_items = 1,
items = { items = {
@ -344,7 +344,7 @@ minetest.register_node(
tiles = {"default_dry_leaves.png"}, tiles = {"default_dry_leaves.png"},
paramtype = "light", paramtype = "light",
waving = 1, 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 = { drop = {
max_items = 1, max_items = 1,
items = { items = {

View File

@ -332,6 +332,7 @@ function door.register_door(name, def)
local groups_node = table.copy(def.groups) local groups_node = table.copy(def.groups)
groups_node.not_in_creative_inventory = 1 groups_node.not_in_creative_inventory = 1
groups_node.pathfinder_thin = 1
local groups_node_b_1 = table.copy(groups_node) local groups_node_b_1 = table.copy(groups_node)
-- door position: 1 = bottom, 2 = top -- door position: 1 = bottom, 2 = top

View File

@ -270,7 +270,7 @@ minetest.register_node(
is_ground_content = false, is_ground_content = false,
groups = {snappy = 2, oddly_breakable_by_hand = 3, groups = {snappy = 2, oddly_breakable_by_hand = 3,
fall_damage_add_percent = -15, fuzzy = 1, 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({ sounds = rp_sounds.node_sound_fuzzy_defaults({
footstep = { name = "rp_sounds_footstep_fuzzy", gain = 0.7, pitch = 1.3 }, footstep = { name = "rp_sounds_footstep_fuzzy", gain = 0.7, pitch = 1.3 },
dig = {name="rp_sounds_dig_fuzzy", gain=0.5, 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"), description = S("Straw"),
tiles = {"rp_farming_straw.png"}, tiles = {"rp_farming_straw.png"},
is_ground_content = false, 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(), sounds = rp_sounds.node_sound_straw_defaults(),
} }
) )

View File

@ -402,7 +402,7 @@ minetest.register_node(
{ {
description = S("Stone with Gold"), description = S("Stone with Gold"),
tiles ={"default_stone.png^gold_mineral_gold.png"}, 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", drop = "rp_gold:lump_gold",
is_ground_content = true, is_ground_content = true,
sounds = rp_sounds.node_sound_stone_defaults(), sounds = rp_sounds.node_sound_stone_defaults(),
@ -431,7 +431,7 @@ minetest.register_node(
{ {
description = S("Gold Block"), description = S("Gold Block"),
tiles = {"gold_block.png"}, tiles = {"gold_block.png"},
groups = {cracky = 2}, groups = {cracky = 2, pathfinder_hard=1},
sounds = make_metal_sounds(gold.PITCH), sounds = make_metal_sounds(gold.PITCH),
is_ground_content = false, is_ground_content = false,
_rp_blast_resistance = 8, _rp_blast_resistance = 8,

View File

@ -267,6 +267,7 @@ minetest.register_node("rp_itemshow:frame",{
sunlight_propagates = true, sunlight_propagates = true,
groups = { groups = {
choppy = 2, dig_immediate = 2, creative_decoblock = 1, paintable = 1, choppy = 2, dig_immediate = 2, creative_decoblock = 1, paintable = 1,
pathfinder_thin = 1,
-- So that placing a magnocompass on it will point -- So that placing a magnocompass on it will point
-- the needle to the correct direction -- the needle to the correct direction
special_magnocompass_place_handling = 1}, special_magnocompass_place_handling = 1},
@ -347,7 +348,7 @@ minetest.register_node("rp_itemshow:showcase", {
tiles = {"rp_itemshow_showcase.png"}, tiles = {"rp_itemshow_showcase.png"},
use_texture_alpha = "clip", use_texture_alpha = "clip",
paramtype = "light", 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(), sounds = rp_sounds.node_sound_glass_defaults(),
is_ground_content = false, is_ground_content = false,

View File

@ -313,7 +313,7 @@ minetest.register_node(
_tt_help = S("Tools can be upgraded with jewels here"), _tt_help = S("Tools can be upgraded with jewels here"),
tiles ={"jewels_bench_top.png", "jewels_bench_bottom.png", "jewels_bench_sides.png"}, tiles ={"jewels_bench_top.png", "jewels_bench_bottom.png", "jewels_bench_sides.png"},
paramtype2 = "4dir", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_wood_defaults(), sounds = rp_sounds.node_sound_wood_defaults(),

View File

@ -297,7 +297,7 @@ local chest_def = {
}, },
use_texture_alpha = "blend", use_texture_alpha = "blend",
paramtype2 = "4dir", 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, is_ground_content = false,
sounds = rp_sounds.node_sound_planks_defaults(), sounds = rp_sounds.node_sound_planks_defaults(),
on_construct = function(pos) on_construct = function(pos)

View File

@ -101,7 +101,7 @@ minetest.register_node(
end end
end, 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, light_source = LUMIEN_CRYSTAL_LIGHT_MAX,
_rp_itemshow_offset = vector.new(-0.2, 0, -0.2), _rp_itemshow_offset = vector.new(-0.2, 0, -0.2),
drop = "rp_lumien:crystal_off", drop = "rp_lumien:crystal_off",
@ -143,7 +143,7 @@ minetest.register_node(
end end
end, end,
groups = {crumbly = 3, creative_decoblock = 1}, groups = {crumbly = 3, creative_decoblock = 1, furniture = 1, pathfinder_hard = 1},
light_source = LUMIEN_CRYSTAL_LIGHT_MIN, light_source = LUMIEN_CRYSTAL_LIGHT_MIN,
_tt_light_source_max = LUMIEN_CRYSTAL_LIGHT_MAX, _tt_light_source_max = LUMIEN_CRYSTAL_LIGHT_MAX,
_rp_itemshow_offset = vector.new(-0.2, 0, -0.2), _rp_itemshow_offset = vector.new(-0.2, 0, -0.2),
@ -155,7 +155,7 @@ minetest.register_node(
{ {
description = S("Lumien Block"), description = S("Lumien Block"),
tiles = {"lumien_block.png"}, tiles = {"lumien_block.png"},
groups = {cracky = 1, mineral_natural=1}, groups = {cracky = 1, mineral_natural=1, pathfinder_hard = 1},
light_source = LUMIEN_BLOCK_LIGHT, light_source = LUMIEN_BLOCK_LIGHT,
sounds = get_sounds(), sounds = get_sounds(),
_rp_blast_resistance = 3, _rp_blast_resistance = 3,

View File

@ -15,7 +15,7 @@ minetest.register_node(
-- HACK: This is a workaround to fix the coloring of the crack overlay -- HACK: This is a workaround to fix the coloring of the crack overlay
overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}}, overlay_tiles = {{name="rp_textures_blank_paintable_overlay.png",color="white"}},
is_ground_content = false, 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(), sounds = rp_sounds.node_sound_fuzzy_defaults(),
paramtype2 = "color", paramtype2 = "color",
palette = "rp_paint_palette_256.png", palette = "rp_paint_palette_256.png",

View File

@ -66,11 +66,8 @@ local is_node_walkable = function(node)
if not def then if not def then
-- Unknown nodes are walkable -- Unknown nodes are walkable
return true return true
elseif node.name == "rp_itemshow:frame" then elseif minetest.get_item_group(node.name, "pathfinder_thin") ~= 0 then
-- Item frames are to thin to walk *on* -- Refuse to walk on very thin nodes like item frames to avoid fall-through
return false
elseif minetest.get_item_group(node.name, "door") ~= 0 then
-- Same for doors
return false return false
elseif minetest.get_item_group(node.name, "fence") ~= 0 or minetest.get_item_group(node.name, "fence_gate") ~= 0 then elseif minetest.get_item_group(node.name, "fence") ~= 0 or minetest.get_item_group(node.name, "fence_gate") ~= 0 then
-- We refuse to walk on fences and fence gates (although we could) -- We refuse to walk on fences and fence gates (although we could)
@ -161,6 +158,26 @@ local is_node_swimmable = function(node)
end end
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 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 2
elseif minetest.get_item_group(nn, "pathfinder_hard") ~= 0 then
return 4
else
return 6
end
end
local PATHFINDER_SEARCHDISTANCE = 30 local PATHFINDER_SEARCHDISTANCE = 30
local PATHFINDER_TIMEOUT = 1.0 local PATHFINDER_TIMEOUT = 1.0
local PATHFINDER_OPTIONS = { local PATHFINDER_OPTIONS = {
@ -172,6 +189,7 @@ local PATHFINDER_OPTIONS = {
respect_disable_jump = true, respect_disable_jump = true,
handler_walkable = is_node_walkable, handler_walkable = is_node_walkable,
handler_blocking = is_node_blocking, handler_blocking = is_node_blocking,
get_floor_cost = get_floor_cost,
use_vmanip = true, use_vmanip = true,
} }

View File

@ -294,7 +294,7 @@ if minetest.settings:get_bool("music_enable") then
rp_music.toggle(pos) rp_music.toggle(pos)
end, 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", drop = "rp_music:player",
}) })
@ -369,7 +369,7 @@ else
note_particle(pos, "rp_music_no_music.png") note_particle(pos, "rp_music_no_music.png")
end, 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 end

View File

@ -11,35 +11,35 @@ local empty_overlay = {{name="rp_textures_blank_paintable_overlay.png",color="wh
-- Stonelike materials -- Stonelike materials
partialblocks.register_material( 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( 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( 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( 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( 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 -- Woodlike
partialblocks.register_material( 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( 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( 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( 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( 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( 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)
partialblocks.register_material( partialblocks.register_material(
"fir", S("Fir Slab"), S("Fir Stair"), "rp_default:planks_fir", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, true, nil, "w") "fir", S("Fir Slab"), S("Fir Stair"), "rp_default:planks_fir", {choppy = 3, oddly_breakable_by_hand = 3, paintable = 2}, true, nil, "w")
@ -49,60 +49,60 @@ partialblocks.register_material(
-- Reed -- Reed
partialblocks.register_material( 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( 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( 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( 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 -- Frames
partialblocks.register_material( 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( 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. -- 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( 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( 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( 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 -- Coal
partialblocks.register_material( 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 -- Metal
partialblocks.register_material( 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( 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( 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( 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( 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( 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( 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 -- Compressed sandstone
local cs_stair_tiles = { local cs_stair_tiles = {
@ -113,7 +113,7 @@ local cs_stair_tiles = {
"default_compressed_sandstone.png", "default_compressed_sandstone.png",
"default_compressed_sandstone.png" } "default_compressed_sandstone.png" }
partialblocks.register_material( 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( 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")

View File

@ -44,6 +44,13 @@ restrictions and does not cut corners.
* `handler_climbable`: A function that takes a node table and returns * `handler_climbable`: A function that takes a node table and returns
true if the node is considered climable true if the node is considered climable
(default: if `climbing` field of node is true) (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!
Its recommended this function utilizes pathfinder node groups
as laid out in `DEV_GROUPS.md` in the root Repixture directory.
But its not mandatory to only rely on these groups.
* `use_vmanip`: If true, nodes will be queried using a LuaVoxelManip; * `use_vmanip`: If true, nodes will be queried using a LuaVoxelManip;
otherwise, `minetest.get_node` will be used. Required for async otherwise, `minetest.get_node` will be used. Required for async
usage. usage.

View File

@ -104,14 +104,19 @@ local function get_distance_2d(pos1, pos2)
return distX + distZ return distX + distZ
end end
-- 3D distance heuristic between pos1 and pos2 -- Get actual cost to walk from pos1 to pos2 (which must be a neighbor)
local function get_distance_3d(pos1, pos2) -- * pos1: Origin position
local distX = math.abs(pos1.x - pos2.x) -- * pos2: Target position (neighbor of pos1)
local distY = math.abs(pos1.y - pos2.y) -- * get_node: get_node function
local distZ = math.abs(pos1.z - pos2.z) -- * get_floor_cost(node): Function that, given a node table, returns the
-- cost of walking *on* this node (default cost is 1)
-- Manhattan distance local function get_neighbor_cost(pos1, pos2, get_node, get_floor_cost)
return distX + distY + distZ if not get_floor_cost then
return 1
end
local floor = vector.offset(pos2, 0, -1, 0)
local floornode = get_node(floor)
return get_floor_cost(floornode)
end end
-- Checks nodes above pos to be non-blocking. -- Checks nodes above pos to be non-blocking.
@ -364,6 +369,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout)
local max_jump = options.max_jump or 0 local max_jump = options.max_jump or 0
local respect_disable_jump = options.respect_disable_jump or false local respect_disable_jump = options.respect_disable_jump or false
local respect_climb_restrictions = options.respect_climb_restrictions local respect_climb_restrictions = options.respect_climb_restrictions
local get_floor_cost = options.get_floor_cost
if respect_climb_restrictions == nil then if respect_climb_restrictions == nil then
respect_climb_restrictions = true respect_climb_restrictions = true
end end
@ -446,7 +452,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout)
-- Add the first search node to open set at the start -- 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, get_floor_cost)
set_search_node(open_set, start_hash, { set_search_node(open_set, start_hash, {
pos = pos1, pos = pos1,
parent = nil, parent = nil,
@ -577,7 +583,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout)
local g = 0 -- cost from start local g = 0 -- cost from start
local h -- estimated cost from search node to finish local h -- estimated cost from search node to finish
local f -- g+h 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, get_floor_cost)
local neighbor_data = get_search_node(open_set, neighbor.hash) local neighbor_data = get_search_node(open_set, neighbor.hash)
local neighbor_exists local neighbor_exists
if neighbor_data then if neighbor_data then
@ -587,7 +593,7 @@ function rp_pathfinder.find_path(pos1, pos2, searchdistance, options, timeout)
neighbor_exists = false neighbor_exists = false
end end
if not neighbor_exists or neighbor_cost < g then 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, get_floor_cost)
g = neighbor_cost g = neighbor_cost
f = g + h f = g + h
set_search_node(open_set, neighbor.hash, { set_search_node(open_set, neighbor.hash, {

View File

@ -198,7 +198,7 @@ minetest.register_node(
_rp_tt_has_ignitible_text = true, -- prevent rp_tt mod from adding automatic tooltip _rp_tt_has_ignitible_text = true, -- prevent rp_tt mod from adding automatic tooltip
tiles = {top_tex, "tnt_bottom.png", "tnt_sides.png"}, tiles = {top_tex, "tnt_bottom.png", "tnt_sides.png"},
is_ground_content = false, 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(), sounds = rp_sounds.node_sound_wood_defaults(),
on_blast = function(pos, intensity) on_blast = function(pos, intensity)
@ -243,7 +243,7 @@ minetest.register_node(
light_source = 5, light_source = 5,
drop = "", drop = "",
is_ground_content = false, 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(), sounds = rp_sounds.node_sound_wood_defaults(),
on_timer = tnt_burning_on_timer, on_timer = tnt_burning_on_timer,
on_construct = function(pos) on_construct = function(pos)