diff options
Diffstat (limited to '')
| -rw-r--r-- | src/game.rs | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/src/game.rs b/src/game.rs index a17526b..f66ca40 100644 --- a/src/game.rs +++ b/src/game.rs | |||
| @@ -544,7 +544,11 @@ fn place_entities( | |||
| 544 | } | 544 | } |
| 545 | 545 | ||
| 546 | // --- hallucinated pickups --- | 546 | // --- hallucinated pickups --- |
| 547 | let fake_count = if depth >= 3 { rng.random_range(1..=2) } else { 0 }; | 547 | let fake_count = if depth >= 3 { |
| 548 | rng.random_range(1..=2) | ||
| 549 | } else { | ||
| 550 | 0 | ||
| 551 | }; | ||
| 548 | for _ in 0..fake_count { | 552 | for _ in 0..fake_count { |
| 549 | if next >= candidates.len() { | 553 | if next >= candidates.len() { |
| 550 | break; | 554 | break; |
| @@ -673,6 +677,9 @@ pub struct Game { | |||
| 673 | 677 | ||
| 674 | // ---- controls overlay ---- | 678 | // ---- controls overlay ---- |
| 675 | pub show_controls: bool, | 679 | pub show_controls: bool, |
| 680 | |||
| 681 | // ---- death screen ---- | ||
| 682 | pub death_frames: u32, | ||
| 676 | } | 683 | } |
| 677 | 684 | ||
| 678 | fn smoothstep(t: f64) -> f64 { | 685 | fn smoothstep(t: f64) -> f64 { |
| @@ -724,6 +731,7 @@ impl Game { | |||
| 724 | flash_color: 0, | 731 | flash_color: 0, |
| 725 | flash_alpha: 0.0, | 732 | flash_alpha: 0.0, |
| 726 | show_controls: true, | 733 | show_controls: true, |
| 734 | death_frames: 0, | ||
| 727 | } | 735 | } |
| 728 | } | 736 | } |
| 729 | 737 | ||
| @@ -802,10 +810,11 @@ impl Game { | |||
| 802 | if done { | 810 | if done { |
| 803 | self.state = GameState::ResolvingTurn; | 811 | self.state = GameState::ResolvingTurn; |
| 804 | self.resolve_turn(); | 812 | self.resolve_turn(); |
| 805 | self.state = GameState::WaitingForInput; | 813 | if self.state != GameState::GameOver { |
| 814 | self.state = GameState::WaitingForInput; | ||
| 815 | } | ||
| 806 | return true; | 816 | return true; |
| 807 | } | 817 | } |
| 808 | false | ||
| 809 | } | 818 | } |
| 810 | 819 | ||
| 811 | GameState::AnimatingEnemies => { | 820 | GameState::AnimatingEnemies => { |
| @@ -814,14 +823,22 @@ impl Game { | |||
| 814 | self.enemy_anim_t = 0.0; | 823 | self.enemy_anim_t = 0.0; |
| 815 | self.state = GameState::ResolvingTurn; | 824 | self.state = GameState::ResolvingTurn; |
| 816 | self.resolve_turn(); | 825 | self.resolve_turn(); |
| 817 | self.state = GameState::WaitingForInput; | 826 | if self.state != GameState::GameOver { |
| 827 | self.state = GameState::WaitingForInput; | ||
| 828 | } | ||
| 818 | return true; | 829 | return true; |
| 819 | } | 830 | } |
| 820 | false | ||
| 821 | } | 831 | } |
| 822 | 832 | ||
| 823 | _ => false, | 833 | _ => {} |
| 834 | } | ||
| 835 | |||
| 836 | // Count frames since death so the death screen has a minimum display time. | ||
| 837 | if self.state == GameState::GameOver { | ||
| 838 | self.death_frames += 1; | ||
| 824 | } | 839 | } |
| 840 | |||
| 841 | false | ||
| 825 | } | 842 | } |
| 826 | 843 | ||
| 827 | /// Attempt to walk one tile in grid direction (dx, dy). | 844 | /// Attempt to walk one tile in grid direction (dx, dy). |
| @@ -1160,7 +1177,9 @@ impl Game { | |||
| 1160 | fn advance_turn(&mut self) { | 1177 | fn advance_turn(&mut self) { |
| 1161 | self.state = GameState::ResolvingTurn; | 1178 | self.state = GameState::ResolvingTurn; |
| 1162 | self.resolve_turn(); | 1179 | self.resolve_turn(); |
| 1163 | self.state = GameState::WaitingForInput; | 1180 | if self.state != GameState::GameOver { |
| 1181 | self.state = GameState::WaitingForInput; | ||
| 1182 | } | ||
| 1164 | } | 1183 | } |
| 1165 | 1184 | ||
| 1166 | /// Apply all per-turn effects (weakness, heartbeat, HP drain, message decay). | 1185 | /// Apply all per-turn effects (weakness, heartbeat, HP drain, message decay). |
| @@ -1248,4 +1267,9 @@ impl Game { | |||
| 1248 | pub fn weakness_factor(&self) -> f64 { | 1267 | pub fn weakness_factor(&self) -> f64 { |
| 1249 | (self.weakness as f64 / MAX_WEAKNESS as f64) * 2.0 | 1268 | (self.weakness as f64 / MAX_WEAKNESS as f64) * 2.0 |
| 1250 | } | 1269 | } |
| 1270 | |||
| 1271 | /// Compute the final score. | ||
| 1272 | pub fn score(&self) -> u64 { | ||
| 1273 | (self.kills * 100) + (self.depth.pow(2) * 50) + (self.weapon_base_damage as u64 * 500) | ||
| 1274 | } | ||
| 1251 | } | 1275 | } |
