diff --git a/mods/ctf/ctf_map/README.md b/mods/ctf/ctf_map/README.md index 7767c3f..43d08ee 100644 --- a/mods/ctf/ctf_map/README.md +++ b/mods/ctf/ctf_map/README.md @@ -1,51 +1,84 @@ # CTF Map -This mod handles multiple maps. +This mod handles creating and loading maps. -# Creating a new map +## Creating a new map -## 1. Dependencies +### 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. + * ctf_map (by copying the folder from this game to `minetest/mods`) + * worldedit and worldedit_commands. -## 2. Find an area +### 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. * Feel free to modify the area to your needs. -## 3. Select the area +### 3. Select the area There are multiple ways do this, this is the simplist in most cases. * If you haven't modified the map at all, do the following to speed up barrier placement: - * Stop Minetest. - * Open up the world's world.mt - * Set backend to "dummy". - * Save. + * Stop Minetest. + * Open up the world's world.mt + * Set backend to "dummy". + * Save. * Using worldedit, select the area. * 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. -## 4. Place barriers +### 4. Place barriers * Set the middle barrier direction. The barrier is a plane defined by a co-ordinate = 0. If the barrier is X=0, then it will placed with every node of the barrier having X=0. If the barrier is Z=0, then it will placed with every node of the barrier having Z=0. * Click "place barrier". Note that this command does not have an undo. -## 5. Meta data +### 5. Meta data * Set the meta data -## 6. Export +### 6. Export * Click export, and wait until completion. -* Copy the two files from `worlddir/schemes/` to `ctf_map/maps/`. +* Copy the two files from `worlddir/schems/` to `ctf_map/maps/`. * Rename the files so the two prefixed numbers are consistent to existing maps. * Profit! + +## Documentation + +### Map meta + +Each map's metadata is stored in an accompanying .conf file containing the following data: + +* `name`: Name of map. +* `author`: Author of the map. +* `hint`: [Optional] Helpful hint or tip for unique maps, to help players understand the map. +* `rotation`: Rotation of the schem. [`x`|`z`] +* `schematic`: Name of the map's schematic. +* `initial_stuff`: [Optional] Comma-separated list of itemstacks to be given to the player on join and on respawn. +* `treasures`: [Optional] List of treasures to be registered for the map, in a serialized format. Refer to the `treasures` sub-section for more details. +* `r`: Radius of the map. +* `h`: Height of the map. +* `team.i`: Name of team `i`. +* `team.i.color`: Color of team `i`. +* `team.i.pos`: Position of team `i`'s flag, relative to center of schem. +* `chests.i.from`, `chests.i.to`: [Optional] Positions of diagonal corners of custom chest zone `i`, relative to the center of the schem. +* `chests.i.n`: [Optional] Number of chests to place in custom chest zone `i`. + +#### `treasures` + +`treasures` is a list of treasures to be registered for this map in serialized format. + +An example `treasures` value that registers steel pick, shotgun, and grenade: + +```lua +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) diff --git a/mods/ctf/ctf_map/depends.txt b/mods/ctf/ctf_map/depends.txt index 35bedcd..246946f 100644 --- a/mods/ctf/ctf_map/depends.txt +++ b/mods/ctf/ctf_map/depends.txt @@ -1,4 +1,5 @@ default +ctf_treasure? stairs? wool? ctf_team_base? diff --git a/mods/ctf/ctf_map/schem_map.lua b/mods/ctf/ctf_map/schem_map.lua index a1b6aae..3dd9424 100644 --- a/mods/ctf/ctf_map/schem_map.lua +++ b/mods/ctf/ctf_map/schem_map.lua @@ -137,10 +137,12 @@ function ctf_match.load_map_meta(idx, name) local meta = Settings(conf_path) if meta:get("r") == nil then - error("Map was not properly configured " .. conf_path) + error("Map was not properly configured: " .. conf_path) end local initial_stuff = meta:get("initial_stuff") + local treasures = meta:get("treasures") + treasures = treasures and treasures:split(";") local map = { idx = idx, name = meta:get("name"), @@ -149,11 +151,12 @@ function ctf_match.load_map_meta(idx, name) rotation = meta:get("rotation"), schematic = name .. ".mts", initial_stuff = initial_stuff and initial_stuff:split(","), + treasures = treasures, r = tonumber(meta:get("r")), h = tonumber(meta:get("h")), offset = offset, teams = {}, - chests = {}, + chests = {} } assert(map.r <= max_r) @@ -176,6 +179,35 @@ function ctf_match.load_map_meta(idx, name) i = i + 1 end + -- Register per-map treasures or the default set of treasures + -- if treasures field hasn't been defined in map meta + if treasurer and ctf_treasure then + treasurer.treasures = {} + if treasures then + for _, item in pairs(treasures) do + item = item:split(",") + -- treasurer.register_treasure(name, rarity, preciousness, count) + if #item == 4 then + treasurer.register_treasure(item[1], + tonumber(item[2]), + tonumber(item[3]), + tonumber(item[4])) + -- treasurer.register_treasure(name, rarity, preciousness, {min, max}) + elseif #item == 5 then + treasurer.register_treasure(item[1], + tonumber(item[2]), + tonumber(item[3]), + { + tonumber(item[4]), + tonumber(item[5]) + }) + end + end + else + ctf_treasure.register_default_treasures() + end + end + -- Read custom chest zones from config i = 1 while meta:get("chests." .. i .. ".from") do diff --git a/mods/ctf/ctf_treasure/depends.txt b/mods/ctf/ctf_treasure/depends.txt index f05833c..f55ee17 100644 --- a/mods/ctf/ctf_treasure/depends.txt +++ b/mods/ctf/ctf_treasure/depends.txt @@ -1,2 +1 @@ treasurer -default diff --git a/mods/ctf/ctf_treasure/init.lua b/mods/ctf/ctf_treasure/init.lua index 77a5fbc..31ec1be 100644 --- a/mods/ctf/ctf_treasure/init.lua +++ b/mods/ctf/ctf_treasure/init.lua @@ -1,21 +1,25 @@ -treasurer.register_treasure("default:ladder",0.3,5,{1,20}) -treasurer.register_treasure("default:torch",0.3,5,{1,20}) -treasurer.register_treasure("default:cobble",0.4,5,{45,99}) -treasurer.register_treasure("default:apple",0.3,5,{1,8}) -treasurer.register_treasure("default:wood",0.3,5,{30,60}) -treasurer.register_treasure("doors:door_steel",0.3,5,{1,3}) +ctf_treasure = {} -treasurer.register_treasure("default:pick_steel",0.5,5,{1,10}) -treasurer.register_treasure("default:sword_stone",0.6,5,{1,10}) -treasurer.register_treasure("default:sword_steel",0.4,5,{1,4}) -treasurer.register_treasure("default:shovel_stone",0.6,5,{1,10}) -treasurer.register_treasure("default:shovel_steel",0.3,5,{1,10}) +function ctf_treasure.register_default_treasures() + treasurer.register_treasure("default:ladder",0.3,5,{1,20}) + treasurer.register_treasure("default:torch",0.3,5,{1,20}) + treasurer.register_treasure("default:cobble",0.4,5,{45,99}) + treasurer.register_treasure("default:apple",0.3,5,{1,8}) + treasurer.register_treasure("default:wood",0.3,5,{30,60}) + treasurer.register_treasure("doors:door_steel",0.3,5,{1,3}) -treasurer.register_treasure("shooter:crossbow",0.5,2,{1,5}) -treasurer.register_treasure("shooter:pistol",0.4,2,{1,5}) -treasurer.register_treasure("shooter:rifle",0.1,2,{1,2}) -treasurer.register_treasure("shooter:shotgun",0.04,2,1) -treasurer.register_treasure("shooter:grenade",0.08,2,1) -treasurer.register_treasure("shooter:machine_gun",0.02,2,1) -treasurer.register_treasure("shooter:ammo",0.3,2,{1,10}) -treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18}) + treasurer.register_treasure("default:pick_steel",0.5,5,{1,10}) + treasurer.register_treasure("default:sword_stone",0.6,5,{1,10}) + treasurer.register_treasure("default:sword_steel",0.4,5,{1,4}) + treasurer.register_treasure("default:shovel_stone",0.6,5,{1,10}) + treasurer.register_treasure("default:shovel_steel",0.3,5,{1,10}) + + treasurer.register_treasure("shooter:crossbow",0.5,2,{1,5}) + treasurer.register_treasure("shooter:pistol",0.4,2,{1,5}) + treasurer.register_treasure("shooter:rifle",0.1,2,{1,2}) + treasurer.register_treasure("shooter:shotgun",0.04,2,1) + treasurer.register_treasure("shooter:grenade",0.08,2,1) + treasurer.register_treasure("shooter:machine_gun",0.02,2,1) + treasurer.register_treasure("shooter:ammo",0.3,2,{1,10}) + treasurer.register_treasure("shooter:arrow_white",0.5,2,{2,18}) +end