The New World UI is a mess. Let’s not sugarcoat it: clicking the “New World” button is like kicking a beehive, except instead of kicking you’re clicking and instead of being assaulted by wrathful insects hell-bent on vengeance you’re exposed to a confusing excess of numerical input spinners hell-bent on vengeance.
So, the first part of the new 4-part New World screen will be a simple Quickstart screen, designed to get you away from menu and into the game as quickly as possible. New players will still have a few of the most vital controls, but the vast majority will be offloaded to the other screens.
I’m not quite happy with the current design and am still experimenting with it, but it showcases the idea well enough.
On the left, a preview of the starting creatures. Since we have more space available than before we can make this bigger than the one on the old New World screen, but more importantly, it shows several specimens rather than just one. This makes it easier to see the difference between ‘single species’ options (‘Initialise Blank Slate’, ‘Initialise Aquatic) and more varied settings (‘Initialise Random’, ‘Initialise From Exported).
On the right, the new 3d Map Visualiser. The erosion algorithm has been built into it and it’s been hooked up to the in-game terrain, so it’s now possible to start games with eroded terrain. The erosion process looks good while it’s happening, although it’s a major performance issue. I’m still looking for a solution for that: I tried lowering the fidelity of the map visualiser and it somehow made the lag worse. So I’ll probably have to resort to multithreading again. At least I know how to do that now!
The three pop-out sliders on the right hand side are water-level, temperature and fertility, and they update in real time too. A similar UI control could come in handy for the climate settings in the main game.
Unexpected feature: if you adjust the water height while the erosion is happening, you can get a neat ‘layered’ effect to the erosion.
Because I am a dope of the highest order of magnitude, I forgot to talk about one of the most important features I have planned for 0.13.0: a seasonal cycle. I plan to have the average temperature and fertility automatically fluctuate over the course of one hour simulation time (by default).
Of course, from the creatures perspective this will be less like seasons and more like glacial cycles, due to their short lifespans and rapid evolution. I’m okay with that. Creatures will be forced to continually adapt to survive, rather than simply reaching a local maxima and stagnating.
The season-cycle graph will be present on the Map Editor screen, and it will be editable, with the ability to set the magnitude, length and offset of both the temperature and fertility curves with simple click-n-drag handles. By including a separate curve for both Temperature and Fertility, the game will have a maximum of 4 distinct seasons: hot, cold, wet and dry, depending on which curve is closest to a peak at any given moment.
Long term, I plan to associate each season with in-game visual and weather effects. This might not make it into 0.13.0, though: I consider it a nice-to-have, not a priority.
It’s about time I wrote one of these. I’ve been working quietly on 0.13.0 in the background for a while now, but I didn’t want to write anything solid until I was certain 0.12.0 no longer being haunted by the dreaded ArithmeticException.
0.13.0 will revolve around improving the New World screen, or at least changing it to be something more user friendly than an impenetrable wall of number spinners. Instead of one New World screen, the game will have 4: Quickstart, Creatures, World and Advanced Settings.
Quickstart will be exactly what it says on the tin. You’ll get a creature panel with the Type dropdown (Initialise Blank Slate, Initialise Random, etc), and a Map panel with the Randomise button and maybe some temperature/fertility sliders. That will make it nice and easy for new players to find their way into the game without being overwhelmed with unnecessary options.
The Creatures page will be a bit more involved than before, and will include at least a few new options for customizing your starting creatures. Not a full-scale creature editor, but a few basic adaptions for things like temperature and oxygen. This should allow you to start in a tundra without immediately killing everyone off.
Initialise Exported will also have an interface to control which creatures you want to populate the world with, and I’m considering giving Initialise Random should include the ability to page through the randomly generated creatures and choose whether to keep or discard them. Like Tinder but for Abominations of Nature.
The World page will be the centerpiece of this update, and will include a realtime 3d map editor. The player will be able to shape the worlds landmasses with raise/lower/flatten brushes, and the game will automatically apply erosion to make the result look more natural. This is where my shiny new erosion algorithm will come in handy.
I had a lot of fun working on this. The algorithm simulates rain erosion, cutting sediment out of cliffs and depositing it in catchments, creating ravines, plains and just generally making the heightmap look so much better than it did. Just… so much.
Erosion will not happen in-game: the terrain I use is still optimized for a static height map and Monogame’s OpenGL platform doesn’t support Vertex Texture Fetch (Monogame is open source, but I don’t currently have the expertise or understanding of OpenGL to implement it myself), so that will have to remain as is for now. But when complete it will look a lot fancier and more natural than the current playdough-terrain shapes. Take a look at some of these comparison screenshots I hacked together.
Click to enlarge
Since the terrain will now include fancier and more realistic cliffs, I also intend to adjust creature’s pathfinding a bit. Climbing will need to be significantly more expensive than walking to make cliffs serve as barriers to geographic dispersal, especially since the ocean no longer serves that purpose once they find an amphibious survival strategy.
The Advanced Settings page, for settings what be advanced an’ stuff. This will serve two purposes:
- This is where you’ll find all the lesser-used input spinners you currently see on the New World screen that aren’t directly related to the starting creatures or the world. I prefer not to remove features unless I can confirm that nobody is using them.
- More importantly, this is also where you’ll find brand new settings. Some people have been doing amazing experiments with the settings available in 0.12.0, and I want to help facilitate this scientific approach to the game by providing new variables to tweak. At the very least, some modifiers for the stamina and oxygen bars would seem to be in order. If you have any suggestions for settings, let me know!
Other things worth noting
Sliders: To make the new world page more user-friendly, I’ll be implementing horizontal and vertical sliders in place of the existing Input Spinners. Hopefully I can find a good way to balance making these simple and user friendly with making it possible to see and type in the decimal value you want.
Scrollbars: I’ve needed to add a working scrollbar control to the game for a while, but I keep putting it off. The Species GUI is a… let’s call it a “proprietary system” (read: homegrown mess), so I need to implement new controls myself. Additionally, a scrollbar is defined by its relationship to other controls, so it’s a bit more complicated than a simple spinner or label. But I’m committing to it this time. We’ll have scrollbars in Species 0.13.0, and I’ll retroactively apply them to everything that needs ’em.
Biome Editor (?): Big question mark on this one, but I’m toying with the idea of making the biome map 100% customizable, down to the type and number of trees that spawn in each biome. On the one hand it would be a good feature, particularly for people interested in modding the game, but on the other it would be a fair bit of extra work and may eventually prove redundant when it comes time to overhaul the Vegetation system into something more ‘evolutionary’. We’ll have to see how it goes.
Tweaks: As always, once the major features are done I’ll launch into a few weeks of bugfixing and tweaking the simulation to be more interesting and intuitive. This is when most of the physical and behavioural adjustments will come into play.
Unfortunately, 0.12.0’s tweaking period got absorbed into my epic battle against the Arithmetic Exception (I dance on it’s grave), so I have a fair-sized backlog of minor adjustments I’d like to make when 0.13.0 comes out.
Frequently these tweaks can do as much for the game as the major updates, so I imagine Species will undergo a rapid (and hopefully very positive) diversification period immediately after 0.13.0 is released.
Do you have any idea’s for tweaks? Let me know in the comments below.
* Once again attempted to defeat my nemesis, the ArithmeticException bug (the most common cause of crashes in the current version). I’ll get you this time, gadget.
* As I have still been unable to catch the ArithmeticException (the most common cause of crashes in the current version), I have purchased a significant quantity of fireworks from the Acme Corporation and laid an ingenious trap.
When the crash happens, the program will report a significant quantity of additional information about the problem that I can use to track it down and fix it for good.
* Strapped the ArithmeticException bug (the most common cause of crashes in the game) to a table and attempted to bisect it with a laser. Gloated for a while, then left the room in the certain knowledge that escape was impossible and my victory was complete.
* Increased the scale of limbs to make creatures in general a bit more interesting and… appendagery. That’s a word now.
The information from my 0.12.0.9 trap helped a little bit, but it mostly just confirmed where not to look: it’s not related to a specific leg type or position, and the cause of it is exactly what it looks like: a leg bone rapidly increases in size until it hits infinity and transcends numerical classification.
The cause of that appears to be a state issue in the limb animation. Leg bone transforms are supposed to be reset and freshly applied each frame, but something is causing the Bicep/Tricep widths to be saved and re-applied on top of each other every frame.
I’ve been unable to track down the exact scenario that causes this, so instead I’m refactoring the entire animation system to eliminate the possibility of state information being saved between frames.
Which is kind of like applying nuclear weaponry to the task of killing a cockroach.
But this cockroach is 50 meters tall and breaths fire, so screw it. Nukes it is.
It fought back, too. Immediately after starting the refactoring I started seeing constant expansion bugs every time I ran the game, not just from the limbs but from the tail and neck as well.
But those are gone now. Still have a few extra bits of fallout to deal with (limbs not rotating due to droop, being smaller than they are supposed to, and flickering), but we’re on the right path.
It’ll be good to get this one behind me and officially announce what we’re doing for 0.13.0.
* Again attempted to fix the most commonly reported cause of crashes. It may or may not fix the the infinite leg flesh expansion bug, but it should fix the ArithmeticException it causes. So… that’s something to look forward to, I guess.
* Fixed glitchy walk animations when a creature is selected.
* Fixed a potential crash when you revive or import a creature.
I’d say I’m ready to merge the experimental and main branches. Let’s hope this works!
* Prevented an ArithmeticException related to leg animations from causing crashes when it happens.
* Fixed a bug preventing the “Spinner” controls (up/down arrows next to number inputs) from working.
* Made a number of changes to the UI to better support the new variable-sized fonts.
* Variable font sizes! Should be of some assistance to people on high resolution screens. You’ll find the dropdown in the “Options” menu.
* Fixed multithreading bug that could cause a random crash in long running games.
* Improved alignment of some UI features.
* Fixed bug causing program instability leading to an eventual crash after the “Revive” tool was used
* Fixed bug causing sleep to flicker between frames and stamina to regenerate at half speed as a result
* Made Nurse Bots reset NumberOfChildrenBirthed so that artificial selection won’t stagnate when specific parents are kept alive.
* Made Nursery average creature ‘reset’ when the Nursery UI is opened (to reduce the number of incidents in which it becomes a non-euclidian abomination that causes terrible gibbering madness in all that witness it)
* Made the borders of cliffs a bit sharper (visual adjustment only)
* Lowered cost of empathy when deciding what to eat
* Raised cost of travel distance when deciding what to eat
* Added several ‘early warning’ exceptions to help catch errors before they reach the steam version
* Multiple small background adjustments to make the game more stable overall. I’m hoping it will make the game stable enough to push to the main release branch. (hahahaha it’s cute that I still have hope)
Also, I forgot to do a blog post for 0.12.0.3 sooo…
* Adjusted grazing to be more random and less biased towards travelling in a specific direction.
* Fixed a bug preventing fins and flippers from increasing swim speed unless they touched the ground
* Fixed a crash when exporting an engineered genome.
* Fixed a crash when starting a game with a small world size
* Fixed a crash that happened randomly in longer running games.