Over the past few hours, I’ve gotten my Windows builds working under the new SDL2 libraries, which is fantastic news — that’s one big task off my list, and makes me very comfortable about moving everything over to SDL2 for future releases.
There are also a bunch of little technical fixes under the hood:
- VectorStorm’s screenshot functions now work on HighDPI displays (such as OS X “retina” screens).
- vsImage’s image saving code now uses SDL_image’s PNG saving code, instead of using libpng directly.
- vsSocketTCP now tries to send data immediately when requested, instead of putting it off until the next time its ‘Update()’ method is called.
These changes are all now live on the github repository, in the SDL2 branch. Once I’ve verified that Linux builds work too (they’ll be a lot easier to wrangle than the Windows ones), I’ll take those SDL2 changes into the main master branch.
But the big important one is having Windows builds working again, and having moved my Windows development system from the old Windows XP box to the only-slightly-less-archaic Windows 7 box.
Back to game features, tomorrow!
So I’m not completely certain about this yet, but I’m going to announce it anyway.
I’m going to be releasing the third milestone build of MMORPG Tycoon 2 on January 6th — that’s just over two months from now. It’ll be a free download from this site. And if all goes well, it’ll be the first fully playable version of MMORPG Tycoon 2.
Of course, if all doesn’t go well, then I’ll release whatever I have anyway. And the fully playable version will follow shortly afterward.
Here’s what I intend to have in that build of the game:
- Modification of terrain, both on a macro (world) scale, and on a micro (region) scale.
- Medium-sized world (similar amount of land to one of World of Warcraft’s main continents). Right now, it’s somewhere around 20 regions per world, on average, although it varies from world to world (procedurally generated)
- Configuring regions (purchased, not-purchased, level ranges, terrain type, name, etc)
- Placement of buildings, roads, etc.
- The best AI for simulated PCs in any “MMORPG Tycoon” build so far. The players will visibly emote to show their reactions to things (using little thought bubbles over their heads). The player will be able to interact with these simulated PCs in various ways.
- First-pass economic systems — both in terms of earning money from subscribers and paying for various costs. Note that F2P payment systems won’t be in place yet — I need to figure out how to represent the economics of F2P games inside the MMORPG Tycoon 2 simulation. (It’s kind of distressing that I’ve spent so long on MMORPG Tycoon 2 that radically new business models have appeared and so become commonplace as to be obviously missing from my simulation, now)
Notable things which will NOT be present:
- Guilds and Parties. I really, really want to implement simulated PC parties and guilds. These AI features have always been on the back-burner, though. I’ll get to them eventually, but they won’t be in time for this build.
- PVP. PVP would actually be really easy to implement. But it’s not important enough to go on the main list of things for this build. The logic around when to initiate PVP would actually be more difficult than the PVP itself.
- MMORPG tech tree. I’m just not going to have the time to implement a tech tree for this build, so it won’t be present.
- Scenarios. I’d really like to have a quick and dirty tutorial. But I’m not going to guarantee that for the build. The build will be free-play only, not a scenario.
- MMORPG rule editing. The basic MMORPG rules won’t be editable in this build — the rules of the simulated game will be static.
- Saved games. I’m chagrined at not having support for these, but.. it just isn’t going to be done in time, with the rest of the work I need to get done. It’s probably 70% implemented already, but.. it’s not what I want to be spending my time on right now.
- Visuals will be very similar to what you’ve seen in screenshots so far. The core of changes to the game will be in terms of game mechanics and UI, not to the models or shaders being used. So we’ll still be stuck with a lot of programmer art for the 3D world. Sorry about that! :)
Notable big tasks which I need to get done for this build:
- I need to fix the Windows build. MMORPG Tycoon 2 is using the VectorStorm library’s SDL2 branch, and I haven’t yet quite succeeded at getting it to run on Windows machines, since upgrading from SDL1.2. Although it’s pretty close — I’m probably just missing something small and obvious, now (I get an OpenGL initialization error during startup).
- I need to refactor the terrain generation system. It will be substantially simpler than it was before, and should also use a lot less memory. (I’m hoping to bring the game’s memory footprint from around 800 megabytes of RAM down to about 80 megabytes, almost entirely through this change). My plans here will also make scenarios and save files much smaller and simpler. And should make the terrain look a bit nicer, too.
- Need to add some simulation of the underlying game servers — reinstate the “per-region” maximum population which was in MMORPG Tycoon 1.0 and 1.1 (potentially let players buy extra servers for a region, to increase the maximum population threshhold in a particular region?). And the large-scale “status view” for displaying this data to the player.
- Financial data — provide a window showing a player their incoming and outgoing funds for a financial period (probably “per day”). I already have this data — just need to display it.
There are some big updates. I’ve had a few brainwaves over the past two weeks which have overcome almost all of the technical roadblocks I’ve been struggling with over the past year, and so I’m suddenly steaming ahead again. Feels nice to be so productive, once again!
Will post more in the near future, but the big new idea that solves the worst of my technical problems is adding simulation of game patches. If I simulate game patches, then everything becomes less challenging, technically — I don’t have to update full-resolution world terrain in real-time on slow machines while people are editing, the way I did before — instead, I only need to update a low-resolution preview. The real full-resolution terrain then only gets generated when the patch goes live, and I can take as long as I like to do that terrain generation (It’d be fine to take a couple of seconds in order to roll out a patch, instead of having to complete the whole process in under 0.016 seconds, as I currently need to).
The little red-clad character in this screenshot is Graja.
Graja has the distinction of being the first character ever to reach max-level in MMORPG Tycoon 2 (currently the level cap is set to 20. Her simulated owner is a competitive woman by the name of “Sabrina Lawson”.)
Sadly, she managed this feat due to a bug. I’ve been revamping the game logic around quests; mostly focused on AI, but also touching a little at how the game mechanics around them work. And.. I sort of messed things up a little.
I was fixing a bug which caused AI Questing behaviour to automatically switch from one quest to another, when a quest was completed, instead of finishing the questing action and considering whether to go do something else instead (such as actually turn in the quest and progress to the next one from the same quest giver). And in doing so, I had the game systems stop automatically clearing out completed quests — it now leaves them around so that the AI can notice that it’s working on a quest which has actually been completed.
What I didn’t do was stop the game from awarding quest XP multiple times. So Sabrina here went and completed her first mission, and the game then went mad awarding her infinite XP for that one mission completion. I only realised it had happened because she loudly declared that she was ascending (which is the internal term for when a player decides that they’re too advanced for the region they’re in, and starts looking for a way out), and I happened to be watching those AI debugging messages at the time.
So she didn’t really reach maximum level legitimately; rather, she got lucky and benefited from one of my bugs. But still, Sabrina’s the first to get there in all the time I’ve been working on MMORPG Tycoon 2. I’ll likely use her as a VIP in one of the final game’s scenarios.
Increpare recently released Puzzle Script, an HTML5 puzzle game engine which really tickles at my reptilian programmer hind-brain. In its programming language, the process of building a puzzle game becomes one of recognising and munging patterns. If you’re even vaguely interested in these sorts of games, you absolutely owe it to yourself to have a play with it!
Of course, the very first thing I did upon starting up Puzzle Script was to try to replicate Robot Finds Ice Cream within it; my ‘Game in a Week’ game from far too many years ago. I haven’t quite managed it yet, but I think I’ve sorted out most of the really tricky bits (with help from Increpare — thanks, dude!)
After a few hours of playing with that, I felt like compiling up the original game again, and so spent some time modifying its old code-base to build on the computer I’m using now, and then brought it up to date to run with the latest version of the VectorStorm engine. That updated version of the code is over here. Note that there are a few render glitches in it; Robot Finds Ice Cream was written back when VectorStorm used a simplistic front-to-back rendering system, and so it structured its rendering accordingly. Now that we’re using a render system that’s based on batching materials, there are several bits and pieces which aren’t working correctly — most notably the vending machines are translucent, and some of the wireframe lines are visible through floors that should be obscuring them, because all the wireframe lines are drawing over all the opaque bits, instead of everything being sorted by their fake depth in the scene.
But it all compiles and runs. And that’s the most important thing, at the moment.
I might try to finish up the Puzzle Script implementation of Robot Finds Ice Cream tomorrow, and then back to MMORPG Tycoon 2. There’s a fair whack of stuff to talk about, there. Really need to start actually typing it up!
So yesterday ended on a bit of a downer; the big system I’d been working on for much of the last month turns out to be non-workable. And worse, it seems obvious in retrospect that it wasn’t ever going to be able to make the sorts of terrain that I actually want the game to have; I should have realised that from the start.
SO, today I’ve made some decisions about where things are going.
- Work on interfaces for editing large-scale terrain shape ends now. MMORPG Tycoon 2 will be released with approximately the terrain system that I’m using in its main development branch (not the one which has had screenshots recently). This uses a very simple procedurally generated continent shape — the player will not be able to make large-scale changes to that shape. I might come back to this, but not until after MMORPG Tycoon 2′s initial full release.
- Regions will still be divided into zones (which I’ve sometimes called “subregions”). Rather than “painting” fields/mountains/deserts/lakes/etc onto the ground, they will assign them to individual zones. At game start, each region will have a single terrain type, and all zones inside the region will share that type. Terrain types can affect nearby zones — a “mountain” zone may, for example, cause hilly terrain in adjacent zones. Need to experiment with that a little, but it feels like carefully placing clusters of terrain types might produce interesting gameplay effects.
- Zones containing mountains will not be traversible; they will form barriers which players cannot travel through.
- The player will be able to lift/lower terrain using “paint on” controls like they can now (or maybe with a slightly tweaked UI, to make it easier for the player to preview their actions). This terrain raise/lower occurs under the zone’s assigned terrain type. The player cannot “paint” colors onto the terrain. Instead, the player may configure a color palette for each region, and everything in that region will be colored using that palette. So if you want fields of red grass, you configure that on the region, rather than needing to meticulously paint red over all the normally-green grass. Like in most MMORPGs, those color palettes blend as you move from one region to another.
- Instead of a terrain type, a player may place MMORPG objects into a zone. For example, a ‘town’ is treated as an “object” which goes into a zone. Similarly, ‘feature objects’, ‘quest zone’, ‘dungeon’, ‘graveyard’, etc. These are all objects which can be placed within a zone and then be customised, and with which AI players can interact. Instead of being able to freely place these objects absolutely anywhere (as now), the player may only place these into zones, and may only place a single such object in each zone.
I still need to do some testing to figure out what the right number of zones is per region. I suspect I have too many of them right now; my instinct is that probably somewhere around 20 would be about right (right now an average region has about 50 zones in it), but it will take some experimenting to really sort this out.
But I really want to make some big progress very quickly. Make up for lost time.