changeset 457:de224d9fb943

merge
author Adrianna Pińska <adrianna.pinska@gmail.com>
date Sat, 09 Apr 2011 20:49:53 +0200
parents 2dcaaf6abb9c (current diff) 95527fd29872 (diff)
children fbae2da0c3c0
files data/levels/temple.json
diffstat 8 files changed, 51 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/temple.json	Sat Apr 09 20:49:20 2011 +0200
+++ b/data/levels/temple.json	Sat Apr 09 20:49:53 2011 +0200
@@ -31,5 +31,9 @@
     "doorways": {
         "starting": {"type": "StartingDoorway", "pos": [4, 16], "facing": "right"},
         "to_temple_grounds": {"type": "Doorway", "pos": [17, 16], "facing": "left", "leadsto": "temple_grounds.starting"}
+    },
+    "music" : {
+        "track" : "ambient japanese music 1.ogg",
+        "volume" : 1.0
     }
 }
--- a/skaapsteker/cutscene.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/cutscene.py	Sat Apr 09 20:49:53 2011 +0200
@@ -116,9 +116,22 @@
 
     Story: Anna Malczyk
 
-    Music: Somewhere
-
-    Sounds: Somewhere else
+    Music & Sound Effects:
+    OLPC Sound Library: Richard Boulanger;
+    The Free Sound Project:
+    Connor Purcell,
+    Nathan Hill,
+    Donnie Thompson,
+    Muki,
+    Tom Potter,
+    Kayden Riggs,
+    ITE,
+    GRSites.com,
+    dobroide,
+    pauliep83,
+    nextmaking,
+    aesqe,
+    inferno
     """
     background = 'background_03_back.png'
     music = None
--- a/skaapsteker/engine.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/engine.py	Sat Apr 09 20:49:53 2011 +0200
@@ -22,8 +22,6 @@
         self.game_state = GameState(os.path.join(options['save_location'], 'savegame.json'))
         if self.game_state.can_resume():
             self.game_state.load_game()
-        else:
-            self.game_state.new_game()
         self.soundsystem = soundsystem
 
     def change_scene(self, next_scene):
@@ -44,6 +42,10 @@
             for ev in events:
                 if ev.type is QUIT:
                     return
+                if NewGameEvent.matches(ev):
+                    self.game_state.new_game()
+                    fox = self.game_state.world.fox
+                    ChangeScene.post((ev.scene_type, '.'.join([fox.level, fox.doorway])))
                 if ChangeScene.matches(ev):
                     next_scene = ev.next_scene
                     if not isinstance(next_scene, Scene):
@@ -103,6 +105,14 @@
     def matches(cls, ev):
         return ev.type is USEREVENT and ev.utype == cls.utype
 
+class NewGameEvent(UserEvent):
+
+    utype = "NEW_GAME_EVENT"
+
+    @classmethod
+    def post(cls, scene_type):
+        super(NewGameEvent, cls).post(scene_type=scene_type)
+
 class ChangeScene(UserEvent):
 
     utype = "CHANGE_SCENE"
--- a/skaapsteker/gamestate.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/gamestate.py	Sat Apr 09 20:49:53 2011 +0200
@@ -37,6 +37,7 @@
 
     def __init__(self, game_file):
         self._game_file = game_file
+        self.world = None
 
     def can_resume(self):
         return os.path.exists(self._game_file)
--- a/skaapsteker/level.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/level.py	Sat Apr 09 20:49:53 2011 +0200
@@ -70,7 +70,8 @@
         self._background_music = None
         if 'music' in self.level_data:
             # soundsystem will call data.filepath
-            self._background_music = 'music/' + self.level_data['music']
+            self._background_music = 'music/' + self.level_data['music'].get('track', '')
+            self._background_volume = self.level_data['music'].get('volume', 1.0)
 
     def build_backgrounds(self):
         self.backgrounds = []
@@ -92,7 +93,7 @@
 
     def enter(self):
         if self._background_music:
-            self._soundsystem.play_background_music(self._background_music)
+            self._soundsystem.play_background_music(self._background_music, self._background_volume)
 
     def leave(self):
         pass
--- a/skaapsteker/levelscene.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/levelscene.py	Sat Apr 09 20:49:53 2011 +0200
@@ -118,13 +118,13 @@
     def _quit(self, pause=True):
         import menuscene # avoid circular import
         if pause:
-            engine.ChangeScene.post(menuscene.MenuScene(self.game_state, self._soundsystem, self))
+            engine.ChangeScene.post(menuscene.MenuScene(self.game_state, self._soundsystem))
         else:
             # FIXME: When starting the game, we shoudl ensure we have sane
             # states
             if self._player_dead:
                 self._player.restore()
-            engine.ChangeScene.post(menuscene.MenuScene(self.game_state, self._soundsystem, None))
+            engine.ChangeScene.post(menuscene.MenuScene(self.game_state, self._soundsystem))
 
     def _restart(self):
         if self._player_dead:
--- a/skaapsteker/menuscene.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/menuscene.py	Sat Apr 09 20:49:53 2011 +0200
@@ -2,17 +2,17 @@
 from pygame.locals import K_ESCAPE, K_q, KEYDOWN, QUIT
 
 from .cutscene import OpeningCutScene, UsageCutScene, CreditsCutScene
-from .engine import ChangeScene, Scene
+from .engine import ChangeScene, Scene, NewGameEvent
 from .levelscene import LevelScene
 from .widgets.text import Text, TextChoice
 
 
 class MenuScene(Scene):
-    def __init__(self, game_state, soundsystem, cur_game=None):
+    def __init__(self, game_state, soundsystem):
         super(MenuScene, self).__init__(game_state, soundsystem)
         self.widgets.append(Text("MENU:", (50, 50), color='white', size=48))
-        self.cur_game = cur_game
         menu_options = [
+            ('Start new game', 'restart'),
             ('Starting Cutscene', 'cutscene'),
             ('Temple', 'temple.starting'),
             ("Temple grounds", "temple_grounds.starting"),
@@ -28,16 +28,22 @@
             ('Credits', 'credits'),
             ('Quit', 'quit'),
         ]
-        if cur_game is not None:
+        if self.game_state.world is not None:
             menu_options.insert(0, ('Resume Game', 'resume'))
         self.choice = TextChoice(menu_options, (50, 100), color='white')
         self.choice.callbacks.append(self.selected)
         self.widgets.append(self.choice)
 
+    def resume_game(self):
+        fox = self.game_state.world.fox
+        ChangeScene.post((LevelScene, '.'.join([fox.level, fox.doorway])))
+
     def selected(self, option, data):
         "Callback from menu TextChoice"
         if data == 'resume':
-            ChangeScene.post(self.cur_game)
+            self.resume_game()
+        elif data == 'restart':
+            NewGameEvent.post(LevelScene)
         elif data == 'cutscene':
             ChangeScene.post(OpeningCutScene(self.game_state, self._soundsystem))
         elif data == 'usage':
--- a/skaapsteker/sound.py	Sat Apr 09 20:49:20 2011 +0200
+++ b/skaapsteker/sound.py	Sat Apr 09 20:49:53 2011 +0200
@@ -24,11 +24,12 @@
         self._sounds = {}
 
 
-    def play_background_music(self, track_name):
+    def play_background_music(self, track_name, volume=1.0):
         if self.sound_enabled:
             try:
                 mixer.music.load(data.filepath(track_name))
                 mixer.music.play(-1)  # Loop forever
+                mixer.music.set_volume(volume)
             except pygame.error:
                 print 'Unable to load track'