Jens Petter

Game-Developer



My passion lies within games. It can be either programming, designing, playing, voice-acting, story-telling or researching them, it does not matter because I all like it. Although I have to say that programming is my favorite part of it. I also feel very inspired by 2.5D games. Below you will find the projects I made where I am the most proud of.


Skills


Unity

C#

HTML

CSS


Games


The Mourning Commute

Twisty Fruit

The Power of Left and Right





Projects


VR Molecules Simulator

About Me


I'm Jens, 19 years old and currently doing my second year on Sint-Lucas. First year of programming games though, but i've been doing lot's of programming in my first year and in my spare time as well. Creativity was always a big thing in my life, and mixing that with my programming is just to freaking cool. I like being happy and funny. But when I'm working I'm always calm. Well sometimes though, I'm mostly hyped when i'm working :)


When I'm not programming, I'm doing something else. I like cosplaying wich is a big hobby of mine. I also love watching anime wich is also a big hobby of mine.

Contact Me


×

The Mourning Commute

The Mourning Commute is a physics based game in which you play a train driver who has snapped under the pressure of the morning rush hour. Your goal is to fling as many passengers as you can out of your train before arriving at the next station.

This was the second time I went to the Global Game Jam, this time I got more experience with Unity though. I was kind of the second programmer in the team, I say "kind of" because the experience level of everyone there was so high compared to mine so I was a kind of noobie when I was there. But from the other side I learned alot from those people.

I had one lead-programmer with me, I was kind of "under" him if you could say it like that. He did the core-mechanics and basicly put the game together. My job was also a little bit of core-mechanics but I tried to optimize them as best as I could.

The thing that I liked the most was to work with people who are just awesome. A few people were new to me but there were also people who I already knew. The game was based on physics so it was really fun to build a script for a physics based game.

link to the global game jam page




×

First Oculus Rift Game

This was my first project with the oculus rift. It was meant to be a project which we had to make with a photo in our head. My photo shown under here was kind of oranje and it looked like a ball. Here you can see the photo that I had.

Because I had to think about orange balls all the time, I made a game which made random generated illustrations witch those balls. You can do a lot of cool things in the game which made it cooler to view the game in VR.

I did this project on my own. I think I worked on it for 20 hours or a little bit less then that.

In the end I really was happy that I worked on this project. Sometimes it was hard working with the Oculus but now I have some experience with it which is good.

link to the game


Instantiate Sphere Script

In this game a sphere will be instantiated every few seconds. This script is attached to that sphere. Due to this script other spheres can be instantiated until the limit of spheres is reached.

