# HG changeset patch # User Thibaut Girka # Date 1320520755 -3600 # Node ID 709f42eaa55ea96006e94f01df0bf3633f6d71cd # Parent eca53abdfeab73a92e9eff9e2702ec1b4d425843 Minor refactoring diff --git a/pytouhou/game/enemy.py b/pytouhou/game/enemy.py --- a/pytouhou/game/enemy.py +++ b/pytouhou/game/enemy.py @@ -103,14 +103,15 @@ class Enemy(object): self.bullet_launch_timer = int(value * start) - def fire(self): + def fire(self, offset=None, bullet_attributes=None, launch_pos=None): (type_, type_idx, sprite_idx_offset, bullets_per_shot, number_of_shots, - speed, speed2, launch_angle, angle, flags) = self.bullet_attributes + speed, speed2, launch_angle, angle, flags) = bullet_attributes or self.bullet_attributes bullet_type = self._game.bullet_types[type_idx] - ox, oy = self.bullet_launch_offset - launch_pos = self.x + ox, self.y + oy + if not launch_pos: + ox, oy = offset or self.bullet_launch_offset + launch_pos = self.x + ox, self.y + oy if speed2 < 0.3: speed2 = 0.3 diff --git a/pytouhou/vm/eclrunner.py b/pytouhou/vm/eclrunner.py --- a/pytouhou/vm/eclrunner.py +++ b/pytouhou/vm/eclrunner.py @@ -886,12 +886,9 @@ class ECLRunner(object): bullet.angle = self._game.prng.rand_double() * pi #TODO bullet.delta = (cos(bullet.angle) * bullet.speed, sin(bullet.angle) * bullet.speed) elif function == 1: # Cirno - offset = self._enemy.bullet_launch_offset - self._enemy.bullet_launch_offset = ( - self._game.prng.rand_uint16() % arg - arg / 2, - self._game.prng.rand_uint16() % arg - arg / 2) - self._enemy.fire() - self._enemy.bullet_launch_offset = offset + offset = (self._game.prng.rand_uint16() % arg - arg / 2, + self._game.prng.rand_uint16() % arg - arg / 2) + self._enemy.fire(offset=offset) elif function == 13: if self._enemy.bullet_attributes is None: return @@ -899,23 +896,20 @@ class ECLRunner(object): if self._enemy.frame % 6: return - offset = self._enemy.bullet_launch_offset - pos = self._enemy.x, self._enemy.y - attributes = self._enemy.bullet_attributes - - self._enemy.x, self._enemy.y = (192, 224) - type_, anim, sprite_idx_offset, bullets_per_shot, number_of_shots, speed, speed2, launch_angle, angle, flags = attributes + (type_, anim, sprite_idx_offset, bullets_per_shot, number_of_shots, + speed, speed2, launch_angle, angle, flags) = self._enemy.bullet_attributes for i in range(arg): _angle = i*2*pi/arg _angle2 = _angle + self._getval(-10007) _distance = self._getval(-10008) - self._enemy.bullet_launch_offset = (cos(_angle2) * _distance, sin(_angle2) * _distance) - self._enemy.bullet_attributes = (type_, anim, sprite_idx_offset, bullets_per_shot, number_of_shots, speed, speed2, self._getval(-10006) + _angle, angle, flags) - self._enemy.fire() - - self._enemy.bullet_attributes = attributes - self._enemy.x, self._enemy.y = pos - self._enemy.bullet_launch_offset = offset + launch_pos = (192 + cos(_angle2) * _distance, + 224 + sin(_angle2) * _distance) + bullet_attributes = (type_, anim, sprite_idx_offset, + bullets_per_shot, number_of_shots, + speed, speed2, + self._getval(-10006) + _angle, angle, flags) + self._enemy.fire(launch_pos=launch_pos, + bullet_attributes=bullet_attributes) else: logger.warn("Unimplemented special function %d!", function)