X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=inline;f=plomrogue%2Fgame.py;h=a3a636def40ba816c7dd658465f47bb2a59d4a54;hb=0d5dbd69d9e0fb1460a7663b24a6fba8f958ced5;hp=e1c92cf21cd477080ccff2b3cffba660a200b7dc;hpb=74c0ec0247f058b977996f9e1e2d696f3d2d162b;p=plomrogue2
diff --git a/plomrogue/game.py b/plomrogue/game.py
index e1c92cf..a3a636d 100755
--- a/plomrogue/game.py
+++ b/plomrogue/game.py
@@ -12,7 +12,7 @@ class GameBase:
def __init__(self):
self.turn = 0
self.things = []
- self.map_geometry = MapGeometrySquare(YX(24, 40))
+ self.map_geometry = MapGeometrySquare(YX(32, 32))
self.commands = {}
def get_thing(self, id_):
@@ -115,6 +115,7 @@ import os
class Game(GameBase):
def __init__(self, save_file, *args, **kwargs):
+ from plomrogue.misc import Terrain
super().__init__(*args, **kwargs)
self.changed = True
self.changed_tiles = []
@@ -131,21 +132,18 @@ class Game(GameBase):
self.spawn_point = YX(0, 0), YX(0, 0)
self.portals = {}
self.player_chars = string.digits + string.ascii_letters
+ self.players_hat_chars = {}
self.player_char_i = -1
self.admin_passwords = []
self.send_gamestate_interval = datetime.timedelta(seconds=0.04)
self.last_send_gamestate = datetime.datetime.now() -\
self.send_gamestate_interval
self.terrains = {
- '.': 'floor',
- 'X': 'wall',
- '=': 'window',
- '#': 'bed',
- 'T': 'desk',
- '8': 'cupboard',
- '[': 'glass door',
- 'o': 'sink',
- 'O': 'toilet'
+ '.': Terrain('.', 'floor'),
+ 'X': Terrain('X', 'wall', blocks_light=True, blocks_sound=True,
+ blocks_movement=True),
+ '=': Terrain('=', 'glass', blocks_sound=True, blocks_movement=True),
+ 'T': Terrain('T', 'table', blocks_movement=True),
}
if os.path.exists(self.io.save_file):
if not os.path.isfile(self.io.save_file):
@@ -280,6 +278,8 @@ class Game(GameBase):
# collected here as a shortcut, but a cleaner way would be to
# differentiate the changes somehow.
self.io.send('PSEUDO_FOV_WIPE', c_id)
+ self.io.send('PLAYERS_HAT_CHARS ' + quote(player.get_cookie_chars()),
+ c_id)
for t in player.seen_things:
target_yx = player.fov_stencil.target_yx(*t.position)
self.io.send('THING %s %s %s %s %s %s'
@@ -431,6 +431,28 @@ class Game(GameBase):
self.player_char_i = 0
return self.player_chars[self.player_char_i]
+ def get_foo_blockers(self, foo):
+ foo_blockers = ''
+ for t in self.terrains.values():
+ block_attr = getattr(t, 'blocks_' + foo)
+ if block_attr:
+ foo_blockers += t.character
+ return foo_blockers
+
+ def get_sound_blockers(self):
+ return self.get_foo_blockers('sound')
+
+ def get_light_blockers(self):
+ return self.get_foo_blockers('light')
+
+ def get_movement_blockers(self):
+ return self.get_foo_blockers('movement')
+
+ def get_flatland(self):
+ for t in self.terrains.values():
+ if not t.blocks_movement:
+ return t.character
+
def save(self):
def write(f, msg):
@@ -440,6 +462,12 @@ class Game(GameBase):
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 terrain in self.terrains.values():
+ write(f, 'TERRAIN %s %s %s %s %s' % (quote(terrain.character),
+ quote(terrain.description),
+ int(terrain.blocks_light),
+ int(terrain.blocks_sound),
+ int(terrain.blocks_movement)))
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)))
@@ -466,6 +494,9 @@ class Game(GameBase):
for name in self.hats:
write(f, 'GOD_PLAYER_HAT %s %s' % (quote(name),
quote(self.hats[name])))
+ for name in self.players_hat_chars:
+ write(f, 'GOD_PLAYERS_HAT_CHARS %s %s' %
+ (quote(name), quote(self.players_hat_chars[name])))
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_))