add mapgen

This commit is contained in:
FaceDeer 2023-02-12 13:06:08 -07:00
parent 633f230ae4
commit fc1a6d754e
5 changed files with 47 additions and 9 deletions

View File

@ -87,6 +87,8 @@ end
minetest.register_node("collectible_lore:cairn", { minetest.register_node("collectible_lore:cairn", {
description = S("Cairn"), description = S("Cairn"),
_doc_items_longdesc = S("A cairn of rocks constructed by a previous explorer to protect documents and supplies."),
_doc_items_usagehelp = S("The first time you discover a cairn like this, it may reveal to you some new record or piece of lore. Afterward it can be used as a public storage location."),
drawtype = "nodebox", drawtype = "nodebox",
tiles = {df_dependencies.texture_cobble, df_dependencies.texture_cobble, df_dependencies.texture_cobble .. "^(collectible_lore_cairn_marker.png^[opacity:100)"}, tiles = {df_dependencies.texture_cobble, df_dependencies.texture_cobble, df_dependencies.texture_cobble .. "^(collectible_lore_cairn_marker.png^[opacity:100)"},
is_ground_content = true, is_ground_content = true,
@ -138,8 +140,8 @@ minetest.register_node("collectible_lore:cairn", {
local inv = meta:get_inventory() local inv = meta:get_inventory()
inv:set_size("main", 8*4) inv:set_size("main", 8*4)
local nearby = cairn_area:get_areas_in_area(vector.subtract(pos, cairn_spacing/2), vector.add(pos, cairn_spacing/2)) local nearby = collectible_lore.are_cairns_close_to_pos(pos)
if next(nearby) then if nearby then
minetest.log("error", "Cairn placed too close to other cairns. Placed at: " .. minetest.pos_to_string(pos)) minetest.log("error", "Cairn placed too close to other cairns. Placed at: " .. minetest.pos_to_string(pos))
for _,data in pairs(nearby) do for _,data in pairs(nearby) do
minetest.log("error", "nearby: " .. minetest.pos_to_string(data.min)) minetest.log("error", "nearby: " .. minetest.pos_to_string(data.min))
@ -173,13 +175,16 @@ collectible_lore.get_nearby_cairns = function(pos, spacing)
return nil return nil
end end
collectible_lore.place_cairn = function(pos) collectible_lore.are_cairns_close_to_pos = function(pos)
local nearby = collectible_lore.get_nearby_cairns(pos, cairn_spacing) local nearby = collectible_lore.get_nearby_cairns(pos, cairn_spacing)
if nearby then return end if nearby then return nearby end
return false
end
collectible_lore.place_cairn = function(pos)
if collectible_lore.are_cairns_close_to_pos(pos) then return end
minetest.set_node(pos, {name="collectible_lore:cairn"}) minetest.set_node(pos, {name="collectible_lore:cairn"})
local def = minetest.registered_nodes["collectible_lore:cairn"] --minetest.debug("placed " .. minetest.pos_to_string(pos))
def.on_construct(pos)
--minetest.set_node({x=pos.x, y=pos.y+1, z=pos.z}, {name=torch_node_name})
end end
local player_state = {} local player_state = {}
@ -230,6 +235,8 @@ end
minetest.register_craftitem("collectible_lore:satchel", { minetest.register_craftitem("collectible_lore:satchel", {
description = S("Collectibles Satchel"), description = S("Collectibles Satchel"),
_doc_items_longdesc = S("A satchel containing various documents you've recovered in your travels."),
_doc_items_usagehelp = S("The documents and lore you've unlocked are not tied to a specific satchel, any satchel will let you view your personal collection."),
inventory_image = "collectible_lore_satchel.png", inventory_image = "collectible_lore_satchel.png",
stack_max = 99, stack_max = 99,
on_use = function(itemstack, user, pointed_thing) on_use = function(itemstack, user, pointed_thing)

View File

@ -13,10 +13,20 @@ Administrative control of collectibles=
### items.lua ### ### items.lua ###
<not found yet>= <not found yet>=
A cairn of rocks constructed by a previous explorer to protect documents and supplies.=
A satchel containing various documents you've recovered in your travels.=
Cairn= Cairn=
Collected: @1/@2= Collected: @1/@2=
Collectibles Satchel= Collectibles Satchel=
Exit= Exit=
The documents and lore you've unlocked are not tied to a specific satchel, any satchel will let you view your personal collection.=
The first time you discover a cairn like this, it may reveal to you some new record or piece of lore. Afterward it can be used as a public storage location.=
View= View=
You've already collected the lore hidden in this cairn.= You've already collected the lore hidden in this cairn.=
You've found a collectible item of lore titled:@n@1= You've found a collectible item of lore titled:@n@1=

View File

@ -19,3 +19,4 @@ dofile(modpath.."/underworld.lua")
dofile(modpath.."/primordial.lua") dofile(modpath.."/primordial.lua")
dofile(modpath.."/dungeon_loot.lua") dofile(modpath.."/dungeon_loot.lua")
dofile(modpath.."/growth_restrictions.lua") dofile(modpath.."/growth_restrictions.lua")
dofile(modpath.."/lorebooks.lua")

20
df_caverns/lorebooks.lua Normal file
View File

@ -0,0 +1,20 @@
if not minetest.get_modpath("df_lorebooks") then return end
local foundations = {"group:stone", "group:dirt", "group:soil"}
minetest.register_on_generated(function(minp, maxp, blockseed)
if maxp.y > 0 or maxp.y < df_caverns.config.primordial_min then return end
-- using after so that all other mapgen should be finished fiddling with stuff by the time this runs
minetest.after(1, function(minp, maxp)
local middle = vector.divide(vector.add(minp, maxp), 2)
if collectible_lore.are_cairns_close_to_pos(middle) then return end -- quick and dirty check to discard mapblocks close to other cairns
local possibles = minetest.find_nodes_in_area_under_air(minp, maxp, foundations)
if next(possibles) then
local target = possibles[math.random(#possibles)]
target.y=target.y+1
collectible_lore.place_cairn(target)
end
end, minp, maxp)
end)

View File

@ -1,4 +1,4 @@
name = df_caverns name = df_caverns
description = Adds vast underground caverns in the style of Dwarf Fortress, complete with underground flora in diverse biomes. Also adds stalactite/stalagmite decorations in the smaller tunnels. description = Adds vast underground caverns in the style of Dwarf Fortress, complete with underground flora in diverse biomes. Also adds stalactite/stalagmite decorations in the smaller tunnels.
depends = df_dependencies, subterrane, df_trees, df_mapitems, depends = df_dependencies, subterrane, df_trees, df_mapitems,
optional_depends = df_farming, ice_sprites, oil, df_underworld_items, magma_conduits, bones_loot, named_waypoints, name_generator, fireflies, chasms, big_webs, mcl_flowers, mine_gas, bubblesponge optional_depends = df_farming, ice_sprites, oil, df_underworld_items, magma_conduits, bones_loot, named_waypoints, name_generator, fireflies, chasms, big_webs, mcl_flowers, mine_gas, bubblesponge, df_lorebooks