A downloadable game for Windows and Linux

A simple courier run turns into a fight for survival.  Uncover the secrets hidden in this station and get out before it blow up.

Published 4 days ago
StatusReleased
PlatformsWindows, Linux
Authorbathedinhisblood
GenreShooter
TagsFirst-Person, Horror, Sci-fi

Download

Download
OrbitalFearWin.zip 963 MB
Download
OrbitalFearMac.zip 972 MB

Install instructions

Note:  requires NVIDIA GeForce RTX 2080 Ti or better to play.

  1. Download one of the zip files (Windows or Mac)
  2. Unzip the file
  3. Open the file and click on the 3DFS icon


List of changes from the demo version

  1. Player
    1. New player action added:  ActivateObject
      1. Press a key activates any activatable object which player is looking at (open door, turn on lights, etc.)
      2. Uses a ray generated from the camera to hit an object
      3. Created interface IActionableObject which allows any gameobject to implement the activate function however they want
      4. Added "tool tip" UI additions so that if player is looking at on object that implements IActivateObject, an explanation of what will happen if they hit the activate object key appears.  Update InGamePage with with new script to show the "tool tip" at the bottom of the screen
      5. Add highlight - In addition to the "tool tip" an object which implements an IActionObject interface will get a red highlight when the player is looking at it, so they know which object is related to the tool tip.
      6. Added scripts which implement IActionableObject interface to allow many of the prop items in the scenes to be interacted with (crates, lockers, wardrobes, etc.)
  2. GameManager
    1. New feature added:  Save last checkpoint between games
      1. Added a new cross Scene persistent gameobject called SaveManager.  It persistently saves the current location and level when the player hit a checkpoint, (persistence is implemented like the SaveHighScore method).  So when a user is at the main menu for the game, if a persistent save is available the player has an additional button option to continue the game from their last level and checkpoint, in addition to the option of starting a new game (SaveManager implements this as well, by loading the appropriate Scene for last saved level and playing the player location in the appropriate checkpoint).
      2. Load of new scene is done with an AsyncSceneLoad with low priority and a particle based spinner is displayed on top of the UI during loading
  3. User Interface
    1. New UI script:  Cinematic mode
      1. Used for small little cutscenes inside the level
      2. Adds black horizontal bars to the screen for a "widescreen" effect
      3. Turns off player control
      4. Runs an animation
      5. Removes the horizontal black bars
      6. Turns player control back on
    2. New UI script:  BossHealthDisplay
      1. Inherits from HealthDisplay
      2. Provides a Hide/Unhide feature to allow the boss health to be shown only during a boss battle, while allowing the BossHealth UIelement to register with the UIManager
  4. Enemies
    1. Enhanced Enemy framework created:  EnemyAdvanced
      1. A set of CS scripts including the Main script, health script, damage script
      2. Inherits from the existing Enemy related classes (Enemy.cs, ...)
      3. Adds support for many different state types (running, walking, rage, being hit, dying, attacking, etc.) with multiple animations for each state
      4. Provides a bit more flexible framework at the cost of added complexity by driving more game-logic through event handling scripts for each animator state calling callbacks to methods in the main enemy
      5. Incorporates a rotation manager(s) (see below in utilities) will allows one-axis rotation and target tracking to be added to any enemy objects, used to allow for different parts of an enemy to rotate independently by axis (for example:  in a turret, the bottom rotates on the Y axis, the head rotates on the X or Z axis).
      6. Provides sensor manager (see below in utilities) which handles all the seeing and enemy identification capabilities
      7. Used to derive additional classes which inherit and extend functionality
        1. GroundEnemyAdvanced - Port of the GroundEnemy which adds Nav Agent support to EnemyAdvanced
        2. GroundDistanceAdvanced - Adds Distance attack capabilities to GroundEnemyAdvanced
      8. Has a "leave preInitialized" state which allows it to be placed in a Scene in it's "display in editor" mode and later triggered to activate
    2. New Enemy Assets created:  Sentry_Sentinel_01_Shoot
      1. Implementation of EnemyAdvanced
      2. 3rd party model asset
      3. Turret enemy, no movement, just rotates till it finds a target, then locks on and fires
      4. No animator used, very simple implementation, proof-of-concept
      5. Created Sentry_Sentinel (I know the naming convention is not consistent with CamelCase, should change that one day)
      6. New Damage Script inherited to handle Damages from Particle animation
      7. When killed, has a shatter effect using cell tearing from Blender to create lots of little "giblets"
      8. Added smoke particle effect for smoke after death
      9. Not used in this game, save for future level
    3. New Enemy Assets created:  MonsterCrabBasic
      1. First implementation of the GroundAttackAdvanced child of EnemyAdvanced (see above) to control a ground attacking enemy
      2. 3rd party model asset
      3. Has 10 different attack types (but some are mirrors of others), implemented in Animator
      4. Has some multi-animation states (rage has the monster walk back a few steps, rage, and then attack)
    4. New Enemy Asset created:  MonsterCrabFire
      1. First implementation of GroundDistanceAdvanced
      2. Has all the capabilities of MonsterCrabBasic
      3. Adds distance attack (tosses fireballs at player)
      4. Adds an additional move tactic where it retreats to a place for distance attack when the player is too far to allow for melee, but too close to allow enough distance attacks, but charges into Melee when player is close enough for Melee
      5. Also has skin which turns to fire on seeing the player (using 3rd party effect asset)
    5. New Enemy Asset Variant created:  MonsterCrabFireDelayedMorth
      1. Based on the MonsterCrabFire prefab
      2. Appears to be a regular MonsterCrabBasic, but turns on it's fire mode and ranged attacks after it's first rage (for a dramatic scene)
    6. New Enemy Asset created:  FlyingBug3
      1. Another implementation of GroundAttackAdvanced
      2. 3rd party model asset
      3. My version of the FlyingShooterEnemy
      4. However, tactics are a bit different, when gets close enough to player, starts circling the player, however, will randomly jump in with an attack and flee back
    7. New Enemy Asset created:  DreadfulBeetle
      1. Another implementation of GroundAttackAdvanced
      2. 3rd party model asset
      3. My version of the Boss prefab (it serves as the boss monster for the level)
      4. However, tactics are a bit different, has melee attack, but also has a jump attack when it's raging (rage happens every two hits), will take a huge leap and land on the player (or players last location), and causing an earthquake as well
      5. Has a special movement behavior in the animator where it will relocate it's distance from the player based on which attack it will use so that the attack always hits (i.e. closer for a claw attack, farther away for a tail strike, etc.)
      6. Body is invulnerable everywhere except the head/skull
      7. Implements similar to quick with updates to the UI
    8. New Feature:  InDestructible parts of an enemy (or player)
      1. Added a new feature which allows for the creation of colliders that cover an enemy (or player) area and make it indestructible.  This is needed for the DreadfulBeetle boss monster (see below), most of whose body is indestructible (using colliders), with the only vulnerable part being it's head)
      2. Changes made to Damage.cs & Health.cs.  Added a feature to Damage.cs that detects if a hit collider is tagged as "InDestructible".  If it is, it calls a new method in Health.cs called 'NoDamage' which plays an effect if any are available, or does nothing if NULL (this approach provides minimal impact to the existing codebase).
  5. Environmental
    1. New Environment Asset created:  Storage Crate
      1. 3rd party model asset
      2. Added shatter effect using mesh tearing feature of blender
      3. Added health script
      4. Added random chance it can drop loot when it shatters script
      5. Added activate information
      6. Added highlighting when it can be activated
      7. Created 6 variants
    2. New Environment Asset:  Lockable door
      1. 3rd party model asset
      2. Ported the 3rd party door asset to work with our door/key system
      3. Created 2 variants
    3. New Environment Asset:  Elevator shaft variable
      1. Assembled variable high elevator using 3 party asset building blocks
      2. Ported 3rd party asset script to work with Input Package Manager and ActivateObject approach (vs. mouseclick)
      3. Buttons on platform allow sending platform/elevator up or down
      4. Buttons on the doors allow calling the elevator up or down
    4. New Environment Asset:  Data terminal with log file
      1. 3rd party asset
      2. Added area trigger which allows voice narrator to tell player there is a logfile nearby
      3. Outline asset (3rd party, but added blinking script) which then highlights the terminal to draw players attention
      4. ActivateObject interface:  when player activates, a specific log file message is played and additional actions can be triggered, at which point highlighting is stopped
    5. New Enemy/Environment asset:  Exploding BioPod with MonsterCrabBasic
      1. BioPod is 3rd party model asset
      2. Put an enemy monster inside which is inactive/frozen
      3. When a trigger area is hit, adds a shatter effect so that the glass of the pod shatters
      4. Activates the basic monster to rush out and attack the player
    6. New Enemy/Environmental asset:  Opening BioPod with MonsterCrabFire
      1. BioPod is 3rd party model asset
      2. Put an enemy monster inside which is inactive/frozen
      3. When a trigger area is hit, trigger 3rd party script to open the pod doors
      4. Activates the fire monster to rush out and attack the player
    7. New Environmental asset:  Fire square
      1. Uses 3rd party asset for particle affect
      2. Applied as a plane (floor)
      3. Applied damage on entry to staying
    8. New Environmental asset:  Exploding Barrel
      1. 3rd party model asset
      2. Added 3rd party explosion effect
      3. Added shatter effect using mesh tearing feature of blender
      4. Added explosion script to fling fragments outward
      5. Uses radial damage script to cause damage to all enemy team ids in a settable radius
      6. Added health script
      7. Created 6 variants
    9. New environmental asset:  Food_Box and Food_Pot
      1. 3rd party model asset
      2. Added a highlight when player looking at the item instructing them to "Eat food"
      3. Makes eating sound when used
      4. Restores 1 point of health when used
      5. Created 2 variants of Food_Box
      6. Created 6 variants of Food_Pot
  6. Pickups
    1. New weapon pickup asset created:  ShotGunPickup
      1. Uses the shotgun mesh
      2. Created a WeaponPickupEffect which plays 3rd party asset sound on pickup
        1. Uses the GunPickup script to enable the shotgun weapon for the player
  7. Scenes
    1. New Scene Asset created:  MainMenu
      1. 3rd party scene asset (modified)
      2. Entire opening game intro animation to set the game story
      3. Provides overview of game controls (but not a full training mode)
    2. New Scene Asset created:  Station Scene (Scene 1000)
      1. 3rd party scene asset
      2. The main level for this game
        1. Contains alpha hangar
        2. Three levels inside the station
          1. Biolab
          2. Barracks
          3. Upper labs
        3. Supply depot
        4. Beta hangar
      3. Ported it to work with the existing system
      4. Added all the locked doors, "key" unlock areas, enemies, narration, etc.
    3. New Scene Asset created:  EndCredits
      1. 3rd party scene asset (modified)
      2. Shows the ending scene for the game
      3. Shows the credits for the game
      4. Returns back to main menu after completion
  8. Effects
    1. New effect script: Camera shake
      1. Copies from the 2D player project and enhanced
      2. Provides camera shake
      3. Can be configured to follow the player during the shake and return to relative position afterwards
      4. Can be configured to stop the player during the shake
    2. New effect script:  FadeToBlack
      1. Creates a fade in from black and a fade out to black effect using a UI image with variable transparency
      2. Also added an AudioMixer to allow for fade-in and fade-out of sound (used for effects like blacking out or waking up).
    3. New animation events manager script: 
      1. Triggered by animation events
      2. Allowed for adding SFX to most/all enemy animations as animation events which trigger gameobjects with audio and other scripts, as needed
  9. Utilities
    1. New utility script:  TriggerUnityEvent
      1. Provides a collider trigger handle and a unity even object to allow for simple editor based addition of unity events based on entering a collider area (without having to create a script each time); used in lots of places to trigger events when a player enters an area
      2. Gizmos color-codes the area with transparent blue for easy viewing and manipulation
      3. Has a trigger only once feature to prevent repeated invocation
      4. Can be configured to only trigger off of a specific gameobject Tag (for example:  only when a player enters the collision trigger).
    2. New utility script:  SimpleTimeline
      1. When Unity timeline is overkill, adds a very simple way to stack up a series of individual objects, commands, and go through them sequentially, with the option of adding wait times in between
      2. Avoids having to create event triggers files every time
      3. Useful for small little sequences where you don't need the flexibility and added complexity of the timeline feature
      4. Also supports a standard ISimpleActivation interface which allows for standard activation/deactivation of any object which implements the interface
    3. New utility script:  RadialDamage
      1. Grabs all colliders in a spherical radius (settable)
      2. Applies fixed damage amount (settable) to all of those colliders whose gameobject have health which is in the target team
      3. Can be applied to multiple target teams (this way, enemy and players can be damaged by explosion)
      4. Used with exploding barrel environment object
    4. New utility script:  SensorManager
      1. Encapsulated an enhanced version of the original code provided for player detection into a component which can be added anywhere (basically the "eyesight" of the enemy)
      2. Allows for setting field of vision (how wide an enemy can see), distance (how far)
      3. Provide the ability to adjust which layers will be used for detection
      4. Algorithm shoots out a distance limited ray looking for a collider and then checks if its within the field of vision
      5. Provides debug gizmo ability to see the field width and distance
      6. Can be placed on any gameobject and automatically give it sensing, or be placed on a gameobject and then assigned another gameobject to use for sensing
      7. Has a polling function (adapted from the original code provided) where enemy code can check if it sees the target
    5. New utility scripts:  RotationManager & SmartRotationManager
      1. Encapsulates all the code necessary to control 1 axis of rotation on a game object
        1. Can define a max rotation speed to ensure that the object never rotates faster than that
        2. Can define rotation area (ex: +/- 45 degrees of center) to ensure that it never rotates beyond that
        3. RotationManager can handle simple instructions:  rotate clockwise, rotate counterclockwise, rotate X degrees
        4. SmartRotationManager inherits from RotationManager and can handle more advanced instructions:  sweep back and forth, rotate to track a target as the target moves around
      2. Works based on local axis rotation and degrees regardless of the orientation of the gameobject in worldspace (i.e. gameobject can be inside another gameobject that is rotated in worldspace and still work when being given X, Y, Z coordinates and angles relative to the gameobject, not the overall rotation)
      3. Is often put on the same game object as the SensorManager from above to provide an enemy with an "eye" which can sweep back and forth looking for the player and/or lock onto a player regardless of where the player goes during combat / pursuit

Leave a comment

Log in with itch.io to leave a comment.