# HG changeset patch # User David Sharpe # Date 1378588415 -7200 # Node ID eb7909b354cda50d6988bd93002f40ee0281b845 # Parent 6d2f6fcd914d5b86bdf29541be41bbc536f767f4# Parent ea9e489315f7fe245bd35e9b87e108cb684a8919 Merge diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/alientunnel1 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/alientunnel2 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/alientunnel3 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/cargo_bay --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/crew --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/finale --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/hangar --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/level1 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/level2 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/sheep --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/shuttle_1 --- 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 @@ - '' classname: Note lines: [] +music: POL-cyber-factory-short.ogg polygons: 1: - [50, 300] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/shuttle_2 --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd data/levels/start --- 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] diff -r 6d2f6fcd914d -r eb7909b354cd nagslang/game_object.py --- 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): diff -r 6d2f6fcd914d -r eb7909b354cd nagslang/level.py --- 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: diff -r 6d2f6fcd914d -r eb7909b354cd tools/area_editor.py --- 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()