WHAT A DELIGHT TO HAVE YOU HERE! A FRIGHT DELIGHT!

Fright Delight is an endless Halloween shooter with power-ups and various enemy types. It is Halloween night and every child has turned into the monster they dressed as. You start as a teenager with nothing but a bat and a ball. In later stages, these weapons can be upgraded to various weapons with very cool features. Fight against the evil vampires, werewolfs, zombie clowns and other creatures.

In total there were about 11 enemies. 2 clowns, a dummy, a vampire, a naked guy, a werewolf, a bat, a ghost, a pumpkinhead, a scream and a secret enemy.

In total there were about 7 weapons. Each of these weapons has their own upsides and downsides.

Melee - The bat is the standard weapon the player has. In this case, the bat is used as a melee weapon to kill monsters from close range. Range - The bat and baseball is the standard weapon the player has. In this case, the weapon is used to kill monsters from long range. Range - The pistol is an upgradable weapon and can be obtained by killing a ghost. It has a shorter delay between each shot and looks cooler.
Melee - The knife is an upgradable weapon that can be obtained by killing a werewolf. It can only be used as a melee weapon and has a shorter delay between attacks. Range - The machine-gun is a special weapon that can be obtained by killing a vampire. It shoots 4 bullets in one attack, but has a longer delay between attacks. Range - The shotgun is a special weapon that can be obtained by killing a clown. It shoots 3 bullets in different directions, but has a longer delay between attacks.
Range/Charge - The raygun is a special weapon that can be obtained by killing a secret enemy. It has 12 ammo and you need to charge it for 2 seconds first to attack.

I served as the head programmer in a group consisting of 2 developers (including me) and 4 game artists. Our assignment was to make a 2D arcade game for an arcade machine. My responsibilities on this project varied.

So for this project, we had about 3 weeks. We started writing ideas on a big paper. We all agreed a horror game would be a nice idea, since Halloween would arrive in a few weeks. We wanted it to be a shooter because the assignment said we would make it for a arcade machine. We chose an arcade pixel art style, and the music also followed the same style. At first, our name was a little different. Our first name was "Trick or Die", but I came up with the name "FrightDelight" and we liked that name more.

Since it is quite hard to see what is written on the paper, I will list it here:

We used the scrum method to make our videogame. We had a column for animations, coding,background, foreground, etc.

One of our artists made a storyboard about the game.

We also made a paperapp to show what our concept was. We got greenlit immediatley, but I already had made a prototype to check if what we had in mind would be possible.

I edited the video and made and added the sound effects. The sound effects in the final game are also made by me.

Because we began a bit earlier with our prototype, we had more time to deal with certain problems we came across during the development. We already had a working game in the first week, but there was no art for it yet, only developer art (Which mostly consisted of white and red squares).

I began making a player movement script, shoot script and I made an enemy script that follows the player. After that I began making the power-ups and the weapon pick-ups. After this was done, I began coding our leaderboard script, since that was the point of the game, getting the highest score. It took me a whole day, but I eventually managed to make a working script by scratch. The other developer in my team made 2 scripts, so it was mainly me who made all the things work. I was glad to see all the artists also gave their 100% for this game, and in my opinion, it turned out great!

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class WeaponSwitcher : MonoBehaviour {
public int currentWeapon = 0;
[Header("Weapons")]
[Space(-20)]
[Header("________________________________")]
[Space(10)]
public bool canShoot;
Image currentGunImage;
public bool charging;
public float damage;
AudioSource charge;
AudioSource shoot;
private void Update()
{
if(damage > 5)
{
}
if (charging)
{
if (damage < 5)
{
damage += 0.07f;
}
}
if (currentWeapon == 1 && !GameManager.instance.hasPistol)
{
ChangeWeapon();
}
if (currentWeapon == 2 && !GameManager.instance.hasShotgun)
{
Debug.Log("Does not have Shotgun");
ChangeWeapon();
}
if (currentWeapon == 3 && !GameManager.instance.hasUzi)
{
Debug.Log("Does not have Uzi");
ChangeWeapon();
}
if (currentWeapon == 4 && !GameManager.instance.hasRaygun)
{
Debug.Log("Does not have Raygun");
ChangeWeapon();
}
if (currentWeapon == 5 && !GameManager.instance.hasBoomerang)
{
Debug.Log("Does not have Boomerang");
ChangeWeapon();
}
if (currentWeapon == 6 && !GameManager.instance.hasCannon)
{
Debug.Log("Does not have Cannon");
ChangeWeapon();
}
}
void Start () {
shoot = GameObject.Find("Shoot").GetComponent<AudioSource>();
charge = GameObject.Find("Charge").GetComponent<AudioSource>();
currentGunImage = GameObject.Find("WeaponHolderImage").GetComponent<Image>();
SelectWeapon();
canShoot = false;
}
public void ChangeWeapon()
{
if (currentWeapon >= transform.childCount - 1)
{
currentWeapon = 0;
SelectWeapon();
}
else
{
currentWeapon++;
SelectWeapon();
}
}
void SelectWeapon()
{
int i = 0;
foreach(Transform weapon in transform)
{
if(i == currentWeapon)
{
weapon.gameObject.SetActive(true);
currentGunImage.sprite = weapon.gameObject.GetComponent<Weapon>().gunSprite;
}
else
{
weapon.gameObject.SetActive(false);
}
i++;
}
}
public void Shoot()
{
if (canShoot)
{
shoot.Play();
if (currentWeapon != 4)
{
foreach (Transform weapon in transform)
{
if (weapon.gameObject.activeSelf)
{
weapon.gameObject.GetComponent<Weapon>().Shoot();
}
}
}
}
}
public void RaygunUp()
{
if(canShoot) {
if (currentWeapon == 4)
{
charge.Stop();
shoot.Play();
charging = false;
foreach (Transform weapon in transform)
{
if (weapon.gameObject.activeSelf)
{
weapon.gameObject.GetComponent<Weapon>().Raygun(damage);
damage = 0;
}
}
}
}
}
public void RaygunDown()
{
if (canShoot)
{
if (currentWeapon == 4)
{
charge.Play();
charging = true;
}
}
}
public void CallNumerator(float i)
{
StartCoroutine(ShootDelay(i));
}
IEnumerator ShootDelay(float i)
{
canShoot = false;
yield return new WaitForSeconds(i);
canShoot = true;
}
}

We had 50 scripts in total, I made 48 of those. The other developer was not really doing anything and I did not want to dissapoint our artists, who were in fact working very hard on the art.

At first, we had planned to use a control list everytime you start a game, but I actually had a better idea to make it more interesting for the player. I coded a whole tutorial to teach the player all the mechanics and controls.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Reflection;
public class ShopItem : MonoBehaviour {
public string itemName;
public int itemPrice;
bool bought;
public Text priceText;
public Image soldImage;
public void Buy()
{
if (!bought)
{
if (PlayerPrefs.GetInt("Points") > itemPrice || PlayerPrefs.GetInt("Points") == itemPrice)
{
bought = true;
GameManager.instance.GetType().GetField("has" + itemName).SetValue(GameManager.instance, true);
int previousPoints = PlayerPrefs.GetInt("Points");
PlayerPrefs.SetInt("Points", previousPoints - itemPrice);
soldImage.enabled = true;
}
}
}
private void Start()
{
priceText = GetComponentInChildren<Text>();
priceText.text = "x" + itemPrice.ToString();
if ((bool)GameManager.instance.GetType().GetField("has" + itemName).GetValue(GameManager.instance) == true)
{
bought = true;
soldImage.enabled = true;
}
else
{
soldImage.enabled = false;
}
}
}

I made a initials script, where you put your name in for the high score. Instead of using an array with a lot of letters, I used a char which uses an ASCII table. In the script, the chars get transferred to a string.

As I said, developing was not the only thing I did. I also designed the music and sound effects and made some enemy sprites, and made the raygun.

In total I made 3 soundtracks, a menu tune, all the sound effects like shooting, getting hit, selecting an option, picking up candy, using power-ups, etc.