Mercurial > touhou
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 794:8c2ef2d503c9 | 795:2d60a14f4816 |
|---|---|
| 597 return filtered | 597 return filtered |
| 598 | 598 |
| 599 | 599 |
| 600 def select_player_key(player): | 600 def select_player_key(player): |
| 601 return (player.score, player.character) | 601 return (player.score, player.character) |
| 602 | |
| 603 | |
| 604 class GameBossRush(Game): | |
| 605 def run_iter(self, keystates): | |
| 606 for i in range(20): | |
| 607 skip = not (self.enemies or self.items or self.lasers | |
| 608 or self.bullets or self.cancelled_bullets) | |
| 609 if skip: | |
| 610 keystates = [k & ~1 for k in keystates] | |
| 611 Game.run_iter(self, [0 if i else k | 256 for k in keystates]) | |
| 612 if not self.enemies and self.frame % 90 == 0: | |
| 613 for player in self.players: | |
| 614 if player.power < 128: | |
| 615 player.power += 1 | |
| 616 if not skip: | |
| 617 break | |
| 618 | |
| 619 def cleanup(self): | |
| 620 boss_wait = any(ecl_runner.boss_wait for ecl_runner in self.ecl_runners) | |
| 621 if not (self.boss or self.msg_wait or boss_wait): | |
| 622 self.enemies = [enemy for enemy in self.enemies | |
| 623 if enemy.boss_callback or enemy.frame > 1] | |
| 624 for laser in self.lasers: | |
| 625 if laser.frame <= 1: | |
| 626 laser.removed = True | |
| 627 self.lasers = [laser for laser in self.lasers if laser.frame > 1] | |
| 628 self.bullets = [bullet for bullet in self.bullets if bullet.frame > 1] | |
| 629 Game.cleanup(self) |
