Official development blog

My Cogmind Dev Tools

I sometimes get questions about what I use to develop Cogmind and although I compiled a list on r/RoguelikeDev years back, it’s undergone a few changes since then, so it’s about time to put an updated version here on the blog for anyone who’s interested. Maybe you’ll find something useful you weren’t aware of before :)

Text Editing

Notepad++

No doubt the star of the show, Notepad++ is such a fast and versatile editor. I love how responsive it is. I’m actually still using a custom version built in 2012, from back before NP++ included support for extensive user-defined syntax highlighting. These features were eventually added to NP++ itself (I think contributed by the devs who developed the version I’m using now, actually), though I’m happy with what I’ve got now so I just keep using it.

I use Notepad++ for editing game data and scripts, for which I created custom syntax rules and set a ton of Cogmind-related keywords to make the job of content creation easier.

cogmind_data_npp_editing

Editing Cogmind data files in Notepad++, with custom syntax highlighting and keywords (open for full size).

Every day I pretty much always have Notepad++ open with Cogmind’s most commonly edited data files already loaded, mirroring most to top and bottom panes so I can take advantage of horizontal scrolling and keep column headers visible, or of course simply be able to edit two separate locations in the same file (or reference one position while editing another)

I also frequently use the macro system to facilitate editing (which is again so much faster and more responsive than those I’ve found in other programs), and will sometimes even drop text from other programs into NP++ to record and run a macro on it before copying back the results :P

Simultaneous multi-line editing is also great, especially for my needs given the typical layout of Cogmind’s data files.

cogmind_data_npp_multiline_editing

Random example of using multiline editing in Notepad++.

Yay for Notepad++!

TED Notepad

I found this gem while looking for a Windows Notepad alternative, and it really delivers. I write all my notes (e.g. todo lists, game design docs) in simple .txt files, and TED Notepad is a great lightweight editor with a wide variety of text processing features that can come in handy sometimes, too.

TED_notepad_tools_lines_options

Some of TED Notepad’s text processing options.

As much as I like Notepad++, I don’t want to use it for this since I prefer having an editor with somewhat different settings and behaviors more suitable for my typical note-taking needs. I use a different font and colors for editing notes, and it’s nice to have separate small windows for each file I’m working with, windows that I can also close with a simple press of Escape.

cogmind_notes_alpha_terminal_hacking_overhaul

Sample notes from Cogmind’s terminal hacking overhaul in early alpha (open for full size). I’ve shared a fair number of screenshots of my notes on the blog before, so this style will be familiar to regular readers :)

Programming

Visual Studio

Cogmind is written in C++ and my primary IDE is Visual Studio, which needs no introduction.

I started using VS back in 2006 after migrating over from Bloodshed Dev-C++ at the suggestion of my brother. (Ancient history: Years before that I just wrote C code in Windows Notepad and used a command line compiler… What a long road it’s been :P)

Cogmind was first developed in Visual Studio 2010, and although there have been five new major versions since then, I’m still using 2010 since it works fine and I’ve got it all set up the way I like it (I have a number of extensions), so don’t see a need to switch versions.

cogmind_source_sample_player2_ui

Sample source code from the UI in Cogmind’s most recent special event/mode, in VS2010 using my color scheme. Like the notes shots, you’re probably familiar with seeing these from time to time on the blog :P

Overall I really like the Visual Studio debugger and have become familiar with many of its other features over the years. Some of my favorite/most-used hotkeys:

  • Shift-Alt-Arrows: Expand cursor across multiple rows for multiline editing, or to select an arbitrary block of text for copy-paste; like in Notepad++, editing multiple rows at once is a great feature that comes in handy when coding certain things
  • Shift-Alt-s: Split the current file in two views, to access two different places at once
  • Ctrl-Shift-Up/Down: Move cursor between top/bottom file views
  • Ctrl-Tab: Switch back and forth between the most recent two edited open files (or press faster to go back further in the editing chain)
  • Ctrl-]: Move cursor to matching parenthesis/bracket
  • Ctrl-k, Ctrl-k: Set/clear a bookmark at the current line
  • Ctrl-k, Ctrl-n: Move cursor to the next bookmarked line
  • Ctrl--: Move cursor to its previous significant location (and Shift-Ctrl-- to move forward again if somewhere back in the cursor history)
  • There’s also the more obvious/common Ctrl-Shift-B to build, F5 to build/run, Shift-F5 to stop debugging, and F9 to set or clear a breakpoint.
  • I think I changed one of these from its default binding, but at least this list lets you know it’s a feature!

