Categories
Virtual Trajectories

Final Game and Critical Appraisal

Here is the video with the Gameplay. Also, I forgot to mention this earlier but I decided to call my game “Keep Your Cool” since that is necessary to accomplish this game’s goal, which implies a peaceful resolution for all the levels.

Note: I would also recommend that the person who plays this game is sitting down to help prevent motion sickness.

Critical Appraisal

I am very proud of what I was able to accomplish over the past few weeks, especially in terms of coding with C#. As time went on, I felt myself get more and more comfortable with this programming language, and it gradually started making more sense in my head, to the point where I knew what type of logic I wanted to use even if I did not necessarily know how to code it. In terms of overall aesthetics and concept, I also feel content with the scenes I managed to build. I feel that I was able to achieve what I had initially set out to do, therefore I think I kept a fairly coherent path all throughout this project.

However, this is not to say that there were no challenges. My most significant issues were to do with things that were extremely specific and that I would not have been able to solve on my own, for example, the shooting mechanic or the soldier following the player on the last level. I think gaining more experience and acquiring new C# knowledge is the only way for me to progress in this aspect. Furthermore, initially, I had a tendency to complicate the coding a bit too much. For instance, after using an object, I set all of the other tags to the same tag as the object I had used, so that the other panels wouldn’t pop up. This was extremely time-consuming and made for huge lines of unnecessary coding. However, I later realised that I could simply turn off the character’s colliders. But as I have previously mentioned, I reckon these are things I will most likely fix with more time and experience.

If a could take this project further, I would definitely add more object feedback, such as sound as well as animations. Secondly, I would polish many elements and make the more professional, such as the pop-up menus and even the 3D models themselves. I would also want to make the levels longer and more complicated, in order to mimic the feeling of an escape room, where there are multiple steps to get to the solution.

This project was definitely a challenge because it was my first time building a game and using coding. However, I think it was an extremely enriching experience since it not only gave me and my colleagues more experience but also presented us with a new set of skills that could be quite useful in the future.

In conclusion, I would say I was successful in my attempt to bring my ideas to life and I adapted to the challenges with the tools I was given and the knowledge I had. Even so, there are a lot of things that could be improved and there is much yet for me to learn in this particular field.

Categories
Virtual Trajectories

Game Development

Stagging, Layout and Prototyping

Before building the actual scenes, I created a few scenes just to experiment a bit with the game layout and the interaction with the characters.

I also ended up experimenting a bit with coding just to get a better idea of the type of mechanics that I will be using throughout the game.

Level 1

In level one, the options are quite limited and the interactions themselves are apparently very simple. For each item, I need to add a tag that, on collision with the character “Karen” will activate the gamestate “lose” or “win”, and then the losing/winning panel will pop up

For the gun, Herman created a file that already includes the shooting mechanic.

The only issues that I currently have are the driving option and the radio button.

Level 2

This stage is quite similar to the first level in terms of mechanics. The only difference is that on this level, the player will be able to walk. Therefore, I need to add some sort of object that activates the gamestate “lose” if the user walks too far. Meaning they can’t run away from the game.

But once again, I don’t know how I will accomplish radio button mechanics. I have to watch a few tutorials…

Note: I have also decided that the song I will use for this level is “Don’t Stop Me Now” by Queen. I find it a bit ironic since the player literally plays that song to stop the player from attacking them. Furthermore, I really like this track and I think it’s groovy and relatable to many generations.

Level 3

The last level is ironically the hardest to play but the easiest to code. The player will not be able to pick up or use any of the objects on the floor. Instead, I just have to figure out a way to keep the player from lowering their arms and some sort of solution for the hug as well. And I will also add a walking barrier, just like in level 2. However, I don’t have anything in terms of coding for this stage, yet. I will figure that out later.

Designing and Prototyping

In terms of design, I did a few sketches for the characters, which are posted on my padlet presentation. For the environments, I will be using free 3D from sketch fab to get more realistic results and accomplish that GTA aesthetic I am aiming towards.

Level 1

For this level, I wanted a very simple city scenario with a road and a couple of buildings. I got all the models from Sketchfab.

