子非鱼 Untitled Fish Game [Programming Section]
In the future where fish monsters have conquered the land, the player controls a deranged old fisherman/sushi chef, and slash his way through waves of land-walking fish monsters with his strange weapons/cookwares.
Keywords: 3D, Action, Hack-And-Slash, Cooking, Role-Playing
My Work as Programmer
Player Character Movement & Combat
Player Animation State Machine
Enemy AI Scripting
Damage System
Cooking/Looting Mechanics
Blueprint: Adjusting Player Posture
A blueprint that gradually rotates the player's lower-body in accordance to the change of posture and facing direction of the upper-body.
Blueprint: Throwing & Altering Throwing Weapons
Blueprint: Auto Attack & Crouch-sliding
On/Off boolean values that are referenced by the animation blueprint in order to drive the animation state machine
Enemy AI Scripting
Programmed the behavior patterns of a melee bruiser enemy, ranged shooter enemy, and 3-phased optional mini-boss.
Landwalker AI
A simple enemy AI that chases the player based on sight data using Unreal Engine's built in perception. When the possessed pawn is in range from the player, it launches an attack by calling BP_RandomAttack_Walker, choosing an attack randomly from the 2 movements.
more about Landwalker: https://sites.google.com/view/zifeiyu/enemies/landwalker?authuser=0#h.mfel7fwltq83
BP_RandomAttack_Walker: selects and sets either Kicking or Slapping status to the Landwalker character
Spitter AI
A simple enemy AI that shoots at the player based on sight data using Unreal Engine's built in perception. When the possessed pawn spots the player, it launches a ranged attack by calling Spitter_Attack, which shoots a projectile at the player and alternates to a burst-fire pattern every 4th attack.
more about spitter: https://sites.google.com/view/zifeiyu/enemies/spitter?authuser=0
Spitter_Attack: checks the attack counter, spawns a projectile and sets the counter. Every 4th attack will be a special "heavy attack" that burst-fires multiple projectiles.
Fatty AI
An optional mini-boss that begins with following the player around. Once the player hits it and brings the possessed pawn's health down to a certain threshold, the pawn's aggressive phase is activated and will transform into a strong hostile force against the player.
It uses a similar logic to the melee enemy but now calls BP_RandomAttack_Fatty to select a random attack out of the 3 designed attack patterns: charge attack, jump attack, and spin attack.
Once the player has damaged the pawn enough, it reaches the final state. In the final state the enemy will be using the same logic and movement set, but now will be transformed into a more dangerous enemy, with extended range and damage on all the previous attacks.
detailed enemy demo: https://sites.google.com/view/zifeiyu/enemies/fatty?authuser=0
BP_RandomAttack_Fatty: similar logic to the landwalker's random attack function
Character Animation State Machine
Implemented, tested, and troubleshoot the first person movement and combat mechanic with Unreal Engine Blueprint.
Animation Blueprint: Player Upperbody
data from the player character is referenced in the event graph of the upperbody animation blueprint
Animation Blueprint: Enemies
Landwalker (melee enemy) animation blueprint (below)
Spitter (ranged enemy) animation blueprint
Fatty (3 phase boss) animation blueprint (below)
Damage System
Developed different damage types that can be inflicted or suffered by players, enemies, and neutral objects. Different characters had different pipelines that processed the damage done to them.
Blueprint Interface: Dealing Damage
How damage is applied from AnimationSequence -> BP_Player -> BP_Weapon
Sphere trace that applies damage to any damagable actors that enters the hitbox and spawn VFX at the hit location
using Received_NotifyTick to call a damage trace every tick
Blueprint Interface: Taking Damage
damage is taken through blueprint interface
Looting/Cooking Mechanics
The nature of the damage inflicted on the enemy influences the variety of items they release upon defeat.
Recipe
when an enemy is defeated, it will drop items based on the spices, temperature, and moisture of the target. The values of these variables will be passed through a Blueprint Interface to the ItemDrop Actor.
ItemDrop Actor processes the input
Spices & Temperature
when affected by spices, the value of spices will be stored as pairs in SpiceRegister_Value and SpiceRegister_Name