changeset 585:eb7909b354cd

Merge
author David Sharpe <decoydavid@gmail.com>
date Sat, 07 Sep 2013 23:13:35 +0200
parents 6d2f6fcd914d (current diff) ea9e489315f7 (diff)
children dc4eeb8547dd 0279d573ef7e
files data/levels/cargo_bay nagslang/game_object.py
diffstat 16 files changed, 227 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/data/levels/alientunnel1	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/alientunnel1	Sat Sep 07 23:13:35 2013 +0200
@@ -52,18 +52,6 @@
   name: alien_1_10
 game_objects:
 - args:
-  - [2000, 2400]
-  - - [1200, 600]
-    - [1000, 400]
-    - [600, 400]
-    - [400, 600]
-    - [400, 800]
-    - [600, 1000]
-    - [1000, 1000]
-    - [1200, 800]
-  classname: AcidFloor
-  name: acid_floor_1
-- args:
   - [1050, 1050]
   - alientunnel1
   - [1025, 1025]
@@ -77,6 +65,41 @@
   - 135
   classname: Door
   name: 1to2
+- args:
+  - [1100, 1000]
+  - - [1200, 900]
+    - [1200, 800]
+    - [400, 800]
+    - [400, 900]
+    - [500, 1000]
+    - [1100, 1000]
+  classname: AcidFloor
+  name: acid_1
+- args:
+  - [1200, 600]
+  - - [1200, 500]
+    - [1100, 400]
+    - [500, 400]
+    - [400, 500]
+    - [400, 600]
+    - [1200, 600]
+  classname: AcidFloor
+  name: acid_2
+- args:
+  - [1200, 600]
+  - - [1200, 600]
+    - [1100, 600]
+    - [1100, 800]
+    - [1200, 800]
+  classname: AcidFloor
+  name: acid_3
+- args:
+  - [900, 700]
+  - keycard_yellow
+  classname: collectable.KeyCard
+  name: keycard_yellow
+lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [500, 1200]
@@ -88,4 +111,7 @@
   - [200, 500]
   - [200, 900]
   - [500, 1200]
+  2: []
+  3: []
+  6: []
 size: [1400, 1400]
--- a/data/levels/alientunnel2	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/alientunnel2	Sat Sep 07 23:13:35 2013 +0200
@@ -81,6 +81,7 @@
 lines:
 - - [1100, 800]
   - [1100, 400]
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [500, 1200]
--- a/data/levels/alientunnel3	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/alientunnel3	Sat Sep 07 23:13:35 2013 +0200
@@ -70,6 +70,7 @@
   classname: AcidFloor
   name: acid_3_2
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [500, 1200]
--- a/data/levels/cargo_bay	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/cargo_bay	Sat Sep 07 23:13:35 2013 +0200
@@ -4,7 +4,7 @@
 - args:
   - [470, 1265]
   - hangar
-  - [2350, 1450]
+  - [2855, 1405]
   - 0
   classname: Door
 - args:
@@ -122,6 +122,7 @@
   - 'This place always reminds me of something... Oh, I must buy milk.'
   classname: Note
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [614, 1200]
--- a/data/levels/crew	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/crew	Sat Sep 07 23:13:35 2013 +0200
@@ -110,6 +110,11 @@
   - 300
   classname: RunAndGunAlien
   name: mess_alien_2
+- args:
+  - [2372, 1976]
+  - 300
+  classname: ChargingAlien
+  name: store_alien_1
 game_objects:
 - args:
   - [730, 936]
@@ -218,13 +223,6 @@
   classname: Door
   name: to_cargo_bay
 - args:
-  - [2950, 1193]
-  - alientunnel1
-  - [1026, 1029]
-  - -45
-  classname: Door
-  name: to_alientunnels
-- args:
   - [1501, 978]
   - null
   - [1549, 1044]
@@ -347,7 +345,86 @@
 - args: [mess_switch_1, mess_switch_2]
   classname: puzzle.StateLogicalAndPuzzler
   name: mess_door_puzzle
