Rock Paper Scissors

by Lyger Electronics

     Developed solo, Rock Paper Scissors is my first complete game and my first attempt to code something from scratch using C# and Unity. Inspired by Tiger Electronic's handhelds and Nintendo's Game & Watch of the late 80's and early 90's, Rock Paper Scissors is a simple game with minimal complexity. The player controls two hands at once, and gains points by countering rock, paper, and scissors properly.

Working Alone

     This was the first game I set out to develop on my own. I used this opportunity to ditch a lot of the organization and practices I learned in college, and try more free form development. I didn't worry about documents, sprints, deadlines, backups, or source control. Did it work out? Well, I've learned that all of those things are important, even to a solo developer. However, given how small this project was to develop, it wasn't necessary either. I also found working alone much harder to self-motivate, as the lack of dependence on my work to influence the productivity of others caused me to push things back if I woke up and "didn't feel like it" that day. I learned a lot of things about how I handle myself on a solo project that I will prepare in the future.

Game Design

     When coming up with a design for my first game, I knew I wanted something simple. I was thinking back to the basics, what people play that don't really need instruction. Titles that can be played in a matter of seconds. I exclusively looked at simple video games I enjoyed, such as Tetris, Guitar Hero, and DDR. I was particularly interested in the design of rhythm titles. Thats when I thought about the classic hand game Rock Paper Scissors. The idea struck me like a lightning bolt. I didn't have the audio expertise to create a rhythm game, but I could create something that plays like one! In coming up with a digital conversion of the cultural phenomenon, I looked towards arcade games of the early 70's, and consoles like the Magnavox Odyssey. I know I wanted to limit complexity; only allow the player a few commands and let the game length be based on skill level.

     Initially, I had planned to design two different modes: Arcade & Story. The first would be your typical "play to high score" mode, where the difficulty increases the longer you survive. The second would feature hand-drawn story panels with text, and sessions with fixed difficulties. I had intended to run with a sketchbook theme, where all art looked like it was drawn in a 7th grader's notebook. After I began replacing the placeholder assets with art I had created, I realized the theme wasn't doing it for me, and scrapped it. The intentionally bad art with comic-sans font was supposed to also feel like early 2000's flash games, but it fell flat.

     I eventually found my theme after rediscovering Tiger Electronics and Game & Watch. Designing the game around this new theme yielded many benefits:

- Since early handhelds had fixed sprites, there was no reason to make a menu system or title screen.

- Because graphic fidelity was so limited, all the art assets could be created using basic shapes.

- Because mobile users would be playing on the go, the screen could be designed to turn user's devices into retro handhelds using a cool graphic interface.

Coding in C#

     This was also my first attempt coding something in C# and working with Unity. Prior to this, I had only worked with blueprints (Unreal Engine) and Java (Processing). I found the language to be pretty easy to follow and understand. Almost all the problems I have encountered relate to the game engine- not programming logic or C#.  As with blueprint, the challenge comes down to knowing the commands.

     I've included a sample of my code here. This is the basic logic of Rock Paper Scissors.

    private void OnTriggerEnter2D(Collider2D target) //When enemy collides with Player
    {
            Hand enemyhand = target.GetComponent<Enemy>().GetHand();
//"Hand" indicates an enum that can be either Rock, Paper, or Scissor. This line is getting the Hand of the enemy and saving it.
            
         
   //Below is standard Rock Paper Scissors game logic.
            if (((hand == Hand.Rock) && (enemyhand == Hand.Rock || enemyhand == Hand.Paper)) || ((hand == Hand.Paper) && (enemyhand == Hand.Paper || enemyhand == Hand.Scissors)) || ((hand == Hand.Scissors) && (enemyhand == Hand.Scissors || enemyhand == Hand.Rock)) || ((hand == Hand.Grab) && (enemyhand == Hand.Rock || enemyhand == Hand.Paper || enemyhand == Hand.Scissors)))
            {
                AudioSource.PlayClipAtPoint(HurtSound, Camera.main.transform.position);
                GameEngine.TakeDamage();
//This function takes 1 health point away from the player
                Destroy(target.gameObject);
            }
            else if ((hand == Hand.Grab) && (enemyhand == Hand.PowerUp))
            {
                AudioSource.PlayClipAtPoint(PowerUpSound, Camera.main.transform.position);
               
//The function below basically gathers all the enemies on screen and destroys them at once
                GameObject[] Swarm = GameObject.FindGameObjectsWithTag("Enemy");
                foreach (GameObject Individual in Swarm)
                {
                    target.GetComponent<SpriteRenderer>().enabled = false;
                    Destroy(Individual);
                    GameEngine.ScorePoint();
                }
            }

            //If none of the above is true, player has defeated enemy
            else
            {
                AudioSource.PlayClipAtPoint(VictorySound, Camera.main.transform.position);
                Destroy(target.gameObject);
                GameEngine.ScorePoint();
            }
    }

Get the Game

     Rock Paper Scissors is currently in beta development. I have brought in all the final art assets and began coding the finite details of the game to replicate the feel of late 80's handhelds. In the meantime, the alpha with the original design is available to play on Itch.io.

Browser: Click here to play the Alpha on Itch.io! Use code "test".

Android: Not yet available.

iOS: Not yet available.

© 2020 Chris Schickler