Monday 4.7 | Destroyable Objective

Platformer Prototype

Creating a destroyable type of objective. Probably going to be used for a communication tower that can be destroyed making the enemy unable to call back up.


Destroyable Objective

Nothing too fancy. Had to refactor some of the critical strike marker code to work on the objective too.

DestroyableObjective

Day's Work

  • Objective
    • Refactoring
      • class Objective : MonoBehaviour
        • class InteractiveObjective : Objective
        • class DestroyablyObjective : Objective
      • Now has ObjectiveType (Not InteractionType)
      1. SimpleInteraction
      2. ItemGiveInteraction
      3. ItemAsConditionInteraction
      4. Destroyable
    • Destroyable Objective
      • IDamageable
      • Health
  • Critical strike marker
    • Refactoring
      • abstract class CriticalStrikeMarker : MonoBehaviour
        • class EnemyExecutionMarker : CriticalStrikeMarker
        • class ObjectiveCriticalStrikeMarker : CriticalStrikeMarker
    • bool lookAtPlayer
  • Minor bug fixes

Friday 1.7 | Interactable Objectives & Item Holding

Platformer Prototype

Adding interactivity for the objectives to enable a key pick up and a gate opening in the future.


Interactable Objective

Interaction types:

  • Give item
    • Gives the player an item when interacted with
  • Item as condition
    • Player has to be holding a certain item to interact
  • None
    • Can be interacted with but no item's are in the process (Just events)

First objective in inspector:

InteractableObjective

Day's Work

  • Objectives
    • Trigger colliders changed to boxes so you cant interract with them from below the floor
    • Interactable items can be given to player or be received from the player
    • ATM
      • Objective 1 gives a key when interracted with
        • Shows a tip when inside the trigger box "Press R1/RB to interract!"
      • Objective 2 needs a key to be interracted with
        • If can't be interracted with => show tip saying "You need a key to open the gate"
  • UI
    • TipManager singleton
      • Can show tips with a simple method that takes duration and a text
  • Player
    • Can hold a single item with left hand

Thursday 30.6 | New Wave Function Collapse Blocks

Platformer Prototype

Adding climbable blocks and fixing the issue where there would be a ledge in the middle of the wall.


Ledge Issue

I had an issue with climbing after I hastily threw in the WFC generated world. The walls started out with a ledge that the player would get stuck on every time and then had to "jump wiggle" out of it. You can see the problem in this video.

Essentially I just added wall thickness on the top to account for the bottom. Before those were just empty blocks.

Wall sliced with old blocks:

OldWFCSolid

With new blocks:

NewWFCSolid

Of course there were some troubles during the process.

WFCTrouble

But these were fixed with some intense connector and exclusion fiddling.

WFCTroublesOver

Post where I started using WFC for the first time


Climbable Blocks

Creating climbable tiles so I can make climbing part of the puzzle instead of just letting the player run away from everything. Below is what the blocks (another one is without the grass) look in the generated environment.

WFCClimbable

For the "finished" environment the placing of these will most likely be done by hand. I thought that this would make the connector assigning a waste of time but generating the world over and over with these gives so much inspiration for the level design that it was well worth it.

Climbable grass to wall block (there's one other kind that's just the wall):

ClimbableBlock

Day's Work

  • WFC
    • Fixed ledge on the middle of the walls
      • New blocks
        • Connectors
        • Exclusions
    • Climbable wall
      • Texture
      • Connectors
      • Exclusions

Wednesday 29.6 | Objective Manager

Platformer Prototype

Adding functionality to the objectives on the scene level.


Objective Manager

Creating an Objective Manager for easy management of the events I want to have happen for every objective completed.

ObjectiveManager

Right now the first objective is setting the alarm offline and the second one is setting it online. So they could represent the main electrical switches, that you're tampering for example.


