Mercurial > touhou
comparison eosd @ 454:a502887557ac
Add an option to choose which game to play; currently only EoSD is supported.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 31 Aug 2013 07:39:04 +0200 |
parents | 1f5156093785 |
children | ec327e58b477 |
comparison
equal
deleted
inserted
replaced
453:17a7f3b028f3 | 454:a502887557ac |
---|---|
43 parser.add_argument('--no-background', action='store_false', help='Disable background display (huge performance boost on slow systems).') | 43 parser.add_argument('--no-background', action='store_false', help='Disable background display (huge performance boost on slow systems).') |
44 parser.add_argument('--no-particles', action='store_false', help='Disable particles handling (huge performance boost on slow systems).') | 44 parser.add_argument('--no-particles', action='store_false', help='Disable particles handling (huge performance boost on slow systems).') |
45 parser.add_argument('--no-music', action='store_false', help='Disable background music.') | 45 parser.add_argument('--no-music', action='store_false', help='Disable background music.') |
46 parser.add_argument('--hints', metavar='HINTS', default=None, help='Hints file, to display text while playing.') | 46 parser.add_argument('--hints', metavar='HINTS', default=None, help='Hints file, to display text while playing.') |
47 parser.add_argument('--verbosity', metavar='VERBOSITY', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Select the wanted logging level.') | 47 parser.add_argument('--verbosity', metavar='VERBOSITY', choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], help='Select the wanted logging level.') |
48 parser.add_argument('--game', metavar='GAME', choices=['EoSD'], default='EoSD', help='Select the game engine to use.') | |
48 | 49 |
49 args = parser.parse_args() | 50 args = parser.parse_args() |
50 | 51 |
51 | 52 |
52 import sys | 53 import sys |
53 import logging | 54 import logging |
54 | 55 |
55 from pytouhou.ui.window import Window | 56 from pytouhou.ui.window import Window |
56 from pytouhou.resource.loader import Loader | 57 from pytouhou.resource.loader import Loader |
57 from pytouhou.ui.gamerunner import GameRunner | 58 from pytouhou.ui.gamerunner import GameRunner |
58 from pytouhou.games.eosd import EoSDCommon, EoSDGame | |
59 from pytouhou.game.player import PlayerState, GameOver | 59 from pytouhou.game.player import PlayerState, GameOver |
60 from pytouhou.formats.t6rp import T6RP, Level | 60 from pytouhou.formats.t6rp import T6RP, Level |
61 from pytouhou.utils.random import Random | 61 from pytouhou.utils.random import Random |
62 from pytouhou.vm.msgrunner import NextStage | 62 from pytouhou.vm.msgrunner import NextStage |
63 from pytouhou.formats.hint import Hint | 63 from pytouhou.formats.hint import Hint |
64 | 64 |
65 | 65 |
66 class EoSDGameBossRush(EoSDGame): | 66 if args.game == 'EoSD': |
67 from pytouhou.games.eosd import EoSDCommon as Common, EoSDGame as Game | |
68 | |
69 | |
70 class GameBossRush(Game): | |
67 def run_iter(self, keystate): | 71 def run_iter(self, keystate): |
68 for i in range(20): | 72 for i in range(20): |
69 skip = not (self.enemies or self.items or self.lasers | 73 skip = not (self.enemies or self.items or self.lasers |
70 or self.bullets or self.cancelled_bullets) | 74 or self.bullets or self.cancelled_bullets) |
71 if skip: | 75 if skip: |
72 keystate &= ~1 | 76 keystate &= ~1 |
73 EoSDGame.run_iter(self, keystate | 256 if i == 0 else 0) | 77 Game.run_iter(self, keystate | 256 if i == 0 else 0) |
74 if not self.enemies and self.frame % 90 == 0: | 78 if not self.enemies and self.frame % 90 == 0: |
75 for player in self.players: | 79 for player in self.players: |
76 if player.state.power < 128: | 80 if player.state.power < 128: |
77 player.state.power += 1 | 81 player.state.power += 1 |
78 if not skip: | 82 if not skip: |
86 self.lasers = [laser for laser in self.lasers if laser.frame > 1] | 90 self.lasers = [laser for laser in self.lasers if laser.frame > 1] |
87 self.effects = [effect for effect in self.effects | 91 self.effects = [effect for effect in self.effects |
88 if not hasattr(effect, '_laser') | 92 if not hasattr(effect, '_laser') |
89 or effect._laser in self.lasers] | 93 or effect._laser in self.lasers] |
90 self.bullets = [bullet for bullet in self.bullets if bullet.frame > 1] | 94 self.bullets = [bullet for bullet in self.bullets if bullet.frame > 1] |
91 EoSDGame.cleanup(self) | 95 Game.cleanup(self) |
92 | 96 |
93 | 97 |
94 def main(path, data, stage_num, rank, character, replay, save_filename, | 98 def main(path, data, stage_num, rank, character, replay, save_filename, |
95 skip_replay, boss_rush, fps_limit, single_buffer, debug, | 99 skip_replay, boss_rush, fps_limit, single_buffer, debug, |
96 fixed_pipeline, enable_background, enable_particles, enable_music, | 100 fixed_pipeline, enable_background, enable_particles, enable_music, |
140 | 144 |
141 difficulty = 16 | 145 difficulty = 16 |
142 default_power = [0, 64, 128, 128, 128, 128, 0][stage_num - 1] | 146 default_power = [0, 64, 128, 128, 128, 128, 0][stage_num - 1] |
143 states = [PlayerState(character=character, power=default_power)] | 147 states = [PlayerState(character=character, power=default_power)] |
144 | 148 |
145 game_class = EoSDGameBossRush if boss_rush else EoSDGame | 149 game_class = GameBossRush if boss_rush else Game |
146 | 150 |
147 common = EoSDCommon(resource_loader) | 151 common = Common(resource_loader) |
148 runner = GameRunner(window, resource_loader, skip=skip_replay) | 152 runner = GameRunner(window, resource_loader, skip=skip_replay) |
149 while True: | 153 while True: |
150 if replay: | 154 if replay: |
151 level = replay.levels[stage_num - 1] | 155 level = replay.levels[stage_num - 1] |
152 if not level: | 156 if not level: |