Tuesday, January 31, 2017

Logging the Creation of a Beast -- the Good, the Bad, and the Template Metaprogramming.

Tuesday, January 31, 2017

Postby JoshParnell » Tue Jan 31, 2017 7:00 pm

Tuesday, January 31, 2017

Good evening and welcome to the 'new' Limit Theory development logs! As per my promise to get back on the communication train, with this post I'll be kicking off the new logs (which may casually be referred to as The LT Fortnightlies), in hopes of ushering in a much-needed era of sane, stress-free, non-showmanly communication to you all. Note that, unlike the past devlogs, I am (at least tentatively) leaving these open to comments, until it proves to be a bad idea.

Now...that being said, it was a really busy and exciting week for LT, what with me attending PAX South in San Antonio with a 'kind of LT' demo. Due to the unusually-exciting week, my first fortnightly is going to be a lot longer (and perhaps more shiny) than the average one. Please do not take this first log as 'the standard,' because I will certainly not be attending something like PAX / creating a new LT demo every week. But for this week, I have a lot to write about and I want to, so I will :geek:

Last week was a ridiculously-busy flurry of code, electronic equipment, failures thereof, migraine-inducing bugs, triumphant successes, very little sleep (followed by far too much sleep), and, in the end, a lot of good feels. When I signed up to be a part of the Louisiana Tech Park's PAX group about three months ago, I had only one intention: to light a fire under myself to get something playable in a booth. At the time, that seemed impossibly far away. As of Sunday, it was reality :) Mission accomplished!



The Process

The demo that I showed off was, for the most part, built in about a week. More specifically, the bulk of it was built between last Tuesday and Sunday. As usual, I managed time poorly and would have had more features in the demo had I started earlier. Still, I don't think I'd change the way it played out, since the process proved to me a few things.

1. Perfectionist Josh is dead. There can honestly be no question about it. This puppy was rough. To even get it working in time, I had to muster duct tape and hacks like I've never mustered before. I cheated physics in ways that would have never even occurred to my little elegance-loving brain in the past. I cut my original grandiose goal down to the bone, literally re-organizing my 'critical features' priority list every hour or so as it came down to the wire, and slowly accepting that more and more things would not make it. Sounds bad, right? But in the end: there was something playable. :thumbup:

2. The current system of core C library + high-level scripting language (Lua / LuaJIT being the current flavor) works very well for building stuff quickly. Not surprising, since LTSL was similar. Still, it's nice to have confirmation on this front. I effectively built a small, arcade-ish space shooter in a little under a week. Huzzah, turns out I can still code real things!! \o/

3. (I will discuss this more later) My hopes that LuaJIT will yield the performance I need are cautiously growing. I was quite surprised at how well it held up.



The End Result

