[GAME] My Text101 -- Jeremy Ducatt and the Saturday Prison

Hey folks! Here’s my game uploaded to itch.io as WebGL. Please let me know if you have any thoughts, see any bugs, or have any critiques/comments/concerns etc! I also included the code for my TextController below too. Thanks for playing :3 Feel free to comment over on the itch.io page as well~

Link to the game: https://benschiffler.itch.io/prison-game

/*
* Copyright (c) Ben Schiffler
* www.benschiffler.com
*/

using UnityEngine;
using UnityEngine.UI;

public class TextController : MonoBehaviour
{

    #region Variables
    public Text text;
    private enum States { cell, give_up, jeremy_0, bars_0, cell_give_up, jeremy_1, bars_1, corridor_jeremy,
                        corridor_0, corridor_1, elephant_0, elevator_0, smith, elephant_1, elevator_1, caught,
                        corridor_2, corridor_3, elevator_2, corridor_4, escape_parrot, end_dream, end_simul, end_real, wake_up};
    private States myState;

    //Whether or not you stabbed Jeremy (so that you can escape!
    private bool stabbedJeremy;

    #endregion

    #region Unity Methods

    void Start()
    {
        myState = States.cell;
        stabbedJeremy = false;
    }

    void Update()
    {
        print(myState);
             if (myState == States.cell)        { cell(); }
        else if (myState == States.jeremy_0)    { jeremy_0(); }
        else if (myState == States.bars_0)      { bars_0(); }
        else if (myState == States.jeremy_1)    { jeremy_1(); }
        else if (myState == States.bars_1)      { bars_1(); }
        else if (myState == States.give_up)     { give_up(); }
        else if (myState == States.cell_give_up){ cell_give_up(); }
        else if (myState == States.corridor_jeremy)  { corridor_jeremy(); }
        else if (myState == States.corridor_0) { corridor_0(); }
        else if (myState == States.corridor_1) { corridor_1(); }
        else if (myState == States.elephant_0) { elephant_0(); }
        else if (myState == States.elevator_0) { elevator_0(); }
        else if (myState == States.smith) { smith(); }
        else if (myState == States.caught) { caught(); }
        else if (myState == States.elephant_1) { elephant_1(); }
        else if (myState == States.elevator_1) { elevator_1(); }
        else if (myState == States.corridor_2) { corridor_2(); }
        else if (myState == States.corridor_3) { corridor_3(); }
        else if (myState == States.elevator_2) { elevator_2(); }
        else if (myState == States.corridor_4) { corridor_4(); }
        else if (myState == States.escape_parrot) { escape_parrot(); }
        else if (myState == States.end_dream) { end_dream(); }
        else if (myState == States.end_simul) { end_simul(); }
        else if (myState == States.end_real) { end_real(); }
        else if (myState == States.wake_up) { wake_up(); }

    }

    #region State Methods


    void wake_up()
    {
        text.text = "As you hear those words, you find yourself caught, for a moment, in silence. Thank you for playing. This is the real ending.\n\n" +
                        "Press P to play again.\n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n" +
                        "Press W to wake up. \n";
        if (Input.GetKeyDown(KeyCode.P))
        {
            myState = States.cell;
        }
        else if (Input.GetKeyDown(KeyCode.W))
        {
            myState = States.wake_up;
        }
    }

    void end_real()
    {
        text.text = "Just because you said it was a real, doesn't make it so. You blink twice as the SimManager slips the HUD off your skull." +
                        "What a weird game. You think you should play something else from now on, like... \"This is the real ending.\" \n\n" +
                        "Press P to play a different game. ";
        if (Input.GetKeyDown(KeyCode.P))
        {
            myState = States.wake_up;
        }
    }

    void end_simul()
    {
        text.text = "Just because you said it was a simulation, doesn't make it so. You rub your eyes as you wake up back in bed. What a weird dream." +
                        "You attempt to speak, move, get out of bed, but you cannot. You can only say, \"This is the real ending.\" \n\n" +
                        "Press G to get up and on with your life. ";
        if (Input.GetKeyDown(KeyCode.G))
        {
            myState = States.wake_up;
        }
    }


    void end_dream()
    {
        text.text = "Just because you said it was a dream, doesn't make it so. Your elevator reaches the top of the shaft, and you step it out into sunlight." +
                        "You've escaped the prison. Try not to go back there any time soon. Your parrot squawks out, \"This is the real ending.\" \n\n" +
                        "Press S to step outside. ";
        if (Input.GetKeyDown(KeyCode.S))
        {
            myState = States.wake_up;
        }
    }


    void escape_parrot()
    {
        text.text = "The elevator chimes, letting you enter. A rough scratching appears behind you, where you see Jeremy standing there, furious. " +
                        "He kicks at the teeth on the ground for a minute, then vanishes. In his place is his old casserole, just for you, just outta reach. " +
                        "As the elevator rises, the parrot on your shoulder squawks in a way that can only mean, well. What does it all mean? \n\n" +
                        "Press W to wake up, this was all a dream.\n" +
                        "Press S to step out of the elevator, this was all real. \n" +
                        "Press T to take off your headset, this was all a simulation.";
        if (Input.GetKeyDown(KeyCode.W))
        {
            myState = States.end_dream;
        }
        else if (Input.GetKeyDown(KeyCode.T))
        {
            myState = States.end_simul;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            myState = States.end_real;
        }
    }


    void corridor_4()
    {
        text.text = "The elephant walks over you and stares you down. You hear a soft plink, plink, plink as all of your teeth fall out of your mouth. " + 
                        "All 36.16 grams of teeth, straight outta your mouth. Ouch. The elephant shoves you back to the room, clearly uninterested in your toothlessness.\n\n" +
                        "Press T to put your teeth back in.\n" +
                        "Press D to approach the doors of the elevator.\n";
        if (Input.GetKeyDown(KeyCode.T))
        {
            myState = States.corridor_3;
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            myState = States.escape_parrot;
        }
    }

    void caught()
    {
        text.text = "You mull about for a time, but are soon interrupted by the sound of the scratchy forebodeance. " +
                        "The last thing you see is Jeremy, dead as a doornail and grinning like a loon, swingin' his " +
                        "lock to crack you in the dome. \n\n" +
                        "Press W to wake up. ";
        if (Input.GetKeyDown(KeyCode.W))
        {
            myState = States.cell;
        }
    }


