Naja Medjai
- junlachaktophat
- Jul 15, 2025
- 4 min read
Updated: Mar 29
Steam Link: Click Here
GameX: Click Here
Introduction
As part of my MSc Game Development program, I worked on Naja Medjai, a 3D platformer inspired by Souls-like combat and set in a mythical version of Ancient Egypt. Developed by our team at Jaster Studio.
On May 22, 2025, Naja Medjai had the opportunity to perform at "IMPACT! Indie Games 2025" in Bristol, UK. Click here for more information.
On September 17, 2025, Naja Medjai made it to the finals for the TIGA Best Student Game. Click here for more information.
Game Overview
Naja Medjai is a family-friendly Souls-lite 3D platformer set in a mythical Ancient Egypt. Play as Rosetta, a Medjai warrior blessed by Apophis and Anubis. Battling through corrupted temples and protecting humanity from divine destruction.
Team Members
Junlachak Juntasilp
James Sherlock
James Doran
James Crockett
Jacob Thompson
Jack Finch
My Role
Gameplay Programmer
Core Mechanic that I created
Player Controller
Originally, the Player Controller script was a simple, unsystematic design using basic logic. This made it prone to bugs and difficult to fix.
Upon realizing this, the script was changed to a Finite State Machine (FSM). This simplifies adding various systems to the player, such as grappling, and makes modifications easier because the different systems are separated into individual code snippets. This also facilitates easier debugging and team sharing. The combo/combat system, in particular, was a major problem to fix before the code was changed to FSM. The FSM system has many other uses. For example, when a player dies, Anubis will appear, which is triggered by the "PlayerDeadState" script.


Camera Systems
This project uses Cinemachine, a Unity tool, where the player's camera is split into two. The first camera, a third-person perspective camera called the Player Camera, tracks the player. This camera allows for adjustable FOV (Field of View) and uses a collider to prevent the camera from penetrating walls when the player is near them.
The second camera, called the Targetlock Camera, is used to lock onto targets when the player uses the middle mouse button. This makes it easier to lock onto and eliminate enemies when playing with a controller. However, there are limitations; enemies outside the player's range will not be locked onto. This camera can also be integrated into a grappling system. The Targetlock Camera also features a vignette effect when the player locks onto a target. Furthermore, switching between the player's and target cameras is smooth using the "DynamicDampingController" script, which increases the camera's damping.
Cinemachine was also used to decorate video game menu by changing the camera and adding horns to show atmospheric scenes in video games.
Grappling System
The Grappling system, or Grappling Hook, is designed to work with the player controller's script. It is a Finite State Machine (FSM) system, renamed FSMGrappling. This system works in conjunction with the Targetlock Camera and appears in the second phase of the game, where the player must use grappling to avoid damage from water.

This is not standard grappling aiming; it uses "Raycast" to detect targets. If the player is behind a wall, the system would not lock onto them. This system also integrates with Target Lock to lock onto enemies. Once a target is locked, visual indicators show the glide point. These indicators remain facing the player for clear visibility.
When the player presses Grappling, a visual connection displays a rope (LineRenderer), and the player is pulled. A "SmoothDamp" system ensures smooth movement. Upon reaching a certain point, the player will float for a short distance. The camera will lock onto the closest target, not the same target previously grasped. If a new player continues to grapple, they will fall until they reach the ground, at which point the Targetlock Camera will be deactivated, and the system will revert to the Player Camera.
This system also includes security features, or bug prevention. If a player grapples for too long, exceeding a set limit, a timeout will occur to stop the grappling. There is also a spam prevention system to prevent repeated button presses, and finally, a point cooldown. Once a player grapples to a certain point, that point's tag will be temporarily changed to "UnGrapplingPoint" to prevent players from grappling there again immediately.
Combo / Combat System
In the combat system, there are two main types of attacks: knife throwing and slashing enemies. Both systems work in combos. Starting with knife throwing, you have three knives. After throwing the last knife, the system starts a countdown to regenerate the remaining three knives. When an enemy is hit by a knife, it increases the hit combo value. As the combo increases, the system calculates power to grant two buffs: a Damage Buff that increases attack power by a percentage (+10%, +25%, +40%) per knife hit. Heal On Hit buff that restores health (+3, +5, +8 HP) per knife hit. This combo has a time limit, and when the time runs out, the combo resets.
All information is displayed via a real-time UI. It is recommended that players prioritize hitting targets with their knives to accumulate combos and receive buffs (attack power/health regeneration), before engaging in melee combat to maximize damage.
Input system / UI
This project utilizes an input system to support players who prefer to play with a mouse, keyboard, and controller. It also simplifies the writing of the Rebind system. Furthermore, it can incorporate new systems, such as controller vibration, when the player takes damage. On the UI side, it allows for adjustment of music and sound effects using Unity's AudioMixer tool for in-game audio adjustment.


Information about the game
Release Date: 19 June 2025
Published on: Steam (Free to Play)
Tags: Souls-lite, PVE, Ancient Mythology, 3D Platformer
Tools Used:
Unity 2022.3+
HacknPlan
Github
Github Desktop
Steam Link: Click Here
GameX: Click Here

Comments