Return to “[Archived] Daily Dev Logs, 2012 - 2015”


Week of July 27, 2014

Sunday, July 27, 2014

Quick log today folks, as the code is on fire (both the LTSL and the C++!!) :D

Content: Ship Algorithm

Spent many more hours on the (LTSL) ship generator today. Things are looking great. I'm more enthusiastic than ever about the various tricks that I'm starting to develop. The best part is how guilt-free I feel about it all, now that I'm writing it in script. I'm seeing some better ships today than I've seen in quite some time, but, as usual, there's still a ways to go. No worries - I'm confident that we'll get there.

At this point, I've grown bottle-necked by the lack of custom type support in LTSL. To push further, I need to start defining data structures to help me get fancy with geometric manipulations and pattern creation within the ship structure. Just going to have to cave and do an LTSL user-defined type implementation sprint for a few hours one of these days. Maybe I'll steal some of my sleep hours tonight to do that :ghost:


That's all I'm going to write today, because it's all I really care about right now. I'm also still working on warp tunnel graphics, but I just can't seem to find the right look for them. Right now they still appear lackluster compared to the rest of the world :( Just need more time I guess? On top of that, the colony item generation situation is killing me. I keep going to write the code, and then I end up taking several more hours to think about it. I'm just torn on exactly how I want to do it. Specific type of colonies producing specific types of goods (simple but economically-limiting), specific types of colonies producing goods with specific flavors (not as simple, not very conceptually-interesting), specific types of colonies producing goods with specific value distributions (simple, perhaps more conceptually-interesting?) At this point I feel like the task of finishing LT is just one massive dependency graph and I'm having trouble solving it for the right entrypoint. I keep feeling like colonies are that entrypoint, but then, they've got a dependency on a load of other conceptual baggage related to items and the economy. Rawr... :geek:

Been pulling some pretty crazy hours lately and I'm not looking to stop that trend with only a few days left in the month! Still very excited about what the end will bring :geek:

Hang in there! :wave:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Monday, July 28, 2014

Yes. Absolutely yes. This month's work is finally coming together. Today was a flurry of activity, most of which centered around the paradigm shift that the LT engine is currently undergoing from being a hard-coded engine to being a beautiful marriage of hard and soft code. I'll keep it brief, but even in my brevity I hope to convey the potential that is currently oozing out of the LT engine!

Scripted Object Initialization & Updates

It's finally here. Today I implemented the ability to attach initialization as well as update loop scripts to game objects. This means that, for most game objects, an initialization script will be called when the object gets created, and then additional scripts may be called from within the object's update loop. This is where functionality starts to pour out of this month's work!! :geek:

Already, this means that I can extend or modify the functionality of most game objects without modifying the hard code. All I need to do is write a script that encodes the functionality that I need, attach the script to the object from within the object's initialization script, and profit. For example, maybe I want to implement equipment degradation. All I have to do is create a script that randomly degrades the integrity of ship subsystems over a long period of time, then add a line to Ship/Init.lts: AddScript self "EqDegradation_Update". The script will then attach to the ship and run each frame, just like any other piece of game logic. After doing a bit of playing around with some basic functionality mods, I am just ecstatic at the possibilities. I'm not sure why I was so hesitant about this in the beginning. The truth is that scripts can be made to run very fast, especially when they interop with the engine as naturally as LTSL does (remember, LTSL is always calling directly into the real engine functions, as well as using efficient memory techniques to handle variables, parameters, and return values). On top of that, the more important truth is: we can have the base functionality written in the hard code, but with a mechanism for adding an arbitrary number of running scripts to any object, we also pocket the ability to extend game functionality ad infinitum (without the performance loss of having basic game logic written in script). An object with no scripts attached incurs an absolute minimal overhead for having the ability to be scripted - like, maybe an extra 12 bytes and a few cycles per update. A drop of water in the ocean of performance. The only thing that will start to get expensive is if lots of mods are adding loads of scripts to loads of objects. But I'm sure that I will continue to optimize the LTSL execution module, especially after release when I start to see what kinds of things people will do with it :D

