Limit Theory Development Summary: February 2017
Since the response to 'how should I handle KS updates?' from the last one was overwhelmingly in favor of monthly summaries of my weekly development logs, that's what we're going with. Here's the first one. I'd like to note that this summary was actually compiled from my logs by the new Limit Theory Community Manager, Nathan (known as 'Talvieno' around the forums). You can read more about that exciting development below!
In the first half of February, I explored the performance characteristics, and, ultimately, the feasibility of the current LuaJIT solution. LuaJIT has been a roller coaster of emotions for me. At first, I was cautiously hoping it would be the solution, and became very hopeful when I saw that it ran more efficiently than any other solution I've tried... only to become extremely worried whether it would actually be performant enough in the long run. This caused me to look into other related solutions (which didn't work out so well!). Fortunately, I didn't give up there. I continued to put some more work into it using LuaJIT's built-in profiler, which was helpful in weeding out the worst areas of performance. At the end of it all, my heavy-duty laptop was able to run a 1000-ship battle at 60fps. Remember, of course, that not all of the logic is implemented, so this isn't representative of what you'll be able to do in LT. The goal for me has always been to allow ~100-ship-battles at decent framerates, and at this rate, I believe we'll be able to do that.
What I've seen has allowed 'Practical Josh' to conclude that we will be able to (tentatively) proceed with LuaJIT. This is also taking into consideration that, if things start to get too heavy, I'll likely be able to make enough little scale cuts here and there to push out a still-high-quality LT 1.0. I'm keeping practicality in mind and am open to, for example, having to slightly lower the scale of system economies or out-of-system simulations, etc, if it means the difference between 60 and 10 fps. I'm also devoting some relatively-small amount of time to researching other potential solutions guaranteed to be more robust than LuaJIT, just in case LuaJIT doesn't work out. All-in-all, this is great news since it means that FPLT will not be holding up development any longer!
I spent the latter half of the month getting more content brought over to the new system and sanitized. PlateMeshes (stations, ships, turrets and the like) are 90% back now, and I've spent some time making them more robust and performant than in the past, since they turned out to be the cornerstone of many of my procedural algorithms. Planets are back and at 100%, including atmospheric scattering. Asteroids will be back as soon as I figure out scalar field extraction in the C core.
In summary, a LOT of stuff is coming back very quickly, as I promised it would, since the real work of thinking through problems is already done in many cases. It feels so nice to get to focus on putting content back in! This time around, I'm not going to make the mistake of going for long periods without a playable version of LT. I intend to keep the PAX demo in working shape and updated with relatively-recent content, both so that I can continue to feel the inspiration of being able to actually play LT, and because I'll be pushing myself to go to more local tech events where I can continue to demo the game (I'll give you all a better heads-up from now on as well).
As long as we're talking about the community, it's also worth mentioning that I have appointed LT's forum admin, Talvieno, as my official community manager. His new role as CM will ensure that the amount of non-coding LT-time I spend in the future is kept to a minimum! I'm really happy to have Talvieno on board. You can see the full post about it here. I’ve also kept my promise of delivering weekly textual devlog updates. They're viewable here, and go into much more technical detail on my recent developments. If you're not pleased with this summary, do have a look!
And in a rather unexpected note: part of my time over the past week was dedicated to developing a networking and remote 'control panel' system for LT. It's a technology investment that I'm sure will pay dividends. Specifically, in an attempt to gain better control over LT's procedural generation algorithms, I implemented a multi-platform TCP & UDP socket API, then used it from LuaJIT to spin up a very simple HTTP server run in the background by the engine that serves up a simple control panel webpage when connected to via a browser. It can change internal engine variables automatically in response to controls like sliders or buttons being changed in the panel. This makes it fantastically easy for me to work with large amounts of parameters and see results in real-time (which is exactly what's needed for building good procgen code). As a bonus, since it's based on sockets & HTTP, I can connect remotely and use another machine like my tablet to control parameters while I develop on my main box. There are a whole lot of other ways I can envision using this to boost my productivity! Also, the tools are now there for anyone who wants to give an LT multiplayer mod a shot at release. (May the force be with you...)
Finally, I experienced one of the happiest development moments in memory when I got to see my universes in VR for the first time! VR support had always been planned, but I had never gotten around to adding it until a couple of weeks ago. Playing the PAX demo on my HTC Vive blew me away! It reminded me of why I became a graphics programmer: I wanted to build worlds. I always dreamed of getting to explore the worlds I'd built. Eight years ago, when I started learning 3D programming, I also looked into VR, but the hardware just wasn't around back then. I saw how I might be able to build worlds with enough learning, but I didn't see how on earth I could learn enough to build the technology that would let me experience those worlds. Fast-forward less than a decade, and a bunch of really smart people have done exactly that. I never dreamed it would happen so soon...if you had told me back then that in eight years I'd be able to code nebulae, planets, stars, and ships, AND that I'd have access to hardware that would let me SEE them (almost) as I see objects in reality...there's no way I would have believed it. But there I was this very month, floating above a planet, staring at nebulae and stars, and watching the occasional pulse-laser fly by my face. Even the most trivial experiences in LT were made absolutely thrilling :) I'm planning to do a lot more visualization and testing in VR, simply for the inspiration factor. After two years of relatively-uninspiring work, I'll take all the motivational boosts I can get.
Again, if you're really interested in details (all of the developments of February can't possibly be packed into a neat summary), dive into the logs! In March I hope to see completion of the porting process for most content (actually, that's the goal for the end of this week, not the whole of March...!) With all my toys back, it'll be time to resume the process of assembling them into a universe. Full steam ahead. I look forward to being able to post new visuals again :)
~ Josh & Nathan (Talvieno)
PS ~ This format is a work-in-progress. Please let us know if you have thoughts about the format of the KS monthly summary (too much text? need bullet points? rather just have tiny per-week summaries with links to the full log?)