ctf_map: Convert to modpack; split map maker into separate mod (#475)
6
.gitmodules
vendored
|
@ -1,6 +1,6 @@
|
|||
[submodule "mods/crafting"]
|
||||
path = mods/crafting
|
||||
url = https://github.com/rubenwardy/crafting
|
||||
[submodule "mods/ctf/ctf_map/maps"]
|
||||
path = mods/ctf/ctf_map/maps
|
||||
url = https://github.com/MT-CTF/maps.git
|
||||
[submodule "mods/ctf/ctf_map/ctf_map_core/maps"]
|
||||
path = mods/ctf/ctf_map/ctf_map_core/maps
|
||||
url = https://github.com/MT-CTF/maps
|
||||
|
|
19
mods/ctf/ctf_map/ctf_map_core/README.md
Normal file
|
@ -0,0 +1,19 @@
|
|||
# CTF Map Core
|
||||
|
||||
This mod handles creating and loading maps.
|
||||
|
||||
## Attributions
|
||||
|
||||
- Indestructible nodes adapted from various mods in `minetest_game`.
|
||||
|
||||
## Indestructible nodes
|
||||
|
||||
- `ctf_map_core` provides indestructible nodes for most nodes from default, and all nodes from
|
||||
stairs.
|
||||
|
||||
- All indestructible nodes have the same item name with the mod prefix being `ctf_map:`
|
||||
instead of their original prefixes (e.g. `default:stone` -> `ctf_map:stone` and
|
||||
`stairs:stair_stone` -> `ctf_map:stair_stone`) with the exception of wool, whose
|
||||
indestructible nodes have slightly different names from the original node names -
|
||||
`ctf_map:wool_<color>`. This is because the original nomenclature becomes meaningless
|
||||
if the modname prefix is changed.
|
|
@ -20,7 +20,7 @@ function ctf_map.place_base(color, pos)
|
|||
end
|
||||
|
||||
-- Spawn chest
|
||||
local chest = { name = "ctf_map:chest_" .. color }
|
||||
local chest = { name = "ctf_map_core:chest_" .. color }
|
||||
local dz = 2
|
||||
if pos.z < 0 then
|
||||
dz = -2
|
|
@ -17,7 +17,7 @@ end
|
|||
|
||||
local colors = {"red", "blue"}
|
||||
for _, chest_color in pairs(colors) do
|
||||
minetest.register_node("ctf_map:chest_" .. chest_color, {
|
||||
minetest.register_node("ctf_map_core:chest_" .. chest_color, {
|
||||
description = "Chest",
|
||||
tiles = {
|
||||
"default_chest_top_" .. chest_color .. ".png",
|
||||
|
@ -55,7 +55,7 @@ for _, chest_color in pairs(colors) do
|
|||
end
|
||||
ctf.warning("ctf_map", "Wrong chest, changing to " ..
|
||||
territory_owner .. " from " .. chest_color)
|
||||
minetest.set_node(pos, "ctf_map:chest_" .. territory_owner)
|
||||
minetest.set_node(pos, "ctf_map_core:chest_" .. territory_owner)
|
||||
end
|
||||
|
||||
local formspec = table.concat({
|
||||
|
@ -74,7 +74,7 @@ for _, chest_color in pairs(colors) do
|
|||
"Try killing an enemy player, or at least try to capture the flag.\n" ..
|
||||
"Find resources in chests scattered around the map."
|
||||
formspec = formspec .. "label[0.75,3;" .. minetest.formspec_escape(msg) .. "]"
|
||||
minetest.show_formspec(name, "ctf_map:no_access", formspec)
|
||||
minetest.show_formspec(name, "ctf_map_core:no_access", formspec)
|
||||
return
|
||||
end
|
||||
|
||||
|
@ -100,7 +100,7 @@ for _, chest_color in pairs(colors) do
|
|||
"listring[" .. chestinv ..";main]" ..
|
||||
"listring[current_player;main]"
|
||||
|
||||
minetest.show_formspec(name, "ctf_map:chest", formspec)
|
||||
minetest.show_formspec(name, "ctf_map_core:chest", formspec)
|
||||
end,
|
||||
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index,
|
|
@ -26,7 +26,7 @@ function ctf_map.can_cross(player)
|
|||
return false
|
||||
end
|
||||
|
||||
local modpath = minetest.get_modpath("ctf_map")
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname())
|
||||
dofile(modpath .. "/nodes.lua")
|
||||
dofile(modpath .. "/emerge.lua")
|
||||
dofile(modpath .. "/barrier.lua")
|
||||
|
@ -40,6 +40,4 @@ if minetest.get_modpath("ctf") then
|
|||
dofile(modpath .. "/maps_catalog.lua")
|
||||
|
||||
ctf_match.register_on_build_time_end(ctf_map.remove_middle_barrier)
|
||||
else
|
||||
dofile(modpath .. "/map_maker.lua")
|
||||
end
|
1
mods/ctf/ctf_map/ctf_map_core/maps
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 7087ac5b9ef80cfa906c84ddda68628c144688d7
|
3
mods/ctf/ctf_map/ctf_map_core/mod.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
name = ctf_map_core
|
||||
depends = default
|
||||
optional_depends = ctf, ctf_match, ctf_stats, ctf_treasure, stairs, wool, irc
|
|
@ -1,6 +1,6 @@
|
|||
-- Special nodes
|
||||
do
|
||||
minetest.register_node("ctf_map:ignore", {
|
||||
minetest.register_node(":ctf_map:ignore", {
|
||||
description = "Artificial Ignore", -- this may need to be given a more appropriate name
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
|
@ -14,7 +14,7 @@ do
|
|||
groups = {immortal = 1},
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_glass", {
|
||||
minetest.register_node(":ctf_map:ind_glass", {
|
||||
description = "Indestructible Glass",
|
||||
drawtype = "glasslike_framed_optional",
|
||||
tiles = {"default_glass.png", "default_glass_detail.png"},
|
||||
|
@ -29,7 +29,7 @@ do
|
|||
sounds = default.node_sound_glass_defaults()
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_glass_red", {
|
||||
minetest.register_node(":ctf_map:ind_glass_red", {
|
||||
description = "Indestructible Red Glass",
|
||||
drawtype = "glasslike",
|
||||
tiles = {"ctf_map_glass_red.png"},
|
||||
|
@ -46,14 +46,14 @@ do
|
|||
sounds = default.node_sound_glass_defaults()
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ind_stone_red", {
|
||||
minetest.register_node(":ctf_map:ind_stone_red", {
|
||||
description = "Indestructible Red Stone",
|
||||
groups = {immortal = 1},
|
||||
tiles = {"ctf_map_stone_red.png"},
|
||||
is_ground_content = false
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:killnode", {
|
||||
minetest.register_node(":ctf_map:killnode", {
|
||||
description = "Kill Node",
|
||||
drawtype = "glasslike",
|
||||
tiles = {"ctf_map_killnode.png"},
|
||||
|
@ -67,7 +67,7 @@ do
|
|||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:reinforced_cobble", {
|
||||
minetest.register_node(":ctf_map:reinforced_cobble", {
|
||||
description = "Reinforced Cobblestone",
|
||||
tiles = {"ctf_map_reinforced_cobble.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -80,14 +80,14 @@ end
|
|||
do
|
||||
-- Stone
|
||||
|
||||
minetest.register_node("ctf_map:stone", {
|
||||
minetest.register_node(":ctf_map:stone", {
|
||||
description = "Indestructible Stone",
|
||||
tiles = {"default_stone.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:cobble", {
|
||||
minetest.register_node(":ctf_map:cobble", {
|
||||
description = "Indestructible Cobblestone",
|
||||
tiles = {"default_cobble.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -95,7 +95,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stonebrick", {
|
||||
minetest.register_node(":ctf_map:stonebrick", {
|
||||
description = "Indestructible Stone Brick",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -105,7 +105,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stone_block", {
|
||||
minetest.register_node(":ctf_map:stone_block", {
|
||||
description = "Indestructible Stone Block",
|
||||
tiles = {"default_stone_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -113,7 +113,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:mossycobble", {
|
||||
minetest.register_node(":ctf_map:mossycobble", {
|
||||
description = "Indestructible Mossy Cobblestone",
|
||||
tiles = {"default_mossycobble.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -122,7 +122,7 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:desert_stone", {
|
||||
minetest.register_node(":ctf_map:desert_stone", {
|
||||
description = "Indestructible Desert Stone",
|
||||
tiles = {"default_desert_stone.png"},
|
||||
groups = {immortal = 1},
|
||||
|
@ -130,7 +130,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_cobble", {
|
||||
minetest.register_node(":ctf_map:desert_cobble", {
|
||||
description = "Indestructible Desert Cobblestone",
|
||||
tiles = {"default_desert_cobble.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -138,7 +138,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_stonebrick", {
|
||||
minetest.register_node(":ctf_map:desert_stonebrick", {
|
||||
description = "Indestructible Desert Stone Brick",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -148,7 +148,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_stone_block", {
|
||||
minetest.register_node(":ctf_map:desert_stone_block", {
|
||||
description = "Indestructible Desert Stone Block",
|
||||
tiles = {"default_desert_stone_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -156,14 +156,14 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:sandstone", {
|
||||
minetest.register_node(":ctf_map:sandstone", {
|
||||
description = "Indestructible Sandstone",
|
||||
tiles = {"default_sandstone.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:sandstonebrick", {
|
||||
minetest.register_node(":ctf_map:sandstonebrick", {
|
||||
description = "Indestructible Sandstone Brick",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -173,7 +173,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:sandstone_block", {
|
||||
minetest.register_node(":ctf_map:sandstone_block", {
|
||||
description = "Indestructible Sandstone Block",
|
||||
tiles = {"default_sandstone_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -181,14 +181,14 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_sandstone", {
|
||||
minetest.register_node(":ctf_map:desert_sandstone", {
|
||||
description = "Indestructible Desert Sandstone",
|
||||
tiles = {"default_desert_sandstone.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_sandstone_brick", {
|
||||
minetest.register_node(":ctf_map:desert_sandstone_brick", {
|
||||
description = "Indestructible Desert Sandstone Brick",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -198,7 +198,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_sandstone_block", {
|
||||
minetest.register_node(":ctf_map:desert_sandstone_block", {
|
||||
description = "Indestructible Desert Sandstone Block",
|
||||
tiles = {"default_desert_sandstone_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -206,14 +206,14 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:silver_sandstone", {
|
||||
minetest.register_node(":ctf_map:silver_sandstone", {
|
||||
description = "Indestructible Silver Sandstone",
|
||||
tiles = {"default_silver_sandstone.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:silver_sandstone_brick", {
|
||||
minetest.register_node(":ctf_map:silver_sandstone_brick", {
|
||||
description = "Indestructible Silver Sandstone Brick",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -223,7 +223,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:silver_sandstone_block", {
|
||||
minetest.register_node(":ctf_map:silver_sandstone_block", {
|
||||
description = "Indestructible Silver Sandstone Block",
|
||||
tiles = {"default_silver_sandstone_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -233,14 +233,14 @@ do
|
|||
|
||||
-- Soft / Non-Stone
|
||||
|
||||
minetest.register_node("ctf_map:dirt", {
|
||||
minetest.register_node(":ctf_map:dirt", {
|
||||
description = "Indestructible Dirt",
|
||||
tiles = {"default_dirt.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:dirt_with_grass", {
|
||||
minetest.register_node(":ctf_map:dirt_with_grass", {
|
||||
description = "Indestructible Dirt with Grass",
|
||||
tiles = {"default_grass.png", "default_dirt.png",
|
||||
{name = "default_dirt.png^default_grass_side.png",
|
||||
|
@ -252,7 +252,7 @@ do
|
|||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:dirt_with_dry_grass", {
|
||||
minetest.register_node(":ctf_map:dirt_with_dry_grass", {
|
||||
description = "Indestructible Dirt with Dry Grass",
|
||||
tiles = {"default_dry_grass.png",
|
||||
"default_dirt.png",
|
||||
|
@ -265,7 +265,7 @@ do
|
|||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:dirt_with_snow", {
|
||||
minetest.register_node(":ctf_map:dirt_with_snow", {
|
||||
description = "Indestructible Dirt with Snow",
|
||||
tiles = {"default_snow.png", "default_dirt.png",
|
||||
{name = "default_dirt.png^default_snow_side.png",
|
||||
|
@ -277,7 +277,7 @@ do
|
|||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:dirt_with_rainforest_litter", {
|
||||
minetest.register_node(":ctf_map:dirt_with_rainforest_litter", {
|
||||
description = "Indestructible Dirt with Rainforest Litter",
|
||||
tiles = {
|
||||
"default_rainforest_litter.png",
|
||||
|
@ -292,21 +292,21 @@ do
|
|||
}),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:sand", {
|
||||
minetest.register_node(":ctf_map:sand", {
|
||||
description = "Indestructible Sand",
|
||||
tiles = {"default_sand.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_sand_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:desert_sand", {
|
||||
minetest.register_node(":ctf_map:desert_sand", {
|
||||
description = "Indestructible Desert Sand",
|
||||
tiles = {"default_desert_sand.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_sand_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:silver_sand", {
|
||||
minetest.register_node(":ctf_map:silver_sand", {
|
||||
description = "Indestructible Silver Sand",
|
||||
tiles = {"default_silver_sand.png"},
|
||||
groups = {immortal = 1},
|
||||
|
@ -314,14 +314,14 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:gravel", {
|
||||
minetest.register_node(":ctf_map:gravel", {
|
||||
description = "Indestructible Gravel",
|
||||
tiles = {"default_gravel.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:clay", {
|
||||
minetest.register_node(":ctf_map:clay", {
|
||||
description = "Indestructible Clay",
|
||||
tiles = {"default_clay.png"},
|
||||
groups = {immortal = 1},
|
||||
|
@ -329,7 +329,7 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:snow", {
|
||||
minetest.register_node(":ctf_map:snow", {
|
||||
description = "Indestructible Snow",
|
||||
tiles = {"default_snow.png"},
|
||||
inventory_image = "default_snowball.png",
|
||||
|
@ -352,7 +352,7 @@ do
|
|||
})
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:snowblock", {
|
||||
minetest.register_node(":ctf_map:snowblock", {
|
||||
description = "Indestructible Snow Block",
|
||||
tiles = {"default_snow.png"},
|
||||
groups = {immortal = 1},
|
||||
|
@ -363,7 +363,7 @@ do
|
|||
})
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ice", {
|
||||
minetest.register_node(":ctf_map:ice", {
|
||||
description = "Indestructible Ice",
|
||||
tiles = {"default_ice.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -374,7 +374,7 @@ do
|
|||
|
||||
-- Trees
|
||||
|
||||
minetest.register_node("ctf_map:tree", {
|
||||
minetest.register_node(":ctf_map:tree", {
|
||||
description = "Indestructible Tree",
|
||||
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
|
||||
paramtype2 = "facedir",
|
||||
|
@ -384,7 +384,7 @@ do
|
|||
on_place = minetest.rotate_node
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:wood", {
|
||||
minetest.register_node(":ctf_map:wood", {
|
||||
description = "Indestructible Wooden Planks",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -394,7 +394,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:leaves", {
|
||||
minetest.register_node(":ctf_map:leaves", {
|
||||
description = "Indestructible Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
waving = 1,
|
||||
|
@ -406,7 +406,7 @@ do
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:apple", {
|
||||
minetest.register_node(":ctf_map:apple", {
|
||||
description = "Indestructible Apple",
|
||||
drawtype = "plantlike",
|
||||
tiles = {"default_apple.png"},
|
||||
|
@ -425,7 +425,7 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:jungletree", {
|
||||
minetest.register_node(":ctf_map:jungletree", {
|
||||
description = "Indestructible Jungle Tree",
|
||||
tiles = {"default_jungletree_top.png", "default_jungletree_top.png",
|
||||
"default_jungletree.png"},
|
||||
|
@ -436,7 +436,7 @@ do
|
|||
on_place = minetest.rotate_node
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:junglewood", {
|
||||
minetest.register_node(":ctf_map:junglewood", {
|
||||
description = "Indestructible Jungle Wood Planks",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -446,7 +446,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:jungleleaves", {
|
||||
minetest.register_node(":ctf_map:jungleleaves", {
|
||||
description = "Indestructible Jungle Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
waving = 1,
|
||||
|
@ -459,7 +459,7 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:pine_tree", {
|
||||
minetest.register_node(":ctf_map:pine_tree", {
|
||||
description = "Indestructible Pine Tree",
|
||||
tiles = {"default_pine_tree_top.png", "default_pine_tree_top.png",
|
||||
"default_pine_tree.png"},
|
||||
|
@ -470,7 +470,7 @@ do
|
|||
on_place = minetest.rotate_node
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:pine_wood", {
|
||||
minetest.register_node(":ctf_map:pine_wood", {
|
||||
description = "Indestructible Pine Wood Planks",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -480,7 +480,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:pine_needles",{
|
||||
minetest.register_node(":ctf_map:pine_needles",{
|
||||
description = "Indestructible Pine Needles",
|
||||
drawtype = "allfaces_optional",
|
||||
tiles = {"default_pine_needles.png"},
|
||||
|
@ -491,7 +491,7 @@ do
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:acacia_tree", {
|
||||
minetest.register_node(":ctf_map:acacia_tree", {
|
||||
description = "Indestructible Acacia Tree",
|
||||
tiles = {"default_acacia_tree_top.png", "default_acacia_tree_top.png",
|
||||
"default_acacia_tree.png"},
|
||||
|
@ -502,7 +502,7 @@ do
|
|||
on_place = minetest.rotate_node
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:acacia_wood", {
|
||||
minetest.register_node(":ctf_map:acacia_wood", {
|
||||
description = "Indestructible Acacia Wood Planks",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -512,7 +512,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:acacia_leaves", {
|
||||
minetest.register_node(":ctf_map:acacia_leaves", {
|
||||
description = "Indestructible Acacia Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
tiles = {"default_acacia_leaves.png"},
|
||||
|
@ -524,7 +524,7 @@ do
|
|||
sounds = default.node_sound_leaves_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:aspen_tree", {
|
||||
minetest.register_node(":ctf_map:aspen_tree", {
|
||||
description = "Indestructible Aspen Tree",
|
||||
tiles = {"default_aspen_tree_top.png", "default_aspen_tree_top.png",
|
||||
"default_aspen_tree.png"},
|
||||
|
@ -535,7 +535,7 @@ do
|
|||
on_place = minetest.rotate_node
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:aspen_wood", {
|
||||
minetest.register_node(":ctf_map:aspen_wood", {
|
||||
description = "Indestructible Aspen Wood Planks",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -545,7 +545,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:aspen_leaves", {
|
||||
minetest.register_node(":ctf_map:aspen_leaves", {
|
||||
description = "Indestructible Aspen Leaves",
|
||||
drawtype = "allfaces_optional",
|
||||
tiles = {"default_aspen_leaves.png"},
|
||||
|
@ -560,14 +560,14 @@ do
|
|||
-- Ores
|
||||
--
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_coal", {
|
||||
minetest.register_node(":ctf_map:stone_with_coal", {
|
||||
description = "Indestructible Coal Ore",
|
||||
tiles = {"default_stone.png^default_mineral_coal.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:coalblock", {
|
||||
minetest.register_node(":ctf_map:coalblock", {
|
||||
description = "Indestructible Coal Block",
|
||||
tiles = {"default_coal_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -576,28 +576,28 @@ do
|
|||
})
|
||||
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_iron", {
|
||||
minetest.register_node(":ctf_map:stone_with_iron", {
|
||||
description = "Indestructible Iron Ore",
|
||||
tiles = {"default_stone.png^default_mineral_iron.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_copper", {
|
||||
minetest.register_node(":ctf_map:stone_with_copper", {
|
||||
description = "Indestructible Copper Ore",
|
||||
tiles = {"default_stone.png^default_mineral_copper.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_tin", {
|
||||
minetest.register_node(":ctf_map:stone_with_tin", {
|
||||
description = "Indestructible Tin Ore",
|
||||
tiles = {"default_stone.png^default_mineral_tin.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:bronzeblock", {
|
||||
minetest.register_node(":ctf_map:bronzeblock", {
|
||||
description = "Indestructible Bronze Block",
|
||||
tiles = {"default_bronze_block.png"},
|
||||
is_ground_content = false,
|
||||
|
@ -605,14 +605,14 @@ do
|
|||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_mese", {
|
||||
minetest.register_node(":ctf_map:stone_with_mese", {
|
||||
description = "Indestructible Mese Ore",
|
||||
tiles = {"default_stone.png^default_mineral_mese.png"},
|
||||
groups = {immortal = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:mese", {
|
||||
minetest.register_node(":ctf_map:mese", {
|
||||
description = "Indestructible Mese Block",
|
||||
tiles = {"default_mese_block.png"},
|
||||
paramtype = "light",
|
||||
|
@ -621,7 +621,7 @@ do
|
|||
light_source = 3,
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:stone_with_diamond", {
|
||||
minetest.register_node(":ctf_map:stone_with_diamond", {
|
||||
description = "Indestructible Diamond Ore",
|
||||
tiles = {"default_stone.png^default_mineral_diamond.png"},
|
||||
groups = {immortal = 1},
|
||||
|
@ -630,7 +630,7 @@ do
|
|||
|
||||
-- Plantlife (non-cubic)
|
||||
|
||||
minetest.register_node("ctf_map:cactus", {
|
||||
minetest.register_node(":ctf_map:cactus", {
|
||||
description = "Indestructible Cactus",
|
||||
tiles = {"default_cactus_top.png", "default_cactus_top.png",
|
||||
"default_cactus_side.png"},
|
||||
|
@ -640,7 +640,7 @@ do
|
|||
on_place = minetest.rotate_node,
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:ladder_wood", {
|
||||
minetest.register_node(":ctf_map:ladder_wood", {
|
||||
description = "Indestructible Wooden Ladder",
|
||||
drawtype = "signlike",
|
||||
tiles = {"default_ladder_wood.png"},
|
||||
|
@ -663,7 +663,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
default.register_fence("ctf_map:fence_wood", {
|
||||
default.register_fence(":ctf_map:fence_wood", {
|
||||
description = "Indestructible Wooden Fence",
|
||||
texture = "default_fence_wood.png",
|
||||
inventory_image = "default_fence_overlay.png^default_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
||||
|
@ -673,7 +673,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
default.register_fence("ctf_map:fence_acacia_wood", {
|
||||
default.register_fence(":ctf_map:fence_acacia_wood", {
|
||||
description = "Indestructible Acacia Fence",
|
||||
texture = "default_fence_acacia_wood.png",
|
||||
inventory_image = "default_fence_overlay.png^default_acacia_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
||||
|
@ -683,7 +683,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
default.register_fence("ctf_map:fence_junglewood", {
|
||||
default.register_fence(":ctf_map:fence_junglewood", {
|
||||
description = "Indestructible Jungle Wood Fence",
|
||||
texture = "default_fence_junglewood.png",
|
||||
inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
||||
|
@ -693,7 +693,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
default.register_fence("ctf_map:fence_pine_wood", {
|
||||
default.register_fence(":ctf_map:fence_pine_wood", {
|
||||
description = "Indestructible Pine Fence",
|
||||
texture = "default_fence_pine_wood.png",
|
||||
inventory_image = "default_fence_overlay.png^default_pine_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
||||
|
@ -703,7 +703,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
default.register_fence("ctf_map:fence_aspen_wood", {
|
||||
default.register_fence(":ctf_map:fence_aspen_wood", {
|
||||
description = "Indestructible Aspen Fence",
|
||||
texture = "default_fence_aspen_wood.png",
|
||||
inventory_image = "default_fence_overlay.png^default_aspen_wood.png^default_fence_overlay.png^[makealpha:255,126,126",
|
||||
|
@ -713,7 +713,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults()
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:glass", {
|
||||
minetest.register_node(":ctf_map:glass", {
|
||||
description = "Indestructible Glass",
|
||||
drawtype = "glasslike_framed_optional",
|
||||
tiles = {"default_glass.png", "default_glass_detail.png"},
|
||||
|
@ -725,7 +725,7 @@ do
|
|||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:brick", {
|
||||
minetest.register_node(":ctf_map:brick", {
|
||||
description = "Indestructible Brick Block",
|
||||
paramtype2 = "facedir",
|
||||
place_param2 = 0,
|
||||
|
@ -735,7 +735,7 @@ do
|
|||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:meselamp", {
|
||||
minetest.register_node(":ctf_map:meselamp", {
|
||||
description = "Indestructible Mese Lamp",
|
||||
drawtype = "glasslike",
|
||||
tiles = {"default_meselamp.png"},
|
||||
|
@ -750,7 +750,7 @@ end
|
|||
|
||||
-- Indestructible torches from MTG's default mod
|
||||
do
|
||||
minetest.register_node("ctf_map:torch", {
|
||||
minetest.register_node(":ctf_map:torch", {
|
||||
description = "Torch",
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_floor.obj",
|
||||
|
@ -788,21 +788,21 @@ do
|
|||
local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above))
|
||||
local fakestack = itemstack
|
||||
if wdir == 0 then
|
||||
fakestack:set_name("ctf_map:torch_ceiling")
|
||||
fakestack:set_name(":ctf_map:torch_ceiling")
|
||||
elseif wdir == 1 then
|
||||
fakestack:set_name("ctf_map:torch")
|
||||
fakestack:set_name(":ctf_map:torch")
|
||||
else
|
||||
fakestack:set_name("ctf_map:torch_wall")
|
||||
fakestack:set_name(":ctf_map:torch_wall")
|
||||
end
|
||||
|
||||
itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir)
|
||||
itemstack:set_name("ctf_map:torch")
|
||||
itemstack:set_name(":ctf_map:torch")
|
||||
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:torch_wall", {
|
||||
minetest.register_node(":ctf_map:torch_wall", {
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_wall.obj",
|
||||
tiles = {{
|
||||
|
@ -823,7 +823,7 @@ do
|
|||
sounds = default.node_sound_wood_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("ctf_map:torch_ceiling", {
|
||||
minetest.register_node(":ctf_map:torch_ceiling", {
|
||||
drawtype = "mesh",
|
||||
mesh = "torch_ceiling.obj",
|
||||
tiles = {{
|
||||
|
@ -855,7 +855,7 @@ do
|
|||
nodedef.description = "Indestructible " .. nodedef.description
|
||||
end
|
||||
nodedef.groups = {immortal = 1}
|
||||
minetest.register_node("ctf_map:" .. name:split(":")[2], nodedef)
|
||||
minetest.register_node(":ctf_map:" .. name:split(":")[2], nodedef)
|
||||
elseif name:find("wool") then
|
||||
local color = name:split(":")[2]
|
||||
nodedef = table.copy(nodedef)
|
||||
|
@ -863,7 +863,7 @@ do
|
|||
nodedef.description = "Indestructible " .. nodedef.description
|
||||
end
|
||||
nodedef.groups = {immortal = 1}
|
||||
minetest.register_node("ctf_map:wool_" .. color, nodedef)
|
||||
minetest.register_node(":ctf_map:wool_" .. color, nodedef)
|
||||
minetest.register_alias("ctf_map:" .. color, "ctf_map:wool_" .. color)
|
||||
end
|
||||
end
|
|
@ -27,8 +27,8 @@ minetest.register_alias_force("default:stone_with_gold", "default:stone")
|
|||
|
||||
|
||||
local max_r = 120
|
||||
ctf_map.mapdir = minetest.get_modpath("ctf_map") .. "/maps/"
|
||||
ctf_map.map = nil
|
||||
ctf_map.mapdir = minetest.get_modpath(minetest.get_current_modname()) .. "/maps/"
|
||||
|
||||
-- Modify server status message to include map info
|
||||
local map_str
|
Before Width: | Height: | Size: 179 B After Width: | Height: | Size: 179 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 206 B After Width: | Height: | Size: 206 B |
Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 665 B After Width: | Height: | Size: 665 B |
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 425 B |
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 625 B |
Before Width: | Height: | Size: 614 B After Width: | Height: | Size: 614 B |
Before Width: | Height: | Size: 564 B After Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 556 B |
Before Width: | Height: | Size: 593 B After Width: | Height: | Size: 593 B |
Before Width: | Height: | Size: 587 B After Width: | Height: | Size: 587 B |
|
@ -1,30 +1,23 @@
|
|||
# CTF Map
|
||||
|
||||
This mod handles creating and loading maps.
|
||||
|
||||
## Attributions
|
||||
|
||||
- Indestructible nodes adapted from various mods in `minetest_game`.
|
||||
# CTF Map - Map maker
|
||||
|
||||
## Creating a new map
|
||||
|
||||
### 1. Dependencies
|
||||
|
||||
* Minetest 0.4.16 or later.
|
||||
* Mods
|
||||
* ctf_map (by copying the folder from this game to `minetest/mods`)
|
||||
* worldedit and worldedit_commands.
|
||||
* Minetest 5.0.0 or later.
|
||||
* `ctf_map` modpack (by copying the folder from this game to `minetest/mods`)
|
||||
* `worldedit` and `worldedit_commands`.
|
||||
|
||||
### 2. Find an area
|
||||
|
||||
* Can use Minetest Game and any mapgen.
|
||||
* It must be a cube, and the barrier will be in the exact center.
|
||||
* It should be around 230x230 in surface area, but this can vary.
|
||||
* It should be around 230x230 in surface area, but this can be lesser.
|
||||
* Feel free to modify the area to your needs.
|
||||
|
||||
### 3. Select the area
|
||||
|
||||
There are multiple ways do this, this is the simplist in most cases.
|
||||
There are multiple ways do this, this is the simplest in most cases.
|
||||
|
||||
* If you haven't modified the map at all, do the following to speed up barrier placement:
|
||||
* Stop Minetest.
|
||||
|
@ -32,7 +25,7 @@ There are multiple ways do this, this is the simplist in most cases.
|
|||
* Set backend to "dummy".
|
||||
* Save.
|
||||
* Using worldedit, select the area.
|
||||
* Type /gui, and click "From WE" then "To WE".
|
||||
* Type `/gui`, and click "From WE" then "To WE".
|
||||
* Check that the center location is the right place for the barrier to go.
|
||||
* Check that the bounds extend far enough.
|
||||
|
||||
|
@ -50,8 +43,7 @@ There are multiple ways do this, this is the simplist in most cases.
|
|||
### 6. Export
|
||||
|
||||
* Click export, and wait until completion.
|
||||
* Copy the two files from `worlddir/schems/` to `ctf_map/maps/`.
|
||||
* Rename the files so the two prefixed numbers are consistent to existing maps.
|
||||
* Copy the resultant folder from `worlddir/schems/` into `ctf_map/ctf_map_core/maps/`.
|
||||
* Profit!
|
||||
|
||||
## Documentation
|
||||
|
@ -94,16 +86,4 @@ An example `treasures` value that registers steel pick, shotgun, and grenade:
|
|||
treasures = default:pick_steel,0.5,5,1,10;shooter:shotgun,0.04,2,1;shooter:grenade,0.08,2,1
|
||||
```
|
||||
|
||||
(See [here](../../other/treasurer/README.md) to understand the magic numbers)
|
||||
|
||||
## Indestructible nodes
|
||||
|
||||
- `ctf_map` provides indestructible nodes for most nodes from default, and all nodes from
|
||||
stairs.
|
||||
|
||||
- All indestructible nodes have the same item name with the mod prefix being `ctf_map:`
|
||||
instead of their original prefixes (e.g. `default:stone` -> `ctf_map:stone` and
|
||||
`stairs:stair_stone` -> `ctf_map:stair_stone`) with the exception of wool, whose
|
||||
indestructible nodes have slightly different names from the original node names -
|
||||
`ctf_map:wool_<color>`. This is because the original nomenclature becomes meaningless
|
||||
if the modname prefix is changed.
|
||||
(See [here](../../../other/treasurer/README.md) to understand the magic numbers)
|
5
mods/ctf/ctf_map/map_maker/init.lua
Normal file
|
@ -0,0 +1,5 @@
|
|||
-- Dofile the scripts only if ctf doesn't exist
|
||||
if not minetest.global_exists("ctf") then
|
||||
local modpath = minetest.get_modpath(minetest.get_current_modname()) .. "/"
|
||||
dofile(modpath .. "map_maker.lua")
|
||||
end
|
|
@ -52,19 +52,20 @@ end
|
|||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
minetest.after(1, function(name)
|
||||
minetest.chat_send_player(name, "*** CTF_MAP IS IN MAP MAKER MODE ***")
|
||||
minetest.chat_send_player(name,
|
||||
minetest.colorize("#BB33EE", "*** ctf_map is in map-maker mode ***"))
|
||||
end, player:get_player_name())
|
||||
|
||||
local inv = player:get_inventory()
|
||||
if not inv:contains_item("main", ItemStack("ctf_map:adminpick")) then
|
||||
inv:add_item("main", ItemStack("ctf_map:adminpick"))
|
||||
if not inv:contains_item("main", "map_maker:adminpick") then
|
||||
inv:add_item("main", "map_maker:adminpick")
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
local inv = player:get_inventory()
|
||||
if not inv:contains_item("main", ItemStack("ctf_map:adminpick")) then
|
||||
inv:add_item("main", ItemStack("ctf_map:adminpick"))
|
||||
if not inv:contains_item("main", "map_maker:adminpick") then
|
||||
inv:add_item("main", "map_maker:adminpick")
|
||||
end
|
||||
end)
|
||||
|
||||
|
@ -83,7 +84,7 @@ local function check_step()
|
|||
end
|
||||
minetest.after(1, check_step)
|
||||
|
||||
minetest.register_node("ctf_map:flag", {
|
||||
minetest.register_node(":ctf_map:flag", {
|
||||
description = "Flag",
|
||||
drawtype="nodebox",
|
||||
paramtype = "light",
|
||||
|
@ -93,8 +94,8 @@ minetest.register_node("ctf_map:flag", {
|
|||
"default_wood.png",
|
||||
"default_wood.png",
|
||||
"default_wood.png",
|
||||
"flag_grey2.png",
|
||||
"flag_grey.png"
|
||||
"map_maker_flag_grey.png",
|
||||
"map_maker_flag_grey.png"
|
||||
},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
|
@ -437,9 +438,9 @@ minetest.register_chatcommand("gui", {
|
|||
})
|
||||
|
||||
-- Register special pickaxe to break indestructible nodes
|
||||
minetest.register_tool("ctf_map:adminpick", {
|
||||
minetest.register_tool("map_maker:adminpick", {
|
||||
description = "Admin pickaxe used to break indestructible nodes.",
|
||||
inventory_image = "ctf_map_adminpick.png",
|
||||
inventory_image = "map_maker_adminpick.png",
|
||||
range = 16,
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 1.0,
|
2
mods/ctf/ctf_map/map_maker/mod.conf
Normal file
|
@ -0,0 +1,2 @@
|
|||
name = map_maker
|
||||
depends = ctf_map_core, worldedit
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
BIN
mods/ctf/ctf_map/map_maker/textures/map_maker_flag_grey.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
|
@ -1 +0,0 @@
|
|||
Subproject commit 98abf0158065cfe0f9747dd07f8c71581708cdd5
|
|
@ -1,3 +0,0 @@
|
|||
name = ctf_map
|
||||
depends = default
|
||||
optional_depends = ctf_treasure, stairs, wool, ctf, ctf_match, worldedit, irc, ctf_stats
|
1
mods/ctf/ctf_map/modpack.conf
Normal file
|
@ -0,0 +1 @@
|
|||
name = ctf_map
|
|
@ -1,3 +1,3 @@
|
|||
name = dropondie
|
||||
depends = ctf_map
|
||||
depends = ctf_map_core
|
||||
description = With this mod, players will drop all their items in their inventory on the ground when they die.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
cd mods/ctf/ctf_map/maps/
|
||||
cd mods/ctf/ctf_map/ctf_map_core/maps/
|
||||
|
||||
# Copy textures from map sub-dirs to ctf_map/textures
|
||||
# Copy textures from map sub-dirs to ctf_map_core/textures
|
||||
for f in *; do
|
||||
if [ -d ${f} ]; then
|
||||
# Screenshot
|
||||
|
|