For the Karen prefab, I used MakeHuman to create the character and downloaded some of the clothes from the MakeHuman community page, which offers a wide range of free prefabs to use on the characters.

I wanted her expression to be grumpy and unpleasant. Furthermore, I wanted to embody the typical “Karen look” that we often see on social media, so I gave her a short Karen haircut and gave her some middle age looking clothes.

Level 2

The Thug level has a darker atmosphere. It’s supposed to make the player feel trapped and isolated. I got a full-scale model of an alley that captured this exact feeling and will be using it for this level. The elements are all from Sketchfab as well. In my opinion, it feels a little bit less realistic compared to the first level(and some proportions are weird), but I think it still works, especially when the other objects are present in the scene.

The Thug prefab was created in MakeHuman. I created a young-looking fellow that has this edgy expression and the mouth covered. I mainly focused on the character’s readability to make sure that he stood out in the scene, while still making sure that he looked like a Thug. For his tank top, I got a jpeg with the logo from the band Queen(Clue) and added it in photoshop to the character’s clothes textures images.

Level 3

The last level is supposed to resemble a city destroyed by war. To accomplish this look, I once again use a few models from Sketchfab a created a city that is slowly falling apart due to the bobbing and destruction caused by violence. I think this level was really supposed to embody the message that was originally intended for this game, “Reflecting on violent acts and their casualties, in a serious manner”. Therefore, I wanted to make sure it was easy to perceive by making it a fairly big open space with very readable elements.

For the soldier prefab, I tried to make sure it was very easily readable as well. I also made him a bit scrawny and scared to show that his intentions due not solely rely on violence and that he himself is scared and does not want to hurt the player, and that he is also a submissive meek character. I used MakeHuman for the Soldier, as well.

Game Mechanic and Coding

  • Hitting character mechanic (filtered by tags) – Level 1 and Level 2

This mechanism consists of creating tags that define which objects are “wrong” and which one is “right” when in contact with the character in the level (Karen/Thug). If they are wrong, it triggers the “Lose” Gamestate and the losing panels pop up. If it’s the right object the Gamestate “Win” is activated and the winning panels pop up. Also to make sure that after winning or losing, I wouldn’t be able to change the Gamstetae, I started by changing the objects tags after using an object, but later on, found out it was easier to turn off the character’s colliders.

  • Shooting mechanic – L1

Initially, I tried using the shooting mechanic uploaded by Herman on Moodle, but for some reason that was not working so, I used an extremely helpful tutorial from YouTube, which I will reference below.

  • Driving mechanic – L1

I struggled a bit with this mechanic… I was trying to create a smooth-driving car when the button was pressed, but for some reason, it wasn’t working. So I just created a very simple “if you press this button, this object’s position will be added +3”, kind of statement. And then attached a cube to the car with the tag “WrongItem1” to trigger the “Lose” Gamestate. I then attached the script to the main camera, created a button, attached the object (camera) and referred to the statement “Drive” for the car to move when I clicked the button.

  • Radio mechanic button – L1

This was pretty much like the driving script but instead of changing the car’s position, it played a song from an audio source, and then set the Gamestate to “Lose”.

  • Feedback systems – sound, animation and panels – L1, L2 and L3

For the feedback systems, I just added the required feedback responses to the already written “if statements”. For example, if tag = wrong item1, set gamestate to lose1 and karenmad.bool = true(this would trigger the animation). I just did this for all the sounds and animations for each character’s main script and attached the corresponding elements to them. Same thing with the Gamestate panels, but for these, I also added the option to follow the player’s head movement for levels 2 and 3. Also, I added coroutine timers to get more time to play the character’s animations/sounds, before the panels popped up.

  • Radio mechanic object – L2

This script was very similar to the first radio script, the only difference being that to play the song on this one, the player has to touch an object (collide with it), instead of pressing a button. And then Gamestate = lose, etc… I added a tag to the player’s hand and made it so if that tag touched the radio button object, the song would start.

  • Cross barrier mechanic – L2 and L3

This logic was also very straightforward. Basically, if the player’s hand (added specific tag) touched the barrier I created, the Gamestate would be set to “Lose”, etc. then after that, I added another physical barrier (no script) so that the player isn’t able to walk any further.

  • Parent mechanic – L2