Day's Work

  • Objective Manager
    • Objectives completed list
    • OnObjectiveCompleted event
    • OnAllObjectivesCompleted event
  • Alarm
    • Online/Offline modes (Hiding spotlight mesh and trigger messages)
  • SendTriggerMessages helper component
    • Has public OnTrigger____ as unity events which can be listened to in a parent script
  • AnimationHelper component
    • Pause and Resume the states of the Animation component on the object (I needed to do this with an event and there's no good methods in the component itself)

Tuesday 28.6 | Gizmos, Objectives & Alarms

Platformer Prototype

Improving gizmos and debugging, creating functionality for objectives and adding minor things in hopes of large impacts on gameplay.


More Gizmos

I added gizmos and labels pretty much everywhere to make it faster to place and debug enemies when creating the level.

EnemyGizmos&Labels

Objective

The really rough looking objective is the bare minimum that fills the requirements for the functionality I want (Interaction & Feedback). Currently right trigger (R1/RB) acts as the interaction button but we'll see what happens to the roll (on O/B button).

TestObjective

Alarm

During my research on Monday I saw a couple minor things that I think have the potential to bring a lot to the gameplay. This alarm was one of them. All of them:

  1. Spot light/Camera alarms
  2. Have only some walls climbable
  3. Double Jump
  4. Launching Platform
Alarm

Day's Work

  • Debugging labels and gizmos
  • Objective functionality
    • Interact button
    • Effects with unity events
  • Motion Sensor/Spot light alarm

Monday 27.6 | What Next?

Platformer Prototype

Fixing and tweaking minor things but mainly doing research and thinking about what to do next.

What Next?

I spent my day fixing bugs and tweaking things but I also thought about what platforming do I want in the prototype. I did some research into similar games and I got a couple of ideas but I'm not sure if I want to start implementing all of those before knowing what I want the main game loop to look like. So now that I have the combat and enemy stealth behaviour I will create the functionality for the objectives. Meaning the main game loop would be "playable" before I start adding more complex platforming mechanics.


Day's Work

  • Player
    • No slowing down when attacking
  • Camera
    • Changed camera FOV and tweaked the rig a little bit
    • Very slow recentering (I thought fast recentering might be frustrating for some)
  • Enemy
    • Hearing distance halved when can't see
    • Inspection gets reset when new sounds are heard
    • Awareness meter only shows at certain distance (5 atm)

Thursday 23.6 | Enemy Inspecting

Platformer Prototype

Adding to the inspection node on the behaviour tree to make the enemy look like it's actually inspecting.

Inspection

The inspection consists of 3 parts:

  1. Noticing the sound ("Huh?" animation and sound)
  2. Going to the sound's origin
  3. Inspecting around the sound's origin (Inspection animation)
SoundNoticed

Currently the lengths of these parts are hard coded to a single value but I will probably create a class which can get animation lengths from the animator override controller easily.


Day's Work

  • Enemy
    • Stopped enemy before going to the target location (for the "Huh?" animation)
    • Sound noticed sound ("Huh?", from freesound.org)
    • Sound noticed animation (Reacting, from Mixamo)
    • Inspecting animation (Looking around, from Mixamo)
    • Animator
      • Play these animations with Animator.CrossFade
      • Interrupt trigger added to animator to interrupt inspection animations when player is spotted (Hopefully will be useful in the future to interrupt any)
  • Enemy Behaviour Tree
    • Fixed issue where chasing didn't run at all
  • Polishing awareness indicator

Wednesday 22.6 | Awareness Meter & Footsteps

Platformer Prototype

Today I added footsteps and an awareness meter.


Step Sounds with Animation Events

EnemyStepAnimationEvent

Enemy Awareness Meter

Once I got the footstep sounds in, I noticed there was nothing to tell if an enemy can hear them or not. I thought an exclamation mark that fills up could be an fast and easy way to visualize this.

EnemyAwarenessIndicator

Day's Work

  • Simple step sounds from Larakaa at freesound.org
    • Assigned to the "stats" ScriptableObjects
  • Enemy awareness indicator
    • Visualizes how close the enemy is to hearing your sounds
    • Currently visible all the time but will be fixed to be hidden when nothing is heard
    • Still have to make it work with a better camera angle or by scaling down the enemy
    • Needs a small sound to add intensity
  • Fixing bugs

Tuesday 21.6 | Fixing Combat

Platformer Prototype

Not much to show today because I'm still fixing combat. I did get it to a point where I can control the difficulty pretty well and it doesn't have too many bugs. I will take the time to make it fun later, because right now I'm not sure what I should do to it and I have more important things to implement such as stealth.


Refactoring Combat Code

After getting frustrated for the fifteenth time I decided to move the whole combat code to the behaviour tree. Before I had the attacking in EnemyBehaviour being controlled from the behaviour tree with a boolean but this caused many headaches as I thought it might. After the refactor, everything got a lot easier to debug and work on.

EnemyBehaviourTree

Day's Work

  • Refactoring enemy combat code
    • Totally in the behaviour tree now

Monday 20.6 | Starting Work on Stealth & New Environment

Platformer Prototype

Today I started with creating an environment for testing the stealth mechanics which I will be adding this week. The better part of the day went implementing audible events and fixing combat.


Inaudible Audible Steps

Using UnityEvents to make enemies hear the player run. I don't know if invoking every enemy's OnAudibleEvent method is the best way of handling this, but for the prototype it works. At the moment the mechanic feels weird because I don't have the foot step sounds or enemy animations to go along with it yet.


Wave Function Collapse Environment

WFCEnvironment

I created a simple environment with a Wave Function Collapse unity implementation I had fiddled with a couple weeks back (marian42/wavefunctioncollapse). I had created the building blocks back then so I literally just had to press generate and move a couple blocks around to make it little more functional.

CoupleBuildingBlocksAndConnections

Day's Work

  • Wave function collapse environment
  • StealthEventSystem
    • UnityEvent OnAudibleEvent
    • On enemy
      • PlayerDetection listens to audibleevent and checks distance
      • Behaviour tree gets target from PlayerDetection
  • Fixing Executing
    • Also renamed to critical strike
  • Still trying to figure out the combat
    • Testing with many enemies