+- args:
+  - [2950, 1193]
+  - hangar
+  - [2680, 1675]
+  - -45
+  classname: Door
+  name: to_hangar
+- args:
+  - [2596, 2248]
+  - - [2573, 1869]
+    - [2534, 1853]
+    - [2473, 1868]
+    - [2415, 1892]
+    - [2361, 1925]
+    - [2314, 1966]
+    - [2273, 2013]
+    - [2240, 2067]
+    - [2221, 2121]
+    - [2279, 2129]
+    - [2325, 2125]
+    - [2371, 2114]
+    - [2415, 2096]
+    - [2455, 2071]
+    - [2491, 2041]
+    - [2521, 2005]
+    - [2546, 1965]
+    - [2564, 1921]
+    - [2573, 1869]
+  classname: AcidFloor
+  name: store_room_sludge
+- args:
+  - [2436, 2040]
+  - 500
+  - 200
+  classname: GravityWell
+- args:
+  - [2136, 1636]
+  - Please keep the store locked at all times.
+  classname: Note
+  name: store_note
+- args:
+  - [766, 368]
+  - room_one_switch
+  classname: FloorLight
+  name: room_one_light_1
+- args:
+  - [684, 356]
+  - room_one_switch
+  classname: FloorLight
+  name: room_one_light_2
+- args:
+  - [602, 374]
+  - room_one_switch
+  classname: FloorLight
+  name: room_one_light_3
+- args:
+  - [584, 852]
+  classname: ToggleSwitch
+  name: room_one_switch
+- args:
+  - [1160, 548]
+  - room_two_switch
+  classname: FloorLight
+  name: room_two_light_1
+- args:
+  - [1240, 512]
+  - room_two_switch
+  classname: FloorLight
+  name: room_two_light_2
+- args:
+  - [1328, 500]
+  - room_two_switch
+  classname: FloorLight
+  name: room_two_light_3
+- args:
+  - [1304, 1024]
+  classname: ToggleSwitch
+  name: room_two_switch
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [766, 2334]
--- a/data/levels/finale	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/finale	Sat Sep 07 23:13:35 2013 +0200
@@ -42,6 +42,7 @@
   classname: AcidFloor
   name: acid_4
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [1000, 2400]
--- a/data/levels/hangar	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/hangar	Sat Sep 07 23:13:35 2013 +0200
@@ -9,7 +9,7 @@
   classname: Door
 - args:
   - [1700, 2510]
-  - 'HANGAR 7: Void lock failure detected - please call maintenance'
+  - 'HANGAR 7: Void lock failure detected - please call maintenance.'
   classname: Note
 - args:
   - [1700, 2210]
@@ -46,7 +46,7 @@
 - args:
   - [2880, 1401]
   - cargo_bay
-  - [60, 1200]
+  - [490, 1265]
   - 0
   - keycard_red
   classname: KeyedDoor
@@ -75,14 +75,14 @@
 - args:
   - [2680, 1701]
   - crew
-  - [100, 100]
+  - [2935, 1205]
   - 90
   - keycard_red
   classname: KeyedDoor
 - args:
   - [2680, 1101]
   - sheep
-  - [100, 450]
+  - [90, 450]
   - 90
   - keycard_red
   classname: KeyedDoor
@@ -170,6 +170,40 @@
   - [1650, 950]
   - 180
   classname: Door
+- args:
+  - [2595, 1700]
+  - To the Crew Quarters. Have your key-card ready.
+  classname: Note
+  name: crew_note
+- args:
+  - [2220, 2466]
+  - - [2220, 2466]
+    - [2385, 2466]
+    - [2385, 2091]
+    - [2220, 2091]
+  classname: ForceWolfFloor
+- args:
+  - [2220, 981]
+  - - [2220, 981]
+    - [2380, 981]
+    - [2380, 381]
+    - [2220, 381]
+  classname: ForceWolfFloor
+- args:
+  - [2350, 2387]
+  - To save lighting costs, please keep moonlights open when Titan is full.
+  classname: Note
+  name: moonhint
+- args:
+  - [2595, 1100]
+  - Agricultural Research Laboratory: Authorised research staff only.
+  classname: Note
+  name: note_sheep
+- args:
+  - [2880, 1495]
+  - Cargo Bay. Authorized personnel only.
+  classname: Note
+  name: cargo_note
 lines:
 - - [120, 1321]
   - [280, 1321]
