

Smurfs Village Party (2024)
Developed by Balio Studio, published by Microids, licensed through I.M.P.S.
Smurfs Village Party is a party games with an open world games. As a developer, I've worked on 11 of the 50 minigames (with its corresponding sfx/vfx, implementation, debugging, etc.), most of the VFX (from other minigames and open world), and miscellaneous features like the save system, bits of performance improvement, dialogues, footsteps, etc.
MINIGAMES
These are 4 of the 11 minigames I worked on.

Karting
Karting's gameplay is self-explanatory, but I enjoyed working with Unity's relatively recent Joint and Wheel Collider components to create an arcadey feeling of a kart.

Dice Game
Score points depending on the dice's face up when landing, and the areas you land. The areas are simple but adjustable, I decided it was preferable for the game designer to adjust them as they pleased rather than have the potential artist retake the sprites every time.

Smurf Claws
A claw machine where you grab smurf plushies to score points. I used actual colliders to interact between claw and plushie, but the plushie's core sort of sticks to the claw on the right conditions, instead of letting the physics determine whether the plushie is going to fall from the closed claw or not.

Super Smurfs
Score point by surviving against the trails, even your own trail! The trails are mixed with small colliders along it, the trail gets longer with time, and both visual and list of colliders get in sync frequently.
Smurf Concert

Smurf Concert is a rhythm minigame where you have to press the corresponding button within the time window to score a point. It has long notes and a combo multiplier. For this minigame I had to make an editor.
​
It's split in three parts:
- The bigger scriptable object editor.
- The object class Group Full Note, which has a property editor.
- The object class Full Note, which also has its own property editor.
​
The Full Note contains a set of 4 subnotes of 5 possibilities (the 4 buttons + silence), and the type of the Full Note (a silence, regular notes, or maybe it contains the start of a hold note, or contains the end of a hold note, like between the 4th and 6th Group Full Note)
​
The Group Full Note simply contains the Full Note for each player (per colon) and the time it is to be played. This time is calculated via with the Music Tempo (BPM).
​
Due to the unoptimized editors, I had to limit the view at showing 10 Group Full Notes at a time.
​
In gameplay, the note's sprites have different speeds per difficulties, but some simple math allowed me to calculate the time at which a note had to show up in order to reach the target's window in time.

Other VFX
From other minigames and the open world (non-exhaustive)
Miscellaneous
Other stuff I worked regarding the game or open world.
Of course, I can't show any actual code.

Save System
Implemented a wrapper for the different aspects linked to permanent data. It is cleaner and easier to debug for any dev SaveInterface.QuestState(QuestID.D3) which returns an enum (completed, in progress, etc.) rather than Save.Instance.GetValue("Quest_D3") which returns a float and you have to figure out how to interpret or use it (if you even got the key right).
​
Utilities
Different scripts to help debugging, drawing gizmos and overall wrappers or refactors to prevent potential bugs, or make it easier​ to work on, as we were a team that could potentially have to fix or further develop the work of another teammate, most of it wasn't restricted to just one person.
​
An example was the custom class LerpedValue. It's a variable declared where you assign a target value and speed, and its current value would lerp towards the given target. The constraint is that because it's a custom class, it doesn't have an Update method like a Monobehavior would. To circumvent this, the monobehavior has to "check" or make use of the current value in its own update. It's been mostly used to attenuate lights or audio volumes easily. Instead of just playing AudioSource.Stop(), you set the LerpedValue target to 0, assign the value to the volume and the sound will die out gradually, instead of cut and dry (when it matters of course). An example is the Karting minigame. There's drifting, and I use a LerpedValue to drive the volume of the drifting, without having to manually lerp it myself. (The video below may lag a bit because of the inspector)
​​
​
Structure
Specifically for the minigames, I mainly handled the structure or framework of these during the pre-production and production. It's an evolving structure, taking into account the previous party games the studio did. The goal was to have a simple and robust template​ to prevent new features from breaking the established norm. Furthermore, also improved from previous projects, a windows editor Minigame Generator was prepared to simply select the minigame we wished to create, and after two clicks boom, a folder was created with the minimum necessary scripts and scriptable objects etc. renamed and compiled for the minigame.
The minigames usually have a small timeline of introduction, a round system, and other features sometimes bothersome whilst debugging. Debug options to skip or change those were also implemented. Efficiency is key!
​

And that's about it!







