Don't Tell Mom
Don't Tell Mom is a fast-paced retro FPS bullet-hell game where the player must survive chaotic arenas filled with aggressive enemies, dodge dense projectile patterns, and master a flexible weapon system. Inspired by classic shooters but built with modern workflows, the game focuses on tight movement, readable attacks, and dynamic difficulty scaling. This project helped me explore gameplay programming, modular system design, and reactive visual effects in Unity.
Retro Shader & Visual Effects
The visual identity of Don't Tell Mom is built around a custom retro FPS shader inspired by classic PS1/early-2000s shooters. I implemented low-resolution rendering, subtle dithering, color banding, and barrel distortion to emulate old hardware. Alongside this, the game uses screen-space hit flashes, chromatic bursts on damage, and a reactive vignette that intensifies during high danger. These effects enhance the chaos of bullet-hell gameplay while maintaining a clean, readable visual style.​



Character Movement & Weapon System
Movement is designed around speed and control—tight acceleration, air-strafe steering, and responsive dashing allow players to dance through projectile patterns. The weapon system is fully modular, supporting swappable guns with their own fire rates, reload timings, and damage curves. Each weapon also has unique camera feedback such as screen kick, FOV changes, and stylized muzzle flashes, making every gun feel distinct and satisfying. The game also has a melee system in which meleeing enemies normally causes knockback but when enemies have less than 40% of health available , it instakills them. Most of the Combat system variables are taken from Scriptable Objects. The revolver has a piercing shot , which means it goes through enemies. This means the code for the revolver specifically was different in comparison to the other gun shooting mechanics. The dash mechanic in this game uses the direction of the input to dash. So, if A is pressed the player will dash left , D for right dash and so on. The dash uses a coroutine to work uses tweening for the change of FOV for the camera.
​


Melee Punch
Weapon ( Assault Rifle here) Ammo Display

Dash Mechanic
Enemy Behaviours & Weakpoints
​
​Enemies are built using a behaviour-driven structure where each type has a unique attack pattern and a set of weakpoints. Some enemies fire predictable spreads, while others barrage the player with spiral or tracking projectiles. Weakpoints add a layer of strategy—hitting them deals bonus damage, interrupts attacks, or triggers stagger animations. This encourages players to aim deliberately instead of spraying, adding depth to fast-paced encounters. Every Enemy has a fixed weakpoint , with a clear blinking visual. The blinking is done by adding a point light and then attaching a script to it which uses a coroutine to periodically change the intensity randomly.
​

Weakpoints ( Glowing point lights blinking periodically)

Weakpoints ( Glowing point lights blinking periodically)

Weakpoints ( Glowing point lights blinking periodically)
Dynamic Level Rules
-
Each level features its own dynamic rule set that changes how players approach the arena. One level might just have a survive till timer , another might have a periodically disappearing platforms, while another introduces protecting objectives .These modifiers keep gameplay fresh and force players to adapt their tactics. The rules are data-driven, allowing easy iteration and the ability to mix and match effects for future levels. I made an Objective Manager which uses enums to switch between level types.
​
Endless Mode & Events
-
The game includes an Endless Mode where difficulty scales dynamically based on score, survival time, and player performance. As the run progresses, enemies spawn faster, patterns become denser, and periodic Events trigger—such as Double damage, Infinite Ammo, Infinite Dash , slowed time, or Melee Only . These shifts create unpredictable, high-intensity runs that challenge players to stay adaptable and reward mastery. For this I made an Event Manager and used Unity Events when the score crossed certain thresholds for the dynamic difficulty. Also the events are there like Adrenaline Rush , Ammo Overload , Glass Cannon , etc which are there implemented in the Event manager with the help of enums and also is tied with other systems like gun System , Movement System , etc.
​

Survive till the timer

Survive till the timer + Stand on the correct Platform


Survive till the timer + Get X amount of kills
Survive till the timer + Protect the Castles


Melee Madness ( Revolver only and melee kills add more score)
Adrenaline Dash ( Infinite Dash but enemies are also faster)

Glass Cannon ( You and Enemies deal more damage to each other)
Modular Accessibility Settings
​
Accessibility was built into the project from the start through a modular settings system. Players can adjust Mouse sensitivity ,Crosshair, color grading presets, Audio, Display Resolutions. All options update in real-time using an event-based architecture, ensuring consistent behavior across UI, gameplay, and VFX. This makes the game approachable for a wide range of players without sacrificing its core intensity.
​
​





Gameplay:

