Skip to content

[PC] Smitty the unplayed RPG is an oneiric-action adventure made on Unity.

Notifications You must be signed in to change notification settings

tmseldon/smitty_unplayedRPG

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Smitty, the unplayed RPG

Smitty the unplayed RPG is an oneiric-action adventure. You are Chak who is lost in this strange world. Without any clue about what is happening, you need to overcome the guards' attack and safely traverse this land seeking for pieces of information.

Play it here: Smitty on itch.io

Game design and technical challenges

While designing and developing this game, I found some interested points that I would like to list and detail. On future versions of this document, I will get more on depth on some of these elements.

  • Dialogue system: this system was based on scriptable objects. One main challenge was to learn and understand how to develop tools on the editor. Based on that, I was able to build the dialogue nodes in a more visual way and connect them very easily. This visual mode was really important to develop the next point.

  • Dialogue writing (tree decision): I created the dialogues in English and Spanish. By design, I wanted to try something different to the usual 'switch' between languages in the option screen. I wanted to write the dialogues with both options and make it 'natural' as selections options from the NPC dialogues. Furthermore, dialogues are written in a way that it should provide some fragments/hints about the world and story. My main goal, it is to get the player explore the environment and gave her some insights about the story behind the game.

  • JSON saving system: implementing a JSON saving system was not a new thing to me to do. In a previous job position, I develop such system to connect the game (mobile client) to a server through an API REST. However, in that past experience, the data type was very simple (floats, booleans and strings). For this new game, the data type was more complex; in some cases, I needed to save objects with information about states, progression and others conditions. The main problem on Unity, it is how to apply or get the correct 'casting' from a JSON with more complex structures. In order to implement a viable solution, I studied and analyzed this implementation: JSON implementation

  • Post processing: I wanted to create the feeling that the player was exploring an oneiric and imaginary world. Vignette, chromatic aberration, and depth of field were very important to produce the desired feeling and visuals. I did some tests on three different PCs and I discovered that in very old setups (6 years old computer) the performance was really bad. I needed to cap the FPS to 30, in order to get a decent gameplay. I will study this issue later on and look for some solution in a new version of the game

  • Sound FX: in order to get more variety on sound effects, I created a script that would set a list of sounds for each event and situation. By using Unity Events, I could trigger the corresponding sound effect from the desired list. Furthermore, I implemented a random selection from the list, providing more diversity to the played sounds.

  • NavMesh and terrain: although at first the level seems pretty lineal, I wanted to make the player look for hints and clues about the story behind the game. For that reason, I thought on a simple direct path from the start to the yellow duck, but after talking to it, the player would realize that it is not the end of the game. Therefore, I started modelling the terrain and implementing different assets to determine the level design. Also, it was important to understand how NavMesh could be modified, whether by putting obstacles/assets or by modifying the parameters. By doing that kind of modification, I implemented a secret passage at the beginning just for fun. As I mentioned before, NPC’s dialogues were meant to give hints about the game. Therefore, I needed to take into consideration the possibility that the player would discover the shortcut at the beginning or not. This was a challenge that I gave myself to design the dialogues in a way that could be coherent with all the possible player’s decisions in the game.

  • Mini quest: this is something related with the last point, when the player reaches the yellow duck, it tells to the player that it is not the end of the game. She needs to look for the ultimate power (a cactus 😜 ). Therefore, I put two possible dialogues based on the condition of finding or not that ultimate power (a boolean flag). Based on that, the final dialogue is triggered and the game ends.

  • Balance weapon, damage, enemies: this part was really fun to do. Progression and data about weapons and enemies was done using scriptable objects. The fun part for me was balancing and trying different values, because it had the same feeling when I prepare a tabletop rpg session for my friends. Having that realization was interesting, and I will look for other systems and mechanics that I could mix and bring into future video games.

  • Music and aesthetics: this part was really important to me to do it well. The main goal of this game is to create the feeling of exploration and discovery into this strange world. For that reason, the selection of the music, sounds effects and visuals were essential to achieve this goal. Furthermore, every of these elements must be consistent with the mood of the dialogues and the gameplay as well. The song on the lonely planet with the duck (after going through the portal) was perfect from the beginning, it is really ominous and it fits into the scene’s atmosphere. On the other hand, the song for the main part was changed a couple of days before compiling the final built. At the beginning, I toyed with the idea that everything was strange but humorous. So, I selected a song that was goofier and light hearted. However, when I was close to finish the game, I felt that it was not the correct mood that I wanted for the player to experience. Based on everything that was already built, I decided to look for different approach: epic but ominous/darker. After trying a couple of options, I felt that the selected song was the correct one.

  • Raycast and Cinemachine(?): there is a bug at the beginning of the game related with the movement (that it is based on raycast). If you play the game and don't trigger the opening cutscene, you could go to the edge of the terrain and try to look the giant Chak. However, after the cutscene is played, that is not possible anymore. I haven't identified yet the origin of the issue. However, maybe it is something related with changes on the offset where the camera is 'looking'. I suspect that after the cutscene, there is some kind of rearrangement into the camera's range and that could be causing issues with the raycast when you try to move Chak into that zone.

  • Observer pattern: I've been using a lot of this pattern in this game. There are a lot of systems and events that are tightly related, so this design option was very useful. For instance, 'level up' is a very important milestone in RPGs; and when that milestone is achieved, several elements - sound, effects, UI, among others - are triggered when the player gets the required experience points. With this pattern, you can let systems know when the moment is reached, making dependencies more manageable than caching references with GetComponent() or FindObjectOfType() for all the scripts/systems involved. I tried both Unity and C# delegates implementation in this game. Just to have a broader knowledge about when to use it or not. UnityEvents are really helpful when you need to access them from the Editor.

  • Singleton pattern - Music Manager -: I use the singleton pattern for some particular scripts. One of them is the Music Manager who is responsible of managing the volume of the music. It is a very simple manager that takes the player's preferences from PlayerPrefs class, and you can set this parameter on the Option Menu. However, there was a bug when the player returns to the main menu from game. The Music Manager would cause an error due the un-subscription at OnDisable(); to resolve this issue, I commented the OnDisable() portion and added a delay to initialize the Music Manager. It seems there is a problem with some racing condition that I need to check on detail later.

About

[PC] Smitty the unplayed RPG is an oneiric-action adventure made on Unity.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages