palette changes
This commit is contained in:
@@ -196,7 +196,7 @@ palette = { "g" = { kind = "floor", generator = "grass" } }
|
|||||||
|
|
||||||
[[boards.room1.layers]]
|
[[boards.room1.layers]]
|
||||||
sparse = [ { x = 5, y = 3, ch = "C" }, { x = 9, y = 7, ch = "C" } ] # two chests
|
sparse = [ { x = 5, y = 3, ch = "C" }, { x = 9, y = 7, ch = "C" } ] # two chests
|
||||||
palette = { " " = { kind = "empty" }, "C" = { kind = "object", script_name = "chest" } }
|
palette = { "C" = { kind = "object", script_name = "chest" } } # spaces are implicitly empty
|
||||||
```
|
```
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
@@ -237,8 +237,8 @@ content = """
|
|||||||
"d" = { kind = "floor", generator = "dirt" }
|
"d" = { kind = "floor", generator = "dirt" }
|
||||||
"." = { kind = "floor", tile = ".", fg = "#222", bg = "#000" } # fixed floor glyph
|
"." = { kind = "floor", tile = ".", fg = "#222", bg = "#000" } # fixed floor glyph
|
||||||
|
|
||||||
# Layer 1: terrain, the player, objects and portals. A space here resolves to
|
# Layer 1: terrain, the player, objects and portals. A space is always a
|
||||||
# kind="empty" (transparent), so the floor below shows through.
|
# transparent empty cell, so the floor below shows through.
|
||||||
[[boards.room1.layers]]
|
[[boards.room1.layers]]
|
||||||
content = """
|
content = """
|
||||||
############################################################
|
############################################################
|
||||||
@@ -246,7 +246,7 @@ content = """
|
|||||||
############################################################
|
############################################################
|
||||||
"""
|
"""
|
||||||
[boards.room1.layers.palette]
|
[boards.room1.layers.palette]
|
||||||
" " = { kind = "empty" } # transparent
|
# A space is always a transparent empty cell — it is never a palette key.
|
||||||
"#" = { kind = "wall", tile = 35, fg = "#808080", bg = "#606060" }
|
"#" = { kind = "wall", tile = 35, fg = "#808080", bg = "#606060" }
|
||||||
"o" = { kind = "crate", tile = 254, fg = "#aaaaaa", bg = "#000000" } # solid + pushable (any dir)
|
"o" = { kind = "crate", tile = 254, fg = "#aaaaaa", bg = "#000000" } # solid + pushable (any dir)
|
||||||
"-" = { kind = "hcrate" } # pushable east/west only
|
"-" = { kind = "hcrate" } # pushable east/west only
|
||||||
|
|||||||
+12
-2
@@ -43,6 +43,9 @@ pub(crate) struct Layer {
|
|||||||
/// layer of identical floor).
|
/// layer of identical floor).
|
||||||
/// - `sparse` — a list of `{ x, y, ch }` cells over an otherwise all-spaces grid
|
/// - `sparse` — a list of `{ x, y, ch }` cells over an otherwise all-spaces grid
|
||||||
/// (handy for a layer holding just a few objects).
|
/// (handy for a layer holding just a few objects).
|
||||||
|
///
|
||||||
|
/// A space (`' '`) is always a transparent empty cell and is never a palette key
|
||||||
|
/// (any `" "` entry in `palette` is ignored).
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
pub(crate) struct LayerData {
|
pub(crate) struct LayerData {
|
||||||
/// Multi-line grid string; one char per cell, looked up in `palette`.
|
/// Multi-line grid string; one char per cell, looked up in `palette`.
|
||||||
@@ -341,12 +344,14 @@ pub(crate) fn build_layer(
|
|||||||
errors: &mut Vec<LogLine>,
|
errors: &mut Vec<LogLine>,
|
||||||
) -> Result<(Layer, Vec<Placement>), String> {
|
) -> Result<(Layer, Vec<Placement>), String> {
|
||||||
// Resolve each palette entry once (per-cell work like generators happens below).
|
// Resolve each palette entry once (per-cell work like generators happens below).
|
||||||
|
// Space is always a transparent empty cell, so it is never a palette key — any
|
||||||
|
// `" "` entry is ignored.
|
||||||
let resolved: HashMap<char, Resolved> = data
|
let resolved: HashMap<char, Resolved> = data
|
||||||
.palette
|
.palette
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(key, entry)| {
|
.filter_map(|(key, entry)| {
|
||||||
let ch = key.chars().next().unwrap_or(' ');
|
let ch = key.chars().next().unwrap_or(' ');
|
||||||
(ch, resolve_entry(ch, entry, errors))
|
(ch != ' ').then(|| (ch, resolve_entry(ch, entry, errors)))
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
@@ -358,6 +363,11 @@ pub(crate) fn build_layer(
|
|||||||
let mut placements: Vec<Placement> = Vec::new();
|
let mut placements: Vec<Placement> = Vec::new();
|
||||||
for (y, row) in grid.iter().enumerate() {
|
for (y, row) in grid.iter().enumerate() {
|
||||||
for (x, &ch) in row.iter().enumerate() {
|
for (x, &ch) in row.iter().enumerate() {
|
||||||
|
// A space is always a transparent empty cell, palette or not.
|
||||||
|
if ch == ' ' {
|
||||||
|
cells.push((Glyph::transparent(), Archetype::Empty));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
match resolved.get(&ch) {
|
match resolved.get(&ch) {
|
||||||
Some(Resolved::Cell(g, a)) => cells.push((*g, *a)),
|
Some(Resolved::Cell(g, a)) => cells.push((*g, *a)),
|
||||||
Some(Resolved::FloorGen(g)) => cells.push((g.generate(rng), Archetype::Empty)),
|
Some(Resolved::FloorGen(g)) => cells.push((g.generate(rng), Archetype::Empty)),
|
||||||
|
|||||||
+9
-64
@@ -190,10 +190,10 @@ gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
|||||||
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
||||||
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
||||||
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
gggggggggggggggggggggggggsgggggggggggggggggggggggggggggggggg
|
||||||
gggggg gggggggggggggsggggdddddddddddddddddddddggggggggg
|
ggggggwwwwwwgggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggg gggggggggggggsggggdddddddddddddddddddddggggggggg
|
ggggggwwwwwwgggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggg gggggggggggggsggggdddddddddddddddddddddggggggggg
|
ggggggwwwwwwgggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggg gggggggggggggsggggdddddddddddddddddddddggggggggg
|
ggggggwwwwwwgggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
gggggggggggggggggggggggggsggggdddddddddddddddddddddggggggggg
|
||||||
@@ -206,10 +206,10 @@ gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
|
|||||||
"g" = { kind = "floor", generator = "grass" }
|
"g" = { kind = "floor", generator = "grass" }
|
||||||
"d" = { kind = "floor", generator = "dirt" }
|
"d" = { kind = "floor", generator = "dirt" }
|
||||||
"s" = { kind = "floor", generator = "stone" }
|
"s" = { kind = "floor", generator = "stone" }
|
||||||
" " = { kind = "floor", tile = "~", fg = "#6666ff", bg = "#000066" }
|
"w" = { kind = "floor", tile = "~", fg = "#6666ff", bg = "#000066" }
|
||||||
|
|
||||||
# Layer 1: terrain, the player, objects and the portal. A space here is
|
# Layer 1: terrain, the player, objects and the portal. A space is always a
|
||||||
# transparent (kind = "empty"), so the floor below shows through.
|
# transparent empty cell, so the floor below shows through.
|
||||||
[[boards.start.layers]]
|
[[boards.start.layers]]
|
||||||
content = """
|
content = """
|
||||||
############################################################
|
############################################################
|
||||||
@@ -239,7 +239,6 @@ content = """
|
|||||||
############################################################
|
############################################################
|
||||||
"""
|
"""
|
||||||
[boards.start.layers.palette]
|
[boards.start.layers.palette]
|
||||||
" " = { kind = "empty" }
|
|
||||||
"#" = { kind = "wall", tile = "#", fg = "#808080", bg = "#606060" }
|
"#" = { kind = "wall", tile = "#", fg = "#808080", bg = "#606060" }
|
||||||
"+" = { kind = "banana", tile = "#", fg = "#808080", bg = "#606060" } # unknown kind -> ErrorBlock demo
|
"+" = { kind = "banana", tile = "#", fg = "#808080", bg = "#606060" } # unknown kind -> ErrorBlock demo
|
||||||
"o" = { kind = "crate", tile = 254, fg = "#aaaaaa", bg = "#000000" }
|
"o" = { kind = "crate", tile = 254, fg = "#aaaaaa", bg = "#000000" }
|
||||||
@@ -257,35 +256,8 @@ content = """
|
|||||||
# Layer 2: a purely decorative, non-solid object drawn *above* the solid crate
|
# Layer 2: a purely decorative, non-solid object drawn *above* the solid crate
|
||||||
# beneath it — only possible because draw order follows layer order.
|
# beneath it — only possible because draw order follows layer order.
|
||||||
[[boards.start.layers]]
|
[[boards.start.layers]]
|
||||||
content = """
|
sparse = [{ x = 30, y = 12, ch = "*" }]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""
|
|
||||||
[boards.start.layers.palette]
|
[boards.start.layers.palette]
|
||||||
" " = { kind = "empty" }
|
|
||||||
"*" = { kind = "object", tile = 15, fg = "#ffff66", bg = "#000000", solid = false }
|
"*" = { kind = "object", tile = 15, fg = "#ffff66", bg = "#000000", solid = false }
|
||||||
|
|
||||||
[boards.house.map]
|
[boards.house.map]
|
||||||
@@ -295,33 +267,7 @@ height = 25
|
|||||||
|
|
||||||
# Layer 0: a single fixed floor glyph across the whole board.
|
# Layer 0: a single fixed floor glyph across the whole board.
|
||||||
[[boards.house.layers]]
|
[[boards.house.layers]]
|
||||||
content = """
|
fill = "f"
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
"""
|
|
||||||
[boards.house.layers.palette]
|
[boards.house.layers.palette]
|
||||||
"f" = { kind = "floor", tile = 176, fg = "#888888", bg = "#444444" }
|
"f" = { kind = "floor", tile = 176, fg = "#888888", bg = "#444444" }
|
||||||
|
|
||||||
@@ -355,7 +301,6 @@ content = """
|
|||||||
############################################################
|
############################################################
|
||||||
"""
|
"""
|
||||||
[boards.house.layers.palette]
|
[boards.house.layers.palette]
|
||||||
" " = { kind = "empty" }
|
|
||||||
"#" = { kind = "wall", tile = 178, fg = "#888888", bg = "#555555" }
|
"#" = { kind = "wall", tile = 178, fg = "#888888", bg = "#555555" }
|
||||||
"@" = { kind = "player" }
|
"@" = { kind = "player" }
|
||||||
"1" = { kind = "portal", name = "from_start", target_map = "start", target_entry = "to_house" }
|
"1" = { kind = "portal", name = "from_start", target_map = "start", target_entry = "to_house" }
|
||||||
|
|||||||
Reference in New Issue
Block a user