For this one, I just followed Herman’s tutorial which would set the XR rig as the parent of each object I picked up and let me walk with them. This one took me a while to figure out. I did follow the tutorial, but for a while, I didn’t know why it wasn’t working. And then it hit me… I had set the parent to be any elements with the tag from the player’s hand and forgot to add the tag from the XR origin as well. And then it worked!

  • Hands-up mechanic – L3

This mechanic is the basis of the final level. It makes the player raise their arms by working as a collider that when in contact with a specific tag on the hand’s prefab, activates the Gamestate “Lose” and the level has to be restarted. This basically means that the player cannot lower their arms at any point through this last stage.

  • Five-second screen mechanic – L3

For this panel, I just created a coroutine timer so that the player gets a few seconds to read and adapt to this level’s rules. I also added a physical barrier so that they cannot move during these 5 seconds. Also, this timer works for the Hands-up cube by only activating it after the initial panel is gone.

  • Hug Mechanic – L3

This one was fun to think about. Basically, I wanted the player to have to use both hands to trigger the hug and get the “win” response. To do this, I tried a couple of approaches like “only if y & x” statements but for some reason, once again it didn’t work. So I thought it would be interesting if I had two cubes (one for the left hand and one for the right), when for example, my left hand collides with the left hand cube, it would set.active(true) a hug trigger on the right side and only by touching it with my right hand, will it activate the gamestate “win”. Same logic for the right hand. But to summarise, it means that you always need to hug with both arms, one to activate the trigger and one to touch it on the opposite side to get the “win” gamestate.

  • Follow player mechanic – L3

I used this mechanic to have the soldier follow (as in rotate)the player as they walk. I tried to do this for a while but it was not working. I followed countless tutorials and even tried doing it during class by also adding a rotation restraint and nothing. And then, Herman sent me a working script and it was much more simple than I’d previously thought. So yeah… now it works fine. Thanks, Herman!

  • Menu mechanic – L1, L2 and L3

For the pop-up menu, I followed a Youtube tutorial that taught me how to make it so that when the player moved it would follow them. However, later on, I had to change the trigger button because the button I was using was restricted and when I exported the game, it would not work. I ended up using a different button, and now it’s fine. Also, to back to the main menu, I created a script for each scene that pretty much subtracted a specific number of scenes to get to the main menu. For example, for the first level, it subtracted 1, for the second level it subtracted 2 scenes, etc. You get the logic. I was trying to do it in one script only but I did not get it to work. This logic was fine too so I used it instead. Finally, for the next level option, I used the same logic but added +1, and for the “restart” option, I just told the script to reload the current scene.

Update: Adding a Main Menu Scene

I forgot to mention this decision earlier but I decided to add a main menu before the actual game starts so that the player has time to get familiarised with the rules beforehand. Also added the buttons tutorial, which I thought would be pretty useful since I got some feedback on that.

Gameplay

Level 1

The player looks around and tries to find a clue.

In the first level, the player has to either pick an object to use or a button to push.

If they press any button, they lose and have to restart the level.

If they pick an object they will either pick the “right” one (solution) or the “wrong object”.

If they pick and use a “wrong object”, they lose and have to restart the level.

If they pick and use the “right object”, they win and can proceed to the next level.

https://padlet.com/umaflor6/9dya9c2gticg69k8

Level 2

After completing level 1, the player can proceed to level 2.

The player looks around and tries to find a clue.

If the player walks away, they lose and have to restart the level.

If they pick an object they will either pick the “right” one (solution) or the “wrong object”.

If they pick and use a “wrong object”, they lose and have to restart the level.

If they pick and use the “right object”, they win and can proceed to the next level.

https://padlet.com/umaflor6/vbov28a8rb6rqenu

Level 3

After completing level 2, the player can proceed to level 3.

The player looks around and tries to find a clue.

If the player walks away, they lose and have to restart the level.

If the player tries to lower their arms, they lose and have to restart the level.

If the player performs the correct action, they win and finish the game. They can then go back to the main menu.

https://padlet.com/umaflor6/6bpe1igyzw6z4wv6

Playtests – Feedback and Review

