# HG changeset patch # User Emmanuel Gil Peyrot # Date 1319999479 25200 # Node ID 13918723d1bcc2768b1371dad8a279a9d445c082 # Parent e1bc8c4cbb1a1ebadf0dd5961623be3929ef8c59 Modify difficulty when it has to. diff --git a/pytouhou/game/game.py b/pytouhou/game/game.py --- a/pytouhou/game/game.py +++ b/pytouhou/game/game.py @@ -45,6 +45,9 @@ class Game(object): self.stage = stage self.rank = rank self.difficulty = difficulty + self.difficulty_counter = 0 + self.difficulty_min = 12 if rank == 0 else 10 + self.difficulty_max = 20 if rank == 0 else 32 self.boss = None self.spellcard = None self.bonus_list = [0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,2] @@ -62,6 +65,20 @@ class Game(object): self.next_bonus = self.prng.rand_uint16() % 8 + def modify_difficulty(self, diff): + self.difficulty_counter += diff + while self.difficulty_counter < 0: + self.difficulty -= 1 + self.difficulty_counter += 100 + while self.difficulty_counter >= 100: + self.difficulty += 1 + self.difficulty_counter -= 100 + if self.difficulty < self.difficulty_min: + self.difficulty = self.difficulty_min + elif self.difficulty > self.difficulty_max: + self.difficulty = self.difficulty_max + + def drop_bonus(self, x, y, _type, end_pos=None): player = self.players[0] #TODO if _type > 6: @@ -96,6 +113,8 @@ class Game(object): def run_iter(self, keystate): # 1. VMs. self.ecl_runner.run_iter() + if self.frame % (32*60) == (32*60): #TODO: check if that is really that frame. + self.modify_difficulty(+100) # 2. Filter out destroyed enemies self.enemies = [enemy for enemy in self.enemies if not enemy._removed] @@ -236,6 +255,7 @@ class Game(object): bullet.grazed = True player.state.graze += 1 player.state.score += 500 # found experimentally + self.modify_difficulty(+6) self.new_particle((px, py), 0, .8, 192) #TODO: find the real size and range. #TODO: display a static particle during one frame at # 12 pixels of the player, in the axis of the “collision”. @@ -268,7 +288,13 @@ class Game(object): self.players_bullets = [bullet for bullet in self.players_bullets if bullet.is_visible(384, 448)] # Filter out-of-scren items - self.items = [item for item in self.items if item.y < 448] + items = [] + for item in self.items: + if item.y < 448: + items.append(item) + else: + self.modify_difficulty(-3) + self.items = items # Disable boss mode if it is dead/it has timeout if self.boss and self.boss._removed: diff --git a/pytouhou/game/item.py b/pytouhou/game/item.py --- a/pytouhou/game/item.py +++ b/pytouhou/game/item.py @@ -75,18 +75,22 @@ class Item(object): score = 51200 player_state.power_bonus = bonus player_state.score += score + self._game.modify_difficulty(+1) elif self._type == 1: # point player_state.points += 1 if player_state.y < 128: #TODO: find the exact poc. score = 100000 + self._game.modify_difficulty(+30) else: score = 0 #TODO: find the formula. + self._game.modify_difficulty(+3) player_state.score += score elif self._type == 3: # bomb if player_state.bombs < 8: player_state.bombs += 1 + self._game.modify_difficulty(+5) elif self._type == 4: # full power player_state.score += 1000 @@ -95,6 +99,7 @@ class Item(object): elif self._type == 5: # 1up if player_state.lives < 8: player_state.lives += 1 + self._game.modify_difficulty(+200) elif self._type == 6: # star player_state.score += 500 diff --git a/pytouhou/game/player.py b/pytouhou/game/player.py --- a/pytouhou/game/player.py +++ b/pytouhou/game/player.py @@ -93,6 +93,7 @@ class Player(object): if not self.state.invulnerable_time and not self.death_time and self.state.touchable: # Border Between Life and Death self.death_time = self._game.frame self._game.new_death((self.state.x, self.state.y), 2) + self._game.modify_difficulty(-1600) for i in range(16): self._game.new_particle((self.state.x, self.state.y), 2, 4., 256) #TODO: find the real size and range.