annotate skaapsteker/cutscene.py @ 365:a43f571e8f5b

Dim cutscene background
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 09 Apr 2011 14:39:18 +0200
parents 62b98bea56bf
children 8631e38afc24
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2 from __future__ import division
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6
365
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
7 from . import constants
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from . import data
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9 from .engine import ChangeScene, Scene
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
10 from .widgets.text import Text, ButtonSet, TextButton, unindent_text
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 class CutScene(Scene):
262
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
13 def __init__(self, game_state, soundsystem, text, background, music=None):
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
14 super(CutScene, self).__init__(game_state, soundsystem)
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15 self.background = data.load_image('backgrounds/' + background)
365
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
16 fill = pygame.Surface(self.background.get_size(), flags=SRCALPHA)
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
17 fill.fill((255, 255, 255, 128))
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
18 self.background.convert_alpha(fill)
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
19 self.background.blit(fill, (0, 0))
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
20 self.background.convert_alpha()
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21 self.start_time = pygame.time.get_ticks()
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
22 self.run_time = 60000 # ms
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
23
243
4050e77dade6 Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents: 183
diff changeset
24 self._background_music = None
262
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
25 self._background_music = music
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26
365
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
27 text_widget = Text(text, pygame.Rect(20, 20,
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
28 constants.SCREEN[0] - 40,
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
29 constants.SCREEN[1] - 40),
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
30 size=24, shadow='gray', wrap=True)
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
31 self.widgets.append(text_widget)
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
32
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
33 button_set = ButtonSet()
365
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
34 # TODO: Dynamic position
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
35 button_set.append(TextButton("Continue", (20, constants.SCREEN[1] - 68),
a43f571e8f5b Dim cutscene background
Stefano Rivera <stefano@rivera.za.net>
parents: 277
diff changeset
36 size=24, color='red'))
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
37 button_set.callbacks.append(self.done)
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
38 self.widgets.append(button_set)
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
39
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
40 def done(self, selected=None, data=None):
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
41 # Avoid circular import...
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
42 from .menuscene import MenuScene
277
62b98bea56bf More level and scene change fixes.
Jeremy Thurgood <firxen@gmail.com>
parents: 262
diff changeset
43 ChangeScene.post((MenuScene,))
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
44
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
45 def draw(self, surface, engine):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46 viewport = surface.get_clip()
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 # Scoll background back and forth:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
49 max_pos = self.background.get_rect().width - viewport.width
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
50 bottom = self.background.get_rect().height - viewport.height
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
51 pos = ((pygame.time.get_ticks() - self.start_time)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52 % (self.run_time * 2)) * max_pos // (self.run_time)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
53 if pos > max_pos:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
54 pos = (2 * max_pos) - pos
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
55 surface.blit(self.background, viewport.topleft,
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
56 pygame.Rect((pos, bottom), viewport.size))
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
57
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
58 super(CutScene, self).draw(surface, engine)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
59
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
60 def dispatch(self, ev):
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
61 if ev.type is KEYDOWN:
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
62 if ev.key in(K_q, K_ESCAPE):
247
8c0c132b422f Button widget for cutscene
Stefano Rivera <stefano@rivera.za.net>
parents: 243
diff changeset
63 self.done()
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
64 super(CutScene, self).dispatch(ev)
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
65
243
4050e77dade6 Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents: 183
diff changeset
66 def enter(self):
4050e77dade6 Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents: 183
diff changeset
67 if self._background_music:
262
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
68 self._soundsystem.play_background_music(self._background_music)
243
4050e77dade6 Add support for background music tracks
Neil Muller <drnlmuller@gmail.com>
parents: 183
diff changeset
69
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
70
262
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
71 def opening_cutscene(game_state, soundsystem):
134
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
72 text = u"""
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
73 Many moons ago, an evil nine-tailed kitsune, a fearsome fox god, ruled the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
74 land.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
75
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
76 It had many powers — the ability to shape shift, turn invisible, control
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
77 the elements. Its powers came from its majestic tails and the kitsune
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
78 guarded them ferociously. If any fox attained eight tails, it would battle
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
79 the kitsune for domination of the celestial world. To prevent this, the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
80 kitsune stole the tails of all the foxes it encountered.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
81
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
82 The evil kitsune challenged every fox to a haiku contest. But the
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
83 competition was not fair, and the kitsune cheated every time. When it
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
84 defeated the poor fox, it stole its tail and threw it to the four winds.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
85
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
86 The kitsune stole your tail. Now it’s time to get it back.
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
87 """
4713a2a3b0be Initial cutscene screen
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
88 text = unindent_text(text)
262
de60329cfc9f Factor out sound stuff
Neil Muller <drnlmuller@gmail.com>
parents: 247
diff changeset
89 return CutScene(game_state, soundsystem, text, 'background_01_back.png')