<reponame>squintdev/nftscii

from art_export import ArtExporter
from art import TileIter

class ANSExporter(ArtExporter):
    format_name = 'ATASCII'
    format_description = """
ATARI 8-bit computer version of ASCII.
Assumes ATASCII character set and Atari palette.
Any tile with non-black background will be considered inverted.
    """
    file_extension = 'ata'
    
    def run_export(self, out_filename, options):
        # binary file; encoding into ANSI bytes happens just before write
        self.outfile = open(out_filename, 'wb')
        for frame, layer, x, y in TileIter(self.art):
            # only read from layer 0 of frame 0
            if layer > 0 or frame > 0:
                continue
            ch, fg, bg, _ = self.art.get_tile_at(frame, layer, x, y)
            # swap char indices 0 (heart) and 32 (blank space)
            if ch == 0:
                ch = 32
            elif ch == 32:
                ch = 0
            # non-black (color 1) background = use inverted set
            if bg > 1:
                ch += 128
            self.outfile.write(bytes([ch]))
            # line break
            if x == self.art.width - 1:
                self.outfile.write(bytes([155]))
        self.outfile.close()
        return True

from art_export import ArtExporter
from art import TileIter

class ANSExporter(ArtExporter):
    format_name = 'ATASCII'
    format_description = """
ATARI 8-bit computer version of ASCII.
Assumes ATASCII character set and Atari palette.
Any tile with non-black background will be considered inverted.
    """
    file_extension = 'ata'
    
    def run_export(self, out_filename, options):
        # binary file; encoding into ANSI bytes happens just before write
        self.outfile = open(out_filename, 'wb')
        for frame, layer, x, y in TileIter(self.art):
            # only read from layer 0 of frame 0
            if layer > 0 or frame > 0:
                continue
            ch, fg, bg, _ = self.art.get_tile_at(frame, layer, x, y)
            # swap char indices 0 (heart) and 32 (blank space)
            if ch == 0:
                ch = 32
            elif ch == 32:
                ch = 0
            # non-black (color 1) background = use inverted set
            if bg > 1:
                ch += 128
            self.outfile.write(bytes([ch]))
            # line break
            if x == self.art.width - 1:
                self.outfile.write(bytes([155]))
        self.outfile.close()
        return True
ATARI 8-bit computer version of ASCII. Assumes ATASCII character set and Atari palette. Any tile with non-black background will be considered inverted. # binary file; encoding into ANSI bytes happens just before write # only read from layer 0 of frame 0 # swap char indices 0 (heart) and 32 (blank space) # non-black (color 1) background = use inverted set # line break