Progress on Aliasing.Pro Version 6!
My creative block is over and all of my creativity is going into developing Aliasing.Pro Version 6. I decided against continuing updating Version 5, and I’m totally overhalling the whole codebase to be faster, cleaner, and more scalable. At my current rate, I’ll have Version 6 launched in a matter of weeks rather than months.
The interface is now completely customizable, not just four resizable windows. Windows can be dragged and dropped into place or kept floating for quick changes. You can save or load layouts there are preset layouts for common use cases and screen sizes. The toolbar can now be docked on any edge of the screen and it defaults to the smaller edge on phones which gives much more space for the viewport. Modals have been greatly improved as well.
Some of my previous posts talked about using a sprite based rendering system. I learned a lot about from those experiments but decided it is to restrictive for most use cases. Don’t get me wrong, sprite based layers are still coming in Version 7, but they will be a Pro feature. I am keeping the requestAnimationFrame render loop concept from those experiments as it has opened up a whole world of new posibilities. Every night, I have a drawing session with my wife on our iPads and I am always coming up with additional inovations and quality of life improvments. I’m trying not to get to attached to any of my assumptions, even if I already put a lot of effort into them.
Palettes will be restricted to 24 colors and the swatches won’t be reorderable, but you will be able to make 7 custom palettes in addition to the system default allowing up to 192 colors. Edits to colors will update on the viewport in real time and you will even be able to apply filters multiple swatches at the same time. Each layer is assigned one palette which can be changed at any point. Instead of storing the layers as canvas contexts or imageData eache pixel is just 1 byte in a unit8ClampedArray. Only the first 5 bits are used for now. That allows up to 32 values so indices 0-23 determins the pixels color swatch from the layers selected palette and indice 24 represents full alpha. The remaining 3 bits are currently unused, but could be useful in the future such as for labeling which palette is used per tile in a sprite layer.
The viewport now renders at up to 60 frames per second and pointer inputs are throttled at 30 fps. Canvases and layers now have a maximum resolution of 512×512 pixels which should be big enough for most pixel art. You can now view and draw on the areas of your layers outside the selected canvas and it only renders the areas that actually have opaque pixels. The engine uses depth testing, which means it only renders the top most opaque pixel. With these performance improvments, the viewport runs at full speed even with most worst case scenarios and on slower devices.
You can now have multiple canvases which can be selected from in the layers window or when exporting. Each canvas has its own position and resolution relative to the project origin in the top left. Selection is stored in each canvas as an array of booleans, allowing you to store multiple selections with a low memory footprint. One draw back is that you can’t select areas of layers that fall outside the current canvas unless no pixels are selected. This is still useful since you can have a larger working canvas and crop it later or even have multiple crop options for different desired exports.
I’m currently working on Version 6.2.10 and everything is already working great. The viewport and layers system came first to get the underlying engine established and yesterday I got pinch pan/zoom gestures and pressure sensitivity working. I also added ratio and angle settings to the brush and eraser tools which allows for a caligraphy type effect. Alpha lock and clipping masks allow you to draw over or under opaque pixels without a need for selections. I don’t want to add undo and redo yet so I don’t have to rework the history implementation every time a feature is added. That is going to be handled by Lodash and it feels like it is the most important feature that is not yet added.
Another very important planned feature is text layers. You can define your own ASCII based font, including kerning or monospaced options, using the font editor window. Font sheets will feature 16×16 tiles, allowing up to 256 characters. White will be converted to the primary color of a character, gray can be used to define an accent color, and magenta will represnt alpha. You will be able to export or import your font sheets and it will be compatible with Dwarf Fortress ASCII tilesets!
I am so excited to share Version 6 with the world. Once the backend is reworked, the beta will become a closed. I am happy to hand out beta codes to anyone who wants to get in early, but after the Kickstarter launches you will have to support with the second tier of rewards or higher. Join the Discord sever for constant updates and to join the community!