Mercurial > skaapsteker
annotate skaapsteker/cutscene.py @ 499:069fc6312ab8
Music in cutscenes
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sat, 09 Apr 2011 22:56:02 +0200 |
parents | b02d51e06c17 |
children | d9b70b89cca6 |
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): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
38 if self._background_music: |
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): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
43 def __init__(self, game_state, soundsystem): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
44 super(TextCutScene, self).__init__(game_state, soundsystem) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
45 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
|
46 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
|
47 fill.fill((255, 255, 255, 128)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
48 self._background_img.convert_alpha(fill) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
49 self._background_img.blit(fill, (0, 0)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
50 self._background_img.convert_alpha() |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
51 self._start_time = pygame.time.get_ticks() |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
52 self._run_time = 60000 # ms |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
53 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
54 text_widget = Text(unindent_text(self.text), |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
55 pygame.Rect(20, 20, |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
56 constants.SCREEN[0] - 40, |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
57 constants.SCREEN[1] - 40), |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
58 size=24, shadow='gray', wrap=True) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
59 self.widgets.append(text_widget) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
60 |
134 | 61 def draw(self, surface, engine): |
62 viewport = surface.get_clip() | |
63 | |
64 # Scoll background back and forth: | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
65 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
|
66 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
|
67 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
|
68 % (self._run_time * 2)) * max_pos // (self._run_time) |
134 | 69 if pos > max_pos: |
70 pos = (2 * max_pos) - pos | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
71 surface.blit(self._background_img, viewport.topleft, |
134 | 72 pygame.Rect((pos, bottom), viewport.size)) |
73 | |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
74 super(TextCutScene, self).draw(surface, engine) |
243
4050e77dade6
Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents:
183
diff
changeset
|
75 |
134 | 76 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
77 class OpeningCutScene(TextCutScene): |
134 | 78 text = u""" |
79 Many moons ago, an evil nine-tailed kitsune, a fearsome fox god, ruled the | |
80 land. | |
81 | |
82 It had many powers — the ability to shape shift, turn invisible, control | |
83 the elements. Its powers came from its majestic tails and the kitsune | |
84 guarded them ferociously. If any fox attained eight tails, it would battle | |
85 the kitsune for domination of the celestial world. To prevent this, the | |
86 kitsune stole the tails of all the foxes it encountered. | |
87 | |
88 The evil kitsune challenged every fox to a haiku contest. But the | |
89 competition was not fair, and the kitsune cheated every time. When it | |
90 defeated the poor fox, it stole its tail and threw it to the four winds. | |
91 | |
92 The kitsune stole your tail. Now it’s time to get it back. | |
93 """ | |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
94 background = 'background_01_back.png' |
499 | 95 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
|
96 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
97 def done(self, selected=None, data=None): |
479 | 98 fox = self.game_state.world.fox |
99 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
|
100 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
101 |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
102 class UsageCutScene(TextCutScene): |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
103 text = u""" |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
104 Arrow keys control your movement. |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
105 |
448 | 106 Double-tap ← or → to sprint, ↑ to fly (when you can). |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
107 |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
108 Z and X perform attacks. |
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
109 """ |
448 | 110 background = 'background_02_back.png' |
375
8631e38afc24
Usage cutscene (with minor CutScene refactoring)
Stefano Rivera <stefano@rivera.za.net>
parents:
365
diff
changeset
|
111 music = None |
448 | 112 |
113 | |
492
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
114 class CreditsCutScene(TextCutScene): |
448 | 115 text = u""" |
116 Credits: | |
117 | |
118 Programmers: Adrianna Pińska, Jeremy Thurgood, Neil Muller, Simon Cross, Stefano Rivera | |
119 | |
120 Art: Oliver Hambsch | |
121 | |
122 Story: Anna Malczyk | |
123 | |
452 | 124 Music & Sound Effects: |
125 OLPC Sound Library: Richard Boulanger; | |
126 The Free Sound Project: | |
127 Connor Purcell, | |
128 Nathan Hill, | |
129 Donnie Thompson, | |
130 Muki, | |
131 Tom Potter, | |
132 Kayden Riggs, | |
133 ITE, | |
134 GRSites.com, | |
135 dobroide, | |
136 pauliep83, | |
137 nextmaking, | |
138 aesqe, | |
139 inferno | |
448 | 140 """ |
141 background = 'background_03_back.png' | |
499 | 142 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
|
143 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
144 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
145 class VictoryCutScene(CutScene): |
499 | 146 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
|
147 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
148 def __init__(self, game_state, soundsystem): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
149 super(VictoryCutScene, self).__init__(game_state, soundsystem) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
150 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
|
151 |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
152 def draw(self, surface, engine): |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
153 surface.blit(self._background_img, (0, 0)) |
b02d51e06c17
Add Victory CutScene (and refactor CutScenes)
Stefano Rivera <stefano@rivera.za.net>
parents:
479
diff
changeset
|
154 super(VictoryCutScene, self).draw(surface, engine) |