* Right-click now rotates the Map editor.
* Middle-click now pans the Map editor.
* Fixed bug with Creature Cap value spinner not setting Creature Cap correctly
* Fixed bug with Creature Detail Cap value spinner not setting Creature Detail Cap correctly
* Added the Creature Cap value spinner to the Quick Start page for easier access
* Fixed crash when selecting “Initialise Random” after quitting a world and going back to the menu
* Fixed “Erode” button removing terrain and temperature changes
* Some tooltip wording changes
* Fixed map reverting to 0 fertility after a few minutes when using “sediment” fertility type (this happened in development builds, and was re-introduced as a result of the performance fix in 0.13.0.1).
* Fixed sediment map reverting to default when you use height brushes in map editor
* Fixed fertility brushes not working in map editor
* Fixed Save/Load removing brushed temperature/fertility changes and reverting the temp/fert target map to base settings
* Fixed temp/fert variety defaulting to (0.5, 0.5) instead of (0.7, 1.0) when using quickstart without visiting the Map Editor
* Fixed options not being selectable in the Options page.
* Fixed Resolution/Full Screen not prompting a restart when changes were made
* New games should once again automatically select the font size appropriate to your resolution.
* Tweaked the fertility cycle (Wet/Dry season) to be less harsh by default
* Tweaked the sediment map to provide more average fertility by default
You can opt in to the experimental branch by right clicking on “Species”, selecting “Properties” and going to the “Betas” tab.
* Dropdown menu’s now display on top of all other controls except ToolTips
* Dropdown menu’s now hold focus when you click them, so that they don’t interact with controls behind them
* Fixed issue with terrain-height brushes sometimes raising/lowering/flattening terrain to the left or right of the brush location, instead of under the brush.
* Water height is now set correctly when adjusted in Map Editor and Quickstart
* Fixed some incorrectly positioned UI controls
* Improved menu performance when eroding/generating sediment map
It’s a surprise! Have a surprise shoggoth:
The 0.13.0.0 (New World Update) Pre-release is now available. You can access it by right-clicking on “Species: Artificial Life, Real Evolution” in steam, selecting “Properties”, selecting “Betas” and opting in to the Experimental Branch.
As always, a word of caution: things on the experimental branch may be unstable! Also, be warned, the default season settings will probably need some tweaking. They can be quite harsh.
Final note, 0.13.0 does not have backwards compatibility with old saves or exported creatures. Sorry about that, here, have an apology shoggoth:
I’m handing out shoggoths like candy today.
Geez, the SeasonalCycleEditor UI control has well and truly gone through a it’s fair share of iterations now.
The goal here is to provide an intuitive interface for customizing the duration, magnitude and offset of seasonal temperature/fertility cycles, which themselves follow a straightforward sine curve.
The first version of this control utilized a straightforward 2D texture of a sine curve, which I figured I could stretch, tile and crop to create the cycle graph. As mentioned in a previous post, that attempt failed because frickin’ arithmetic, how does it even work, science can’t explain that.
So I scrapped the sprite-based control and made this shader-based control instead:
Technically, this is two controls: the temperature and fertility curves are rendered separately on top of one another. It’s a somewhat prettier result, but it lacks polish and isn’t exactly intuitive: 6 handles on a single surface is way too many, and if it wasn’t labelled “seasonal cycle” it’d be quite difficult to guess at it’s purpose.
Not good enough. Try again:
Better. Separating the curves was a good call. Their units (Celsius and percentage respectively) are unrelated, so sharing graph space only makes it more difficult to label the Y-axis.
Labeling the seasons was also a good call. I originally considered “Spring/Summer/Autumn/Winter”, but “Wet/Hot/Dry/Cold” are more descriptive and less tied to real-world seasons.
Also, they’re shorter. Easier to fit on the UI.
The result is still non-optimal, however. I don’t like that the hot and cold season bars overlap with the wet and dry seasons, a) because that’s not accurate (“hot” shouldn’t start as soon as “cold” ends!) and b) because it’s not how we *think* about seasons. Sure, we’re aware that in reality one fades into the other, but in our minds, the concept of spring is distinct and separate from the concept of summer.
To be maximally intuitive, a graph like this should reflect the mental model the player has of the thing being graphed.
One more try:
Much better. Still could use some tweaks, labels, and a brighter season description bar (my laptop has a very bright screen, which makes it hard to see how dark some parts of the game are until I export the screenshots to a different machine), but it’s very much getting there. I’m happy to leave it here for the moment and make progressive tweaks to the design as I push forward to 0.13.
One advantage of doing multithreading for 0.12.0 was that it de-stigmatized it for me. So this week, rather than keep trying to optimize the lag I had created in the map editor, I did a thing and dumped it all on another thread.
Two other threads, actually. The erosion algorithm spits out a heightfield, which needs to be converted into vertices for rendering. Both of the erosion and the conversion are expensive functions, which is why they now both happen on other threads. I’ve become quite fond of the backbuffer pattern, in which I complete all the internal work on a backbuffer and flip it to a forebuffer copy for display and use by other parts of the program. The results are promising: not quite real-time but close enough to be workable, and the UI remains responsive throughout.
All that out of the way finally freed me up to start working on the map editor itself.
For the brushes, I needed the ability to pick a point on the 3d terrain with the cursor (okay yes, I could have just had players paint on a top-down map, but where’s the fun in that?). I’ve already done this in the game proper, of course, but remember how the in-game terrain is a) heavily optimized and b) a static, unchanging object? Yeah, the triangle-picking technique I used for that caused far too much lag on a dynamic heightfield to be viable in the map editor.
Instead, I took a different approach: ray-tracing from the cursor position to the terrain object and polling the height field for every pixel travelled. The result is nowhere near as accurate as triangle-picking, but it’s a lot faster and you’ll never be as close to the map editor terrain as you will to the in-game terrain.
And with that done, I started work on the brushes. I’ve got some simple raise/lower/flatten brushes in place, but no real UI for them yet. Still working on that part.
All things considered, this was a good week.
Sorry for the radio silence everyone, I’ve been submerged in some refactoring work that, while vital to keep a codebase the size of Species workable going forward, doesn’t make for great screenshots and/or interesting blog material.
“Dear diary, today I converted ProfileOptions from a static class that reads from a flat text file to an easily expandable object contained in the Game class that writes to xml format so that World settings can be more consistently managed when loading and unloading games, and will probably have to spend a fair number of hours tomorrow refactoring all the references to it.”
Also, and I made an attempt to draw the “Seasons” UI using 2D sprites that failed miserably and set me back a week. I’m reworking it with shaders, because I’m apparently better with trigonometry than I am with basic 2D arithmetic.
That effort is going somewhat better: I have a working graph and all the data I’ll need to actually implement seasons without too much trouble.
Still to do: Map Editor brushes, Erosion Optimization, Creature Settings UI and Scrollbar control. Progress is slow, but steady.
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.