NewoSky Post-Mortem (programming)
Page is part of Articles in which you can submit an article
written by owen on 2017-Sep-29.
Back in late 2015 I started working on a little side project that I was inspired to create after seeing the first trailers of No Man's Sky. I live on side projects - they basically keep me sane. After mulling it over a couple days it all seemed to make perfect sense; you have a galaxy, pick a star then a planet and procgen it all the way down to the ground! Having an idea of what you want and being able to actually complete it are 2 different things. Especially in the world of computer programming and by extension game development.
I compounded my own problems by choosing to build it on my favorite home-brew platform of choice; the Nintendo wii. There was no real reason for me to work on such old hardware sans for nostalgia sake and that "modern life-living in the future is a money pit". Plus I love the little white box and I have had it since 2007 with games that are still gathering dust in my backlog. It could even be big fish, little pond effect. Either way my mind was set on it and all I had to do was put thought to code.
So by 2016 the wii homebrew scene had already slowed to a crawl while the DS scene was still going strong for some odd reason. I could not understand it really. But I was coding away at my little project hoping to release something before NMS actually comes out so I could ride some of that hype train. Bushing died that February 2016 and I planned to dedicate the project to him for helping to make my little white box meet its true potentional - if I ever finished the programming.
I spent the rest of the year working on the project while the procedural generation hype train was in full swing. NMS eventually came out and was polarizingly great for what it did even though it could not possibly please everyone. I actually wished it never came out so we could look forward to it forever like children. Procgen is pretty hard and gamers take for granted that the lastest consoles today ( PS4/Xbox1 etc ) have upwards of 4 gigs of ram and are pretty much PCs stuck in a little box. These new consoles could literally just play video in the skybox the entire time without issue but who cares I stuck to my guns as one should when one is working on something difficult.
If I even looked at the wii at a wrong angle my frame rate would head south below 30 fps. Having a low poly count game and be running below 60 fps was simply unacceptable. I mean if Nintendo could create bueatiful masterpieces on the wii then I could at least create something? right? given enough time, energy and the right bits of C hackery. I tried to read and watch programming videos when I could, most of then all surrounding Unity Dev. Few of these tutorials really go the distance into the deep procgen rabbit hole. But I soldiered on picking up little bits of information from here and there. I could have released NewoSky sooner but as is the case with homebrew and programming, things are never done - there is always something else that you want to add or some basic feature that you SIMPLE MUST IMPLEMENT! 20 person pvp online multiplayer? Anyone?
Eitherway there is only so much time in a day and life has a way of kicking you in the balls. All I wanted to do was sit down and code until my head fell off. Luckily I am not easily discouraged and if some part of the code did not work it either ment that I was doing it wrong or there was a bug somewhere in there that I was not aware of. The fun thing about working with such limited hardware is that it forces you to find ways to be more efficient - to be better. I have to write the best code I can or the game would run like crap. Sometimes it would even run well with crap code and so one has to be really suspicious when things look too good to be true but at least when it did not work I knew it was something in the code that was the problem (as opposed to a os bug). All I had to do was figure out the way to make it work.
It is possible that if I had taken up Unity or Unreal engine I would have been able to achieve more in a shorter space of time but I doubt I would have learnt as much. I have even seen people achieve less with more resources. Homebrew development is less about how much you can do but what you do with the little resources you have available. I wish I could have added shadows into the game though. Shadows would have been cool af. I often look at the things that are being done on modern hardware using shaders but then I think to myself do I really want to spend 6 months learning another programming language? Only to then have to buy a video card, new monitor and a new computer? I think not!
The project slowed at bit at times and other times completely stopped as I worked on other projects that were more urgent. Since the wiibrew.org scene is pretty quiet I could pop out and pop back in without having to rebuild my entire dev entirement or download updates. These breaks from development often yeilded good results in allowing me to clear my head space and attack problems from different angles.
By mid 2017 I had re-written the landscape code 5 times. Being the only person working a project in which you have total directional control it is easy to get distracted, go off rails and basically dick around on old code. Often times I find myself testing out stuff that I had already confirmed would not work at all. But alas the search for that magic piece of code will never end. Went from realtime rendering to several layers of caching, array lists and grids everywhere. Sooo many grids; NewoSky is a measure of doing the most with as little information as you can. Caves? heck no. I mean I could do caves but would it be worth the effort? At some point you have to understand your limits and the framework in which you are building a a huge ship. If you fail to understand your own space you will certainly run in onto land.
I did not achieve everything I set out to. I still have not fixed the normals on the landscape. Nor do I have any form of caves. I could put in collision detection but I skipped it because it would only encourage me to add in enemies and explosions that interacted with the environment.
In the end I worked on the features that seemed the most feasible and left/skipped the things that were too difficult for me to achieve ( proper terrain normals ). Maybe next year I will figure these things out but you never know. Somethings are just not achievable, we do what we can in the time we have. I hope you all enjoy this little thing that I spent a whole lot of time working on. RIP Bushing.
permanent link. Find similar posts in Articles.
[!] what a september-surprise this release was to me. I love what this newo series means for the wonderful white box. ty [!]
by ytvang 2017-Sep-30