def compound_generator(gen1, gen2, map_draft, player_hd, generator_type, requests, theme, params): merge_factor = float(randrange(*COMPOUND_MERGE_FACTOR)) / 100 horizontal = util.coinflip() bsp = libtcod.bsp_new_with_size(0, 0, map_draft.width, map_draft.height) position = int(map_draft.height * merge_factor) if horizontal else int(map_draft.width * merge_factor) libtcod.bsp_split_once(bsp, horizontal, position) left = libtcod.bsp_left(bsp) right = libtcod.bsp_right(bsp) lmap = MapDef() lmap.width, lmap.height = left.w, left.h rmap = MapDef() rmap.width, rmap.height = right.w, right.h gen1(lmap, player_hd, generator_type, requests, params, theme) gen2(rmap, player_hd, generator_type, requests, params, theme) map_draft.map = [[None for x in xrange(map_draft.width)] for y in xrange(map_draft.height)] for x in xrange(left.x, left.x + left.w): for y in xrange(left.y, left.y + left.h): map_draft.replace_feature_atxy(x, y, lmap.map[y][x]) _x, _y = 0, 0 for x in xrange(right.x, right.x + right.w): for y in xrange(right.y, right.y + right.h): map_draft.replace_feature_atxy(x, y, rmap.map[_y][_x]) _y += 1 _y = 0 _x += 1 return map_draft
def generate_map(generator_type, width=1, height=1, player_hd=1, requests=None, params=None, name='', theme=''): """generate_map(generator_type, ...) => MapDef params : no_large => bool (disable generation of large maps [map file with prefix large_]) map_id => str (place map with certain id ontop of current map) room_maxwidth, room_minwidth, room_maxheight, room_minheight => int (parameters of rooms if applicable) road_start, road_end => (int, int) specifies where road should start (if applicabel) road_break => (int, int) specifies the min/maximum amount of stright road road_fill => features.Tile specifies which tile should make the road road_straight => generate straight road """ if not generators.has_key(generator_type): raise RuntimeError('Unknow style [%s] for dungeon generator' % generator_type) map_draft = MapDef() map_draft.name = name map_draft.width, map_draft.height = width, height _static_request_preprocessor(generator_type, player_hd, requests, params, theme) _assure_mapsize(map_draft, generator_type, requests) map_draft = generators[generator_type]( map_draft, player_hd, generator_type, requests, params, theme ) #okay we just take requested generator and invoke it. Now we have draft map for transformer in transformation_pipe: if transformer.decide(player_hd, generator_type, requests, theme, params): transformer.transformer(map_draft, player_hd, generator_type, requests, theme, params) return map_draft