    void elevator_2()
    {
        text.text = "The elevator chimes, letting you enter. You punch buttons, but nothing happens. " +
                    "A brass indicator on the wall shows you that you're roughly 36.16 grams over the weight limit. \n\n" +
                    "Press R to return to the classroom.\n" + 
                    "Press P to punch random buttons until something happens.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_3;
        }
        else if (Input.GetKeyDown(KeyCode.P))
        {
            myState = States.caught;
        }
    }


    void corridor_3()
    {
        text.text = "The classroom is spotless, unlike your record. You hear Jeremy's scratching stride approaching. Best be quick about it.\n\n" +
                        "Press E to approach to the elephant.\n" +
                        "Press D to approach the doors of the elevator.\n";
        if (Input.GetKeyDown(KeyCode.D))
        {
            myState = States.elevator_2;
        }
        else if (Input.GetKeyDown(KeyCode.E))
        {
            myState = States.elephant_1;
        }
    }

    void elephant_0()
    {
        text.text = "You begin crying as you approach the elephant. You're not sure why. " +
                        "It's dressed like a dentist. It looks at you with a look that can only mean: \n" +
                        "Why aren't you in class, young man? Get back to school.\n\n" +
                        "Press R to return to the classroom.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_1;
        }
    }

    void elephant_1()
    {
        text.text = "You begin crying as you approach the elephant " +
                        "It's dressed like a dentist. As you approach it, your teeth begin to hurt. " +
                        "You hear footsteps approaching. Looks like Jeremy's not far off. " + 
                        "The elephant appears busy. Probably doesn't want to be disturbed. " +
                        "At your feet, you see the ashes of Ms Smith. She died in a house fire, a the end of second grade.\n\n" +
                        "Press S to resurrect to Ms Smith.\n" +
                        "Press W to wait the elephant out.\n" +
                        "Press Y to yell at the elephant.\n" +
                        "Press R to return to the classroom.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_3;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            myState = States.smith;
        }
        else if (Input.GetKeyDown(KeyCode.W))
        {
            myState = States.caught;
        }
        else if (Input.GetKeyDown(KeyCode.Y))
        {
            myState = States.corridor_4;
        }
    }

    void elevator_0()
    {
        text.text = "As you approach the elevator, Ms Smith gives an angry cough that says you're not getting out of here that easy. \n\n" +
                        "Press R to return to the classroom.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_1;
        }
    }

    void corridor_2()
    {
        text.text = "Ms Smith nods a curt nod; that will do. She disolves into black powder and slime. \n\n" +
                        "Press E to approach the elephant.\n" +
                        "Press D to approach the elevator door.\n";
        if (Input.GetKeyDown(KeyCode.E))
        {
            myState = States.elephant_1;
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            myState = States.elevator_1;
        }
    }

    void elevator_1()
    {
        text.text = "The elevator now chimes, letting you enter. You punch buttons, but nothing happens. " +
                    "A brass indicator on the wall shows you that you're roughly 36.16 grams over the weight limit. \n\n" +
                    "Press R to return to the classroom.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_2;
        }
    }

    void smith()
    {
        text.text = "Ms Smith looks down her glasses at you in displeasure. She demands you hand over whatever you used to pick that door." +
                        "That kind of behaviour isn't acceptable here. She will write to your parents - if you had any. \n\n" +
                        "Press R to return to the classroom.\n" +
                        "Press K to hand over your boot knife.\n" +
                        "Press P to hand over your penknife.\n" +
                        "Press S to hand over your soul.";
        if (Input.GetKeyDown(KeyCode.K) || Input.GetKeyDown(KeyCode.P) || Input.GetKeyDown(KeyCode.S))
        {
            myState = States.corridor_2;
        } else if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.corridor_1;
        }
    }

    void corridor_1()
    {
        text.text = "You bust around the corner into a room you could swear you've seen before. " +
                        "It looks a little life your childhood classroom, a little like the dentist, or an office crossed with the zoo. \n" +
                        "Inside, you see an elephant dentist, a closed elevator,  and your schoolteacher Ms Smith. She's dead, and laughing. \n\n" +
                        "Press E to approach the elephant.\n" +
                        "Press S to approach Ms Smith.\n" +
                        "Press D to approach the elevator door.";
        if (Input.GetKeyDown(KeyCode.E))
        {
            myState = States.elephant_0;
        }
        else if (Input.GetKeyDown(KeyCode.S))
        {
            myState = States.smith;
        }
        else if (Input.GetKeyDown(KeyCode.D))
        {
            myState = States.elevator_0;
        }
    }

    void cell()
    {
        text.text = "Your head rings like a dancing bell. You can't recall how you got here, but it wasn't pretty. " +
                        "Jeremy Ducatt looks at you through the bars. He sits, in the way only a " +
                        "dead man can. You're all alone here, now. Just you and Jeremy's dead-eyed stare.\n\n" +
                        "Press J to view Jeremy.\n" +
                        "Press B to inspect the bars.\n" +
                        "Press G to give up on it all.";
        if (Input.GetKeyDown(KeyCode.J))
        {
            myState = States.jeremy_0;
        }
        else if (Input.GetKeyDown(KeyCode.B))
        {
            myState = States.bars_0;
        }
        else if (Input.GetKeyDown(KeyCode.G))
        {
            myState = States.give_up;
        }
    }

    void jeremy_0()
    {
        text.text = "He's dead, yeah, not much more to say. Eyes white, teeth rotten, " +
                        "nobody but you to remember him. \n\n" +
                        "Not that you'd care to. Jeremy was not a good kid. \n\n" +
                        "Killed his best man over a corn casserole. \n\n" +
                        "Press R to return to roaming your cell. ";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.cell;
        }
    }

    void jeremy_1()
    {
        stabbedJeremy = true;
        text.text = "Jeremy's deader than dead. His eyes shine white in the blade in your hand.\n\n" +
                        "You reach through and stab him a few times for good measure. \n\n" +
                        "Hope it was a good casserole. \n\n" +
                        "Press R to return to roaming your cell. ";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.cell_give_up;
        }
    }

    void bars_0()
    {
        text.text = "The bars are thick steel, thicker than the fog back home. " +
                        "And that's saying something. \n\n" +
                        "There's a thin lock. It reminds you of the locks to Ms. Smith's " +
                        "Classroom back in elementary, which you opened with your old penknife. " +
                        "Shame about what happened to her. \n\n" +
                        "Press R to return to roaming your cell. ";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.cell;
        }
    }

    void bars_1()
    {
        text.text = "The bars are thick steel, thicker than the fog back home. " +
                        "And that's saying something. \n\n" +
                        "There's a thin lock. Just like back in elementary, you jimmy the lock with " +
                        "the blade in your hand. It opens with a click. \n\n" +
                        "Press O to open the bars.\n" +
                        "Press R to return to roaming your cell. ";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.cell_give_up;
        }
        else if (Input.GetKeyDown(KeyCode.O))
        {
            if(stabbedJeremy)
            {
                myState = States.corridor_0;
            } else
            {
                myState = States.corridor_jeremy;
            }
        }
    }

    void give_up()
    {
        text.text = "You've been in here a long time. Longer than you care to recall." +
                        "Time's being what they is, you think it's time to end it. \n\n" +
                        "You fish out your fishin' knife from your boot, weighing it in your hand.\n\n" +
                        "Press E to end it all. \n" +
                        "Press R to return to roaming your cell.";
        if (Input.GetKeyDown(KeyCode.R))
        {
            myState = States.cell;
        }
        else if (Input.GetKeyDown(KeyCode.E))
        {
            myState = States.cell_give_up;
        }
    }

    void cell_give_up()
    {
        text.text = "You hold the knife, but it sticks to your hand. " +
                        "You ain't gonna follow Jeremy's way out. Not yet.\n\n" +
                        "Press J to view Jeremy.\n" +
                        "Press B to inspect the bars.\n" +
                        "Press G to put yourself back together and sheathe your knife.";
        if (Input.GetKeyDown(KeyCode.J))
        {
            myState = States.jeremy_1;
        }
        else if (Input.GetKeyDown(KeyCode.B))
        {
            myState = States.bars_1;
        }
        else if (Input.GetKeyDown(KeyCode.G))
        {
            myState = States.cell;
        }
    }

    void corridor_jeremy()
    {
        text.text = "The lock falls off and tumbles to the ground. " +
                        "Freedom tastes sweet; sweet as an apple in the winter. " +
                        "As you're about to step outside, you hear a rustle behind you. " +
                        "The last thing you see is Jeremy, dead as a doornail and grinning like a loon, swingin' his " +
                        "lock to crack you in the dome. \n\n" +
                        "Press W to wake up. ";
        if (Input.GetKeyDown(KeyCode.W))
        {
            myState = States.cell;
        }
    }

    void corridor_0()
    {
        text.text = "The lock falls off and tumbles to the ground. " +
                        "Freedom tastes sweet; sweet as an apple in the winter. " +
                        "As you're about to step outside, you hear a rustle behind you. " +
                        "Jeremy staggers forward, lock in his hand. But a couple of knife wounds keep him from gettin ya, just yet. \n" +
                        "You dart down the hallway, just out of reach. But he's followin' close behind.\n\n" +
                        "Press R to run Right.\n" +
                        "Press L to run Left.";
        if (Input.GetKeyDown(KeyCode.R) || Input.GetKeyDown(KeyCode.L))
        {
            myState = States.corridor_1;
        }
    }
    #endregion

    #endregion
}

I like your version of the game!

How did you upload your game to itch.io? Did you upload the HTML5 weblink?

Thanks! Yeah, I exported as HTML5 and uploaded it as a zip to itch.io. It was actually super easy, I highly recommend it!

Sorta weird that pressing “W” at the end just takes you to the same screen, lol. Couldn’t tell it was doing anything until I looked at your code again. Funny game, I like the elephant part with your teeth being the only thing weighing you down. XD

The writing is terrific. I feel like there isn’t much in the way of dependent states. having states depend on one another is a crucial aspect of this exercise and it is missing in your game. Basically what I mean is, there should be states that depend on actions of previous states. Nothing changes in your game.

Privacy & Terms