I don’t use the mouse much while coding, if I can help it :P

Very Sleepy

Very Sleepy is a great and free CPU profiler for Windows which has helped me improve Cogmind a good number of times whenever something starts to slow it down and I need to find just what it is, or look for general areas that can be improved.

I’ve shared info about this on the blog before, most recently in my article on Turn Time Systems last year, and probably most importantly in this progress update where I talked about multithreading Cogmind’s most time-consuming asset loading routines to cut the game startup time by one-third. I’ve also used it to help optimize pathfinding on multiple occasions. Roguelikes tend to do a lot of pathfinding!

cogmind_profiling_optimization_targets

Identifying high-level optimization targets in Cogmind’s startup process using data from Very Sleepy profiling.

Very Sleepy is super easy to use: Just point it at a running .exe and start. Collect data. Win. Amazing stuff.

Trivia: REXPaint‘s default GUI skin theme is named “Sleepy,” after Very Sleepy, since around the time I released the first public version in 2013 I wanted to use something other than the default theme I’d originally built for it when working on X@COM, and had just discovered Very Sleepy at the time and its website used a similar blue-ish color scheme that I liked (which is apparently now different these days!).

Design

yEd

During pre-alpha development I wanted a convenient way to design Cogmind’s world map via computer. Sketching on paper is fine for one-off tasks, but of course in this case I knew I’d be updating it in the future and wanted to be able to dynamically add areas, group them, show relationships… so flowcharting software seemed like a natural fit.

cogmind_world_map_with_distorted_branches_and_some_missing

Cogmind’s world map as seen in my yEd graph, albeit with branches distorted (and some locations completely removed for the screenshot :P) to avoid leaking spoilers. It started out simpler and has been expanding for years as I continue to add new maps.

In my search I found yEd Graph Editor, a free solution which also happens to be quite powerful. I only use a tiny fraction of its capabilities, but at the low end it’s really user-friendly, quick to get started with, and easily produces nice-looking graphs.

Aside from the original purpose, to create the world layout, I’ve since used it for a number of others things like making flowcharts for demonstrations. For example this one from my article on level design:

cogmind_level_design_exiles_strategy_flow_considerations

The yEd graph created to demonstrate the primary long-term strategic decisions related to the Exiles, a new world map location added last year.

I’ve also sometimes used it for figuring out program architecture if there are a lot of moving parts.

In going back through my yEd files for this post looking for examples of others kinds of things I’ve used it for over the years, I found this visual breakdown of Cogmind’s early development timeline, including game content relationships:

cogmind_visual_development_roadmap

Haha, wow time does fly… This graph accompanied my announcement regarding Cogmind’s upcoming “alpha release state” in 2015, written a couple months before the first release.

Anyway, if you need software for something like this, I highly recommend yEd.

Excel

Spreadsheets are extremely important when designing a large game, helping organize lots of raw data and balance mechanics. I didn’t originally want to use Microsoft Excel, since MS Word is a pretty terrible word processor and Excel must be of similar quality, right? Wrong.

For the first year I was using OpenOffice Calc for spreadsheets, but during that time it felt like the software was fighting against me anytime I wanted to do something, and there were weird design decisions all over the place. So when at one point for some reason at the time I had to use Excel, I discovered just how easy it was to do so many things I wanted to do, even without any experience! Things Just Worked. So I switched my design spreadsheets over (which was kinda painful since some things didn’t translate well, but I didn’t need all of the files by then, so I just converted and fixed the important ones).

