def New_Game(): get_name() ECS_Storage.init() CM.new_Component('Poison') config.DungeonLevelIds = {} config.CurrentDungeonLevel = 0 config.PlayerId = EM.new_Id() config.PlayerAttack = EM.new_Id() config.fov_recompute = True config.game_msg = [] config.game_state = 'playing' config.xptolevel = 66.6 CM.new_Component('ToLevel') CM.add_Component(config.PlayerId, 'Tile', Tile('Player', '@', False, True, Color.sky)) CM.add_Component(config.PlayerId, 'Coord', Coord(config.playscreen_width / 2, config.playscreen_height / 2)) deatheffects = [player_death] CM.add_Component(config.PlayerId, 'Death', Death('You have died. What a pity.' + ' Did you even manage to get any loot?', '%', effects=deatheffects)) CM.add_Component(config.PlayerId, 'Creature', Creature(10, 0, 10, 10, 7, 0, special={})) CM.add_Component(config.PlayerId, 'Level', Level()) CM.add_Component(config.PlayerAttack, 'Attack', Attack(1, 4)) next_level() Message('Welcome young adventurer! You have just entered my dungeon and' + ' through my deal with the adventurers guild you may explore my' + ' first 12 levels! Though of course everything will still try to' + ' kill you but atleast once finish there is an easy passage out!', Color.red)
def create_stairs(dungeonlevelid): stairs = EM.new_Id() CM.add_Component(stairs, 'Tile', Tile('Stairs Down', '>', True, True, Color.map_tile_visible)) CM.add_Component(stairs, 'Coord', Coord(config.playscreen_width / 2, config.playscreen_height / 2)) CM.add_Component(stairs, 'ToLevel', ToLevel(2)) CM.add_Component(stairs, 'Seen', Seen(seen=True)) dungeonlevelid = config.DungeonLevelIds[config.CurrentDungeonLevel] firstlevel = CM.get_Component('DungeonLevel', dungeonlevelid) firstlevel.FeatureIds.append(stairs)
def make_lion(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Lion', 'l', False, True, color=Color.yellow)) CM.add_Component(newmonsterid, 'Death', Death('Dead on the floor a lion lays.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(30, 2, 10, 15, 6, 81)) CM.add_Component(newmonsterid, 'Action', Lion_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_hawk(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Hawk', 'h', False, True, color=Color.darker_orange)) CM.add_Component(newmonsterid, 'Death', Death('The dead hawk flutters to the ground dead.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(10, 0, 10, 25, 10, 73)) CM.add_Component(newmonsterid, 'Action', Hawk_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_kangaroo(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Kangaroo', 'k', False, True, color=Color.dark_sepia)) CM.add_Component(newmonsterid, 'Death', Death('This kangaroo won\'t be hopping anymore.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(10, 0, 10, 25, 10, 73)) CM.add_Component(newmonsterid, 'Action', Kangaroo_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_frog(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Frog', 'f', False, True, color=Color.lighter_green)) CM.add_Component(newmonsterid, 'Death', Death('Squished frog, how droll.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(10, 0, 5, 20, 5, 61)) CM.add_Component(newmonsterid, 'Action', Frog_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_dog(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Dog', 'd', False, True, color=Color.darker_yellow)) CM.add_Component(newmonsterid, 'Death', Death('The little doggie wimpers as it falls over.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(12, 1, 14, 8, 5, 26, special={'Dodge': 10})) CM.add_Component(newmonsterid, 'Action', Dog_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_imp(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Imp', 'i', False, True, color=Color.red)) CM.add_Component(newmonsterid, 'Death', Death('The dead imp quickly fades from reality.', '.', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(20, 0, 10, 18, 4, 79)) CM.add_Component(newmonsterid, 'Action', Imp_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_bat(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Bat', 'b', False, True, color=Color.dark_gray)) CM.add_Component(newmonsterid, 'Death', Death('The small bat lets out one final pitiful squeak.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(3, 0, 8, 10, 5, 15)) CM.add_Component(newmonsterid, 'Action', Bat_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_hobgoblin(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Hobgoblin', 'G', False, True, color=Color.dark_green)) deatheffects = [death_cleanup, hobs_choice] CM.add_Component(newmonsterid, 'Death', Death('Hobgoblins die like goblins, just darker.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(30, 3, 12, 10, 8, 272)) CM.add_Component(newmonsterid, 'Action', Goblin_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_elephant(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Elephant', 'e', False, True, color=Color.gray)) CM.add_Component(newmonsterid, 'Death', Death('Before like an angry mountain this elephant ' + 'is now just a boulder.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(30, 1, 10, 5, 7, 42)) CM.add_Component(newmonsterid, 'Action', Elephant_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_poison_frog(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Poison Frog', 'F', False, True, color=Color.red)) deatheffects = [death_cleanup, poison_choice] CM.add_Component(newmonsterid, 'Death', Death('Congradulations! You didn\'t even need a blender.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(20, 0, 10, 21, 5, 244)) CM.add_Component(newmonsterid, 'Action', Frog_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_goblin(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Goblin', 'g', False, True, color=Color.green)) CM.add_Component(newmonsterid, 'Death', Death('A dead goblin, now this is ' + 'generic adventuring fair!', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(20, 2, 10, 10, 8, 68)) CM.add_Component(newmonsterid, 'Action', Goblin_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_jellyfish(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Jellyfish', 'j', False, True, color=Color.white)) CM.add_Component(newmonsterid, 'Death', Death('The jellyfish splats onto the floor. Wonder ' + 'how it was floating in the first place.', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(10, 10, 10, 10, 4, 84)) CM.add_Component(newmonsterid, 'Action', Jellyfish_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_ant(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Ant', 'a', False, True, color=Color.darker_red)) CM.add_Component(newmonsterid, 'Death', Death('The ants shell now smashed gives way ' + 'as it breaths it\'s final breath', '~', effects=[death_cleanup])) CM.add_Component(newmonsterid, 'Creature', Creature(1, 5, 10, 5, 5, 8)) CM.add_Component(newmonsterid, 'Action', Ant_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_clear_jellyfish(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Clear Jellyfish', 'J', False, True, color=Color.map_tile_visible)) deatheffects = [death_cleanup, clear_choice] CM.add_Component(newmonsterid, 'Death', Death('The Clear Jellyfishs falls but upward.' + 'How weird...', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(10, 10, 10, 15, 4, 336)) CM.add_Component(newmonsterid, 'Action', Jellyfish_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_rabid_dog(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Rabid Dog', 'D', False, True, color=Color.dark_yellow)) deatheffects = [death_cleanup, rabid_choice] CM.add_Component(newmonsterid, 'Death', Death('The Rabid Dog foams at the mouth then slumps ' + 'over. It might be a dog eat dog world but ' + 'don\'t eat it.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(16, 2, 14, 6, 5, 104)) CM.add_Component(newmonsterid, 'Action', Dog_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_electric_kangaroo(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Electric Kangaroo', 'K', False, True, color=Color.cyan)) deatheffects = [death_cleanup, electric_choice] CM.add_Component(newmonsterid, 'Death', Death('The Electric Kangaroos eye dim as it ' + 'falls to the ground.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(12, 0, 10, 30, 10, 293)) CM.add_Component(newmonsterid, 'Action', Kangaroo_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_dire_lion(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Dire Lion', 'L', False, True, color=Color.dark_yellow)) deatheffects = [death_cleanup, dire_choice] CM.add_Component(newmonsterid, 'Death', Death('The Dire Lions no longer able to support ' + 'itself slumps to the ground.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(30, 6, 12, 20, 6, 324)) CM.add_Component(newmonsterid, 'Action', Lion_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_savage_hawk(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Savage Hawk', 'H', False, True, color=Color.dark_crimson)) deatheffects = [death_cleanup, savage_choice] CM.add_Component(newmonsterid, 'Death', Death('The Savage Hawks eye dim as it ' + 'falls to the ground.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(12, 0, 10, 30, 10, 293)) CM.add_Component(newmonsterid, 'Action', Hawk_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_pink_elephant(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Pink Elephant', 'E', False, True, color=Color.pink)) deatheffects = [death_cleanup, pink_choice] CM.add_Component(newmonsterid, 'Death', Death('The Pink Elephant disapeers. Now you just ' + 'have to ask, was it there to begin with?', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(60, 2, 10, 5, 7, 168)) CM.add_Component(newmonsterid, 'Action', Elephant_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_vampire_bat(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Vampire Bat', 'B', False, True, color=Color.gray)) deatheffects = [death_cleanup, vampires_choice] CM.add_Component(newmonsterid, 'Death', Death('The Vampire Bat falls to the floor.' + ' The once dread creature is no more.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(6, 0, 10, 11, 5, 60)) CM.add_Component(newmonsterid, 'Action', Bat_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_queen_ant(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Queen Ant', 'A', False, True, color=Color.silver)) deatheffects = [death_cleanup, queens_choice] CM.add_Component(newmonsterid, 'Death', Death('The Ant Queen shudders and slumps over now dead.' + ' The once majestic creature now pitiful.', '~', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(5, 10, 10, 5, 4, 32)) CM.add_Component(newmonsterid, 'Action', Ant_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def make_blue_imp(coord, dungeonlevel): newmonsterid = EM.new_Id() CM.add_Component(newmonsterid, 'Coord', coord) CM.add_Component(newmonsterid, 'Tile', Tile('Blue Imp', 'I', False, True, color=Color.blue)) deatheffects = [death_cleanup, blue_choice] CM.add_Component(newmonsterid, 'Death', Death('The Blue Imp\'s body bursts into a ' + 'flame and burns away to nothing.', '.', effects=deatheffects)) CM.add_Component(newmonsterid, 'Creature', Creature(25, 1, 10, 20, 4, 316)) CM.add_Component(newmonsterid, 'Action', Imp_AI(newmonsterid)) dungeonlevel.MonsterIds.append(newmonsterid)
def next_level(): if config.CurrentDungeonLevel > 0: dungeonlevelid = config.DungeonLevelIds[config.CurrentDungeonLevel] dungeonlevel = CM.get_Component('DungeonLevel', dungeonlevelid) levelmap = CM.get_Component('Map', dungeonlevel.MapId) for key in dungeonlevel.MonsterIds: CM.cleanup(key) for lst in levelmap.TileIds: for key in lst: CM.cleanup(key) config.fov_recompute = True config.playscreen.clear config.CurrentDungeonLevel += 1 if config.CurrentDungeonLevel < 12: newlevelid = EM.new_Id() config.DungeonLevelIds[config.CurrentDungeonLevel] = newlevelid mapid = config.mapgen.create(newlevelid) newlevel = DungeonLevel(config.CurrentDungeonLevel, mapid) CM.add_Component(newlevelid, 'DungeonLevel', newlevel) Place_Monsters_On_Level(newlevelid) else: End_Game(finished=True)
def create(self, seed, maxdepth=3): random.seed(seed) self.maxdepth = maxdepth self.usedtiles = [] self.rooms = [] centerroom = _room(4, 5, 5, (int(self.width / 2), int(self.height / 2))) self.rooms.append(centerroom) self._set_used_tiles(centerroom) ring = [centerroom] if self.debug: coords = {} for value in centerroom.Tiles: coords[value] = True with open('PNGoutput/' + format(self.currentpng, '04d') + '.png', 'wb') as f: w = png.Writer(self.width, self.height, alpha=True) templist = [] for y in range(self.height): innerlist = [] for x in range(self.width): innerlist.append(0) innerlist.append(0) innerlist.append(0) innerlist.append(255) templist.append(innerlist) w.write(f, templist) self.currentpng = self.currentpng + 1 with open('PNGoutput/' + format(self.currentpng, '04d') + '.png', 'wb') as f: w = png.Writer(self.width, self.height, alpha=True) templist = [] for y in range(self.height): innerlist = [] for x in range(self.width): if (x, y) in coords: innerlist.append(self.ccR) innerlist.append(self.ccG) innerlist.append(self.ccB) innerlist.append(255) else: innerlist.append(0) innerlist.append(0) innerlist.append(0) innerlist.append(0) templist.append(innerlist) w.write(f, templist) self.color_change() self.currentpng = self.currentpng + 1 self._process_ring(ring, 0) newmap = Map(self.width, self.height, seed) tilearray = [[False for y in range(self.height)] for x in range(self.width)] for room in self.rooms: for tile in room.Tiles: tilearray[tile[0]][tile[1]] = Tile('Stone Floor', '.', True, True) for y in range(self.height): for x in range(self.width): if not tilearray[x][y]: tilearray[x][y] = Tile('Stone Wall', '#', False, False) newtileid = EntityManager.new_Id() ComponentManager.add_Component(newtileid, 'Tile', tilearray[x][y]) tilearray[x][y] = newtileid newmap.TileIds = tilearray newmapid = EntityManager.new_Id() ComponentManager.add_Component(newmapid, 'Map', newmap) return newmapid