home · contact · privacy
Fix save game corruption due to insufficient .in_inventory handling.
authorChristian Heller <c.heller@plomlompom.de>
Sat, 27 Apr 2019 10:29:34 +0000 (12:29 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 27 Apr 2019 10:29:34 +0000 (12:29 +0200)
new/plomrogue/commands.py
new/plomrogue/things.py

index ef18bbbedb9db5b5499e15bfa1c5a72e3234c045..b0f9460c3dbd86ab03796905339985a0d39bb11d 100644 (file)
@@ -36,6 +36,7 @@ def cmd_THING_TYPE(game, i, type_):
     #        continue
     #    setattr(t_new, attr_name, attr_old)
     t_new.position = t_old.position
+    t_new.in_inventory = t_old.in_inventory
     t_old_index = game.world.things.index(t_old)
     game.world.things[t_old_index] = t_new
 cmd_THING_TYPE.argtypes = 'int:nonneg string:thingtype'
@@ -46,8 +47,11 @@ def cmd_THING_POS(game, i, big_yx, small_yx):
 cmd_THING_POS.argtypes = 'int:nonneg yx_tuple yx_tuple:nonneg'
 
 def cmd_THING_INVENTORY(game, id_, ids):
-    t = game.world.get_thing(id_)
-    t.inventory = ids  # TODO: test whether valid IDs
+    carrier = game.world.get_thing(id_)
+    carrier.inventory = ids
+    for id_ in ids:
+        t = game.world.get_thing(id_)
+        t.in_inventory = True
 cmd_THING_INVENTORY.argtypes = 'int:nonneg seq:int:nonneg'
 
 def cmd_THING_HEALTH(game, id_, health):
index df8c78af6c38e2560cce07a4e65186d280582e71..07c626525cf4ca2c94dcfe4011bcf219837665bf 100644 (file)
@@ -272,7 +272,8 @@ class ThingAnimate(Thing):
             small_pos = thing.position[1]
             pos_y = calc_pos_in_fov(big_pos[0], small_pos[0], offset[0], size[0])
             pos_x = calc_pos_in_fov(big_pos[1], small_pos[1], offset[1], size[1])
-            if pos_y < 0 or pos_x < 0 or pos_y >= fov_size[0] or pos_x >= fov_size[1]:
+            if pos_y < 0 or pos_x < 0 or\
+               pos_y >= fov_size[0] or pos_x >= fov_size[1]:
                 continue
             if (not thing.in_inventory) and stencil[(pos_y, pos_x)] == '.':
                 visible_things += [thing]