November DevLog | Game Development Summary
November was a huge month for the team at Project Gamechanger as we continued working on our turn-based RPG. From modelling the intricate Rockbark Treemen and building our character selection scene, to creating a new system for level generation, we’ve got a ton of stuff to share with you – so sit back, grab a drink, and let’s get into it!
3D Character Modelling
Last month, we talked all about the texturing process for the Parakaw base mesh that we were remodelling. Well, after revising the feather tiling pattern until it was just right, we finished off the texture and could finally move on to refitting the original sets of clothes! We did this for three classes within the Parakaw race:
- Parakaw Astromancer: A playable character, Astromancers are intelligent spellcasters, recognised by their regal robes and magic staffs.
- Parakaw Watchers: Elite guards of the Parakaw kingdom, Watchers are powerful NPCs who use their magic to protect the main city.
- Parakaw Civilians: There are many Parakaw civilians in Depths of Erendorn. You may come across these NPCs as enemies you have to fight, or even townsfolk who you can trade with.
Luckily for us, the process of refitting the clothes to the new base mesh was actually quite straightforward, so we were quickly able to call an end to this remodel! The rest of the month was spent on modelling a new character race: the Rockbark Treemen.
In Depths of Erendorn, Rockbark Treemen are the appointed guardians of the High Forest. They appear in three main classes: Rockbark Saplings, the youngest and thereby weakest of the race; Large Rockbarks and, finally, Immense Rockbarks, who are among the oldest and strongest of the race. Because of their intricate design, sculpting these creatures took some time, and was a little fiddly:
- We began by blocking out the form of a standard Rockbark Treeman in ZBrush.
- After sculpting the various parts of the body, we encased areas of it in plates of bark.
- Vines and branches were then blocked in underneath and between the pieces of bark.
- This helped us convey that the bark is a protective plating, not the Treeman’s actual body.
- Further to this, the plates of bark will eventually move independently from the rest of the body.
- After speaking with Animation, proportions were adjusted so that the Treeman was taller.
- This made it more capable of performing certain actions, like punching the ground.
- Roots were then added to the feet. These connect underground and will appear when the Treeman walks.
Our Character Artist worked with our Animator a lot during this process. According to the Animator’s feedback, we decided to keep the arms, body and lower legs of this model as separate meshes. Since they are such rigid pieces, doing this will make them easier to animate by them having less deformations. Keeping these areas as separate meshes also means that the body will be able to break into pieces during death animations, and this shows how important it is to communicate between departments when creating a new model.
With the base form all sculpted, we went on to create two more variant sculpts. One was smaller, with no vines or branches, denoting a Rockbark Sapling. The last was for the Immense Rockbark, which featured more vines and branches to reflect its higher status.
After we retopologised and unwrapped all three sculpts, we could finally begin texturing! The texture changed slightly depending on each class of Rockbark Treemen:
- Rockbark Saplings were given a standard bark texture across their whole body.
- A more faded wood colour was given to the older classes of Treemen in order to reflect their age.
- Older, and thereby stronger classes, like the Immense Rockbarks, were also textured with more moss.
This brought an end to our Rockbark Treemen, and we’re really pleased with the results! The next characters we will be modelling are the Frost Dwarf Guards – so stay tuned for next week’s monthly update to see their final model, or check our weekly devlogs to join us on the journey in real-time!
This month, we’ve continued our efforts towards using a single, unique rig for all bipedal characters in Depths of Erendorn. Since we finalised this new main rig a few weeks ago, it was a matter of adjusting a character’s respective skin weights, rigs and animations until we were satisfied with how it was performing on the unique rig. They were then exported to the engine where we could test how well their animations performed under this new rigging system.
One of the characters we did this for was the Human Knight. Starting with the standard Human base mesh, we painted skin weights on the face, created different expressions and adjusted the idle slightly. The Knight was then skinned on to the rig and imported to the engine alongside its idles and walk cycles:
- The Knight’s combat idles for when he wields a one-handed weapon, a two-handed sword and a two-handed mace were transferred to the new rig before the animation was adjusted.
- The Knight’s combat walks were then also added to the new rig. This included the walk cycles for when the Knight is walking with a two-handed sword and a two-handed mace/axe.
Before we could begin testing everything, our Animator created two new one-handed attacks for our Knight, which were then exported into a test scene so that we could see how they blended. The test scene was also useful in testing out the efficacy of the Knight’s combat idle as well as how well they walked with two-handed weapons equipped. Our Animator then moved onto updating the equip/unequip animations of one-handed and two-handed weapons. When a weapon is being unequipped, we have made it so that its animation blends into the combat idle, so we were working on perfecting that transition.
We will continue doing this for as many characters as possible. The purpose here is to eventually get all character classes within one race using the same base rig. For example, all Human classes, from the Sorceress to the Knight, will use the same rig, and this will be the same for our Elven races, Dwarven races and everything else in between. We will then export all of these characters into a similar test scene to ensure that everything is performing well under the new rigging system.
This month, our Animator also did some research into Blueprints and Visual Scripting systems in UE4. Blueprints are a great way for developers from a non-programming background to add functionality to a project:
- Our Animator is looking into using Blueprints in order to test animation triggering and blending.
- Blueprints are a form of visual programming that will allow us to prototype gameplay elements, expose parameters in the engine and communicate between assets and C++.
- The visual aspect of Blueprints means that dynamic objects can be created without having to write code. Instead, you can drag and drop pins between code blocks or ‘nodes.’ This allows the developer to visualise as they create.
While our Animator has familiarised themselves with Blueprints, testing was carried out so that they can use it more confidently in the future.
In our last monthly update, we had put together the basic layout to our character selection scene. Well, more work continued on this as our Environment Artist worked on refining the overall scene in a number of ways:
- The composition and field of view were adjusted slightly.
- A plinth rock was added. This is what the character being viewed will stand on.
- Mesh mountains were added to the background for a more interesting horizon.
- These mountains were eventually textured with grass/rock and snow/rock materials.
- Dynamic tessellation was added to the terrain material to achieve extra detail.
- Local fog volumes were created and used throughout the environment.
- Changes were made to composition and lighting in order to give the scene more depth.
- Sun rays were added in order to create a level of ambience.
- Clusters of mushrooms were added to the logs for some character.
- The illusion of rubble was created by adding small stones all over the ground.
- For more points of interest, ferns, flowers and a campfire were also introduced.
All of these details came together to transform our character selection scene into a really awesome piece of environment where players can view all of their available characters. But all of this work led to one big problem: the FPS actually began tanking! To resolve this, we had to make a few optimisations to the foliage instancing as well as the mountains meshes. This led to a 65FPS increase from 15FPS to 80FPS. This will result in smoother animations and gameplay, so we’re relieved about that!
When we weren’t working on the character selection scene, our Environment Artist focussed on making several improvements to our environment as a whole. Our grass material, for example, was improved with automatic grass propagation functionality. This means that grass will be automatically placed wherever grass texture exists. Not only will this mean a more efficient workflow, it will also lead to more consistent grass placement – so it won’t grow where it shouldn’t!
Several spline systems were also introduced to our environment:
- River splines and cave wall splines were introduced.
- Doing this enables more seamless and flexible dungeon generation.
- Landscape splines like these work by making certain features conform to a landscape.
- Cave wall splines are particularly useful because they tile in all four directions.
- This means that we will be able to build cave walls as high as we like!
To put these new spline systems to the test, our Environment Artist created a new Cave Dungeon test scene in Unreal, where we created a new cave wall generation system using splines and displacement. A new cave floor layer blending terrain material was also created, lending a higher level of realism to this dungeon, and a water spline system was also added for more variation.
Going forwards, our Environment Artist will use the awesome concept paintings that our Illustrator has created to build all of the different dungeons within Depths of Erendorn. We’re really pleased with how our Cave Dungeon is going so far – how do you think you would fare in this place?!
November was witness to the creation of many new visual effects, from generic effects and buffs to cool little orbs that can be used as weapon glows, enchantments or even projectiles. The versatility that these kind of VFX offer us is great because it means that we will have a strong arsenal of effects at our disposal.
Among the generic effects created this month was a poison cloud, which will be used alongside poison-dealing abilities in the game. We decided to show this effect as a soft cloud that, when it dissipates, releases small glowing particles. We thought that this would be the best way to show an insidious ability, like poison, while still maintaining a fantastical element.
Visual FX were also created for two abilities:
- Drain Life: Used by playable characters like the Sorceress and Zentragal, this is a generic spell that deals Arcane Damage. It also restores a small amount of Health to the player using it. This was originally showed as a horizontal beam shooting forwards at the opponent, but after some revisions we changed it to a vertical beam and added some particle effects that follows its trail.
- Heaving Blow: Used by characters like the Knight and Earthen Dwarf, this a powerful close-range attack that deals a significant amount of Damage to enemies. This is shown as cracks on the ground that spread out in a circle from a centre point. Dispersing cloud effects were added to the edges of the cracks to suggest that the force of the attack is pushing surface dirt away.
The VFX for these two abilities aren’t finished just yet, and we’ll continue to refine them over the coming weeks. In addition to this, now that the colder months are upon us, our VFX Artist decided to start playing around with some snowy weather effects!
Tried out in an Unreal test scene, detailed little snowflakes were added to the foreground while some sporadic fog was placed in the background in order to create the illusion of perspective. This gives us an idea of how we’ll be able to create the effect in our snowier areas, like our Ice Dungeons or even the scapes of the Arctic Region!
After transitioning from Unity to Unreal Engine, we decided to change our system of level generation in order to achieve better gameplay and visuals. There were a few reasons why we decided to change our old system of level generation:
- The basic nature of our old system meant that it didn’t produce natural enough cave dungeons. While it offered a good amount of variation, our new method of generation offers much more.
- The old system meant searching for places to position props and trying to slot them into map data, whereas the new system allows us to add important set pieces and props at the generation stage and even have them interact with the other aspects of the algorithm.
- The ways in which we improved variation on the old generation can also be used on our new method, allowing us to improve it even further.
With that being said, most of November was spent working on level generation using Cellular Automata (CA), which helps process generated data into walkable cave systems. We started by using a Noise Generation plugin to create a prototype level generator in the game client. This is useful because it allows us to make many iterations until we reach our optimum results.
This Noise Library was then implemented so that we could get a seedable foundation for map data. We ended up creating display modes that use either Perlin Noise or Billow Noise Data to seed a base map. Using this base map, we then created the code to run Cellular Automata over it in order to create cavelike maps. Finally, extra edge noise was added over the top of the base map to ensure that the edges of the generated maps were encased in walls.
There were a couple of main benefits to approaching level generation in this way:
- By creating a room builder test scene, we’re able to use this as a tool that allows us to generate, examine and tweak the parameters for generated rooms.
- By using generated Noise as the base for our map data, we’re creating a more organic starting point that we can work with for the next steps in room generation.
As we continued working on all of this, we ended up adding capabilities to the room builder algorithm in order to make it easier for us to work with. Some of these capabilities were aimed at giving ourselves the tools to create, tweak and analyse data generated by these algorithms, like exposing the Noise generation properties and CA properties as sliders, or adding a ‘step back’ and ‘forward’ button to CA to allow us to freely review any changes. Other capabilities were implemented to improve our handling of different configurations:
- We created a method for queueing and running different CA settings consecutively over a map to test the outcome of different configurations.
- We created a save file to hold CA preset configs. Using this, we can not only keep data on presets that yield good results, but also modify and improve them.
The next important thing we had to think about was implementing a system for including Set Pieces in level generation. A Set Piece is a part of the dungeon that we want to be authored, as opposed to generated. After theory-crafting a method that would allow Set Piece assets to be incorporated into level generation, we decided to approach it in the following way:
- We added a system for creating grid representations so that we could define the way that Set Piece tiles interact with other tiles as the algorithm steps through CA.
- We then added placement rules for Set Pieces to allow them to define the boundaries of their potential placement on the map.
- The capability of rotating and mirroring Set Pieces was then created, as well as a widget for selecting from available stored Set Pieces so that we can run the CA and check results.
From all of this work, Set Pieces now integrate themselves into the seed data and affect the Cellular Automata. As well as this, the new tile interactions will improve the control we have over influencing the random seed data.
Over the weeks, our Programmers actually upgraded the builder to use a tile class that would hold more complex information during the build process. Then, using this class, a new system was made and added for tiles to interact with the algorithm and influence their surrounding tiles. By using this system with Set Pieces, we are able to ensure that entrances can better connect to larger, open sections and cause walls to grow from sections we would rather block off.
Using what we learned from our client-based prototype, we could start level generation using Cellular Automata on the Game Server. Our focus was then turned on creating the classes necessary to construct rooms from the data generated by our room builder. This includes an object pooler for handling asset loading, and a ‘foreman’ class for handling placement and initialisation of these assets.
In addition to this:
- We made it so that individual steps can be defined and ran any number of times, in any order, so that we can get interesting levels.
- We explored, designed and implemented a workflow for creating Set Pieces. The new system allows us to efficiently design Set Pieces and translate them to gameplay data for use with our room generation algorithm.
We’re now able to define and select from rules to govern Set Piece placement. As well as this, a defined structure for Set Pieces will be used when creating grid representations. Once the client-side tool has integration with this, it will allow our artists to make really interesting, authored Set Pieces that our level generator can use.
Thanks for joining us for another monthly progress summary on Depths of Erendorn! If you’re hankering for some daily updates, make sure to check out our Instagram, Twitter or Reddit for awesome content every day – and, if you can’t wait until next month for an update on our progress, then head over to our weekly devlogs!