top of page
Search

Enter the world of Maniacs!

  • Writer: Adam House
    Adam House
  • 3 days ago
  • 11 min read

Type: public product.  

Genre: First person shooter and action-horror.

Engine: Unity.  

Key Roles: Animation, programming, lighting, and game design.

Released: 29th May 2026 Last updated: 3rd June 2026. 

Learned from: Make a horror survival game in Unity from Pepe Jepson on Udemy. Made by: Only myself (however borrowed some third-party assets and shared from the instructor).

  

After a few busy years of development hell, my next game: Maniacs (Adams version) is finally here!!

 

I was originally going to complete it back in 2023, but I had some difficulties polishing the game, but now I have enough Unity game engine and programming experience to finish it once and for all and release it to the public.


I started this course on Udemy since it had some important things to learn about like Melee combat, using the torch, saving items and weapons you have and loading the game, post processing, and etc. On the downside it is targeted as a “beginner-friendly course” which what I taught was mostly simplistic, but still good to learn. So, by the time I completed all the tutorials, the game was still buggy and unfair to play, so I fixed as many bugs as I could and polished the game. Am I satisfied with what I learned? Read below.


According to the game's description: On this unlucky night, you have been kidnapped and scheduled to be tortured to death soon by a psychotic group of Maniacs, you eventually escaped with your life before a knife touched you.


You find out you are on a deserted abandoned island filled with other Maniacs guarding the island.


With no contact to the outside world and no easy way to escape the island, you decided the only way to escape safely was to take matters in your own hands by finding and killing their leader: General Carcus, who is believed to be reasonable for multiple kidnappings, tortures and murders.


You hear that General Carcus does not like to be disturbed, and will shoot at anyone who disturbs him, so stock up and prepare for the fight.... of your life. Will you be able to survive the night of the Maniacs? or perish forever?


WHAT WENT WELL?:

  • Made certain trigger box one-shot that responds to Player collision to play one-shot sound once than destroy itself else it will play again in a certain amount of time once the Player reaches its trigger box again with only 2 public variables.

  • Made enemies open doors themselves by simply walking towards them.

  • Made 3 different melee weapons that have different cooldown timers and damage that the Player can experiment with when fighting enemies to see which weapon works for the Player.

  • I made a script where it determines how many enemies have spotted the Player and are currently attacking the Player. If the counter is greater than 0, the action music plays until its set to 0. To set it to 0, The Player must kill all the enemies that spotted the Player or lose their sight by running away from them. This mechanic generally works but does need to be refined and tested more in future. 

  • Made an “enemy flashlight” that aligns with the Players flashlight to light through enemies to be easily seen by the Player.

  • I made the enemies chase Player if they found him/her but give up and look around before going back to patrol when they lost sight of the Player.

  • I did the absolute best I could to polish the game on my own with barely any help.

  • I used Occlusion culling to really ease the framerates and only display what the Player sees, making it a smoother experience. 


