예제 #1
0
def main():
    mapfile = sys.argv[1] if len(sys.argv) >= 2 else 'pokegold-spaceworld.map'
    filename = sys.argv[2] if len(sys.argv) >= 3 else 'mask.w1024.2bpp'

    num_banks = 0x40
    bank_mask = 0x3FFF
    bank_size = 0x4000  # bytes

    r = MapReader()
    with open(mapfile, 'r', encoding='utf-8') as f:
        l = f.readlines()
    r.read_map_data(l)

    default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
    with open(filename, 'wb') as f:
        for bank in range(num_banks):
            hits = bytearray([0x00] * bank_size)
            data = r.bank_data['rom bank'].get(bank, default_bank_data)
            for s in data['sections']:
                if s['beg'] > s['end']:
                    continue
                if s['beg'] == 0x0000 and s['end'] > 0xFFFF:
                    # https://github.com/gbdev/rgbds/issues/515
                    continue
                beg = s['beg'] & bank_mask
                end = s['end'] & bank_mask
                for i in range(beg, end + 1):
                    hits[i] = 0xFF
            f.write(hits)
예제 #2
0
    def convertV1toV2(self, fileName):
        reader = MapReader()
        map = reader.readMap(fileName)
        if (not map):
            qWarning("Error at conversion of " + fileName + ":\n" +
                     reader.errorString())
            return

        for layer in map.layers():
            if (layer.name().lower().startswith("ruleset")):
                layer.setName("Input_set")
            elif (layer.name().lower().startswith("rulenotset")):
                layer.setName("InputNot_set")
            elif (layer.name().lower().startswith("ruleregions")):
                layer.setName("Regions")
            elif (layer.name().lower().startswith("rule")):
                newname = layer.name().right(layer.name().length() - 4)
                layer.setName("Output" + newname)
            else:
                qWarning(
                    QString("Warning at conversion of") + fileName +
                    QString("unused layers found"))

        writer = MapWriter()
        writer.writeMap(map.data(), fileName)
        map.tilesets().clear()
예제 #3
0
def upload(request):
    if request.method == 'POST':
        file = request.FILES['file']
        if request.user.is_authenticated():
            user = request.user
        else:
            user = None

        try:
            reader = MapReader(file, user=user)
            _map = reader.read()
        except GeocodingError as error:
            return redirect('/error', error.value)

        value = request.POST.get("action")
        if value == "Download":
            response = HttpResponse(
                unicode(_map), content_type="text/csv")
            response['Content-Disposition'] = 'inline; filename = output.csv'
            return response
        else:
            form = UploadFileForm(request.POST, request.FILES)

            if form.is_valid():
                return HttpResponseRedirect('maps/' + str(_map.id))
    else:
        form = UploadFileForm()

    return render(request, 'latlong/index.html', {'form': form})
예제 #4
0
def main():
    print_bank = 'none'
    mapfile = 'pokecrystal11.map'

    if len(sys.argv) >= 2 and sys.argv[1].startswith('BANK='):
        print_bank = sys.argv[1].split('=', 1)[-1]
        if len(sys.argv) >= 3:
            mapfile = sys.argv[2]
    elif len(sys.argv) >= 3 and sys.argv[2].startswith('BANK='):
        print_bank = sys.argv[2].split('=', 1)[-1]
        mapfile = sys.argv[1]

    if print_bank not in {'all', 'none'}:
        try:
            if print_bank.startswith('0x') or print_bank.startswith('0X'):
                print_bank = int(print_bank[2:], 16)
            else:
                print_bank = int(print_bank)
        except ValueError:
            error = 'Error: invalid BANK: %s' % print_bank
            if print_bank.isalnum():
                error += ' (did you mean: 0x%s?)' % print_bank
            print(error, file=sys.stderr)
            sys.exit(1)

    num_banks = 0x80
    bank_size = 0x4000  # bytes
    total_size = num_banks * bank_size

    r = MapReader()
    with open(mapfile, 'r', encoding='utf-8') as f:
        l = f.readlines()
    r.read_map_data(l)

    free_space = 0
    per_bank = []
    default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
    for bank in range(num_banks):
        bank_data = r.bank_data['ROM0 bank'] if bank == 0 else r.bank_data[
            'ROMX bank']
        data = bank_data.get(bank, default_bank_data)
        used = data['used']
        slack = data['slack']
        per_bank.append((used, slack))
        free_space += slack

    print('Free space: %d/%d (%.2f%%)' %
          (free_space, total_size, free_space * 100.0 / total_size))
    if print_bank != 'none':
        print()
        print('bank, used, free')
    for bank in range(num_banks):
        used, slack = per_bank[bank]
        if print_bank in {'all', bank}:
            print('$%02X, %d, %d' % (bank, used, slack))