@@ -177,6 +211,7 @@
   - [280, 1261]
 - - [280, 1161]
   - [280, 1101]
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [2400, 280]
--- a/data/levels/level1	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/level1	Sat Sep 07 23:13:35 2013 +0200
@@ -78,6 +78,7 @@
   - [750, 680]
 - - [950, 480]
   - [950, 680]
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [60, 780]
--- a/data/levels/level2	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/level2	Sat Sep 07 23:13:35 2013 +0200
@@ -42,6 +42,7 @@
   classname: collectable.KeyCard
   name: keycard_red
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [70, 440]
--- a/data/levels/sheep	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/sheep	Sat Sep 07 23:13:35 2013 +0200
@@ -23,12 +23,6 @@
   classname: SheepPen
   name: sheep_pen
 - args:
-  - [51, 450]
-  - sheep
-  - [100, 450]
-  - 0
-  classname: Door
-- args:
   - [700, 700]
   - [800, 700]
   - sheep_pen
@@ -45,8 +39,14 @@
   classname: Note
 - args:
   - [1000, 600]
-  - 'Joe, please put in an order with Maintenance for a new sheep pen gate. Make sure they give you the titanium one this time. Bob.'
+  - Joe, please put in an order with Maintenance for a new sheep pen gate. Make sure they give you the titanium one this time. Bob.
   classname: Note
+- args:
+  - [51, 450]
+  - hangar
+  - [2680, 1140]
+  - 0
+  classname: Door
 lines:
 - - [850, 650]
   - [850, 850]
@@ -80,6 +80,7 @@
   - [400, 600]
 - - [650, 500]
   - [650, 600]
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [50, 50]
--- a/data/levels/shuttle_1	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/shuttle_1	Sat Sep 07 23:13:35 2013 +0200
@@ -12,6 +12,7 @@
   - '<Ok, if I find the bastard who stole my sonic screwdriver, I will use their guts for void-lock grease! I think there's a spare in hangar 2.>'
   classname: Note
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [50, 300]
--- a/data/levels/shuttle_2	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/shuttle_2	Sat Sep 07 23:13:35 2013 +0200
@@ -12,6 +12,7 @@
   - 'All toolsets recalled to main hangar bay for inventory checks. Please speak to Maintenance Foreman for more information.'
   classname: Note
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [50, 300]
--- a/data/levels/start	Sat Sep 07 23:13:01 2013 +0200
+++ b/data/levels/start	Sat Sep 07 23:13:35 2013 +0200
@@ -81,7 +81,13 @@
   - room_4_switch
   classname: Hatch
   name: room_4_hatch
+- args:
+  - [550, 125]
+  - 'Press ''space'' to interact with the world. Press ''c'' to change form and ''z'' to attack.'
+  classname: Note
+  name: keyhints
 lines: []
+music: POL-cyber-factory-short.ogg
 polygons:
   1:
   - [50, 300]
--- a/nagslang/game_object.py	Sat Sep 07 23:13:01 2013 +0200
+++ b/nagslang/game_object.py	Sat Sep 07 23:13:35 2013 +0200
@@ -400,8 +400,12 @@
         )
 
     def _post_door_event(self, protagonist):
+        self.door_opened()
         DoorEvent.post(self.destination, self.dest_pos)
 
+    def door_opened(self):
+        pass
+
 
 class Door(BaseDoor):
     def __init__(self, space, position, destination, dest_pos, angle):
@@ -458,19 +462,18 @@
 
     @property
     def is_open(self):
-        return self._stored_state['is_open']
+        if self._stored_state['is_open']:
+            return True
+        return self.puzzler.glue.get_state_of(self._key_state)
+
+    def door_opened(self):
+        self._stored_state['is_open'] = True
 
     def set_stored_state_dict(self, stored_state):
         self._stored_state = stored_state
         self._stored_state.setdefault('is_open', False)
         return True
 
