[Music] uh I'm Mark flurry and today I'll be talking about uh the game I made Thumper um is there anything else yes please put your cell phones on silent or vibrate and I'll remind you again about the valuation forms at the end of the talk uh so thanks for coming and uh I am part of a two-person team called drool it's myself and Brian Gibson you might know Brian he's the uh basist for the band lightning bolt he lives in Providence Rhode Island uh right and he's a artist and musician and he did all of the art in music for Thumper uh I'm a programmer I've been living in Korea for the past 5 years but I grew up in the United States and I did all the programming for Thumper and the game design of the of Thumper was a collaboration between uh the two of us
so if you've never heard of a thumber it's a simple action game you are a space Beetle cruising uh through a dark psychedelic world at high speed it's a rhythm game but our goal was always to make it feel like a unique and intense experience and different than other Rhythm action games we like to call Thumper a rhythm violence game so if you've never seen it for the benefit of those who are not familiar with Thumper at all I'll just play the the trailer that we releas released when the game came out uh it's about a minute long I just have to figure out how to get it on that screen just kind of do a drag that's good enough [Music]
[Music] [Music] [Music] oh thank you thank [Applause] you oh don't need to see it
again okay so hopefully that gives you an idea of what the game is like uh so you're controlling that little space Beetle character you play the whole game with one analog stick and one button uh so a lot of it involves just beat matching with that one button as you can see the little rhythmic cues coming at you um there's also times where you have to turn jump and fly void obstacles and uh defeat some bosses was released last October on PS4 and uh Playstation VR and steam at the same time and then a couple months later I added support we added support for steam VR and Oculus so you can play the whole game either with a VR headset or without give you an idea of our background this before we started working on thumber um we started back in 2009 and at that time Brian already had years of experience working at a game company as an effects art artist but he
had never done like all the art for a game before he' never art directed a game before and he ended up doing everything for Thumper Brian's a very talented musician but he had never composed electronic music before never done game audio never made sound effects for games before and he did all the audio for Thumper so for myself I um had about six years of professional C++ game programming experience so I kind of knew what I was doing but most of my experience was was limited to things like menus and user interfaces actually very little gameplay programming very little like serious Graphics programming uh like a lot of people I was kind of pigeonholed at my at my job and I did a lot of the same thing um I also had pretty limited understanding of 3D math or Graphics um I'd never written a line of Shader code before starting Thumper I didn't really even know what a Shader was so in that sense I was kind of starting from scratch and also importantly like neither Brian and I are never really designed a game before Thumper um we
worked on games and kind of contributed to design discussions but we were never actually like responsible for Designing the whole thing so back in 2009 uh we set a set of initial goals for ourselves number one was make an engine and I think this is largely just like a personal goal of mine I'd you know come to GDC I'd been to the experimental gameplay Workshop I'd seen what designer programmer kind of hybrid types could do and I was really impressed by that and part of me just felt like I'd never be a real game developer unless I made my own engine um I don't think that's true but this is just my how I was I was thinking about it personally and um the other goal was you know let's let's make our own game um I think this is what motivates probably just about everybody who's here at the independent game Summit you know we felt that like working at a sort of a corporate game development uh company we would never really be able to do what we wanted and realize our artistic goals and then our goal was you know we kept saying like oh yeah we'll release it within a year to um you know we said
that for the first few years of the project and um and this was the last generation of consoles so we actually imagined Thumper as an Xbox 360 game uh and of course back in 2009 high quality like VR was just a fantasy and we never even dreamed that Thumper would be a VR game so I I I entitled this talk seven years in Alpha because uh we started 7 years ago and we set our goals so far beyond our abilities at the time that you know we we just you know got kind of lost along the way many times and it felt like a real Adventure um if we really wanted to hit these goals we should have made you know a 2d game um something much much simpler and easier to make than Thumper um so it was like clim climbing a personal Mount Everest for us you know it was definitely an adventure and um before I get into the meat of the talk I'll just show you what what it actually took to make Thumper which was over seven years of development uh we built the custom engine there over
100,000 lines of code um we added support for VR we released simultaneously on Steam and PS4 and we did all that with no external QA it was just kind of Brian and us and then with some help from friends at the end um so this talk will mostly be a chronological uh review of Thumper uh the development I'll talk about key moments where I made some breakthroughs and art design and technology behind the game how I'll talk about how our understanding of Thumper evolved as we made the game and I'll also talk about how you know we changed and how our how we look at games changed because if you work so long on one project you know you're going to be a different person at the end of it uh finally I'll say that this is my story of Thumper uh Brian uh might tell it a little bit differently so the beginning involves uh concept art and um Brian uh actually started thinking about making a game and and coming up with concept art before we even uh started working together and
with his friend Matt Brinkman um these are they came up with a lot of Concepts about how the game should look and strong art Direction was always a real strength of the project and you can see from these uh early sketches the kind of dark mood and Vibe was already set and um these are all pencil sketches that Matt Brinkman made and you can see that he was creating this world out of like these little cubes cuz the idea was that it would always be Rhythm games so it seemed natural to sort of divide the world into these spatialized chunks where each Cube represents like one beat or one measure or something like that um and another thing that we determined quite early on was that the character the main character should be a beetle and this was an idea Matt had in a rhythm game you want something we wanted the character to be kind of circular so it's easy to tell where the center point is um it needs to be low to the ground so you can see over it and we didn't want some generic thing like a spaceship or car um and I think with those
constraints Matt just immediately just thought said oh it should be a beetle and that was like one of the first decisions we made in the project um and in in all of these sketches like there's so many ideas uh and he came up with these really psychedelic monster ideas these things that we never used um but are really cool and what's what what I like looking about these now is I think you could make a completely different game with these Concepts um and Thumper turned out quite a bit different but it was still uh really important um in establishing the mood and and the overall like art direction of the game another big contribution Matt made was the design of the main antagonist of the game so at the end of every level there's this giant evil head and the track that you're moving on like comes out of his mouth and that was an idea we had a long time ago we call him crackhead and uh every level he becomes kind of more uh demented and more disfigured looking and this is just early sketches that Matt made and the
the central one actually looks a lot like how he looks in the actual game so I'll move on to like some early uh prototypes that we made um I I joined the project in 2009 and uh Brian hadn't established that much of a game design Direction he had little um images like this which were you know he kind of Imagine Thumper as something where it was like a single track instead of a bunch of different notes coming at you they're just just be one stream of notes but you would be on a grid and you could turn and that would be kind of the interesting innovation of the game so you can see here like there's kind of a layout where like you're following a path and you have to make these right angle turns he also made this uh rendering let's see if I can play [Music] it it's really short but I'll play one more [Music] time so that already kind of established some of the mechanics and kind of some of the look of the game and that's what I kind of used as my target when I
wanted to start making um when actually programming so like I say I didn't really know how to do 3D graphics and the first thing I figured out how to do was draw lines so all like the early coder art prototypes had this kind of vector style um and even though this is cod R I think you know I looked back and I duck up these old prototypes and I also looked back at the emails we were sending each other at this time just to see like what we thought about these cuz I mean I look at them now and they look quite bad but what was cool is that we were really enthusiastic and so I sent this like first prototype to Brian and his reaction you know was you know perfect you know great job and you know like a month later I figured out how to actually draw quads and to Brian that was like 10 Christmases in a row um and then you know I I figured out how to do texturing and these don't even have filtering or M Maps but Brian was just you know excited about the fact that there's textures and then I figured how to do a Sky Box and load a model and you know
Brian stayed enthusiastic so um and you know I think what's really important about that is if you actually want to make your own engine like you're going to like most of the steps will not even be that fun right you'll do a lot of stuff where there's no visual outward outwardly visible um result of the work you're doing so you have to you better find some way to stay motivated and stay enthusiastic during the whole process so uh NE we didn't have much Tech experience programming experience and we also didn't have much experience as game designers so um you know we started to ask ourselves like some questions especially as we got years into this project which was is what we're doing actually interesting and will it be interesting for hours right and this is kind of the questions I think everyone asks themselves when they're embarking on a big project and we didn't really know um but we just started experimenting so I have a few clips of some early prototypes [Music]
um just bear with me here okay I'll get you [Music] [Music] so um you can see that was the beat matching mechanic moving on a grid and you can see like I we doing these weird like double like 90° turns just to like kind of show that you could move on a grid but we didn't really understand like what was cool about moving on a grid or why it was important but we still thought that that was going to be what kind of differentiated Thumper from other Rhythm games so we actually took it in some really weird directions um here's another movie so here you have a
health and you have to hit these beats to keep your health from falling to zero you have to do these really awkward and difficult Loops really fast [Music] um yeah as you can see it was really easy to mess up and it wasn't really clear how uh wish this wouldn't happen every time um you know it wasn't really clear uh you know what was going to be interesting about a grid-based rhythm game but we stuck with it for a long time and then finally we decided Well like it feels the most fun just to go really fast and and then we just started to abandon this whole idea of a grid and here's a later prototype [Music]
so in that one that one had kind of you know the fun like rhythm game thing where there's like it's really dense and you're getting really in the zone you can lock in um but it didn't really have the feeling we wanted like it started to just feel like every other rhythm game where it just kind of like looks like a UI coming at you not like you're going through a world right it was so dense the notes are so dense the turns didn't have any weight or impact to them um and then you know we made another uh prototype here where it's kind of the same thing but now we're actually like bending the track and deforming it as you're moving on it so you'll see some of the turns
kind of like appear and then go [Music] away okay so uh in that one we tried to make it more interesting by like bending the track and making you react um uh to that as you're playing just simple beat matching gameplay that also like turned out to be a dead end and we abandoned it and we didn't really figure out where we were going until a lot of um basic polish work happened um and at this point in the project you know we knew that the game wasn't that great and we were showing it to a lot of different designers and you know friends we had that we really
respected who had made great games um and a lot of their advice really didn't like match up with what we were trying to do right like we had already gone down this path for for years and when we Brian and I would talk about the game we were making we both kind of convinced ourselves that we knew what we were doing but the game itself didn't communicate these ideas to anyone else and to get a you know we had a better understanding of where we wanted to go but no clear path to get there and like this is kind of this experience of being in the wilderness that's why you know um I feel like we were in this state for a really long time during the project and it's a state where that can breed a lot of anxiety um and you can feel overwhelmed but it can also be very exhilarating um as long as you can kind of keep moving forward without the external without needing external validation and and trust yourself then it can be a really cool place to be so around this point in the project in 2011 I moved to Korea and um I think that was you know kind of a challenging time because we already spent a couple couple years on this thing it wasn't
very fun yet and we you know now that there would be a 14-hour time difference between us there was um you know a real risk of kind of losing momentum so to switch gears for a second and talk about something a little more technical like the way we tried to address this was by adding a little feature to our our uh editor and our engine so this is a screenshot of the thumper editor um there's a bunch of like little editor windows for different types of objects and the the one in the upper left is like a browser of all the objects and this is like the first level in the game and there's like hundreds or thousands of objects in this file so if I'm working on something and Brian's asleep and I'm like oh you didn't set the settings on this material correctly it would be kind of annoying you know to like have to like tell them the name of the material and and then he'd have to open this file and find it and see what I was talking about so we added a system where any object in the editor you can kind of like highlight it or click it select it and copy a URL which represents like an unique address of that uh object and here you can see what
the URL looks like the first part the DRL is like a custom protocol that you can register with Windows the second part is the path to that file and then the then the last part is the actual name of the object and uh how to implement this is detailed on my development blog with the the link down there or you can just ask me for it after the talk but this ended up being super useful and it was like one of the times when having a custom engine that we could really um optimize to our own workflow paid off and we extended it a lot too where like late in the game we made it so that you could actually copy URLs at a specific point in a level and that made it very easy to like say like oh there's a bug in like level 2-5 on beat 16 and I could just email Brian a link and would open up the game he just clicks it in the email it opens up the editor and then he's right there looking at it so to get back to like the design problems that we were working on um we didn't really figure out what the game was until we kind of figure out how the
turns work so this is an a screenshot of one of the last kind of um grid based prototypes we made where you know we found that like when you're going super fast it's it just seems physically awkward and weird to like hit a 90° turn so we kind of made the turns you know less than 90° and and then you know here we made it um a little more polish but it just looks weird right there's this weird discontinuity between the rectangular sections so we were still think think of everything as these discreet kind of blocks of of rhythmic time and Brian you know for a long time Brian kept complaining about how this looked and he didn't like the um the way these looked and I and as the programmer I was kind of like oh you're just being an artist you're just worried about polish like let's figure out the real like meat of the game let's figure out the design problem and um I don't really think that way about game development anymore and you know this is what it looks like in the finished game where the turn is this smooth surface um and I'll explain like how we got
there it's really important um also I'll go step by step and uh I remember this very well because I did most of this work when I was on a workation in Hanoi um if you're a programmer and you ever travel I recommend you bring an external keyboard and mouse and elevate your laptop to an ergonomic position it's very important um so here if you look at this track uh so if you think of this like as the path that the beetle moves down every little square is One Beat and and then basically like I figured out how we could deform the meshes so that they seamlessly matched up um it seems pretty simple when I do this but for me it was like a couple weeks of work figuring out how to do that um in a Vertex Shader I calculate a rotation Matrix for every single vertex and rotate it around one axis right um and then I'd make it make sure that it's seamless and it matches the next uh mesh perfectly um we also added this ability to make it so we could dynamically scale the meshes
before deforming them so here you can see I've uh uh made this the path thinner and then here I can also extend the path so if each block is still the same amount of musical time we can scale the path and make the beetle go faster and slower really easily um and everything's still seamless we also made it so that you could pitch the path up and you could also add a Twist so it's all three you know axes of rotation that you can apply another really important thing is figuring out how to um properly deform the normal vectors on these meshes so that the lighting looks good so you can see that the lighting is all smooth um there's no weird discontinuities and this is extra important because a big part of ther's visual look are reflection maps and these are just simple Cube Maps calculated from you know the eye position and in a normal Vector but with the normal Vector properly um deformed then the reflections look really nice and in order for this to work we had to really highly tessellate the meshes um so that they look pretty smoothly so like Thumper spends a lot of time every
frame just deforming vertices in a pixel Shader in a way that's probably not I mean in a Vertex Shader in a way that's probably not very efficient but you know a lot of I think games end up spending a lot of time doing other things like have they have real lighting or more complicated rendering or they just draw a lot of stuff Thumper doesn't draw a lot of stuff and we just spend the time on this um so you know once this kind of came together uh and here's the final image again you can see that it's a it's like a seamless smooth um curve there's a reflection map on it that has kind of a really nice iconic look um and it it seems like something that you could like hit really fast and then kind of continue going and you know beat matching was kind of the the first kind of core mechanic we settled on but I think turns and the feeling of the turns and thump are what really make it feel good and what make the game actually fun to play and I think like most action games there's always kind of one you know fundamental interaction that you play the game hours and hours for like
in a hockey game it might be like checking the dude or um I don't know shooting someone in the head stuff like that um and uh you can also see that the track is is sloped up uh and this was another advantage of this kind of dynamic system where basically the whole time you're playing Thumper you're moving up until where you're actually doing like a giant Circle through space but that helps you see all the obstacles a lot clearer and it's not something that most people notice but it's actually really important um so we uh use the same technology in so many ways and it's a real credit to Brian's kind of artistic Vision that you know something that was designed just to fix this one little visual discontinuity became like the fundamental visual tool that it used to make the whole game and um so this is what the checkpoint looks like and I just want to show an animated version of this see right so you can see
these are the checkpoints you go through in the game and it's using the same vertex Shader except we're applying a scale over the length of it so it gets like you know down to a little fine point at the bottom um and then Brian also realized that you know rather than just like deforming these simple little uh squares we could make more interesting meshes so this is a segment of something we call the ziped and this thing was something we spent like way too much time on for its actual impact on the game but basically here we're now like you know modulating colors and scale and width of a whole sequence of of of instance meshes um and it creates this kind of like evil looking worm and it's all um and the path that the worm is following is actually another sequence and he's just kind of being phased along it to animate him and you can see here in this video that um it's actually just like an animation
in the Ed you can like scrub the whole thing back and forth and like yeah we probably spent like a couple weeks just making that possible um and then ultimately uh it showed up in the game just kind of as a background element in one of the boss battles um but you know we also did a bunch of other experiments with this this vertex Shader we create a lot of different creatures and I really wish we would have found a way to put this guy in the game but he got cut um and so here like these are just some screenshots from the game where the decorative tentacles you see on the side are that same vertex Shader being animated um this boss and the and the obstacles you have to jump over the same stuff uh that it was also really important for making the tunnels that you go through because the tunnels are all seamless and they're reflective and it's the same thing we now the the mesh that we're deforming is just like a a cylinder that you're going in the middle of and we just sequence it and then Brian like you know just did
all kinds of stuff with it like this here's a a boss character this kind of spiral graph starfish where it's the same thing but now like he's kind of using it as like a weird particle system um with this radial symmetry so um you know Thumper is a music game I should say something about the audio although I think it's Unique in that it was a music game that found itself through like visual experimentation and um Brian did did all of the audio um himself and he changed like what the game sounded like so many different times there were a lot of different musical influences and the way we approached It Was Always by like making the gam playay first in the visuals and kind of just adapting the audio to fit that kind of the reverse of how I think a lot of other music games are made um I just also want to mention that I used fod as the only middleware in the whole engine and and it was great it's very Indie friendly pricing and they have awesome support so I just want to say that I recommend f mod and um
this is a this is let's see if I can get this pointer up here so this is a how we actually author gameplay and it looks a lot like a step sequencer where you know up top here he's placing things like um the Beats you have to hit the turns in the track he's making an upward slope along the whole thing and then down here he's triggering little samples that go along with the audio and I think that this tool is really fundamental um we call it like the sequence editor and it was really fundamental in how we made um the game and you know when I first started working on building the engine in tools like I kind of was you know the only thing I knew was like the engine I Ed at my old job or or unity and I was kind of trying to recreate those tools and make really general purpose stuff and I found that like it was always got the best results when I made something really specific for our game something that really like a tool that could do one thing really really well and that was a lesson I learned uh along the
way so um in 2004 you know we we um I've been working on the game for a long time and I think because we had the turns working and the game felt really well we felt conf confident enough now to submit it to uh things like the igf and it got a nomination for excellence in audio um and I went back and listened to that build that we submitted and it sounds terrible like really bad like like the mastering is off there's a lot of distortion and I really think that it was the visual elements and the funest of the game that convince people to to nominate it for audio just the fact that it's a music game kind of makes you eligible for that category so I think that's why we got that um and that was really cool this was uh us two years ago in the igf um and I think the best thing we got out of that was just meeting other game developers who were interested in our game and that was super motivating um to continue and finish the game um so I'm going to go and talk
about one more uh really important visual element of the game which are the postprocessing effects we use um and again this was something that I just considered polish and like Brian kept you know bothering me about wanting to use postprocessing effects and our engine didn't support it and I thought it was something we didn't have to worry about right away um but like to say something really obvious like everything in your game needs to be interesting or your game needs to be interesting how you achieve that doesn't really matter um I think certain games like Tetris would be interesting if you you know with no visual polish but thumbers is a game that is all about visual polish and um yeah all that matters is the the final result um and so another thing Brian said was that you know like when you think about visual effects post-processing effects are something that affect every single Pixel on the screen so in that sense they might be the most important effect you have so here's the an image of Thumper fully post-processed this is from the final
game and this is it without any of the post-processing effects I mean it maybe it looks kind of cool but for me it lacks like you know all the dynamic elements all the mood all the tone that this image has so I just want to go step by step and show what we did and all of these are really easy to implement they just took a long time to kind of tune so um first we we apply a bloom a very standard effect and then we desaturate the scene leaving the bloom fully saturated then we apply a cubic Distortion filter over the whole scene which really distorts quite a bit and it's really important for selling the sense of speed in the game and you can see that it really distorts the player character a lot um he gets way longer and nobody really knows that he's being distorted because he never really moves from that position on the screen and we kind of like the way he looks longer like that so it didn't bother us um and then we apply like a levels over the whole scene and this is just like basically modeled on the Photoshop like RGB output um black white output value filter um this was something that Brian
just wanted and he this is the one that changes the most when you play the game and it really helps like make different parts of the game have a different mood or feel and we apply a radial blur over the whole screen um this also helps with the sense of speed and then we apply a vignette um which another generic effect but this kind of um makes uh the keeps the stuff in the periphery it makes it less distracting and it's also brightens the center of it we use the overlay blend mode to Bright the center of the center point of the screen like there's no real Lighting in Thumpers so this kind of is like a fake like HDR or something um and then F last but not least we apply another vignette which we call the noise vignette and this you can see it here it only affects the sky box and it brightens the Sky Box darkens the edges of the sky box and then it applies this high frequency noise and it's you have to kind of see it animated and look really closely but there's a noise texture being played on the background this helps the foreground elements pop more more um also like I don't
understand color space Theory yet that's something I'm going to work on for the next game so there's some pretty bad banding artifacts in Thumper because we're doing everything in linear color space and this this noise kind of helps mask some of that so it's important um so to summarize the essential visual effects of Thumper we use this vertex Bend Shader to create the smooth surfaces uh we use tons of reflection maps on everything um and we use uh like a really highly tuned post-processing effect x what we don't have are um any complex lighting like we support diffuse and specular but really don't use it almost anywhere um no normal Maps no real particle systems anything that looks like a particle was just some big hack that Brian did um and the nice thing about that is you know I didn't have to program all of this stuff and this was the the ele like a real benefit of having this kind of minimal aesthetic and working with a really talented artist like Brian so I think at this point once we had um the visual look at the game that
really built our confidence and now when we showed the game like people would play 10 minutes of it and they would get excited well most people would and and I think you know for me confidence as a game designer means just like being able to stick to your guns right like you have a bunch of stuff that you don't understand yet or you don't know what you're going to do and just um feel like eventually you'll figure it out and I think that's what having the post baring effects and all the visual elements uh gave us with Thumper um so I'm going to make a little segue and like I also gained some confidence as a programmer and what's really interesting is that I'm a much different programmer and the way I approach programming is different um specific one big thing is I don't um use object-oriented programming anymore um and when I was starting Thumper it was really the default way I thought about stuff like my brain like the gears wouldn't start turning unless I like started typing out a class definition um right or started like thinking about object interaction diagrams and was how everyone programmed at my old job and that's what I thought real programmers did um and I don't want to get into like
an argument about this or something but um it's just interesting to me that I change that much and you know when you work on something for a long time you do change and if you're interested in this this is a talk by Brian Will on YouTube that I recommend uh you check out um and now what I think good code is is much different so um I have a file called avatar. CPP it's about 5,000 lines of code and almost 90% of the gameplay and input handling a lot of the complicated stuff that makes Thumper fun to play is in this one file um it's all done in a procedural uh programming style um and you know this is also the fact you know when you're on an indie game when you're making an indie game or when you're working by yourself you should probably not program the same way as you do on a big team if you want to be more efficient um another example is all the rendering code is in one giant file supports all these different rendering backends and probably some new ones soon and that's you know 90% of the graphics code is in this one file so now I'm going to talk a little bit
about how we brought Thumper to VR so like I said we never imagined that Thumper would be a VR game and my first experiences with VR um were very negative I think I used an Oculus dk1 and I did like a roller coaster and skydiving demo and just made me sick and you know most people who saw Thumper just thought it would make them very sick if they tried to play it in VR and um but you know we were very aware of all the hype and the marketing opportunities around VR and uh I ended up going to GDC China and I attended this talk um I think he also gave it at GDC Europe if you want to check it out and I thought was very interesting he talked about a lot of the physiological causes of motion sickness and in particular with um uh VR experiences what makes a lot of people sick are changes in acceleration right like when you're uh moving or or speeding up or slowing down and you know your body doesn't have that same feedback and it creates vection and leads to motion sickness so I um realized that in
Thumper you're going super fast all the time but you're going at a constant speed most of the time especially because it's a rhythm game and when you're going through the turns they're so fast that they just kind of feel like teleportations you don't really feel like you're actually turning for any extended period of time so um we got Sony to send us a psvr kit and we just decided to try um to put bring Thumper to VR and um this is uh my home office and soul and this is one of the few times in the past last like five years where Brian and I actually got to work in the same physical space he came to Korea for like 3 days and um we basically didn't leave this room for those three days and we figured out almost all of the fundamental issues bringing Thumper to VR during that time so uh one of the first challenges was how does Thumper work um with a different field of view because when you have a 2d game of course you can set the camera field of view to whatever you want and in 2D we have a super wide field of view and that really helps things feel deeper and it's essential to the
sense of speed in the game in VR um the field of view is a is constrained by the lens and the VR headset if you don't know how it works like basically you have to use the same um FV as the lens otherwise things are going to look like wrong or broken so here in VR like uh it's about 100 degrees in psvr and everything looks way closer to you and when we played the game like this it just felt kind of slow and not exciting um and so this seemed like a really hard problem to solve but Brian like instantly knew what to do and that was just to basically scale the the path by two times and and just scale everything further away from you so in VR you're actually going twice as fast as you are in non-vr and it seems like that would be insane but it feels like you're going basically the same speed so to compensate for the fov we just push everything further out and this is something that works for Thumper but might not work for a lot of games um another big question was was uh you know how big are you in the world of Thumper
when you put on the headset like if you look at this image like there's a space Beetle and all this abstract stuff there's no real world um analog to these things so originally we had it where the beetle was this big thing and you were this little tiny guy um like he's like this big spaceship or something and in this sense you felt really um detached um and distant so of course we did the opposite where um we made it so the Beetles about the size of your head and this felt like you're you were just like flying head first down this like hell ride um and it was really intense like too intense it felt like you're getting smacked in the face um and it was almost a little nauseating um and we found that The Sweet Spot was to be about where the Beetles about shoulder width about 40 cm um and this felt like you were sliding down the track kind of like a slip and slide or like a playground and this was really The Sweet Spot of intensity and comfort um and so I I saw that um you know the famous game designer Jeff who I've never met but I saw that he was developing a psvr game so I sent him a
build of Thumper and then the next day he tweeted this um and so I think this means that we got the scale correct cuz he really feels like he was you know immersed in there um I guess he never me mentions Thumper in this tweet so maybe this is just the way he lives his life like I say I don't know him but um anyway and then another cool thing we could do in VR was uh adjust the scale of the bosses so in this is crackhead in level one and you see that's about as big as he can be before he starts like going off the screen um but in VR we just make him four times bigger um and that makes that like you have to kind of look up to see him and he's like looming and more ominous so that was a nice thing about the VR experience we could do um so the stuff with all the VR like the fact that it worked out was kind of this like incredibly fortunate um and lucky thing like we kind of Chas the technology right we're like oh we've got a game it's almost done here's this big
marketing opportunity let's bring it to VR and it worked out but I I don't know that that would work out most of the time and um you know like I say most of what we did was really specific to Thumper um and I don't know that it's appical to other VR games I think that the big kind of takeaway here might be that you know when there's a new technology no one really knows what will make it interesting or successful like the engineers or the business people behind it have some ideas for sure but it's always kind of up to artists to like use it in new and unexpected ways um so in the last part of the talk I want to kind of just talk about what it took to get Thumper over the finish line so the last six months of the project you know we decided we're going to be a psvr launch title and that was the first time in the whole project we had a hard deadline and it was a really brutal experience but um the first thing we had to get through was optimization right so the game was running on PS4 was our main Target platform um at uh about
60 frames per second kind of bouncing off 60 frames per second right and then with psvr like now we're rendering the scene twice we're doing super sampling um to make it look better and we're rendering at 90 frames per second so that's almost three times as many you know pixels per second um and if you tried to do this I think like raise the bar like this at the AAA scale like you just couldn't do it right because I mean you probably have experienced Engineers who made a bunch of decisions about how art asset should be built built and you had tons of content all built to those specifications um and if you did this with like a commercial engine like Unity I think it's really easy to paint yourself into a corner where you know you've made it the whole game with one level of performance and you don't have any ability to get really deep and and Tinker or you don't have full control over the way your data is used and and ultimately you know displayed on the screen so um what would you know I think our advantage was that we had a custom engine and that I'm not an experienced Graphics programmer so as kind of banking that I'd done a bunch of stupid stuff that we could find and improve
upon um and we had a lot of help too I mean Sony was very useful like I met with Sony engineers and they helped me better understand the PS4 so actually getting the G getting GPU performance um to spec was not that hard um we did the thing where you draw um both eyes at the same time like if there's a cube in both eyes you draw that Cube for the left eye and then immediately for the right eye it's kind of called multi- slice rendering all the major VR headsets um recommend you kind of render this way um also because of this vertex Shader um I was already have using tons of Hardware instancing we're like you know we're draw we're drawing one mesh many many times so you only send that mesh to the GPU once and then you apply different parameters to it um using a Shader um and that was a big win for Thumper and then we did a few like specific things for the PS4 but not that much um kind of the biggest thing I had to tackle was optimization um I mean Thumper all runs on one thread on the PS4 so like I you
know I didn't have time to build a multi you know threaded engine so it was really just about getting that one thread to be fast enough um where basically everything happens and in most of that um as is often the case had to do with memory access and allocation um so I just want to explain what I did there with Thumper and it's a pretty simple thing that worked um and it was heavily inspired by this um blog post by Nicholas gray uh and this whole um blog that he has um it used to be called the bit squid engine but now it's called the Autodesk engine and if you're interested in building your own engine I think this is a great resource to start um so the main uh thing I do is I I use custom allocators everywhere um and so that means like I overwrite operator new like this so you can't use operator new it forces like kind of a higher level of discipline over all the code where all the code uses a custom allocator and then that kind of forces you to think about how's the memory being used and um is it being being used efficiently I also require that all
memory I allocate is deallocated so in the like Destructor of the allocators including when the program shuts down they will assert uh and this is a really good way to just find memory leaks right away and I didn't have to build like any sophisticated memory tracking tools or debugging tools this was sufficient and the reason is is because slumper allocation um patterns quite simple when the game starts up I just maloc a massive chunk of memory I take advant the fact that like you know the PS4 has what like 8 GB of memory and that's not close to how much Thumper needs to run or probably most Indie Games need to run and then so to start diving up this big chunk of memory I use a stack allocator so when you see like the drool logo like I'm basically loading you know over half the game during those like 10 seconds um and it's a stack allocator which is super easy to implement and then I uh allocate a bunch of little uh utility allocators for certain things that are necessary while the game's running like effects and animations those are almost
all pool allocators and there's a couple other ones um and then when I load a level I allocate from the other side of the stack so it's a double ended stack allocator still really easy to implement and then when the level is unloaded goes away and that can load a new level so I can do everything with this one big chunk of memory and it um avoids fragmentation problems and I just have this these are I only use four types of allocators big stack one the pool scratch and frame and these are all really easy to implement I won't go into them and um I think the thing I just want to mention is that I think there's a kind of uh when when I was learning programming there was this kind of attitude that you know memory management is super hard and it's really you know dangerous like you're going to be spending all your time chasing down memory leaks and stuff and that's not the case I don't think and it's sad that um it's not taught in in a way like this like once I read this that that blog post by Nicholas I just like a light one on and I was like oh yeah that's how you should use C++ and that's how you should
manage your memory and um and you know if you think that using like a garbage collected language or using something like Unity is saving you a lot of time like it might not actually be true um and another big advantage of optimization or the of art Direction with regards to optimization is that Brian was like totally into this minimal aesthetic and if you look at the game almost um all the scenes in the game are you there's one or two key visual elements like there's like the boss or the tentacles or tunnel we never do all of them at once um and that like kind of you know lowered the the the bar for what I had to deliver as the programmer um and you know Brian was really good about defending what was really critical about the look and but also he was really good about cutting the fat too so we didn't really have to sacrifice much visual quality to get the game running in VR and a nice side effect was that with PS4 Pro um we can render a native 4K cuz we had we had done so much optimization so so um if you look at it's easier to see on this chart like that's you know native 4K at
60 frames per second is about 500 million pixels per second which is more but the PS4 pro has a GPU that's about twice as powerful so it was well within what we could do um and then we also were able to enhance the quality on uh psvr if you're running on PS4 Pro so um you know during this whole like optimization and Bug fixing period like we were still like play test the game and like we were still really just like everything was coming in super hot and I know that we had we had this 10-minute demo that we showed many times that people really um liked but there was the whole rest of the game like you know it's like a 10-hour game and how you know whether or not that that whole thing's going to hold up and be fun and be understandable for everyone is something a question that we didn't answer until really late and I think it was um because of these people um especially that we were able to do it these are all people that you know I sent builds and like donated their their time um just cuz they were excited about
the game and it was every everything from just people like you know telling me that the game didn't run on their machine to um you know people who played the game for hours and hours and became experts and helped us add new like expert mechanics um so we're really grateful for that and like I mentioned earlier how you know there's this this feeling that like no one could help us right like when we're in the wilderness but at the end of the project these people saved us and like having like a community of other Indie developers I think is one of the most you know valuable things you can have um so like I said we had no external QA and I think the way that we got away with that was that well it's a pretty simple game but we also did tons and tons of game shows um it stopped being fun after a while but we did so many of these um that like the the build was constantly being tested we were constantly finding usability and technical issues it was running on all this different Hardware um we also took advantage of the Sony kiosk demo program where I made three
different kiosk demos over the last year of the project um and those all require a certification pass so I I got some experience doing that um we were also on the psvr demo disc which was another certification pass and um it was a lot of extra work but it ended up being worth it and then Sony also offered VR consultations where we would send them builds and they would just point out um issues with the way we were doing VR um so that was useful um I also want to just mention a couple partners that helped us get over the Finish Line like we did everything um from the business side and the marketing side ourselves and it was really hard for us to trust anyone um I mean I don't know I'm the kind of person that made my own engine so maybe that's explains it but um you know like to release the on uh PS4 in Japan which we did at the same time as everything else um Zach from Kakashi games was really helpful um and he um his business model I think is what a lot of Indie developers are looking for um and I
would recommend working for him if you want to bring a console game to Japan and also uh Chris DWI is a um Indie marketing specialist um he's kind of like a oneman company and he actually reached out to us and helped us with marketing and and press Outreach during the last month of the project when I was the most stressed out and he was really a lifesaver and I think the nice nicest thing I can say about Chris is that uh during that month he felt like part of the team and I really trusted him so um I think he you know doesn't have that much free time cuz he's just a oneman company but I also highly recommend Chris uh so the game came out um and you know it was very weird experience like this you know thing that You' worked on for so long and suddenly it's out it's done um I'm still kind of processing how I feel about it but um more than any review score or anything this um user from neoaf uh posted this image and I think this alone made it all worthwhile
so so I mean I think this kind of summarized a lot of our goals uh with Thumper it's cool to see stuff like this um but of course you know we weren't actually finished um there's you know an immense pressure to sustain and maximize um you know after so much work um we immediately started working on Vive and ocular support we added like a new gameplay Mode called play plus mode we did support bugs customer service stuff everyone has to do and I'm still working on stuff so it's really been even though it came back out in October it's really been a full-time job uh since then and uh so yeah you know if you want to go go go on your own and make your own engine that's kind of you know what you're getting yourself into um so yeah I don't know I have just maybe one more unrehearsed comment about the whole project and um you know I think when what remember most fondly about the to project is not like the kind of external validation or the
review scores or sales or anything like that it was that feeling of being in the wilderness with Brian and um you know uh having that freedom and that privilege to be able to like you know just get totally lost and like not be conscious of you know what other people are going to think about the about the game or feel about my position in the industry or anything like that and um that's a privilege that you know not enough people get and I think it's something that has to come from you know an industry or society that makes that an important thing it's like kind of like going to University or education right or getting an education you can't do that on your own it takes a community of people um so yeah I'd like to thank everyone who helped us along the way thank my wife who I couldn't have done it without um so that's the end of the talk and um we have some time for Q&A and this is my email address if you want to um message me after that
thanks um if there's any questions there's some aisle microphones um I recommend you use those so I have uh two related questions it's basically how were you full-time all seven years and how did you fund the project contract work or funding or um okay yeah I was full-time the last out of the seven years the first two years I had a day job working at a game developer and I made it worked on Thumper only like nights and weekends the next 5 years I was full-time um you know so that included programming marketing BISD all that stuff and funding was mostly savings from my job that I worked for six years and the support of my wife whose job um in Korea came with a housing stien and helped me have a low cost of living so that's how I did it um so both the uh the look and also some of your implementation notes about
Thumper kind of remind me of the early 9s demo scene of massively optimizing graphics and tiny little packages was that an influence on y'all at all uh I don't think it was a direct influence um although we like like that stuff I mean I think a lot of it's interesting I think like some of the things we talked about were like we wanted it to be really psychedelic but we didn't want it to be like light feeling or kind of wishy-washy we want wanted like hard psych you know like we wanted um and kind of like 2001 right like the monolith like that image is like so simple and stripped down but it's like terrifying um so I think yeah yeah there were so many influences more than I can mention but that that was a big one all right um did you satisfy your curiosity building your own engine and um second question would be um would you use a commercial engine knowing all the job that you need to do to actually have an engine um yeah I mean it satisfied a lot of my curiosity and you know I did
have to always remind myself that like I don't want to make engines for my you know I don't want that to be my goal my goal is to make games and um um so sometimes I felt like I went down this weird rabbit hole that wasn't necessary but ultimately yeah it was worth it um and I wouldn't I don't think I could ever stand using a commercial engine now because like even if it does 99% of what I want to do the last 1% is really important to me so does this one work yep I was wondering um I saw how you created the tracks uh with pieces being put together but in the game uh does your character does the beetle move in World space or does a track move uh around your Center Point when it's a uh when you're when you're moving uh the camera and the beetle are actually moving through space
um okay so there's actually a track out there that's being built in it's moving along yeah yeah it's being built out like 50 beats ahead of you and um I mean at one point we had it so that we could like animate everything every frame but we kind of dialed some of that back just for performance reasons but yeah cool looks great um also I made an observation that uh back when you had the 90° turns and uh it was kind of like on a grid and you're picking up balls it reminded me of the bonus stages in Sonic the Hedgehog 3 oh yeah if you want to see like a shipped version of that check that out okay cool thanks so I fully intend to watch the uh YouTube video You referred to but can you summarize in a nutshell what's wrong with objectoriented programming yeah um I'm not disagreeing I'm curious no sure I mean well this is just this is just me and um I don't want to go too long on this but yeah I think that um like that video says like object oriented programming has this goal of encapsulating things um as a way to make
um problems easier to solve and I think that it forces you to do encapsulation like all the time including really early on and the reality of how at least I program is that you know first I just kind of want to get see something working and um I want to um then like you know maybe then make it more beautiful or make it more performant or something and I just found that object-oriented programming just creates this meta problem that I'm spending all my time solving and not actually solving the actual problem I want to solve I also find it much easier to think of things often as data and and and um functions and data as separate things um especially when like you your goal is as a game programmers to transform tons of data at once and trying to fit fit something into an object-oriented programming model is not for me a very useful um tool um that's basically it yeah thanks hey so when you were making music for fper uh was the music more informing
level design or was it the other way around like did you start first with the track that you wanted to make and then build the level around it or was it more like you started with what you want to do with the level and then sort of added the music to that well yeah Brian made all the music but basically um I mean it was so iterative that like you know we're constantly changing the levels constantly trying new music so there's so much experimentation and back and forth but br ly the the overall goal was to like kind of make a fun action game and then add music that accompanied that so we never like I mean there's a soundtrack for Thumper and some people enjoy it and that's cool but like the goal is never to make like songs that would be catchy or memorable it was more about to make like a game experience that that used sound yep uh thanks for the talk um did you ever come close to quitting uh no I don't think so I mean and like I said that's like a very privileged thing to say you know it's kind of like you know I do what I want
whenever I want you know like I I I didn't really give up because um it was always something that was interesting and certainly like during the seven years that we were working on it I um there's you know you get burned out and you do have to like start thinking about like um your own like psychological well-being and like I say like there were parts of like where the uncertainty anxiety were kind of paralyzing and certainly towards the end of the project like when I think about how hard it was and how like kind of dehumanizing and brutal the act of commercializing the game was like there's certainly things that like I hope I never do again or like you know I kind of got making a game all by myself out of my system and I don't know that I want to do it the same way again just wanted to ask how did you do difficulty tuning because I'm terrible at the game I love it but how did we do difficulty tuning like I guess it was mostly just observing people and and um you know over like we kept making the game easier basically
cuz obviously we were like total experts and we had no concept of of how hard the game was um by the end of it and um so you know we did all these game shows where we would watch people and then we just you know tried to make sure that like 95% of people at least could beat the first level or get through most of the first level and I think there's also like Thumper is not that hard a game um well I mean maybe I'm biased but it's it's not that punishing right like you'll die and then you just go back to the previous checkpoint and you get to practice the same thing you just did and I think there's just something about Rhythm games that are particularly frustrating um you know you know what you have to do but you just can't do it and so that's why I think a lot of people like think it's a hard game hey thanks I was wondering um how you dealt with crossplatform problems since you just used fod as your only middleware oh yeah um so right fod is awesome because it worked out of the box and that was like something that just worked across everything but for crossplatform stuff um right like so I I first I wrote in
this really bad renderer in dx9 and that's what I was using for a long time and then once I had to port to PS4 like that Port took a long time mostly because I had to kind of make the engine crossplatform I had to build that level of indirection or abstraction into the engine um and I think that was another instance where like like naively I was like kind of anticipating this from an object orientated perspective where I was like oh I'll make like a mesh and then I'll have like a DX subass of that mesh or do the same thing materials and I just threw all that that garbage out and and started just basically doing procedural programming and and slowly refactoring things out um I don't know um nothing's that special like I think every time I've added like a new rendering backend the the the code's gotten better because I've just kind of understand um things better so yeah can I follow up um did you have a lot of support problems with different graphics cards on PC and stuff yeah I mean still
dealing with them and it's always hard to know like um you know I mean do I don't know do Unity games have all these problems I don't know maybe it's just my game because it's a custom engine but um yeah we kind of worked through them and like I say like customer service is actually a really important skill if you're going to make a custom engine because you got to convince people to trust that you're actually going to fix it and like send you a system report and and especially with the VR stuff it's still kind of like the wild west and like there's so much so many different configurations and um I think you know for 99% of people it works so that's pretty acceptable thank you yeah thanks if there are no more questions then that might be the end of the talk okay thanks [Music]
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Game Dev Unchained · 2025
Comments