BACK

THE CATCH


START


ABOUT THE GAME


The Catch is een vrolijk maar misleidend spel vol verrassingen en leuke ervaringen.
Betreed de ‘Forest of The Souls’ en geniet van de speelsheid van de kleuren om je heen.
Maar let op, niet alles is wat het lijkt!

ABOUT THE GAME JAM


Deze game is gemaakt voor de Brackeys Game Jam 2022.1,
een online event waarbij je een week de tijd krijgt om een game te maken.
Het thema van deze game jam was ‘It is not real’.
Er zijn 1584 projecten ingeleverd. De scores van mijn game zijn als volgt:

Criteria Rank Score* Raw Score
Graphics #131 4.067 4.067
Audio #233 3.400 3.400
Game Design #299 3.467 3.467
Overall #363 3.322 3.322
Fun #388 3.244 3.244
Innovation #506 3.022 3.022
Theme #754 2.733 2.733

CODE


Hier is een stukje code van dit project.
De code zorgt ervoor dat de gebruiker een highscore kan opslaan, zodat dit in het online systeem van het scorebord komt.
Voor de beveiliging zijn er een paar plekken zwart gemaakt.

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

public class Registration : MonoBehaviour {

    public TMP_InputField nameField;
    public GameManager gameManager;
    public Button submitButton;

    public void CallRegister()
    {
        StartCoroutine(Register());
    }

    IEnumerator Register()
    {
        WWWForm form = new WWWForm();
        form.AddField("name", nameField.text);
        form.AddField("score", gameManager.score.ToString());
        Debug.Log(nameField.text);
        Debug.Log(gameManager.score.ToString());
        WWW www = new WWW("https://michielhijweege.com/gamejam20221/register.php", form);
        yield return www;
        if(www.text == "0")
        {
            Debug.Log("User created successfully.");
            Debug.Log("restart");
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
        else
        {
            Debug.Log("User creation faild. Error #" + www.text);
        }
    }

    public void VerifyInputs()
    {
        submitButton.interactable = (nameField.text.Length >= 1 && gameManager.score.ToString().Length >= 1);
    }

}
            

UNTIL SUNRISE


ABOUT THE GAME


Deze survival game voor mobiel plaatst jou in een apocalyps situatie.
In deze wereld zijn de zombies in de ochtend versteend en komen ze 's avonds weer tot leven.
In de ochtend loop je rond, verzamel je spullen en kun je de versteende zombies aanvallen.
’s Avonds word je aangevallen door de zombies en moet je je verdedigen.
Je kunt ook je oude vertrouwde camper oproepen, waarin je rustig kunt craften en je spullen kunt opslaan.
Deze spullen kun je in een latere run gebruiken om langer te overleven.
In de camper staat de tijd even stil; eenmaal buiten draait de tijd door en zo ook de zombieaanvallen.

CODE


In dit script staat hoe de items worden opgeslagen.

Heb momenteel niet het project gevonden probeer later.
            

VICE BALL


ABOUT THE GAME


In deze runner-game ben je een maffiabaas die voortdurend op de vlucht is voor de politie. Zet alles op alles om te proberen te ontsnappen!

CODE


Deze script zorgt ervoor dat op je telefoon kunt bewegen en als je in de Unity-editor zit, kun je bewegen met behulp van je toetsenbord.

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

public class Move : MonoBehaviour
{
    // Variables
    public float moveSpeed = 1f;
    public GameObject character;

    private Rigidbody characterBody;
    private float screenWidth;

