Saturday 30.7 | Hostile Area In Progress

Platformer Prototype

Throwing some gameplay elements and buildings in to see how they would work with eachother.


Hostile Area In Progress

I now consider dropping the final challenge with the rest of the sections, because I think one well made "hostile area" or section would show the potential of the game way better. In playtesting, it would mean less excuses to tell myself about not having enough time.

HostileAreaTopPersp

Day's Work

  • Throwing some elements
    • Enemies
    • Alarms
    • Objectives
  • Adding hopefully enough buildings so that the player doesn't need to run anywhere
    • Probably will be adding trees that have branches as "platforms"
  • Thinking about how many objectives should there be, what they'd be and in what order if any

Friday 29.7 | Rearranging Sections & Rethinking Scale

Platformer Prototype

Blocking out more of the level, testing the blockout and rethinking scale.


Rearranging sections

I'm rethinking the order of sections and how they would play out. I started to create the first section where the player actually should be thinking and the scale is already getting out of hand. This section is supposed to be the 4th out of 7 and I'm really running out of time (trying to get this playtestable before 22.8 when uni starts back up), keeping in mind that I have to still do some gameplay programming (Gold gathering, save points, simple shop UI, hints, objective markers).

I'm thinking about making the 4th level more non-linear with ~2-3 objectives in the same space and making the 5th a final challenge where you can test out the skills you've learned (could be timed and scored or just a little more challenging puzzle).

LevelBlockout4thSecSS

Trying out the blockout in Unity