I’m actually still using an old 2007 version of Excel I had, too, but it’s fine :)

cogmind_design_spreadsheets_collage_small

Various design-related Cogmind spreadsheets (open for full size).

I also use spreadsheets for analyzing Cogmind scoresheet data, the results of which are put on the forums, and I’ve done some even more in-depth statistical articles on the blog before, like Player Metrics: Stats and Preferences on and off Steam.

cogmind_analyze_scores_output_userscores_best_sample

Player scoresheet data as output to a .csv file for analysis in Excel.

Ever since starting this commercial project I’ve also been using a massive Excel spreadsheet to record my daily work progress.

cogmind_dev_hours_cateagorization_excerpt_oct_2019

Recording and categorizing hours of work each day, and noting where that time was spent. It’s also then easy to produce and maintain a variety of graphs based on this data. This data set, now north of 2,500 rows, is what I’ve been using to share occasional progress graphs over the years, like I do in some of my annual reviews, for example.

Spreadsheets are of course also useful for storing and analyzing financial data and any other database-like info that you need when running a business.

Excel makes it quite easy to do all this, and of course it’s a huge piece of software with a lot of features and there’s a large variety of things you might want to do and aren’t sure how, but at least it’s easy to find answers online since it’s so widely used.

Art

REXPaint

My most commonly used art-related tool is REXPaint, the ASCII/ANSI editor I first released publicly shortly before starting Cogmind development proper, and have updated many times since (with no doubt more versions to come!). It’s incredibly valuable for UI mockups and mapping, and of course makes it possible to more easily produce Cogmind’s iconic item and achievement art.

cogmind_thermal_cannon_spritesheet_excerpt_rexpaint_GUI

Part of one of Cogmind’s many item art “spritesheets,” as it appears in REXPaint.

 

cogmind_rexpaint_design_files_collage_small

A sample of the variety of my internal design work done in REXPaint (most of it for Cogmind) (open for full size).

Lots of devs and artists use REXPaint--you can see some samples of their work in the gallery.

I’ve also written some relevant guides a while back, including Roguelike Development with REXPaint and Cogmind ASCII Art, the Making of.

Photoshop

For anything that doesn’t fall under the grid-based umbrella that REXPaint is built to work with, I use a lot of Photoshop. That includes screenshot work, logos, and other raster images for marketing purposes. Also of course a lot of the diagrams and other images shared on this blog :)

cogmind_beta_9_wizardry_logo

The release logo for Cogmind Beta 9 “Wizardry,” created in Photoshop.

It’s an amazingly powerful tool, one that I started using over 20 years ago since that’s what my parents have always used :P. I’ve tested out a lot of other programs over the years, but always come back to Photoshop.

Although it’s probably not the best tool for the job, I’m most familiar with it so I even use it for pixelwise work including tilesets and bitmap fonts, as explained in my font series.

cogmind_9x18_font_layers

Examining bitmap font layers in Photoshop.

Because traditional roguelike screenshots are almost always best created as pixel-perfect PNGs, good PNG support is clearly an important thing to have in your software of choice. For that I use SuperPNG, a Photoshop plugin with more control over PNG output and better results than what you’d get with Photoshop’s native plugin.

Sound

Audacity

Ever since my first game that actually had sound effects, I’ve been using Audacity to manipulate and otherwise work with them. It’s a pretty powerful package for the low price of free. Getting just the right sounds often involves mixing, adjustments, conversion etc., and Audacity handles whatever I throw at it, so I’m satisfied :)

cogmind_sfx_explosions

Mixing samples in Audacity to create a final explosion sound effect.

You can read more about my use of Audacity in Sound Design in Cogmind, a How-to.

Reaper

Reaper is a powerful digital audio workstation, for people who really know what they’re doing. I am not one of said people, but I did really need something that could handle high-quality bulk conversion of audio assets, something Audicity couldn’t really do very well at all (maybe it’s gotten better in more recent versions? I dunno), and this was the best thing I could find for the job.

Winamp

