Hello there! :)
This is my fourth released game and I’m excited to write about its development in a Post Mortem type article. Nubs’ Adventure is what I would call an “Exploratory Platformer”. You play as Nubs, a little guy whose house gets destroyed by evil red dudes and accompany him on his adventure to rebuild his home. The game is released on iOS, Android and soon desktop systems (Windows, Mac, Linux).
If you like, you can get Nubs’ Adventure here:
This article starts with a list of aspects that I found noteworthy, which either turned out to be “good”, “bad” or “ugly”. I’ll also try to formulate what I’ve learned during the development of Nubs’ Adventure and what I want to improve in my next projects in chapter “Lessons learned”. Additionally, I kept track of my working hours during the complete development process, from which I’ll try to derive valuable information and data for future efforts in chapter “How long it took”. At the time of writing, it is too early to release sales figures unfortunately. The same applies to the monetization model I chose, marketing efforts and conclusions on how good or bad that went. I will definitely publish my thoughts on these topics (including sales figures) once I have enough data though.
The good, the bad and the ugly
Putting things into categories is fun, so I did that. Let’s start with the good stuff:
The Good
In-game map editor
One lesson I learned from my last game Rico is that if I want to be creating levels manually (that is, not procedurally generated) and in a reasonable quantity, I must take the time to develop a map editor. I wanted the editor to be in-game, so I could pause the game while playtesting, switch to editor mode, change something and switch right back to playing again. I could have NEVER created enough content without a proper level editor. Creating content takes SO much time (see the corresponding “ugly” point below), developing a fast and usable level editor was definitely time well spent. The editor was developed with having myself as the only user in mind. No other person would (or could, for that matter) use it, which lead to a lot of development shortcuts. Here’s a screenshot of the mapeditor:
There is no proper GUI or drag-and-drop interface. For example, you hit ‘G’ to go to ground-editing mode, draw a closed loop with your mouse, then hit ‘space’ and the polygon will be filled with ground tiles. Or you type the beginning of ‘movingplatform’ (you just need to type until the mode you want is unambiguous), define the moving platform’s size with the keys 1-4, then draw line segments to define its movement path. Finally, hit ‘space’ to place it or ‘escape’ to cancel. All other elements in the game can be added in a similar fashion. The editor was relatively fast to implement, quick to work with, but definitely not user-friendly. I didn’t care though, it let me get the job done fast most of the time and that’s all that counts for me.
libGDX
Nubs’ Adventure is my fourth game developed with libGDX. Much has been written about libGDX and its ecosystem, but I think it cannot be stated enough: libGDX is AWESOME! Mario and the other contributors have created such a fantastic game development library. Unlike “bigger” engines like Unity or UDK, it sits at just the level of abstraction I enjoy. In the past couple of years I’ve been working with libGDX and I’ve built myself quite a few things “on top”, but that’s just my personal preference. And the point is that libGDX allowed me to do this, rather than force me into a certain workflow or development style. Simply put: libGDX is AWESOME!
A decent (code) base to build upon
My previous game served as a good base in terms of code. Many classes I could just take out and reuse in Nubs’ Adventure. Both games being 2D platformers helped a lot of course. Many “utility”-classes grew in functionality during Nubs’ Adventure’s development, and I will again be able to transfer large parts on to the next project.
But code wasn’t the only thing I could reutilize from Rico. I gained a TON of experience regarding cross-platform game development: dealing with different device resolutions, input methods, form factors, different app store requirements, Apple’s review process, dealing with customers/bug reports, … the list goes on. All these skills took me a long time to acquire and it was often a painful process riddled with setbacks. Today, Nubs’ Adventure is the game where I was able to hone these skills and put them to good use.
Creating decent graphics without (being) an artist
I’ve always struggled with the graphical part of my games. I consider myself a programmer/engineer/developer, but definitely not an artist. I never properly learned anything about drawing. Professional artists learn about anatomy, colors, practice different art styles and techniques and do all sorts of other things I have no clue about. Besides for my games, I haven’t drawn anything since art class in school. Creating art for my games has always been a big obstacle for me. It even dictated what kind of games I set out to create in the past. The style I’m most comfortable with is low-res pixel art (I’m a walking stereotype, I know). It’s the only type of art-style I can create something in and – given enough time – not be downright embarrassed about it. But I’d still describe my general workflow when creating art as “throw random pixels at the screen until it’s ok”. Creating art is a long and error-prone process for me.
The main reason why this item is on the “good”-list is because I enhanced my crappy art skills by leveraging my programming skills to produce reasonable results. My main weapons of choice in this battle included – among others – randomization, parametrization and particles, all things a programmer can work with. Screenshots probably do a much better job at explaining than words. So here’s a GIF:
On the left, you see the (upscaled) base sprites that make up the cave scene on the right. They are all really simple! Three bare-bone tilesets, two for the back- and foreground-layer and one for the water, a bunch of small bits like rocks, stalagnates and vines. Also, a single sprite for the particle effects (torches, diamond). Especially the rocks are reused many times in different tints and sizes: Once over the whole background, once for the blue-ish background layer and then again to decorate the borders of the foreground layer in a brown hue. Another area where I applied that technique to break up repetition and make the scene more interesting are the “grassy plains”:
Adding a lot of small grass pieces, as well as small flowers and rocks break up the monotony and make the place feel more “alive”. All the pieces are placed programmatically by defining rules regarding what goes where and in what quantity. The final result is rendered to a texture and drawn to the screen with a single draw call (except the moving parts like the particle effects).
You could call this approach “procedural” in some way, but that would probably do a disservice to true procedurally generated art. According to Wikipedia the definition seems to fit though.
Maybe this approach inspires others to try it out themselves. If you’re a indie developer (like me), don’t know a lot about visual art and can’t draw (yup, that’s me), but still want to create art for your games (artists don’t grow on trees, after all), maybe this works for you! It did for me! :)
Beta tests
Towards the end of the development, the urge to show Nubs’ Adventure to people got bigger and bigger. I decided to start with an internal Android beta test for invited players. I couldn’t get many people to play at first though. I partly blame Google’s difficult beta test program which requires joining a Google+ group, which even I myself had trouble with. Shortly after, I decided to release an open beta on Android that everyone could download and check out (this is not allowed on the Apple App Store). The build was simply uploaded to the Google Play Store like any “official” release, I just marked it with “Early Access” in the title. Strangely enough, some Youtubers already picked up the game in this state. One even got ~11000 views and lead to a lot of (Russion) players.
I also did an invitation-based beta for iOS via TestFlight, which attracted some really dedicated beta testers who provided valuable feedback. One example where this was indispensable was the following: as Nubs’ Adventure is sort of openworld-ish, it is definitely possible for players to get lost. Before the beta tests, I was aware of that, but didn’t realize the amount of confusion the game triggered. Some players didn’t open the minimap when they got lost (which made me introduce an NPC at a critical point in the game who specifically hints to players that they could always check the minimap if they were lost). Other’s found the minimap to be lacking in detail and that it didn’t provide them with enough information about where to go next. After the beta, I spend some time improving the minimap and I think that has definitely paid off.
On Android, where I released the open beta, I also implemented a way for players to donate money by buying me a virtual coffee:
That served two purposes: obviously, to gauge player’s interest and to maybe raise some money (which it did, even if not a lot). But secondly, it also allowed me to test whether I implemented Android’s IAP services correctly. If you’ve ever implemented IAP functionality yourself, you’ll probably know what I’m talking about. Even getting to a point where you can successfully buy your own products in a sandbox environment took me quite a while. Without doing the beta tests, I would have never been truly sure whether or not I did everything right and if it would work once the game was released.
Closing words: YAY for beta tests! :)
Cross platform testing
Cross platform testing and deployment worked amazingly well…and it’s all thanks to libGDX. Since they switched from Xamarin to RoboVM, I was able to set up a development environment in Eclipse where I could deploy to all platforms I wanted to support (iOS, Android, Desktop) with “a single click” (it’s a bit more than one, but you get the point). Luckily I have iOS and Android devices to test on, but testing in the simulators/emulators also just worked™. A lot of the differences between the ecosystems are smoothened out and for the most part, I was able to concentrate on the game itself, rather than platform intricacies.
The Bad
Lacking the bigger picture
I didn’t really plan out Nubs’ Adventure from the beginning. I always had ideas floating in my head regarding mechanics, enemies and level designs, but the overall picture was somehow missing… or at least not well articulated.
Especially at the beginning of development, I came up with things that felt cool to me at the time and just implemented them. I didn’t give much thought to whether they fit into the grand scheme of things as I didn’t have that bigger picture. This is the reason why I feel that some of the game’s elements feel out of place. I don’t want to go into detail which elements this applies to because it seems like a very subjective topic and given enough time, I might come to appreciate these elements yet again.
What I definitely regret though is the lack of a big picture from the start. I wanted to make a platformer that emphasizes the exploration aspect more than my previous games. And I also quickly decided on the motive for exploration for your character Nubs: your house is destroyed by evil guys and Nubs becomes homeless, forced to find a new home. But other than that, I didn’t know until late in development how I want to close this arc. Does Nubs just find a new house in the end? Does he build it himself? What is the purpose of all these diamonds you find scattered across the world? The idea to add a magical fairy that rebuilds the house for Nubs if you bring her enough fairy dust was kind of an afterthought. I forced myself into a corner in terms of story and that dictated how I can close it up. I also didn’t find the space to tell the story about why the red guys actually destroy his house. They come across as stereotypical bad guys that are evil just because. I generally hate it when characters are this one-dimensional, but I wasn’t able to fit their backstory into the game properly, which makes me a sad panda. :(
Writing
There’s not much I can say about it other than: I’m terrible at writing good dialog. I find the dialogs in Nubs’ Adventure partly boring/uninteresting, partly downright cringeworthy. Not being a native English speaker definitely plays a role here, but I doubt good English alone would have been the saving grace. Before Nubs’ Adventure, I’ve never put much thought into a game’s writing. Nubs’ Adventure’s development made me realize that writing is a truly important and complex part of a game… and that it’s very hard to get right.
The Ugly
Content creation
Oh god, it takes SO. MUCH. TIME! The two things I’ve grossly underestimated in terms of how much time is required are level design and the cutscenes. There’s so much effort that has to go into designing a good level, it’s absurd. Well designed levels are a combination of architecture, enemies, traps, collectibles and all the other pieces that make up the game. Change one of the things and the level you have worked on for so long might just be utterly broken. Especially the way in which you design your enemies places a lot of restrictions on the types of levels you can create with them. Changes later in development result in catastrophic amounts of work. Iteration is definitely necessary from a game design standpoint, but turns into a fickle bitch when I have already created X levels containing enemy type Y and now have to redo all of them because I changed its behavior. But even when I properly playtested all the elements before starting to design levels with them, the creation process was still long and dominated by iteration.
While I had a decent workflow for creating levels thanks to my map-editor, it didn’t look so good on the cutscene front. I had an XML-based file format for defining a cutscene, so working on one generally meant: writing/changing some XML tags, getting the game into the state to play the cutscene (by triggering it with my character for example) and observing it. Rinse and repeat. Over. And. Over. Again. I always had to watch the cutscene from the start! You can probably see how much fun it was to apply some tweak to the ending of a one-minute cutscene. I implemented basic controls to at least fast forward to the point in time I was currently interested in, but the workflow was still abysmal. Why I didn’t improve it? Couple of reasons:
- I wanted short-term results and didn’t want to spend a lot of time improving my tools (I talk about that in chapter “Lessons learned”)
- My codebase didn’t allow time-rewinding. Try telling your physics engine of choice you want to rewind time… mine (Box2D) didn’t like that very much.
- I genuinely thought I didn’t need it because I only planned for a handful of cutscenes in the beginning. In hindsight, having a workflow this bad for designing cutscenes was the main reason why there are so little in the game, not the other way round.
In hindsight, creating the cutscenes for Nubs’ Adventure was the worst part of the whole development process. :(
Motivation
So much was been said about motivation in the context of indie game development… and it’s all true!
My motivation faded towards the end. Development came to a grinding halt. I couldn’t even force myself to look at the game sometimes. Feelings of despair and futility cropped up. “Is it even worth it?” and “will anybody care, even if I do finish it?” were thoughts that crossed my mind more often than I can count.
On top of that, the infamous 80-20 rule struck hard, really hard! If you take a look at chapter “How long it took”, you can see its manifestation crystal clear. There are months with very little or even no progress at all. At the time I kept telling myself that I had so many other things to do (Master’s degree, day-job, other projects, life in general, …) and because of that can’t work on Nubs’ Adventure. Now, having put a safe distance between me and those moments, I can say: I deluded myself. I could have worked on Nubs’ Adventure, I just chose to not do it! There would have always been time, I simply didn’t want to! A few days of inactivity would be justifiable, but a WHOLE MONTH? Definitely not!
I wish there was much I could say about the issue that would improve it. Being aware of the fact probably helps, but there’s no silver bullet in sight. I’m currently trying to find the sources for why my motivation faded. Maybe identifying the reasons can offer some salvation.
How I still managed to finish? Perseverance, probably. The simple realization that I had to work on Nubs’ Adventure even if I didn’t want to.
Reading one of the many motivational articles on the topic probably also helped as well as reading about other people’s success stories regarding finishing a game. In the end it was a case of “shut up and finish the game”. I wish there was a better answer… but there isn’t :(
Lessons learned
Improving my workflows
I’ve never been one to do things in a roundabout way. If there’s something that needs to be done, I jump right at it. I’ve never liked doing preparatory work because I felt I’m moving away from the solution and the completion of the task rather than towards it. Working on Nubs’ Adventure showed me that it is more often beneficial in the long run to do prep work and to do it properly. Instead of exporting images from Photoshop 100s of times manually, invest the time to learn how a macro is made and bind it to a hotkey. Instead of cleaning up assets manually, invest the time to write a shell-script that does just that. Dozens of tasks would have been much faster if I had invested the time to do it right from the start instead of wasting a lot by doing it over and over again.
An example: according to my notes, designing the icon for Nubs’ Adventure took around 15 hours. Here’s the final result:
Doesn’t look like 15 hours of work, does it? But this is not the full picture. Between Android and iOS, you need a total of about ~20 different icon sizes. Luckily, I looked for an Illustrator template and found a good one for iOS. I used that as my base and added the necessary sizes for Android. The template allowed me to design the icon once but export into all resolutions with a single click. Except for one thing: I wanted Nubs to look pixel crisp on all sizes (ranging from 40x40px to 1024x1024px), so I invested time to make that work in Adobe Illustrator. I spent quite a few hours trying to get Illustrator to resize smart objects in a way that kept the pixels crisp… it didn’t work. I had to cave in and manually resize Nubs for each resolution, then apply the glow effect to it. But the template still saved me a lot of time as the background is not pixel art and hence could be resized (and antialiased) automatically. Combined with two shell scripts for renaming the files and creating the proper folder structures, I had a virtually automatic “build process” for app icons for Android and iOS. Iteration is still the fickle bitch it always was, making me redesign the icon at least three times… but the decent workflow saved me from a lot of tedious work and made the process bearable. Morale of the story: I’m so glad I spent the time to develop a template for creating app icons!
This is of course easy to say in hindsight, but when you’re in the thick of things, it was often hard for me to go: “no, I’ll NOT just do this now, I’ll take a step back and examine if I can improve my workflow somehow to make future tasks easier/faster”.
Not all tasks require this much attention to their workflow. It depends on how long a tasks currently takes, how often you expect to do it in the future (which is almost always more often than you initially think, see the icon design example above), how much time an improvement would take and how much time the improvement saves you. I wouldn’t generally advise calculating all these parameters, putting them into a formula and deciding from there… but even making yourself aware that the parameters exist can help you estimate whether or not it’s worth it. Or use a cheat sheet:
Another factor to think about when looking at your development workflows is the FUN. How much fun is it to do what I’m currently doing? As an indie dev, you need to draw motivation from the work you’re doing. It needs to be fun. Just working based on the motivation from having a finished game one day in the future is not enough, at least for me. I NEED to enjoy what I’m doing NOW to some degree, or I’ll not ever get to the “finished game”-stage. Doing monotonous, repetitive and mundane tasks is NOT fun. Burning out on a project is a HUGE risk for indie developers (see the ugly point about motivation), which makes managing the fun factor during development even more important!
The realization of doing preparatory work wherever reasonable was not an epiphany. It didn’t suddenly dawn on me, but was a rather slow learning process. After all, I already did SOME things right at the beginning of development, by implementing a proper map-editor for example. But many parts of the work I did could have been done faster, more efficient, all while having more fun. If I had just taken the time to analyze the workflow first rather than jump right in.
Do more prototyping
One of the main initial premises for Nubs’ Adventure was the exploration of game mechanics regarding the space in a typical 2D platformer. In most games of this genre, the action takes place on the ground. Not that much time is spend in the air, and much less underground. I wanted to explore these two spaces with Nubs’ Adventure. I thought about how movement in the air and underground feels like and how it differs from ground-based movement. What flies, what tunnels through the ground?
I eventually decided on having three distinct controllable characters:
- Nubs, who’s your regular platforming hero
- the wisp Ally, who’s tiny but can fly (and subsequently explore spaces Nubs can’t go to)
- the giant worm Brute, who can tunnel through the soil and emerge only briefly before being brought back underground by gravity (moving through space not reachable by the other two characters)
Closely related to the character definition was their control scheme. I wanted Nubs to be controlled just like you’d expect it to. Left and right to move, button A to jump (with various jump heights based on how long you press A). Gravity constantly pulls him down back onto the ground and falling from too high even kills him. The wisp Ally does not have to fear gravity at all. By simply holding the A button, it soars up into the sky. Letting go of the button lets it gently descend again. Unlike Nubs, who’s horizontal movement is snappy without inertia, the movement of Ally is entirely velocity based. Directional changes can only happen over time, in both dimensions. The wisp is also capable of picking up objects and carrying them elsewhere. It can even pick up Nubs and get him to places otherwise unreachable!
The design of the worm Brute’s control scheme took forever! I think I fully redesigned it at least five times during the course of development, not even counting the times I’ve spent tweaking smaller parameters. I wanted to reflect the worm’s power in the control scheme and eventually settled on the player only being able to make him turn. It’s a force constantly moving forward, crushing everything in its way. To a degree, I WANT the player to feel a bit overwhelmed at first to convey the worm’s raw power better. How the worm interacts with the ground and the air was also a part I constantly kept rethinking. Should the worm be affected by gravity when emerging from the ground? And if so, how? Is the player still able to control the worm in mid-air? (early development GIF: Brute not care about gravity) In the end, the fantastic game Super Mega Worm provided a lot of insight into how a giant worm is supposed to behave. I designed the worm to be nimble underground, but only having limited movement abilities once airborne. I also slowed down time to make enemies more easily hittable without actually slowing down the worm.
Another question I should probably have asked myself more often: can I build the levels in a way that’s actually feasible and fun for a giant worm to traverse just as well as a platforming character and a tiny flying wisp? Exploring the spaces that are typically “empty” in a platformer sounded like a neat idea from a game design perspective at first. The thought of having three completely different characters each play a vital part in the game’s progression was really intriguing. Only Ally can get something high up in the sky, and only Brute can smash that underground lock that blocks the player’s path. But unfortunately, this was definitely one of the things that sounded awesome in theory but I couldn’t quite pull off adequately. I didn’t do enough prototyping in the beginning to find enough interesting gameplay elements and settings. Redesigning the worm so many times didn’t help either. I’m SURE there is a lot that can be explored from a game design perspective but what I came up with doesn’t satisfy me. With motivation for the game fading during the later parts of development, I just couldn’t keep iterating and had to fixate the game mechanics at some point. After that, I tried my best to create interesting levels and situations for the wisp and the worm, but could only fully finish a handful for each. My initial dream of having three equally usable characters and having playtime be divided equally between the three crashed pretty hard. Both Ally’s and Brute’s appearances in the game feel like gimmicks to me, even though I spend so much time creating them.
Especially filling the underground with meaning was tough. I knew controlling a giant worm would make an AWESOME boss fight, but what else can I come up with? The mechanic of having to destroy something (a gate, some boulders, …) using the worm in order to proceed lost its appeal pretty fast. The only other thing I came up with was putting objects necessary for progression underground, the worm being the only one who could collect them. It’s a fetch-quest for a giant worm! >:-( Closing thoughts: I’m not happy with how the two characters besides Nubs turned out and that’s because I didn’t prototype enough before committing myself. In the future, I definitely want to increase the time I spent prototyping ideas before committing to anything.
How long it took
From the start of development to submitting the first build to the Apple App Store and the Google Play Store, Nubs’ Adventure took 726 hours spread over 2 years to create. This includes:
- programming (features, bugfixing, performance improvements, …)
- drawing (tilesets, characters, menus, …)
- game design
- story
- playtesting
- content creation (levels)
- beta tests (one for Android, one for iOS)
- marketing (asset creation, press communication, website, social media, …)
- distribution (app stores)
What the number does not entail is the time I spent thinking about things while being away from the computer, mostly while commuting. I can’t really put that into numbers, and even if, it would be unfair to add it to the rest. But I’m sure it’s also a significant factor.
I’ve never worked on Nubs’ Adventure full-time. There was always something else I was doing: getting my Master’s degree in computer science, working as a regular employee in companies, working as a freelancer. Doing game development has so far always been somewhat of a hobby or part-time work at the most. You might look at the 726 hours, divide them by a reasonable work week (let’s say 40) and arrive at about 18 weeks of development. Not even five months… that doesn’t sound like a lot. Given I would devote myself fully to game development, I could theoretically release a game of this magnitude about twice a year… except that I couldn’t! The thought of working one a single game 8 hours a day, 5 days a week kind of scares me, to be honest. Game development is a mentally draining activity. The idea of doing full time game development sounds awesome, but I’m not yet sure if I’m build for that.
Anyway, here’s a chart showing the hours I’ve worked on Nubs’ Adventure for each month from May 2013 to May 2015:
Looks like a pretty typical indie game development project to me. Good motivation at the beginning, indicated by solid 25+ hours each month, even close to 100 in June 2013. And then the first dip, arriving at its low point in April 2014. After that, a short (yep, I’m calling 3 months short) motivation surge, possibly guilt related. The development comes to a crashing halt in August 2014, where I didn’t work on the game for a single minute! I was burned out! At that time, it could have very well been over for Nubs’ Adventure. For some reason I can’t really explain, I somehow managed to motivate myself again to come back and continue working. This also roughly marks the beginning of the 20-portion of the dreaded 80/20 rule about project length in software development. Lots of smaller ups and downs with regards to working hours I managed to put in, as well as sluggish development in terms of getting the last pieces to work dominated these months. April 2015 was probably the last well-intended effort of a burned out individual to finally getting it done, once and for all… and I did! I powered through! :) March 2015 consisted of bugfixing and cosmetic changes, as well as handling the distribution and beta-tests.
Another (hopefully) interesting analysis is the distribution of work between categories. I labelled each work I did as either “programming”, “content”, “graphics”, “idea/brainstorming”, “marketing” or “sound/music”. This is the result:
Programming was the biggest amount of work still, taking about 40% of the time. Content creation (which involves designing levels and creating cutscenes) comes in second place, taking slightly more than a quarter of the full development time. To my surprise, drawing the graphics only took about one sixth of the 726 hours. I attribute that mainly to my programmatic approach to drawing (see the “good” point about drawing above). I’ve never been a big “marketeer” (is that a word?), which is why the marketing portion is really small. And I didn’t do sound and music myself, so the only thing I had to do regarding music and sound was to integrate it into the game.
Maybe these numbers can help other developers put things into perspective. I don’t claim that my results are more than a single data point, so I’m hoping more developers collect and share their numbers with the community. Having this data will definitely help me estimate future projects, I hope it helps you too!
Closing thoughts
Developing Nubs’ Adventure has been a rollercoaster ride that was partly amazing, partly boring, partly downright depressing. I’m currently incredibly happy that I’ve managed to stick with it to the end and release a finished product! I can’t however make ANY comment on whether I like what I’ve created or not. I’m too close to it to say anything about it. Maybe in a couple of months I’ll start to hate the game. Or maybe I can look back and say: “I created Nubs’ Adventure and I’m proud of it”… but I can’t do that now. All I’m currently hoping for is that people genuinely enjoy the game. That’s all! :)
Thanks for reading! :)
You can get Nubs’ Adventure here:
Tried your game. It’s fun. Can you share how u made those cut scenes? They are beautiful and make the game so dramatic!
I created an XML based format that defines the steps of a cutscene (for example, move camera there, spawn entity of type X there, set variable X, …) I then developed a parser that can read the cutscene files. Sprinkled across the world, there are invisible object that trigger certain cutscenes if you run into them. Once a cutscene is started, it just executes the steps one after the other. Some steps involve a timeout, which stops the script-execution for a period of time (so that the script waits until a character has finished moving to a certain place for example).
Does that answer your question? Feel free to ask specifics! :)
I’m curious about how you wrote/parse your cutscenes too. How did you write your XML, if I may ask?
Here’s how I did it — in Unity, I wrote a class “Timeline.cs” which stores a list of tasks (time:float, callback:function) that will trigger stuff as the timer goes. I just keep adding more tasks, and then start the timeline. I have the feeling that hard-coded timeline will be a pain to modify later on though, hence my question on the XML method.
I’m not particularly happy with my choice of XML, as it’s so verbose and tedious to write by hand (which I had to do). I should have stuck with something like JSON instead, but that’s too late now! ;) Anyway, here’s the start of the beginning cutscene: http://pastebin.com/gjjjvVhR
I think most of it is pretty self-explanatory. “sid” is always the ID of a particular entity, sid 1 for example is always Nubs himself. So basically, it’s just a series of events/commands that get triggered on after the other. Unless it’s a “sleep” or “sleepUntilPosition” command, which pauses the script, the commands are executed immediately.
wow! dats simple yet great idea..looks like a movie :D Brilliant game once again! Thank you so much for the explanation!!
A great read. Thanks.
Glad you enjoyed it! :)
Congratulations on finishing your game and thank you for this detailed post. I learned quite a bit here.
I can’t play Nubs now, but will definitely give it a spin later.
I have a few questions though:
How did you track your time? I’ve read a few post mortems but none with data about time allocation. So this was very interesting for me.
Have you thought of releasing the source code? If you’re uncomfortable releasing it all, would you share parts of it? I’m especially interested in how you decorate the tiles.
Congratulations again. Finishing a game is hard, especially when you’re on your own, so you can be proud of yourself. You achieved what many only dream of (including me).
Thanks! :)
I tracked time with a simple Excel sheet, later Google spreadsheet. I just entered the time when I started and when I stopped and wrote a few words on what I did. In hindsight, it would have maybe been better to use a dedicated tool (of which there are quite a few), but it also worked fine that way!
The source code is a mess! The longer the project took (and the more it got towards a finished state) the less I cared about good coding practices. I really don’t want to release it in its current state. Maybe at some point in the future, when I’m not attached to it anymore…
The way I decorate the tiles is really nothing special. I just define little patch objects, which includes the sprite, on which kind of tiles (even, slope, …) they appear, in what quantity and so on… Then I randomly draw them onto the base tiles according to the rules. There’s no magic behind it, just a lot of trial and error to see what works and what doesn’t.
Glad you enjoyed my post! :)
I finally had the chance to play your game and it was great, even though I just couldn’t get past that spot where you have to descend a steep cliff. I play few games on mobile so I’m not really used to the controlls. I don’t blame the game.
I hope it does well and I’m looking forward to your post regarding sales data.
Hey man! I remember trying NA a really long time ago in /r/gamedev’s Feedback Friday (and seeing it pop up a few times on SSS). Glad to see you finally finished it! That’s a great achievement in itself. Thanks for writing this postmortem too, it’s really detailed and insightful.
Thank you so much! Funny you remember my little game after such a long time! :)
Great job on the game. I have enjoyed playing it, but have not finished. I am in the cloud world (73% complete) and have run into a bug. The game spawns me on a floating disc that dissappears when the game starts and I fall to my death every time. I don’t have the energy to start over.
Other than that I like the game considering you are basically a one-man army.
Hey!
You mean one of the floating platforms that dissappear after you jump onto them? You should normally be able to make the jump off of the one you spawn on.
Regards,
Max
This one dissappears immediately. It is never in a solid state, the game starts off with it missing and I instantly fall to my death. I’ve tried rapidly hitting the jump button, going immediate left and right. But, to no avail.
Found the spot! It will be fixed in the coming update, then you can continue normally! Will take a bit for Apple to approve it though.
I know this is a frustrating experience to play for a long time and then have it ruined by such a bug. I will of course offer a refund should you request one.
I don’t want a refund. It was only $5 and I want to support your efforts. Thanks for fixing it. I didn’t have the desire to start over.
I’m inspired by what you do to create a game myself. Keep up the good work.
have you had the time to submit the update? I don’t mean to be pushy, but I would like to finish the game. Again, good job and it was great reading about the ups and downs of your experience. The advice you offered about your experiences is also appreciated.
Hi!
Sorry, I’m busy with preparing the Steam release. Would you be interested in being an iOS beta tester for the new version? That way, you get the fixed version and I know better if the fix worked! :)
This game is absolutely amazing! I’m sure if I would spend the 5 bucks to keep playing it would get even better! I sadly have no way of doing this yet, I don’t have my own card and I doubt my dad would let me use his… But I would seriously LOVE to know, where did you learn to program video games? I have been searching for years! I mean, I know you need a language ( I kinda know c ++ ) and some graphics (like, blender, or even Microsoft paint?!?) I noticed you said a physics engine (Box 2D) and even some music and all that stuff! But, how do you mash them all together into one big game?? Is there some way I can learn how to do this without going to a special college? Thanks a lot sorry if I just threw a whole bunch of stuff at you!
Hey! :)
I basically learned it myself. There are definitely schools and courses you can attend, but the best way to learn is by just doing stuff. Try out things, tinker, implement ideas, … I found that I learned much more that way than having people tell me things. There’s so much free material on the internet, I don’t feel like going to special schools makes much sense from the learning aspect alone (but there are other factors at play, like getting to know the industry, the people, …).
I’d say start by grabbing an engine (Unity, UDK or even GameMaker) and just implement a simple game. Maybe follow a tutorial, if you like. You’ll learn a lot and it will give you an idea of how “everything fits together”! :)
Sure, I’d beta test for the iOS. Let me know what I need to do on my end.
I’ll just use your email to add you to the beta list, then you’ll get an email as soon as you can checkout the beta! :)
Thanks for breaking down this game and its history.
I must say that the visuals age well, it gives me Fez vibes, retro is still beautiful today. :)
Keep up the good Work, looking forward to any new projects you have in store :)
Fwiw, I came here from this recommendation site
https://www.50gameslike.com/games-like/hollow-knight/android