'=': Terrain('=', 'glass', blocks_sound=True, blocks_movement=True),
'T': Terrain('T', 'table', blocks_movement=True),
}
+ self.draw_control_presets = True
if os.path.exists(self.io.save_file):
if not os.path.isfile(self.io.save_file):
raise GameError('save file path refers to non-file')
quote(t.thing_char)), c_id)
if hasattr(t, 'installable') and not t.portable:
self.io.send('THING_INSTALLED %s' % (t.id_), c_id)
- if hasattr(t, 'design'):
+ if t.type_ == 'Hat':
self.io.send('THING_HAT %s %s' % (t.id_,
quote(t.design)), c_id)
+ elif hasattr(t, 'design'):
+ self.io.send('THING_DESIGN %s %s %s'
+ % (t.id_, t.design_size, quote(t.design)),
+ c_id)
for t in [t for t in player.seen_things if t.carrying]:
# send this last so all carryable things are already created
self.io.send('THING_CARRYING %s %s' % (t.id_, t.carrying.id_),
for s in [s for s in self.things
if s.type_ == 'SpawnPoint' and s.name == t.name]:
t.position = s.position
- break
+ if s.temporary:
+ self.remove_thing(s)
+ break
def run_tick(self):
t = self.get_player(connection_id)
if hasattr(t, 'name'):
self.io.send('CHAT ' + quote(t.name + ' left the map.'))
+ spawn_point = self.add_thing('SpawnPoint', t.position)
+ spawn_point.temporary = True
+ spawn_point.name = t.name
self.remove_thing(t)
to_delete += [connection_id]
for connection_id in to_delete:
with open(self.io.save_file, 'w') as f:
write(f, 'TURN %s' % self.turn)
map_geometry_shape = self.get_map_geometry_shape()
+ # must come before MAP, otherwise first get_map uses the default
+ # TODO: refactor into MAP
+ write(f, 'MAP_CONTROL_PRESETS %s' % int(self.draw_control_presets))
write(f, 'MAP %s %s' % (map_geometry_shape, self.map_geometry.size,))
for terrain in self.terrains.values():
write(f, 'TERRAIN %s %s %s %s %s' % (quote(terrain.character),
elif t.type_ == 'Hat':
write(f, 'THING_HAT_DESIGN %s %s' % (t.id_,
quote(t.design)))
+ elif hasattr(t, 'design'):
+ write(f, 'GOD_THING_DESIGN %s %s' % (t.id_, quote(t.design)))
elif t.type_ == 'MusicPlayer':
write(f, 'THING_MUSICPLAYER_SETTINGS %s %s %s %s' %
(t.id_, int(t.playing), t.playlist_index, int(t.repeat)))
elif t.type_ == 'Crate':
for item in t.content:
write(f, 'THING_CRATE_ITEM %s %s' % (t.id_, item.id_))
+ elif t.type_ == 'SpawnPoint':
+ timestamp = 0
+ if t.temporary:
+ timestamp = int(t.created_at.timestamp())
+ write(f, 'THING_SPAWNPOINT_CREATED %s %s' % (t.id_,
+ timestamp))
+ next_thing_id = self.new_thing_id()
+ for t in [t for t in self.things if t.type_ == 'Player']:
+ write(f, 'THING %s %s SpawnPoint %s'
+ % (t.position[0], t.position[1], next_thing_id))
+ write(f, 'GOD_THING_NAME %s %s' % (next_thing_id, t.name))
+ write(f, 'THING_SPAWNPOINT_CREATED %s %s'
+ % (next_thing_id, int(datetime.datetime.now().timestamp())))
+ next_thing_id += 1
write(f, 'SPAWN_POINT %s %s' % (self.spawn_point[0],
self.spawn_point[1]))
maps = self.map_controls
if big_yx not in maps:
maps[big_yx] = SaveableMap(self.map_geometry)
- if type_ == 'control':
+ if self.draw_control_presets and type_ == 'control':
maps[big_yx].draw_presets(big_yx.y % 2)
return maps[big_yx]