Shout out to this vital tool! Okay so Winamp is technically a music player, one that I’ve been using for a couple decades and still use every day, but 1) listening to music while developing is really what keeps me going and focused, and 2) I do also use it for quick local browsing of large numbers of sound samples when doing audio work.

Winamp development died out years ago, then surprisingly a couple years ago a new version appeared and there is presumably more work going into a successor, but anyway, I’m using that new version, which has improved support for Windows 10.

Media

LICEcap & gifsicle

A side effect of Cogmind’s design focus on avoiding unnecessary visual distractions means that most static screenshots tend to look pretty boring, at least compared to what the game can look like in motion.

cogmind_part_sorting_animated_final

Characters look even cooler when they’re moving around, eh? :P

A quick survey of all the Cogmind media I’ve shared on Twitter over the past seven years shows that 35% of it was GIFs (the remaining two-thirds being PNGs).

cogmind_robot_hacking_gif_collage_small

A composite GIF produced to go along with Cogmind’s Beta 7 release, focused on robot hacking. There are 65 hacks in all.

In my search for an easy way to record GIFs I found LICEcap, an incredibly simple but effective program for recording directly from your desktop. I tried many others, but most either didn’t work for me, or at least not very well. LICEcap consistently produces very nice results, and that’s what I’ve used for all my Cogmind GIFs.

For even better results, I also run the LICEcap output through gifsicle, which optimizes GIFs into much smaller files that appear identical to the original--you can save a lot of space (and therefore loading time) with traditional roguelikes due to their typical minimalist visual style. For example GIFs can be optimized by removing data for pixels that don’t change between frames, and seeing as a large portion of roguelike interfaces and map views are static at any given time, even long GIFs can end up with a surprisingly low disk size.

gifsicle is a command line program, so if you want to try this approach without reading through the manual:

  1. Download gifsicle
  2. Download my GIF downsizing script and rename the .txt extension to .bat
  3. Put both gifsicle.exe and gifsicle-shrinkall.bat in the same directory along with any GIFs you want to shrink, and run the .bat file
  4. Enjoy your smaller GIFs :D

The batch file just contains the line “for %%f in (*.gif) do gifsicle --batch -O3 -k256 %%~nf.gif”, which instructs gifsicle.exe to shrink all the .gif files it finds in the same directory.

gifsicle can help you with lots of other GIF-related modifications, though this is the only one I run for literally every recorded animation.

OBS Studio

As something interesting to try I began occasionally streaming Cogmind weekly seed play, the first ever apparently taking place in November 2015, though I didn’t actually start saving them until December 2017, so the first couple awkward years of my streams are no longer accessible (maybe that’s a good thing :P).

It was a sudden decision to begin doing that, after seeing other devs doing the same and players expressing interest, and at the time OBS seemed to be the most popular way to stream, so I used that.

Streaming gradually became something I do alongside development, mainly of various Cogmind runs, as a way to both interact with the community and keep tabs on the player side of the experience. Certainly a much broader range of feedback comes from players, including indirectly just from watching what players share and talk about, though that’s no substitute for playing it myself to get the full moment-to-moment experience and possibly lead to fixes, tweaks, or new ideas.

Later on OBS gave way to the newer OBS Studio, so I switched to that. It might take a little while to get everything set up nicely, but once everything’s up and running there’s no real need to mess with it. Overall a decent piece of software.

(Trailer Production)

One thing I found OBS unsuitable for in my case was recording game footage for the trailer, but there were plenty of alternatives to try out there.

I won’t go over the details of the tools I used to make the trailer, since in all these years it was a one-off thing (so far) and I already have a dedicated article explaining that entire process. You can check that out for more info, but in short I used Camtasia, Movavi, and After Effects.

Web

Visual Studio Code

Similar to how I use two separate text editors, I like having a separate editor for all my web dev work so that the environment (e.g. fonts/theme/hotkeys/other options) can be set up differently, plus using different softare helps me get into a different mentality, and my web dev stuff is also pretty simple anyway, so no need for something like Visual Studio with all its bells and whistles.

