I'd like to see a go-to common file format for all of these ASCII tools, because there's some barriers keeping them out of usage in games right now. I looked around a month or two back and ultimately implemented XBIN
, which is a very cool and compact spec, designed to stream well over slow modem connections by interleaving color and character data in a single RLE stream. But it wasn't quite right for use in a modern ASCII game; for example, height was implicit, which made it kind of annoying to edit, at least in PabloDraw. And while it had entries for palette and character set, the character size was limited. It didn't have a notion of transparency. Et cetera.
My own ideas:
-JSON-based first - maybe later a binary form with IFF
style chunks. Ease of implementation is critical - we want to be able to bootstrap partial support in an engine just by eyeballing an example file. To grow the format, we can add more chunk types.
-Fixed, predefined modes for number of colors, characters, blink, transparency, etc. Pretty much all character-graphics systems in existence just take some power of 2 or boolean value for each of these properties, so I think we can decompose them into individual settings.
-A named character set and palette identifier, under the assumption that most assets are aiming to reuse an existing retro system, or address a common set for the game(which could be referenced in a nearby file).
-Custom character sets(this should be an all-or-nothing proposition - either you're using an existing set or you're completely replacing one - otherwise implementation is complex)
-Custom RGB palettes
-Planar layers. This allows for any combination of characters/attributes to be stacked and gives a straightforward path towards support for animations too - if the file has more layers than needed for the rendering mode, the extra layers are animation frames.
-No compression beyond the JSON/binary distinction. Adds too much implementation overhead, and we can always apply a generic compressor on top on distributables or(if creating assets for a real retrocomputer) write a custom exporter.