Storytelling and Gaming Blog
After making this game, it turned out better than how I expected to be! Due to previous experiences with Unreal Engine 4, I managed to overcome most of the game's technical issues and focused of developing the narrative.
Our initial phase of idea development was slow but steady at the same time. Guilherme provided many interesting concepts and we finally settled on the concept of Dante's Inferno. We started researching on the story and found several images from Pinterest which sparked our interest in creating the game.
Guilherme was interested in character design and I was interested in environment. From there we delegated the tasks to work on. The most important part about working in teams is to make sure we both know which areas we are covering so that we will not have any conflicts in the near future.
We started off blocking out the key areas of the map. From past experiences, I always skipped blocking out because I felt that it was unnecessary and a waste of time. However, I was proven wrong with this game as blocking out allowed us to make changes without scaling and warping the actual model. Blocking out allows us to quickly build up scenes quickly without wasting time building the actual props for the scene. After finalizing the blockout, only then can we swap in and replace the blockouts with actual assets.
Lighting is a key part of making a game come to life. A game can have a strong mechanic but if it doesn't feel real then half of the gameplay is lost. Lighting was challenging and fun at the same time as we had to do several test build of the scene. UE4 has a build lighting feature which accurately displays how light would actually light up the scene in real life. Sometimes, the process of lighting can take multiple tries to get the desired effect.
For the Destructible mesh, I was thinking of using Houdini to generate the fractures and the alembic file needed to contain the destruction animation. Eventually, I found out that Unreal has the option to generate a destructible mesh from a static mesh which is truly wonderful. This was one of my takeaways from making the game.
Sound design is also another aspect to making the game work. You can have a visually pleasing game but you can't have a horrible sounding game. Our goal was to make the player feel immersed in the environment by playing a cave like-ambient sound. With water dripping from the stalagmites onto water puddles, these little sound effects help make up the entirety of the game. Footsteps sounds were also accurately matched to the miner's walking animation to make it seem more believable. Mining sounds and rock destruction sound effects help sell the effect of being in the miner's shoes. The voiceover was quite fun as I had to alter it so that it doesn't sound like me. Reverberation also made it more believably scary and eerie.
To summarise, this game produced unexpectedly good results and I had a blast making it!
We decided to add a prompt at the end of the soul cave hinting that they have to turn back. This was because the player thought that the rocks are minable. Hence we added a popup UI saying that "you can't mine here".
To give the appearance of the devil, I used two animated spheres with emission and black particle systems for the black fog.
The sphere's animation were controlled using a timeline node and then set actor scale 3D node.
Once that is done, the next part was to set the particle systems visible.
Subsequently, the narrative UI part is then triggered.
For the demon's voice, I used a voice modification software called VoiceMod.
- Welcome Dante -
I know you very well...
Well somebody has broke their cycle again...
Have you changed your mind?
Will you choose to go back...
to live a life of mining...
will you choose to go back and forget your sins...
Or atone for all your sins by suffering...
and stand a chance to go to heaven...
So... Which will you choose?
Press 1 to atone for your sins Press 2 to forget everything
I could choose from a bunch of effects to warp my voice. I chose something inaudible at the same time, dark and eerie but it still felt empty. As such, I used an Audio Volume in UE4 which basically acts as an reverberation box. It creates echoes which simulates speaking in a cave.
The decay time is then set to 9 so as to simulate the height of the cave and the time taken for sound to travel and bounce back to the listener's ears. The final effect was much more believable and realistic!
The series of narrative subtitles over the demons voice were made up by the same system of displaying UI. It was just repeated over and timed properly to ensure that the UI lines up accordingly to the voice over.
It goes on like a train...
At the end of the devil's speech, we wanted the player to make a choice. Either he atones for his sins and suffers immense pain but stand a chance to go to heaven or he chooses to forget his sins and live comfortably with his current life now as a miner.
If he chooses atone for his sins, the character will play a death animation and the screen will fade out slowly to black. After awhile, there's a scream which represents the agony and torture for redeeming for his sins. After sometime, the screen turns to white which could represent an ambiguous ending.
If the player chooses to forgets his sins, the screen fades off to black and after awhile, the game restarts itself, leading the player to "repeat" his cycle of his life as a miner.
We took reference from Dante's Inferno that the last level of hell was a frozen icy lake. Souls which were sent there basically saw the devil themselves and are being devoured constantly by him. We incorporated Plutus's statue which was regarded as the puzzle piece to meet the devil.
I sculpted the statue in Zbrush and then ported it to substance to texture it.
Similar to the destructible rocks, I applied the same concept to the statue. The player has to mine for several times before crumbling. In addition to the breaking of the statue, I added camera shake for a stronger effect. You can control the oscillation duration, the pitch, yaw and roll.
We wanted to create player - triggered illuminated words in this section of the cave.
For reference, Guilherme went to find some quotes of Dante's Inferno. Instead of the usual english quotes, we wanted something more incoherent... As such we went for this particular Italian phrase
"E qual è quei che volontieri acquista,e giugne ’l tempo che perder lo face,che ’n tutti suoi pensier piange e s’attrista"
Translated to english,
And as he is who willingly acquires,
And the time comes that causes him to lose,
Who weeps in all his thoughts and is despondent,
I used Photoshop to create the words and the alpha. I then ported it to unreal and attached it to a plane.
Similar to other triggers, this trigger creates an dynamic material instance which uses a timeline node to control the opacity and emission intensity of the material. I used a linear interpolation node to basically blend opacity (zero) to 100 opacity over a period of time.
Worldofdante.org. (2019). Inferno / Dante Alghieri. [online] Available at: http://www.worldofdante.org/comedy/dante/inferno.xml/1.1 [Accessed 27 Apr. 2019].
We wanted the miner to discover a hidden cave after mining and breaking the rocks. Hence, I used the BSPs to create a rock cluster which is shown in the bottom picture. For initial debugging phase, I set the rocks to have zero collision with the player so it acts more of a placeholder.
The destruction of the rocks was done in Ue4's destructible mesh. It essentially fractures the mesh using a procedural voronoi pattern in which you can control the parameters. In this case, I made it so that the rock is fractured into smaller pieces like this.
Now for the trigger to destroy the rocks!
When the player steps into the trigger it will set the condition node (Mine Trigger) to be true and vice versa when the player exits. Instead of using the event begin node which only fires off a executable flow once when the game begins, we will now use an event tick node which essentially is the same as a void_Update() in Unity.
We will check if the MineTrigger is active, if it is we will want to check whether the player is playing his mining action and this is done by checking the SideScrollerCharacterBlueprint.
Inside the blueprint, we have a mining action which essentially plays the mining action on mouse button left click. When this action is played, it is setting the condition node (isMining boolean) to true and when the action is over, it sets the node to false.
So now, we both conditions (when player is mining and is inside the trigger) are true, the function now moves on to the next stage.
Looking back at the level blueprint, the flow passes through a sequence node and diverges into three outputs. I am just going to explain the main one now. Since we want the miner to mine several times before breaking the rock, we need to create a counter or a countdown system. To do this, we create a float variable called Mine Count and we add a ++ or incremental node which essentially adds 1 to the number each time it is called. Since this is an update function, we can track the Mine Count by adding a print string node.
All we have to do now is set a limit to that mine count to trigger the rock destruction! We implement a greater than node to check if the minecount is greater than (in this case it's 520 for 5 hits), destroy the rocks.
The rock destruction is then triggered by apply a damage to it and setting a hit location for that damage.
Trigger to replace cave section
A box trigger was placed at this section of the cave for the player to trigger the UI text as well as the cave replacement section.
The following code below shows how the trigger works.
When the player steps into the trigger, it will trigger a condition node (Scene 1 boolean node) and set it to be activated. It will trigger the rest of the instruction once with a DoOnce node and the execution will flow through a sequence node. You can imagine a sequence node as a multi gateway in which the execution will flow from multiple outputs. Now, the execution initializes the UI display for the text "- Soul Cave -" as well as destroys that actors from the introduction cave. The multiple blue nodes are referenced actors (whispering cave assets) which have been set to hidden visibility. So in a sense, the introduction cave assets are destroyed and the whispering cave assets are set to visible and collision-prone.
Lighting of the cave was relatively tricky as this was a dark environment and lights had to interact the scene properly.
We were heavily inspired by this illustration by Florian Aupetit. A link to his website can be found here https://florianaupetit.com/all/bw3p5ksxfnlkt8jlh1ac7kitipbebq
In game environmental soul cave in UE4.
To get the final scene as shown above, we made use of 2 elements. Point lights and environmental fog.
The properties for the point lights are as shown. I played around with the intensity of the light to control how strong it gets. The light color is self explanatory and the attenuation radius refers to the falloff of the light. I chose to go with this number as it was provided a mid falloff radius which illuminated the scene nicely. Volumetric scattering intensity setting was used to control how foggy the light gets.
Exponential Fog was used in this case to complement the cave aesthetics. We wanted this cave environment to be somewhat moody, eerie and soul like. Hence this fog proved the most effective in delivering this aesthetic outcome. The properties were relatively straightforward - controlling the density of the fog, the color and the falloff. All in all, fog and lighting works perfectly in harmony.
Aupetit, F. (2019). Work — Florian Aupetit. [online] Florian Aupetit. Available at: https://florianaupetit.com/all/bw3p5ksxfnlkt8jlh1ac7kitipbebq [Accessed 10 Apr. 2019].
Creation of the assets.
Props such as rocks, stalagmites caves were created using the in-built BSPs.
Unreal has a useful foliage tool which allows you to paint and generate static meshes over environments. This allowed me to change the look of the cave from somewhat dull and uninteresting to a more atmospheric one.
All of the rocks and stalagmites were painted in using the foliage brush and I could easily change the position by erasing and re-brushing it again.
Our game was narrative based. As such, we needed some kind of text display to help develop the narrative. As such, UE4 had a UI system which enabled us to do that. I followed this tutorial video for the implementation of the text: https://www.youtube.com/watch?v=XVU5vNnhgxo (YouTube, 2019)
The UI entails a text box in the center and I created a binding which allowed me to replace the " - Cave -" text to something else via the level blueprint. Now i can create text for the different sections of the caves. I added two animations for the text. One for fading in and the other for fading out. These animations were created to prevent the word from appearing instantly and disappearing the next second.
The following blueprint below shows the initializing of the UI text. An event begin node is used to send a an instruction whenever the game begins. The instruction flows through the enable input node which essentially enables player inputs (keyboard/mouse click) and creates a UI widget. From there, we need to display the UI widget and we can do so by using the Add to Viewport node. Next up is to play the fade in animation for the widget and using a delay node, we can make the text visible for 5 seconds before triggering the fading out animation. For debugging purposes, I included a print string to check if this blueprint works.
Creation of the eternal flame particle system
One of the particle effects included a turquoise-flame which resembles flames from hell.
I took the original steam particle and customized it to get this end result. How particle effects in UE4 works is that it consists of multiple emitters with different properties.
If we look at the flame emitter, it is simply a smoke sprite with turbulence applied to it. I added a color over life and changed the color to a bluish green. Size by life just indicates the gradual decrease in size of the particle over time.
There is also a light property which casts light onto the real life environment whenever the particle effects spawn. This was one of the more important property to bring the whole cave environment to life.
YouTube. (2019). Introduction To User Interface Widgets - #45 Unreal Engine 4 Beginner Tutorial Series. [online] Available at: https://www.youtube.com/watch?v=XVU5vNnhgxo [Accessed 3 Apr. 2019].
The work was split between character design (Guilharme) and environmental design (Me).
This was the sketch of the level that we imagined. In the first stage, the player will need to break past the rocks to enter the next room. We wanted something repetitive, for instance the player will need to mine the rocks and put it in the minecart... for about three cycles before the rocks could break. However we scrapped the idea because it would literally be too boring and monotonous. Hence, we settled for the idea of breaking the rocks after several hits as we felt that it was much more straightforward and faster.
After breaking the rocks, the player will presumably find himself in the next section of the cave (Soul Cave). We wanted to replace the existing cave room as shown above to another new section of the cave when the player walks past the broken rocks. This was to give a sense of illusion as the player just came from a room which is now completely different.
These were the places we planned for the cave environment.
The beginning “A cave” (repetitive mechanic 2x)
New discovery “Soul cave”(walks into it after destroying the rocks)
Something changed “Whispering Cave” (discovers after walking back from Soul Cave)
Understanding “Pluto Statue” (sees after leaving Whispering cave)
The decision “Frozen Lake” (discovers after destroying Pluto Statue)
I blocked out the cave by using Unreal's BSP which allowed me to fully customize the cave to any shape and size to my needs.
Ideation of game concepts
Guilharme and I have decided to work on this project together. The game's title is called Dante and it revolves around the life of a miner in a cave until one day he discovers the nature of his reality.
Art Direction and Genre
The game will be a 2.5D side-scroller, drawing inspiration from visual narrative games such as Inside and Limbo. Unreal engine is our go to platform for this game as we felt that it was more capable of producing and prototyping something that is visually pleasing and less programming hassle.
(Inside Promo Art, 2019)
The game's narrative is also accompanied by text pop-ups which helps to enhance the stroytelling aspect.
Today we tried out putting a 3D model into the scene and made it visualize on the mobile devices. Incorporating a 3D model was slightly more work as it required a gray plane to act as the tracking plane and also an object with tracking points in which we used a camera for it. A person has to revolve around the tracking object and record it using the vuforia app. Once the tracking data is completed, a green dome will be visualized. After that, all that's left it is to import the tracking data into Unity and then put in the 3D model (I modeled a taxi in Maya).
Source: Taxi - Christopher Lee
Kristaps Locmelis introduced to us Augmented Reality in Unity using the Vuforia developmental kit. The last time i played around with AR was with an app called LayAR. It is similar to Vuforia but it was more catered towards mobile devices. The idea behind AR was to upload a pattern or "fingerprint" to the server and the app itself will scan for that particular pattern. Once that pattern is found, it will display the image/video that is tagged to the pattern. It was quite an interesting idea and AR is definitely one of the booming industries right now.
We had a Unreal Engine tutorial today by David. Unreal Engine is possibly the more visual engine out there in the community and I had experience with it in the previous semester. When I first started using unreal a year ago, I immediately felt accustomed with the user-friendly layout and drag-&-drop scene placement. They had BSP brushes which allow an artist to quickly block out custom shapes using additive and subtraction technique. UE4 went with a visual scripting interface which is termed as a blueprint. Since I am a more visual person, I preferred UE4 over Unity which was based mostly on syntax and code.
Two semesters back, I made a game in unreal engine which was inspired by Inside and Limbo.
Source: Wind Game Trailer - Christopher Lee
Link to game website: https://domopuff3.wixsite.com/wind
Most of the assets were done in Blender/Maya and imported into UE4 for assembly. The character animation was done in Mixamo and then blended using the animation blendspace which allowed the transitioning of one animation sequence to another. For instance, the character can switch from idle animation to walking animation smoothly without any jerks.
Subsequently in the next semester, I worked on an environmental piece titled Hong Kong 1947.
Source: Hong Kong 1947 - Christopher Lee
For this project, my main goals were to make a photo realistic environment in the game engine itself. I also wanted to incorporate Substance, Maya and Zbrush into my workflow as well. It was very rewarding as I found several ways to improve the speed of the workflow from generating assets to texturing and then finally to assembly. The models consisted of mostly high poly models baked into low poly models as games need to be lightweight and optimized for it to be playable. Lighting of the scene was introduced once most of the assets were in place.
Source: Hong Kong 1947 - Christopher Lee
I added animations to several assets such as this scene of the mass rapid transit as shown above. Water puddles which were actually decals were also placed into the scene to enhance reflections and make it more visually appealing. All in all I felt that this project was fulfilling in terms of understanding the workflow as well as getting more in depth with the sequencer in Unreal Engine.
We had our flash class today and it was more of a refresher for me as I had previously used flash before. We explored about interactivity in which you could place pictures and convert them as buttons so they are interactive. There was some built-in scripting which functions as the backbone for the interaction and I am pretty sure that if one dives more into those functions, it could lead to more interesting results!
As cool as flash/animate might be, I do not see myself working with this software as I feel like it is meant for hand-drawn and stylized artist to draw and animate on it.
Another game that I have recently got myself into is Nuclear Throne. Despite seemingly cartoonish graphics, this has to be one of the most replayable game ever. The game's core mechanic revolves around the usual shooting at enemies and collecting mutation points which are then used to level up the character. There are many characters, each with their own special abilities, e.g. Telekinesis, dual-wielding. Once a character has leveled up, the player can then choose from a variety of "mutations" which are akin to enhancing or granting attributes. For instance, the character, Eyes, can choose to strengthen its telekinesis ability and pull enemies in quicker. Other mutations include increased character health or increase ammo capacity. The beauty of this game is it simple but yet so addictive. The difficulty also increases as the character progresses through each level, encountering harder enemies and boss fights. The objective of the game is for the character to reach the Nuclear throne which lies on the last level of the game. I have reached the stage but have yet to defeat the throne boss. Alright back to playing the game for now!
Enter the Gungeon
Enter the Gungeon is one of the most interesting roguelike dungeon crawler games I have played so far. The term roguelike is defined as a subgenre of role-playing video game characterized by a dungeon crawl through procedurally generated levels, turn-based gameplay, tile-based graphics, and permanent death of the player character (as quoted from wiki). The attractiveness of roguelike games lies in the replayability and simplistic design mechanic. Each level is procedurally generated so as to give the user a different experience each time he or she plays the game and therefore, it will take a long time before the player gets bored of the game. For me, I have clocked in many hours into EtG. It has an arsenal of weapons and items in which the player can unlock by gaining credits throughout the game. Gaining weapons and items will in turn aid the player in progressing through the levels of the game before finally reaching the boss stage. The objective of the game is to unlock the bullet that can kill the past, which is acquired by gathering four different items and then handing it to the gunsmith who will in turn craft the bullet. After unlocking the bullet that can kill the past, you will then be able to access the past of each character and get a chance to influence it. The beauty of the game lies in the secret rooms and bosses that the player encounters the longer they play the game and this is one of my inspiration for my semester project.
In color balance. (2019). [image] Available at: http://color.romanuke.com/tsvetovaya-palitra-1823/ [Accessed 21 Feb. 2019].
Inside Promo Art. (2019). [image] Available at: https://www.mobygames.com/game/windows/inside_/promo/promoImageId,220328/ [Accessed 17 Mar. 2019].