Orbit
Orbit is a personal project I created to explore multiplayer systems, state machines, FPS mechanics, enemy AI, and animation. Initially intended as a cooperative multiplayer game using Photon Fusion's "Shared Mode" for simplicity, I pivoted to PvP gameplay as developing cooperative mechanics would have been too time-consuming for a learning-focused project.
Developing the FPS player was one of the most enjoyable parts of the project. While it seemed simple at first, I quickly realized that synchronizing player actions over the network and ensuring smooth gameplay was more challenging than expected.
The enemy AI, however, was the most complex aspect. While basic behaviors were easy to implement, making them fair, dynamic, and networked added significant complexity. Tasks like target switching and synchronizing AI behaviors across the network proved particularly difficult, leading me to simplify the game and drop the cooperative aspect.
Animation was another area where I gained valuable knowledge. Using Unity's Animation Rigging package, I was able to dynamically control character bones, allowing both the player and enemy characters to aim at targets realistically. This small but impactful addition enhanced the game's polish and immersion.
Enemy aiming at target using Unity's animation rigging package.
Player aiming using Unity's animation rigging package
To finalize the game, I created a simple map, added enemies, and implemented a basic PvP mode to complete the game loop. Although Shared Mode isn't ideal for PvP shooters, I adapted by designing the shooting mechanics to ensure fairness, if one player's hit didn't register, the other player wouldn't take damage. While this made the gameplay feel laggy during testing, it was a reasonable compromise for my first attempt.
You can download the game HERE.
Dungeon
"Dungeon" was the first result of my C++ studies. Initially, I started learning the language through YouTube tutorials, mainly this playlist, where I worked on projects using DirectX and C++, while also studying in parallel on learncpp.com.
After completing this beginner's course, I wanted to test my knowledge on my own. Since I had heard about the raylib library, I decided to try using it. It was really challenging at the beginning, due to learning the language, the framework, and having little experience in low-level game development.
As I have a preference for 3D game development, I created this simple game where the goal is just to defeat all the enemies in the dungeon. It took me approximately 20 days to create. But it greatly enhanced my knowledge of the language and how things work at a lower level, especially in managing everything, mainly collisions. By far, this was the most difficult project I have worked on to date.
You can download the game HERE.
Robotim / Teacher's Area
"Robotim" was a project developed as part of my master's degree, completed in 2023. It's an educational game designed for middle school students, covering areas such as mathematical operations, the environment, international organizations, diseases, and preventive measures, among other relevant topics.
Its unique feature was the simultaneous creation of a platform called the "Teacher's Area". In this space, educators could access and analyze students' performance data within the game, including scores, playtime, number of errors, and other metrics. Additionally, teachers had the ability to create quizzes integrated into the students' gameplay, making the educational experience more dynamic and interactive.
Examples of data visualization for teachers include various instances, such as errors, time elapsed, quantity of accesses, completed levels, and many other statistics.
There's a detailed article about the game available for reading HERE (only in Portuguese), along with my master's thesis, which thoroughly explores all aspects of the game and the teacher’s platform and can be accessed HERE (only in Portuguese).
To play Robotim, you can access it HERE.
Net Rush
“Net Rush" started as a project to test 3D models and animations I built from a Udemy course. Then I got ambitious and wanted to add online multiplayer using Photon Fusion. However, my limited experience (particularly with the Host Mode topology) made it challenging.
To salvage the project, I focused on local multiplayer only, and I'm really happy with how it turned out! The online multiplayer aspect still tempts me - it would be an awesome addition. Maybe on the next project!
You can check out the game HERE.
5 [Godot] Micro-Games
This project is a compilation of four micro-games I created following the book "Godot 4, Game Development Projects" by Chris Bradfield. The book uses these four games to introduce the fundamentals of Godot.
Making these games was a very different experience. Previously, I'd only worked with Unity and C#.
To challenge myself, I decided to use only GDScript for this project (following the book's guidance
with some personal modifications). Godot introduced me to some interesting features, like the particular
VisibleOnScreenNotifier
node.
While these games only scratch the surface of Godot's potential, I did encounter some initial hurdles.
Unlike Unity, GDScript doesn't utilize private
or public
declarations,
allowing all scripts to access
each other. This can lead to tighter coupling and make debugging trickier. Additionally, unlike Unity's,
Godot's error messages on the console cannot be clicked to jump directly to the error line. This was and
can be frustrating during development.
Despite these initial bumps, Godot offers a lot to explore. Just like Blender's rise in popularity, Godot has the potential to become a widely adopted game engine. I'm excited to continue following its community and seeing future updates.
Since the book's focus wasn't web performance or visuals, exporting to HTML5 resulted in some minor performance and visual glitches. However, the convenience of testing in a web browser outweighs these drawbacks. Check them out below!
You can check out the games HERE.
Coin Dash
After diving into the world of Godot and dynamic languages, I felt a gap in my foundational computer science knowledge. So, I enrolled in CS50x and dove headfirst into C (a whole other story for another time!). The final project was to create a web server, website, or game using the LÖVE framework.
This was a whole new challenge for me, having no prior experience with LÖVE or similar low-level frameworks. Concepts like physics, collision detection, and simply showing text on the screen, which I took for granted in engines like Unity or Godot, suddenly required a deeper understanding.
Despite the challenges (especially those hours debugging circular reference errors and finicky collision issues!), it was a rewarding experience, especially for a first-timer. Coin Dash, inspired by my previous “5 Godot Micro-Games” project, is a testament to that! It's a simple, straightforward, and repetitive game, but the feeling of finishing something from scratch is truly satisfying.
Since LÖVE doesn't have a built-in web exporter, I used a convenient web conversion tool to make my project playable online. It was a bit picky about fonts, so I had to switch to one of their supported fonts. There's also a slight stutter when coins appear, but a minor inconvenience for the benefit of web play! Better than nothing, right?
You can check out the game HERE.
Third Bridge
“Third Bridge” was created as a challenge/learning experience; I wanted to delve into shaders and a bit of modeling. However, in this game, I only modeled the bridge and its lamp posts; the rest consisted of assets easily found on Sketchfab. The shaders I used included effects of droplets falling to the ground and droplets sliding along the mesh of objects, as well as a water shader.
In terms of gameplay, there's nothing particularly unique; the character simply walks/crouches, and the player must follow a fairly linear path.
You can check out the game HERE.
Endless [Music] Racetrack
Endless (Music) Racer was a personal project aimed at gaining more insight into procedural environment generation. It involves creating a game where the player endlessly drives their car, navigating ramps, with no significant gameplay beyond that.
Another goal was to have the scenery react to the beats of the music. However, when the game was exported to WebGL, this feature partially ceased to function, causing the colors of the environment to randomly flicker.
You can check out the game HERE.
Remember Us
"Remember Us" was a game created for a game jam at the college where I was studying. It heavily relies on emotional aspects, and its gameplay is essentially about looking around and clicking on items.
It was interesting to learn about rendering 3D objects on the canvas, and it sparked my curiosity about optimization, especially since the game was intended to be played in the browser and featured many graphically intensive assets.
You can check out the game HERE.
Time Lapse
"Time Lapse” is a brief game developed during the game jam at my former college. It is a simple
side-scrolling game conceived within a short time frame due to the time constraints of the competition,
and considering that most of the team were all beginners in programming and using Unity.
As a result, the game follows a straightforward approach: players move to the right, dodging obstacles, while the camera also moves. The goal is to avoid falling behind, as it would result in the player's defeat.
You can check out the game HERE.
Cowboys vs Aliens
"Cowboys vs Aliens" was a project for a game design course at my former college, where we were required to develop it for virtual reality, even though nobody had a virtual reality device.
Consequently, the game was created using SteamVR and draws heavily from the gameplay of "Plants vs Zombies." Fortunately, SteamVR has a good simulator, allowing the game to be played using a mouse and keyboard (the game was never tested on a VR device…).
You can check out the game HERE.