Official development blog

REXPaint 1.0

Over two years ago, I released the first version of REXPaint, a tool I originally built to explore the possibility of adding art to one of my other projects. Since then it’s become a major component of my workflow for everything from art to UI mockups to map design and prefabs.

Come November there hadn’t been a new release for over a year, though the TODO list had continued to grow with little things that needed done here and there, on top of a number of feature requests from the many other developers, artists, and others who have integrated REXPaint into their own workflow (or fun time :D).

So it was about time to stop calling this thing beta and put together a symbolic 1.0.

New Website

The first thing I did was finally retire the old dev blog, replacing it with a new site here at Grid Sage Games.


REXPaint’s spiffy new logo--made in REXPaint, of course =p

That old blog will no longer be updated. All future developments will be announced on the Grid Sage Forums, and possibly here as well, since I should say that this blog isn’t technically only about Cogmind, that just happens to be the main project since its inception. Eventually we’ll even be seeing other games here :D.

Below I’ll introduce what’s new in 1.0, while for the full list of features accumulated in REXPaint’s nine previous releases you can browse the new website’s features page, which also shows many of them in action.

New Features

Aside from the four non-square Terminal/Fixedsys fonts added for the ANSI crowd, earlier versions of REXPaint came with four square fonts: 8×8, 10×10, 12×12, 16×16, essentially providing four zoom/scaling levels. With 1.0 I’ve added three more to close the gap (14×14) and make for larger-font images at the high end (18×18, 20×20).

Probably the biggest new image editing-related feature is cellwise HSV shifting. Both foreground and background colors of individual cells can have their HSV values tweaked in intervals you set in the options menu. Combined with right-click-to-copy, this can be a useful way to draw art or adjust an image or palette. Here’s an example of creating a quick image using only two hues and brightness shifting (hue/saturation remain unchanged).


REXPaint cellwise HSV tweaking (brightness only).

In that recording you can also see a couple of the other new useful features:

  • The left tools HUD has been expanded to include color values under the cursor, applicable when hovering over either the palette or an image. The display can be toggled between RGB/HSV, whichever you prefer. I’m surprised this wasn’t added earlier, since it’s a feature I rely on a lot in other image software, but I guess I didn’t often need it while working on my own REXPaint stuff since I stick to my generated hue chart… and no one asked for it =p
  • While drawing rectangles or copying an area, the dimensions  of the rectangle are displayed next to the cursor. This is optional, and the same information shows in the info window on the bottom left as it always has, but it can be nice to have it right next to the cursor.

I also added a pair of popular general-purpose palettes to the resources page (alongside DawnBringer 32, which has been there for a while):


Arne 32 & Arne 64 palettes.

For a while REXPaint has featured glyph highlighting that can be used for image analysis--showing exactly where a given glyph has been used in the current image, which in 1.0 has been extended to include colors.


REXPaint image analysis: Locate all uses of a particular color or glyph in the current image.

The rest of the changelog is mostly little stuff, though it’s worth highlighting two other notable optional features that were added to help prevent shooting yourself in the foot, should you need them:

  • Individual layers can be locked to prevent editing the wrong one. “Just in case.” If you try to make an edit, a message will flash to remind you the target layer is locked.
  • Exiting REXPaint with unsaved changes will first pop up a warning dialogue.

