Mercurial > touhou
diff pytouhou/game/game.pyx @ 795:2d60a14f4816 default tip
python: Rewrite the main entrypoint in Rust
This lets us progressively replace Python modules with Rust ones.
Currently missing features include:
- Saving replays
- Networking code for cooperative mode
- Reading a configuration file for options
- Maybe more.
But the base game is working, so yay!
| author | Link Mauve <linkmauve@linkmauve.fr> |
|---|---|
| date | Tue, 02 Jun 2026 19:06:16 +0200 |
| parents | 1f152ca95658 |
| children |
line wrap: on
line diff
--- a/pytouhou/game/game.pyx Tue Jun 02 16:39:21 2026 +0200 +++ b/pytouhou/game/game.pyx Tue Jun 02 19:06:16 2026 +0200 @@ -599,3 +599,31 @@ def select_player_key(player): return (player.score, player.character) + + +class GameBossRush(Game): + def run_iter(self, keystates): + for i in range(20): + skip = not (self.enemies or self.items or self.lasers + or self.bullets or self.cancelled_bullets) + if skip: + keystates = [k & ~1 for k in keystates] + Game.run_iter(self, [0 if i else k | 256 for k in keystates]) + if not self.enemies and self.frame % 90 == 0: + for player in self.players: + if player.power < 128: + player.power += 1 + if not skip: + break + + def cleanup(self): + boss_wait = any(ecl_runner.boss_wait for ecl_runner in self.ecl_runners) + if not (self.boss or self.msg_wait or boss_wait): + self.enemies = [enemy for enemy in self.enemies + if enemy.boss_callback or enemy.frame > 1] + for laser in self.lasers: + if laser.frame <= 1: + laser.removed = True + self.lasers = [laser for laser in self.lasers if laser.frame > 1] + self.bullets = [bullet for bullet in self.bullets if bullet.frame > 1] + Game.cleanup(self)
