Example #1
0
def write_loc_page_header(v, k, data, outf):
    outf.write('<H3>')
    loc_type = u.return_type(v)
    outf.write('{} [{}]'.format(v['na'][0], to_oid(k)))
    outf.write(', {}'.format(loc_type))
    if u.return_type(v) != 'region':
        outf.write(', in')
        if loc_type == 'city':
            outf.write(' province ')
        try:
            loc2 = data[v['LI']['wh'][0]]
            outf.write(' {} [{}]'.format(loc2['na'][0],
                                         anchor(to_oid(u.return_unitid(loc2)))))
        except KeyError:
            pass
    # if 'city' in loc_type:
    #    outf.write(' [{}]'.format(anchor(to_oid(v['LI']['wh'][0]))))
    if 'SL' in v and 'sh' in v['SL']:
        outf.write(', safe haven')
    if 'LO' in v and 'hi' in v['LO']:
        outf.write(', hidden')
    if loc_type != 'ocean' and u.loc_depth(u.return_type(v)) == 2 \
            and data[u.region(k, data)]['na'][0] != 'faery' and data[u.region(k, data)]['na'][0] != 'hades':
        civ_level = 'wilderness'
        if 'LO' in v and 'lc' in v['LO']:
            if v['LO']['lc'][0] == '0':
                civ_level = 'wilderness'
            else:
                civ_level = 'civ-' + v['LO']['lc'][0]
        outf.write(', {}'.format(civ_level))
    outf.write('</H3>\n')
Example #2
0
def get_civ_level(k, v, data):
    civ_level = None
    if not u.is_ocean(v) and u.loc_depth(u.return_subkind(v)) == 2 \
    and data[u.region(k, data)]['na'][0] != 'faery' and data[u.region(k, data)]['na'][0] != 'hades':
        civ_level = 'wilderness'
        if 'LO' in v and 'lc' in v['LO']:
            if v['LO']['lc'][0] == '0':
                civ_level = 'wilderness'
            else:
                civ_level = 'civ-' + v['LO']['lc'][0]
    return civ_level
Example #3
0
def write_loc_routes_out(v, data, outf):
    if u.return_type(v) != 'city':
        write_province_destinations(v, data, outf)
    else:
        header_printed = False
        host_prov = data[v['LI']['wh'][0]]
        # If city is in a mountain, can't move from city to ocean
        if u.return_type(host_prov) != 'mountain':
            dest_loc_list = host_prov['LO']['pd']
            i = int(0)
            for pd in dest_loc_list:
                try:
                    pd_loc = data[pd]
                    if u.return_type(pd_loc) == 'ocean':
                        if not header_printed:
                            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
                            outf.write('<ul>\n')
                        pd_name = pd_loc['na'][0]
                        pd_loc_id = u.return_unitid(pd_loc)
                        out_distance = u.calc_exit_distance(v, pd_loc)
                        outf.write('<li>{}, to {} [{}], {}, {} {}</li>\n'
                                   .format(pd_directions[i],
                                           pd_name,
                                           anchor(to_oid(pd_loc_id)),
                                           data[u.region(pd_loc_id, data)]['na'][0],
                                           out_distance,
                                           'day' if out_distance == 1 else 'days'))
                except KeyError:
                    pass
                i = i + 1
        if not header_printed:
            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
            outf.write('<ul>\n')
        out_distance = u.calc_exit_distance(v, host_prov)
        outf.write('<li>Out, to {} [{}], {} {}</li>\n'
                   .format(host_prov['na'][0],
                           anchor(to_oid(u.return_unitid(host_prov))),
                           out_distance,
                           'day' if out_distance == 1 else 'days'))
        if 'LI' in v:
            if 'hl' in v['LI']:
                here_list = v['LI']['hl']
                for here in here_list:
                    here_record = data[here]
                    if u.is_road_or_gate(here_record):
                        to_record = data[here_record['GA']['tl'][0]]
                        if u.return_kind(here_record) == 'gate':
                            name = 'Gate'
                        else:
                            name = here_record['na'][0]
                        if not header_printed:
                            outf.write('<H4>Routes leaving {}:</H4\n'.format(v['na'][0]))
                            outf.write('<ul>\n')
                        write_province_destination(v,
                                                   to_record,
                                                   name,
                                                   data,
                                                   outf)
        if header_printed:
            outf.write('</ul>\n')
