Mercurial > touhou
annotate pytouhou/game/enemy.py @ 316:f0be7ea62330
Fix a bug with ECL instruction 96, and fix overall ECL handling.
The issue with instruction 96 was about death callbacks,
being executed on the caller of instruction 96 instead of the dying enemies.
This was introduced by changeset 5930b33a0370.
Additionnaly, ECL processes are now an attribute of the Enemy,
and death/timeout conditions are checked right after the ECL frame,
even if the ECL script has already ended, just like in the original game.
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Thu, 29 Mar 2012 21:18:35 +0200 |
parents | 550ec10cccbc |
children | 1366cefd0334 |
rev | line source |
---|---|
52
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
1 # -*- encoding: utf-8 -*- |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
2 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
3 ## Copyright (C) 2011 Thibaut Girka <thib@sitedethib.com> |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
4 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
5 ## This program is free software; you can redistribute it and/or modify |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
6 ## it under the terms of the GNU General Public License as published |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
7 ## by the Free Software Foundation; version 3 only. |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
8 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
9 ## This program is distributed in the hope that it will be useful, |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
12 ## GNU General Public License for more details. |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
13 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
14 |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
50
diff
changeset
|
15 |
20
6ebf9539c077
Handle more enemies types and movements
Thibaut Girka <thib@sitedethib.com>
parents:
18
diff
changeset
|
16 from pytouhou.utils.interpolator import Interpolator |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
17 from pytouhou.vm.anmrunner import ANMRunner |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
18 from pytouhou.game.sprite import Sprite |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
19 from pytouhou.game.bullet import Bullet |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
20 from pytouhou.game.laser import Laser |
242
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
21 from pytouhou.game.effect import Effect |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
22 from math import cos, sin, atan2, pi |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
23 |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
24 |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
25 class Enemy(object): |
171
2f3665a77f11
Add support for the last unknown value of the enemy spawning.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
167
diff
changeset
|
26 def __init__(self, pos, life, _type, bonus_dropped, die_score, anm_wrapper, game): |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
27 self._game = game |
49
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
28 self._anm_wrapper = anm_wrapper |
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
29 self._type = _type |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
30 |
316
f0be7ea62330
Fix a bug with ECL instruction 96, and fix overall ECL handling.
Thibaut Girka <thib@sitedethib.com>
parents:
311
diff
changeset
|
31 self.process = None |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
32 self.sprite = None |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
33 self.anmrunner = None |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
34 self.removed = False |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
35 self.visible = True |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
36 self.was_visible = False |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
37 self.bonus_dropped = bonus_dropped |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
38 self.die_score = die_score #TODO: use it |
49
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
39 |
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
40 self.frame = 0 |
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
41 |
270
7a9135b88853
Partially fix some of Flandre's spellcards.
Thibaut Girka <thib@sitedethib.com>
parents:
268
diff
changeset
|
42 self.x, self.y, self.z = pos |
209
005ea47e11e0
Create enemy with negative life as it should be.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
207
diff
changeset
|
43 self.life = 1 if life < 0 else life |
36 | 44 self.max_life = life |
67
e2cb9d434dc2
Add support for a few opcodes.
Thibaut Girka <thib@sitedethib.com>
parents:
62
diff
changeset
|
45 self.touchable = True |
210
f5be441d2c42
Implement collidable boolean of enemy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
209
diff
changeset
|
46 self.collidable = True |
67
e2cb9d434dc2
Add support for a few opcodes.
Thibaut Girka <thib@sitedethib.com>
parents:
62
diff
changeset
|
47 self.damageable = True |
e2cb9d434dc2
Add support for a few opcodes.
Thibaut Girka <thib@sitedethib.com>
parents:
62
diff
changeset
|
48 self.death_flags = 0 |
177
6e8653ff2b23
Fix boss mode and don’t suicide the boss when she just want to kill the other enemies.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
173
diff
changeset
|
49 self.boss = False |
182
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
50 self.difficulty_coeffs = (-.5, .5, 0, 0, 0, 0) |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
51 self.extended_bullet_attributes = (0, 0, 0, 0, 0., 0., 0., 0.) |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
52 self.current_laser_id = 0 |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
53 self.laser_by_id = {} |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
54 self.bullet_attributes = None |
36 | 55 self.bullet_launch_offset = (0, 0) |
268
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
56 self.death_callback = -1 |
307 | 57 self.boss_callback = -1 |
268
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
58 self.low_life_callback = -1 |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
59 self.low_life_trigger = None |
268
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
60 self.timeout = -1 |
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
61 self.timeout_callback = -1 |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
62 self.remaining_lives = -1 |
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
63 |
75
b3bd421bb895
Handle a few more ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
73
diff
changeset
|
64 self.automatic_orientation = False |
b3bd421bb895
Handle a few more ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
73
diff
changeset
|
65 |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
66 self.bullet_launch_interval = 0 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
67 self.bullet_launch_timer = 0 |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
68 self.delay_attack = False |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
69 |
167
e483b5a7e84b
Fix default death animation.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
166
diff
changeset
|
70 self.death_anim = 0 |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
71 self.movement_dependant_sprites = None |
22 | 72 self.direction = None |
20
6ebf9539c077
Handle more enemies types and movements
Thibaut Girka <thib@sitedethib.com>
parents:
18
diff
changeset
|
73 self.interpolator = None #TODO |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
74 self.speed_interpolator = None |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
75 self.update_mode = 0 |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
76 self.angle = 0. |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
77 self.speed = 0. |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
78 self.rotation_speed = 0. |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
79 self.acceleration = 0. |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
80 |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
81 self.hitbox = (0, 0) |
152
86807b8a63bd
Add collisions with enemies and items.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
151
diff
changeset
|
82 self.hitbox_half_size = (0, 0) |
50
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
83 self.screen_box = None |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
84 |
242
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
85 self.aux_anm = 8 * [None] |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
86 |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
87 |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
88 def objects(self): |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
89 return [anm for anm in self.aux_anm if anm] |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
90 |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
91 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
92 def set_bullet_attributes(self, type_, anim, sprite_idx_offset, |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
93 bullets_per_shot, number_of_shots, speed, speed2, |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
94 launch_angle, angle, flags): |
182
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
95 |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
96 # Apply difficulty-specific modifiers |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
97 speed_a, speed_b, nb_a, nb_b, shots_a, shots_b = self.difficulty_coeffs |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
98 diff_coeff = self._game.difficulty / 32. |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
99 |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
100 speed += speed_a * (1. - diff_coeff) + speed_b * diff_coeff |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
101 speed2 += (speed_a * (1. - diff_coeff) + speed_b * diff_coeff) / 2. |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
102 bullets_per_shot += int(nb_a * (1. - diff_coeff) + nb_b * diff_coeff) |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
103 number_of_shots += int(shots_a * (1. - diff_coeff) + shots_b * diff_coeff) |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
104 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
105 self.bullet_attributes = (type_, anim, sprite_idx_offset, bullets_per_shot, |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
106 number_of_shots, speed, speed2, launch_angle, |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
107 angle, flags) |
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
108 if not self.delay_attack: |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
109 self.fire() |
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
110 |
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
111 |
182
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
112 def set_bullet_launch_interval(self, value, start=0.): |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
113 # Apply difficulty-specific modifiers: |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
114 value *= 1. - .4 * (self._game.difficulty - 16.) / 32. |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
115 |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
116 self.bullet_launch_interval = int(value) |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
117 self.bullet_launch_timer = int(value * start) |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
118 |
20843875ad8f
(Hopefully) use difficulty as it should.
Thibaut Girka <thib@sitedethib.com>
parents:
181
diff
changeset
|
119 |
207 | 120 def fire(self, offset=None, bullet_attributes=None, launch_pos=None): |
123 | 121 (type_, type_idx, sprite_idx_offset, bullets_per_shot, number_of_shots, |
207 | 122 speed, speed2, launch_angle, angle, flags) = bullet_attributes or self.bullet_attributes |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
123 |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
124 bullet_type = self._game.bullet_types[type_idx] |
123 | 125 |
207 | 126 if not launch_pos: |
127 ox, oy = offset or self.bullet_launch_offset | |
128 launch_pos = self.x + ox, self.y + oy | |
109
e93a7ed4f203
Implement bullet_launch_offset thing
Thibaut Girka <thib@sitedethib.com>
parents:
108
diff
changeset
|
129 |
270
7a9135b88853
Partially fix some of Flandre's spellcards.
Thibaut Girka <thib@sitedethib.com>
parents:
268
diff
changeset
|
130 if speed < 0.3 and speed != 0.0: |
253
ea4832f843aa
Fix initial bullet speed
Thibaut Girka <thib@sitedethib.com>
parents:
251
diff
changeset
|
131 speed = 0.3 |
104
6c59d0eeb5fa
Implement ECL instruction 75 in the same exact way as 102h.exe
Thibaut Girka <thib@sitedethib.com>
parents:
103
diff
changeset
|
132 if speed2 < 0.3: |
6c59d0eeb5fa
Implement ECL instruction 75 in the same exact way as 102h.exe
Thibaut Girka <thib@sitedethib.com>
parents:
103
diff
changeset
|
133 speed2 = 0.3 |
6c59d0eeb5fa
Implement ECL instruction 75 in the same exact way as 102h.exe
Thibaut Girka <thib@sitedethib.com>
parents:
103
diff
changeset
|
134 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
135 self.bullet_launch_timer = 0 |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
136 |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
137 player = self.select_player() |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
138 |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
139 if type_ in (67, 69, 71): |
132
fba45c37ec99
Fix initial angle of bullets with bullet_launch_offset enabled.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
130
diff
changeset
|
140 launch_angle += self.get_player_angle(player, launch_pos) |
247
fb3a263213d1
Fix instruction 70 to always fire to the right.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
242
diff
changeset
|
141 if type_ == 71 and bullets_per_shot % 2 or type_ in (69, 70) and not bullets_per_shot % 2: |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
142 launch_angle += pi / bullets_per_shot |
104
6c59d0eeb5fa
Implement ECL instruction 75 in the same exact way as 102h.exe
Thibaut Girka <thib@sitedethib.com>
parents:
103
diff
changeset
|
143 if type_ != 75: |
6c59d0eeb5fa
Implement ECL instruction 75 in the same exact way as 102h.exe
Thibaut Girka <thib@sitedethib.com>
parents:
103
diff
changeset
|
144 launch_angle -= angle * (bullets_per_shot - 1) / 2. |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
145 |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
146 bullets = self._game.bullets |
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
147 nb_bullets_max = self._game.nb_bullets_max |
106 | 148 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
149 for shot_nb in range(number_of_shots): |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
150 shot_speed = speed if shot_nb == 0 else speed + (speed2 - speed) * float(shot_nb) / float(number_of_shots) |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
151 bullet_angle = launch_angle |
311
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
152 if type_ in (69, 70, 71, 74): |
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
153 launch_angle += angle |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
154 for bullet_nb in range(bullets_per_shot): |
143 | 155 if nb_bullets_max is not None and len(bullets) == nb_bullets_max: |
156 break | |
157 | |
135
c53d91300c1c
Implement instruction 74.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
134
diff
changeset
|
158 if type_ == 75: # 102h.exe@0x4138cf |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
159 bullet_angle = self._game.prng.rand_double() * (launch_angle - angle) + angle |
135
c53d91300c1c
Implement instruction 74.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
134
diff
changeset
|
160 if type_ in (74, 75): # 102h.exe@0x4138cf |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
161 shot_speed = self._game.prng.rand_double() * (speed - speed2) + speed2 |
123 | 162 bullets.append(Bullet(launch_pos, bullet_type, sprite_idx_offset, |
106 | 163 bullet_angle, shot_speed, |
164 self.extended_bullet_attributes, | |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
165 flags, player, self._game)) |
311
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
166 |
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
167 if type_ in (69, 70, 71, 74): |
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
168 bullet_angle += 2. * pi / bullets_per_shot |
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
169 else: |
550ec10cccbc
Fix angle between salves of circle-distributed bullets.
Thibaut Girka <thib@sitedethib.com>
parents:
309
diff
changeset
|
170 bullet_angle += angle |
48
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
171 |
8353c33d53d4
Support a few more instructions
Thibaut Girka <thib@sitedethib.com>
parents:
46
diff
changeset
|
172 |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
173 def new_laser(self, variant, laser_type, sprite_idx_offset, angle, speed, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
174 start_offset, end_offset, max_length, width, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
175 start_duration, duration, end_duration, |
309
14c9aca8e274
Implement Remilia's laser webs.
Thibaut Girka <thib@sitedethib.com>
parents:
307
diff
changeset
|
176 grazing_delay, grazing_extra_duration, unknown, |
14c9aca8e274
Implement Remilia's laser webs.
Thibaut Girka <thib@sitedethib.com>
parents:
307
diff
changeset
|
177 offset=None): |
14c9aca8e274
Implement Remilia's laser webs.
Thibaut Girka <thib@sitedethib.com>
parents:
307
diff
changeset
|
178 ox, oy = offset or self.bullet_launch_offset |
277
219edad0f395
Fix initial laser offset.
Thibaut Girka <thib@sitedethib.com>
parents:
274
diff
changeset
|
179 launch_pos = self.x + ox, self.y + oy |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
180 if variant == 86: |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
181 angle += self.get_player_angle(self.select_player(), launch_pos) |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
182 laser = Laser(launch_pos, self._game.laser_types[laser_type], |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
183 sprite_idx_offset, angle, speed, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
184 start_offset, end_offset, max_length, width, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
185 start_duration, duration, end_duration, grazing_delay, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
186 grazing_extra_duration, self._game) |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
187 self._game.lasers.append(laser) |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
188 self.laser_by_id[self.current_laser_id] = laser |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
189 |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
270
diff
changeset
|
190 |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
191 def select_player(self, players=None): |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
192 return (players or self._game.players)[0] #TODO |
50
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
193 |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
194 |
132
fba45c37ec99
Fix initial angle of bullets with bullet_launch_offset enabled.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
130
diff
changeset
|
195 def get_player_angle(self, player=None, pos=None): |
79
ffe2c2b9912c
Handle a few more ECL instructions. Prepare for bullet handling \o/
Thibaut Girka <thib@sitedethib.com>
parents:
75
diff
changeset
|
196 player = player or self.select_player() |
132
fba45c37ec99
Fix initial angle of bullets with bullet_launch_offset enabled.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
130
diff
changeset
|
197 x, y = pos or (self.x, self.y) |
fba45c37ec99
Fix initial angle of bullets with bullet_launch_offset enabled.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
130
diff
changeset
|
198 return atan2(player.y - y, player.x - x) |
50
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
199 |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
200 |
49
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
201 def set_anim(self, index): |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
202 self.sprite = Sprite() |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
203 self.anmrunner = ANMRunner(self._anm_wrapper, index, self.sprite) |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
204 self.anmrunner.run_frame() |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
205 |
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
206 |
166
dcf32488a2c9
Better enemy death, with animation and (hopefully) correct flags handling.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
159
diff
changeset
|
207 def die_anim(self): |
248
77b83064b57e
Use the correct animation for player death.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
247
diff
changeset
|
208 anim = {0: 3, 1: 4, 2: 5}[self.death_anim % 256] # The TB is wanted, if index isn’t in these values the original game crashs. |
77b83064b57e
Use the correct animation for player death.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
247
diff
changeset
|
209 self._game.new_effect((self.x, self.y), anim) |
190
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
210 |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
211 |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
212 def drop_particles(self, number, color): |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
213 #TODO: white particles are only used in stage 3 to 6, |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
214 # in other stages they are blue. |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
215 if color == 0: |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
216 if self._game.stage in [1, 2, 7]: |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
217 color = 3 |
dbe6b7b2d3fc
Fix a few things about particles.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
184
diff
changeset
|
218 for i in range(number): |
193
9f58e2a6e950
Fix particles, fix "random" item popping, change update order to match the original game's more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
190
diff
changeset
|
219 self._game.new_particle((self.x, self.y), color, 4., 256) #TODO: find the real size. |
154
364935f6e313
Implement enemy killing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
152
diff
changeset
|
220 |
364935f6e313
Implement enemy killing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
152
diff
changeset
|
221 |
242
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
222 def set_aux_anm(self, number, script): |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
223 self.aux_anm[number] = Effect((self.x, self.y), script, self._anm_wrapper) |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
224 |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
225 |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
226 def set_pos(self, x, y, z): |
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
227 self.x, self.y = x, y |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
228 self.update_mode = 1 |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
229 self.interpolator = Interpolator((x, y)) |
151
5cf927cbd9c5
Merge GameState into Game. TODO: Merge PlayerState into Player
Thibaut Girka <thib@sitedethib.com>
parents:
143
diff
changeset
|
230 self.interpolator.set_interpolation_start(self._game.frame, (x, y)) |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
231 |
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
232 |
62
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
233 def move_to(self, duration, x, y, z, formula): |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
234 frame = self._game.frame |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
235 self.speed_interpolator = None |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
236 self.update_mode = 1 |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
237 self.interpolator = Interpolator((self.x, self.y), formula) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
238 self.interpolator.set_interpolation_start(frame, (self.x, self.y)) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
239 self.interpolator.set_interpolation_end(frame + duration - 1, (x, y)) |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
240 |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
241 self.angle = atan2(y - self.y, x - self.x) |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
242 |
75
b3bd421bb895
Handle a few more ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
73
diff
changeset
|
243 |
b3bd421bb895
Handle a few more ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
73
diff
changeset
|
244 def stop_in(self, duration, formula): |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
245 frame = self._game.frame |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
246 self.interpolator = None |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
247 self.update_mode = 1 |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
248 self.speed_interpolator = Interpolator((self.speed,), formula) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
249 self.speed_interpolator.set_interpolation_start(frame, (self.speed,)) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
250 self.speed_interpolator.set_interpolation_end(frame + duration - 1, (0.,)) |
75
b3bd421bb895
Handle a few more ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
73
diff
changeset
|
251 |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
252 |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
253 def is_visible(self, screen_width, screen_height): |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
254 if self.sprite: |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
255 tx, ty, tw, th = self.sprite.texcoords |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
256 if self.sprite.corner_relative_placement: |
73
e4af16a019d3
Do not remove enemies as soon as they lose their animation (Daiyousei...)
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
257 raise Exception #TODO |
e4af16a019d3
Do not remove enemies as soon as they lose their animation (Daiyousei...)
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
258 else: |
e4af16a019d3
Do not remove enemies as soon as they lose their animation (Daiyousei...)
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
259 tx, ty, tw, th = 0., 0., 0., 0. |
29
afa91be769ae
Don't lose time updating off-screen enemies' sprites
Thibaut Girka <thib@sitedethib.com>
parents:
23
diff
changeset
|
260 |
123 | 261 x, y = self.x, self.y |
73
e4af16a019d3
Do not remove enemies as soon as they lose their animation (Daiyousei...)
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
262 max_x = tw / 2. |
e4af16a019d3
Do not remove enemies as soon as they lose their animation (Daiyousei...)
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
263 max_y = th / 2. |
29
afa91be769ae
Don't lose time updating off-screen enemies' sprites
Thibaut Girka <thib@sitedethib.com>
parents:
23
diff
changeset
|
264 |
123 | 265 if (max_x < x - screen_width |
266 or max_x < -x | |
267 or max_y < y - screen_height | |
268 or max_y < -y): | |
23
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
269 return False |
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
270 return True |
444ac7bca7bc
Refacto ECL stuff, add support for a few instructions, and add some culling
Thibaut Girka <thib@sitedethib.com>
parents:
22
diff
changeset
|
271 |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
272 |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
273 def check_collisions(self): |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
274 # Check for collisions |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
275 ex, ey = self.x, self.y |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
276 ehalf_size_x, ehalf_size_y = self.hitbox_half_size |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
277 ex1, ex2 = ex - ehalf_size_x, ex + ehalf_size_x |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
278 ey1, ey2 = ey - ehalf_size_y, ey + ehalf_size_y |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
279 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
280 damages = 0 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
281 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
282 # Check for enemy-bullet collisions |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
283 for bullet in self._game.players_bullets: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
284 half_size = bullet.hitbox_half_size |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
285 bx, by = bullet.x, bullet.y |
220
0595315d3880
Fix SHT handling; change a few things to be closer to ZUN’s mind; and first stub of PCB support.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
212
diff
changeset
|
286 bx1, bx2 = bx - half_size[0], bx + half_size[0] |
0595315d3880
Fix SHT handling; change a few things to be closer to ZUN’s mind; and first stub of PCB support.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
212
diff
changeset
|
287 by1, by2 = by - half_size[1], by + half_size[1] |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
288 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
289 if not (bx2 < ex1 or bx1 > ex2 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
290 or by2 < ey1 or by1 > ey2): |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
291 bullet.collide() |
268
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
292 if self.damageable: |
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
293 damages += bullet.damage |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
294 self.drop_particles(1, 1) |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
295 |
294
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
296 # Check for enemy-laser collisions |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
297 for laser in self._game.players_lasers: |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
298 if not laser: |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
299 continue |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
300 |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
301 half_size = laser.hitbox_half_size |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
302 lx, ly = laser.x, laser.y * 2. |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
303 lx1, lx2 = lx - half_size[0], lx + half_size[0] |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
304 |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
305 if not (lx2 < ex1 or lx1 > ex2 |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
306 or ly < ey1): |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
307 if self.damageable: |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
308 damages += laser.damage |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
309 self.drop_particles(1, 1) |
94c636f8f863
Add player lasers for MarisaB.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
310 |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
311 # Check for enemy-player collisions |
212
78e9957ad344
Hopefully fix enemy-player collision
Thibaut Girka <thib@sitedethib.com>
parents:
210
diff
changeset
|
312 ex1, ex2 = ex - ehalf_size_x * 2. / 3., ex + ehalf_size_x * 2. / 3. |
78e9957ad344
Hopefully fix enemy-player collision
Thibaut Girka <thib@sitedethib.com>
parents:
210
diff
changeset
|
313 ey1, ey2 = ey - ehalf_size_y * 2. / 3., ey + ehalf_size_y * 2. / 3. |
210
f5be441d2c42
Implement collidable boolean of enemy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
209
diff
changeset
|
314 if self.collidable: |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
315 for player in self._game.players: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
316 px, py = player.x, player.y |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
317 phalf_size = player.hitbox_half_size |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
318 px1, px2 = px - phalf_size, px + phalf_size |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
319 py1, py2 = py - phalf_size, py + phalf_size |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
320 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
321 #TODO: box-box or point-in-box? |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
322 if not (ex2 < px1 or ex1 > px2 or ey2 < py1 or ey1 > py2): |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
323 if not self.boss: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
324 damages += 10 |
212
78e9957ad344
Hopefully fix enemy-player collision
Thibaut Girka <thib@sitedethib.com>
parents:
210
diff
changeset
|
325 player.collide() |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
326 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
327 # Adjust damages |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
328 damages = min(70, damages) |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
294
diff
changeset
|
329 score = (damages // 5) * 10 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
294
diff
changeset
|
330 self._game.players[0].state.score += score #TODO: better distribution amongst the players. |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
331 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
332 if self._game.spellcard: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
333 #TODO: there is a division by 3, somewhere... where is it? |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
334 if damages <= 7: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
335 damages = 1 if damages else 0 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
336 else: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
337 damages //= 7 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
338 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
339 # Apply damages |
268
dd621ad72beb
Fix callback handling and damage dealing.
Thibaut Girka <thib@sitedethib.com>
parents:
253
diff
changeset
|
340 self.life -= damages |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
341 |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
342 |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
343 def update(self): |
316
f0be7ea62330
Fix a bug with ECL instruction 96, and fix overall ECL handling.
Thibaut Girka <thib@sitedethib.com>
parents:
311
diff
changeset
|
344 if self.process: |
f0be7ea62330
Fix a bug with ECL instruction 96, and fix overall ECL handling.
Thibaut Girka <thib@sitedethib.com>
parents:
311
diff
changeset
|
345 self.process.run_iteration() |
f0be7ea62330
Fix a bug with ECL instruction 96, and fix overall ECL handling.
Thibaut Girka <thib@sitedethib.com>
parents:
311
diff
changeset
|
346 |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
347 x, y = self.x, self.y |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
348 |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
349 if self.update_mode == 1: |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
350 speed = 0.0 |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
351 if self.interpolator: |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
352 self.interpolator.update(self._game.frame) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
353 x, y = self.interpolator.values |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
354 if self.speed_interpolator: |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
355 self.speed_interpolator.update(self._game.frame) |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
356 speed, = self.speed_interpolator.values |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
357 else: |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
358 speed = self.speed |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
359 self.speed += self.acceleration |
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
360 self.angle += self.rotation_speed |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
361 |
251
4b549894ef6b
Change position/speed interpoletor handling to match the original game more closely.
Thibaut Girka <thib@sitedethib.com>
parents:
248
diff
changeset
|
362 dx, dy = cos(self.angle) * speed, sin(self.angle) * speed |
49
cbe1cb50f2fd
Refactor ECLRunner/EnemyManager so that all VM stuff goes to ECLRunner
Thibaut Girka <thib@sitedethib.com>
parents:
48
diff
changeset
|
363 if self._type & 2: |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
364 x -= dx |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
365 else: |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
366 x += dx |
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
367 y += dy |
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
368 |
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
369 if self.movement_dependant_sprites: |
57
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
370 #TODO: is that really how it works? Almost. |
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
371 # Sprite determination is done only once per changement, and is |
694f25881d0f
Fix move_to interpolation, add support for a few ANM and ECL instructions
Thibaut Girka <thib@sitedethib.com>
parents:
56
diff
changeset
|
372 # superseeded by ins_97. |
62
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
373 end_left, end_right, left, right = self.movement_dependant_sprites |
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
374 if x < self.x and self.direction != -1: |
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
375 self.set_anim(left) |
22 | 376 self.direction = -1 |
62
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
377 elif x > self.x and self.direction != +1: |
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
378 self.set_anim(right) |
22 | 379 self.direction = +1 |
62
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
380 elif x == self.x and self.direction is not None: |
1f591adcea04
Fix animation determination (ins_98 stuff) and some interpolation functions
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
381 self.set_anim({-1: end_left, +1: end_right}[self.direction]) |
22 | 382 self.direction = None |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
383 |
50
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
384 |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
385 if self.screen_box: |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
386 xmin, ymin, xmax, ymax = self.screen_box |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
387 x = max(xmin, min(x, xmax)) |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
388 y = max(ymin, min(y, ymax)) |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
389 |
811cefefb5c8
Fix a few bugs and add support for a few instructions
Thibaut Girka <thib@sitedethib.com>
parents:
49
diff
changeset
|
390 |
21
bf225780973f
Small refactoring, and Rumia \o/
Thibaut Girka <thib@sitedethib.com>
parents:
20
diff
changeset
|
391 self.x, self.y = x, y |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
392 |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
393 #TODO |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
394 if self.anmrunner and not self.anmrunner.run_frame(): |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
395 self.anmrunner = None |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
396 |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
397 if self.sprite and self.visible: |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
398 if self.sprite.removed: |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
399 self.sprite = None |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
68
diff
changeset
|
400 else: |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
401 self.sprite.update_orientation(self.angle, |
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
402 self.automatic_orientation) |
36 | 403 |
83
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
404 |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
405 if self.bullet_launch_interval != 0: |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
406 self.bullet_launch_timer += 1 |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
407 if self.bullet_launch_timer == self.bullet_launch_interval: |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
408 self.fire() |
fc0294c745b6
Basic bullet handling! Clean up as soon as possible :p
Thibaut Girka <thib@sitedethib.com>
parents:
79
diff
changeset
|
409 |
202
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
410 # Check collisions |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
411 if self.touchable: |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
412 self.check_collisions() |
d348892ef012
Handle enemy collisions and damages in a way closer to the original game.
Thibaut Girka <thib@sitedethib.com>
parents:
197
diff
changeset
|
413 |
242
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
414 for anm in self.aux_anm: |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
415 if anm: |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
277
diff
changeset
|
416 anm.x, anm.y = self.x, self.y |
242
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
417 anm.update() |
1d3c8c7473a2
Implement auxiliary animations of enemies like magic circles, and interruptions from ecl.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
234
diff
changeset
|
418 |
18
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
419 self.frame += 1 |
ca26a84916cb
Add preliminary ECL viewer/interpreter.
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
420 |