-from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE,
- Task_FLATTEN_SURROUNDINGS)
from plomrogue.errors import GameError, PlayError
from plomrogue.io import GameIO
from plomrogue.misc import quote
self.set_line(3, 'X' * self.geometry.size.x)
self.set_line(4, 'X' * self.geometry.size.x)
for y in range(self.geometry.size.y):
- self[YX(y,0)] = 'X'
- self[YX(y,1)] = 'X'
- self[YX(y,2)] = 'X'
- self[YX(y,3)] = 'X'
- self[YX(y,4)] = 'X'
+ self[YX(y, 0)] = 'X'
+ self[YX(y, 1)] = 'X'
+ self[YX(y, 2)] = 'X'
+ self[YX(y, 3)] = 'X'
+ self[YX(y, 4)] = 'X'
elif type(self.geometry) == MapGeometryHex:
# TODO: for this to work we need a map side length divisible by 6.
- def draw_grid(offset=YX(0,0)):
+ def draw_grid(offset=YX(0, 0)):
dirs = ('DOWNRIGHT', 'RIGHT', 'UPRIGHT', 'RIGHT')
def draw_snake(start):
if alternate_hex:
draw_snake(offset + YX(0, 0))
- draw_snake(offset + YX((0 + alternate_hex) * distance, -int(1.5*distance)))
- draw_snake(offset + YX((1 + alternate_hex) * distance, 0))
- draw_snake(offset + YX((2 + alternate_hex) * distance, -int(1.5*distance)))
+ draw_snake(offset + YX((0 + alternate_hex) * distance,
+ -int(1.5 * distance)))
+ draw_snake(offset + YX((1 + alternate_hex) * distance,
+ 0))
+ draw_snake(offset + YX((2 + alternate_hex) * distance,
+ -int(1.5 * distance)))
distance = self.geometry.size.y // 3
draw_grid()
- draw_grid(YX(2,0))
- draw_grid(YX(0,2))
- draw_grid(YX(1,0))
- draw_grid(YX(0,1))
- draw_grid(YX(-1,0))
- draw_grid(YX(0,-1))
- draw_grid(YX(-2,0))
- draw_grid(YX(0,-2))
+ draw_grid(YX(2, 0))
+ draw_grid(YX(0, 2))
+ draw_grid(YX(1, 0))
+ draw_grid(YX(0, 1))
+ draw_grid(YX(-1, 0))
+ draw_grid(YX(0, -1))
+ draw_grid(YX(-2, 0))
+ draw_grid(YX(0, -2))
self.modified = old_modified
self.map_controls = {}
self.map_control_passwords = {}
self.annotations = {}
+ self.spawn_point = YX(0, 0), YX(0, 0)
self.portals = {}
self.player_chars = string.digits + string.ascii_letters
self.player_char_i = -1
return self.map_geometry.__class__.__name__[len('MapGeometry'):]
def get_player(self, connection_id):
- if not connection_id in self.sessions:
+ if connection_id not in self.sessions:
return None
player = self.get_thing(self.sessions[connection_id]['thing_id'])
return player
for little_yx in [little_yx for little_yx in self.annotations[big_yx]
if player.fov_test(big_yx, little_yx)]:
target_yx = player.fov_stencil.target_yx(big_yx, little_yx)
- annotation = self.annotations[big_yx][little_yx]
self.io.send('ANNOTATION_HINT %s' % (target_yx,), c_id)
self.io.send('GAME_STATE_COMPLETE')
def save(self):
- def write(f, msg):
- f.write(msg + '\n')
-
- with open(self.io.save_file, 'w') as f:
- write(f, 'TURN %s' % self.turn)
- map_geometry_shape = self.get_map_geometry_shape()
- write(f, 'MAP %s %s' % (map_geometry_shape, self.map_geometry.size,))
- for big_yx in [yx for yx in self.maps if self.maps[yx].modified]:
- for y, line in self.maps[big_yx].lines():
- write(f, 'MAP_LINE %s %5s %s' % (big_yx, y, quote(line)))
- for big_yx in self.annotations:
- for little_yx in self.annotations[big_yx]:
- write(f, 'GOD_ANNOTATE %s %s %s' %
- (big_yx, little_yx, quote(self.annotations[big_yx][little_yx])))
- for big_yx in self.portals:
- for little_yx in self.portals[big_yx]:
- write(f, 'GOD_PORTAL %s %s %s' % (big_yx, little_yx,
- quote(self.portals[big_yx][little_yx])))
- for big_yx in [yx for yx in self.map_controls
- if self.map_controls[yx].modified]:
- for y, line in self.map_controls[big_yx].lines():
- write(f, 'MAP_CONTROL_LINE %s %5s %s' % (big_yx, y, quote(line)))
- for tile_class in self.map_control_passwords:
- write(f, 'MAP_CONTROL_PW %s %s' % (tile_class,
- self.map_control_passwords[tile_class]))
- for pw in self.admin_passwords:
- write(f, 'ADMIN_PASSWORD %s' % pw)
- for t in [t for t in self.things if not t.type_ == 'Player']:
- write(f, 'THING %s %s %s %s' % (t.position[0],
- t.position[1], t.type_, t.id_))
- if hasattr(t, 'name'):
- write(f, 'THING_NAME %s %s' % (t.id_, quote(t.name)))
+ def write(f, msg):
+ f.write(msg + '\n')
+
+ with open(self.io.save_file, 'w') as f:
+ write(f, 'TURN %s' % self.turn)
+ map_geometry_shape = self.get_map_geometry_shape()
+ write(f, 'MAP %s %s' % (map_geometry_shape, self.map_geometry.size,))
+ for big_yx in [yx for yx in self.maps if self.maps[yx].modified]:
+ for y, line in self.maps[big_yx].lines():
+ write(f, 'MAP_LINE %s %5s %s' % (big_yx, y, quote(line)))
+ for big_yx in self.annotations:
+ for little_yx in self.annotations[big_yx]:
+ write(f, 'GOD_ANNOTATE %s %s %s' %
+ (big_yx, little_yx, quote(self.annotations[big_yx][little_yx])))
+ for big_yx in self.portals:
+ for little_yx in self.portals[big_yx]:
+ write(f, 'GOD_PORTAL %s %s %s' % (big_yx, little_yx,
+ quote(self.portals[big_yx][little_yx])))
+ for big_yx in [yx for yx in self.map_controls
+ if self.map_controls[yx].modified]:
+ for y, line in self.map_controls[big_yx].lines():
+ write(f, 'MAP_CONTROL_LINE %s %5s %s' % (big_yx, y, quote(line)))
+ for tile_class in self.map_control_passwords:
+ write(f, 'MAP_CONTROL_PW %s %s' % (tile_class,
+ self.map_control_passwords[tile_class]))
+ for pw in self.admin_passwords:
+ write(f, 'ADMIN_PASSWORD %s' % pw)
+ for t in [t for t in self.things if not t.type_ == 'Player']:
+ write(f, 'THING %s %s %s %s' % (t.position[0],
+ t.position[1], t.type_, t.id_))
+ if hasattr(t, 'name'):
+ write(f, 'GOD_THING_NAME %s %s' % (t.id_, quote(t.name)))
+ write(f, 'SPAWN_POINT %s %s' % (self.spawn_point[0],
+ self.spawn_point[1]))
def get_map(self, big_yx, type_='normal'):
if type_ == 'normal':
maps = self.maps
elif type_ == 'control':
maps = self.map_controls
- if not big_yx in maps:
+ if big_yx not in maps:
maps[big_yx] = SaveableMap(self.map_geometry)
if type_ == 'control':
maps[big_yx].draw_presets(big_yx.y % 2)
self.annotations = {}
self.portals = {}
self.admin_passwords = []
+ self.spawn_point = YX(0, 0), YX(0, 0)
self.map_geometry = map_geometry
self.map_control_passwords = {'X': 'secret'}
- self.get_map(YX(0,0))
- self.get_map(YX(0,0), 'control')
+ self.get_map(YX(0, 0))
+ self.get_map(YX(0, 0), 'control')
self.annotations = {}