Inspiration
I saw someone online reminiscing about an old game from the early days of the App Store where friends could "launch missiles" at each others real-time location, forcing each other to get up and run if they didn't want to lose the game. All that existed of this decades old game was a single screenshot, but the simple idea of forcing my friends to drop their backpacks and sprint across the quad to last another day sounded fun enough to design a whole game around. Finding groupmates was easy as everyone immediately understood the concept and was as excited to bring it to life as I was. As far as I know, the original concept was not specific to college students, but a college campus felt like the perfect place for this game.
What it does
Wizards can join a game lobby with their friends, where they'll be given 3 lives and tasked with being the last one standing! Gameplay consists of daily 8 hour "action phases" from 10 AM to 6 PM, with the rest of the day left to the "planning phase". In the planning phase, wizards can go into the app and select a target impact zone for their magic missile, as well as position a warding spell to guarantee a safe space somewhere during the day. Once the planning phase is over, wizards can launch their missiles when they think their unsuspecting friends have walked into danger. If you are unlucky enough to be caught in the blast radius, you'll get a notification, a map of the impact zone, and a timer: you have 1 minute to get out of the spell's range or you're toast!
Since magic missiles and warding spells affect all wizards equally regardless of who cast them, wizards are incentivized to be strategic and not pick locations that are too obvious or else their spells will be cancelled. The result is an engaging strategic challenge, where wizards try and outmaneuver their friends, predicting their moves and avoiding their devious traps.
How we built it
We built our frontend in Swift, and our backend with TypeScript express and Prisma, with a Postgresql database. Our database stores information about each game on the server, each wizard in those games, and that wizard's name, life total, and spell targets, and we check client-side if a wizard is in the blast radius when a magic missile is launched, so we do not store anyone's real time location in our database.
Challenges we ran into
While our group had Swift experience, none of us had ever used notifications before, so we had to learn how to send those based on updates from the database. Overall, the hardest challenges we faced were interfacing our database with our frontend. We had separate teams working on each part of the application, and even though we were communicating well throughout the experience, our main backend developer had no Swift experience, and most of our frontend developers didn't know much about backend dev, so it took extra effort to make everything work together smoothly.
Accomplishments that we're proud of
We managed to conquer Apple's convoluted push notification system, and everything worked perfectly the first time we tested it (a cause for great celebration). Our workflow avoided the worst pitfalls of rushed hackathon collaboration, and we made it to the end with (relatively) few merge conflicts. We had a ton of fun!
What we learned
- The value of organization
- Good design practices, following common design patterns to streamline our workflow and simplify our understandings of each other's code
- Haptic feedback on device
- Using prisma for push notifications
- San Marino is the oldest country in Europe ## What's next for Magic Missiles We've been talking all throughout the weekend about how we'd love to continue working on Magic Missiles and turn into something we can play with our friends. We all think the concept has legs, and we plan on sanding down the rough edges and adding more of our own creative flair to make it something special. Don't be surprised if you see any of us sprinting across campus in the coming weeks :)
Log in or sign up for Devpost to join the conversation.