Heading to my universe...David Langarica © 2025

0
Work / Robbo-Harvest Rumble

Robbo-Harvest Rumble

Game Development, 3D

Robbo-Harvest Rumble thumbnail
Role
Developer, Game designer
Team
Santiago Rodríguez, Marco Retana
Technologies
Unity, C#, Python, Mesa
View on GitHub
Robbo-Harvest Rumble thumbnail

Time to reclaim Earth from the Cutest Invasion

In the aftermath of a mutant fruit invasion, "Robbo-Harvest Rumble" follows a squad of robots sent to reclaim Earth. Tasked with subduing cute but mischievous apples, avocados, and winged mangoes, the robots embark on a heartwarming mission to restore the planet and welcome humanity back to their abandoned home.

Diving into Multi-agent systems

First, we created a server system that tracks the positions and states of various agents like robots and fruits, which interact with each other through different attributes and actions. The agents were programmed using the Mesa library, a powerful Python tool that simplifies the process of building agent-based models – intelligent systems that can interact with one another (a kind of artificial intelligence but without the self-learning part).


In the simulation, the robots had two primary objectives. Firstly, they needed to detect the location of the fruits that randomly appeared throughout the simulation, as well as the position of the bin where they had to deposit those fruits. Secondly, they needed to collect the fruits and take them to the bin. A key restriction of the project was that no two robots could occupy the same position and the simulation ends when no fruits are remaining in the grid.


The following image shows a Python-generated animation frame. The animation was used for program verification.

The basic simulation that needed to be upgraded from 2D to 3D

Restrictions and solutions

We had a restriction in our project where two robots couldn't be in the same cell. To solve this, we decided that the robots could only move in a snake pattern within a specific area (a specific and proportional number of columns). If a robot found a fruit, it would break the pattern and move towards the bin using Euclidean distance to deposit the fruit. After that, it would return to its initial area to continue with the search.

From Python to Unity

Once we confirmed that the server sent the data successfully via a local port, we decided to give our simulation a unique and creative theme. I came up with the idea of mutant living fruits (because what is more creative than that?) which my team and I found to be the most intriguing theme, and we searched for suitable assets on the internet to build the simulation's theme around that.


During this last part of the project, our main challenge was to effectively use Unity's C# integration to create a visual representation of the data sent from the Python program in real-time. Our team experienced issues with latency and fruit spawning while programming, which I resolved by creating three different prefabs for the fruits and spawning them whenever a new position was added to the array of fruit positions sent from the local server. I also ensured that the entire 3D simulation state matched the state of the server data to avoid any discrepancies.