WHAT I LEARNED:

  • For the first time I learned to use the Timeline editor to… -  Make the cutscene play and then turn it off at a certain time or just skip with a press of a button. - Animated a logo scene and then a cutscene with music, character animations with positions, and camera movement. - Toggle between 2 game objects of the Player breathing depending how much stamina he/she has left. --Save and Load Inventory with PlayerPrefs--

  • Save Players progress in terms with items in inventory collected like weapons, apples, batteries, keys, and ammo,

  • Current health, battery usage, and certain amount of ammo loaded into weapons, etc.

  • Bools for each if Health, battery, arrows is filled.

  • Bools to check if it's a new game or saved game. New game erases all of Player's data and begins with no saved inventory. If it's a saved game, it will load up Players Inventory data and begin where they left off.

  • For the first time: I have made an inventory screen showcasing all items, weapons, keys and ammo the Player has in their inventory, The Player can select items and equip weapons as long as they find and collect them first.

  • For the first time, I have made a mechanic that can work around with the Players Inventory with Player preferences such as. - Save game from options menu, load the saved game or start a new game which will erase the Players existing save date in main menu. -  Weapons, keys, flashlight and night vision collected so their pickups don't spawn in the scene unless the Player has not collected them. - Current light power, current health, current clips in ranged weapons. - Amount of Ammunition each for gun bullets, arrows and Flare gunrounds, Apples, batteries.

    - Which precise pickups have already been collected and will be destroyed the next time the Player loads the game. These precise pickups are batteries, bullets, arrows, flaregun rounds, and apples. -  These Player prefs use parameters for ints, floats and bools to store any pickups the Player has already collected. These numbers turn to 0 if the Player starts a new game. -  Gather all of the transform targets and assigns to the enemies so when they spawn, they know where to patrol. -  To track how many Apples, ammo clips, batteries, arrows, and flaregun rounds in the current saved scene. These numbers rest to their default values when Player starts a new game. -  Make sure Players lights, options menu and inventory menu are off when the Player starts the game - Stores and loads other misc data like Player hurt screen, stab sound, Player character and audio, etc to enemies.

  • For the first time. I have made an inventory menu where the Players weapons, keys and other pickups can be selected and used once he/she has collected them in the first place, rather than just using button inputs or scrolling the mouse to select them. The save script and Inventory work with each other to see which weapons and pickups the Player has. For e.g, if Player picks up the bat, the Inventory and save script communicate with each other that the Player now has this the bat and can select it to use it as a weapon. Though if the Player clicks on “new game”, they will lose the bat, keys, other weapons and pickups they collected in the game and start over. The Player can still refill health, power and ammo with apples, batteries, gun ammo and arrows respectively which will deplete 1 of the chosen pickup amounts from the inventory.

    --Enemies--

  • Made enemies patrol between 10 transform target positions around the map, these can be random, not round robin to add unpredictability in the game.

  • Made a stop distance value from which determines how far they stop before they reach their target.

  • Once they reach their target, they wait for a given amount of time and look around before going to their next target and repeating the process again, unless they detect the Player. If the Enemy's next target is the same as the one before, it adds +1 to go to its next target making sure it doesn't repeat going to the same in a row. If The enemy reaches its 10th target, it goes back to 1st target.

  • Made an avoidance Priority of the navmesh for each enemy that randomizes in between 2 values to prevent enemies from pushing into each other, especially while chasing the Player.

  • Used an AnimatorStateInfo to determine its base layer to perform certain actions when its animation state is called by code. For e.g, if the Bosses animation is tagged “chase” it chases after the Player and if its animation is tagged “shoot” it will stop, will look directly at the player and shoot him/her. If the Player runs away from Boss, the boss chases him/her repeating the process again.

  • For Enemy nav.acceleration: The greater the acceleration, the quicker the enemy will stop. The lower the acceleration, the slower it will stop like sliding on ice.

  • Allows to fire rays from its position from the nav mesh to see if the Player is nearby no matter where the enemy is facing, if its ray hits the Player, it will chase and then attack the Player when close, if it loses sight of the Player, he will look around before going back to patrolling the island.

  • Animated blend shapes on some enemy faces giving them different facial expression such as run towards the Player and getting attacked by the Player. --Other--

  • Added an alternative way to rotate a game object (lighthouse light) in world coordinates (LHObject.transform.Rotate(0.0f, Speed, 0.0f, Space.World); - Which reminds me that World space makes it move with the world, which with local space would move differently.

  • Learned to change a rigidbodys mass from code.

  • Enumerators can be good to give code a second to check for something before being destroyed so it will not cause errors such as... -  Checking which pickups have already been collected, if it is collected by Player than it will destroy the game object the next time he/she loads the game. - Making sure the Bosses bullets have access to The Player script so it will flash the UI screen if Player is hit by the bullet. - They assign the spawned enemies targets so they can patrol them unless they spot the Player. - Randomizes the Enemies check time so when they reach their targets, some will look around longer or shorter than other patrolling enemies before they go to their next target. - Make sure to get references of the Player character and its hurt screen before moving. 

  • Made the flashlight not only have a cookie light, but also undisturbed by other objects in front of the Player so he/she can view objects up close to objects without the flashlight being blocked by the mesh.

  • The layer “Ignore raycast" allows raycats to pass through triggers and collisions without blocking the players shots. Good to have if your scene has triggers set up in the scene.

  • For the first time since 2019, I have enabled code that Allows Player to change post processing in the scene into night vision view which allows the Player to see in the dark like real night vision goggles.

  • For the first time I have made Ui showing how battery the Player has before the battery runs out turning the flashlight and night vision off.

  • For the first time, I learned to bake lights on Players arms, scene objects, and enemies.

  • I learnt more of making an options menu since I did Punk-Ass 3000, I have listed in toggle and control options for visuals lie fog, brightness, AntiOff, AntiFXAA, AntiSMAA ,AntiTAA, ambient and sfx volume with audio mixers, difficulty (enemy amount only), back to menu, control list, and save button.


--Other--

  • Added an alternative way to rotate a game object (lighthouse light) in world coordinates (LHObject.transform.Rotate(0.0f, Speed, 0.0f, Space.World); - Which reminds me that World space makes it move with the world, which with local space would move differently.

  • Learned to change a rigidbodys mass from code

  • Enumerators can be good to give code a second to check for something before being destroyed so it will not cause errors such as... - Checking which pickups have already been collected, if it is collected by Player than it will destroy the game object the next time he/she loads the game. -  Making sure the Bosses bullets have access to The Player script so it will flash the UI screen if Player is hit by the bullet. - They assign the spawned enemies targets so they can patrol them unless they spot the Player. - Randomizes the Enemies check time so when they reach their targets, some will look around longer or shorter than other patrolling enemies before they go to their next target. - Make sure to get references of the Player character and its hurt screen before moving. 

  • Made the flashlight not only have a cookie light, but also undisturbed by other objects in front of the Player so he/she can view objects up close to objects without the flashlight being blocked by the mesh.

  • The layer “Ignore raycast" allows raycats to pass through triggers and collisions without blocking the players shots. Good to have if your scene has triggers set up in the scene.

  • For the first time since 2019, I have enabled code that Allows Player to change post processing in the scene into night vision view which allows the Player to see in the dark like real night vision goggles.

  • For the first time I have made Ui showing how battery the Player has before the battery runs out turning the flashlight and night vision off.

  • For the first time, I learned to bake lights on Players arms, scene objects, and enemies.

  • I learnt more of making an options menu since I did Punk-Ass 3000, I have listed in toggle and control options for visuals lie fog, brightness, AntiOff, AntiFXAA, AntiSMAA ,AntiTAA, ambient and sfx volume with audio mixers, difficulty (enemy amount only), back to menu, control list, and save button.


WHAT WENT WRONG, COULD I HAVE DONE BETTER?: 

  • I made too many scripts; I need to reduce how many scripts I make so it's nice and tidy. So, for e.g instead of the pickups each with their own script with similar code, all pickups should have the same script but customizable parameters to tell which pickup the Player gets when picked up by him/her,

  • The already-found pickups don't always destroy themselves accurately when the Player loads the game, I will need to find a better way to make it work better so the mechanic doesn't look broken and leave the Player at an unfair advantage.

  • I could have saved the Players current transform position, but I decided to let it go since it wasn't in the course and would have been tricky to program.

  • Sometimes the Enemy will jerk around while moving to its next target, I need to make sure it doesn't happen next time.

  • The enemies find the Player too easily even if not looking at the Player, next time I will need to add a cone of vision from the enemies' eyes to not only add realism, but to give the Player a fair chance of being hidden, unless seen by the enemy.

  • I could have got the Player raycast to check for pickups to work better, there's a possible chance I may fix it in a patch in future.

  • For the options menu, it is bare bones and lacking some important options like customizing inputs, more noticeable differences with difficulty, multiple saves, W&H resolution and several other visual and graphic options. When I start making commercial games, I will need to put in more accessible options in the options menu to suit different gamer needs. I also need to make sure the options are set in stone so the Player can see the changes made next time they log into the game

    The Inventory menu could be a little better. For e.g not so many apples, only one apple button displaying its amount, same goes with batteries and gun clip bullets.

  • I could reduce the amount of trigger boxes the enemies carry for seeing and detecting Player attacks to reduce bugs from happening.

  • Most of the code I wrote is very spaghetti-ish, I will need to get in the habit of making cleaner and easier code to read next time. 

  • Next time; if any of the enemies has a gun or any other ranged weapon, I will need to use IK to get them to aim whenever the Player is in the air or below the enemy.


OVERALL:

It was a very challenging project to do. Normally I'm not keen on making horror games, but this project gave me more knowledge of what I need to make in fps games like flashlight, Player melee combat, options, making cutscenes and saving Player inventory and progress.


What first became easy to pick up and hard to master, was a long project, but it was worth. every min of it.


I will be more prepared next time I make a horror game like Resident evil or Silent hill. 


At the end of the day, I am getting better and better with making games on my own.

 
 
 

Comments


bottom of page