diff --git a/image.png b/image.png deleted file mode 100644 index 8a34c25..0000000 Binary files a/image.png and /dev/null differ diff --git a/src/damage_system.rs b/src/damage_system.rs index 2bf4a8e..acb5313 100644 --- a/src/damage_system.rs +++ b/src/damage_system.rs @@ -73,6 +73,7 @@ pub fn delete_the_dead(ecs: &mut World) { } for victim in dead { + gamelog::record_event("death_count", 1); ecs.delete_entity(victim).expect("Unable to delete."); } } diff --git a/src/gui.rs b/src/gui.rs index 5356f7f..388ebe5 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -48,7 +48,7 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { 50, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), - &format!(" T{} ", crate::gamelog::get_event_count("Turn")), + &format!(" T{} ", crate::gamelog::get_event_count("turns")), ); // Render mouse cursor @@ -519,20 +519,69 @@ pub enum YesNoResult { } pub fn game_over(ctx: &mut Rltk) -> YesNoResult { - ctx.print_color_centered(15, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "Your journey has ended!"); - ctx.print_color_centered( - 17, - RGB::named(rltk::WHITE), + let mut x = 3; + let mut y = 3; + let width = 45; + let height = 20; + ctx.draw_box(x, y, width, height, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); + ctx.print_color(x + 3, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "You died!"); + ctx.print_color(x + 3, y + height, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "ESC to close"); + x += 2; + y += 2; + ctx.print_color( + x, + y, + RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), - format!("You died after {} turns.", crate::gamelog::get_event_count("Turn")), - ); - - ctx.print_color_centered( - 19, - RGB::named(rltk::MAGENTA), - RGB::named(rltk::BLACK), - "Press Escape to return to the menu.", + format!("You survived for {} turns.", crate::gamelog::get_event_count("turns")), ); + y += 2; + ctx.print_color(x, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), format!("And in the process, you")); + y += 1; + if crate::gamelog::get_event_count("descended") > 0 { + ctx.print_color( + x + 1, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + format!("- descended {} floor(s)", crate::gamelog::get_event_count("descended")), + ); + y += 1; + } + if crate::gamelog::get_event_count("kick_count") > 0 { + ctx.print_color( + x + 1, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + format!( + "- kicked {} time(s), breaking {} object(s)", + crate::gamelog::get_event_count("kick_count"), + crate::gamelog::get_event_count("broken_doors") + ), + ); + y += 1; + } + if crate::gamelog::get_event_count("death_count") > 0 { + ctx.print_color( + x + 1, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + format!("- slew {} other creature(s)", crate::gamelog::get_event_count("death_count")), + ); + y += 1; + } + if crate::gamelog::get_event_count("looked_for_help") > 0 { + ctx.print_color( + x + 1, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + format!("- forgot the controls {} time(s)", crate::gamelog::get_event_count("looked_for_help")), + ); + y += 1; + } match ctx.key { None => YesNoResult::NoSelection, diff --git a/src/main.rs b/src/main.rs index c0dea07..a856c5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -134,8 +134,8 @@ impl State { let mut particle_system = particle_system::ParticleSpawnSystem {}; vis.run_now(&self.ecs); - mapindex.run_now(&self.ecs); mob.run_now(&self.ecs); + mapindex.run_now(&self.ecs); trigger_system.run_now(&self.ecs); inventory_system.run_now(&self.ecs); item_use_system.run_now(&self.ecs); @@ -201,6 +201,7 @@ impl State { let worldmap_resource = self.ecs.fetch::(); current_depth = worldmap_resource.depth; } + gamelog::record_event("descended", 1); self.generate_world_map(current_depth + 1); // Notify player, restore health up to a point. @@ -311,7 +312,7 @@ impl GameState for State { RunState::PlayerTurn => { self.run_systems(); self.ecs.maintain(); - gamelog::record_event("Turn", 1); + gamelog::record_event("turns", 1); match *self.ecs.fetch::() { RunState::MagicMapReveal { row, cursed } => { new_runstate = RunState::MagicMapReveal { row: row, cursed: cursed } @@ -448,6 +449,7 @@ impl GameState for State { match result { gui::YesNoResult::NoSelection => {} gui::YesNoResult::Yes => { + gamelog::record_event("looked_for_help", 1); new_runstate = RunState::AwaitingInput; } } diff --git a/src/map_builders/prefab_builder/mod.rs b/src/map_builders/prefab_builder/mod.rs index e8ab04d..f0735ab 100644 --- a/src/map_builders/prefab_builder/mod.rs +++ b/src/map_builders/prefab_builder/mod.rs @@ -386,10 +386,18 @@ impl PrefabBuilder { let mut y_: i32 = tile_y as i32; // Handle flipping if flip_x { - x_ = vault.height as i32 - 1 - x_; + x_ = vault.width as i32 - 1 - x_; } if flip_y { - y_ = vault.width as i32 - 1 - y_; + y_ = vault.height as i32 - 1 - y_; + } + if x_ < 0 || y_ < 0 { + // If either of these go below 0, we run the risk of CTD, so just panic. + // Something went wrong with flipping/rotating/defining a vault. + panic!( + "X or Y went below 0 when trying to place a vault! DEBUGINFO == [H: {}, W: {}; FLIPPED X: {}, FLIPPED Y: {}; X_: {}, Y_: {}]", + vault.width, vault.height, flip_x, flip_y, x_, y_ + ); } let idx = build_data.map.xy_idx(x_ + chunk_x, y_ + chunk_y); if i < string_vec.len() { diff --git a/src/player.rs b/src/player.rs index dadd676..4888a7d 100644 --- a/src/player.rs +++ b/src/player.rs @@ -176,6 +176,7 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState { .log(); something_was_destroyed = Some(*potential_target); viewshed.dirty = true; + gamelog::record_event("broken_doors", 1); break; // 66% chance of just kicking it. } else { @@ -211,6 +212,7 @@ pub fn kick(i: i32, j: i32, ecs: &mut World) -> RunState { } _ => {} }; + gamelog::record_event("kick_count", 1); return RunState::PlayerTurn; }