Colony Update Script

With my lovely, new-found ability to build game content and functionality in script, I've embarked on writing my colony-related code in LTSL. Furthermore, I've pretty much settled on how I will handle colony item generation: instead of rejection-sampling items or modifying their attributes post-creation to reflect the colony's culture, I will simply use the colony's cultural vector to modify how much 'value' is given to each type of item. In this way, a military colony will be much like a faction that has continued to research weaponry for a long period of time: they will have significantly more value concentrated in their weaponry than their sensors. They'll still have sensors, thrusters, etc. since those basic components are required to get life 'started' in the universe. But you'll find that colony culture will determine the base 'quality' of a given type of item at any given planetary location. You can almost look at colonies as being representative of the 'base technology level' in a region of space - where those levels vary on a per-item-type basis according to the culture vector.

Colonies are also one game object that I'm going to implement as scripted from the beginning. There are very few colonies compared to other game objects, so implementing their basic logic in script will have minimal performance impact. Additionally, since they're such foundational elements of the gameplay (especially the economy), it will be very nice to have them totally exposed. This means that the aforementioned colony item generation algorithm, for instance, is 100% changeable!

LTSL Metaprogramming!?

Almost forgot to mention this because it took so little time. Ha. But it's so amazing! I had a dream last night about how easy it would be to implement real metaprogramming in LTSL by exposing StringTrees, a compile function that takes a stringtree and outputs an expression, and an eval function that performs compile-time evaluation of an expression to create the expression that will get called at run-time. It only took about an hour to implement!!! Now LTSL has more metaprogramming capability than c++ ever dreamed of having :shock: I could, for example, iterate over an array of strings, emitting a correspondingly-named LTSL function that does something specific for each element in the array, and then call these functions within my script. Yep, the LTSL compiler can now execute arbitrary expression evaluations at compile-time to produce the run-time code. Pretty awesome, and I'm blown away by how simple it was (mostly thanks to the functional nature of the language!)

I'll speak more about this at some point - for now it's honestly just a toy feature that resulted from a groggy-yet-enthusiastic Josh getting a little too frisky with StringTrees and Expressions in the waking hours of the morning :ghost: In the future, though, I have faith that it will be something much, much bigger than a toy...


Still so much left to do before I can tie this month into a neat little video package...but I'm wide awake and there still seem to be many hours left between now and then :)
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Tuesday, July 29, 2014

Fantastic day - just one of those good old end-of-month code whirlwinds that makes my heart happy :) Still, despite the whirlwind, I have doubts about whether or not I'll be ready to film by the end of the night. Fingers crossed :geek: Today I'm actually going to be brief.

List format!
  • Started exposing Node UI to LTSL. If I can even get a basic setup finished within an hour or two, the amount of iterating that I'll be able to do on the UI will be fantastic. I wouldn't be surprised if it meant seeing a new UI or two in the video (overly-hopeful??)
  • Exposed cargo to LTSL (I can iterate through objects' cargo, add and remove items, etc.)
  • Very close to having the entire set of item creation functions exposed, which means very close to colony item generation
  • Moved colony graphics generation to LTSL (I may not have time to make stunning procedural sci-fi locations, but I have faith that someone will.... ;) )
  • More work on the ship generating algorithm!
  • Moved station generating algorithm to LTSL (Get ready...!!)
Ok ok, enough talk, more coffee, and may the LTSL flow rapidly!! See you soon :geek:

As usual, I'll keep you all posted on the status of the update in this thread :)
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Wednesday, July 30, 2014

Sorry about the lack of update today folks, I'm burning as hard as I can but this final sprint is worth every penny right now :geek: Hoping to begin filming in the early hours of the morning tomorrow. Still looking for that final hit of crazy coding goodness :squirrel:

So, the main thing I will say about today is: I got it. All other minutiae aside, there's one accomplishment that puts everything else to shame. Through some crazy hours and massive hackery involving neural explosions, python scripts generating C++ that abuses macros like no one would believe, and a brand new type of crash that I've never even seen before ('SIGILL' - your computer tried to execute an illegal instruction! woo!), I managed to rig a system whereby virtually all of the important engine functions (especially involving item and object creation, UI node and glyph creation, AI tasks, etc..) are automatically exposed to LTSL. Yeah, it hurt my brain, but now that I'm casually calling Item_ShipType and the like from scripts, building and instantiating ships, generating items at colonies, manipulating and creating AI tasks etc...well, I'd say it was worth it :ghost: :ghost: Finally, finally, finally. Been talking about 'exposing this, exposing that' for too long. Today I just took a (constructive) sledgehammer to the code to break it open, busting forth (almost) all of the good stuff to scripts :D

Keep your chin up and your F5s ready for tomorrow, because July is coming to an explosive end :D :D

“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Thursday, July 31, 2014

Well...I hate to do this to you guys...I really do...but...I can't bring myself to stop yet! Things are going too well right now - the productivity is just awesome. So, I am pushing the July update to Aug 2nd. Seriously, I'm sorry, but you know how that goes - also not really sorry :D You'll see why..

Let's have a look at this glorious day, shall we?? :geek:

More Ship Algorithm Fun & Live Coding!

Having a blast with LTSL and the ship algorithm today. Really starting to get fun. Ships look much better than ever before. Not fantastic, but better than ever before. I've got everything to the point that I feel comfortable doing a live demo of modding the algorithm, so you'll all get a chance to see LTSL in action. I guess I could have made that a surprise, but since you guys are so kindly waiting another day, I'll just go ahead and divulge that now ;)

Finished Imposters!!

With imposter switching finally implemented and ready-to-go, we now have entities automatically switching themselves out for their LOD imposters when at an appropriate distance. The result? A very commendable boost in FPS. I'll measure more precisely later, but right now what matters to me is that the game is silky smooth even with a high number of objects (especially asteroids).

Fading isn't yet implemented, but even without it, choosing the imposter switch distance carefully yields a surprisingly-small amount of visible popping when switching to or from the imposter. I usually can't tell when the transition happens unless I happen to see it at just the right angle and am paying close attention. This has thoroughly convinced me that the tri-axis billboard technique (plus a bit of my own magic shader sauce) is a winner. It also convinces me that, as promised, the shading on the imposters is exactly representative of the real thing! Awesome :thumbup:

Colony Item Generation!!!

Implemented (and in LTSL!). Need I say more? :) Colonies now generate local items (of course these do not appear out of thin air; the colony requires raw materials to produce these items) and put them on the market. Now if I can just implement a simplified trade interface in a few hours, I may actually be able to go down and buy something this time :D

Custom UI Nodes in LTSL!!!!

Implemented. Once again, need I say more? :) Still didn't get a chance to actually build anything with it, which is part of why I'm so looking forward to this extra day. Iterating UI is going to be so fast and lovely without the need to restart the engine. Woohoo!!!


Well, if anyone was concerned that there wouldn't be treats in the July update...hopefully today and tomorrow will change your mind about that :D

Once again, sorry for the wait folks - it'll be worth it ;)

PS ~ On a more positive note, looks like we're not going to have to contend with another devlog savings time! Hoorah!
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Friday, August 1, 2014

UPDATE STATUS: Uploading to YT
UPDATE ETA: 1-2 hours

Well. That was fun. Today is another record-setting day for how badly I want to destroy all technology everywhere! It was a relatively straightforward update video process.

Until the very end.

It was at that moment that a new beast rose from the sea - a beast we had never encountered before. We knew not that it lurked spitefully beneath the water, waiting for that day when we least suspected its presence. And then it came down upon us like a great sea of fire. It was the audio/video desynchronization dragon.