It took me until noon on Sunday (on Friday I alternated between a screenshot slideshow and a random nebula generator with a slowly-rotating camera; on Saturday I stayed in the hotel and coded all day because I couldn't handle not having something playable), but a playable demo finally arrived.

The demo was very simple, consisting of nothing more than a massive, free-for-all battle of 100 to 500 ships (I varied it through the day), many of which were hunting the player. The player had a small (box) ship, equipped with two pulse lasers. Controls were simple and included your standard LT-esque 6-DOF flight, shooting, switching between 1st/3rd person camera, (implemented later on in the day) a thrust booster, and (my favorite) a 'generate a new system' button (which, of course, included generating a new procedural nebula, starfield, configuration of ships, etc). As you can probably imagine, the original plans included way more (two warring factions, a 'home base', purchasable upgrades, etc...), but...*snip snip*

When I first arrived with the demo, it immediately became clear that it was too difficult. People couldn't hit ships at all. I guess I've become a bit too good at leading ships properly in order to hit them, and forgot that it's quite hard ;) So I pulled up gvim and, ten minutes later, aim assist was making the game all too easy as people simply held down the fire button and watched the enemies explode :lol: Five more minutes of gvim later, we had a 'partial' aim assist, which required people to aim relatively close before the targeting computer would help them. Finally, the difficulty was about right and people started to enjoy playing.

Interestingly, I think I garnered a lot more attention at the booth during those times when I was live-coding more features into the demo and gvim was up on the booth's screen :monkey: While I was implementing a boost feature later on, one guy told me he'd buy the game just because I knew what I was doing instead of 'copying and pasting from the internet.' Perhaps I should have just coded at the booth on Saturday instead of in the hotel :roll:

All-in-all, it was quite a simple demo, but it did have the taste of Limit Theory to it, and it was, in my estimation, quite a decent bit of fun for a relatively small amount of implementation time. Yesterday when I got back, my roommate asked me how the weekend went. I let him play the demo and he was surprisingly upset when he finally died, and told me that it got his adrenaline going (in fact, I think my roommate currently holds the high score for kills...), so that was nice to hear :D



The End Result (Meta)

While the concrete result of the process was the demo, I think the tertiary fruits of the week ended up being far more valuable than the demo itself:

1. The core C library gained a lot of features. To me this one of the most 'concrete' wins, because I consider that library to be the one permanent fixture of all this development. It's still unknown whether LuaJIT will pan out, therefore, whether the existing Lua code will be used in the final Limit Theory isn't known at this time. The C library, however, will be used, and it gained a lot of functionality this week. Loads of new matrix math routines, Mersenne Twister RNG implementation, heavily-expanded gamepad support & functionality, new fast noise library, some basic physics functionality (basic intersection tests, impact point calculations), and more.

2. I got a lot of inspiration and rekindled enthusiasm out of it. Truth be told, I've been down in the dungeons battling FPLT for so long that I've forgotten to come up for fresh air. When I first drove an ugly little box ship around a system again, it felt really good, good enough to inspire me for a moment or two. I've always had a problem with remembering to play and have fun with the GAME I'm making. I'm going to try to do a better job of that, because it's no fun feeling uninspired.

3. The LT community is now fully convinced that I'm intent on doing things differently for the better. Right? Right?? :angel:

4. I gained some important perspective on what matters. I know I've had trouble with this in the past, but again, I'm making a big effort to move to the land of pragmatism. During the development of the demo, I scrapped features that it almost killed me to scrap, out of pure necessity. I didn't have time to bring over a ship-generating algorithm, so my placeholder boxes never got replaced. I didn't have time to bring over my entire physics engine, so the player could fly right through other ships. These things killed me deep down. But how many people made an issue of them when playing? Zero. Instead, I heard things about targeting feeling clunky, movement not feeling 'tight' enough, wanting more weapons, etc. Throughout the day I tweaked these things with some live-coding to improve the experience, and it made all the difference. The few people that did figure out that they could fly through other ships didn't bat an eye, and just went on shooting. Granted, I'm not saying that I plan on ripping physics out of LT 1.0, or that I'm going to ship it with box ships. But it was an important reminder for me that I have a very skewed perspective as a developer, and that having people play the game and remark on what needs work is critical.

5. I got to meet some people who have been following LT (including a few forumers like Flatfingers, Skyfligher, Sebby McWester), and the experience of talking to them about LT and the things that made them excited made me really, really happy. I started Limit Theory to build my dream game. I'm still doing that, but as I've grown up a bit since the beginning, I think seeing the excitement and the smiles on other peoples' faces as they talk about LT gets me going more than it used to. All you guys who share my dream and have supported me in the journey to make it a reality are very much an inspiration to me at this point.



Moving Forward

Thanks to last week, I have a pretty strong feeling about where I need to go from here. As I mentioned, LuaJIT performed quite well the whole time. I never had issues with CPU bottlenecks, I seldom had issues with the GC (and was able to mitigate them substantially by tweaking the GC's settings). In the end, I was, frankly, amazed to be able to run 500 ships in a system with thousands of pulse lasers flying through the air at any given moment at a decent framerate. The game logic was simple compared to full LT logic, BUT not so simple that it can't be used as a rough measuring stick.

Before PAX, I was on the fence about LuaJIT. I was cautiously optimistic. After PAX, I am now even more on the fence, and even more cautiously optimistic. In other words, I have pushed much deeper in to doing things with it, and the situation with respect to whether or not it will work has remained unchanged. LuaJIT has thus made it farther than any of the previously-explored solutions.

This week, I intend to launch an intensive study into the performance characteristics of the PAX demo + features that I'll be adding in an attempt to get a better sense of what happens when the logic gets heavier. I basically need to prove that LuaJIT will work, or prove that it won't. That's my current goal: to hop off the fence.

To do so, I'm going to have to break out the measuring tools and do some serious profiling to figure out exactly where LJ is going to start hurting me. It's going to be tough, because JITs have a totally different set of performance characteristics from static languages, and I've been pretty off in my previous assessments concerning LJ and performance. I need to become an expert on LJ performance in the coming weeks.



Screenies!

Yep, I actually come bearing screenshots this week. Again, please don't be fooled by this first log: it was clearly an unusually exciting week!

LT @ PAX South 2017 Album

(Yes, my cellphone camera is awful)

Some of my favorites:

Image

Image

Image

Image
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
User avatar
JoshParnell
Developer
 
Posts: 4219
Joined: Sun Oct 07, 2012 3:06 pm
Location: Baton Rouge, LA

The January 2017 Devlog Discussion Thread

Postby 0111narwhalz » Tue Jan 31, 2017 11:17 pm

We have a new LTDL, I decided that we need a new discussion thread too.

Things we know about The LT and The Josh based on today's devlog:
1 He still codes like a monster
2 He has a roommate
3 He is now an engineer, and no longer a mathematician
4 LT is playable (in a minimal sense)
5 Josh's roommate is at least passable in video games
6 Josh procrastinates
7 What parts of LT exist are still beautiful

Discuss! I demand it! :twisted:
Last edited by 0111narwhalz on Tue Jan 31, 2017 11:53 pm, edited 1 time in total.
User avatar
0111narwhalz
Commander
 
Posts: 357
Joined: Mon Feb 01, 2016 11:40 pm

Re: The January 2017 Devlog Discussion Thread

Postby Talvieno » Tue Jan 31, 2017 11:27 pm

I split it. That was for 2015. :P Best not to dredge it up if we don't have to.

Josh said in his post that he left the last devlog post "open for replies", but it it clearly not open for replies, so I'm going to ask him about that. In the meantime, people can post here, and I'll merge it with the devlog later if he decides to let me unlock it.

Thanks for taking the initiative, Narwhalz. :thumbup:
User avatar
Talvieno
Community Manager
 
Posts: 7745
Joined: Fri Apr 11, 2014 6:50 pm
Location: North GA, USA

Re: Tuesday, January 31, 2017

Postby JoshParnell » Tue Jan 31, 2017 11:54 pm

Whoops ~ Talvieno pointed out that the log wasn't actually open to commenting as I had claimed. It should be now!
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
User avatar
JoshParnell
Developer
 
Posts: 4219
Joined: Sun Oct 07, 2012 3:06 pm
Location: Baton Rouge, LA

Re: The January 2017 Devlog Discussion Thread

Postby JoshParnell » Tue Jan 31, 2017 11:54 pm

Thanks for pointing that out Talvieno, I think I've got the permissions fixed now. Any brave (normal) user want to test it out? :D
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
User avatar
JoshParnell
Developer
 
Posts: 4219
Joined: Sun Oct 07, 2012 3:06 pm
Location: Baton Rouge, LA

Re: The January 2017 Devlog Discussion Thread

Postby Talvieno » Tue Jan 31, 2017 11:56 pm

Seems to work now, Josh. :thumbup: I'll merge this thread with the devlog.
User avatar
Talvieno
Community Manager
 
Posts: 7745
Joined: Fri Apr 11, 2014 6:50 pm
Location: North GA, USA

Re: Tuesday, January 31, 2017

Postby JoshParnell » Wed Feb 01, 2017 12:17 am

Fun times while developing: it turns out that the demo runs substantially faster on Linux than Windows. I was able to push ~1000 ships into a battle with comparable FPS to 500 ships on windows. While playing with the quality settings, I decided to bump up the starfield quality as well -- from 50K stars to 100K. Except that I accidentally added an extra zero. The result was bizarre but beautiful. "My God, it's REALLY Full of Stars!!" :squirrel:

Spoiler:      SHOW
Image

Image

Image
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
User avatar
JoshParnell
Developer
 
Posts: 4219
Joined: Sun Oct 07, 2012 3:06 pm
Location: Baton Rouge, LA

Re: Tuesday, January 31, 2017

Postby Grumblesaur » Wed Feb 01, 2017 12:30 am

Linux gamers will be quite pleased if that remains true.
Forum Search 0/ Official Limit Theory Website 0/ Rules & Game FAQ

Zanteogo wrote:You sir, are the master of unhappiness. ;)

charnode wrote:The true General Unhappiness he is.
User avatar
Grumblesaur
Moderator
 
Posts: 1972
Joined: Sun Dec 02, 2012 8:57 pm
Location: Spotsylvania, VA, USA

Re: Tuesday, January 31, 2017

Postby Lum » Wed Feb 01, 2017 12:36 am

Yup, that's starfield overkill... but it still looks awesome :D
User avatar
Lum
Vice Admiral
 
Posts: 3120
Joined: Tue Nov 12, 2013 3:10 pm
Location: Potsdam (Germany)

Re: Tuesday, January 31, 2017

Postby Dinosawer » Wed Feb 01, 2017 1:04 am

Can we pleaaaaaase have some of those without any UI?
I need a new desktop background :ghost:
Warning: do not ask about physics unless you really want to know about physics.
The LT IRC / Alternate link || The REKT Wiki || PUDDING
Image
User avatar
Dinosawer
Admiral
 
Posts: 5496
Joined: Fri May 09, 2014 1:08 pm
Location: Belgium

Re: Tuesday, January 31, 2017

Postby Dinosawer » Wed Feb 01, 2017 1:29 am

JoshParnell wrote:3. The LT community is now fully convinced that I'm intent on doing things differently for the better. Right? Right?? :angel:

Well, you've talked more to us in the past week than in the rest of the 2 previous years, so yes where it concerns me :mrgreen:
*looks forward to next devlog*
JoshParnell wrote:Fun times while developing: it turns out that the demo runs substantially faster on Linux than Windows. I was able to push ~1000 ships into a battle with comparable FPS to 500 ships on windows.

Odd. Also yay. But also odd. :ghost:

JoshParnell wrote:While playing with the quality settings, I decided to bump up the starfield quality as well -- from 50K stars to 100K. Except that I accidentally added an extra zero. The result was bizarre but beautiful. "My God, it's REALLY Full of Stars!!" :squirrel:

Dunno, I like it. Sure, it's overkill, but not by that much really... :think:

I hope LJ will work as it should.
Otherwise I'll just have to post more articles on parallelism :ghost:
Warning: do not ask about physics unless you really want to know about physics.
The LT IRC / Alternate link || The REKT Wiki || PUDDING
Image
User avatar
Dinosawer
Admiral
 
Posts: 5496
Joined: Fri May 09, 2014 1:08 pm
Location: Belgium

Re: Tuesday, January 31, 2017

Postby MrPerson » Wed Feb 01, 2017 2:16 am

Dinosawer wrote:Can we pleaaaaaase have some of those without any UI?
I need a new desktop background :ghost:


You and me both :lol:
User avatar
MrPerson
Captain
 
Posts: 563
Joined: Wed Jan 01, 2014 12:49 pm
Location: Thrillville

Re: Tuesday, January 31, 2017

Postby Damocles » Wed Feb 01, 2017 2:57 am

I think this whole PAX thing is a good lesson learned in how a deadline can push efficiency and applying creativity in the right way.
It automatically forces you to sort the priorites, and not to procrastinate on secondary features due to perfectionism.

A deadline gives you limits on how to spend your development time. Lets call that a "theory of limits".

Lesson 2: Player feedback. The developer is usually the worst to assess the fun, as he is much too close to the product, and might overthink on actually benign problems.
Watching how people play is quite critical to find out about lack a of information/feedback, or what players expect in certain situations.
User avatar
Damocles
Lieutenant Commander
 
Posts: 112
Joined: Thu Jan 12, 2017 4:09 pm

Re: Tuesday, January 31, 2017

Postby Ringu » Wed Feb 01, 2017 3:14 am

JoshParnell wrote:Fun times while developing: it turns out that the demo runs substantially faster on Linux than Windows. I was able to push ~1000 ships into a battle with comparable FPS to 500 ships on windows. While playing with the quality settings, I decided to bump up the starfield quality as well -- from 50K stars to 100K. Except that I accidentally added an extra zero. The result was bizarre but beautiful. "My God, it's REALLY Full of Stars!!" :squirrel:

Uhh... does this mean that you're *not* generating the star field as a skybox, just mapping a texture to a (really large) cube/sphere/whatever...?

If you're actually calculating the position of each of those stars and rendering them as objects or points or whatever, instead of just generating what is essentially an image texture, I might have a clue as to how you can massively optimise your engine :-D
--
Mind The Gap
User avatar
Ringu
Commander
 
Posts: 274
Joined: Thu Mar 05, 2015 2:59 pm
Location: Slough, UK

Re: Tuesday, January 31, 2017

Postby youngneil1 » Wed Feb 01, 2017 3:26 am

Awesome info, many thanks! And great to see your enthusiasm :) .
youngneil1
Ensign
 
Posts: 26
Joined: Wed Feb 13, 2013 4:32 am

Next

Return to Dev Logs



Who is online

Users browsing this forum: No registered users and 5 guests