def main():
    mapfile = sys.argv[1] if len(sys.argv) >= 2 else 'pokegold-spaceworld.map'
    filename = sys.argv[2] if len(sys.argv) >= 3 else 'coverage.png'

    num_banks = 0x40
    bank_mask = 0x3FFF
    bank_size = 0x4000  # bytes

    bpp = 8  # bytes per pixel
    height = 256  # pixels
    assert bank_size % bpp == 0 and (bank_size // bpp) % height == 0

    pixels_per_bank = bank_size // bpp  # 2048 pixels
    bank_width = pixels_per_bank // height  # 8 pixels
    width = bank_width * num_banks  # 1024 pixels

    r = MapReader()
    with open(mapfile, 'r', encoding='utf-8') as f:
        l = f.readlines()
    r.read_map_data(l)

    hit_data = []
    default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
    for bank in range(num_banks):
        hits = [0] * pixels_per_bank
        data = r.bank_data['rom bank'].get(bank, default_bank_data)
        for s in data['sections']:
            if s['beg'] > s['end']:
                continue
            if s['beg'] == 0x0000 and s['end'] > 0xFFFF:
                # https://github.com/gbdev/rgbds/issues/515
                continue
            beg = s['beg'] & bank_mask
            end = s['end'] & bank_mask
            for i in range(beg, end + 1):
                hits[i // bpp] += 1
        hit_data.append(hits)

    pixels = [[(0xFF, 0xFF, 0xFF)] * width for _ in range(height)]
    for bank, hits in enumerate(hit_data):
        hue = 0 if not bank else 210 if bank % 2 else 270
        for i, h in enumerate(hits):
            y = i // bank_width
            x = i % bank_width + bank * bank_width
            hls = (hue / 360.0, 1.0 - (h / bpp * (100 - 15)) / 100.0, 1.0)
            rgb = tuple(int(c * 255) for c in hls_to_rgb(*hls))
            pixels[y][x] = rgb

    png_data = [tuple(c for pixel in row for c in pixel) for row in pixels]
    with open(filename, 'wb') as f:
        w = png.Writer(width, height)
        w.write(f, png_data)
예제 #6
0
    def automappingRuleFileVersion(self, fileName):
        reader = MapReader()
        map = reader.readMap(fileName)
        if (not map):
            return self.versionNotAMap()
        # version 1 check
        hasonlyruleprefix = True
        for layer in map.layers():
            if (not layer.name().lower().startswith("rule")):
                hasonlyruleprefix = False

        if (hasonlyruleprefix):
            return self.version1()
        # version 2 check
        hasrule = False
        hasoutput = False
        hasregion = False
        allused = True
        for layer in map.layers():
            isunused = True
            if (layer.name().lower().startswith("input")):
                hasrule = True
                isunused = False

            if (layer.name().lower().startswith("output")):
                hasoutput = True
                isunused = False

            if (layer.name().lower() == "regions"):
                hasregion = True
                isunused = False

            if (isunused):
                allused = False

        if (allused and hasoutput and hasregion and hasrule):
            return self.version2()
        return self.versionUnknown()
예제 #7
0
    def viewMap(self, fileName):
        del self.mRenderer
        self.mRenderer = None
        self.mScene.clear()
        self.centerOn(0, 0)
        reader = MapReader()
        self.mMap = reader.readMap(fileName)
        if (not self.mMap):
            qWarning("Error:"+reader.errorString())
            return False

        x = self.mMap.orientation()
        if x==Map.Orientation.Isometric:
            self.mRenderer = IsometricRenderer(self.mMap)
        elif x==Map.Orientation.Staggered:
            self.mRenderer = StaggeredRenderer(self.mMap)
        elif x==Map.Orientation.Hexagonal:
            self.mRenderer = HexagonalRenderer(self.mMap)
        else:
            self.mRenderer = OrthogonalRenderer(self.mMap)

        self.mScene.addItem(MapItem(self.mMap, self.mRenderer))
        return True
예제 #8
0
    def render(self, mapFileName, imageFileName):
        map = None
        renderer = None
        reader = MapReader()
        map = reader.readMap(mapFileName)
        if (not map):
            qWarning("Error while reading " + mapFileName + ":\n" +
                     reader.errorString())
            return 1

        x = map.orientation()
        if x == Map.Orientation.Isometric:
            renderer = IsometricRenderer(map)
        elif x == Map.Orientation.Staggered:
            renderer = StaggeredRenderer(map)
        elif x == Map.Orientation.Hexagonal:
            renderer = HexagonalRenderer(map)
        else:
            renderer = OrthogonalRenderer(map)

        if (self.mTileSize > 0):
            xScale = self.mTileSize / map.tileWidth()
            yScale = self.mTileSize / map.tileHeight()
        else:
            xScale = yScale = self.mScale

        mapSize = renderer.mapSize()
        margins = map.computeLayerOffsetMargins()
        mapSize.setWidth(mapSize.width() + margins.left() + margins.right())
        mapSize.setHeight(mapSize.height() + margins.top() + margins.bottom())

        mapSize.setWidth(mapSize.width() * xScale)
        mapSize.setHeight(mapSize.height() * yScale)
        image = QImage(mapSize, QImage.Format_ARGB32)
        image.fill(Qt.transparent)
        painter = QPainter(image)
        if (xScale != 1.0 or yScale != 1.0):
            if (self.mUseAntiAliasing):
                painter.setRenderHints(QPainter.SmoothPixmapTransform
                                       | QPainter.Antialiasing)

            painter.setTransform(QTransform.fromScale(xScale, yScale))

        painter.translate(margins.left(), margins.top())

        # Perform a similar rendering than found in exportasimagedialog.py
        for layer in map.layers():
            if (not self.shouldDrawLayer(layer)):
                continue
            painter.setOpacity(layer.opacity())
            painter.translate(layer.offset())
            tileLayer = layer
            imageLayer = layer
            tp = type(layer)
            if tp == TileLayer:
                renderer.drawTileLayer(painter, tileLayer)
            elif tp == ImageLayer:
                renderer.drawImageLayer(painter, imageLayer)
            painter.translate(-layer.offset())
        painter.end()

        # Save image
        imageWriter = QImageWriter(imageFileName)
        if (not imageWriter.write(image)):
            qWarning("Error while writing " + imageFileName + ": " +
                     imageWriter.errorString())
            return 1

        return 0
예제 #9
0
                    dest="num_banks",
                    required=True,
                    type=lambda x: int(x, 0))
    args = ap.parse_args()

    bank_mask = 0x3FFF
    bank_size = 0x4000  # bytes
    width = 256  # pixels per row
    bpp = 8  # bytes per pixel

    rom_size = args.num_banks * bank_size  # bytes
    height = (args.num_banks * bank_size +
              (width * bpp - 1)) // (width * bpp)  # pixels
    rows_per_bank = bank_size // (width * bpp)

    r = MapReader()
    with open(args.mapfile, 'r', encoding="utf-8") as f:
        l = f.readlines()
    r.read_map_data(l)

    hit_data = [[0] * width for _ in range(height)]
    default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
    for bank in range(args.num_banks):
        data = r.bank_data['ROM Bank'].get(bank, default_bank_data)
        for s in data['sections']:
            beg = (s['beg'] & bank_mask) + bank * bank_size
            end = (s['end'] & bank_mask) + bank * bank_size
            y_beg = beg // (width * bpp)
            x_beg = (beg % (width * bpp)) // bpp
            y_end = end // (width * bpp)
            x_end = (end % (width * bpp)) // bpp
예제 #10
0
파일: main.py 프로젝트: theall/Python-Tiled
def main(argv):
    a = TiledApplication(argv)
    a.setOrganizationDomain("mapeditor.org")
    a.setApplicationName("Tiled")
    a.setApplicationVersion("0.14.2")

    if sys.platform == 'darwin':
        a.setAttribute(Qt.AA_DontShowIconsInMenus)

    # Enable support for highres images (added in Qt 5.1, but off by default)
    a.setAttribute(Qt.AA_UseHighDpiPixmaps)
    if sys.platform != 'win32':
        baseName = QApplication.style().objectName()
        if (baseName == "windows"):
            # Avoid Windows 95 style at all cost
            if (QStyleFactory.keys().contains("Fusion")):
                baseName = "fusion" # Qt5
            else: # Qt4
                # e.g. if we are running on a KDE4 desktop
                desktopEnvironment = qgetenv("DESKTOP_SESSION")
                if (desktopEnvironment == "kde"):
                    baseName = "plastique"
                else:
                    baseName = "cleanlooks"

            a.setStyle(QStyleFactory.create(baseName))
    languageManager = LanguageManager.instance()
    languageManager.installTranslators()
    commandLine = CommandLineHandler()
    if (not commandLine.parse(QCoreApplication.arguments())):
        return 0
    if (commandLine.quit):
        return 0
    if (commandLine.disableOpenGL):
        preferences.Preferences.instance().setUseOpenGL(False)
    PluginManager.instance().loadPlugins()
    if (commandLine.exportMap):
        # Get the path to the source file and target file
        if (commandLine.filesToOpen().length() < 2):
            qWarning(QCoreApplication.translate("Command line", "Export syntax is --export-map [format] "))
            return 1

        index = 0
        if commandLine.filesToOpen().length() > 2:
            filter = commandLine.filesToOpen().at(index)
            index += 1
        else:
            filter = None
        sourceFile = commandLine.filesToOpen().at(index)
        index += 1
        targetFile = commandLine.filesToOpen().at(index)
        index += 1
        
        chosenFormat = None
        formats = PluginManager.objects()

        if filter:
            # Find the map format supporting the given filter
            for format in formats:
                if not format.hasCapabilities(MapFormat.Write):
                    continue
                if format.nameFilter().lower()==filter.lower():
                    chosenFormat = format
                    break
            if not chosenFormat:
                qWarning(QCoreApplication.translate("Command line", "Format not recognized (see --export-formats)"))
                return 1
        else:
            # Find the map format based on target file extension
            suffix = QFileInfo(targetFile).completeSuffix()
            for format in formats:
                if not format.hasCapabilities(MapFormat.Write):
                    continue
                if suffix.lower() in format.nameFilter().lower():
                    if chosenFormat:
                        qWarning(QCoreApplication.translate("Command line", "Non-unique file extension. Can't determine correct export format."))
                        return 1
                    chosenFormat = format
                    
            if not chosenFormat:
                qWarning(QCoreApplication.translate("Command line", "No exporter found for target file."))
                return 1

        # Load the source file
        reader = MapReader()
        map = reader.readMap(sourceFile)
        if (not map):
            qWarning(QCoreApplication.translate("Command line", "Failed to load source map."))
            return 1

        # Write out the file
        success = chosenFormat.write(map.data(), targetFile)

        if (not success):
            qWarning(QCoreApplication.translate("Command line", "Failed to export map to target file."))
            return 1

        return 0
    w = MainWindow()
    w.show()
    a.fileOpenRequest.connect(w.openFile)
    if (not commandLine.filesToOpen().isEmpty()):
        for fileName in commandLine.filesToOpen():
            w.openFile(fileName)
    elif preferences.Preferences.instance().openLastFilesOnStartup():
        w.openLastFiles()
    return a.exec()
예제 #11
0
def main(argv):
    a = TiledApplication(argv)
    a.setOrganizationDomain("mapeditor.org")
    a.setApplicationName("Tiled")
    a.setApplicationVersion("0.14.2")

    if sys.platform == 'darwin':
        a.setAttribute(Qt.AA_DontShowIconsInMenus)

    # Enable support for highres images (added in Qt 5.1, but off by default)
    a.setAttribute(Qt.AA_UseHighDpiPixmaps)
    if sys.platform != 'win32':
        baseName = QApplication.style().objectName()
        if (baseName == "windows"):
            # Avoid Windows 95 style at all cost
            if (QStyleFactory.keys().contains("Fusion")):
                baseName = "fusion"  # Qt5
            else:  # Qt4
                # e.g. if we are running on a KDE4 desktop
                desktopEnvironment = qgetenv("DESKTOP_SESSION")
                if (desktopEnvironment == "kde"):
                    baseName = "plastique"
                else:
                    baseName = "cleanlooks"

            a.setStyle(QStyleFactory.create(baseName))
    languageManager = LanguageManager.instance()
    languageManager.installTranslators()
    commandLine = CommandLineHandler()
    if (not commandLine.parse(QCoreApplication.arguments())):
        return 0
    if (commandLine.quit):
        return 0
    if (commandLine.disableOpenGL):
        preferences.Preferences.instance().setUseOpenGL(False)
    PluginManager.instance().loadPlugins()
    if (commandLine.exportMap):
        # Get the path to the source file and target file
        if (commandLine.filesToOpen().length() < 2):
            qWarning(
                QCoreApplication.translate(
                    "Command line", "Export syntax is --export-map [format] "))
            return 1

        index = 0
        if commandLine.filesToOpen().length() > 2:
            filter = commandLine.filesToOpen().at(index)
            index += 1
        else:
            filter = None
        sourceFile = commandLine.filesToOpen().at(index)
        index += 1
        targetFile = commandLine.filesToOpen().at(index)
        index += 1

        chosenFormat = None
        formats = PluginManager.objects()

        if filter:
            # Find the map format supporting the given filter
            for format in formats:
                if not format.hasCapabilities(MapFormat.Write):
                    continue
                if format.nameFilter().lower() == filter.lower():
                    chosenFormat = format
                    break
            if not chosenFormat:
                qWarning(
                    QCoreApplication.translate(
                        "Command line",
                        "Format not recognized (see --export-formats)"))
                return 1
        else:
            # Find the map format based on target file extension
            suffix = QFileInfo(targetFile).completeSuffix()
            for format in formats:
                if not format.hasCapabilities(MapFormat.Write):
                    continue
                if suffix.lower() in format.nameFilter().lower():
                    if chosenFormat:
                        qWarning(
                            QCoreApplication.translate(
                                "Command line",
                                "Non-unique file extension. Can't determine correct export format."
                            ))
                        return 1
                    chosenFormat = format

            if not chosenFormat:
                qWarning(
                    QCoreApplication.translate(
                        "Command line", "No exporter found for target file."))
                return 1

        # Load the source file
        reader = MapReader()
        map = reader.readMap(sourceFile)
        if (not map):
            qWarning(
                QCoreApplication.translate("Command line",
                                           "Failed to load source map."))
            return 1

        # Write out the file
        success = chosenFormat.write(map.data(), targetFile)

        if (not success):
            qWarning(
                QCoreApplication.translate(
                    "Command line", "Failed to export map to target file."))
            return 1

        return 0
    w = MainWindow()
    w.show()
    a.fileOpenRequest.connect(w.openFile)
    if (not commandLine.filesToOpen().isEmpty()):
        for fileName in commandLine.filesToOpen():
            w.openFile(fileName)
    elif preferences.Preferences.instance().openLastFilesOnStartup():
        w.openLastFiles()
    return a.exec()
예제 #12
0
 ap.add_argument('-o', dest='filename', default='coverage.png')
 ap.add_argument('-m', dest='mapfile', required=True)
 ap.add_argument('-b', dest='num_banks', required=True, type=lambda x: int(x, 0))
 args = ap.parse_args()
 
 bank_mask = 0x3FFF
 bank_size = 0x4000 # bytes
 width = 256 # pixels per row
 bpp = 8 # bytes per pixel
 
 romname = args.romname
 rom_size = args.num_banks * bank_size # bytes
 height = (args.num_banks * bank_size + (width * bpp - 1)) // (width * bpp) # pixels
 rows_per_bank = bank_size // (width * bpp)
 
 r = MapReader()
 with open(args.mapfile, 'r', encoding= 'utf-8') as f:
     l = f.readlines()
 r.read_map_data(l)
 
 default_bank_data = {'sections': [], 'used': 0, 'slack': bank_size}
 filler = [0x00, 0xFF]
 
 if (romname is not None):
     with open(romname, 'rb') as f:
         for rb in range(0, args.num_banks):
             data = r.bank_data['ROM Bank'].get(rb, default_bank_data)
             bank = f.read(bank_size)
             if (bank[bank_size - 1] in filler):
                 fill = bank[bank_size - 1]
                 for i in reversed(range(-1, bank_size - 1)):
예제 #13
0
파일: main.py 프로젝트: mz314/mapreader
import sys
from mapreader import MapReader

if len(sys.argv) < 2:
    print("No params")
    sys.exit(1)
 
print("Opening", sys.argv[1])
reader = MapReader(sys.argv[1])
reader.load_map()

reader.normalize()
reader.divide_entities()

for entity in reader.entity_content:
    
    parsed = reader.parse_entity(entity)
    print("-----------------------------")
    print(parsed)
    
    
예제 #14
0
    def render(self, mapFileName, imageFileName):
        map = None
        renderer = None
        reader = MapReader()
        map = reader.readMap(mapFileName)
        if (not map):
            qWarning("Error while reading " + mapFileName + ":\n" + reader.errorString())
            return 1

        x = map.orientation()
        if x==Map.Orientation.Isometric:
            renderer = IsometricRenderer(map)
        elif x==Map.Orientation.Staggered:
            renderer = StaggeredRenderer(map)
        elif x==Map.Orientation.Hexagonal:
            renderer = HexagonalRenderer(map)
        else:
            renderer = OrthogonalRenderer(map)

        if (self.mTileSize > 0):
            xScale = self.mTileSize / map.tileWidth()
            yScale = self.mTileSize / map.tileHeight()
        else:
            xScale = yScale = self.mScale

        mapSize = renderer.mapSize()
        margins = map.computeLayerOffsetMargins()
        mapSize.setWidth(mapSize.width() + margins.left() + margins.right())
        mapSize.setHeight(mapSize.height() + margins.top() + margins.bottom())
    
        mapSize.setWidth(mapSize.width()*xScale)
        mapSize.setHeight(mapSize.height()*yScale)
        image = QImage(mapSize, QImage.Format_ARGB32)
        image.fill(Qt.transparent)
        painter = QPainter(image)
        if (xScale != 1.0 or yScale != 1.0):
            if (self.mUseAntiAliasing):
                painter.setRenderHints(QPainter.SmoothPixmapTransform |
                                       QPainter.Antialiasing)

            painter.setTransform(QTransform.fromScale(xScale, yScale))

        painter.translate(margins.left(), margins.top())
        
        # Perform a similar rendering than found in exportasimagedialog.py
        for layer in map.layers():
            if (not self.shouldDrawLayer(layer)):
                continue
            painter.setOpacity(layer.opacity())
            painter.translate(layer.offset())
            tileLayer = layer
            imageLayer = layer
            tp = type(layer)
            if tp == TileLayer:
                renderer.drawTileLayer(painter, tileLayer)
            elif tp == ImageLayer:
                renderer.drawImageLayer(painter, imageLayer)
            painter.translate(-layer.offset())
        painter.end()
        
        # Save image
        imageWriter = QImageWriter(imageFileName)
        if (not imageWriter.write(image)):
            qWarning("Error while writing " + imageFileName + ": " + imageWriter.errorString())
            return 1
    
        return 0