It has been a busy month or so in the land of game development for me. My game has moved on to now having a proper menu system, a loading screen and asynchronous streaming levels. Along with this I have also added a mini-map which uses a second camera directly above the player's skeletal mesh, which follows its position, always 25 metres above the player's head and never rotating, so the mini-map always faces north. The stamina bar has been moved below the mini-map and made smaller. I decided to generally ape the way GTA V does this, as it is likely that players are going to be more accepting of something similar to an existing system, and a UI is a UI, expectations are generally king and doing novel things just tends to pee people off.
Alongside the development of the game, i have spent some time redoing the map of the game world. I have decided that the map will not be 100% accurate, just like most maps in medieval times, it will have flaws. Most of these flaws will be subtle. You can see the new map at the top of this article, to see the old map, you can find it on the website of the web based version of the game in all it's ugly glory.
The menu system of the game is fully 3D, using a seperate level. The game's level structure has been arranged so that the persistent level contains nothing but what is required. Essentially this means it contains nothing but a recast navmesh and a navigation bounds volume. There are two sub-levels which are streamed in and out when required, the first one being the menu map, and the second being the core of the game world proper. Within the game world, various regions are sub-levels of this too, and may be loaded and unloaded via streaming as and when required to save memory.
When the main persistent level loads, it's "On Begin Play" event simply streams in the menu level. While any level is being streamed in, a UMG full screen widget is drawn on the screen which consists of the loading page. The loading page has an animated progress bar/marquee on it to show the player that the game is actually doing something, and hasn't crashed. The menu and game world, in their own "On Begin Play" events hide this UMG widget, revealing the map proper.
It might also not be noticable but i have also turned off "Temporal Anti-Aliasing", a default feature of unreal engine 4 which puts motion blur on everything. For most uses this just makes text above the NPCs heads unreadable and blurs the detail on textures. I have disabled this, replacing it with the more reliable FXAA scheme.
This now actually looks like a proper game, as it doesn't just drop you straight into the game world. There are of course still holes and incomplete bits - clicking "load saved game" does nothing, and dying now fades to black with a message "*** TODO: Reload last save ***". It will be a while yet before this message goes away as save game files are low down on my list of priorities at the moment, next on my list being invetory systems and conversation trees.
For inventory systems i plan to have a simple TList within each thing which may possess items, for example the player, NPCs and treasure chests etc. In the right situation, objects derived from an AInventoryItem actor class may be moved in and out of these lists. Basically, a corpse will be treated as a storage locker It sounds grim, but in my mind, this makes a lot of sense from a program perspective.
As always feedback and comments are welcome below, please let me know if you have any thoughts that might help with my game going forwards