123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /* This file is to show and setup a decent population of tiles (possibly to be used in-game)
- This shows:
- + How to check there are tiles, and if they don't exist, pre-populate some in
- + Iterate all the tiles and display the juicy inners of each tile
- */
- use std::path::PathBuf;
- use anyhow::bail;
- use rmmo::{TileIndex, Tile};
- fn main() -> Result<(), anyhow::Error> {
- match TileIndex::load(PathBuf::from("data/tiles.json")) {
- Ok(ti) => {
- println!("Loaded {} tiles:", ti.len());
- let mut idx = 0;
- for t in ti {
- if let Some(desc) = t.description {
- println!("{:3}] name=\"{:25}\" \"{:1}\" color=\"{:25}\" description=\"{}\"", idx, t.name, t.symbol, t.color, desc);
- } else {
- println!("{:3}] name=\"{:25}\" \"{:1}\" color=\"{:25}\" description=None", idx, t.name, t.symbol, t.color);
- }
- idx += 1;
- }
- },
- Err(err) => {
- // Covers Windows and Linux "Not Found" error message (If it isn't either of these bail)
- if err.to_string() != "The system cannot find the file specified. (os error 2)" && err.to_string() != "No such file or directory (os error 2)" {
- bail!(err);
- }
- // Ok must be "Not Found", so let's make a new one
- let mut ti = TileIndex::new();
- //ti.define(Tile::new("", "", ""));
- //ti.define(Tile::with_description("", "", "", ""));
- ti.define(Tile::with_description("void", "", "", "You can fly over this, or fall into it"));
- ti.define(Tile::with_description("player", "@", "bright green", "You"));
- ti.define(Tile::with_description("player-neutral", "@", "bright white", "Another player"));
- ti.define(Tile::with_description("player-ally", "@", "green", "Another player, an ally"));
- ti.define(Tile::with_description("player-enemy", "@", "bright red", "Another player, an enemy"));
- ti.define(Tile::with_description("path-grass", ".", "green", "A grassy path"));
- ti.define(Tile::with_description("path-stone", ".", "white", "A stoney path"));
- ti.define(Tile::with_description("water-shallow", "~", "bright cyan", "Shallow Water (Movement 60%, Can swim"));
- ti.define(Tile::with_description("water-deep", "~", "bright blue", "Deep Water (Can not swim)"));
- ti.define(Tile::with_description("tree-small", "t", "green", "A small Tree, flammable, produces wood"));
- ti.define(Tile::with_description("tree-large", "T", "green", "A large Tree, flammable, produces wood"));
- ti.define(Tile::with_description("crystal-small", "*", "magenta", "A small crystal, probably from killing a monster"));
- ti.define(Tile::with_description("crystal-large", "*", "bright magenta", "A large crystal, probably from killing a monster"));
- ti.define(Tile::with_description("gold", "$", "bright yellow", "Some gold coins, useful to buy something"));
- ti.define(Tile::with_description("gem-red", "*", "red", "A ruby gemstone"));
- ti.define(Tile::with_description("gem-green", "*", "green", "A emerald gemstone"));
- ti.define(Tile::with_description("wall-v", "|", "white", "A stone wall"));
- ti.define(Tile::with_description("wall-h", "-", "white", "A stone wall"));
- ti.define(Tile::with_description("door-c", "+", "brown", "A wooden door, closed (maybe you should Open it?)"));
- ti.define(Tile::with_description("door-o", "-", "brown", "A wooden door, opened (you could Close it, or walk thru it)"));
- ti.define(Tile::with_description("stairs-up", ">", "white", "A staircase leading upward"));
- ti.define(Tile::with_description("stairs-down", "<", "white", "A staircase leading downward"));
- ti.define(Tile::with_description("checkpoint", ";", "bright cyan", "A checkpoint (useful for going to the surface, and returning to this level)"));
- ti.define(Tile::with_description("trap-disabled", "^", "white", "A trap, appears to be disabled or broken"));
- ti.define(Tile::with_description("trap-arrow", "^", "bright white", "A arrow trap"));
- ti.define(Tile::with_description("trap-bear", "^", "brown", "A bear trap, can cripple you for some time"));
- ti.define(Tile::with_description("trap-teleport", "^", "bright cyan", "A teleport trap, teleports you randomly between the upper level, this level or the next deeper level"));
- ti.define(Tile::with_description("trap-fire", "^", "red", "A fire trap, can ignite you dealing damage over time"));
- ti.define(Tile::with_description("trap-time", "^", "bright yellow", "A time stop trap, you will be caught in a magical time stop for quite some time"));
- ti.define(Tile::with_description("trap-sound", "^", "green", "A sound trap, will emit a loud sound (which will attract monsters near by)"));
- ti.define(Tile::with_description("food-ration", "%", "brown", "A food ration"));
- ti.define(Tile::with_description("food-apple", "%", "red", "A apple"));
- ti.define(Tile::with_description("food-egg", "%", "bright white", "A egg"));
- ti.define(Tile::with_description("food-c-chicken", "%", "bright yellow", "A can of chicken"));
- ti.define(Tile::with_description("food-c-tuna", "%", "bright cyan", "A can of tuna fish"));
- ti.define(Tile::with_description("key", "F", "bright white", "A key (used to unlock further dungeon levels)"));
- ti.define(Tile::with_description("potion-heal", "b", "red", "A potion of healing"));
- ti.define(Tile::with_description("potion-magic", "b", "cyan", "A potion of mana"));
- ti.define(Tile::with_description("potion-surface", "b", "bright cyan", "A potion of returning (Drink this to return to the surface)"));
- ti.define(Tile::with_description("potion-poison", "b", "green", "A potion of poison (Deals some damage over time)"));
- ti.define(Tile::with_description("potion-suicide", "b", "bright red", "A potion of suicide (Drink this to end it all)"));
- ti.define(Tile::with_description("monster-rat", "r", "brown", "A rat"));
- ti.define(Tile::with_description("monster-coyote", "c", "brown", "A coyote"));
- ti.define(Tile::with_description("monster-minotaur", "M", "brown", "The Minotaur (Level 5 Boss)"));
- ti.define(Tile::with_description("monster-wolf", "w", "white", "A wolf (Slightly bigger than a coyote, and twice as vicious)"));
- ti.define(Tile::with_description("monster-slime", "n", "green", "A green slimy ooze"));
- ti.define(Tile::with_description("monster-goblin", "G", "green", "A goblin"));
- ti.define(Tile::with_description("monster-troll", "T", "white", "A troll"));
- ti.define(Tile::with_description("monster-dragon-red", "D", "red", "The Red Dragon (Level 10 Boss)"));
- ti.define(Tile::with_description("monster-skeleton", "A", "bright white", "A skeleton"));
- ti.define(Tile::with_description("monster-s-troll", "T", "bright white", "A giant skeleton (Once was a troll)"));
- ti.define(Tile::with_description("monster-dragon-green", "D", "green", "The Green Dragon (Level 15 Boss)"));
- ti.define(Tile::with_description("monster-titan", "T", "bright magenta", "A giant Titan"));
- ti.define(Tile::with_description("monster-mimic-crystal", "*", "cyan", "A Mimic (appearing as some crystal)"));
- ti.save(PathBuf::from("data/tiles.json"))?;
- println!("Created {} tiles", ti.len());
- }
- }
- Ok(())
- }
|