The full public changelog for REXPaint v1.00:

  • NEW: Added more CP437 fonts (greater range of image zoom/scale options): 14×14, 18×18, 20×20
  • NEW: Cellwise HSV color shifting of both foreground and background (interval controlled in options)
  • NEW: Info window shows palette/art foreground/background color values under cursor, either RGB or HSV (toggle with ‘q’)
  • NEW: Rect/Copy tools can show area dimensions directly on the canvas (toggle via “RDim” button, or Ctrl-d)
  • NEW: Lock individual layers to prevent accidental modification (“Lck” button, or Shift-1~4)
  • NEW: Hold Alt while cursor hovering over a palette color to highlight all uses in image (akin to glyph highlighting feature)
  • NEW: Options menu (the ‘O’ button at the bottom, or F2)
  • NEW: Program settings changed while running are saved/remembered for next time, without requiring cfg modifications
  • NEW: Exiting while image(s) have unsaved changes requires confirmation (can be disabled in options)
  • NEW: Reset image location to top-left corner via Enter (centering switched to Ctrl-Enter)
  • NEW: Ctrl-RMB copies the uppermost visible cell at that position in a multi-layered image (useful for working from reference layers)
  • NEW: Premade Arne32/Arne64 palettes available from the website resources page
  • MOD: Enhanced 16×16 CP437 font’s relative proportionality with other fonts
  • MOD: Image dimension limits increased from 999×999 to 2500×2500
  • MOD: Removed Undo/Redo buttons to save space (use ctrl-z/y instead)
  • MOD: Autosaving now inactive by default (must set desired interval value in options)
  • MOD: Layer delete button changed from “Del” to “X”
  • MOD: Palette/color swaps only operate on unhidden layers
  • MOD: Changes to layer hide/unhide/active states no longer count towards the unsaved progress indicator
  • MOD: Different cfg format, now that options are available from within REXPaint itself
  • MOD: Change skin keyboard command switched from F2 to F3 (also now accessible directly from options menu)
  • MOD: License in README file more explicit about commercial use of images
  • MOD: Removed backwards compatibility with pre-R9 .xp images (2013 format), which were converted by 0.99r9 build (2014)
  • FIX: One mixed-line glyph in the square 10×10 CP437 font was 1 pixel off
  • FIX: Reversed NW/SE directional canvas scrolling via numpad
  • FIX: Using the mouse to select a value box in the color picker required an extra key press before detecting input
  • FIX: Creating a new image copied the view offset of the image currently open, rather than resetting it to (0,0)
  • FIX: Image browser couldn’t collapse subdirectories at a depth of three or greater
  • FIX: Copy-paste of transparent cells on layer 2+ triggered fatal error in undo history (Note: RMB copy faster for this purpose, anyway!)
  • FIX: Cellwise drawing off edge of image without releasing LMB damaged undo history, which could crash if accessed
  • FIX: Could attempt to draw multi-cell objects to parts of a large image shifted under the tools area, leading to other UI issues
  • FIX: Typing a grave character at the end of a text entry would crash the font renderer
  • FIX: Crash on running without an enabled audio device (now no such device required)

(Previous changelogs can be seen on the downloads page.)


While I’ve always called REXPaint “user friendly,” that’s more a relative phrase since I’m comparing it to other ASCII/ANSI editors, which at this point don’t have either the same breadth of features or flexibility. Still, it’s not exactly intuitive even for regular users of other editors like the Photoshops, Inkscapes and Aseprites of the world, something we can attribute to it being a very different type of editor.

Some advanced features are accessible only via hotkeys, which I think is fine because most users won’t need them, anyway, but one of the most egregious omissions normally required to earn the title “user friendly” is a true options menu.

Prior to 1.0 the options were only accessible via a text file--that’s behind us now with the addition of a true in-program options menu. Changes to settings made while REXPaint is open, including the state of the editor like the font and palette you’re using, are all saved to disk automatically to be restored when next run. And of course it’s nice to see all the options listed right there with a description of each, as well as proper bounding of values and access to the color picker for setting relevant options. The options menu also provides a quicker method to access a needed font or palette if you have many loaded at once.


Sample interaction with the options menu (click for full size).

The options are still saved to a text file, a much cleaner one than before, which you can copy over to another version of REXPaint if you ever need to upgrade:


A new config file, containing default values, which is created automatically the first time you run REXPaint.

The Future of REXPaint

1.0 is certainly not the end of the line. There are other features I’d still like to add, we may get some cool requests, and I will continue to maintain my prioritized TODO list used as a basis for updating REXPaint when time permits.

In related news, now that 1.0 is complete, the next step is to host a competition/event for REXPaint creations. I don’t have it entirely planned out yet, nor a specific date, though I’d like to hold it some time within the next few months. More info to come!

This entry was posted in Uncategorized and tagged , . Bookmark the permalink. Trackbacks are closed, but you can post a comment.


  1. ethan
    Posted May 19, 2016 at 9:29 am | Permalink

    **** me is that dwarf fortress?? like i couldnt love it all more.

    • Kyzrati
      Posted May 19, 2016 at 10:11 am | Permalink

      That was drawn by the creator of the DF GemSet tileset and famous DawnHack roguelike tileset, DragonDePlatino. He’s good :D

Post a Comment

Your email is never published nor shared. Only the anti-spam entry is required. See here for the privacy policy.

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>