What's new in the latest build?



  • Fixes crash on “new game”, which was triggered by a change I made fixing a crash on upgrading from a particularly old save game version. Now both work.
  • Fixes Linux build, which was missing the Steamworks shared library from its distribution. (Perhaps unsurprisingly, nobody noticed even though this has been broken for more than a month; Linux users make up just 0.89% of the market, according to the Steam hardware/software stats! :wink: )


I hadn’t really planned to push this one up just yet (there was still a little more cleanup I wanted to do)… but here it is! There were enough issues in 0.12.47 that I figure any new little issues in 0.12.48 will be less-bad than the big issues in 0.12.47. :slight_smile:


  • Fixed a bug which could cause some action bar items to not appear correctly after a load.
  • Initial (partial) implementation of an MMORPG Overview window. (see it on the “Reports” tab)
  • Fixes pathfinding to correctly cost the traversal of roads in a negative direction.
  • Fixes a potential crash in the pathfinding debug tool.
  • “Cheat detect” tool now draws on top of roads, instead of under them.
  • Fixes a potential (rare) crash bug when loading any saved game which contains NPCs. Loading such saved games now fixes the issue.
  • The action bar has now been restructured. Instead of having explicit “map”, “edit”, and “grid” modes, you now automatically switch between modes based upon which action bar tab you select.
  • Adjusted the window rez effect.
  • The “options” window now presents resolutions as a combo box, instead of as a scrolling view, and the combo box is only available when you select to run in fullscreen. In a window, you can just make the window whatever size you want. (Still needs more work)
  • The VectorStorm engine now supports swapping vsync on and off while the game is still running (when supported by the video card’s OpenGL driver). The “options” window now provides a “vsync” option, for turning it on and off. Note that if you turn off vsync, we still insert sleeps to try not to render faster than about 60fps. There should really be an option to turn that off, too, I guess.

This build isn’t quite as ready for prime time as I usually like, but there were a couple crash fixes (and that catastrophic “missing build tools” thing) that really needed to go out. Expect to see cleanups in the action bar structure over the coming days.