First Playtest (Colleagues) – I let a few of my colleagues try the game to get a better understanding of how I could improve the gameplay. Actually, there wasn’t much. It was mostly feedback on the first level and second.

For the Karen level, I was told to make the Karen more obvious, since their first reaction wasn’t to look in the right direction.

For the Thug level, The radio object was too obvious and the player would accidentally press the button without even knowing it. To solve this, I put the radio in a less obvious place and set the pivot/grabbing point to a much further distance from the player’s hands, so that they wouldn’t trigger it accidentally and would instead try to find how to play it.

Second Playtest (Herman) – This playtest was crucial for me to understand some of the points I really had to improve for my final version of the game.

The first thing that was pointed out to me is that I should create some kind of particle system to make the interactable objects more apparent instead of making the player figure out which ones are usable. At first, I thought this would be necessary and that the challenge of finding the objects that worked made more sense and was part of the difficulty. However, I think it left the players confused as to what they could do on the level. Therefore, I ended up adding particle systems to the intractable objects.

The other advice I got was to make the Soldier from the last level, follow the player as they walked. I’d already been trying to do this for a while but to no avail. In the end, Herman ended up emailing me with a script that worked!

Third Playtest (Brother) – I thought I would just be showing my brother the game and everything would go smoothly but I actually found one problem that really annoyed me. On the Karen level, when the player drove by clicking the drive button, it wouldn’t be disabled and my brother ended up clicking more than once, which made him drive further and no longer be able to see the “lose” screen to restart the level.

It was an easy fix by disabling the object after the gamestate was set to “lose”, but it certainly reminded me that I had to carefully evaluate all the components in my game, to make sure nothing was missing or incorrect. I’m glad I made him play it…

Other Playtests (myself) – These were the final Playtests I did by myself. And I actually ended up tweaking a few things, such as the camera/XR rig position and for the last level, I perfected the hug triggers and their position relative to players’ hands.

Overall, easy fixes but very monotonous since every time I exported the game and thought I’d be happy with it, I ended up finding something to adjust and had to save and export everything all over again.

Update: Actually, I found a relatively big problem. When I built the game, the button that triggered the menu was not working. I spent hours trying to fix this and look for a solution when I finally found a thread online with someone that had the same problem. To summarise everything, the button I was using could not acquire other functions besides its own. so the solution was simple. I had to pick another button from the VR controller.

Update 2: I ended up doing a final playtest with a couple of friends from a different course, and got some feedback that was extremely useful. First, they asked for a controller tutorial so I added that in the main menu scene. Then they said the last level’s panel’s phrase was too long and they did not have time to raise their arms, so I made it shorter. Finally, they said the winning/losing panels for the second level could follow the character instead and I agreed. Also, I found out that one of my friends was able to jump the physical barrier on the second level somehow, and fixed it.

Resources

Sketchfab Models – https://sketchfab.com/search?type=models
Moodle

Parent Mechanic

Shooting mechanic

Youtube

Shooting Mechanic(substitute)

Importing Mixamo characters to Unity

Building terrains in Unity

Creating a VR Menu in Unity

Animation on Trigger Mechanic- Unity

ChatGPT

I used ChatGPT to help me write lines of code that I wanted/understood how they would work but didn’t know how to write the language.

I cannot stress how useful this was! Because if I were to have googled some of these, the results might have been somewhat adapted to other games and would not be able to explain as well as ChatGPT did.

My problem wasn’t not knowing what mechanics I needed to use, it was how to write them. This was extremely helpful and I highly recommend it to anyone (beginner or pro) this software, cause it saves a lot of time and gives really in-depth explanations of how to apply the code to the game.

Categories
Virtual Trajectories

Game – Idea and Research

Concept

We’ve grown accustomed to witnessing human suffering like it is our daily bread. Not that we hear about it all the time, but we see it so often through images and movies and animations to the point where we don’t really feel much about it anymore. It’s so natural nowadays to go into a store and have the ability to buy a bunch of games that show violence, suffering and human killings, that at a certain point, it doesn’t even affect us. This is not to say that I’m entirely against these kinds of games, but I think it is crucial for people to not become disconnected from the ideas represented in these entertainment platforms so that we are able to separate reality from fiction.