-    def update(self, dt):
-        if not self.is_open:
-            self._stored_state['is_open'] = self.puzzler.glue.get_state_of(
-                self._key_state)
-        super(PuzzleDoor, self).update(dt)
-
     @classmethod
     def requires(cls):
         return [("name", "string"), ("position", "coordinates"),
@@ -529,6 +532,11 @@
         return [("name", "string"), ("end1", "coordinates"),
                 ("end2", "coordinates"), ("key_state", "puzzler")]
 
+    # The level knows that bulkheads are magical
+    @classmethod
+    def movable(cls):
+        return True
+
 
 class ToggleSwitch(GameObject):
     zorder = ZORDER_LOW
@@ -741,14 +749,15 @@
 
     def apply_effect(self, object_to_move):
         movement = self.physicser.position - object_to_move.physicser.position
-        local_force = self.force * (1 - (self._radius / movement.length))
+        local_force = self.force * math.sqrt(
+            object_to_move.get_shape().body.mass)
         movement.length = local_force
-        object_to_move.environmental_movement(-movement)
+        object_to_move.environmental_movement(movement)
 
     @classmethod
     def requires(cls):
         return [("name", "string"), ("position", "coordinates"),
-                ("outline", "polygon (convex)")]
+                ("radius", "int"), ("force", "int")]
 
 
 class SheepPen(GameObject):
--- a/nagslang/level.py	Sat Sep 07 23:13:01 2013 +0200
+++ b/nagslang/level.py	Sat Sep 07 23:13:35 2013 +0200
@@ -41,6 +41,7 @@
         self.world = world
         self.world.level_state.setdefault(name, {})
         self.basetile = 'tiles/floor.png'
+        self.music = None
         self._tile_image = None
         self._surface = None
         self._base_surface = None
@@ -63,6 +64,7 @@
             'base_tile': self.basetile,
             'polygons': self.polygons,
             'lines': self.lines,
+            'music': self.music,
             'game_objects': self._game_objects,
             'enemies': self._enemies,
         }, f)
@@ -91,6 +93,7 @@
         data = self._get_data()
         self.x, self.y = data['size']
         self.basetile = data['base_tile']
+        self.music = data['music']
         for i, points in data['polygons'].iteritems():
             self.polygons[i] = []
             for point in points:
--- a/tools/area_editor.py	Sat Sep 07 23:13:01 2013 +0200
+++ b/tools/area_editor.py	Sat Sep 07 23:13:35 2013 +0200
@@ -879,13 +879,19 @@
         args = data['args']
         old_coords = list(args[0])
         param_defs = obj.requires()[1:]  # chop off name
-        for i, (_key, key_type) in enumerate(param_defs):
+        for i, (key, key_type) in enumerate(param_defs):
             if i > len(args):
                 break
             if key_type == "polygon (convex)":
                 new_outline = self.level.translate_poly(
                     args[i], old_coords, new_coords)
                 obj.update_image(new_outline)
+            if key == 'end2':
+                mid = shape.a + (shape.b - shape.a) / 2
+                delta = new_coords - mid
+                shape.unsafe_set_a(shape.a + delta)
+                shape.unsafe_set_b(shape.b + delta)
+                shape.update(new_pos, (0, 0))
         self.invalidate()
 
     def _update_pos(self, obj, new_pos):
@@ -896,12 +902,25 @@
         args[0][0] = new_coords[0]
         args[0][1] = new_coords[1]
         param_defs = obj.requires()[1:]  # chop off name
-        for i, (_key, key_type) in enumerate(param_defs):
+        for i, (key, key_type) in enumerate(param_defs):
             if i > len(args):
                 break
             if key_type == "polygon (convex)":
                 args[i] = self.level.translate_poly(
                     args[i], old_coords, new_coords)
+            if key == 'end2':
+                # Horrible, horrible hackery
+                shape = obj.get_shape()
+                mid = shape.a + (shape.b - shape.a) / 2
+                delta = - mid + new_coords
+                point2 = list(args[i])
+                mid = pymunk.Vec2d(old_coords) + (
+                    pymunk.Vec2d(point2) - old_coords) / 2
+                delta = new_coords - mid
+                args[0][0] = old_coords[0] + delta.x
+                args[0][1] = old_coords[1] + delta.y
+                args[i][0] = point2[0] + delta.x
+                args[i][1] = point2[1] + delta.y
         self.level.reset_objs()
         self.invalidate()