Example #4
0
def get_project_cast(v, data):
    projected_cast = v.get('IM', {}).get('pc', [None])
    projected_cast_id = projected_cast[0]
    if projected_cast_id is not None:
        try:
            projected_cast_rec = data[projected_cast_id]
            try:
                region_id = u.region(projected_cast_id, data)
                region_rec = data[region_id]
                region_oid = to_oid(region_id)
                region_name = get_name(region_rec)
            except KeyError:
                region_id = None
                region_oid = None
                region_name = None
            projected_dict = {'id': projected_cast_id,
                              'oid': to_oid(projected_cast_id),
                              'name': get_name(projected_cast_rec),
                              'kind': u.return_kind(projected_cast_rec),
                              'region_id': region_id,
                              'region_oid': region_oid,
                              'region_name': region_name}
        except KeyError:
            projected_dict = {'id': None,
                              'oid': to_oid(projected_cast_id)}
        return projected_dict
    return None
Example #5
0
def get_region(k, data):
    region_id = u.region(k, data)
    region_rec = data[region_id]
    region_dict = {'id': region_id,
                   'oid': to_oid(region_id),
                   'name': get_name(region_rec)}
    return region_dict
Example #6
0
def write_loc_map_anchor(v, k, data, outf, instance, inst_dict, map_matrices):
    dimensions = inst_dict[instance]
    region = u.region(k, data)
    region_rec = data[region]
    province = u.province(k, data)
    if province == 0:
        return 0
    province_rec = data[province]
    custom = False
    save_rec = []
    save_world = ''
    try:
        save_rec = map_matrices[region_rec['na'][0].lower()]
        save_world = region_rec['na'][0].lower()
        custom = True
    except KeyError:
        try:
            save_rec = dimensions[region_rec['na'][0].lower()]
            save_world = region_rec['na'][0].lower()
        except KeyError:
            for world in dimensions:
                world_rec = dimensions[world]
                if world_rec[0] <= int(province) < world_rec[0] + (world_rec[2] * 100):
                    save_rec = world_rec
                    save_world = world
                    break
    # if len(save_rec) == 0:
    #     print('error {} {}'.format(to_oid(k),
    #                                u.return_type(v)))
    if len(save_rec) > 0 and not custom:
        world_rec = save_rec
        world = save_world
        x_coord = int(10 * math.floor((int(province) % 100) / 10))
        if x_coord >= world_rec[1] - 10:
            x_coord = world_rec[1] - 20
        y_coord = int(1000 * math.floor(int(province) / 1000))
        if y_coord >= world_rec[0] + (world_rec[2] * 100) - 1000:
            y_coord = world_rec[0] + (world_rec[2] * 100) - 2000
            if y_coord < world_rec[0]:
                y_coord = world_rec[0]
        final_coord = y_coord + x_coord
        if final_coord < world_rec[0]:
            final_coord = world_rec[0]
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        outf.write('<p>{}</p>\n'.format(anchor2(anchor_string, 'Return to map')))
    if len(save_rec) > 0 and custom:
        world_rec = save_rec
        world = save_world
        for xx in range(0, len(save_rec[0])):
            for yy in range(0,len(save_rec)):
                if save_rec[yy][xx] == province:
                    xxx = int(math.floor(xx / 10)) * 10
                    yyy = int(math.floor(yy / 10)) * 10
                    final_coord = save_rec[yyy][xxx]
                    break
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        outf.write('<p>{}</p>\n'.format(anchor2(anchor_string, 'Return to map')))
Example #7
0
def get_routes_out(k, v, data):
    routes_out_list = []
    if not u.is_city(v):
        dest_dict = get_destinations(k, v, data)
    else:
        dest_list = []
        host_prov_id = v['LI']['wh'][0]
        host_prov_rec = data[host_prov_id]
        # If city is in a mountain, can't move from city to ocean
        if not u.is_mountain(host_prov_rec):
            dest_loc_list = host_prov_rec['LO']['pd']
            i = int(0)
            for pd in dest_loc_list:
                if pd != '0':
                    pd_loc = data[pd]
                    if u.is_ocean(pd_loc):
                        pd_name = pd_loc['na'][0]
                        pd_loc_id = u.return_unitid(pd_loc)
                        pd_rec = data[pd_loc_id]
                        direction = pd_directions[i]
                        region_id = u.region(pd_loc_id, data)
                        region_rec = data[region_id]
                        to_dict = create_loc_to_dict_entry(data, direction, pd_rec, v, region_rec)
                        dest_list.append(to_dict)
                i = i + 1
        region_id = u.region(host_prov_id, data)
        region_rec = data[region_id]
        direction = 'Out'
        to_dict = create_loc_to_dict_entry(data, direction, host_prov_rec, v, region_rec)
        dest_list.append(to_dict)
        region_id = u.region(k, data)
        region_rec = data[region_id]
        dest_dict = {'id': k,
                     'oid': to_oid(k),
                     'name': get_name(v),
                     'subkind': get_subkind(v, data),
                     'region_oid': to_oid(region_id),
                     'region_name': get_name(region_rec),
                     'dest': dest_list}
    return dest_dict
