home · contact · privacy
Add player-identifying meta characters next to @ symbols.
[plomrogue2] / plomrogue / game.py
index 1ffbf1acfa186f900d96a8252bd5db58dd5fa0a8..29e2de15fe605f92f11cebc967815927ea9b7fd8 100755 (executable)
@@ -4,6 +4,7 @@ from plomrogue.errors import GameError, PlayError
 from plomrogue.io import GameIO
 from plomrogue.misc import quote
 from plomrogue.mapping import YX, MapGeometrySquare, Map
 from plomrogue.io import GameIO
 from plomrogue.misc import quote
 from plomrogue.mapping import YX, MapGeometrySquare, Map
+import string
 
 
 
 
 
 
@@ -48,6 +49,8 @@ class Game(GameBase):
         self.map_control_passwords = {}
         self.annotations = {}
         self.portals = {}
         self.map_control_passwords = {}
         self.annotations = {}
         self.portals = {}
+        self.player_chars = string.digits + string.ascii_letters
+        self.player_char_i = -1
         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')
         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')
@@ -76,7 +79,6 @@ class Game(GameBase):
         return True
 
     def get_string_options(self, string_option_type):
         return True
 
     def get_string_options(self, string_option_type):
-        import string
         if string_option_type == 'direction':
             return self.map_geometry.get_directions()
         elif string_option_type == 'char':
         if string_option_type == 'direction':
             return self.map_geometry.get_directions()
         elif string_option_type == 'char':
@@ -110,6 +112,9 @@ class Game(GameBase):
                 if hasattr(t, 'nickname'):
                     self.io.send('THING_NAME %s %s' % (t.id_,
                                                        quote(t.nickname)), c_id)
                 if hasattr(t, 'nickname'):
                     self.io.send('THING_NAME %s %s' % (t.id_,
                                                        quote(t.nickname)), c_id)
+                if hasattr(t, 'player_char'):
+                    self.io.send('THING_CHAR %s %s' % (t.id_,
+                                                       quote(t.player_char)), c_id)
             for yx in [yx for yx in self.portals
                        if player.fov_stencil[yx] == '.']:
                 self.io.send('PORTAL %s %s' % (yx, quote(self.portals[yx])), c_id)
             for yx in [yx for yx in self.portals
                        if player.fov_stencil[yx] == '.']:
                 self.io.send('PORTAL %s %s' % (yx, quote(self.portals[yx])), c_id)
@@ -187,6 +192,12 @@ class Game(GameBase):
             return 1
         return max([t.id_ for t in self.things]) + 1
 
             return 1
         return max([t.id_ for t in self.things]) + 1
 
+    def get_next_player_char(self):
+        self.player_char_i += 1
+        if self.player_char_i >= len(self.player_chars):
+            self.player_char_i = 0
+        return self.player_chars[self.player_char_i]
+
     def save(self):
 
       def write(f, msg):
     def save(self):
 
       def write(f, msg):