    // Use this for initialization
    void Start()
    {
        screenWidth = Screen.width;
        characterBody = character.GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void Update()
    {
        // Apply a constant forward force
        characterBody.AddForce(Vector3.forward * 800f * Time.fixedDeltaTime);

        // Check for touch input
        if (Input.touchCount > 0)
        {
            Touch thisTouch = Input.GetTouch(0);
            if (thisTouch.phase == TouchPhase.Moved)
            {
                Vector3 touchPosition = thisTouch.position;
                touchPosition.z = 1.5f; // Set a distance from the camera
                Vector3 worldPos = Camera.main.ScreenToWorldPoint(touchPosition);

                Vector3 newPos = transform.position;
                newPos.x = worldPos.x;
                transform.position = newPos;
            }
        }
    }

    void FixedUpdate()
    {
        #if UNITY_EDITOR
        RunCharacter(Input.GetAxis("Horizontal"));
        #endif
    }

    private void RunCharacter(float horizontalInput)
    {
        // Move player based on horizontal input
        characterBody.AddForce(new Vector2(horizontalInput * moveSpeed, 0));
    }
}

            

ROCKET CAR


ABOUT THE GAME


Mijn eigen versie van Rocket League, ondersteunt lokaal multiplayer.
In dit spel kunnen spelers met elkaar concurreren in spannende voetbalwedstrijden,
waarbij de speler de auto’s bestuurt en deze gebruikt om de bal in het doel van de tegenstander te scoren.
Nodig je vrienden uit en ervaar het plezier van intensieve, actievolle gameplay, direct op je eigen apparaat.

CODE


Dit is een script uit het project. Hierin is te zien hoe de multiplayer werkt.

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

public class networkHUD : NetworkManager
{

    private GameObject player1;

    public int teamcount = 0;

    public int team1count = 0;

    public int team2count = 0;

    public int playerint = 0;

    private void Update()
    {
        player1 = GameObject.Find("Player1");
        if (!player1)
        {
            teamcount = 0;
            team1count = 0;
            team2count = 0;
            playerint = 0;
        }
        SetupOtherSceneButtons();
    }

    public void StartupHost()
{
        SetPort();
    NetworkManager.singleton.StartHost();
}

public void JoinGame()
{
    SetIPAddress();
    SetPort();
    NetworkManager.singleton.StartClient();
}

void SetIPAddress()
{
    string ipAddress = GameObject.Find("InputFieldIPAddress").transform.FindChild("Text").GetComponent().text;
    NetworkManager.singleton.networkAddress = ipAddress;
}

void SetPort()
{
    NetworkManager.singleton.networkPort = 7777;
}

void OnLevelWasLoaded(int level)
{
    if (level == 0)
    {
        //SetupMenuSceneButtons();
        StartCoroutine(SetupMenuSceneButtons());
    }

    else
    {
        SetupOtherSceneButtons();
    }
}

IEnumerator SetupMenuSceneButtons()
{
    yield return new WaitForSeconds(0.3f);
    GameObject.Find("ButtonStartHost").GetComponent<Button>().onClick.RemoveAllListeners();
    GameObject.Find("ButtonStartHost").GetComponent<Button>().onClick.AddListener(StartupHost);

    GameObject.Find("ButtonJoinGame").GetComponent<Button>().onClick.RemoveAllListeners();
    GameObject.Find("ButtonJoinGame").GetComponent<Button>().onClick.AddListener(JoinGame);
}

void SetupOtherSceneButtons()
{
    GameObject.Find("ButtonDisconnect").GetComponent<Button>().onClick.RemoveAllListeners();
    GameObject.Find("ButtonDisconnect").GetComponent<Button>().onClick.AddListener(NetworkManager.singleton.StopHost);
}

}

            

THE DISTURBING TRUTH


START


ABOUT THE GAME


Jij bent een privédetective die een ongebruikelijke erfeniszaak moet oplossen.
De grootvader van jouw cliënt is overleden.
Het landgoed van de grootvader is aan jouw cliënt nagelaten, maar het daadwerkelijke contract van het eigendom is verdwenen.
Je enige aanwijzing is een brief. In de hoop meer aanwijzingen te vinden, rijd je naar het huis van de overledene.
Het lijkt aanvankelijk een makkelijke zaak, totdat het duistere familieverhaal aan het licht komt.
Een griezelig, oud, eenzaam huis... en al zijn rare geluiden... het moet de wind zijn geweest, toch? Vind de aanwijzingen,
los de puzzels op en ontdek het mysterie van de familie van opa Joe!

ABOUT THE GAME JAM


Deze game is gemaakt voor de Brackeys Game Jam 2022.2,
een online event waarbij je een week de tijd krijgt om een game te maken.
Het thema van deze game jam was ‘You're not alone’. Er zijn 1058 projecten ingeleverd.
Mijn scores van de game zijn als volgt:

Criteria Rank Score* Raw Score
Graphics #465 3.000 3.000
Audio #289 3.143 3.143
Game Design #611 2.571 2.571
Overall #516 2.786 2.786
Fun #558 2.643 2.643
Innovation #500 2.714 2.714
Theme #596 2.643 2.643

CODE


Dit is een script waarin de werking van het raadsel te zien is.

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

public class keycode : MonoBehaviour
{
    public List<GameObject> numobj;
    public string correctcode;
    public string currentcode;

