X-Git-Url: https://plomlompom.com/repos/?p=plomrogue2-experiments;a=blobdiff_plain;f=new%2Fplomrogue%2Fgame.py;h=a2421ad6417b9b195930c947d1eb44c5c0e6eb6f;hp=0e1ff9aecc6b22acfc0eafc230a0b6d3a19f2ca8;hb=aa8d5029e32783fa1a56cedb4c0b8aa8e79885e4;hpb=569bb0b9683cfd5db1fa100e49127fe84b39f0ac diff --git a/new/plomrogue/game.py b/new/plomrogue/game.py index 0e1ff9a..a2421ad 100755 --- a/new/plomrogue/game.py +++ b/new/plomrogue/game.py @@ -94,6 +94,7 @@ class Game(GameBase): 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): @@ -208,7 +209,8 @@ class Game(GameBase): 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] = Map(self.map_size, + awakeness=self.max_map_awakeness) for pos in self.maps[map_pos]: self.maps[map_pos][pos] = '.' return self.maps[map_pos] @@ -248,32 +250,38 @@ class Game(GameBase): 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 + 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 + 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. @@ -289,7 +297,6 @@ class Game(GameBase): 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)]