Pack Mentality is a phone-based multiplayer installation where a crowd gathers together to populate a collective screen. It combines game design (Unity on the collective screen) and web design (html, css & js on the user’s phone). Where the QR code of the installation becomes the door to the user interacting with the environment.
I’ve developed this idea of wanting an interactive diorama since my bachelor studies in Digital Media, combined with the website hosted on the phone component developed further post-graduate studies that included projects like SOS2 to stress-test those initial ideas back in 2024. That core idea of linking an interactive component linked with a user’s phone by taking them to a website ultimately kicked off a series of works in this very format.
User’s phone > QR Code > Collective experience.
This project became the flagship piece of my practice thus far. It was the longest standing project that I’ve ever worked on, expanding from first year MAGI (CPS class) until now. It’s undergone the most transformational major updates as it goes into dissemination mode. Several playtests this year have given the direction and decisions that will eventually lead to the project’s final completion.
The game design itself consists of player’s choosing a role, then opening categories of playing cards that spawn in whatever that card is shown as.
Each card has a unique abiility that directly effects what is being shown in the envrionemnt. The envrironment then responds to those cards being chosen. Each interaction contribues to a progress counter, which then sends in waves of enemies that they player can react to using their cards.
Their collective goal is feed the environment and fend off monsters as they do so.
The game mechanics are inspired by games such as World of Warcraft Classic (Dungeon gameplay loop). Risk of Rain 2 (ability mechanics and visuals) and Terraria (art direction). It’s really just been a huge passion project inspired by a lot of the games I’ve played in the past. I’ve attempted to synthesise a succinct experience in an installation design format where player’s are forced to gather around socially. The games latest iterations attempt to foster and play with those incidental conditions.
The phone and the installation have to agree with each other in real time, and almost every hard problem on this project came from that one requirement rather than from the game design. The guide documents three attempts at it.
The first was a Node WebSocket relay on Render’s free tier. It worked, and it was free, and it was fine for low-level interactions like spawning an object into Unity from a phone. What it was not fine for was feel: the free instances sit in Singapore, which put roughly 150ms of round trip between a thumb and the screen it was meant to be driving. Interactions rubber-banded. In an installation where the whole proposition is that the thing in your hand moves the thing on the wall, that latency is not a performance detail, it is the work failing.
The second attempt moved the server closer: an Ubuntu droplet in Sydney, running 24/7 on Node and PM2 behind a firewall. That fixed the distance and introduced a different problem.
Browsers require a secure WSS. But WSS needs a domain and a certificate.
A free DuckDNS subdomain answered that, and worked perfectly at home. It then failed at the venue, because the campus network would not resolve the subdomain at the installation site. This is the kind of fault that only exists in public space: nothing about the code was wrong, and the work still did not run in the room it was built for.
So the third attempt bought a real domain. packmentality.cc now terminates at the Sydney droplet through Caddy, which handles certificates automatically, with the original Render relay kept as a fallback. Phones join over whatever network they have, venue wi-fi or their own data; the installation machine runs Unity and a WebSocket client, and holds the object spawning, player list, QR onboarding and chat log.
Players, on their own phone network or the venue wi-fi
Web app front end, onboarded by the QR code in the environment
Interactions: joystick, cards, name tags, WebRTC stream
DigitalOcean droplet, Sydney
Caddy auto-TLS reverse proxy, packmentality.cc:443
Installation, projector or screen
Unity environment, WS_Client.cs
Spawns objects, player lists and QR, chat logs
The established back end, from page 11 of the guide
What that stack buys is not just reliability. It makes the piece portable: a venue needs a network, a computer and a screen, and if it wants more simultaneous players than the current lobby cap, that is a server cost rather than a rebuild. The phone side also outlives any particular installation, since the web app keeps working whether or not a projector is pointed at a wall.