    public door door1;
    public door door2;

    public Animator anim;

    [SerializeField] List<string> alphabet;

    public void checkcode()
    {
        anim.SetTrigger("rest");
        currentcode = "";
        for (int i = 0; i < numobj.Count; i++)
        {
            currentcode += alphabet[numobj[i].GetComponent<keynum>().numkey];
        }
        if(currentcode == correctcode)
        {
            door1.doorlock = false;
            door2.doorlock = false;
            anim.SetBool("correct", true);
            Debug.Log("correct");
        }
        if (currentcode != correctcode)
        {
            Debug.Log("wrong");
            anim.SetTrigger("wrong");
        }
    }
}
            

VR GAME


ABOUT THE GAME


Ik heb een VR-spel gemaakt over de Griekse mythologie.
Dit spel is gemaakt voor een poetry event. Je speelt als Hades en je doel is om zaden te verzamelen.
De onderliggende bedoeling is dat de speler ervaart dat elke wens of verlangen een scherp randje kan hebben.
Je leert dat je verantwoordelijk bent voor je daden en voor de eventuele veranderingen die je daden in de levens van anderen kunnen veroorzaken.
Alles heeft zijn prijs.

CODE


Dit script laat de werking zien van het dialoogsysteem.

            using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Ink.Runtime;
using TMPro;

public class DialogueManager : MonoBehaviour
{
    [Header("Dialogue UI")]

    [SerializeField] private GameObject dialoguePanel;

    [SerializeField] private TextMeshProUGUI dialogueText;

    [SerializeField] private GameObject nextbuttonobj;

    [Header("choices UI")]
    [SerializeField] private GameObject[] choices;
    private TextMeshProUGUI[] choicesText;

    [Header("give items")]
    public GameObject goodobj;
    public GameObject mediumobj;
    public GameObject badobj;
    public GameObject mirrorobj;

    public Vector3 givposs;
    public Vector3 givrot;

    public inventory iv;

    List<float> audiotimer;

    private Story currentStory;

    private int i;

    public bool dialogueIsPlaying { get; private set; }

    private static DialogueManager instance;

    List<string> tags;

    [SerializeField] private bool isspeaking;

    private void Awake()
    {
        if (instance != null)
        {
            Debug.Log("meer dialogue manager");
        }
        instance = this;
    }

    public static DialogueManager GetInstance()
    {
        return instance;
    }

    private void Start()
    {
        dialogueIsPlaying = false;
        dialoguePanel.SetActive(false);

        tags = new List<string>();

        choicesText = new TextMeshProUGUI[choices.Length];
        int index = 0;
        foreach (GameObject choice in choices)
        {
            choicesText[index] = choice.GetComponentInChildren<TextMeshProUGUI>();
            index++;
        }
    }

    public void nextbutton()
    {
        ContinueStory();
        Debug.Log("next text press");
    }

