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, MapChunk, YX
from plomrogue.parser import Parser
from plomrogue.io import GameIO
from plomrogue.misc import quote
self.player_id = 0
self.player_is_alive = True
self.maps = {}
+ self.max_map_awakeness = 100
self.rand = PRNGod(0)
def get_string_options(self, string_option_type):
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)
+ self.maps[map_pos] = MapChunk(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]
self.player.proceed(is_AI=False)
def reality_bubble():
- import math
+
+ def regenerate_chunk_from_map_stats(map_):
+ import math
+ max_stat = self.max_map_awakeness
+ for t_type in map_.stats:
+ stat = map_.stats[t_type]
+ to_create = stat['population'] // max_stat
+ mod_created = int(self.rand.randint(0, max_stat - 1) <
+ (stat['population'] % max_stat))
+ to_create = (stat['population'] // max_stat) + mod_created
+ if to_create == 0:
+ continue
+ average_health = None
+ if stat['health'] > 0:
+ average_health = math.ceil(stat['health'] /
+ stat['population'])
+ for i in range(to_create):
+ 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]
if map_pos in self.player.close_maps:
# Newly inside chunks are regenerated from .stats.
if not m.awake:
- for t_type in m.stats:
- stat = m.stats[t_type]
- to_create = stat['population'] // 100
- to_create = stat['population'] // 100 +\
- int(self.rand.randint(0, 99) < (stat['population'] % 100))
- if to_create == 0:
- continue
- average_health = None
- if stat['health'] > 0:
- average_health = math.ceil(stat['health'] /
- stat['population'])
- for i in range(to_create):
- t = self.add_thing_at_random(map_pos, t_type)
- if average_health:
- t.health = average_health
+ #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
# stats.
- m.awake = 100
+ m.awake = self.max_map_awakeness
m.stats = {}
# Outside chunks grow distant through .awake decremention.
m.stats[t.type_]['population'] += 1
if isinstance(t, ThingAnimate):
m.stats[t.type_]['health'] += t.health
- if not m.awake:
if not m.awake:
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)