Mercurial > touhou
comparison eosd @ 494:6be9c99a3a24
Merge PlayerState into Player, fix player respawn position.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Mon, 14 Oct 2013 12:11:01 +0200 |
| parents | 887de1309491 |
| children | 5426825c11a6 |
comparison
equal
deleted
inserted
replaced
| 493:26c082870dcf | 494:6be9c99a3a24 |
|---|---|
| 58 | 58 |
| 59 from pytouhou.lib.sdl import SDL | 59 from pytouhou.lib.sdl import SDL |
| 60 from pytouhou.ui.window import Window | 60 from pytouhou.ui.window import Window |
| 61 from pytouhou.resource.loader import Loader | 61 from pytouhou.resource.loader import Loader |
| 62 from pytouhou.ui.gamerunner import GameRunner | 62 from pytouhou.ui.gamerunner import GameRunner |
| 63 from pytouhou.game.player import PlayerState, GameOver | 63 from pytouhou.game.player import GameOver |
| 64 from pytouhou.formats.t6rp import T6RP, Level | 64 from pytouhou.formats.t6rp import T6RP, Level |
| 65 from pytouhou.utils.random import Random | 65 from pytouhou.utils.random import Random |
| 66 from pytouhou.vm.msgrunner import NextStage | 66 from pytouhou.vm.msgrunner import NextStage |
| 67 from pytouhou.formats.hint import Hint | 67 from pytouhou.formats.hint import Hint |
| 68 from pytouhou.network import Network | 68 from pytouhou.network import Network |
| 80 if skip: | 80 if skip: |
| 81 keystate &= ~1 | 81 keystate &= ~1 |
| 82 Game.run_iter(self, keystate | 256 if i == 0 else 0) | 82 Game.run_iter(self, keystate | 256 if i == 0 else 0) |
| 83 if not self.enemies and self.frame % 90 == 0: | 83 if not self.enemies and self.frame % 90 == 0: |
| 84 for player in self.players: | 84 for player in self.players: |
| 85 if player.state.power < 128: | 85 if player.power < 128: |
| 86 player.state.power += 1 | 86 player.power += 1 |
| 87 if not skip: | 87 if not skip: |
| 88 break | 88 break |
| 89 | 89 |
| 90 def cleanup(self): | 90 def cleanup(self): |
| 91 boss_wait = any(ecl_runner.boss_wait for ecl_runner in self.ecl_runners) | 91 boss_wait = any(ecl_runner.boss_wait for ecl_runner in self.ecl_runners) |
| 139 save_replay = T6RP() | 139 save_replay = T6RP() |
| 140 save_replay.rank = rank | 140 save_replay.rank = rank |
| 141 save_replay.character = character | 141 save_replay.character = character |
| 142 | 142 |
| 143 difficulty = 16 | 143 difficulty = 16 |
| 144 default_power = [0, 64, 128, 128, 128, 128, 0][stage_num - 1] | |
| 145 | 144 |
| 146 if port != 0: | 145 if port != 0: |
| 147 if remote: | 146 if remote: |
| 148 remote_addr, remote_port = remote.split(':') | 147 remote_addr, remote_port = remote.split(':') |
| 149 addr = remote_addr, int(remote_port) | 148 addr = remote_addr, int(remote_port) |
| 152 addr = None | 151 addr = None |
| 153 selected_player = 1 | 152 selected_player = 1 |
| 154 | 153 |
| 155 prng = Random(0) | 154 prng = Random(0) |
| 156 con = Network(port, addr, selected_player) | 155 con = Network(port, addr, selected_player) |
| 157 states = [PlayerState(0, character=1, power=default_power, continues=continues), | 156 characters = [1, 3] |
| 158 PlayerState(1, character=3, power=default_power, continues=continues)] | |
| 159 else: | 157 else: |
| 160 con = None | 158 con = None |
| 161 selected_player = 0 | 159 selected_player = 0 |
| 162 states = [PlayerState(0, character=character, power=default_power, continues=continues)] | 160 characters = [character] |
| 163 | 161 |
| 164 if hints: | 162 if hints: |
| 165 with open(hints, 'rb') as file: | 163 with open(hints, 'rb') as file: |
| 166 hints = Hint.read(file) | 164 hints = Hint.read(file) |
| 167 | 165 |
| 168 game_class = GameBossRush if boss_rush else Game | 166 game_class = GameBossRush if boss_rush else Game |
| 169 | 167 |
| 170 common = Common(resource_loader, states[selected_player]) | 168 common = Common(resource_loader, characters, continues, stage_num - 1) |
| 171 runner = GameRunner(window, resource_loader, skip=skip_replay, con=con) | 169 runner = GameRunner(window, resource_loader, skip=skip_replay, con=con) |
| 172 while True: | 170 while True: |
| 171 first_player = common.players[0] | |
| 172 | |
| 173 if replay: | 173 if replay: |
| 174 level = replay.levels[stage_num - 1] | 174 level = replay.levels[stage_num - 1] |
| 175 if not level: | 175 if not level: |
| 176 raise Exception | 176 raise Exception |
| 177 | 177 |
| 179 | 179 |
| 180 #TODO: apply the replay to the other players. | 180 #TODO: apply the replay to the other players. |
| 181 #TODO: see if the stored score is used or if it’s the one from the previous stage. | 181 #TODO: see if the stored score is used or if it’s the one from the previous stage. |
| 182 if stage_num != 1 and stage_num - 2 in replay.levels: | 182 if stage_num != 1 and stage_num - 2 in replay.levels: |
| 183 previous_level = replay.levels[stage_num - 1] | 183 previous_level = replay.levels[stage_num - 1] |
| 184 states[0].score = previous_level.score | 184 first_player.score = previous_level.score |
| 185 states[0].effective_score = previous_level.score | 185 first_player.effective_score = previous_level.score |
| 186 states[0].points = level.point_items | 186 first_player.points = level.point_items |
| 187 states[0].power = level.power | 187 first_player.power = level.power |
| 188 states[0].lives = level.lives | 188 first_player.lives = level.lives |
| 189 states[0].bombs = level.bombs | 189 first_player.bombs = level.bombs |
| 190 difficulty = level.difficulty | 190 difficulty = level.difficulty |
| 191 elif port == 0: | 191 elif port == 0: |
| 192 prng = Random() | 192 prng = Random() |
| 193 | 193 |
| 194 if save_filename: | 194 if save_filename: |
| 195 if not replay: | 195 if not replay: |
| 196 save_replay.levels[stage_num - 1] = level = Level() | 196 save_replay.levels[stage_num - 1] = level = Level() |
| 197 level.score = states[0].score | |
| 198 level.random_seed = prng.seed | 197 level.random_seed = prng.seed |
| 199 level.point_items = states[0].points | 198 level.score = first_player.score |
| 200 level.power = states[0].power | 199 level.point_items = first_player.points |
| 201 level.lives = states[0].lives | 200 level.power = first_player.power |
| 202 level.bombs = states[0].bombs | 201 level.lives = first_player.lives |
| 202 level.bombs = first_player.bombs | |
| 203 level.difficulty = difficulty | 203 level.difficulty = difficulty |
| 204 save_keystates = [] | 204 save_keystates = [] |
| 205 | 205 |
| 206 hints_stage = hints.stages[stage_num - 1] if hints else None | 206 hints_stage = hints.stages[stage_num - 1] if hints else None |
| 207 | 207 |
| 208 game = game_class(resource_loader, states, stage_num, rank, difficulty, | 208 game = game_class(resource_loader, stage_num, rank, difficulty, |
| 209 common, prng=prng, hints=hints_stage, | 209 common, prng=prng, hints=hints_stage, |
| 210 friendly_fire=friendly_fire) | 210 friendly_fire=friendly_fire) |
| 211 | 211 |
| 212 if not enable_particles: | 212 if not enable_particles: |
| 213 def new_particle(pos, anim, amp, number=1, reverse=False, duration=24): | 213 def new_particle(pos, anim, amp, number=1, reverse=False, duration=24): |
| 225 break | 225 break |
| 226 except NextStage: | 226 except NextStage: |
| 227 if not story or stage_num == (7 if boss_rush else 6 if rank > 0 else 5): | 227 if not story or stage_num == (7 if boss_rush else 6 if rank > 0 else 5): |
| 228 break | 228 break |
| 229 stage_num += 1 | 229 stage_num += 1 |
| 230 states = [player.state for player in game.players] | |
| 231 except GameOver: | 230 except GameOver: |
| 232 print('Game over') | 231 print('Game over') |
| 233 break | 232 break |
| 234 finally: | 233 finally: |
| 235 if save_filename: | 234 if save_filename: |