    public void EnterDialogueMode(TextAsset inkJSON, Vector3 possgiveitem, Vector3 rotgiveitem, List<float> audiotimerget)
    {
        isspeaking = true;
        nextbuttonobj.SetActive(false);
        audiotimer = audiotimerget;
        givposs = possgiveitem;
        givrot = rotgiveitem;
        currentStory = new Story(inkJSON.text);
        dialogueIsPlaying = true;
        dialoguePanel.SetActive(true);
        StartCoroutine(nexttextauto());
        ContinueStory();
    }

    public IEnumerator nexttextauto()
    {
        if (i <= audiotimer.Count)
        {
            Debug.Log("next text audio" + i + audiotimer[i]);
            yield return new WaitForSeconds(audiotimer[i]);
            i++;
            StartCoroutine(nexttextauto());
            ContinueStory();
        }
        if (i >= audiotimer.Count)
        {
            isspeaking = false;
            StopCoroutine(nexttextauto());
        }
    }

    public IEnumerator ExitDialogueMode()
    {
        yield return new WaitForSeconds(0.2f);

        dialogueIsPlaying = false;
        dialoguePanel.SetActive(false);
        dialogueText.text = "";
        i = 0;
    }

    private void ContinueStory()
    {
        if (currentStory.canContinue)
        {
            dialogueText.text = currentStory.Continue();
            ParseTags();
            DisplayChoices();
        }
        else
        {
            StartCoroutine(ExitDialogueMode());
        }
    }

    private void DisplayChoices()
    {
        List<Choice> currentChoices = currentStory.currentChoices;

        if (!isspeaking && currentChoices.Count == 0)
        {
            nextbuttonobj.SetActive(true);
            StopCoroutine(nexttextauto());
        }

        if (currentChoices.Count > choices.Length)
        {
            Debug.LogError("More choices were given than the UI can support. Number of choices given: "
                + currentChoices.Count);
        }

        int index = 0;
        foreach (Choice choice in currentChoices)
        {
            isspeaking = false;
            choices[index].gameObject.SetActive(true);
            choicesText[index].text = choice.text;
            index++;
        }
        for (int i = index; i < choices.Length; i++)
        {
            choices[i].gameObject.SetActive(false);
        }
    }

    public void MakeChoice(int choiceIndex)
    {
        currentStory.ChooseChoiceIndex(choiceIndex);
        ContinueStory();
    }

    void ParseTags()
    {
        tags = currentStory.currentTags;
        foreach (string t in tags)
        {
            string prefix = t;

            switch (prefix)
            {
                case "giveg":
                    spawngood();
                    break;
                case "gived":
                    spawnbad();
                    break;
                case "givem":
                    spawnmedium();
                    break;
                case "givemir":
                    spawnmirror();
                    break;
                case "removecoin":
                    removecoin();
                    break;
                case "removemirror":
                    removemirror();
                    break;
            }
        }
    }

    void spawngood()
    {
        Debug.Log("good"); Instantiate(goodobj, givposs, Quaternion.Euler(givrot));
        //Instantiate(goodobj, new Vector3(-32.5f, 13, -19), Quaternion.Euler(0f, 0f, 180f));
    }

    void spawnmedium()
    {
        Debug.Log("medium");
        Instantiate(mediumobj, givposs, Quaternion.Euler(givrot));
    }

    void spawnbad()
    {
        Debug.Log("bad");
        Instantiate(badobj, givposs, Quaternion.Euler(givrot));
    }

    void spawnmirror()
    {
        Debug.Log("mirror");
        GameObject newmirror = Instantiate(mirrorobj, givposs, Quaternion.Euler(givrot));
        newmirror.name = "Mirror";
    }

    void removecoin()
    {
        Debug.Log("remove coin");
        if (iv.coinamount >=1)
        {
            iv.coinamount -= 1;
        }
        else
        {
            GameObject go = GameObject.Find("coin");
            Destroy(go.gameObject);
        }
    }

    void removemirror()
    {
        Debug.Log("remove mirror");
        if (iv.Mirroramount >= 1)
        {
            iv.Mirroramount -= 1;
        }
        else
        {
            GameObject go = GameObject.Find("Mirror");
            Destroy(go.gameObject);
        }
    }
}