Compare commits
6 commits
1dd15c4c8f
...
2be2b357ad
Author | SHA1 | Date | |
---|---|---|---|
2be2b357ad | |||
1628abea0e | |||
3da6f63b8e | |||
576bd76bd6 | |||
62905dc330 | |||
29a1a2bc7f |
7 changed files with 285 additions and 155 deletions
45
src/difficulty.rs
Normal file
45
src/difficulty.rs
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
|
||||||
|
pub struct Difficulty {
|
||||||
|
pub value: u32,
|
||||||
|
pub starting_gems: u32,
|
||||||
|
pub starting_whips: u32,
|
||||||
|
pub starting_teleports: u32,
|
||||||
|
pub starting_keys: u32,
|
||||||
|
pub starting_whip_power: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const SECRET: Difficulty = Difficulty {
|
||||||
|
value: 9,
|
||||||
|
starting_gems: 250,
|
||||||
|
starting_whips: 100,
|
||||||
|
starting_teleports: 50,
|
||||||
|
starting_keys: 1,
|
||||||
|
starting_whip_power: 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const NOVICE: Difficulty = Difficulty {
|
||||||
|
value: 8,
|
||||||
|
starting_gems: 20,
|
||||||
|
starting_whips: 10,
|
||||||
|
starting_teleports: 0,
|
||||||
|
starting_keys: 0,
|
||||||
|
starting_whip_power: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const EXPERIENCED: Difficulty = Difficulty {
|
||||||
|
value: 5,
|
||||||
|
starting_gems: 15,
|
||||||
|
starting_whips: 0,
|
||||||
|
starting_teleports: 0,
|
||||||
|
starting_keys: 0,
|
||||||
|
starting_whip_power: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub const ADVANCED: Difficulty = Difficulty {
|
||||||
|
value: 2,
|
||||||
|
starting_gems: 10,
|
||||||
|
starting_whips: 0,
|
||||||
|
starting_teleports: 0,
|
||||||
|
starting_keys: 0,
|
||||||
|
starting_whip_power: 0,
|
||||||
|
};
|
56
src/levels.rs
Normal file
56
src/levels.rs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use crate::{constants::*, tile_data::TileType};
|
||||||
|
|
||||||
|
#[allow(clippy::large_enum_variant)]
|
||||||
|
pub enum Level {
|
||||||
|
Normal([&'static str; MAP_HEIGHT]),
|
||||||
|
Randomized(HashMap<TileType, u32>),
|
||||||
|
End,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_level(index: u32) -> Level {
|
||||||
|
match index {
|
||||||
|
0 => Level::Randomized(HashMap::from([
|
||||||
|
(TileType::Slow, 15),
|
||||||
|
(TileType::Whip, 1),
|
||||||
|
(TileType::Stairs, 3),
|
||||||
|
(TileType::Gem, 8),
|
||||||
|
])),
|
||||||
|
1 => Level::Normal([
|
||||||
|
"LXXX2 2 2 2 2 2 2 2 2 2 2 2 2 +",
|
||||||
|
"+XXX 2 2 2 2 2 2 2 2 XXX ",
|
||||||
|
" XXX2 2 2 2 2 2 2 2 2 2 2 XTX ",
|
||||||
|
"+XXX 2 2 2 2 2 2 2 XXX ",
|
||||||
|
" XXX 2 2 2 2 2 2 2 2 2 2 ",
|
||||||
|
"+XXX 2 ",
|
||||||
|
" XXX 2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 2 ",
|
||||||
|
"+XXX2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 ",
|
||||||
|
" XXX 2 XXX2 W 2XXX 2 ",
|
||||||
|
"+XXX 2 XXX 2 FFFFF 2 XXX 2 2 ",
|
||||||
|
" XXX2 2 XXX F111F XXX ",
|
||||||
|
"+XXX2 XXX+ 3 3 W F1P1F W 3 3 +XXX 2 ",
|
||||||
|
"XXXX 2 XXX F111F XXX 2 2",
|
||||||
|
"WXXX 2 XXX 2 FFFFF 2 XXX 2 ",
|
||||||
|
"WXXX2 XXX2 W 2XXX 2 ",
|
||||||
|
"WXXX 2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 ",
|
||||||
|
"WXXX 2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 ",
|
||||||
|
"WXXX2 2 ",
|
||||||
|
"WXXX 2 2 2 2 2 2 2 2 2 2 2 ",
|
||||||
|
"XXXX 2 2 2 2 2 2 2 2 2 2 2 XXX ",
|
||||||
|
"XXXX2 2 2 2 2 2 2 2 2 2 2 2 XTX ",
|
||||||
|
"XXXX 2 2 2 2 2 2 2 2 2 2 2 2 XXX ",
|
||||||
|
"CXXX 2 2 2 2 2 2 2 2 2 2 2 2 2 2 +",
|
||||||
|
]),
|
||||||
|
2 => Level::Randomized(HashMap::from([
|
||||||
|
(TileType::Slow, 60),
|
||||||
|
(TileType::Block, 25),
|
||||||
|
(TileType::Whip, 5),
|
||||||
|
(TileType::Stairs, 2),
|
||||||
|
(TileType::Gem, 10),
|
||||||
|
(TileType::Teleport, 3),
|
||||||
|
])),
|
||||||
|
40 => Level::End,
|
||||||
|
_ => Level::Randomized(HashMap::new()),
|
||||||
|
}
|
||||||
|
}
|
110
src/main.rs
110
src/main.rs
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
pub mod components;
|
pub mod components;
|
||||||
pub mod constants;
|
pub mod constants;
|
||||||
|
pub mod difficulty;
|
||||||
|
pub mod levels;
|
||||||
pub mod resources;
|
pub mod resources;
|
||||||
mod sidebar;
|
mod sidebar;
|
||||||
mod state;
|
mod state;
|
||||||
|
@ -10,33 +12,27 @@ pub mod tile_data;
|
||||||
pub mod vga_color;
|
pub mod vga_color;
|
||||||
|
|
||||||
use bracket_lib::prelude::*;
|
use bracket_lib::prelude::*;
|
||||||
use components::{
|
use components::{Monster, Player, Position, Renderable};
|
||||||
monster::{color_for_kind, glyphs_for_kind, ticks_for_kind, MonsterKind},
|
|
||||||
Monster, Player, Position, Renderable,
|
|
||||||
};
|
|
||||||
use resources::{Clock, LevelNumber, Map, ShowDebugInfo, SoundEffects, SoundOutput, Stats};
|
use resources::{Clock, LevelNumber, Map, ShowDebugInfo, SoundEffects, SoundOutput, Stats};
|
||||||
use specs::prelude::*;
|
use specs::prelude::*;
|
||||||
use state::State;
|
use state::State;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use tile_data::TileType;
|
|
||||||
|
|
||||||
use vga_color as vga;
|
|
||||||
|
|
||||||
fn main() -> BError {
|
fn main() -> BError {
|
||||||
let context = BTermBuilder::simple(80, 25)?
|
let context = BTermBuilder::vga(80, 25)
|
||||||
.with_fps_cap(60.0)
|
.with_fps_cap(60.0)
|
||||||
.with_title("Kroz")
|
.with_title("Kroz")
|
||||||
.with_tile_dimensions(8, 16)
|
|
||||||
.build()?;
|
.build()?;
|
||||||
|
|
||||||
let mut ss = SoundOutput::new();
|
let mut sound_system = SoundOutput::new();
|
||||||
let sound_effects = SoundEffects::new(&ss);
|
let sound_effects = SoundEffects::new(&sound_system);
|
||||||
ss.play_sound(sound_effects.startup.clone());
|
sound_system.play_sound(sound_effects.startup.clone());
|
||||||
|
|
||||||
let mut ecs = World::new();
|
let mut ecs = World::new();
|
||||||
|
|
||||||
ecs.insert(ss);
|
let starting_level = 0;
|
||||||
ecs.insert(LevelNumber(0));
|
ecs.insert(sound_system);
|
||||||
|
ecs.insert(LevelNumber(starting_level));
|
||||||
ecs.insert(ShowDebugInfo(false));
|
ecs.insert(ShowDebugInfo(false));
|
||||||
ecs.insert(Clock {
|
ecs.insert(Clock {
|
||||||
last_ticked: Instant::now(),
|
last_ticked: Instant::now(),
|
||||||
|
@ -44,12 +40,16 @@ fn main() -> BError {
|
||||||
ticks: 0,
|
ticks: 0,
|
||||||
});
|
});
|
||||||
ecs.insert(sound_effects);
|
ecs.insert(sound_effects);
|
||||||
|
|
||||||
|
let selected_difficulty = difficulty::SECRET;
|
||||||
|
ecs.insert(selected_difficulty);
|
||||||
ecs.insert(Stats {
|
ecs.insert(Stats {
|
||||||
score: 1290,
|
score: 0,
|
||||||
gems: 14,
|
gems: selected_difficulty.starting_gems,
|
||||||
whips: 7,
|
whips: selected_difficulty.starting_whips,
|
||||||
teleports: 0,
|
whip_power: selected_difficulty.starting_whip_power,
|
||||||
keys: 0,
|
teleports: selected_difficulty.starting_teleports,
|
||||||
|
keys: selected_difficulty.starting_keys,
|
||||||
});
|
});
|
||||||
|
|
||||||
ecs.register::<Position>();
|
ecs.register::<Position>();
|
||||||
|
@ -57,69 +57,10 @@ fn main() -> BError {
|
||||||
ecs.register::<Monster>();
|
ecs.register::<Monster>();
|
||||||
ecs.register::<Player>();
|
ecs.register::<Player>();
|
||||||
|
|
||||||
let map = Map::new();
|
let map = Map::from_level(levels::get_level(starting_level));
|
||||||
let mut rng = RandomNumberGenerator::new();
|
map.spawn_entities(&mut ecs);
|
||||||
for (i, tile) in &mut map.get_tiles().iter().enumerate() {
|
|
||||||
if rng.roll_dice(1, 16) < 2 && *tile == TileType::Floor {
|
|
||||||
let position = map.index_to_point2d(i);
|
|
||||||
let kind = match rng.range(0, 3) {
|
|
||||||
0 => MonsterKind::Slow,
|
|
||||||
1 => MonsterKind::Medium,
|
|
||||||
2 => MonsterKind::Fast,
|
|
||||||
_ => MonsterKind::Slow,
|
|
||||||
};
|
|
||||||
ecs.create_entity()
|
|
||||||
.with(Position {
|
|
||||||
x: position.x,
|
|
||||||
y: position.y,
|
|
||||||
})
|
|
||||||
.with(Renderable {
|
|
||||||
glyph: *rng.random_slice_entry(&glyphs_for_kind(kind)).unwrap(),
|
|
||||||
fg: color_for_kind(kind),
|
|
||||||
bg: RGB::named(vga::BLACK),
|
|
||||||
})
|
|
||||||
.with(Monster {
|
|
||||||
kind,
|
|
||||||
ticks_until_move: ticks_for_kind(kind),
|
|
||||||
})
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let player_start_pos = Point { x: 40, y: 22 };
|
|
||||||
|
|
||||||
ecs.create_entity()
|
|
||||||
.with(Position {
|
|
||||||
x: player_start_pos.x,
|
|
||||||
y: player_start_pos.y,
|
|
||||||
})
|
|
||||||
.with(Renderable {
|
|
||||||
glyph: to_cp437('☻'),
|
|
||||||
fg: RGB::named(vga::YELLOW_BRIGHT),
|
|
||||||
bg: RGB::named(vga::BLACK),
|
|
||||||
})
|
|
||||||
.with(Player {
|
|
||||||
last_moved: Instant::now(),
|
|
||||||
})
|
|
||||||
.build();
|
|
||||||
|
|
||||||
ecs.insert(map);
|
ecs.insert(map);
|
||||||
|
|
||||||
ecs.insert(Point::new(player_start_pos.x, player_start_pos.y));
|
|
||||||
|
|
||||||
// for i in 0..10 {
|
|
||||||
// gs.ecs
|
|
||||||
// .create_entity()
|
|
||||||
// .with(Position { x: i * 7, y: 20 })
|
|
||||||
// .with(Renderable {
|
|
||||||
// glyph: to_cp437('Ä'),
|
|
||||||
// fg: RGB::named(vga::RED_BRIGHT),
|
|
||||||
// bg: RGB::named(vga::BLACK),
|
|
||||||
// })
|
|
||||||
// .with(LeftMover {})
|
|
||||||
// .build();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let descent_sounds: Vec<Sound> = (20..100)
|
// let descent_sounds: Vec<Sound> = (20..100)
|
||||||
// .rev()
|
// .rev()
|
||||||
// .flat_map(|x| {
|
// .flat_map(|x| {
|
||||||
|
@ -138,14 +79,5 @@ fn main() -> BError {
|
||||||
|
|
||||||
// let _ = gs.sound_system.play_sound(descent_effect);
|
// let _ = gs.sound_system.play_sound(descent_effect);
|
||||||
|
|
||||||
// let effect = gs.sound_system.render_sound_effect(SoundEffect {
|
|
||||||
// sounds: vec![Sound {
|
|
||||||
// sound_type: SoundType::Tone(3500),
|
|
||||||
// duration: Duration::from_millis(4000),
|
|
||||||
// }],
|
|
||||||
// });
|
|
||||||
|
|
||||||
// let _ = gs.sound_system.play_sound(effect);
|
|
||||||
|
|
||||||
main_loop(context, State::new(ecs))
|
main_loop(context, State::new(ecs))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,21 @@
|
||||||
|
use std::time::Instant;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
constants::{MAP_HEIGHT, MAP_SIZE, MAP_WIDTH, MAP_X, MAP_Y},
|
components::{monster::*, Monster, Player, Position, Renderable},
|
||||||
|
constants::*,
|
||||||
|
levels::Level,
|
||||||
tile_data::{self, TileType},
|
tile_data::{self, TileType},
|
||||||
vga_color as vga,
|
vga_color as vga,
|
||||||
};
|
};
|
||||||
use bracket_lib::{prelude::*, random::RandomNumberGenerator};
|
use bracket_lib::{prelude::*, random::RandomNumberGenerator};
|
||||||
use specs::Entity;
|
use specs::{Builder, Entity, World, WorldExt};
|
||||||
|
|
||||||
pub struct Map {
|
pub struct Map {
|
||||||
tiles: Vec<TileType>,
|
tiles: Vec<TileType>,
|
||||||
tile_content: Vec<Option<Entity>>,
|
tile_content: Vec<Option<Entity>>,
|
||||||
border_fg: RGB,
|
border_fg: RGB,
|
||||||
border_bg: RGB,
|
border_bg: RGB,
|
||||||
|
gem_color: RGB,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BaseMap for Map {}
|
impl BaseMap for Map {}
|
||||||
|
@ -29,20 +34,135 @@ impl Default for Map {
|
||||||
|
|
||||||
impl Map {
|
impl Map {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let mut tiles = vec![TileType::Floor; MAP_SIZE];
|
|
||||||
let mut rng = RandomNumberGenerator::new();
|
let mut rng = RandomNumberGenerator::new();
|
||||||
for tile in &mut tiles {
|
|
||||||
if rng.roll_dice(1, 16) < 2 {
|
|
||||||
*tile = TileType::Wall;
|
|
||||||
} else if rng.roll_dice(1, 16) < 2 {
|
|
||||||
*tile = TileType::Block;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Self {
|
Self {
|
||||||
tiles,
|
tiles: vec![TileType::Floor; MAP_SIZE],
|
||||||
tile_content: vec![None; MAP_SIZE],
|
tile_content: vec![None; MAP_SIZE],
|
||||||
border_fg: RGB::named(vga::get_by_index(rng.range(8, 15))),
|
border_fg: RGB::named(vga::get_by_index(rng.range(8, 15))),
|
||||||
border_bg: RGB::named(vga::get_by_index(rng.range(1, 7) as usize)),
|
border_bg: RGB::named(vga::get_by_index(rng.range(1, 7) as usize)),
|
||||||
|
gem_color: RGB::named(vga::get_by_index(rng.range(1, 15))),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn from_level(level: Level) -> Self {
|
||||||
|
match level {
|
||||||
|
Level::Normal(_data) => todo!(),
|
||||||
|
Level::Randomized(data) => {
|
||||||
|
let mut rng = RandomNumberGenerator::new();
|
||||||
|
let mut map = Self::new();
|
||||||
|
for (tile, count) in data {
|
||||||
|
for _ in 0..count {
|
||||||
|
loop {
|
||||||
|
let point = Point {
|
||||||
|
x: rng.range(0, MAP_WIDTH as i32),
|
||||||
|
y: rng.range(0, MAP_HEIGHT as i32),
|
||||||
|
};
|
||||||
|
if map.get_tile_at(point) == TileType::Floor {
|
||||||
|
map.set_tile_at(point, tile);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
loop {
|
||||||
|
let point = Point {
|
||||||
|
x: rng.range(0, MAP_WIDTH as i32),
|
||||||
|
y: rng.range(0, MAP_HEIGHT as i32),
|
||||||
|
};
|
||||||
|
if map.get_tile_at(point) == TileType::Floor {
|
||||||
|
map.set_tile_at(point, TileType::Player);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
map
|
||||||
|
}
|
||||||
|
Level::End => todo!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn spawn_entities(&self, ecs: &mut World) {
|
||||||
|
for (index, tile) in self.tiles.iter().enumerate() {
|
||||||
|
let point = self.index_to_point2d(index);
|
||||||
|
match tile {
|
||||||
|
TileType::Player => {
|
||||||
|
ecs.create_entity()
|
||||||
|
.with(Position {
|
||||||
|
x: point.x,
|
||||||
|
y: point.y,
|
||||||
|
})
|
||||||
|
.with(Renderable {
|
||||||
|
glyph: to_cp437('☻'),
|
||||||
|
fg: RGB::named(vga::YELLOW_BRIGHT),
|
||||||
|
bg: RGB::named(vga::BLACK),
|
||||||
|
})
|
||||||
|
.with(Player {
|
||||||
|
last_moved: Instant::now(),
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
ecs.insert(point);
|
||||||
|
}
|
||||||
|
TileType::Slow => {
|
||||||
|
let mut rng = RandomNumberGenerator::new();
|
||||||
|
ecs.create_entity()
|
||||||
|
.with(Position {
|
||||||
|
x: point.x,
|
||||||
|
y: point.y,
|
||||||
|
})
|
||||||
|
.with(Renderable {
|
||||||
|
glyph: *rng
|
||||||
|
.random_slice_entry(&glyphs_for_kind(MonsterKind::Slow))
|
||||||
|
.unwrap(),
|
||||||
|
fg: color_for_kind(MonsterKind::Slow),
|
||||||
|
bg: RGB::named(vga::BLACK),
|
||||||
|
})
|
||||||
|
.with(Monster {
|
||||||
|
kind: MonsterKind::Slow,
|
||||||
|
ticks_until_move: ticks_for_kind(MonsterKind::Slow),
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
TileType::Medium => {
|
||||||
|
let mut rng = RandomNumberGenerator::new();
|
||||||
|
ecs.create_entity()
|
||||||
|
.with(Position {
|
||||||
|
x: point.x,
|
||||||
|
y: point.y,
|
||||||
|
})
|
||||||
|
.with(Renderable {
|
||||||
|
glyph: *rng
|
||||||
|
.random_slice_entry(&glyphs_for_kind(MonsterKind::Medium))
|
||||||
|
.unwrap(),
|
||||||
|
fg: color_for_kind(MonsterKind::Medium),
|
||||||
|
bg: RGB::named(vga::BLACK),
|
||||||
|
})
|
||||||
|
.with(Monster {
|
||||||
|
kind: MonsterKind::Medium,
|
||||||
|
ticks_until_move: ticks_for_kind(MonsterKind::Medium),
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
TileType::Fast => {
|
||||||
|
let mut rng = RandomNumberGenerator::new();
|
||||||
|
ecs.create_entity()
|
||||||
|
.with(Position {
|
||||||
|
x: point.x,
|
||||||
|
y: point.y,
|
||||||
|
})
|
||||||
|
.with(Renderable {
|
||||||
|
glyph: *rng
|
||||||
|
.random_slice_entry(&glyphs_for_kind(MonsterKind::Fast))
|
||||||
|
.unwrap(),
|
||||||
|
fg: color_for_kind(MonsterKind::Fast),
|
||||||
|
bg: RGB::named(vga::BLACK),
|
||||||
|
})
|
||||||
|
.with(Monster {
|
||||||
|
kind: MonsterKind::Fast,
|
||||||
|
ticks_until_move: ticks_for_kind(MonsterKind::Fast),
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +206,11 @@ impl Map {
|
||||||
ctx.set(
|
ctx.set(
|
||||||
x + MAP_X,
|
x + MAP_X,
|
||||||
y + MAP_Y,
|
y + MAP_Y,
|
||||||
data.color_fg,
|
if *tile == TileType::Gem {
|
||||||
|
self.gem_color
|
||||||
|
} else {
|
||||||
|
RGB::named(data.color_fg)
|
||||||
|
},
|
||||||
data.color_bg,
|
data.color_bg,
|
||||||
data.glyph,
|
data.glyph,
|
||||||
);
|
);
|
||||||
|
|
|
@ -45,6 +45,7 @@ pub struct Stats {
|
||||||
pub score: u32,
|
pub score: u32,
|
||||||
pub gems: u32,
|
pub gems: u32,
|
||||||
pub whips: u32,
|
pub whips: u32,
|
||||||
|
pub whip_power: u32,
|
||||||
pub teleports: u32,
|
pub teleports: u32,
|
||||||
pub keys: u32,
|
pub keys: u32,
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ pub fn draw(ecs: &World, ctx: &mut BTerm) {
|
||||||
ctx.print_centered_at(
|
ctx.print_centered_at(
|
||||||
SIDEBAR_POS_X + 6,
|
SIDEBAR_POS_X + 6,
|
||||||
SIDEBAR_POS_Y + 4,
|
SIDEBAR_POS_Y + 4,
|
||||||
ecs.read_resource::<LevelNumber>().0,
|
ecs.read_resource::<LevelNumber>().0 + 1,
|
||||||
);
|
);
|
||||||
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 6, "Gems");
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 6, "Gems");
|
||||||
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 9, "Whips");
|
ctx.print(SIDEBAR_POS_X + 4, SIDEBAR_POS_Y + 9, "Whips");
|
||||||
|
|
|
@ -8,12 +8,14 @@ pub struct TileData {
|
||||||
pub color_fg: (u8, u8, u8),
|
pub color_fg: (u8, u8, u8),
|
||||||
pub color_bg: (u8, u8, u8),
|
pub color_bg: (u8, u8, u8),
|
||||||
pub serialized_char: char,
|
pub serialized_char: char,
|
||||||
pub blink: bool,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Copy, Clone)]
|
#[derive(Eq, PartialEq, Copy, Clone, Hash)]
|
||||||
pub enum TileType {
|
pub enum TileType {
|
||||||
Floor, // 0
|
Floor, // 0
|
||||||
|
Slow, // 1
|
||||||
|
Medium, // 2
|
||||||
|
Fast, // 3
|
||||||
Block, // 4
|
Block, // 4
|
||||||
Whip, // 5
|
Whip, // 5
|
||||||
Stairs, // 6
|
Stairs, // 6
|
||||||
|
@ -70,336 +72,306 @@ pub fn tile_data(tile: TileType) -> TileData {
|
||||||
serialized_char: ' ',
|
serialized_char: ' ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
},
|
||||||
|
TileType::Slow => TileData {
|
||||||
|
glyph: 0,
|
||||||
|
serialized_char: '1',
|
||||||
|
color_fg: vga::BLACK,
|
||||||
|
color_bg: vga::BLACK,
|
||||||
|
},
|
||||||
|
TileType::Medium => TileData {
|
||||||
|
glyph: 0,
|
||||||
|
serialized_char: '2',
|
||||||
|
color_fg: vga::BLACK,
|
||||||
|
color_bg: vga::BLACK,
|
||||||
|
},
|
||||||
|
TileType::Fast => TileData {
|
||||||
|
glyph: 0,
|
||||||
|
serialized_char: '3',
|
||||||
|
color_fg: vga::BLACK,
|
||||||
|
color_bg: vga::BLACK,
|
||||||
},
|
},
|
||||||
TileType::Block => TileData {
|
TileType::Block => TileData {
|
||||||
glyph: to_cp437('▓'),
|
glyph: to_cp437('▓'),
|
||||||
serialized_char: 'X',
|
serialized_char: 'X',
|
||||||
color_fg: vga::YELLOW,
|
color_fg: vga::YELLOW,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Whip => TileData {
|
TileType::Whip => TileData {
|
||||||
glyph: to_cp437('⌠'),
|
glyph: to_cp437('⌠'),
|
||||||
serialized_char: 'W',
|
serialized_char: 'W',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Stairs => TileData {
|
TileType::Stairs => TileData {
|
||||||
glyph: to_cp437('≡'),
|
glyph: to_cp437('≡'),
|
||||||
serialized_char: 'L',
|
serialized_char: 'L',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::WHITE,
|
color_bg: vga::WHITE,
|
||||||
blink: true,
|
|
||||||
},
|
},
|
||||||
TileType::Chest => TileData {
|
TileType::Chest => TileData {
|
||||||
glyph: to_cp437('C'),
|
glyph: to_cp437('C'),
|
||||||
serialized_char: 'C',
|
serialized_char: 'C',
|
||||||
color_fg: vga::YELLOW_BRIGHT,
|
color_fg: vga::YELLOW_BRIGHT,
|
||||||
color_bg: vga::RED,
|
color_bg: vga::RED,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::SlowTime => TileData {
|
TileType::SlowTime => TileData {
|
||||||
glyph: to_cp437('Φ'),
|
glyph: to_cp437('Φ'),
|
||||||
serialized_char: 'S',
|
serialized_char: 'S',
|
||||||
color_fg: vga::CYAN_BRIGHT,
|
color_fg: vga::CYAN_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Gem => TileData {
|
TileType::Gem => TileData {
|
||||||
glyph: to_cp437('♦'),
|
glyph: to_cp437('♦'),
|
||||||
serialized_char: '+',
|
serialized_char: '+',
|
||||||
color_fg: vga::WHITE,
|
color_fg: vga::WHITE,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Invisible => TileData {
|
TileType::Invisible => TileData {
|
||||||
glyph: to_cp437('¡'),
|
glyph: to_cp437('¡'),
|
||||||
serialized_char: 'I',
|
serialized_char: 'I',
|
||||||
color_fg: vga::GREEN,
|
color_fg: vga::GREEN,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Teleport => TileData {
|
TileType::Teleport => TileData {
|
||||||
glyph: to_cp437('↑'),
|
glyph: to_cp437('↑'),
|
||||||
serialized_char: 'T',
|
serialized_char: 'T',
|
||||||
color_fg: vga::MAGENTA_BRIGHT,
|
color_fg: vga::MAGENTA_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Key => TileData {
|
TileType::Key => TileData {
|
||||||
glyph: to_cp437('î'),
|
glyph: to_cp437('î'),
|
||||||
serialized_char: 'K',
|
serialized_char: 'K',
|
||||||
color_fg: vga::RED_BRIGHT,
|
color_fg: vga::RED_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Door => TileData {
|
TileType::Door => TileData {
|
||||||
glyph: to_cp437('∞'),
|
glyph: to_cp437('∞'),
|
||||||
serialized_char: 'D',
|
serialized_char: 'D',
|
||||||
color_fg: vga::CYAN,
|
color_fg: vga::CYAN,
|
||||||
color_bg: vga::MAGENTA,
|
color_bg: vga::MAGENTA,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Wall => TileData {
|
TileType::Wall => TileData {
|
||||||
glyph: to_cp437('█'),
|
glyph: to_cp437('█'),
|
||||||
serialized_char: '#',
|
serialized_char: '#',
|
||||||
color_fg: vga::YELLOW,
|
color_fg: vga::YELLOW,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::SpeedTime => TileData {
|
TileType::SpeedTime => TileData {
|
||||||
glyph: to_cp437('Θ'),
|
glyph: to_cp437('Θ'),
|
||||||
serialized_char: 'F',
|
serialized_char: 'F',
|
||||||
color_fg: vga::CYAN_BRIGHT,
|
color_fg: vga::CYAN_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap => TileData {
|
TileType::Trap => TileData {
|
||||||
glyph: to_cp437('∙'),
|
glyph: to_cp437('∙'),
|
||||||
serialized_char: '.',
|
serialized_char: '.',
|
||||||
color_fg: vga::WHITE,
|
color_fg: vga::WHITE,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::River => TileData {
|
TileType::River => TileData {
|
||||||
glyph: to_cp437('≈'),
|
glyph: to_cp437('≈'),
|
||||||
serialized_char: 'R',
|
serialized_char: 'R',
|
||||||
color_fg: vga::BLUE_BRIGHT,
|
color_fg: vga::BLUE_BRIGHT,
|
||||||
color_bg: vga::BLUE,
|
color_bg: vga::BLUE,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Power => TileData {
|
TileType::Power => TileData {
|
||||||
glyph: to_cp437('○'),
|
glyph: to_cp437('○'),
|
||||||
serialized_char: 'Q',
|
serialized_char: 'Q',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Forest => TileData {
|
TileType::Forest => TileData {
|
||||||
glyph: to_cp437('█'),
|
glyph: to_cp437('█'),
|
||||||
serialized_char: '/',
|
serialized_char: '/',
|
||||||
color_fg: vga::GREEN,
|
color_fg: vga::GREEN,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Tree => TileData {
|
TileType::Tree => TileData {
|
||||||
glyph: to_cp437('♣'),
|
glyph: to_cp437('♣'),
|
||||||
serialized_char: '\\',
|
serialized_char: '\\',
|
||||||
color_fg: vga::YELLOW,
|
color_fg: vga::YELLOW,
|
||||||
color_bg: vga::GREEN,
|
color_bg: vga::GREEN,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Bomb => TileData {
|
TileType::Bomb => TileData {
|
||||||
glyph: to_cp437('¥'),
|
glyph: to_cp437('¥'),
|
||||||
serialized_char: 'B',
|
serialized_char: 'B',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Lava => TileData {
|
TileType::Lava => TileData {
|
||||||
glyph: to_cp437('▓'),
|
glyph: to_cp437('▓'),
|
||||||
serialized_char: 'V',
|
serialized_char: 'V',
|
||||||
color_fg: vga::RED_BRIGHT,
|
color_fg: vga::RED_BRIGHT,
|
||||||
color_bg: vga::RED,
|
color_bg: vga::RED,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Pit => TileData {
|
TileType::Pit => TileData {
|
||||||
glyph: to_cp437('░'),
|
glyph: to_cp437('░'),
|
||||||
serialized_char: '=',
|
serialized_char: '=',
|
||||||
color_fg: vga::WHITE,
|
color_fg: vga::WHITE,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Tome => TileData {
|
TileType::Tome => TileData {
|
||||||
glyph: to_cp437('♀'),
|
glyph: to_cp437('♀'),
|
||||||
serialized_char: 'A',
|
serialized_char: 'A',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: true,
|
|
||||||
},
|
},
|
||||||
TileType::Tunnel => TileData {
|
TileType::Tunnel => TileData {
|
||||||
glyph: to_cp437('∩'),
|
glyph: to_cp437('∩'),
|
||||||
serialized_char: 'U',
|
serialized_char: 'U',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Freeze => TileData {
|
TileType::Freeze => TileData {
|
||||||
glyph: to_cp437('ƒ'),
|
glyph: to_cp437('ƒ'),
|
||||||
serialized_char: 'Z',
|
serialized_char: 'Z',
|
||||||
color_fg: vga::CYAN_BRIGHT,
|
color_fg: vga::CYAN_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Nugget => TileData {
|
TileType::Nugget => TileData {
|
||||||
glyph: to_cp437('☼'),
|
glyph: to_cp437('☼'),
|
||||||
serialized_char: '*',
|
serialized_char: '*',
|
||||||
color_fg: vga::YELLOW_BRIGHT,
|
color_fg: vga::YELLOW_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Quake => TileData {
|
TileType::Quake => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'E',
|
serialized_char: 'E',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::InvisibleBlock => TileData {
|
TileType::InvisibleBlock => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: ';',
|
serialized_char: ';',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::InvisibleWall => TileData {
|
TileType::InvisibleWall => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: ':',
|
serialized_char: ':',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::InvisibleDoor => TileData {
|
TileType::InvisibleDoor => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: '`',
|
serialized_char: '`',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Stop => TileData {
|
TileType::Stop => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: '-',
|
serialized_char: '-',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Zap => TileData {
|
TileType::Zap => TileData {
|
||||||
glyph: to_cp437('▲'),
|
glyph: to_cp437('▲'),
|
||||||
serialized_char: '%',
|
serialized_char: '%',
|
||||||
color_fg: vga::RED_BRIGHT,
|
color_fg: vga::RED_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Create => TileData {
|
TileType::Create => TileData {
|
||||||
glyph: to_cp437('▼'),
|
glyph: to_cp437('▼'),
|
||||||
serialized_char: ']',
|
serialized_char: ']',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Generator => TileData {
|
TileType::Generator => TileData {
|
||||||
glyph: to_cp437('♠'),
|
glyph: to_cp437('♠'),
|
||||||
serialized_char: 'G',
|
serialized_char: 'G',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap2 => TileData {
|
TileType::Trap2 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: '@',
|
serialized_char: '@',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap3 => TileData {
|
TileType::Trap3 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: ')',
|
serialized_char: ')',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap4 => TileData {
|
TileType::Trap4 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: '(',
|
serialized_char: '(',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap5 => TileData {
|
TileType::Trap5 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: '$', // Unsure about this
|
serialized_char: '$', // Unsure about this
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap6 => TileData {
|
TileType::Trap6 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'α',
|
serialized_char: 'α',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap7 => TileData {
|
TileType::Trap7 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'ß',
|
serialized_char: 'ß',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap8 => TileData {
|
TileType::Trap8 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'Γ',
|
serialized_char: 'Γ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap9 => TileData {
|
TileType::Trap9 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'π',
|
serialized_char: 'π',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap10 => TileData {
|
TileType::Trap10 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'Σ',
|
serialized_char: 'Σ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap11 => TileData {
|
TileType::Trap11 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'σ',
|
serialized_char: 'σ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap12 => TileData {
|
TileType::Trap12 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'µ',
|
serialized_char: 'µ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Trap13 => TileData {
|
TileType::Trap13 => TileData {
|
||||||
glyph: 0,
|
glyph: 0,
|
||||||
serialized_char: 'τ',
|
serialized_char: 'τ',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::BLACK,
|
color_bg: vga::BLACK,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Player => TileData {
|
TileType::Player => TileData {
|
||||||
glyph: to_cp437('≡'),
|
glyph: 0,
|
||||||
serialized_char: 'P',
|
serialized_char: 'P',
|
||||||
color_fg: vga::BLACK,
|
color_fg: vga::BLACK,
|
||||||
color_bg: vga::WHITE,
|
color_bg: vga::BLACK,
|
||||||
blink: true,
|
|
||||||
},
|
},
|
||||||
TileType::Punctuation => TileData {
|
TileType::Punctuation => TileData {
|
||||||
glyph: to_cp437('!'),
|
glyph: to_cp437('!'),
|
||||||
serialized_char: '!',
|
serialized_char: '!',
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::YELLOW,
|
color_bg: vga::YELLOW,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
TileType::Letter(c) => TileData {
|
TileType::Letter(c) => TileData {
|
||||||
glyph: to_cp437(c),
|
glyph: to_cp437(c.to_ascii_uppercase()),
|
||||||
serialized_char: c,
|
serialized_char: c,
|
||||||
color_fg: vga::WHITE_BRIGHT,
|
color_fg: vga::WHITE_BRIGHT,
|
||||||
color_bg: vga::YELLOW,
|
color_bg: vga::YELLOW,
|
||||||
blink: false,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue