Ian Fitzsimmons

I’m 20 years old and I have my own indie game development company and been working with game development for around a decade. With experience in Unity, Visual Studio, C++, and c# alongside marketing, sound design, gameplay design, and environment design! 

I hope to branch out in the gaming industry and connect with other passionate people and work on great projects

GAMES

ENEMIES (2021)

You start on a trip to an imaginative video game company, Lollygag Labs, to try out their new VR-like video game experience, immersion. Exploring the building in a first-person shooter style, going through immersion pods, picking up boxes, finding key cards, killing enemies, and meeting FRED

MORE ENEMIES (2023)

Starting at a dead-end job for an obscure paper company with no story relevance, you venture onto your next job as an employee at… Lollygag Labs. A game development company with questionable ethics! Where you uncover a plot of spoilers, deviance, gore, dangerous chairs, and of course: Enemies

ANIMATION REEL

Code Samples

Slowing down sounds in a scene when player goes in slo-mo mode:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SloMoManager : MonoBehaviour
{
    AudioSource[] sounds;

    public AudioSource[] ExcludedSounds;

    bool changedYetSlow = false;
    bool changedYet = false;

    public Animator bulletTimeAnim;

    private void Awake()
    {
        sounds = FindObjectsOfType<AudioSource>();
    }

    bool beenSlowedYet = false;
    
    
//Whenever timescale is changed between fast/slow this is called
    public void RequestSoundChange(bool slow)
    {
        if (slow)
        {
            beenSlowedYet = true;
            changedYet = false;
            if (changedYetSlow == false)
            {
                ChangeAllPitchValues(-0.7f);
                changedYetSlow = true;
                bulletTimeAnim.Play("BulletTStart");
            }
        }

        if (slow == false && beenSlowedYet)
        {
            changedYetSlow = false;
            if (changedYet == false)
            {
                ChangeAllPitchValues(0.7f);
                changedYet = true;
                bulletTimeAnim.Play("BulletTEnd");
            }
        }
    }



    public void ChangeAllPitchValues(float pitchDifference)
    {
        // Loop through the whole sound array.
        foreach (AudioSource s in sounds)
        {
        //Exclude sounds that aren't meant to be slowed down (background music, etc.)
            if (ArrayContains(ExcludedSounds, s) == false)
            {
            // Adjust pitch value equal to the given difference.
                s.pitch += pitchDifference;
            }
            
        }
    }

    bool ArrayContains(AudioSource[] array, AudioSource g)
    {
        for (int i = 0; i < array.Length; i++)
        {
            if (array[i] == g) return true;
        }
        return false;
    }
}

Fading in/out audioSources as needed

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public static class AudioFadeOut {
 
    public static IEnumerator FadeOut (AudioSource audioSource, float FadeTime, AudioZone setVolume, AudioSource aS = null) {
        

        if(aS != null)
        {
            float startVolume = aS.volume;
            while (aS.volume > 0)
            {
                aS.volume -= 1 * Time.deltaTime / FadeTime;

                yield return null;
            }
        }
        else
        {
            float startVolume = setVolume.setVolume;
            while (setVolume.setVolume > 0)
            {
                setVolume.setVolume -= startVolume * Time.deltaTime / FadeTime;

                yield return null;
            }
        }
 
        
 
        audioSource.Stop ();
    }

    public static IEnumerator FadeIn(AudioSource audioSource, float FadeTime, float vol, AudioZone setVolume)
    {
        //audioSource.volume = 0;
        if (audioSource.isPlaying == false)
            audioSource.Play();
        while (setVolume.setVolume < vol)
        {
            setVolume.setVolume += vol * Time.deltaTime / FadeTime;

            yield return null;
        }
    }


    public static IEnumerator FadeToVolume(AudioSource audioSource, float FadeTime, float volume, AudioZone setVolume)
    {

        if (setVolume == null)
        {
            float startVolume = audioSource.volume;

            if (volume > startVolume)
            {
                if (audioSource != null)
                    while (audioSource.volume < volume)
                    {
                        audioSource.volume += startVolume * Time.deltaTime / FadeTime;

                        yield return null;
                    }
            }
            else
            {
                while (audioSource.volume > volume)
                {
                    audioSource.volume -= startVolume * Time.deltaTime / FadeTime;
                    yield return null;
                }
            }
        }
        else
        {
            float startVolume = setVolume.setVolume;

            while (setVolume.setVolume > volume)
            {
                setVolume.setVolume -= startVolume * Time.deltaTime / FadeTime;

                yield return null;
            }
        }

    }

}

Simple gun recoil

using UnityEngine;
using System.Collections;

public class Recoil : MonoBehaviour
{
    private Vector3 currentRotation;
    private Vector3 targetRotation;
    //Hipfire. Recoil
    public float recoilx;
    public float recoilY;
    public float recoilz;
    //ADS Recoll
    public float aimkecoilx;
    public float aimkecoilzi;
    //Settings
    public float snappiness;
    public float returnspeed;
   
    void Update()
    {
        targetRotation = Vector3.Lerp(targetRotation, Vector3.zero, returnspeed * Time.deltaTime);
        currentRotation = Vector3.Slerp(currentRotation, targetRotation, snappiness * Time.deltaTime);
        transform.localRotation = Quaternion.Euler(currentRotation);
    }

    public void Recoilfire(float multi)
    {
        float otherMulti = multi;
        if (multi > 2)
            otherMulti = (multi * 0.4f);

        targetRotation += new Vector3(recoilx * (multi), Random.Range(-recoilY, recoilY) * (otherMulti), Random.Range(-recoilz, recoilz) * (otherMulti));
    }
}