My idea for this game is to put violence in perspective. With everything that has been happening in the world right now, I think we could make people reflect a bit more on this issue, even if it’s through a silly game.

To put it simply, I want my game to be a series of challenges that present the player with stressful and/or annoying scenarios, from which they have to escape, by picking the correct solution without hurting the other characters or getting hurt by them.

Game type – a puzzle game where the player needs to find the correct solutions to solve each level and keep progressing. It would be like a simplified escape room. (Note: Add a clue to each level)

(Note: I explain my entire idea in a simplified version I presented in class – https://padlet.com/umaflor6/mjyvsfadhumldwkf )

Levels and overall Gameplay

As I mentioned in the previous heading, there is a link to my class presentation that explains some of my ideas for the levels as well as their characters and the elements used to solve each level. However, I think it would be helpful to explain each stage a bit more in-depth.

Level 1

For the first level, the player will face an annoying situation. There will be a Karen complaining about something nonstop. The player will be inside a car (so they cannot simply run away), and there will be a bunch of actions/objects to use on Karen.

Clue – for this level will be a valentine’s day card.

Solution – giving a rose to Karen.

Twist – There isn’t one. This first stage is the easiest one and I want to make it very straightforward to give the user a very clear idea of what the goal of the game is.

Other options: Baseball bat, gun, driving the car, playing the radio, punching her(I removed this one). These are all wrong options that will lead to the player’s loss and a funny panel will pop up, telling the player what went wrong.

Level 2

For level 2, the difficulty will increase. And all of a sudden, the situation isn’t just annoying anymore, it’s dangerous.

There will be a criminal/thug threatening the player while they are completely cornered in a shady alley. The player won’t be able to walk very far (or they lose). Therefore, they will have to use the objects scattered around the floor to try to calm down the Thug.

Clue – There will be a logo of a band on the Thug’s clothes

Solution – Play the song on the radio.

Twist – instead of using this item on the Thug, the player will have to pick up the radio and figure out how to use it (so that it plays the song).

Other options – Burger, Wooden Plank, Trash Bag, Phone. These are all wrong options that will lead to the player’s loss and a funny panel will pop up, telling the player what went wrong.

Level 3

In level 3, there will be a considerable increase in difficulty. This time, the player will face a soldier pointing a gun at them, in a war-damaged city.

Clue – there will be a picture somewhere that will indirectly (or directly) tell the player what they have to do.

Solution – Hug the soldier (without lowering the arms too much…)

Twist – The player must keep their hands up all throughout this level, or they will die. They also can’t pick up any objects, but they will not know that… hehehe

Other options – Walk away, Try to pick up objects, Lower arms. These are all wrong options that will lead to the player’s loss and a funny panel will pop up, telling the player what went wrong.

Storyboard

This is also on the padlet page, posted above. But here is the general flow of the game and what happens at each stage.

Inspiration

Aesthetically, I got inspiration from the game Grand Theft Auto. I think there is also a bit of irony in picking a game that encourages pretty much just violence, as inspiration for a game that discourages it. However, I think that only makes the message stronger. By graphically communicating to the player that this is a similar game, they will be tempted to resort to violence. But they will quickly realise that this will not work.

I also looked into a game called “Toilet Chronicles”, which was shown to me by Herman. I found this game extremely funny, but what attracted me to it the most was its mechanic. It is an escape room kind of game, where the player has to gather multiple clues and solve various puzzles throughout many stages to solve all the challenges a finish the game.

There was something else that got my attention. In this game, when the player dies, a panel pops up, explaining the type of death and for each type, there is a funny little drawing of the cause that lead to the player’s demise. I think I will do something similar to this, as I reckon it gives some comedic relief to the gameplay.

Why VR?

I think this question is especially relevant considering my concept. I want the player to have to make the decisions from a first-person perspective. However, if it were to be played on a computer or console, the only way to interact with it, would be through joysticks and/or buttons. By making it a VR game, the player has to perform the actions physically and interact with the situation “first hand”. All of the responsibility of hurting other characters will feel much more present and real. Meaning the player will be able to choose to physically hurt another character “with their own hands” and see the physical consequences of their actions.