I’ve gone through several different editors over the years, and have currently settled on Visual Studio Code.

cogmind_website_faq_source_sample_visual_studio_code

Visual Studio Code showing an excerpt of Cogmind’s website FAQ source.

I haven’t used VS Code a whole lot since I only switched to it within the past year and have been doing less web dev in that time, but it seems pretty nice, and it’s amazing to see MS build something that even many Linux developers have fallen in love with! (it’s cross-platform)

I use it mainly for editing HTML and CSS files.

FileZilla

If you’ve got a website and regularly deal with lots of files, you’re almost certainly going to want an FTP client to expedite the process. Duh. For this I use FileZilla, a pretty popular solution that gets the job done for me.

Backup

FBackup

Backups are vital. It’s sad how many times over the years we hear stories about devs (including in the roguelike community…) who’ve lost their entire project simply because a drive died and they only had one copy. Sometimes it’s months or even years of work!

I have an external hard drive for on-site backups, and use FBackup to mirror all my personal data (including of course Cogmind). It’s fairly easy to set up and use, and I used to run it all the time, but now I admit I don’t do it as often since I pay for an even better solution:

Crashplan

For a while I was trying to store backups of my data on a remove server of my own, but it was just too cumbersome and error-prone, so I went searching for a better solution.

Crashplan is one of the best, a service I use to maintain incremental backups of most of my data, pretty much in real time. I feel a lot safer having everything stored off site.

I haven’t ever needed Crashplan to recover Cogmind data before, but it’s helped me out a few other times and the recovery is quick and easy. Theoretically I guess I could also use it roll the Cogmind source back to any arbitrary point, too, though I doubt I’d ever need it to do that :P

By now you might notice there’s a major component missing from this (and/or the Programming) section of my list: version/source control. So technically I do have a GitHub account and that’s where Cogmind’s scoresheet definition lives so that that the new online scoresheet system (not built by me) can reference it, as can others looking to access the data (although I hear that will be available via an API in the future).

But other than that, I don’t use third-party source control solutions. Yes I do keep organized backups of Cogmind’s internal versions, but mainly just for the relatively rare need to reference them, and I don’t use any special software to manage this process.

Miscellaneous

There’s one other tool I like that doesn’t really fit well elsewhere, but can be quite useful: Bulk Rename Utility. If you ever have to rename a large number of files in a smart manner, BRU is for you.

Also the UI is great ;)

bulk_rename_utility_main_interface

Behold, Bulk Rename Utility with all its glorious fields, buttons, and drop-down menus!

It can honestly take a bit to get used to the UI, but it is very very powerful. It helps that you can see a realtime preview of all the changes you’re going to make once you execute, so you don’t have to apply any actual file renaming until you’re sure you’ll get the results you want.

Abandoned Tools

Aside from some examples mentioned above (OpenOffice Calc…), there’s other software that I was using at one point during Cogmind development but later abandoned. Might as well give them some cursory coverage here, too, for the record.

SilverNote

Cogmind’s original alpha design doc was written entirely in SilverNote. At the beginning of the project I was looking for a solution with strong support for list-based note taking, since that’s almost always how I write my notes (lists with sublists with sublists and so on), and SilverNote seemed to fit the bill.

It turns out SilverNote is a pretty bad piece of software, and the dev didn’t seem interested in fixing its bugs and other issues (the original website doesn’t even exist anymore, and it’s now apparently freeware).

By the time I’d made that determination I already had a bunch of notes stored in its proprietary format, so I decided to just power through and continue using it up to the alpha launch, since it was just the main design doc anyway.

Most of the content and features described therein was already implemented as of Alpha 1, so not long after the launch I just had SilverNote use its “export to HTML” feature to convert the old notes to a more accessible format in case I needed to reference them later, and stopped using SilverNote entirely.

Instead I began happily using .txt files again :P

cogmind_alpha_design_doc_summary_excerpt

