The “We’ve Hit 1.0!” Update
Fortitude has now hit version 1.0, and so officially exits prototype stage. This rather large game update introduces a number of new features, including a new planetary surface (Diadem), a basic background parallax system, orbital prediction lines in the map and dangerous atmospheric elements that now make planetary landing a tough challenge. Oh, and the Rogue Planet is now in the game, as part of Fortitude’s first narrative event!
- Narrative –
- “Rogue Planet Event –
Throughout their time playing Fortitude, the player might notice a small planet in the skies of each of the planets they land on. This planet will slowly get larger and larger as the game progresses, until exactly an hour has passed in game time (3600 seconds). At this point, the Rogue Planet will pass through the Solar System, colliding with and destroying Elcalowda and generally wreaking havoc throughout the area. Unless they have successfully completed the game (which is not possible yet as the Narrative Events have not been implemented) the player will die as a result of the Rogue Planet’s destruction.
- “Rogue Planet Event –
- Controls –
- “X” – Slows the Fortitude’s current rotational velocity to 0. Controls were previously the “A” and “D” keys.
- GameObjects –
- Edited the entire game Environment –
This change moved all of the game’s planetary bodies around in order to make exploration more interesting and the environment more realistic. Changes are as follows:
- Moved “STAR” GameObject closer to Unity coordinates (0, 0, 0) in order to better centralise the game.
- Moved “Diadem” planetary body from underneath to the left hand side of the “STAR” GameObject, resulting in a much higher travel distance between the player’s spawn point and the planet.
- Moved “Elcalowda” planetary body from underneath to beyond the bottom right hand corner of the “STAR” GameObject, resulting in a much higher travel distance between the player’s spawn point and the planet.
- Moved “Rika” planetary body from underneath to far above the top of the “STAR” GameObject, resulting in a much higher travel distance between the player’s spawn point and the planet.
- Added placeholder “DiademSurface” GameObject (Polygon Collider 2D) –
This GameObject acts as a surface for the “Diadem” planetary body. The player can now “land” and “takeoff” from this planetary body as a result of the “OrbitTransfer” script. Upon colliding with the On Trigger Circle Collider 2D of the “Diadem” GameObject, the player will be transported to 1250 Unity units above the “DiademSurface” GameObject and the landing mechanic will begin. During takeoff, upon colliding with the “escapeDiadem” On Trigger Circle Collider 2D, the player will be transported to the outer edges of the “Diadem” GameObject.
- Added “Rogue Planet” GameObject (Rigidbody2D, Circle Collider 2D) –
This GameObject has been added as the first of the soon-to-be-implemented Narrative Events of Fortitude. This asset is one of Josh’s fully designed planetary bodies; a dark and mysterious world that orbits the “STAR” GameObject, but in a rather strange path. It has an “OrbitSystem” script attached, with “Elcalowda” as the target and 150 as its starting velocity. This world cannot be accessed by the player, and only appears fully right at the end of the game, initiating the “Rogue Planet Event”. More details are below in the “RoguePlanetEvent” and “RoguePlanetDestruction” script descriptions.
- Added “Rogue Planet Sprite” GameObject (Sprite) –
This GameObject is a side-on image of the “Rogue Planet” GameObject, and is used throughout the game to signify how long the player has until the “Rogue Planet” GameObject crashes through the game’s Solar System.
- Added new “ElcalowdaSurface” GameObject (Polygon Collider 2D) –
This newly desighed surface asset by Josh replaces the old placeholder version of “Elcalowda’s” surface GameObject, and comes with entirely new surface terrain as well as underground cave systems – all of which are fully explorable.
- Added multiple “Prediction Line” GameObjects (Sprite) –
These circular-shaped sprites act as orbital prediction lines for the game’s map. Whenever it is enabled, these “Prediction Lines” are placed around the “STAR” GameObject to line up with the orbital pathways of each of the Solar System’s planetary bodies, so that the player can see where each world has been and (more importantly) where it is heading. This is particularly useful knowledge for anyone attempting to land on a planetary body in the game.
- Added multiple “Cloud” GameObjects (Rigidbody2D, On Trigger Box Collider 2D) –
These GameObjects have been placed in the upper atmosphere of the “ElcalowdaSurface” GameObject, and essentially act as dangerous atmospheric elements that the player will need to navigate through in order to successfully reach the surface of the “Elcalowda” world. Upon colliding with any of these “Cloud” GameObjects, the player will be “pushed” in its movement direction, potentially disrupting any landing navigation that they are currently undergoing. In short, it would be unwise for the player to tangle with these atmospheric dangers.
- Added placeholder “Elcalowda Background” GameObject (Sprite) –
This placeholder sprite (gained from Google) acts as a testing background image for the game’s new basic parallax system. The sprite will follow the “Main Camera” at all times (due to being parented), but depending on the player’s current direction it will also move accordingly, so for example if the player is moving to the left, the sprite will move to the right, to give the visual appearance that the player is moving through terrain.
- Added “FootFuelUI” (Sprite) –
This is a series of bar-shaped sprites that are coloured from red to green, and which are coded to appear and disappear off the “On Foot” GameObject’s UI depending on the astronaut suit’s Fuel level.
- Removed “RogueMoonSurface” GameObject (Polygon Collider 2D) –
This was removed and replaced by the “DiademSurface” GameObject, as the Sentient Bacteria Narrative Event now takes place on “Diadem” rather than the “Rogue Planet’s” moon.
- Removed obsolete “ElcalowdaSurface” GameObject (Polygon Collider 2D) –
This was removed and replaced by the newer “ElcalowdaSurface” GameObject designed by Josh.
- Edited the entire game Environment –
- Scripts –
- Added “RoguePlanetEvent” script –
This script acts as the primary building block of the new “Rogue Planet Event” narrative event. At the beginning of the game the script disables the “Rogue Planet” planetary GameObject, and enables the “Rogue Planet Sprite” GameObject. Whenever the player is within the atmosphere of a planetary body, the script adds this sprite to the background, and slowly increases its localScale over time. After an in-game hour passes (3600 seconds) the script then enables and releases the “Rogue Planet” planetary GameObject.
This script also adds the placeholder “Elcalowda Background” GameObject to the background of the player, enabling it only when they are within the atmosphere of the “ElcalowdaSurface” GameObject.
- Added “RoguePlanetDestruction” script –
This script then takes over the “Rogue Planet Event” narrative once the “RoguePlanetEvent” script has released the “Rogue Planet” GameObject. With the “OrbitSystem” script attached and variables set, upon being released the rogue world will begin immediately moving towards the “Elcalowda” planetary body at high speed. This script makes it so that upon colliding with said world, a placeholder explosion sound effect will play (gained from Google) and the “Elcalowda” world will shatter into several pieces (currently placeholder), losing its stable orbit and causing havoc throughout the Solar System.
- Added “CameraZoom” script –
This basic script makes it so that no matter the camera zoom level (or OrthographicSize) of the “Main Camera”, the “Rogue Planet Sprite” GameObject will remain the same size relative to the environment whenever the player is within the atmosphere of any of the game’s planetary surfaces; i.e. it doesn’t get smaller if the player zooms out.
- Added “Background” script –
This script adds a basic background parallax system into the game. First, it takes into account the player’s current velocity, and then calculates an offset that accounts for the velocity, a seperate “speed” float and Time.deltaTime. It then applies this offset to a transform.Translate function. Since the “Elcalowda Background” GameObject is already parented to the “Main Camera” GameObject, the script then moves it relative to that, resulting in a slight movement of the game’s background depending on whichever direction the player is moving in, overall giving a visual impression of movement. This parallax effect has currently only been applied to “Elcalowda”, but more backgrounds will be added in future.
- Added “Wind” script –
This script adds a wind-like functionality to all of the newly implemented placeholder “Cloud” GameObjects in the game. It uses a transform.position function and a float to move the “Clouds” slowly across the upper atmosphere of the “ElcalowdaSurface” GameObject (which currently acts as a testing ground for this mechanic) and depending on the positivity or negativity of the float, will either move them left or right. If the GameObjects should then collide with the “escapeElcalowda” barriers surrounding the surface GameObject, they will then be transported back across to the other side of the surface, giving the impression of constantly respawning. If the player should collide with any of these “Clouds”, they will rotate and push the player in their current movement direction, which can result in some rather dangerous navigational issues for them.
- Edited “OrbitTransfer” script –
This edit added two new vocal “Ship AI” sound effects to the game. The “AI” now says “Entering Planetary Atmosphere” when the player does so, and “Exiting Planetary Atmosphere” whenever the player does that.
This edit also added an infinite function to the newly implemented planetary terrain of the “ElcalowdaSurface” GameObject. Essentially, whenever the “Fortitude” ship collides with either of the edges of the terrain, they will be transported to the other edge. The player will however be unaware of this, due to the visually looping nature of Josh’s terrain designs. This function basically makes the planetary terrain infinite by looping it, so the player will never reach an “edge”.
This edit also removed the “RogueMoonSurface” landing function and replaced it with the “DiademSurface” landing function, so that the player can now land on the surface of “Diadem”.
- Edited FootNavigation (infinite terrain, improved planetary movement) –
This edit added the infinite terrain function from the “OrbitTransfer” script to this script too, but with one small difference. The version in the “OrbitTransfer” script pertains only to the “Fortitude” ship, whereas this version in the “FootNavigation” script enables the infinite terrain function for the “OnFoot” astronaut too. Essentially, while on foot and in ship, the player can now experience the new infinite terrain mechanic.
This edit also massively improved on foot planetary exploration by adding a new function that completely changes the “On Foot” movement system whenever the player is walking on the surface of a planet. This new system uses a Transform.Translate function to move the “OnFoot” GameObject rather than a Rigidbody2D.AddForce one, resulting in a much smoother method of movement as well as a much more enjoyable exploration experience overall.
This edit also added a timed “jump” function for the OnFoot” astronaut; the player can now jump upwards with their suit “jetpack” for three seconds before it then has to recharge.
- Edited “FuelSystem” script –
This edit used the Fuel Gauge UI code from Prototype 0.8 and applied it to the new On Foot Fuel Gauge, accurately displaying the “On Foot” GameObject’s current Fuel level as a series of red-to-yellow-to-green bars. It arranges each of said bars in a semi-circle shape, with the top green-coloured ones appearing when the ship’s Fuel is at 80-100% and the lower yellow and red-coloured ones appearing when the Fuel is at lower levels. This UI will also appear and disappear depending on whether the player is currently in control of the “On Foot” or the “Fortitude” ship.
- Added “RoguePlanetEvent” script –
- Fixed a bug that has been in the game since Prototype 0.5.5, where upon initiating planetary landing, the UI-displayed distance between the “Fortitude” ship and whichever planetary surface the player happened to be landing on was displayed incorrectly. This was caused by the UI display function taking the difference between the transform.positions of the “Fortitude” ship and the planetary body as a Vector3 and then magnituding it, resulting in inaccurate distance readings. This was fixed by changing the Vector3 to a float and only taking the Y values of the distance-based variables between the two GameObjects.
- Fixed a bug where the “On Foot” GameObject’s Fuel Gauge UI wouldn’t disappear correctly upon the player entering the “Fortitude” ship or by remote controlling it. This was caused by Unity not accurately reading the IsRemote and InShip booleans from the “VehicleTransition” script, resulting in it not enabling or disabling the astronaut’s fuel gauge. This was fixed by adding a few lines of code to the “FuelSystem” script that more accurately checked the booleans and changed the SetActive status of the “On Foot” fuel gauge accordingly.
- Fixed a bug where upon being enabled at the 3600 second mark, the “Rogue Planet” GameObject would begin accelerating towards the “Elcalowda” planetary body and would suddenly then stop once it was about halfway there. This was caused by a few “Asteroid” GameObjects being in the Solar System that had long since been forgotten about, and due to their lack of Rigidbody 2D’s had been locked in place, so that even a planet couldn’t budge them. As a result, when the “Rogue Planet” collided with them it could not move past them, stopping it in its tracks. This was fixed by completely disabling all “Asteroid” GameObjects in the Solar System, as they need revamping anyway and were serving no purpose to the game in their current state.
- Fixed a bug where the upon colliding with any “Cloud” GameObject, the atmospheric winds mechanic would instantly destroy the player, no matter if they were controlling the “Fortitude” ship or the “On Foot” GameObject. This was caused by the float setting the rotational and Vector3-based AddForce movements being far too high, resulting in an AddForce function so high it would glitch the player out and cause them to be destroyed. This was fixed by lowering said float to much lower numbers (each is different depending on the “Cloud” it represents).
- Fixed a bug where upon entering the upper atmosphere of the “DiademSurface” GameObject, the player would suddenly be transported into deep space, rather than to the outer edges of the “Diadem” planetary body as they are supposed to be. This was caused by a few forgotten lines of code that still refer to the “Rogue Moon’s” surface despite its removal from the game, which transported the player to where said Moon used to reside (which is now empty space). This was fixed by editing the lines of code to now transport the player relative to the “Diadem” planetary body instead.