Did I mention something about “not quite as ready for prime time as I usually like”?


  • Fixes a crash if you switch tabs on the action bar when you haven’t yet activated any regions (for example, during the initial steps in the tutorial)



  • Adds the MMORPG Overview window to the system buttons in the bottom right of the screen. (it’s also still present in the “Reports” tab of the main action bar; I’m testing how I feel about moving it into the system button area. Might merge all the other report screens into tabs of the overview window, and leave it as a system button. That’d de-clutter the action bar tabs a little.
  • Adds a “subscribers list” tab to the MMORPG Overview window. This list can either show you everyone connected, or everyone subscribed. Clicking on them will focus on them on the map.
  • When you’ve selected a PC who isn’t currently disconnected, it now shows their information correctly (previously, the selection box showed their name as “Offline??”). Additionally, it now correctly shows their state while not logged in (“Logged Out”, if they’re at their computer but not logged in to the MMORPG, or “Offline” if they’re not at their computer at all.)
  • Revamped scrolling a bit; slightly simpler implementation. Should be no visible effect.
  • Text tables now only try to draw the portions of their content which might be visible on-screen, instead of relying on the scroll box’s clipping. This vastly speeds up the drawing of the subscriber list, when you have hundreds or thousands of subscribers.
  • Removed stray border which was being drawn around one of the checkboxes in the options screen.

Eventually, the idea with this subscriber list is that you should be able to “favourite” individual subscribers, and then filter based on that. Additionally, there ought to be a set of headings above it, which would sort the list differently when you click on the different headings (alphabetical by name, etc).



  • In a callback to 0.12.49, this build fixes a crash if you open the “Overview” report when you haven’t yet activated any regions. (Or if you haven’t got any subscribers).
  • Very simple initial implementation of terrain up/down. It’s not nice yet, and there aren’t yet a lot of the sorts of tools you’d normally want (smoothing, flattening, etc); just curious about how people feel about this.
  • Tree and mushroom placement tools moved into the ‘Scenery’ tab.
  • Several tweaks to camera behaviour which particularly improve things in weird edge cases. I think it’s better in every way.



  • Fixed the frame rate stutter which was occurring immediately before the world terrain begins to rez in at the end of the loading sequence. I desperately want to write a lengthy blog post about this little bug and where it came from and what its fix was, but it’d be technical and awful and nobody but me would ever be interested to read it. :cry:
  • Fix buttons to highlight correctly when inside scroll views. There aren’t any of these in the currently visible GUIs, but there are a few coming soon.
  • Scroll views are now better at calculating the dimensions of their contents, so they should now successfully be scrollable all the way to the bottom where sometimes they weren’t, before.
  • Scroll views now try to guess margins around the edges of the scrollable content; they now assume that any empty space at the top of their content is a margin, and they’ll insert that same amount of empty, space at the bottom of their content, and let you scroll down far enough to see it.
  • Fix terrain height interpolation at borders between different terrain types.
  • Minor optimisation to loading of high-resolution ground meshes as the camera moves around.


(this should be up on Steam within about ten minutes; posting the changelog early, so I can go grab lunch!)


  • You can now always select regions; it’s no longer restricted to when you’re in the ‘grid’ view.
  • Region selection window now contains an “info” icon which opens a new Region info window, just like with players and buildings.
  • From the Region info window, you can see information about the region, change its coloration, change the types of terrain which can be used inside it, and even turn on an extremely placeholder particle effect if you really want to. (Note that this is just a first pass at it; there’s still a lot of cleanup to do!) Note that there is currently no charge for editing regions via the region info window.
  • Major fixes to color picker widget. This adds support for HSL color to the VectorStorm library, plus correct calculation of chroma values.
  • Fix a bug which caused window titles to not use all available space, sometimes unnecessarily line-wrapping inside the title bar.
  • Pressing escape will clear a selected object, if there are no windows to close.
  • Adjusted the rez effects yet again. Really only noticeable when windows are rezzing out.
  • Disabled buttons don’t glow any more. Was weird for them to glow when disabled, but not glow when enabled, so now they don’t glow at all, except when active. (“Disabled” means you can’t click on them, “Enabled” means you can. “Active” means you’ve already clicked on them and they’re active now)



  • And this is why I shouldn’t push builds out in a rush like that. I’d accidentally checked in a debugging test which had disabled world geometry streaming. So if you moved the camera away from the middle of the world, it wouldn’t generate world geometry near the camera. Now fixed.



  • Adds shadows to the game world. These can be disabled in the “options” window, or set to several different levels so you can choose your preferred level of performance. Note that currently the only difference between the levels is how big a shadow map we build. They range from tiny (“Low” == 256x256), to huge (“Ultra” == 4096x4096). And because I’m a masochist programmer, you can of course modify these settings while the game is running, and see changes immediately; no restarts required. Note that there are a few things casting shadows which really shouldn’t be. (Minor grass, the selection ring, purchase floaters, etc). But I wanted to get this out to folks early and make sure that it works for everyone. Note that there are some minor graphical glitches for me on the “Low” setting. I should probably remove it.
  • A couple new building models have been added, replacing the programmer art for inns, taverns, and shops. These are a first pass, not final at all. (Their entrances aren’t even pointed in the right direction! These should be updated really soon, I hope.)
  • New effect for the appearance of water, during the load sequence.
  • Adjustment to the water shader so subtle that nobody but me will ever notice it, but I’m totally putting it into the changelog anyhow. (tiny amount of wobble between the deeper and shallower bits of water)
  • When a window is closing, you can now click through its transparent parts. (Previously, the whole window was treated as being there, and could intercept clicks even though the window was closing)
  • You can no longer zoom the camera in or out while a modal window is open (the system window, mainly)


Edit: Oops, got excited and posted this early. This build should be up on Steam in about 20 minutes.


  • Temporarily adds a “Shadow Config” button (on the ‘Interact’ pane of the action bar), which displays my shadow-configuration interface. A friend has reported shadow acne on his AMD card, and none of my NVidia ones show the same issue, so we’re going to test different values. You can ignore this, unless you’re particularly interested in playing with shadow bias values.
  • Minor adjustments to the water transition, during the load sequence.



  • Converts shadows to use a regular texture sampler instead of a hardware PCF sampler. Just to simplify things a little.
  • Tweak to camera movement; now begins to look forward from 50% higher up (300m above the ground, instead of 200m)
  • You no longer activate a region when you click on it if you already had something else selected. This makes it possible to deselect things by clicking in the middle of nowhere, again. If you want to select a region and already have a selection, you now need to click away from your current selection, and then click on the region. (Or just double-click on the region)
  • When requesting a depth-only render target, we now explicitly request that it be a 24-bit integer buffer. (Previously we just accepted whatever we were given).
  • Improved error messaging around illegal preference values. (Now it tells you the name of the preference value, as well as its understood value and min/max value. Useful!)
  • Fixed a bug in vsFile::ReadLine which would cause it to ignore the final character on the final line of the file, just assuming that it must be a newline character. Now we check, instead.

This does not contain the rendering changes that I’m going to be posting a blog post about later tonight. Those will come in another day or two, once the shadow rendering issues are fully sorted. No need to go chasing two different sets of rendering issues at the same time! :stuck_out_tongue_winking_eye:


NOTE: Due to a file format change, preference files have changed names as of this version. Now, the built-in VectorStorm library preferences go into “vectorstorm.prefs”, and the game-specific preferences go into “mt2.prefs”. (These were previously “Global.prefs” and “MMORPG Tycoon.prefs”, respectively.)

As a result, all of your preference values will be reset to default the first time you run the game after updating to or past this version of the game. You may delete the old files if you wish, or you may leave them in case you someday want to run an old version of the game again and still have your customised settings. It’s up to you! :slight_smile:


  • There are now three window types; “Window”, “Fullscreen”, and “Fullscreen Window”, selectable from a combo box in the options window. The resolution can only be selected for “Fullscreen”, and uses a true fullscreen video mode (where available); “Fullscreen Window” just uses your current monitor resolution. You can select between these three window types in the ‘Options’ screen. In theory, “Fullscreen” mode could be somewhat faster than the others, but may not work on all hardware. (Personally, I can’t see much of a difference on most computers I have access to… And “Fullscreen” is actually notably slower on my Mac laptop, for some reason.)
  • By default, the game now uses “Fullscreen Window” mode unless you’ve changed that setting. Previously, we defaulted to using a surprisingly small window.
  • You can now press alt-enter to toggle between windowed mode and one of the fullscreen modes. When toggling, it will either use true fullscreen or “fullscreen window”, depending upon which mode you’ve used most recently. This means that if you’re on a machine which doesn’t like true “fullscreen” mode (like my Linux machine), it will use “Fullscreen Window” instead when toggling using alt-enter.
  • We now remember your most recently used window size separately from your desired fullscreen resolution, and restore that size when switching into “Window” mode.
  • When switching into “Window” mode, the window is moved to be centered on the screen. (This prevents the window being jammed so far up in the top left corner of the screen that its titlebar can’t be reached and it’s difficult to bring back into a useful spot on the screen, which was sometimes a problem on both Windows and some Linux window managers).
  • Internally, preferences now store only one value (the active value), instead of the actual value, the minimum value, and the maximum value. This means I can stop explaining all the extra generally-useless values in Bloom 1 0 1, and just tell them to set Bloom 1 or Bloom 0.



  • Fixed a crash bug when running the game with bloom disabled
  • Revert MSAA rendering to use a maximum of 4 samples, instead of requesting the maximum number of samples the hardware claims to support. (This was actually causing frame rate problems for me on a card which supported 32-sample MSAA)
  • In an effort to track down a visual issue, we now attempt to create an OpenGL Debug context, instead of a Core context. If your hardware supports debug contexts, this might result in slightly lower performance (Sorry about that!), but will also log any errors or warnings into the game log. (in AppData/Roaming/VectorStorm/MMORPG Tycoon 2/log.txt, under Windows).
  • Similar to the above, we now check whether there have been any OpenGL errors at various points during each frame. Doing this introduces extra synchronisation points between GPU and CPU, and so might result in slightly lower performance (Sorry about that again!), but means that any such errors will actually be reported, instead of being ignored as they were in previous builds.

I will likely reverse both of these last two changes in the very next build, but I wanted to push out a build that actually tests for any big obvious problems. I’ve been running with both of these things since the start of development and typically have no problems reported (or rather, when problems are reported I fix them before anybody else sees the builds), but neither of these behaviours has ever gone into an external build before. Suppose it’s a good idea to get this sanity-checking code running on more hardware setups than I have access to personally!

As usual, if you run this latest build and run into any asserts or other errors, please let me know here on the forums. :slight_smile:


From here on out, I’m going to start noting things which are generic VectorStorm library improvements, and which are changes to the game itself. Anything prefixed by [VS] is a VectorStorm library change. Anything else is specific to MT2.

#0.12.60 – PAST BRANCH

  • Adds support for a command-line argument: crash . Don’t use it unless you’re okay with crashing. If you set this argument, we’ll intentionally crash if OpenGL generates a particular low-priority warning. This is so it will generate a backtrace which it can send to me the next time the game runs, so I can hopefully figure out what’s causing the warning. Basically, don’t set this parameter unless I ask you to. :slight_smile:
  • Explicitly remove all mipmap support from render targets; it was never configured correctly and wasn’t being used, so this shouldn’t make any difference. But I’m hoping that it clears up a particular low-priority warning I may have mentioned in the previous changelog entry.
  • Temporarily adds a simple keybinding: press [space] to save out two screenshots: first, an image of what it thinks is being displayed in the game window right now (into “DefaultFramebuffer.png”), and an image of what’s currently in the first color buffer of the backbuffer (“Backbuffer.png”). Both of those will be saved into the same directory that stores your user preferences, the log file, and etc. Expect this to be reverted in the near future; it’s just here to try to gather a little more information about yxxx2003’s rendering issues.
  • [VS] Enable support for stencil buffers in non-MSAA render targets. I don’t think I actually use stencil operations in MT2 any more (they were used in the minimap, once upon a time, but that doesn’t exist any more). But if I did use them, this would make them work correctly even if you had anti-aliasing turned off.
  • [VS] Explicitly clamp render target sampling to texture edges.
  • [VS] On the basis of a two-year-old tweet from somebody I hadn’t heard of before, turn off all shaders before calling glClear(), which in theory should quiet a spammy low-priority OpenGL warning that was showing up in yxxxx2003’s game logs. But I sort of hope that it doesn’t; that they’re a real indication of what’s going wrong for him, and not just a noisy bit of spam from NVidia’s OpenGL drivers.
  • [VS] Adds vsRenderer::ScreenshotBack(), which captures a screenshot of the backbuffer’s first color channel.
  • [VS] Fixes vsRenderer::Screenshot() to work correctly when anti-aliasing is enabled.


#0.12.61 – MAIN BRANCH

This build just reverts some of the debugging features which were added to 0.12.59 and 0.12.60, now that the visual issue has been identified (turned out to be unrelated to this game; was an issue affecting all OpenGL games on a particular laptop. Best guess is that it’s a driver issue?).

Specifically, here are the changes:

  • Removed the crash command-line argument.
  • Removed the [space] keybinding to generate a screenshot.
  • Render using an OpenGL Core context, instead of the Debug context we started using in 0.12.59.
  • Return to normal OpenGL error checking, instead of the intensive, intrusive checking we began using in 0.12.59.

EDIT: Apologies; build machine suffered a little hiccup, and the Steam upload silently failed. It’s there now!


This is the long-awaited build with updated lighting shaders, which I posted about last week. It took a really long time to finish up mostly because I just kept tweaking the shader values! I’ll make a separate post about the shaders for those who are interested in that kind of technical detail, but here’s the bullet-point set of changes.

Note that I’ve updated the game’s main branch on Steam in case these shaders are too expensive for anyone. They don’t seem to affect performance noticeably on my oldest computers, but those oldest computers do have pretty powerful GPUs (for GPUs which are 7-8 years old). If your computer has notable performance problems and turning shadows off don’t fix them, please let me know, and you can revert to the ‘Main’ branch while I hook up user settings which would let you switch to cheaper shaders on demand. But for the moment, I’m hoping that these are simple enough that everyone can just use them as-is.


  • New shaders for terrain and objects in the world. (Notable things which haven’t received new shaders: the water, the sky, the clouds, the particles.)
  • Fixed path rendering to be affected by region tint.
  • Tweaks to the tint of scenery objects, most noticeably in inactive regions, to try to make them look a bit less rainbow-colored.
  • Path intersections now match patch widths. Caveat: Old mountain passes saved their widths incorrectly, and may get incorrectly sized intersections. They should be fixed if you delete them and place them again. Regular paths should upgrade automatically.
  • Made the main action bar slightly larger, in preparation for adding another tab to it.
  • Shadows are now substantially less glitchy when looking around from ground level. (Still probably needs at least one shadow cascade, though)
  • Particle motion is now affected by simulation speed.
  • Increased ambient lighting level and decreased the brightness of the directional lighting. But the new lighting shader makes the lights seem brighter, so this is kind of a wash.



In writing up the post about shaders, I was repeatedly tweaking the game shaders for the various screenshots in the post. Midway through writing the post, I found a minor bug in one of the lighting algorithms I was using. After fixing it, I like the new shaders even more than I did before.

In this update, the specular highlights are now a little bit stronger on buildings, but the big, big improvement is to the terrain. (though the improvement is much more visible in motion than in static screenshots, so I won’t post another screenshot right now; I’ll save it for a video capture later!)

  • Fixed a minor bug in the specular lighting calculations, and slightly increased amount of specular lighting.



  • First revision of the network simulation. See the link below for documentation about how it works. You’ll find the network view and tools under the ‘Network’ tab on the main action bar.
  • NPC QuestGiver exclamation mark icons are now tinted to match the region they’re in.
  • Monster zones and towns now draw their outline over the terrain, even in ‘Inspect’ view.
  • The terrain grid (visible when in ‘Terrain’, ‘Building’, and a few other tabs) is now drawn in black, instead of in glowing blue.
  • Newly created curving paths will be much smoother. (Curved paths loaded from a save game will retain their old shape)
  • Paths are now somewhat narrower.
  • Slightly improved the “rez-in” effect for paths.
  • Slightly improved self-shadowing on small objects.
  • Fixed glitches at border of “monster zone” icon, when drawn on map.
  • Player information window now shows the times at which that player usually plays. (I don’t know why we’d particularly care, but the information was there so I figured I’d show it!)
  • [VS] 3D text now draws using the highest font size available, instead of using the one closest to the font’s size-in-meters.
  • [VS] We no longer sleep to attempt to force 60fps rendering when the user has disabled vsync. If you want a higher frame rate, you can have it now!
  • [VS] Basic support for OpenGL TBOs (Texture Buffer Objects).



  • Screenspace Ambient Occlusion has been merged into the main branch. This visual effect can be disabled from the options screen, if desired (or if it’s hurting your frame rate). If you see big performance differences with it turned on vs. off, please let me know! This is something that I absolutely could provide different “quality” settings for, the same as shadows. But for right now, it’s a simple on/off toggle.
  • Connections to the network grid now remember their queued-up bandwidth demands, instead of resetting to zero after each load. This should stop buildings and zones from all grabbing bandwidth from the networking system at precisely the same moment, after a load. (This could lead to unusually high bursts of network connectivity demands for the first few minutes after a load)



  • SMAA x1 antialiasing is now available. Smoooooooooth! (Select it from the options window)
  • Made a lot of tweaks to ambient occlusion shader.
  • Action bar buttons now have clipped corners on the top right and bottom left, instead of top left and bottom right. This fixes the longstanding issue of one button’s corner slightly protruding off the corner of the action bar it’s sitting on. Which has been driving me slowly mad for months, ever since I first noticed it. I have no explanation for why it took me so long to get around to fixing it.
  • I believe I’ve fixed an issue which would frequently cause a small amount of z-fighting in the grass, around buildings.
  • Fixed an issue which caused the terrain grid to flicker when in “terrain” mode with anti-aliasing disabled.
  • Adjusted the terrain grid to be drawn using wider, lower-contrast lines. (unrelated to the fix above).
  • The tutorial can now visually indicate a particular button or action bar tab to click on. And it updates automatically; click on the correct tab and it’ll move the indicator to the button it wants you to click on. If you then switch away from the tab it wants you on, it’ll move the indicator back to the tab you need to click on to get back to the button it wants you to press, and so on. Currently, this is only used during the first phase of the tutorial, before you move into the “Request” system, but it should really be set up to work in the request phase of the tutorial as well, when new tools are being introduced.
  • The last step of the first phase of the tutorial can no longer be dismissed by clicking an ‘OK’ button; you now need to actually accept a request, to dismiss it.
  • Removed references to the ‘town’ system from the “requests” phase of the tutorial, until I figure out precisely how I want that system to work. Expect to see this come back sometime after milestone 13.
  • Made a bunch of adjustments to the initial phase of the tutorial, to try to make it progress more easily from phase to phase; previously, the ‘zoom’ step ended much too quickly if you had vsync disabled, and the ‘rotate’ step went on much too long if you had vsync disabled.
  • Text floaters which are drawn in the world (notifications about money you’ve spent, +xp notifications, etc) no longer cast shadows. The selection ring still casts a shadow because I think it looks better that way, even though it makes no logical sense. If you see something casting a shadow that you think oughtn’t be doing so, please let me know!

Just four items left in my list for the Milestone 13 build!