An excerpt from Cogmind’s original alpha design doc. Each ‘+’ hides subsections, many of which have lists many levels deep where necessary. (SilverNote only crashed about ten times while I was trying to open the notes and get them prepared for this screenshot xD)

You can see a full summary of the above doc here, with more examples of what it contains, although when fully expanded the doc is 56 pages long (plus contains things I wouldn’t want to get questions about and have to explain :P), so this summary, too, is mostly top-level notes. Still, you can see some of the categories and contents if interested.

Note that Cogmind’s alpha design doc is missing more fundamental things you generally find in a design doc, because remember Cogmind Alpha was basically the second go at this, building on what was already done for the 7DRL the year before starting this as a commercial project. The 7DRL itself already had its own design doc covering a lot of the basics, and those features were already complete and carried over to the commercial version (I didn’t even rewrite the 7DRL code, just used it directly).

Sublime Text

Sublime Text was the hot new text editor when I happened to be looking for something to do my web dev with, so used it for a while and it was just okay. Then they switched to a pay model (it was originally free) and I didn’t really like it that much, so I went to look for something else.

I mean there are a lot of text editors out there and I’ve only used a handful of them :)

Atom

I replaced Sublime Text with Atom, another editor growing in popularity.

Oh my god this program. is. so. slow.

I compare everything to Notepad++, so maybe I’m biased because NP++ is insanely responsive almost regardless of what I throw at it, but Atom just felt like coding through molasses.

Nonetheless, I actually continued using it for a couple years or so because after finally getting it configured I was too busy with real work to go searching for yet another program, and I try to do as little web dev as possible anyway so it was only so painful :P

(Note: Maybe it’s gotten faster now, I dunno, but it was definitely anything but fast before.)

Conclusion

There you have it--my Cogmind dev tools!

I think I’ve covered everything here, but if I missed/overlooked a category or some aspect you’re interested in, feel free to ask.

And a final question: If anyone’s interested in an overview of the history and structure of the engine powering Cogmind (Rogue Engine X, first built in 2011), let me know and I could do that as the next post. Seems like a natural followup to something like this.

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

4 Comments

  1. Youngster
    Posted June 24, 2022 at 5:27 pm | Permalink

    The gif softwares look really helpful! However, I cannot follow your instructions on gifsicle. I have made a batch file and put it in the folder containing the gifsicle application, put a gif file into the same folder, and ran the batch file. Nothing happened to the gif file :(. Does it create the resized gif in a different folder, or am I missing something?

    • Kyzrati
      Posted June 24, 2022 at 5:41 pm | Permalink

      Hey Youngster! That’s odd, I’m still using the same method to this day, and to reconfirm I just downloaded the latest version of gifsicle (mine’s actually quite old by now :P) and tried again. Working fine, shrank a newly recorded gif as expected. Note it shrinks the file(s) in place, so it should simply replace the originals. I can see the filesize being updated immediately after it runs, as well as the file date being updated to the current system time.

      In cases like this where you have some issue with a command line program that isn’t behaving as expected, run it from the actual command line and see what other kind of output it gives you, since it might just tell you what’s wrong, or at least give you a look at what it did/tried or how it interpreted the commands.

      • Youngster
        Posted June 24, 2022 at 6:30 pm | Permalink

        Ah ok, after fiddling with the powershell terminal I finally solved the issue: I used spacebars in my gif name, and the terminal just hates locating files with space! After getting rid of the spaces the batch file ran just fine.

        Thanks for suggesting using the terminal, I probably would have never seen the error otherwise.

        (Also I now see why people always use underscore instead of space for file names -- I am too used to using the file explorer, so I did not realise that files with spacebars do not mix with terminals!)

        • Kyzrati
          Posted June 24, 2022 at 7:53 pm | Permalink

          Hehe, yep there you go, running it that way is really helpful to actually see the messages, and while you can technically sometimes use spaces in filenames by enclosing arguments in quotes, it’s often just easier to use underscores just in case your file needs to go through some process that can’t handle spaces for whatever reason. I always use underscores for data files (and even gifs) myself.

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>