Introducing miRack – an optimised fork of VCVRack for Raspberry Pi and others

April 20, 2018

Lately I got distracted from Dwarf Fortress Remote development by discovering VCVRack - an open-source virtual Eurorack-style modular synthesizer written by Andrew Belt. I don't even remember how it happened, also I'm not really a musician but I have a soft spot for toying with music apps (and developing ones as you know - SoundGrid, SoundGrid Live!). But then I, also accidentally, noticed a discussion related to running it on Raspberry Pi, basically stating that was unusable on such hardware. I could not resist changing that, especially considering that I finally got a reason to buy an RPi.

Important note: in fact, I started development o RPi 3 Model B, but then ended up buying an ASUS Tinker Board instead (because it looks cool). In tests, Tinker Board is about twice faster than Raspberry Pi. However, without active cooling, my board reduces frequency to at most about 1.2-1.4 GHz (from original 1.8 GHz), so it's not that much faster than RPi when I'm running Rack on it. Below when I say RPi I will be referring to all similar single board computers, just take into account that your results may be different from mine.

VCVRack is a woderful project, and especially the community that formed around it quite quickly with many developers making plugins implementing various modules (the Rack application itself is just a host and doesn't include any modules apart from MIDI and audio in/out). Unfortunately it sucks performanse-wise - the choice of frameworks, the base Rack code itself, the fact that plugins are created by different people with different level of expertise and care for performance - all this causes people to complain about performance even on desktop hardware.

Interestingly, UI part (as opposed to computational part) was the worst and took the most time to get decent FPS on RPi hardware. Rack uses SVG for all UI elements and NanoVG for rendering, and with improper use and without additional optimisations both to NanoVG and Rack, this led to each frame requiring up to a thousand and more (depending on the number of modules added) of OpenGL calls - this is a bad practice and unacceptable even on desktop hardware and just could not work on RPi. I've reduced this number to just several dozens when idle, and another several dozens when adjusting knobs and sliders (not counting frequently updated widgets like scopes that just have to be fully rendered every time).

I did remove some of the visual effects like shadows and light halos - because the performance is more important on weak hardware than visual effects after all. Some of them may be enabled again later (and I definitely need to bring back different colours for cables) when I assess their impact on FPS. Also, I'm planning to add support to work without X server into GLFW (the library used by Rack for OpenGL window creation and mouse/keyboard events). In my tests I noticed significant FPS increase without an X server on my hardware.

Then, I've implemented multi-threading for the actual signal processing. This isn't strictly neccessary on desktop but vital on multi-core hardware with much slower individual cores. Also, I made the engine run only on callback from audio driver - this is probably temporary but I've noticed some performance issues related to thread synchronisation otherwise. I need to see what side effects this change has apart from not being able to route output to a DAW (via VCVRack's Bridge plugin), but that's not important when running on RPi anyway.

And then there were various changes to individual modules - to avoid sample rate conversion, to tweak quality vs performance, to fix rendering, to cache values instead of calculating each step, or to at least not to compute values for module outputs that are not connected.

Of course, this project has limitations when running on RPi and similar hardware, and it obviously depends on the number of modules used in a patch and the modules themselves.