I honestly don't know why it happened this time. But I absolutely could not get my overdubbed narration and captured footage to align. I tried re-capturing the video (yeah, for a 20 minute video, that takes a while...), I tried re-narrating (yeah, for a 20 minute narration, that takes a while...), then I tried it all over again. No success. It's as though the tectonic plates of time itself were shifting as I recorded. Most puzzling thing ever. Truly, today I have learned to manipulate time. Well, not intentionally.

So in the end I had to spend hours slicing and dicing the narration to fit the video. There's one part where time is so distorted that I simply had to leave the narration blank and stick some awkward text in. I honestly have no idea what happened, but I sure hope time straightens itself out next time :shock: The most curious part about it is that the desynchronization is definitely nonlinear. It's not like the whole narration track is stretched. It's like the synchronization just goes out of phase at specific but unpredictable times...pretty baffling :shock:


Other than that, it was a highly-productive day. I've been awake and coding since yesterday's devlog. Other than needing a shower, I'm pretty darn happy :D I think July has been a bigger month than I even really understand yet. I honestly think the coming months will show just how critical the LTSL work will prove to be in speeding up content development. Really couldn't be happier about that :)

Thanks for your patience guys...I'll see you all soon!! :D :wave:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Saturday, August 2, 2014

Whoop!! Just woke up a few hours ago. Epic sleep as usual for a post-dev-update day :D #19 was definitely one of the higher-stress updates that we've had thus far. But it's out now!

Ok! Let's talk a bit about #19. As mentioned in the KS post and as made clear in the video, the month's work was obviously more focused on LTSL than I intended. You might consider it to be a bit of a gamble. It is. Instead of just pushing content, I yet again decided to push for a new tool to help me develop content. Clearly, this is a general pattern with me: I prefer to develop the tools and algorithms than the content.

At the same time, having re-watched the video several times from the perspective of August Josh (and being critical of July Josh), I really can't walk away disappointed with July. The potential that I see in LTSL is immense. It's hard to contain my excitement.

I'm so excited, in fact, that I plan to spend at least half of my day off simply toying with more LTSL. Yeah, I consider that a fun break :) I'll also get out and do some preparation for my big August vacation (about which I'll make an informative post soon to keep you guys in the loop about my unusual plans for this month). But yeah. I just can't wait to play more with the content algorithms and implement more content, now that I can do it with such ease and speed. Perhaps the most exciting aspect of it is that, if I start to feel bottlenecked by a lack of language functionality (as I inevitably do in languages like C++), I need only upgrade the language. I love that so much!! LTSL is mine, and I can grow it to be as powerful, as fast, and as elegant as I need it to be :geek: There is no longer a bottleneck in sight. Truly, the only limitation from here on out is my own mind. I just love that feeling :D

In terms of public response, it seems that you guys pretty much enjoyed the update :) Happy to see that. I'm glad so many people are as excited about LTSL and modding as I am! In hindsight, I'm almost positive that it was a huge, huge move that will forever change the nature of LT's future. Thanks, July Josh. Thanks :) :thumbup:

Ok! I have a date with some snack food, movies, mixed beverages, and the LTSL compiler. See you all soon :) :wave:

PS ~ HQ version of the update is already rendered and I should be posting the torrent in the next few hours ;)
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of July 27, 2014

Summary of the Week of July 27, 2014
  • Continued work on LTSL ship generator with great success! :)
  • Implemented object scripts in the engine (for custom initialization & update logic)
  • Implemented 'eval' in LTSL for real metaprogramming capabilities
  • Massive number of new engine functions exposed to LTSL through some major technical feats
  • Implemented proper LOD swapping for imposters
  • Implemented custom, scriptable UI nodes in LTSL
  • 19th successful dev update!
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Online Now

Users browsing this forum: No registered users and 2 guests