Mercurial > touhou
annotate pytouhou/games/eosd.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 | 8d1768fa4cbb |
children | 61adb5453e46 |
rev | line source |
---|---|
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
1 # -*- encoding: utf-8 -*- |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
2 ## |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
3 ## Copyright (C) 2011 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
4 ## |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
5 ## This program is free software; you can redistribute it and/or modify |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
6 ## it under the terms of the GNU General Public License as published |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
7 ## by the Free Software Foundation; version 3 only. |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
8 ## |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
9 ## This program is distributed in the hope that it will be useful, |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
12 ## GNU General Public License for more details. |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
13 ## |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
14 |
206
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
15 from pytouhou.utils.interpolator import Interpolator |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
16 |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
17 from pytouhou.game.game import Game |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
18 from pytouhou.game.bullettype import BulletType |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
19 from pytouhou.game.lasertype import LaserType |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
20 from pytouhou.game.itemtype import ItemType |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
21 from pytouhou.game.player import Player |
199
8ec34c56fed0
Implement orbs.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
197
diff
changeset
|
22 from pytouhou.game.orb import Orb |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
23 from pytouhou.game.effect import Effect |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
24 from pytouhou.game.text import Text |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
25 |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
26 |
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:
216
diff
changeset
|
27 SQ2 = 2. ** 0.5 / 2. |
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:
216
diff
changeset
|
28 |
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:
216
diff
changeset
|
29 |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
30 class EoSDGame(Game): |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
31 def __init__(self, resource_loader, player_states, stage, rank, difficulty, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
32 bullet_types=None, laser_types=None, item_types=None, |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
33 nb_bullets_max=640, width=384, height=448, prng=None): |
235
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
34 |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
35 if not bullet_types: |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
36 etama3 = resource_loader.get_anm_wrapper(('etama3.anm',)) |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
37 etama4 = resource_loader.get_anm_wrapper(('etama4.anm',)) |
312
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
38 bullet_types = [BulletType(etama3, 0, 11, 14, 15, 16, hitbox_size=4, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
39 type_id=0), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
40 BulletType(etama3, 1, 12, 17, 18, 19, hitbox_size=6, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
41 type_id=1), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
42 BulletType(etama3, 2, 12, 17, 18, 19, hitbox_size=4, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
43 type_id=2), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
44 BulletType(etama3, 3, 12, 17, 18, 19, hitbox_size=6, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
45 type_id=3), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
46 BulletType(etama3, 4, 12, 17, 18, 19, hitbox_size=5, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
47 type_id=4), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
48 BulletType(etama3, 5, 12, 17, 18, 19, hitbox_size=4, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
49 type_id=5), |
289
e7f40bff72fc
Fix launch_anim_offsets.
Thibaut Girka <thib@sitedethib.com>
parents:
286
diff
changeset
|
50 BulletType(etama3, 6, 13, 20, 20, 20, hitbox_size=16, |
312
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
51 launch_anim_offsets=(0, 1, 1, 2, 2, 3, 4, 0), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
52 type_id=6), |
289
e7f40bff72fc
Fix launch_anim_offsets.
Thibaut Girka <thib@sitedethib.com>
parents:
286
diff
changeset
|
53 BulletType(etama3, 7, 13, 20, 20, 20, hitbox_size=11, |
312
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
54 launch_anim_offsets=(1,)*28, |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
55 type_id=7), |
289
e7f40bff72fc
Fix launch_anim_offsets.
Thibaut Girka <thib@sitedethib.com>
parents:
286
diff
changeset
|
56 BulletType(etama3, 8, 13, 20, 20, 20, hitbox_size=9, |
312
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
57 launch_anim_offsets=(0, 1, 1, 2, 2, 3, 4, 0), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
58 type_id=8), |
289
e7f40bff72fc
Fix launch_anim_offsets.
Thibaut Girka <thib@sitedethib.com>
parents:
286
diff
changeset
|
59 BulletType(etama4, 0, 1, 2, 2, 2, hitbox_size=32, |
312
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
60 launch_anim_offsets=(0, 1, 2, 3, 4, 5, 6, 7, 8), |
8d1768fa4cbb
Fix Remilia's “Red Magic”.
Thibaut Girka <thib@sitedethib.com>
parents:
305
diff
changeset
|
61 type_id=9)] |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
62 |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
63 if not laser_types: |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
64 laser_types = [LaserType(etama3, 9), |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
65 LaserType(etama3, 10)] |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
66 |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
67 if not item_types: |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
68 item_types = [ItemType(etama3, 0, 7), #Power |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
69 ItemType(etama3, 1, 8), #Point |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
70 ItemType(etama3, 2, 9), #Big power |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
71 ItemType(etama3, 3, 10), #Bomb |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
72 ItemType(etama3, 4, 11), #Full power |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
73 ItemType(etama3, 5, 12), #1up |
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
74 ItemType(etama3, 6, 13)] #Star |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
75 |
286
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
76 player_face = player_states[0].character // 2 |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
77 enemy_face = [('face03a.anm', 'face03b.anm'), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
78 ('face05a.anm',), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
79 ('face06a.anm', 'face06b.anm'), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
80 ('face08a.anm', 'face08b.anm'), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
81 ('face09a.anm', 'face09b.anm'), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
82 ('face09b.anm', 'face10a.anm', 'face10b.anm'), |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
83 ('face08a.anm', 'face12a.anm', 'face12b.anm', 'face12c.anm')] |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
84 self.msg = resource_loader.get_msg('msg%d.dat' % stage) |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
85 self.msg_anm_wrapper = resource_loader.get_anm_wrapper2(('face0%da.anm' % player_face, |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
86 'face0%db.anm' % player_face, |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
87 'face0%dc.anm' % player_face) |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
88 + enemy_face[stage - 1], |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
89 (0, 2, 4, 8, 10, 11, 12)) |
4838e9bab0f9
Implement dialogs (MSG files).
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
274
diff
changeset
|
90 |
262
8fa660da5f0c
Automatically search data files using different names.
Thibaut Girka <thib@sitedethib.com>
parents:
235
diff
changeset
|
91 characters = resource_loader.get_eosd_characters() |
235
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
92 players = [EoSDPlayer(state, self, resource_loader, characters[state.character]) for state in player_states] |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
93 |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
94 interface = EoSDInterface(player_states, resource_loader) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
95 |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
96 Game.__init__(self, resource_loader, players, stage, rank, difficulty, |
274
f037bca24f2d
Partially implement lasers.
Thibaut Girka <thib@sitedethib.com>
parents:
262
diff
changeset
|
97 bullet_types, laser_types, item_types, nb_bullets_max, |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
98 width, height, prng, interface) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
99 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
100 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
101 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
102 class EoSDInterface(Game): |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
103 def __init__(self, states, resource_loader): |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
104 self.states = states |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
105 front = resource_loader.get_anm_wrapper(('front.anm',)) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
106 ascii_wrapper = resource_loader.get_anm_wrapper(('ascii.anm',)) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
107 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
108 self.width = 640 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
109 self.height = 480 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
110 self.game_pos = (32, 16) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
111 |
303
647bde10353d
Add score/effective_score distinction and prepare for highscore handling.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
112 self.highscore = 1000000 #TODO: read score.dat |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
113 self.items = ([Effect((0, 32 * i), 6, front) for i in range(15)] + |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
114 [Effect((416 + 32 * i, 32 * j), 6, front) for i in range(7) for j in range(15)] + |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
115 [Effect((32 + 32 * i, 0), 7, front) for i in range(12)] + |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
116 [Effect((32 + 32 * i, 464), 8, front) for i in range(12)] + |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
117 [Effect((0, 0), 5, front)] + |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
118 [Effect((0, 0), i, front) for i in range(5) + range(9, 16)]) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
119 for item in self.items: |
304
f3099ebf4f61
Update attribute names to reflect the actual interface.
Thibaut Girka <thib@sitedethib.com>
parents:
303
diff
changeset
|
120 item.sprite.allow_dest_offset = True #XXX |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
121 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
122 self.labels = { |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
123 'highscore': Text((500, 58), '0', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
124 'score': Text((500, 82), '0', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
125 'player': Text((500, 122), 'star star', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
126 'bombs': Text((500, 146), 'star star', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
127 'power': Text((500, 186), '0', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
128 'graze': Text((500, 206), '0', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
129 'points': Text((500, 226), '0', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
130 'framerate': Text((512, 464), '', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
131 'debug?': Text((0, 464), '', front, ascii_wrapper), |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
132 } |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
133 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
134 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
135 def update(self): |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
136 for elem in self.items: |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
137 elem.update() |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
138 |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
139 player_state = self.states[0] |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
140 |
303
647bde10353d
Add score/effective_score distinction and prepare for highscore handling.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
141 self.highscore = max(self.highscore, player_state.effective_score) |
647bde10353d
Add score/effective_score distinction and prepare for highscore handling.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
142 self.labels['highscore'].set_text('%09d' % self.highscore) |
647bde10353d
Add score/effective_score distinction and prepare for highscore handling.
Thibaut Girka <thib@sitedethib.com>
parents:
300
diff
changeset
|
143 self.labels['score'].set_text('%09d' % player_state.effective_score) |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
144 self.labels['power'].set_text('%d' % player_state.power) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
145 self.labels['graze'].set_text('%d' % player_state.graze) |
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
289
diff
changeset
|
146 self.labels['points'].set_text('%d' % player_state.points) |
196
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
147 |
1e501e3b6645
Add a subclass for each character, and implement player attacks.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff
changeset
|
148 |
206
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
149 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
150 class EoSDPlayer(Player): |
235
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
151 def __init__(self, state, game, resource_loader, character): |
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
152 self.sht = character[0] |
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
153 self.focused_sht = character[1] |
229
5afc75f71fed
Add “SHT” support to EoSD, and do a little cleanup.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
220
diff
changeset
|
154 anm_wrapper = resource_loader.get_anm_wrapper(('player0%d.anm' % (state.character // 2),)) |
5afc75f71fed
Add “SHT” support to EoSD, and do a little cleanup.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
220
diff
changeset
|
155 self.anm_wrapper = anm_wrapper |
206
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
156 |
235
e59bd7979ddc
Do a little cleanup, and fix PCB SHT usage.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
233
diff
changeset
|
157 Player.__init__(self, state, game, anm_wrapper) |
229
5afc75f71fed
Add “SHT” support to EoSD, and do a little cleanup.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
220
diff
changeset
|
158 |
5afc75f71fed
Add “SHT” support to EoSD, and do a little cleanup.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
220
diff
changeset
|
159 self.orbs = [Orb(self.anm_wrapper, 128, self.state, None), |
5afc75f71fed
Add “SHT” support to EoSD, and do a little cleanup.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
220
diff
changeset
|
160 Orb(self.anm_wrapper, 129, self.state, None)] |
206
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
161 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
162 self.orbs[0].offset_x = -24 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
163 self.orbs[1].offset_x = 24 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
164 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
165 self.orb_dx_interpolator = None |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
166 self.orb_dy_interpolator = None |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
167 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
168 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
169 def start_focusing(self): |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
170 self.orb_dx_interpolator = Interpolator((24,), self._game.frame, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
171 (8,), self._game.frame + 8, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
172 lambda x: x ** 2) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
173 self.orb_dy_interpolator = Interpolator((0,), self._game.frame, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
174 (-32,), self._game.frame + 8) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
175 self.state.focused = True |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
176 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
177 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
178 def stop_focusing(self): |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
179 self.orb_dx_interpolator = Interpolator((8,), self._game.frame, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
180 (24,), self._game.frame + 8, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
181 lambda x: x ** 2) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
182 self.orb_dy_interpolator = Interpolator((-32,), self._game.frame, |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
183 (0,), self._game.frame + 8) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
184 self.state.focused = False |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
185 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
186 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
187 def objects(self): |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
188 return self.orbs if self.state.power >= 8 else [] |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
189 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
190 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
191 def update(self, keystate): |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
192 Player.update(self, keystate) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
193 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
194 if self.death_time == 0 or self._game.frame - self.death_time > 60: |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
195 if self.orb_dx_interpolator: |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
196 self.orb_dx_interpolator.update(self._game.frame) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
197 dx, = self.orb_dx_interpolator.values |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
198 self.orbs[0].offset_x = -dx |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
199 self.orbs[1].offset_x = dx |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
200 if self.orb_dy_interpolator: |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
201 self.orb_dy_interpolator.update(self._game.frame) |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
202 dy, = self.orb_dy_interpolator.values |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
203 self.orbs[0].offset_y = dy |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
204 self.orbs[1].offset_y = dy |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
205 |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
206 for orb in self.orbs: |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
207 orb.update() |
eca53abdfeab
Fix ReimuA, and refactor Player a bit.
Thibaut Girka <thib@sitedethib.com>
parents:
200
diff
changeset
|
208 |