The VCVRack license disallows the use of some of its graphics resources and of the "VCV" name part in derivative works, so now I need to take care of this (and of some occasional crashes) before a public release. My software will be named miRack. Once it's ready, I'll explain in more detail the differences between it and VCVRack, its limitations, and compatibility with existing plugins (in short, plugins are source-compatible). By the way, of course, it can also be used on desktop hardware (at least on Mac and Liux as I haven't tried building on Windows), and UI performance improvements are noticeable.


Announcing Dwarf Fortress Remote Subscription

March 14, 2018

Current Dwarf Fortress Remote server setup procedure is as simple as it can be - just download a single package for your operating system, enter one command in the game console, and scan the displayed QR code with the iOS app. The server can also be easily set up on Linux using a Docker image or cloud-config scripts for popular cloud hosting providers.

Even being that simple, it still has to be done, i.e. you can't just download the app from the App Store on a mobile device and start playing. In rare cases, users may also have troubles connecting to their home computer running Remote server if both home and cellular network settings (as configured by service providers) are too restrictive.

Today, I'm excited to announce Dwarf Fortress Remote Subscription - an optional service that provides access to a managed server running the game with Remote plugin and allows to start playing right after installing the app (and subscribing) with no additional setup required. Such server should be accessible from any network and will also help people having connection issues mentioned above.

It's possible to upload and download your saves at any time, even after cancelling your subscription, and this service is completely optional. Dwarf Fortress is a game by Bay12Games available for download free of charge. Remote server plugin will also always be free for installation on your own computer.

Dwarf Fortress Remote Subscription will become available in Q2 2018. Leave your email on the new subscription page to get notified once that happens, or follow just @mifki on Twitter for updates.


What’s new in Dwarf Fortress Remote for iOS 1.72

March 7, 2018

This update mainly contains small user interface fixes, but also may help users who were entering invalid server addresses and were incorrectly getting an "invalid password" message.


What’s new in Dwarf Fortress Remote for iOS 1.71

February 1, 2018

This is a late announcement about new features available in the latest DF Remote app update which was released couple weeks ago.

The biggest change is support for manager orders conditions, which allow to automate a great deal of the fortress life.

Also, when searching for job types to create a new manager order, individual words will be matched instead of whole strings. This means you can type "smelt platinum" or even just "sme p" to find "smelt native platinum ore" job:


Digital Ocean pricing change – cheaper and faster Dwarf Fortress Remote servers

January 18, 2018

Digital Ocean is a great way to run Dwarf Fortress Remote server in the cloud — it's cheap, easy to set up, and provides decent performance, especially for newer players who don't have very big forts.

Recently I got wonderful news from Digital Ocean in my inbox. They've updated their pricing and doubled the amount of memory available on $5 and $10 plans. Also, apparently in the very end of the last year, they introduced a $15 plan with even more memory. Dwarf Fortress is single-threaded, so here I'm talking about plans with 1 CPU only.

So, current plans best suited for running Dwarf Fortress Remote server are the following:

Monthly PriceCPUMemory

The $15 plan is flexible and although I said that DF is single-threaded, it may make sense to have less memory but one core just for simulation and another one for everything else. More testing will be needed to find out what's actually faster.

Remember that by signing up using this link, you will receive a $10 credit — that's up to two months of playing Dwarf Fortress.


What’s new in Dwarf Fortress Remote for iOS 1.70

January 10, 2018

Version 1.70 released today is a huge update that adds support for many Dwarf Fortress features there were not previously accessible via the app:

  • Hauling routes and minecarts
  • Stockpile/workshop linking
  • Designation priorities, marker mode, standard/marker toggling
  • Viewing kill lists for units
  • Outdoor access status for hives
  • Removing individual activity zone tiles
  • Viewing engraving descriptions
  • Checking/active/ready status info for manager orders
  • Choosing an image related to a historical figure for a job/order

Bug fixes:

  • Fixed pressure plate trigger configuration
  • Fixed some issues related to setting job/order details
  • Various UI fixes

Support for configuring manager order conditions didn't get into this release but will also be available in the next update soon.


What’s new in DF Remote server 1.11.3

January 6, 2018

In preparation for an upcoming big app update, new server update fixes activity/job titles shown for units in some cases, fixes issues with job/order details specification and shows the currently set image for a job/order.

Also, support for DF 0.40.24 has been removed, and support for 0.43.03 will be removed soon as well. If you're still using those and having troubles upgrading, feel free to contact support for help.


On Dwarf Fortress versions support in DF Remote

November 30, 2017

It looks like it's time to discontinue support for DF 0.40.24 in Dwarf Fortress Remote, and probably 0.43.03 if analytics shows that no-one is using it nowadays.

On the other hand, DFHack 0.43.05-r3 is now likely to be the last release of DFHack for 0.43.05, support for it will be added soon.

DF 0.44 is out now, with the biggest and exciting new feature is being able to send dwarves away from your fort to raid other sites, or recover people or artifacts. This is done using what before was Civilizations screen, which now also includes world map, news, known world artifacts, and missions sections.

As usual, I'm not planning to support this version officially until bug fixing is over for it and there's a stable release of DFHack. However this time I may consider adding experimental support once this new screen is reverse-engineered so that its functionality can be implemented in Remote.

November 23, 2017

Dwarf Fortress Remote 1.67 is now available, bringing support for iPhone X and iOS 11, and fixing number of other issues and crashes.


Bug fixes in the latest DF Remote iOS app (1.66)

September 25, 2017

The following bugs are fixed in the latest version 1.66:

  • Occasional crash if connection to server fails
  • Crash on unit info and workshop profile screen if unit has a certain skill level
  • Crash when touching traffic configuration row in designation menu
  • Crash when adding jobs in a workshop in some situations
  • Crash when upading minimum member count for a squad order in some situations
  • Failure to delete or modify squad orders in some situations
  • When viewing unit info from a workshop profile screen, info is shown for a wrong unit