In the past week I was able to implement these features:
Enemy Fading
Enemies now fade in when they spawn to help them transition into the scene better. I also had to move the spawn point backwards slightly to give the player more of a chance to realise where the enemies are spawning from.

Hurt Mode
I implemented a ‘hurt mode’ system, which makes the player flash rapidly when they lose a life upon contact with enemies and gives them invincibility frames. It also stops their movement for a brief duration during this mode. The mode’s duration lasts around a second.

Ikarus Mugshot
I was able to include the character mugshot with visual feedback relative to damage taken.

The portrait shakes and changes depending on how much damage the player has taken.
Sprites:

Code:
if (PlayerDamageAndDeath.playerLives == 2)
{
myImageComponent.sprite = TwoLivesMug;
anim.SetInteger("Lives",2);
}
if (PlayerDamageAndDeath.playerLives == 1)
{
myImageComponent.sprite = LastLifeMug;
anim.SetInteger("Lives",1);
}
if (PlayerDamageAndDeath.playerLives == 0)
{
myImageComponent.sprite = LastLifeMug;
anim.SetInteger("Lives",0);
}
Vignette and Chromatic Aberration
I was able to incorporate this into the game and merge it with my ‘PlayerDamageAndDeath’ script, the script that manages the player’s lives.
(Chromatic aberration effect, before taking damage and after taking critical damage)
The more damage the player takes, the more chromatic aberration is added, making it look more distorted. I experimented with camera animation alongside this as I thought it would be a good mix, but it turns out it was a bit disruptive in terms of control and I had some issues due to the use of multiple cameras.
Key code:
Component dofs = GameObject.Find("Main Camera").GetComponent("VignetteAndChromaticAberration");
vin = dofs.GetType().GetField("chromaticAberration");
vin.SetValue( dofs, hitDistort);
Chain Bonus
I set up a primitive enemy chaining bonus system that increases the duration of the multiplier as well as the value depending on how many enemies the player has destroyed before a certain time limit. This code can be improved upon in the future as it only checks once how many enemies have been destroyed and then adds that to the remaining time.

I was also able to use the animator to set up a system that hides the multiplier when it has a value of 1 (inactive) and fades it in when the multiplier activates (anything > 1). The fade out animation can be cancelled by starting another chain.
Stage System (early stages)
I laid the foundations for a stage system that I will be making more use of as we form plans for how the stages will work. We are currently aiming for something similar to Tetris, so the stages will get harder the further the player progresses, and we aim to let the player return to later stages once they’ve been completed or gotten to. Currently the stage progression is determined by the player’s score at intervals of 8000.
Code:
public static int currentStage = 0;
public int Stage;
public static bool stage1 = false;
public static bool stage2 = false;
public static bool stage3 = false;
public static bool stage4 = false;
public static bool stage5 = false;
void Start ()
{
stage1 = true;
}
void Update ()
{
Stage = currentStage;
if ((ScoreManager.score > 0 && ScoreManager.score < 7999) || stage1 == true) { Debug.Log ("STAGE 1 ACTIVE"); currentStage = 1; } if ((ScoreManager.score > 8000 && ScoreManager.score < 15999) || stage2 == true ) { Debug.Log ("STAGE 2 ACTIVE"); currentStage = 2; stage1 = false; } if ((ScoreManager.score > 16000 && ScoreManager.score < 23999)|| stage3 == true) { Debug.Log ("STAGE 3 ACTIVE"); currentStage = 3; stage2 = false; } if ((ScoreManager.score > 24000 && ScoreManager.score < 31999)|| stage4 == true) { Debug.Log ("STAGE 4 ACTIVE"); currentStage = 4; stage3 = false; } if ((ScoreManager.score > 32000) || stage5 == true)
{
Debug.Log ("STAGE 5 ACTIVE");
currentStage = 5;
stage4 = false;
}
}