Mercurial > skaapsteker
annotate skaapsteker/cutscene.py @ 576:0dfb62814de6
Further usage improvements
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sun, 10 Apr 2011 10:37:31 +0200 |
parents | c252e20e1c1b |
children | 0675f390653c |
rev | line source |
---|---|
134 | 1 # -*- coding: utf-8 -*- |
2 from __future__ import division | |
3 | |
4 import pygame | |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
5 from pygame.locals import K_ESCAPE, K_q, KEYDOWN, SRCALPHA |
134 | 6 |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
7 from . import constants |
134 | 8 from . import data |
9 from .engine import ChangeScene, Scene | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
10 from .levelscene import LevelScene |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
11 from .widgets.text import Text, ButtonSet, TextButton, unindent_text |
134 | 12 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
13 |
134 | 14 class CutScene(Scene): |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
15 def __init__(self, game_state, soundsystem): |
262 | 16 super(CutScene, self).__init__(game_state, soundsystem) |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
17 self._background_music = self.music |
134 | 18 |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
19 button_set = ButtonSet() |
365
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
20 # TODO: Dynamic position |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
21 button_set.append(TextButton("Continue", (20, constants.SCREEN[1] - 68), |
a43f571e8f5b
Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents:
277
diff
changeset
|
22 size=24, color='red')) |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
23 button_set.callbacks.append(self.done) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
24 self.widgets.append(button_set) |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
25 |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
26 def done(self, selected=None, data=None): |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
27 # Avoid circular import... |
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
28 from .menuscene import MenuScene |
277
62b98bea56bf
More level and scene change fixes.
Jeremy Thurgood <firxen@gmail.com>
parents:
262
diff
changeset
|
29 ChangeScene.post((MenuScene,)) |
247
8c0c132b422f
Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents:
243
diff
changeset
|
30 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
31 def dispatch(self, ev): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
32 if ev.type is KEYDOWN: |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
33 if ev.key in(K_q, K_ESCAPE): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
34 self.done() |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
35 super(CutScene, self).dispatch(ev) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
36 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
37 def enter(self): |
557
e648501c2eea
victory scene hacked in
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
503
diff
changeset
|
38 if self._background_music and self._soundsystem: |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
39 self._soundsystem.play_background_music(self._background_music) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
40 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
41 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
42 class TextCutScene(CutScene): |
503 | 43 wrap = True |
44 | |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
45 def __init__(self, game_state, soundsystem): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
46 super(TextCutScene, self).__init__(game_state, soundsystem) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
47 self._background_img = data.load_image('backgrounds/' + self.background) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
48 fill = pygame.Surface(self._background_img.get_size(), flags=SRCALPHA) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
49 fill.fill((255, 255, 255, 128)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
50 self._background_img.convert_alpha(fill) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
51 self._background_img.blit(fill, (0, 0)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
52 self._background_img.convert_alpha() |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
53 self._start_time = pygame.time.get_ticks() |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
54 self._run_time = 60000 # ms |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
55 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
56 text_widget = Text(unindent_text(self.text), |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
57 pygame.Rect(20, 20, |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
58 constants.SCREEN[0] - 40, |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
59 constants.SCREEN[1] - 40), |
503 | 60 size=24, shadow='gray', wrap=self.wrap) |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
61 self.widgets.append(text_widget) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
62 |
134 | 63 def draw(self, surface, engine): |
64 viewport = surface.get_clip() | |
65 | |
66 # Scoll background back and forth: | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
67 max_pos = self._background_img.get_rect().width - viewport.width |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
68 bottom = self._background_img.get_rect().height - viewport.height |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
69 pos = ((pygame.time.get_ticks() - self._start_time) |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
70 % (self._run_time * 2)) * max_pos // (self._run_time) |
134 | 71 if pos > max_pos: |
72 pos = (2 * max_pos) - pos | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
73 surface.blit(self._background_img, viewport.topleft, |
134 | 74 pygame.Rect((pos, bottom), viewport.size)) |
75 | |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
76 super(TextCutScene, self).draw(surface, engine) |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
77 |
134 | 78 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
79 class OpeningCutScene(TextCutScene): |
134 | 80 text = u""" |
81 Many moons ago, an evil nine-tailed kitsune, a fearsome fox god, ruled the | |
82 land. | |
83 | |
84 It had many powers — the ability to shape shift, turn invisible, control | |
85 the elements. Its powers came from its majestic tails and the kitsune | |
86 guarded them ferociously. If any fox attained eight tails, it would battle | |
87 the kitsune for domination of the celestial world. To prevent this, the | |
88 kitsune stole the tails of all the foxes it encountered. | |
89 | |
90 The evil kitsune challenged every fox to a haiku contest. But the | |
91 competition was not fair, and the kitsune cheated every time. When it | |
92 defeated the poor fox, it stole its tail and threw it to the four winds. | |
93 | |
94 The kitsune stole your tail. Now it’s time to get it back. | |
95 """ | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
96 background = 'background_01_back.png' |
499 | 97 music = 'music/ambient japanese music 2.ogg' |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
98 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
99 def done(self, selected=None, data=None): |
479 | 100 fox = self.game_state.world.fox |
101 ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway]))) | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
102 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
103 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
104 class UsageCutScene(TextCutScene): |
503 | 105 wrap = False |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
106 text = u""" |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
107 Arrow keys control your movement. |
503 | 108 Z and X to perform attacks. |
575 | 109 ↓ to pick up / drops items or perform actions. |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
110 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
111 |
503 | 112 With the right tails, you can do the following: |
113 C to shift shape. | |
114 V to make you invisible. | |
576
0dfb62814de6
Further usage improvements
Stefano Rivera <stefano@rivera.za.net>
parents:
575
diff
changeset
|
115 Double-tap ← or → to sprint. |
503 | 116 Double-tap ↑ to fly. |
117 | |
118 | |
576
0dfb62814de6
Further usage improvements
Stefano Rivera <stefano@rivera.za.net>
parents:
575
diff
changeset
|
119 In conversation use ↑ and ↓ to select a response |
0dfb62814de6
Further usage improvements
Stefano Rivera <stefano@rivera.za.net>
parents:
575
diff
changeset
|
120 and ↲ to speak. |
0dfb62814de6
Further usage improvements
Stefano Rivera <stefano@rivera.za.net>
parents:
575
diff
changeset
|
121 |
0dfb62814de6
Further usage improvements
Stefano Rivera <stefano@rivera.za.net>
parents:
575
diff
changeset
|
122 |
503 | 123 Dvorak users: Pass the --dvorak command-line argument |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
124 """ |
448 | 125 background = 'background_02_back.png' |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
126 music = None |
448 | 127 |
128 | |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
129 class CreditsCutScene(TextCutScene): |
448 | 130 text = u""" |
131 Credits: | |
132 | |
133 Programmers: Adrianna Pińska, Jeremy Thurgood, Neil Muller, Simon Cross, Stefano Rivera | |
134 | |
135 Art: Oliver Hambsch | |
136 | |
137 Story: Anna Malczyk | |
138 | |
452 | 139 Music & Sound Effects: |
140 OLPC Sound Library: Richard Boulanger; | |
141 The Free Sound Project: | |
142 Connor Purcell, | |
143 Nathan Hill, | |
144 Donnie Thompson, | |
145 Muki, | |
146 Tom Potter, | |
147 Kayden Riggs, | |
148 ITE, | |
149 GRSites.com, | |
150 dobroide, | |
151 pauliep83, | |
152 nextmaking, | |
153 aesqe, | |
154 inferno | |
448 | 155 """ |
156 background = 'background_03_back.png' | |
499 | 157 music = 'music/ambient japanese music 3.ogg' |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
158 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
159 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
160 class VictoryCutScene(CutScene): |
499 | 161 music = 'music/ambient japanese music 1.ogg' |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
162 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
163 def __init__(self, game_state, soundsystem): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
164 super(VictoryCutScene, self).__init__(game_state, soundsystem) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
165 self._background_img = data.load_image('backgrounds/victory-menu.png') |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
166 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
167 def draw(self, surface, engine): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
168 surface.blit(self._background_img, (0, 0)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
169 super(VictoryCutScene, self).draw(surface, engine) |