(The syntax for the GetComponent<>() function in the code has been replaced by GetComponent[]() because otherwise the plugin will not see the GetComponent[>() function.)

using UnityEngine;
using System.Collections;

public class instantiateTheSphereScript : MonoBehaviour {

    private GameObject[] allSpheres;
    private GameObject parentOrbit;
    public int spawnAmount;
    public static float spawnTimer;
    private float realSpawnTimer;

    // Use this for initialization
    void Start () {
        allSpheres = GameObject.FindGameObjectsWithTag("sphere");
        parentOrbit = GameObject.FindGameObjectWithTag("parent");

        realSpawnTimer = spawnTimer;
    }
	
	// Update is called once per frame
	void Update () {
        realSpawnTimer -= Time.deltaTime;

        if(realSpawnTimer <= 0 && allSpheres.Length != spawnAmount) {
            GameObject newSphere = Instantiate(gameObject, new Vector3(gameObject.transform.position.x + Random.Range(-0.5f,0.5f), gameObject.transform.position.y + Random.Range(-0.5f, 0.5f), gameObject.transform.position.z + Random.Range(-0.5f, 0.5f)), Quaternion.identity) as GameObject;
            newSphere.transform.parent = parentOrbit.transform;
            Destroy(GetComponent[instantiateTheSphereScript]());
        }
	}
}



×

Twisty Fruit

Twisty Fruit is a game where you have to be fast and smart. You have to tap wurms out of all kinds of different fruit. You will get a point for every wurm you manage to tap out of the fruit. Try to get the highest score and maybe you will be ranked in the scoreboard.

For this 3 week project school gave us one task that we had to do: Make a game like you are an indie studio. So we (4 artists and 1 programmer) introduced Fruit Bite Studios to the world. Fruit Bite Studios developed their first game Twisty Fruit in those 3 weeks. We had one lead of our team who made briefings of our meetings and a contract which we had to sign before the project even started. All with all, we wanted to take this project very professionally.

In this project I was the only programmer so I became lead tech. We had one artist who was lead of the whole project and then we also had 3 other artists. I was responsible for putting the game together but also for publishing the game.

I never really published a game so publishing the game was the most important thing I learned during this project. Also I made the game for android and IOS so I optimize the game for those two platforms. Touch was a little bit tricky to let that work on both the platforms but in the end I managed to do that.


Insect Logic Script

This script handles all the actions that will hapen after a wurm has been clicked. Immodestly after that it checks how many wurms are left. It also has functions built into it regarding the freeze ability which we put in the game.

(The syntax for the GetComponent<>() function in the code has been replaced by GetComponent[>() because otherwise the plugin will not see the GetComponent[>() function.)

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

public class insectLogicScript : MonoBehaviour {

    [HideInInspector]
    public List insects = new List();

    [HideInInspector]
    public GameObject currentFruit;

    private gameplaySpawnerScript _GPSP;
    private scoreManagerScript _SMS;
    private levelUIScript _LUS;
    private levelVisualsScript _LVS;
    private fastTapScript _FTS;
    private levelTimerScript _LTS;

    private bool timerActivated;
    private float realAbilityTimer;

    void Awake() {
        _GPSP = GetComponent[gameplaySpawnerScript>();
        _SMS = FindObjectOfType[scoreManagerScript>();
        _LUS = GetComponent[levelUIScript>();
        _LVS = FindObjectOfType[levelVisualsScript>();
        _LTS = GetComponent[levelTimerScript>();
    }
    void Start() {
        currentFruit = GameObject.FindGameObjectWithTag("Fruit");

        StartCoroutine(CheckInsectsCount());
    }
    void Update() {
        if(Input.touchCount == 1 && Input.GetTouch(0).phase != TouchPhase.Moved) {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100.0F)) {
                if (hit.collider.gameObject.transform.parent.tag == "InsectParent") {
                    scoreManagerScript.score++;
                    _SMS.UpdateScore();

                    _FTS = FindObjectOfType[fastTapScript>();
                    _FTS.deadWurms++;

                    Vector3 temp = Camera.main.WorldToScreenPoint(hit.collider.gameObject.transform.position);

                    GameObject text = Instantiate(_LVS.popUpPointsText, temp, Quaternion.identity) as GameObject;
                    text.transform.parent = GameObject.FindGameObjectWithTag("canvasSpawner").GetComponent[RectTransform>();

                    GameObject clickParticle = Instantiate(_LVS.wurmClickParticle, hit.collider.gameObject.transform.position, Quaternion.identity) as GameObject;
                    clickParticle.transform.position = new Vector3(hit.collider.gameObject.transform.position.x,hit.collider.gameObject.transform.position.y, -5);

                    hit.collider.gameObject.transform.parent.tag = "Untagged";
                    hit.collider.gameObject.transform.parent.gameObject.AddComponent();
                    hit.collider.gameObject.transform.parent.SetParent(null);
                    hit.collider.gameObject.transform.parent.GetComponent[wurmDieScript>().enabled = true;

                    insects.Remove(hit.collider.gameObject.transform.parent.gameObject);
                    StartCoroutine(CheckInsectsCount());
                }
            }
        }
        if (timerActivated) {
            realAbilityTimer -= Time.deltaTime;

            if (realAbilityTimer <= 0) {
                AbilityDisabled();
            }
            else {
                GameObject child = FindObjectOfType[freezeAbilityScript]().gameObject;

                child.GetComponent[Image]().fillAmount = 1;
            }
        }
    }
	public void FromOtherScriptCheck() {
		StartCoroutine(CheckInsectsCount());
	}
    IEnumerator CheckInsectsCount() {
        yield return new WaitForSeconds(0.2f);
        GameObject[] tempInsects = null;

        tempInsects = GameObject.FindGameObjectsWithTag("InsectParent");

        insects = new List();

        for (int i = 0; i < tempInsects.Length; i++) {
            insects.Add(tempInsects[i]);
        }

        if (insects.Count == 0) {
            _LVS.clearedFruitPopUp.SetActive(true);
            currentFruit.GetComponent[fruitSpawnerScript]().whereToGo = 2;

            GameObject[] movementsPoints = GameObject.FindGameObjectsWithTag("WurmWaypoint");

            for (int i = 0; i < movementsPoints.Length; i++) {
                movementsPoints[i].tag = "Untagged";
            }

            currentFruit.tag = "Untagged";
            _GPSP.parent.tag = "Untagged";

            _GPSP.ClearedFruit();
        }
    }
    public void AbilityActivated() {
        AbilityActiveOrNot("true");
    }
    public void AbilityDisabled() {
        AbilityActiveOrNot("false");
    }
    void AbilityActiveOrNot(string other) {
        if (other == "true") {
            soundUIScript sound = GameObject.FindObjectOfType[soundUIScript]();
            sound.PlayAudioEffect(sound.abilitySound);

            levelTimerScript temp = GameObject.FindObjectOfType[levelTimerScript]();
            temp.enabled = false;

            GameObject[] temp2 = GameObject.FindGameObjectsWithTag("Insect");

            for (int i = 0; i < temp2.Length; i++) {
                if (temp2[i].GetComponentInChildren[wurmMovementScript>()) {
                    temp2[i].GetComponentInChildren[wurmMovementScript>().enabled = false;
                }
                if (temp2[i].GetComponentInChildren[wurmBodyMovementScript>()) {
                    temp2[i].GetComponentInChildren[wurmBodyMovementScript>().enabled = false;
                }
            }
            realAbilityTimer = _LUS.freezeAbilitytimer;
            timerActivated = true;
        }
        else if(other == "false") {
            levelTimerScript temp = GameObject.FindObjectOfType[levelTimerScript]();
            temp.enabled = true;

            GameObject[] temp2 = GameObject.FindGameObjectsWithTag("Insect");

            for (int i = 0; i < temp2.Length; i++) {
                if (temp2[i].GetComponentInChildren[wurmMovementScript]()) {
                    temp2[i].GetComponentInChildren[wurmMovementScript]().enabled = true;
                }
                if (temp2[i].GetComponentInChildren[wurmBodyMovementScript]()) {
                    temp2[i].GetComponentInChildren[wurmBodyMovementScript]().enabled = true;
                }
            }
            _LUS.freezeButton.GetComponent[Image]().fillAmount = 1;

            if (_LTS.timer <= 5) {
                _LUS.EnableCountDown();
            }
            timerActivated = false;
        }
    }
}

link to the game on the google play store




×

The Power of Left and Right

In this game you use your tablet as a tilt device. Bushes are coming towards you from the left and right side and behind one of the two there is a friendly guy, and behind the other one there is an enemy guy. Your task is to tilt the screen towards the enemy with the help of a voice you hear and different hints you get. This way you dragon or unicorn depending which one you chose will attack the chosen side and if you got the enemy you will earn a point and of course if you hit the friendly you will lose one.

In this 3 week project we had to do all sorts of different things. Of course priority one was making the game, but there was also playtesting, scrumming and concept presentations to do. For playtesting we actually had to head out and playtest the game at a school which we also did, from there we got a lot of feedback to progress further in the game.

Our team consisted of 1 programmer and 4 artists. Of course the programming was assigned to me but I also had to cut a lot of 2d sprite sheets in unity which one of the artists made. We tried to assign specific things to one artist, for example that one artist was going to do the UI, another one was going to do characters and so forth. But in the end everyone did little tasks which were assigned to him/her.

Since this project was 2D I really enjoyed making it. 2D has for some reason always been a preference to me. Unfortunately there was a bit of a problem with unity. In the end it took up a lot of time but at least now I know how it works.


Attack Detection Script

This script handles almost all the action the occur while the game is running. In the game there is a detection area, if objects get in that area something will happen. This area does not stand for one object to be activated but it stands for a lot of actions that happen while something enters the area.

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

[RequireComponent(typeof(AudioSource))]
public class attackDetectionScript : MonoBehaviour {

    //variables for the hand and arrow object;
    public Image[] arrows;
    public Image[] hands;

    //audio for saying left and right;
    public AudioClip leftAudio;
    public AudioClip rightAudio;

    //audiosource of this object;
    private AudioSource _AS;

    //bools for detecting which side the enemie is on;
    public bool leftHitting;
    public bool rightHitting;

    //bool for detecting if you can shoot;
    public bool canShoot;

    //GameObject for putting the current enemy in;
    public GameObject enemyDetection;

    //GameObject for putting the current friendly in;
    public GameObject friendlyDetection;

    void Awake() {
        //assign the audiosource variable to it's own component audiosource
        _AS = GetComponent[AudioSource>();
    }
    void Start() {
        //first set all the hand and arrow objects to color a value 0;
        arrows[0].color = new Color(255, 255, 255, 0);
        arrows[1].color = new Color(255, 255, 255, 0);

        hands[0].color = new Color(255, 255, 255, 0);
        hands[1].color = new Color(255, 255, 255, 0);

        //set all the GameObjects or bools to null;
        enemyDetection = null;
        friendlyDetection = null;

        leftHitting = false;
        rightHitting = false;
        canShoot = false;
    }
    void OnTriggerEnter2D(Collider2D other) {

        if (other.gameObject.tag == "enemie") {

            //assign current enemie in collider to the enemyDetection variable;
            enemyDetection = other.gameObject;

            //assign to true, this is so you can shoot
            canShoot = true;

            //if the enemie is right;
            if (other.gameObject.transform.position.x > 0) {

                //rightHitting is true because the enemie comes from the right;
                rightHitting = true;
                leftHitting = false;

                //activate this void for calculating things with PlayerPrefs;
                ArrowOrHand("right");

                //play the audio for when the enemy is right;
                _AS.PlayOneShot(rightAudio);
            }
            //if the enemie is left;
            else if (other.gameObject.transform.position.x < 0) {

                //left hitting is true because the enemy comes from the left;
                leftHitting = true;
                rightHitting = false;

                //activate this void for calculating things with PlayerPrefs;
                ArrowOrHand("left");

                //play the audio for when the enemy is lelft;
                _AS.PlayOneShot(leftAudio);
            }
        }
        //if the other variable is tagged with friendly;
        if (other.gameObject.tag == "friendlie") {
            //assign friendlyDetection to current other GameObject;
            friendlyDetection = other.gameObject;
        }
    }
    void OnTriggerExit2D(Collider2D other) {

        //set all bools and GameObjects back to null or false again;
        //the hand and arrow objects will have a color a value of 0 again;
        enemyDetection = null;
        friendlyDetection = null;

        arrows[0].color = new Color(255, 255, 255, 0);
        arrows[1].color = new Color(255, 255, 255, 0);

        hands[0].color = new Color(255, 255, 255, 0);
        hands[1].color = new Color(255, 255, 255, 0);

        rightHitting = false;
        leftHitting = false;
        canShoot = false;
    }
    void ArrowOrHand(string way) {
        //detect if your difficulty level is 1 or 2;
        //depending on that, turn on the object by changing it's color a value;
        if (PlayerPrefs.GetInt("Level") == 1)  {
            if (way == "left") {
                arrows[0].color = new Color(255, 255, 255, 255);
            }
            else if (way == "right") {
                arrows[1].color = new Color(255, 255, 255, 255);
            }
        }
        else if (PlayerPrefs.GetInt("Level") == 2) {
            if (way == "left") {
                hands[0].color = new Color(255, 255, 255, 255);
            }
            else if (way == "right") {
                hands[1].color = new Color(255, 255, 255, 255);
            }
        }
        //if difficulty level is 4;
        else if (PlayerPrefs.GetInt("Level") == 4) {
            //have a random int;
            int r = Random.Range(0, 2);

            //if r variable is 0, then the left image will display by changing it's color a value;
            if (r == 0) {
                arrows[0].color = new Color(255, 255, 255, 255);
            }
            //if r variable is 0, then the right image will display by changing it's color a value;
            else if (r == 1) {
                arrows[1].color = new Color(255, 255, 255, 255);
            }
        }
    }
}