Example #8
0
def write_hidden_access(v, k, data, outf, hidden_chain):
    if 'LO' in v and 'hi' in v['LO']:
        if v['LO']['hi'][0] == '1' or u.region(k, data) in {'faery', 'hades'}:
            # PL/kn
            try:
                hidden_list = hidden_chain[k]
                if len(hidden_list) > 0:
                    outf.write('Hidden location known by:</H4>\n')
                    outf.write('<ul>\n')
                    for hidden in hidden_list:
                        hidden_rec = data[hidden]
                        outf.write('<li>{} [{}]</td></li>\n'.format(hidden_rec['na'][0],
                                                                    anchor(to_oid(hidden))))
                    outf.write('</ul>\n')
            finally:
                pass
Example #9
0
def get_hidden_access(k, v, data, hidden_chain):
    hidden_access_list = []
    if u.is_hidden(v) or u.region(k, data) in {'faery', 'hades'}:
        # PL/kn
        try:
            hidden_list = hidden_chain[k]
        except:
            pass
        else:
            if len(hidden_list) > 0:
                for hidden in hidden_list:
                    hidden_rec = data[hidden]
                    hidden_dict = {'oid': to_oid(hidden),
                                   'name': get_name(hidden_rec)}
                    hidden_access_list.append(hidden_dict)
    return hidden_access_list
Example #10
0
def trade_report(data, trade_chain, outdir):
    trade_list = sorted(list(trade_chain))
    sort_trade_list = []
    for unit in trade_list:
        city_list = trade_chain[unit]
        if len(city_list) > 0 and unit is not None:
            item_rec = data[unit]
            sell_list = []
            buy_list = []
            for city in city_list:
                city_id = city[0]
                city_rec = data[city_id]
                region_id = u.region(city_id, data)
                region_rec = data[region_id]
                if city[1] == '1':
                    buy_dict = {
                        'id': city_id,
                        'oid': to_oid(city_id),
                        'name': get_name(city_rec),
                        'region_oid': to_oid(region_id),
                        'region_name': get_name(region_rec)
                    }
                    buy_list.append(buy_dict)
                else:
                    sell_dict = {
                        'id': city_id,
                        'oid': to_oid(city_id),
                        'name': get_name(city_rec),
                        'region_oid': to_oid(region_id),
                        'region_name': get_name(region_rec)
                    }
                    sell_list.append(sell_dict)
            trade_entry = {
                'id': unit,
                'oid': to_oid(unit),
                'name': get_name(item_rec),
                'buy_list': buy_list,
                'sell_list': sell_list
            }
            sort_trade_list.append((trade_entry))
    outf = open(pathlib.Path(outdir).joinpath('master_trade_report.html'), 'w')
    template = olymap.env.get_template('master_trade_report.html')
    loc = sort_trade_list
    outf.write(template.render(loc=loc))
Example #11
0
def get_taught_in(k, v, data, teaches_chain):
    taught_in_list = []
    skill_list = teaches_chain[k]
    if len(skill_list) > 0:
        for loc in skill_list:
            loc_rec = data[loc]
            where_id = loc_rec['LI']['wh'][0]
            where_rec = data[where_id]
            region_id = u.region(u.return_unitid(where_rec), data)
            region_rec = data[region_id]
            loc_dict = {
                'id': loc,
                'oid': to_oid(loc),
                'name': get_name(loc_rec),
                'where_id': where_id,
                'where_oid': to_oid(where_id),
                'where_name': get_name(where_rec),
                'region_id': region_id,
                'region_oid': to_oid(region_id),
                'region_name': get_name(region_rec)
            }
            taught_in_list.append(loc_dict)
    return taught_in_list
