home
·
contact
·
privacy
projects
/
plomrogue2-experiments
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix bug that created multiple objects of same ID.
[plomrogue2-experiments]
/
new
/
plomrogue
/
game.py
diff --git
a/new/plomrogue/game.py
b/new/plomrogue/game.py
index a2421ad6417b9b195930c947d1eb44c5c0e6eb6f..74502cac48bfd8997b019aa7daf30372111d2548 100755
(executable)
--- a/
new/plomrogue/game.py
+++ b/
new/plomrogue/game.py
@@
-8,7
+8,7
@@
from plomrogue.commands import (cmd_GEN_WORLD, cmd_GET_GAMESTATE,
cmd_GET_PICKABLE_ITEMS, cmd_MAP_SIZE,
cmd_TERRAIN_LINE, cmd_PLAYER_ID,
cmd_TURN, cmd_SWITCH_PLAYER, cmd_SAVE)
cmd_GET_PICKABLE_ITEMS, cmd_MAP_SIZE,
cmd_TERRAIN_LINE, cmd_PLAYER_ID,
cmd_TURN, cmd_SWITCH_PLAYER, cmd_SAVE)
-from plomrogue.mapping import MapGeometryHex, Map, YX
+from plomrogue.mapping import MapGeometryHex, Map
Chunk
, YX
from plomrogue.parser import Parser
from plomrogue.io import GameIO
from plomrogue.misc import quote
from plomrogue.parser import Parser
from plomrogue.io import GameIO
from plomrogue.misc import quote
@@
-204,13
+204,17
@@
class Game(GameBase):
def new_thing_id(self):
if len(self.things) == 0:
return 0
def new_thing_id(self):
if len(self.things) == 0:
return 0
+ # DANGEROUS – if anywhere we append a thing to the list of lower
+ # ID than the highest-value ID, this might lead to re-using an
+ # already active ID. This should not happen anywhere in the
+ # code, but a break here might be more visible.
return self.things[-1].id_ + 1
def get_map(self, map_pos):
if not (map_pos in self.maps and
self.maps[map_pos].size == self.map_size):
return self.things[-1].id_ + 1
def get_map(self, map_pos):
if not (map_pos in self.maps and
self.maps[map_pos].size == self.map_size):
- self.maps[map_pos] = Map
(self.map_size,
- awakeness=self.max_map_awakeness)
+ self.maps[map_pos] = Map
Chunk(self.map_size)
+ self.maps[map_pos].awake = self.max_map_awakeness
for pos in self.maps[map_pos]:
self.maps[map_pos][pos] = '.'
return self.maps[map_pos]
for pos in self.maps[map_pos]:
self.maps[map_pos][pos] = '.'
return self.maps[map_pos]
@@
-270,6
+274,8
@@
class Game(GameBase):
t = self.add_thing_at_random(map_pos, t_type)
if average_health:
t.health = average_health
t = self.add_thing_at_random(map_pos, t_type)
if average_health:
t.health = average_health
+ #if hasattr(t, 'health'):
+ # print('DEBUG create', t.type_, t.health)
for map_pos in self.maps:
m = self.maps[map_pos]
for map_pos in self.maps:
m = self.maps[map_pos]
@@
-277,6
+283,7
@@
class Game(GameBase):
# Newly inside chunks are regenerated from .stats.
if not m.awake:
# Newly inside chunks are regenerated from .stats.
if not m.awake:
+ #print('DEBUG regen stats', map_pos, m.stats)
regenerate_chunk_from_map_stats(m)
# Inside chunks are set to max .awake and don't collect
regenerate_chunk_from_map_stats(m)
# Inside chunks are set to max .awake and don't collect
@@
-289,7
+296,9
@@
class Game(GameBase):
# inside are disappeared.
elif m.awake > 0:
m.awake -= 1
# inside are disappeared.
elif m.awake > 0:
m.awake -= 1
- for t in self.things:
+ # We iterate over a list comprehension of self.things,
+ # since we might delete elements of self.things.
+ for t in [t for t in self.things]:
if t.position[0] == map_pos:
if not t.type_ in m.stats:
m.stats[t.type_] = {'population': 0,
if t.position[0] == map_pos:
if not t.type_ in m.stats:
m.stats[t.type_] = {'population': 0,
@@
-298,7
+307,10
@@
class Game(GameBase):
if isinstance(t, ThingAnimate):
m.stats[t.type_]['health'] += t.health
if not m.awake:
if isinstance(t, ThingAnimate):
m.stats[t.type_]['health'] += t.health
if not m.awake:
+ # TODO: Handle inventory.
del self.things[self.things.index(t)]
del self.things[self.things.index(t)]
+ #if not m.awake:
+ # print('DEBUG sleep stats', map_pos, m.stats)
while True:
player_i = self.things.index(self.player)
while True:
player_i = self.things.index(self.player)