The “The Chamber Of Secrets Has Been Opened, Enemies Of The Heir Beware” Update
In what will likely be Fortitude’s final update before hand-in (as next week will likely be mostly bugfixing) a considerable number of new features have been added. Narratively, the story is complete – this week adds the two final events into the game; the “Alien Ruins” and “Game Finale”. Additionally, the Fortitude ship itself has received a bit of a revamp, as it is now balanced better (to stop it falling over constantly) and has completely redesigned lighting and thruster-firing systems. The game now has a full Main Menu , the Sun has it’s own gravitational pull and an unfortunate fate for the player if they decided to venture too near it, and environmentally Elcalowda has been changed a bit; with some modifications to its atmosphere to increase difficulty and the addition of creepy Alien Ruins beneath its surface. Other than all that, a considerable number of bugfixes and improvements have been added, following a series of playtesting/feedback events that occurred this week.
- Narrative –
- Full Narrative Structure –
- 1. The “In The Beginning…” Event
- 2. The “Ocean Monster” Event
- 3. The “Alien Ruins” Event
- 4. The “Sentient Bacteria” Event
- 5. The “Game Finale” Event
- The “Alien Ruins” Event –
As can be read from the list above, this story event slots in between the previously implemented “Ocean Monster” and “Sentient Bacteria” narrative events. It picks up right where “Ocean Monster” leaves off (i.e. pointing the player towards the planet “Elcalowda”) and centres almost entirely around the “Alien Ruins” environmental structure that can be found in the undergound cave system of the planet. Upon entering the specific cave of said structure, the player will hear the ship’s AI speak as it begins to scan the ruins, and after a while it will extract location data from the structure, pointing the player towards another world; “Diadem”. If the player looks closely, this planet can also be seen as part of the holographic interface of the ruined alien structure. There are also a series of flashing alien symbols near to this hologram, which will hopefully capture the player’s curiosity, though they will not know what they mean…yet. Upon subsequently exiting “Elcalowda’s” atmosphere, the ship’s AI will update the map marker and the narrative reins are then handed over to the “Sentient Bacteria” event.
- The “Game Finale” or “Where It All Goes Horribly Wrong” Event –
This is (as you might have guessed) the final story event of Fortitude, taking place immediately after the “Sentient Bacteria” event closes. As soon as the player touches down on “Elcalowda” again (which they will as the “Sentient Bacteria” event guided them towards it) the ship malfunctions will cease, but the ship’s AI voice will sound a little strange. It will once again point the player in the direction of the underground alien ruins, though this time it sounds a little more commanding than suggestive. Upon entering the ruins, the ship will pressure the player into touching the ruined Altar, at which point all hell breaks loose. The entire area starts to rumble, the cave begins to shake, the alien symbols start flashing uncontrollably, and the lighting of the ruins fades from normal to dark red. After a short time, things then settle back down, and all is revealed; the previously encountered alien symbols (from the “Alien Ruins” event) are actually a countdown, and the holographic image of “Diadem” is swapped for that of the “Rogue Planet”, at which point hopefully the player will put two and two together; the planet that has been slowly getting bigger and bigger in the sky for the entire game is actually coming to destroy them. The now questionably erratic ship AI then warns the player that they should leave the System immediately, pointing them towards a specific System exit point once they leave the planet’s atmosphere.
Once they reach more than a certain distance from the game’s Sun, the ship’s distorted AI speaks again, stating that they have now left the System and that the player has “set them free”. The AI then completely disables the ship, leaving the player stranded. The camera then zooms out, passing the normal map zoom level and continuing until the entire Galaxy is visible. Time then goes by, and the stars surrounding the player’s location begin to go out, disappearing faster and faster until the screen is black. An unknown voice then speaks, saying”What Have You Done?” before the game then ends.
- Full Narrative Structure –
- GameObjects –
- Added “Alien Ruins” GameObject –
This particular GameObject has been placed in a large section of the planet “Elcalowda’s” underground cave system, and acts as the primary focus point for both the “Alien Ruins” and “Game Finale” narrative events. Visually, it was completely designed by Josh. It is an incredibly large structure, with the player being barely as tall as one of the steps leading up to it. In the structure’s centre is a holographic interface that switches between an alien symbol and a distorted image of the planet “Diadem” at regular intervals. To its left is a red-coloured switch, and if the player toggles this then the structure will begin to move, with the holographic interface lowering into the ground and an alien Altar rising up in its place. Toggling the switch again will then reverse this action. Just above the interface/altar is a series of flashing symbols, that are actually representing the game’s ticking clock in an alien language (designs by Josh). The player will not know this at the time, but the structure is actually telling them how long they have left until the “Rogue Planet” enters and destroys the System . In the “Game Finale” event, after touching the structure’s Altar the symbols change from alien to English, and the image of “Diadem” is replaced with one of the “Rogue Planet” in order to emphasise the imminent danger.
- Added “MoneyShot” GameObject (many, many Sprites) –
This considerably large GameObject is exactly what it’s title implies; the “money shot” of Fortitude. It is essentially the final visual of the game, being the massive shot of the entire Galaxy that the game zooms out into during the back half of the “Game Finale” narrative event. It is made up of several hundred sprites, including a number of smaller illustrated galaxies and nebulas designed by Josh and a considerable number of “stars” (Unity-based circles) that make up the background of the GameObject. Individual “stars” then gradually fade out during the “Game Finale” as the Universe is destroyed by the “Sentient Bacteria”.
- Added multiple “Particle System” GameObjects (Particle Systems) –
As a result of fellow Game Designer Sid very kindly aiding us in the visual effects department of Fortitude’s development (an area that I’m unfortunately somewhat lacking in expertise) the game now has several Particle Systems that operate at various intervals throughout gameplay. Said systems include:
- Ship Standard Thrusters
- Ship Rotational Thrusters
- Ship Booster Thrusters
- Planetary Explosion
- The ship-based systems act as replacements for the triangle-shaped placeholder thruster images that the ship had, and now when the player engages ship thrusters, it actually looks like the “Fortitude” has rockets. An initial orange flame fires from the bottom of the ship’s boosters, and several embers subsequently fly off the fire. Engaging the ship’s booster thrusters will then make said fire considerably larger and more prominent. Smaller, white-coloured particles then fire if the playar engages the rotational thrusters.
Finally, if the timer runs out and the “Rogue Planet” rips through the Solar System, upon hitting “Elcalowda” the “Planetary Explosion” particle system will engage, showcasing well…an explosion. Planet-sized.
- Added multiple Sound Effects (MP3, WAV) –
- Added “Ambient Ruins” Sound (Royalty Free from freesound.org)
- Added “Ruins Rumble” Sound (Royalty Free from freesound.org)
- Added multiple ship AI speaking lines (Self-Made from ttsdemo.com), including –
- Distorted AI lines for the narrative when the Sentient Bacteria takes over.
- Alternate distorted lines for engaging autopilot and remote control, for if the ship is “infected” with the Bacteria.
- Added “Finale Voice” Sound (Self-Made from ttsdemo.com)
- Added “Main Menu UI” (Sprite Renderer) –
This is a basic “Main Menu” UI system that is now showed upon first opening the game .exe file. It is a simple menu, having only two buttons located just below the logo for the game (designed by Josh) – Play and Exit. Clicking Play will load the game (Scene 1) and clicking Exit will…exit.
- Edited “Fortitude” ship GameObject (Rigidbody2D, On Trigger Circle Collider 2D, Box Colliders 2D) –
This edit removed the previously implemented triangular-shaped placeholder thruster images, and replaced them with Sid’s brand new Particle Systems (specified above).
This edit also removed the previously implemented lights that the ship had, and replaced them with more powerful and atmospheric “Spot Lights” that function far better with two-dimensional games in comparison to the previous lights. Said new lights also look a lot better during gameplay, particularly when landing as they light up the sky around them.
- Edited “STAR” GameObject (Rigidbody2D, On Trigger Polygon Collider 2D) –
This edit added several functions to the “STAR” GameObject located in the centre of the game’s Solar System. It now has a Rigidbody2D so that it could have Mass, which was then used to create its own gravitational pull that can influence the player’s current trajectory. If the player then collides with said “STAR”, then will be instantly destroyed (as that’s generally what happens when something collides with an actual Sun).
- Removed “Rika Moon 2” GameObject (Circle Collider 2D) –
During the implementation of features this week, the previously encountered “Visual Bug” (see Fortitude 1.4) cropped up again as the game once more crossed the 4GB Unity texture limit. As a result drastic measures had to be taken to prevent more visual problems, so one of the game’s Moons was entirely removed from gameplay. “Rika Moon 2” doesn’t serve much of a purpose during the game as its one of two Moons that doesn’t have a landable surface (so the player cannot really interact with it) so it wasn’t considered too much of a loss to simply remove it, and doing so got the game below 4GB, once again temporarily fixing the “Visual Bug”.
- Added “Alien Ruins” GameObject –
- Scripts –
- Added “AlienRuins” script –
This script forms the majority of the C# side of the “Alien Ruins” narrative event implemented in this week’s update as well as getting the general functions of the “Alien Ruins” GameObject up and running. Using the symbols designed by Josh, this script has a function that places said symbols just above the “Alien Ruins Altar”, and makes it so they turn on and off in a counting-down-style fashion (by a series of painstakingly-created SpriteRenderer enabled/disabled functions). Said function adheres to real time, so even though the symbols are in an alien language, they are actually counting towards the end of the game.
Another function the script has is enabling a simple switch GameObject that is placed near the “Alien Ruins” GameObject. If the player touches said switch, then the script’s function will activate, causing the holographic image of “Diadem” to disappear and some of the “Ruins” to move downwards, as well as causing the previously hidden “Altar” to move upwards into view. Toggling said switch again will reverse this effect, moving the holographic imager back up.
Finally, the other major function of the script is to enable some elements of the “Game Finale” event, which is done primarily by a series of toggling booleans and a timer. If the player has completed the “Sentient Bacteria” event (which is checked by the script) and so they and their ship are “infected”, then touching the “Altar” will cause the camera to shake considerably, and after a time the ticking symbols will translate, being replaced by a simple UI Canvas that shows the current time until the “Rogue Planet” enters the Solar System (sourced from the “RoguePlanetEvent” script. The function also turns the “Ruin’s” light from white to red, further emphasizing the dramatic nature of the narrative event.
- Added “MoneyShot” script –
Like with the script above, this too plays a significant role in the game narrative, though this time for the back half of the “Game Finale” that the “AlienRuins” script leaves off. Upon the player exiting the game’s Solar System, a boolean is activated within the script, causing the player to be pulled out of the map if they are in it, and automatically activating the ship’s autopilot function to kill any speed the “Fortitude” might have. At this point a timer begins, and after a few seconds pass the ship’s distorted AI speaks, thanking the player for “setting them free” and then disabling the ship entirely using the previously implemented “In Fuel Cloud” function from the “FuelSystem” script. The game then hangs there for a few seconds before the script then zooms the camera out, pushing the target orthographicSize value to 5,000,000 (for comparison, the map zoom is 25,000) and fading in the “MoneyShot” GameObject at the same time. At full zoom, the timer hangs there for a few seconds, allowing the player to take in the game’s money shot (Josh’s galaxy designs look amazing) before then starting to fade out its stars via a series of colour-alpha lerps. Once all of the “MoneyShot” has faded away the game hangs for a few more seconds before then playing the “Final Voice” line, scaring the player one last time (as the event is almost entirely silent apart from this) before the game ends. The timer then waits five more seconds before then cold closing by reloading the game’s Main Menu.
- Added “Main Menu” script –
This is a fairly simple script that is attached to the “Main Menu UI” GameObject within the new Main Menu Game Scene. Said script functions in a very similar manner to the previously implemented “Pause Menu” C# code, having a series of booleans that enable and disable depending on whether the player is pressing the “D-Pad Up” or “D-Pad Down” buttons in orderr to “scroll” through the menu. This script also adds a function that enables certain other functions whenever the player presses the “A” button; if they press it while over the “Play” button, it will play the game by loading the full game scene, and if they are over the “Exit” button, it will quit the game.
- Edited “Sounds” script –
This edit added a number of new functions into the game, all of them being sound-related (hence the name of the script). Said edits are as follows:
- Added a function that makes the volume of ambient weather sound effects (added in Fortitude 1.4) louder or quieter depending on whether the player is inside the ship, or within a cave system.
- Added a function that plays the “Ruins Rumble” sound upon the player toggling the “switch” GameObject attached to the “Alien Ruins” GameObject and so enabling the toggling between “Altar” and holographic imager from the “AlienRuins” script.
- Added a function that now plays audible ship AI warnings when the player gets too close to the game’s now only non-landable Moon (“Elcalowda’s Moon”). This function also destroys the player if they choose to ignore said warning and attempt landing anyway.
- Added a function that audibly warns with the ship AI if either their ship Fuel or “OnFoot” astronaut Fuel level drops below 30%. This was an improvement suggested in one of the playtesting sessions this week.
- Added a function that plays different versions of the “autopilot” and “remote control” ship AI lines depending on whether the player is “infected” with the “Sentient Bacteria” or not.
- Added a function that plays the various ship AI lines implemented as part of the “Alien Ruins” narrative event at various points during said event.
- Added a function that plays the various ship AI lines implemented as part of the “Game Finale” narrative event at various points during said event.
- Added a function that now fades the “Rocket” sound effect in and out depending on whether the ship thrusters are firing or not, as opposed to the previous code which simply stopped and started the audio. This edit makes the transition a lot smoother as well as preventing unwanted audio clicks.
- Edited “SpaceNavigation” script –
This edit added a function that now fades the new lighting added to the bottom of the “Fortitude” ship depending on whether the thrusters are being fired or not. If they are, a yellow-coloured light fades in at the bottom of the ship, giving the visual impression of light illuminating from the new thruster Particle Systems. Said light is then faded out if the player stops firing the ship’s thrusters.
This edit also fully implemented the new ship-based Particle Systems into the game, so that they engage when the ship’s thrusters are firing, and disengage when they are not.
- Edited “FootNavigation” script –
This edit added a small function that fades the ambient lighting of planetary surfaces depending on whether the player is within a cave system or not. Essentially, it gets darker when the player is in a cave, and brighter when they are not.
- Added “AlienRuins” script –
- Following several playtesting sessions over the course of the week, several “gameplay improvements” have been made. They have been placed here rather than in Additions as they are more relevant here:
- Made a gameplay improvement by changing the game’s minimum TimeScale from 0 to 1. In previous game builds, if the player held down the “D-Pad Left” button long enough, they could get the TimeScale to drop to 0, completely disabling the game. Not only was this generally unwanted during gameplay, due to the sensitivity of the controller D-Pad it tended to happen quite often, resulting in multiple accidental game pauses which caused frustration to playtesters after a while. Locking the minimum TimeScale to 1 fixes the issue, so the player can no longer scroll to 0 and accidentally freeze the game.
- Made a gameplay improvement by changing how the “popping-up” of the various tutorials works. Previously, the tutorials flashed up on the player’s screen whenever certain criteria were met, but this proved frustrating to playtesters after a while as their game would be continually paused by these tutorials. As a result, a fix was implemented that makes it so that insteadinstead of popping up the tutorials themselves, upon the criteria being met a UI text appears, notifying the player that they can read a certain tutorial by pressing the “B” button. Said criteria are as follows:
- Refueling Tutorial – Fuel levels droppping below 30%.
- System Tutorial – Available whenever the player opens the game map, though the inviting text will play only once.
- Landing Tutorial – Generally available if neither of the previous instances have occurred.
- Made a gameplay improvement by halving the movement speed of the “Nasty Cloud” GameObjects that are located within Gas Giants from 0.00000025f to 0.000000125f. In the previous build this speed caused issues for playtesters as the “Nasty Clouds” moved faster than they could react, as by the time they had seen them moving in the game map as they were refueling, the player could not get to the “Fortitude” ship in time before the “Clouds” destroyed them. In addition to this speed nerf, an audible prompt from the ship’s AI now plays when the “Nasty Clouds” get within a certain distance of the player, essentially giving them a lot more time to react before disaster strikes.
- Made a gameplay improvement by moving the “Fortitude” ship’s centre of mass (automatically created by its Rigidbody2D) down from the top to just under the middle of the vessel. The reason for this was that during playtesting players were finding that upon landing the ship would rock considerably, making it quite difficult and sometimes frustrating to land fully upright. The ship was acting as if it was top-heavy, which was strange but upon checking it was revealed that it was in fact top-heavy due to its centre of mass being weirdly at the top of the ship, so moving it downwards towards the centre fixed the issue.
- Made a gameplay improvement that disables the toggling of the ship’s autopilot function upon exiting the craft. During playtesting some players would accidentally trigger the function while they were wandering about on the surface of a planet, resulting in the ship basically taking off on its own (as autopilot causes it to rise up). Since there are few circumstances in which the player would need to activate autopilot remotely (which can be done via activating remote control anyway) this ability was disabled to fix the problem.
- Made a gameplay improvement by adding audible ship AI prompts whenever the player lands on a planetary surface for the first time. Some playtesters were finding that they were at a bit of a loss as to what to do upon landing, so the ship’s AI now suggests nearby points of interest that they can explore as soon as the vessel touches down for the first time.
- Made a gameplay improvement by adding a RayCast to the right-hand-side of the “Fortitude” ship that stretches about two Unity units to the right, essentially pointing outwards. If there are any GameObjects within said Ray, the game will not allow the player to exit the “Fortitude”, so they must move the ship if they wish to get out. This improvement was made as players sometimes either parked the ship next to a rock or crashed it completely on its side, and upon attempting to get out the “OnFoot” astronaut would be placed inside the collider of said GameObjects, freezing the player in place and leaving them unable to move. This improvement fixes that issue.
- Made a gameplay improvement by changing the criteria for ship death on landing to be a velocity.y float that’s higher than 10m/s rather than just a velocity magnitude. This makes landing slightly more realistic, as the game now only checks for vertical velocity rather than horizontal, making it so that the player can now essentially “crash-land” the “Fortitude” ship if elements of the atmosphere have altered their landing trajectory, as long as they are not dropping too fast (i.e. flying like a plane – moving on the x axis). This was made as a playtester found that the lack of being able to land like this was a bit frustrating.
- Made a gameplay improvement by increasing the size of the “Ocean Monster” GameObject from 100 pixels per inch to 200, as well as increasing both the volume of its noise emissions and the range. This improvement was made as several playtesters found that they never encountered the “Monster” despite extensive swimming in “Estabahn Moon’s” subsurface ocean, either physically or audibly.
- Fixed an issue by moving the exit point of the “OnFoot” astronaut when they exit the “Fortitude” ship slightly upwards and to the left (essentially, closer to the ship). This was done because sometimes upon exiting the “Fortitude” ship close to a nearby GameObject, the player would be ejected out inside said GameObject, rendering the “OnFoot” astronaut immobile and basically making the game unplayable.
- Fixed a bug where upon losing one or more of the “Fortitude” ship’s various detachable parts, the player could not then reattach them until they had moved a fair distance from said parts and then moved back towards them. This was caused by the reattaching function being triggered by an OnTriggerEnter function, so that essentially the player has to be outside the collider of the lost ship part and then enter it in order to get it to reattach, except in this instance they were already inside said collider, so the function would not trigger. This was fixed by changing said OnTriggerEnter function to an OnTriggerStay, so that even if the player is already inside the lost part’s collider upon losing the part, it will still reattach itself.
- Fixed a bug where upon zooming the game map in or out, if the player was nearby one of the orbital “rings” that show the current path of a nearby planet or moon, zooming in on them would cause them to severely pixelate, which was not a good look visually. This was caused by two things; the import quality of the “ring” images being set to 2048 rather than 8192, and the original image only being 3000 by 3000 pixels. This was fixed by updating the original image to be 9000 by 9000 pixels and then changing the import quality to 8192. The pixelation still occurs if you look hard enough, but it is much less visible now.