Example #12
0
def write_skill_basic_info(v, k, data, outf, teaches_chain, child_skills_chain,
                           skills_known_chain):
    outf.write('<table>\n')
    if 'SK' in v:
        if 'rs' in v['SK']:
            skill = data[v['SK']['rs'][0]]
            outf.write('<tr><td>Skill Required:</td><td>{} [{}]'
                       '</td></tr>\n'.format(skill['na'][0],
                                             anchor(u.return_unitid(skill))))
        if 'tl' in v['SK']:
            outf.write('<tr><td>Time to Learn:</td><td>{}</td></tr>\n'.format(
                v['SK']['tl'][0]))
    char_list = skills_known_chain[k]
    if len(char_list) > 0:
        outf.write('<tr><td valign="top">Known By:</td><td>')
        outf.write('<table>\n')
        columns = int(math.ceil(len(char_list) / 3))
        for charac in range(0, columns):
            outf.write('<tr>')
            if (columns * 0) + charac < len(char_list):
                char_rec = data[char_list[(columns * 0) + charac]]
                outf.write('<td>{} [{}]</td>'.format(
                    char_rec['na'][0],
                    anchor(to_oid(u.return_unitid(char_rec)))))
            else:
                outf.write('<td></td><td></td>')
            if (columns * 1) + charac < len(char_list):
                char_rec = data[char_list[(columns * 1) + charac]]
                outf.write('<td>{} [{}]</td>'.format(
                    char_rec['na'][0],
                    anchor(to_oid(u.return_unitid(char_rec)))))
            else:
                outf.write('<td></td><td></td>')
            if (columns * 2) + charac < len(char_list):
                char_rec = data[char_list[(columns * 2) + charac]]
                outf.write('<td>{} [{}]</td>'.format(
                    char_rec['na'][0],
                    anchor(to_oid(u.return_unitid(char_rec)))))
            else:
                outf.write('<td></td><td></td>')
            outf.write('</tr>\n')
        outf.write('</table>\n')
        outf.write('</td></tr>')
    child_list = child_skills_chain[k]
    if len(child_list) > 0:
        outf.write('<tr><td valign="top">Child Skills:</td><td>')
        outf.write('<table>\n')
        columns = int(math.ceil(len(child_list) / 3))
        for skill in range(0, columns):
            outf.write('<tr>')
            if (columns * 0) + skill < len(child_list):
                skill_rec = data[child_list[(columns * 0) + skill]]
                outf.write('<td>{} [{}]</td>'.format(
                    skill_rec['na'][0],
                    anchor(to_oid(u.return_unitid(skill_rec)))))
            else:
                outf.write('<td></td><')
            if (columns * 1) + skill < len(child_list):
                skill_rec = data[child_list[(columns * 1) + skill]]
                outf.write('<td>{} [{}]</td>'.format(
                    skill_rec['na'][0],
                    anchor(to_oid(u.return_unitid(skill_rec)))))
            else:
                outf.write('<td></td>')
            if (columns * 2) + skill < len(child_list):
                skill_rec = data[child_list[(columns * 2) + skill]]
                outf.write('<td>{} [{}]</td>'.format(
                    skill_rec['na'][0],
                    anchor(to_oid(u.return_unitid(skill_rec)))))
            else:
                outf.write('<td></td>')
            outf.write('</tr>\n')
        outf.write('</table>\n')
        outf.write('</td></tr>')
    skill_list = teaches_chain[k]
    if len(skill_list) > 0:
        skill_literal = 'Taught in:'
        for loc in skill_list:
            loc_rec = data[loc]
            where_rec = data[loc_rec['LI']['wh'][0]]
            region = data[u.region(u.return_unitid(where_rec), data)]
            outf.write(
                '<tr><td>{}</td><td>{} [{}], {} [{}], in {}</td></tr>\n'.
                format(skill_literal, loc_rec['na'][0],
                       anchor(to_oid(u.return_unitid(loc_rec))),
                       where_rec['na'][0],
                       anchor(to_oid(u.return_unitid(where_rec))),
                       region['na'][0]))
            skill_literal = ''
    outf.write('</table>\n')
