Hey folks. A few hours before my flight, here’s the devlog for version 0.18 !
I’ve finally got the game to a point where it feels stable again. At the beginning, I created the game assuming that playing on a new map meant loading a new scene. With the way we wanted to handle map selection and the general feeling of “playing a real board game”, this was not compatible.
So I had to deconstruct the whole game, and rebuild it again. Everything that was waiting on “BeginPlay” needed to instead listen on some other event; everything that was left over after a game needed to be cleaned up. Things needed more structure (actors hierarchies).
It was really painful, and, coming from a Unity background, I had to fight the engine a number of times because I wanted to do some things the Unity way. It’s not that you can’t; in fact, most things can be done the same way both in Unity and Unreal. But I initially planned the foundations Unity-style, which was incompatible. I cried tears many times.
Anyways, here’s how it looks like now:
I finally had the time to implement an event store in the game. It’s a tiny set of classes that unlock a ton of power.
Say, for instance, that a player starts attacking. This player “pushes” an event “PlayerStartedAttacking”, together with the id of that player, and the time at which the event occurred. The Event Store is just the collection of all these pushed events.
I’ve declared the following events for now:
- GameStarted(time, MapName)
- PointScored(time, PlayerNumber)
- PlayerSpawned(time, PlayerNumber)
- PlayerKilled(time, PlayerNumber, KillingPlayerNumber)
- GoldCaptured(time, PlayerNumber)
- PlayerStartedAttacking(time, PlayerNumber)
- PlayerStoppedAttacking(time, PlayerNumber)
- PlayerWon(time, PlayerNumber)
Periodically (after x time has passed, or after x events have been pushed), the content of the event store is dumped to a file (to avoid losing data in case of a crash, and to prevent memory growing out of control).
We’ll let this run during a whole festival, and afterwards we’ll be able to pull a number of interesting stats, such as:
- Number of games played, number of games played to completion, game duration, time between games
- Time the gold is visible with no one capturing it
- Scatter plot the player’s attacks durations
And that’s just when using a single variable. Then we can do multivariate analysis, comparing e.g. the relationship between game duration and player kills; or player score vs time spent attacking.
We’d like to use this not just for festivals, but also to reward players after a match. With this we can easily say who was the most precise (time spent attacking / player kills), who was the most invisible, who was a pacifist, etc.
I’ve finally taken the time to integrate the Main Menu. We won’t show it when the game is in showcase mode, but it’ll be present in the regular build.
We have a very basic highlight system for now, where we light the selected menu item. In future steps we will keep the lights, but also animate the highlighted item, and animate it again when it is selected. The only options that do something at the moment are the “play” and “tutorial” buttons.
Sneak peek: the credits page will feature this image:
New maps !
After refactoring the way maps are handled, we can finally try integrating maps very easily. To give you an idea, after designing the level and producing the meshes, it takes roughly 10 minutes to integrate the level inside the game. So the whole process has become very straightforward and lightweight. The longest part is the level design, which must take into account the very specific movement style in this game. Creating unreacheable or frustrating areas is very easy if you do not pay attention. Here’s how the new maps look like:
These are the very first iterations of these maps, so we need to playtest them and iterate on it.
The next sprint (0.19) will, in addition to all the bugfixes we’ll have to do post-festival, focus on new maps and mechanics and improvements to the functionality of the main menu. We also need new balls, so I’ll start beating my artist for that.
In the meantime, I’ll be in Finland for holidays, so the next devlog would arrive early-mid february.