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)