Example #13
0
def write_province_destination(loc, dest_loc, direction, data, outf):
    if (u.is_port_city(dest_loc, data) or u.province_has_port_city(dest_loc, data) != '0') \
            and u.return_type(loc) == 'ocean':
        if not u.is_port_city(dest_loc, data):
            dest_loc = data[u.province_has_port_city(dest_loc, data)]
        dest_loc_host = data[dest_loc['LI']['wh'][0]]
        outf.write('<li>{}, port city, to {} [{}]'
                   .format(direction,
                           dest_loc['na'][0],
                           anchor(to_oid(u.return_unitid(dest_loc)))))
        if u.region(u.return_unitid(loc), data) != u.region(u.return_unitid(dest_loc), data):
            region_key = u.return_unitid(dest_loc)
            region_rec = data[u.region(region_key, data)]
            outf.write(', {}'.format(region_rec['na'][0]))
        barrier = '0'
        if 'LO' in dest_loc and 'ba' in dest_loc['LO']:
            barrier = dest_loc['LO']['ba'][0]
        if barrier != '0':
            outf.write(', impassable<br>&nbsp;&nbsp;&nbsp;A magical barrier prevents entry.')
        else:
            out_distance = u.calc_exit_distance(loc, dest_loc)
            outf.write(', {} {}'.format(out_distance,
                                        'day' if out_distance == 1 else 'days'))
        outf.write('</li>\n')
        outf.write('<li> {}, to {} [{}]'.format(direction,
                                                dest_loc_host['na'][0],
                                                anchor(to_oid(u.return_unitid(dest_loc_host)))))
        if u.region(u.return_unitid(loc), data) != \
           u.region(u.return_unitid(dest_loc), data):
            region_key = u.return_unitid(dest_loc_host)
            region_rec = data[u.region(region_key, data)]
            outf.write(', {}'.format(region_rec['na'][0]))
        barrier = '0'
        if 'LO' in dest_loc_host and 'ba' in dest_loc_host['LO']:
            barrier = dest_loc_host['LO']['ba'][0]
        if barrier != '0':
            outf.write(', impassable<br>&nbsp;&nbsp;&nbsp;A magical barrier prevents entry.')
        else:
            outf.write(', impassable')
        outf.write('</li>\n')
    else:
        outf.write('<li>{}'.format(direction))
        if direction == 'Out':
            outf.write(', {}'.format(u.return_type(dest_loc)))
        outf.write(', to {} [{}]'.format(dest_loc['na'][0],
                                         anchor(to_oid(u.return_unitid(dest_loc)))))
        if u.region(u.return_unitid(loc), data) != \
                u.region(u.return_unitid(dest_loc), data):
            region_key = u.return_unitid(dest_loc)
            region_rec = data[u.region(region_key, data)]
            outf.write(', {}'.format(region_rec['na'][0]))
        barrier = '0'
        if 'LO' in dest_loc and 'ba' in dest_loc['LO']:
            barrier = dest_loc['LO']['ba'][0]
        if barrier != '0':
            outf.write(', impassable<br>&nbsp;&nbsp;&nbsp;A magical barrier prevents entry.')
        elif (u.return_type(loc) == 'ocean' and \
            u.return_type(dest_loc) == 'mountain') or \
            (u.return_type(loc) == 'mountain' and \
            u.return_type(dest_loc) == 'ocean') and \
            direction.lower() not in details.road_directions:
            outf.write(', impassable')
        else:
            out_distance = u.calc_exit_distance(loc, dest_loc)
            outf.write(', {} {}'.format(out_distance,
                                        'day' if out_distance == 1 else 'days'))
        if dest_loc['na'][0] == 'Hades' and loc['na'][0] != 'Hades':
            outf.write('<br>&nbsp;&nbsp;&nbsp;"Notice to all mortals, from the Gatekeeper '
                       'Spirit of Hades: 100 gold/head<br>&nbsp;&nbsp;&nbsp;&nbsp;'
                       'is removed from any stack taking this road"')
        outf.write('</li>\n')