Some thougths after testing:

  • Bug where you can parachute up an incline
  • Sliding feels weird (starts sliding to a wrong direction or that's how it feels like)
  • Jumping feels weightless (Maybe lack of landing effects or because of too much air control or because downwards velocity affects jumping too little)
  • Can step too high

Day's Work

  • Trying out the blockout in Unity
    • Creating a TODO to get actual testable gameplay
  • More blocking out

Thursday 28.7 | Continuing Level Design

Platformer Prototype

Blocking out the beginning of the level, seeing the possible scale of things.


LevelBlockOut LevelDesignAbstract2

Day's Work

  • Building on the level design figure
  • Blocking out the first 3 sections

Sunday 24.7 | Starting Level Design

Platformer Prototype

Starting out the level design progress by mapping level elements and working on a flow figure.


Level Elements

First I tried plotting down every game element I have on paper, so things like:

  • Jumping
  • Controlled jump
  • Double jump
  • Running
  • Thin platform
  • Moving platform
  • Switch
  • Exploring
  • Alarm
  • Controlled double jump
  • Parachuting to climbing
  • Jump, attack, jump
  • etc...

Some of these make no sense and some overlap with others, but it helped a lot when I was figuring out the flow because I could see what I was missing and what I can combine for later challenges. Also it cleared my mind a lot because this is a mess even on paper.

Very in progress flow figure:

LevelDesignAbstract

Day's Work

  • Mapping out all the mechanics and level elements
  • Figuring out the flow of the map

Saturday 23.7 | Combat Balancing

Platformer Prototype

Finishing up work on the main character animations, for now at least.


Combat Balancing & Minor Fixing

My spamming attack X/▢ did way too much damage so to balance this I created new attack types:
1. Basic: X/▢ "Primary"
2. Strong: Y/△ "Secondary" & Air X/▢
3. Stronger + Stun: Air Y/△
4. Critical Strike (damage 5x+)

I also changed the secondary attack to a thrust stab because the previous felt really clumsy. I might slow movement during this attack because it's pretty fast and high damage, but that's in the future.

StabGizmos

Day's Work

  • Combat
    • 4 damage stages
      1. Basic
      2. Strong
      3. Strong + Stun
      4. Critical Strike (damage 5x+)
    • Different secondary attack
    • Health bar working
      • 50hp marker (not scripted have to add the markers by hand because time)
    • Awareness meter working when inspecting
  • Ledge Jump
    • Fixed kinda
    • Still ground check bug when landing but I have to move on

Friday 22.7 | Combat Animations & Ledge Jumping

Platformer Prototype

Trying to get the animations to a point where I can move onto the level design finally.


Combat Animations

Adding an air attack for the primary attack button (X/▢). Making attacking on ground look less like an activity on ice with an avatar mask. Now the ground attacks are way too powerful, so I'll have to come up with a solution for that one and finally move onto the level design.

CombatAnimationsSS

Ledge Jumping

Adding a ledge jump because it looks pretty rough without it. It isn't in the video because I essentially broke everything in the process and now it looks worse. I might have to ditch the idea altogether, because I probably should be focusing on something else.

LedgeJumpBlender

Day's Work

  • Fixed attacking
    • Doesn't slide around while attacking anymore, only looks goofy now, which is progress
    • New air attack
  • Fixed ledge jumping (couldn't get up before)
  • Animations
    • Ledge jump animation (ATM broken , landing and everything around it breaks)
    • Separated air attacks to new layer to exclude them from avatar mask (which is used for ground attacks)

Thursday 21.7 | Even More Animations & Testing Combat

Platformer Prototype

Finishing up the "required" animations and testing what combat style I wanna go with. I've missed some days due to catching a minor cold and some travelling, but should be able to start working more consistently from now on.


Testing combat

I'm continuing work on the animations and almost done with the ones I really need. Starting to test different animations for the combat, I was trying out a combat style similar to what's in the Dark Souls games. This style is slow, calculated and movement is almost fully root motion based, which could be easier to balance and make the players think twice about facing the guards head on. I tried it and I can't get it to go well at all with platforming, so I will probably scrap this idea. Next I will try finish up the main character animations.

CombatTesting

Day's Work

  • Combat
    • New Air attack
      • Prevent parachute from opening
    • Testing if root motion or free movement when attacking is better
    • New secondary attack
  • "New" Climbing animations
    • Ledge grabbing
    • Jumping/Leaping
  • Fixing non existent step sounds

Tuesday 19.7 | More Main Character Animations

Platformer Prototype

Creating the animations that I couldn't just yoink and twist from Mixamo.


Adding IK to the rig from Mixamo

The character's rig is from Mixamo's auto rigger and it's of course just a barebones forward kinematics rig, making animating extremely time consuming. So to save some time in animating I added inverse kinematics to the arms and legs.

MainCharacterIKBlender

Copy/Pasting flipped poses with a Mixamo rig

I encountered some problems with pasting the flipped poses (only animating other hand then copy pasting a flipped pose tot the other side). Pasting flipped poses to the IK target bones worked well but any bones that had the Mixamo naming scheme didn't (literally nothing happened). I thought about making a driver for this (slider from open palm to closed fist) but I don't have enough animations to justify the time that would be spent on that, maybe later though (haven't done it before so it would take a little extra time).

All this, just means that the arm is easy to animate but when making a fist I have to pose every single finger bone (also I can copy it now that I've done it once), which isn't bad enough to start messing with the rig, possibly breaking it in the process. I'm pretty cautious with the rig because it breaks easily for the purpose of importing animations from Mixamo.

MixamoRig

For baking the constrained (IK, copy rotation etc.) animations I used the same method that I've used before explained in this post.


Day's Work

  • Blender
    • IK version of the rig from mixamo
      • Did it twice because I accidentally recalculated roll on the bones halfway into animating
    • Animated using the IK Rig then baked to baked FK
      • Parachuting idle animation
      • Parachuting open animation
      • Climbing slipping animation

Friday 15.7 | Starting to Swap the Character in Unity

Platformer Prototype

Importing the new character into Unity and getting most of the necessary animations for the new model.


Day's Work

  • Character to Unity
    • Animations from Mixamo
    • Tweaking the animator controller for the animations
    • Copy the old character and replace with new (Model, Weapon, Animations)

Thursday 14.7 | New Character Model

Platformer Prototype

Creating a character model and weapon for the main character.


Character Model

NewCharacterModelBlender

Weapon

NewCharacterWeapon

Day's Work

  • Weapon
  • Character Model (Modified from the enemy model)

Tuesday 12.7 & Wednesday 13.7 | Story

Platformer Prototype

I now have whipped up some story, which I feel like took way longer than it should've.


Coming up with the story

Didn't feel like posting tuesday's progress on it's own, because I was figuring out how to come up with ideas, learning and was distracted by music the whole time. I had to really concentrate with zero distractions to come up with the simplest of ideas, but eventually I got something that should be just enough. I thought I'd write some bigger story that I would use a part of for the prototype mission, but that would be a waste of time and this prototype is not to test if the story is engaging. So I just wrote short character profiles and a mission that I can easily build upon to use the mechanics I have.


Character backstories

Nick
An over qualified mall security guard who took an extra job from his boss at the time Eddie Callous, thinking it would be an opportunity to further his career. Unknowingly he had taken part in a large gang's gun trade that was orchestrated by Eddie. Nick had been assigned to watch their back and thought it was way too shady, but kept at it just to keep his job at the mall. Eventually the trade ended in a jogger being murdered by the paranoid Eddie, for seeing the operation take place. After hearing the gunshots from Eddie's gun he ran towards them, finding an empty parking lot with a deceased jogger. He felt guilty for having been part of it but more angry towards Eddie and made it his mission to stop this from happening again. First he would have to look into the gang's operations further and for this he would need help.

Chip
Chip went to the same security guard training as Nick did but dropped out because he had an issue with the authority of the instructors, thinking they hadn't seen any real action in their life and therefore unqualified to boss him around. So he went to the military and became a sniper. He got real good at it but his attitude kept him from getting any further after graduating. Now lost, left only with his sniper skills and sense of humor he was more than ready to do anything that gave him a sense of purpose. That purpose was found when his old friend hit him up and asked for help with a gang he was trying to stop.

Eddie Callous
Bad childhood left him very paranoid. Got into gang activity by being recruited as security for black market trades. He took over the security firm that now covers his equipment as legal and that funds his luxurious lifestyle.

Mission

Chip has been gathering information on Eddie by stalking his vacation home in the mountains. He has seen a meeting take place that Eddie and his partners had participated. They have left the transcript of this meeting on the table. Nick is on his way to the residence. His mission is to steal these documents containing details about Eddie's plans that he hopefully can use to stop them and map out the scale of his operations.


Next

Next up is creating the main character's appearence. This probably just means heavily modifying the current enemy model, making it look like Nick, clearly a former security guard. Maybe a bulletproof vest and a new weapon might do it.


Monday 11.7 | Brainstorming Ideas for a Story

Platformer Prototype

I'm starting the week off by researching narrative design and brainstorming ideas for a story.


In the quest for a story

To start designing a level, I think I'm going to need a story for the character that I can use as a guide for many design decisions. I started the day with research into narrative design, then played Sly 2 Band of Thieves to see what kind of flow they had for the starting sequence. It gave me some ideas about how I should introduce the mechanics and how the pacing should be. Though it may have made brainstorming ideas for characters a bit trickier because a lot of ideas "I came up" with, I later realized came straight from Sly.

I came up with some characters I think could be interesting and fitting for the mechanics. I'll write a small plot for them tomorrow. Then take a small part of this plot to use for the mission later. Mainly I'm creating the story so I can have the elements of the game belong to a theme, which should give inspiration and guidance on many decisions.


Day's Work

  • Narrative design research
  • Research into a starting sequence of a similar game
  • Brainstorming story ideas
    • Characters
    • Locations (For the mission)

Weekend 8-10.7 | What Next? #2

Platformer Prototype

Having a hard time trying to figure out if I have what I need to start designing a simple level.


Research, Level Design & Research into Level Design

I've been having trouble figuring out the next steps. I'm not sure if I have enough complexity for the platforming or enough stealth mechanics to make it interesting. So I've been doing research, reading about level design, gathering my thoughts and trying to design a simple tutorial area with little success. Despite this I think I have enough to create a tutorial area and/or a small mission, I just need to take my time designing it and not rush into Unity.


Sunday's Rushed Level Design Attempt

This is a tutorial area I tried creating today but after realising I would have to change literally everything, I gave up and started doing some research into the level design process. Every part of it is unfinished in every single way possible, but I thought I'd show it anyway because it is part of the journey.

TutorialAreaDesign

This is my first time designing this kind of level so I think the best thing to do right now would be spending the next week researching, designing, blocking out and playtesting, basically utilizing the mechanics I already have to create a small mission. After this I will hopefully have a better idea on how to move forward.

TutorialAreaUnityIso

Work Done

  • Research
  • Level Design
  • Launch Platform

Thursday 7.7 | Parachuting

Platformer Prototype

Being hesitant about implementing parachuting but ending up very happy with the result.


Hesitant start

Trying out parachuting which at the beginning felt weird with no effects and just the gravity adjusted. It essentially did what a parachute should and that is to slow down falling and give a bit of control, so I was a bit hesitant on moving forward after it feeling a bit out of place. I thought I'd give it a good effort though, because it had been on the todo list for some time now.

ParachutingSitting

Finding confidence in the idea

After smoothing out the rotation and sudden movements it all of a sudden started feeling like parachuting even with the character basically in a sitting pose. With some additional tweaking I started finding new routes through the level and found myself fiddling with it a little too much which of course gave me a lot of confidence in the idea. This made adding the effects very interesting because I wanted to see how satisfying I could make it.

ParachutingFinal

Final thoughts

In the end I'm very happy with the feel and possibilities this opens up in level design.


Day's Work

  • Parachute
  • Character
    • Parachuting open animation
    • Parachuting idle
  • Parachuting input
    • Left trigger
  • Save System
    • PersistenObject id to the name not instance id

Wednesday 6.7 | Double Jump

Platformer Prototype

Now that I've gotten a better picture of what everything is going to look like, I'm going to be adding some actual platforming. Today was mostly about adding double jumping, some effects and platforms.


Double Jump

I've decided to test how the double jump would feel. Now that I have it and after adding a little spice to it, it feels great. I might make it so that you get extra height if you hold but that would be the only tweaking I'd do anymore.


Day's Work

  • Platforming
    • MovingPlatformAnimated
      • Move and rotate the kinematic controller when on platform that is animated with Animation component
    • Double jump
    • Leap (Climbing jump) particle and sound effects
    • Ledge grabbing fixed (crazy position snapping)
  • Combat
    • Special attack when in air (Currently just the combo attack for testing)
  • Level
    • Adding some platforms to try the jumping and moving platform

Tuesday 5.7 | Save System

Platformer Prototype

Implementing a simple saving system, that handles the state of objectives and killed enemies.


Save System

The objective manager loads state at Start and invokes the OnCompletion event if an objective has been completed before. This causes all the effects to play but fixing that is a job for another day. This script also gives the last item received from an objective back to the player at start.

Quick Save Unity Package

I decided to go with a free add-on for the saving systems backbone to save some time. I grabbed the one that looked the easiest to implement. Documentation was good and it worked like a dictionary which made it feel familiar.

Debugging

I also added a handy helper text box to the Game Manager.

GameManagerSaveSystemTools

Day's Work

  • Interactable objective
    • Interact button fixed gets reset when entering trigger
  • Tip manager fixed
    • Dictionary for timers of tip texts
  • Fixed floating enemy with enabling heightmesh when baking nav mesh
  • Fixed enemy movement bug (Speed not updating correctly)
  • Save System | Using Quick Save by Clayton Industries
    • Completed Objectives
      • Loads state at Start and calls Complete() method if the objective has been completed before. This causes some problems with all the effects also playing but that's a job for another day.
      • At start gives the player an object that was gotten from the last "Give Item" type objective.
    • class PersistentObject
      • class PersistentObjectState
        • bool destroyed
      • Loads state at start and disables the object if it has been destroyed
      • Currently only holds if the object has been destroyed but other things can be easily added
      • Can be used on pretty much anything. Only the OnDestroyed method has to be called.
    • Helper text in GameManager
    • "Reset Save" button on GameManager

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