Inspiration
In all honesty? I just want to see people get heated over snails racing~~
It's oddly tense watching each snail slowly creep closer to the goal. Throw in a few obstacles along the way, and any lost progress feels like a punch to the gut. But that only makes each point earned all the more exhilarating!
Just like in Mario Party, players go head-to-head in a variety of fast paced minigames to collect leaves for their snail companions to recharge.
What it does
Party Snail is a multiplayer minigame party in which each player gets a giant, cool snail friend to race with. Party members compete in a sequence of fast-paced minigames to accumulate leaves, which provide your suave buddy with the energy necessary to press onward.
When players log in, they can join a game with friends through private parties or meet new ones through the public party list. The game keeps track of progress across minigames, gradually revealing who is going to feast at the finish line... and who really needs to consider upping their game...
How we built it
PartySnail was built using the Horizon Worlds Desktop Editor and the Meta Horizon Scripting SDK. I jumped between a bunch of different roles: UI designer, 3D artist, and programmer. Suffice to say... It was a lot of work crammed into just a few weeks...
I started in Figma, sketching out some layout ideas to figure out what vibe I wanted. Once I landed on a style that felt right, I moved on to asset creation. I’d never really touched 3D modeling before this project, so I asked my good friend (Mr. ChatGPT >_<) what tools might work best. I landed on Blender and jumped into some YouTube tutorials to get the basics down. I'm no pro now, but I did learn just enough to successfully create what I had envisioned
With models and mockups out of the way, I dove into learning the Meta Horizon development environment. The official documentation was super helpful, and I followed a few tutorials to catch my bearings. Also, shout out to my new little buddy "beta Gen AI" built into the editor; you created some funky art for my game environment and answered scripting questions when I couldn’t easily find what I needed in the docs :P
Challenges we ran into
Did someone say challenges? Let me tell you, this is the bane of my existence, right here:
this.props.someEntity!.as(AnotherEntityClass)
Tell me why this decides to work once in every 3 blue moons?? It behaves perfectly fine in some classes and just absolutely implodes in others. Why would you think someEntity is never when I'm yelling at you with a !? qwerfnjnwsfe (>noises of genuine frustration<)
Well, at least I can consistently expect this line to inconsistently work.
My workaround:
(this.props.someEntity as hz.Entity)!.getComponents(AnotherEntityClass)[someIndex]
Was it the best solution? Ummm... I don't know about that... But it works, and sometimes, you just keep it until you have an epiphany 236 days down the line.
The other challenges? hardly worth mentioning ¯_(ツ)_/¯
(psssst: if anyone is lurking here and has run into the same exact problem, puh-lease share your findings with me)
Accomplishments that we're proud of
What we learned
Creating this game has provided me with several challenges, which provided me with several opportunities to learn new tools.
- Challenge: Meta Horizon Link runs on Windows, but I use a Macbook for development, so I needed to figure out what additional steps I needed to do to setup my environment.
- Process: After looking into a few possible solutions (Setting up a Windows Virtual Machine; Downloading through Whisky).
- Solution: When these options didn't work out for me, I wondered if I could create a SSH connection to my desktop. This led me to the discovery of AnyDesk - A tool that provides remote access from one computer to another.
- Challenge: Once I finally had my development environment setup with Meta Horizon Link, the next challenge I ran into was learning how to use Meta Horizon Link.
- Solution: To become more familiar with the tool, I went through a couple of the tutorials on the Meta Developers page and watched a youtube video for more clarity.
- Challenge: I needed some game assets for my world.
- Solution: So I downloaded Blender and learned some of the basics before jumping in.
What's next for PartySnail
PartySnail is a work in progress and still needs a significant amount of work. While joining and creating parties work, several minigames still need to be added:
- Hawk, Snail, or Water (30 seconds): Face off 1-on-1 in a best-of-three nature showdown. Each win earns you 2 leaves, ties earn 1, and losses earn none. The overall winner of the match gets +2 bonus leaves!
- Tug of War (15 seconds): Players are split into two teams. Crank the wheel as fast as you can to drag the worm to your side! Winning team members earn 3 leaves each. The MVP of each team gets +2 bonus leaves.
- Memory (15 seconds): Flip and match as many cards as you can in 15 seconds. Each correct pair earns 1 leaf. Max out at 15 leaves if you’ve got a snail’s memory of steel.
- Maze (30 seconds) - Tilt your phone to guide your snail through the maze. First to finish earns 5 leaves, second gets 3, and third snags 1. Everyone else? Just lost in the garden.
- Leaf Dash - A chaotic sprint to the strawberry! Dodge, dash, and snatch falling leaves along the way. First to reach the strawberry wins it all—and maybe some bragging rights too.
Built With
- blender
- figma
- horion/ui
- horizon/core
- typescript

Log in or sign up for Devpost to join the conversation.