Example #14
0
def get_map_anchor(v, k, data, instance, inst_dict, map_matrices):
    if u.return_subkind(v) in ['tunnel', 'chamber']:
        return None
    dimensions = inst_dict[instance]
    region = u.region(k, data)
    region_rec = data[region]
    province = u.province(k, data)
    if province == 0:
        return None
    province_rec = data[province]
    custom = False
    save_rec = []
    save_world = ''
    try:
        save_rec = map_matrices[region_rec['na'][0].lower()]
    except KeyError:
        try:
            save_rec = dimensions[region_rec['na'][0].lower()]
        except KeyError:
            for world in dimensions:
                world_rec = dimensions[world]
                if world_rec[0] <= int(province) < world_rec[0] + (world_rec[2] * 100):
                    save_rec = world_rec
                    save_world = world
                    break
        else:
            save_world = region_rec['na'][0].lower()
    else:
        save_world = region_rec['na'][0].lower()
        custom = True
    # if len(save_rec) == 0:
    #     print('error {} {}'.format(to_oid(k),
    #                                u.return_subkind(v)))
    if len(save_rec) > 0 and not custom:
        world_rec = save_rec
        world = save_world
        x_coord = int(10 * math.floor((int(province) % 100) / 10))
        if x_coord >= world_rec[1] - 10:
            x_coord = world_rec[1] - 20
        y_coord = int(1000 * math.floor(int(province) / 1000))
        if y_coord >= world_rec[0] + (world_rec[2] * 100) - 1000:
            y_coord = world_rec[0] + (world_rec[2] * 100) - 2000
            if y_coord < world_rec[0]:
                y_coord = world_rec[0]
        final_coord = y_coord + x_coord
        if final_coord < world_rec[0]:
            final_coord = world_rec[0]
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        return anchor_string
    if len(save_rec) > 0 and custom:
        world_rec = save_rec
        world = save_world
        for xx in range(0, len(save_rec[0])):
            for yy in range(0,len(save_rec)):
                if save_rec[yy][xx] == province:
                    xxx = int(math.floor(xx / 10)) * 10
                    yyy = int(math.floor(yy / 10)) * 10
                    final_coord = save_rec[yyy][xxx]
                    break
        anchor_string = world + '_map_leaf_' + to_oid(final_coord)
        return anchor_string
    return None
Example #15
0
def get_destinations(k, v, data):
    dest_list = []
    if 'LO' in v and 'pd' in v['LO']:
        pd_list = v['LO']['pd']
        i = int(0)
        for pd in pd_list:
            if pd != '0':
                direction = pd_directions[i]
                pd_rec = data[pd]
                region_id = u.region(pd, data)
                region_rec = data[region_id]
                if u.province_has_port_city(pd_rec, data) is not None:
                    city_rec = data[u.province_has_port_city(pd_rec, data)]
                    to_dict = create_loc_to_dict_entry(data, direction, city_rec, v, region_rec)
                    dest_list.append(to_dict)
                to_dict = create_loc_to_dict_entry(data, direction, pd_rec, v, region_rec)
                dest_list.append(to_dict)
                # see if port city so show province also
                if u.is_port_city(pd_rec, data):
                    prov_rec = data[u.province(pd, data)]
                    to_dict = create_loc_to_dict_entry(data, direction, prov_rec, v, region_rec)
                    dest_list.append(to_dict)
            i = i + 1
    if u.return_subkind(v) not in details.province_kinds:
        if 'LI' in v and 'wh' in v['LI']:
            out_id = v['LI']['wh'][0]
            out_rec = data[out_id]
            region_id = u.region(out_id, data)
            region_rec = data[region_id]
            to_dict = create_loc_to_dict_entry(data, 'Out', out_rec, v, region_rec)
            dest_list.append(to_dict)
    if 'LI' in v and 'hl' in v['LI']:
        here_list = v['LI']['hl']
        for here in here_list:
            here_record = data[here]
            if u.is_road_or_gate(here_record):
                to_id = here_record['GA']['tl'][0]
                to_rec = data[to_id]
                region_id = u.region(to_id, data)
                region_rec = data[region_id]
                if u.return_kind(here_record) == 'gate':
                    direction = 'Gate'
                else:
                    direction = get_name(here_record)
                to_dict = create_loc_to_dict_entry(data, direction, to_rec, here_record, region_rec)
                dest_list.append(to_dict)
    if 'SL' in v and 'lt' in v['SL']:
        link_id = v['SL']['lt'][0]
        link_rec = data[link_id]
        region_id = u.region(link_id, data)
        region_rec = data[region_id]
        to_dict = create_loc_to_dict_entry(data, get_subkind(link_rec, data).title(), link_rec, v, region_rec)
        dest_list.append(to_dict)
    region_id = u.region(k, data)
    region_rec = data[region_id]
    dest_dict = {'id': k,
                 'oid': to_oid(k),
                 'name': get_name(v),
                 'subkind': get_subkind(v, data),
                 'region_oid': to_oid(region_id),
                 'region_name': get_name(region_rec),
                 'dest': dest_list}
    return dest_dict