Inspiration

All four of our lives have been enhanced by speech recognition in some way. Owen barks orders to his Echo Dot when he needs an alarm or a change of music. With one of his hands in a cast, Cole has found a very useful aide in his Apple Watch. Danny and Jacky both make use of Siri on their phones and computers on a daily basis.

Through a combination of supreme laziness and perhaps a modicum of ingenuity, we came to the conclusion that in this modern age, there is no reason we should be using controllers to play video games. Out of this ideology Bang! was born. Bang! combines the frantic fun of classic 2D action platformers with the added challenge of issuing every command by voice. It is in part a beckon to the earlier days of video games, when they were enjoyed in the company of friends not separated by computer screen, and a look into their future, when the input peripherals we know may very well cease to exist.

What it does

Bang! is a multiplayer action platformer where all of the inputs you can give to your player are voice commands. Issue commands like "Bang!" to cause your player character to shoot or "Jump!" to make him jump. Our current demo features a player character controllable by voice command and a CPU to play against.

How we built it

Bang! is built into two components: the game engine and the web server.

The game engine runs on Python 3 and pygame and was constructed to be as modular as possible so we could easily make tweaks to current settings and add new features. Worth noting about the game engine is that we created our sprites by hand in Photoshop, a process none of us had really done prior.

The web server was built on node.js, socket.io and express.js. Our goal for it was to provide a lightweight and fast medium between your mouth and your player, while still conveying useful information such as current ammo count and health.

Challenges we ran into

Initially, we built our game in LÖVE 2D. LÖVE 2D and Lua proved to be too janky to work even in the context of a Hackathon. Our solution? After roughly 12 hours of work on the game engine in this awful, awful environment, we completely overhauled and transitioned into Python and pygame. Jacky woke up from his midday nap to find that we were now developing the same game in a completely different language.

We also faced issues with the node.js server and Python failing to communicate well and so overhauled the way we performed communication in order to prevent data from being dropped between the two. This, in fact, happened twice: the second time proving even more trying than the first, but through a combination of perseverance, we have emerged with a successful demo.

Accomplishments that we're proud of

We are most proud of the transition we made one third of the way through into the hackathon from one game engine and language to another.

What we learned

We've learned a lot of things. One, Lua is awful for us (we really are sorry if you like it, it just did not work well for us). Two, it's worth it to try different things, even if you think you're committed to one particular method. We experimented with Python and pygame and Javascript and an OpenGL-based 3D engine at the same time when we decided that LÖVE 2D was not going to work. Three, no hack is too extreme. When even multithreading proved ineffective for our data transmission, we took to the extreme: we read directly from files.

What's next for Bang!

Mobile apps, for sure (after we rewrite the parts hacked together nicely). Both of the APIs we were looking at either had limited or no functionality on mobile devices (if this were a month or two later, they probably would work) and we weren't comfortable enough in either iOS or Android development to implement apps from the get-go. Our vision for the future is of a group of friends sitting around a TV speaking into their phones and controlling the characters on the screen.

Share this project:

Updates