Return to “Dev Logs”


[Josh] Friday, March 9, 2018

Friday, March 9, 2018

Happy Friday everyone!! As usual, it's been too long since my last wall of text, but boy have I been busy since then...and I'm very much hyped to show you all what I've been up to :) I won't belabor this intro (EDIT: guess what: I failed :V), since I know you're skipping straight to the screenshots (yes, you, I know what you came here for :ghost:).

Last time, I spoke of moving forward with the fun stuff -- that juicy gameplay -- and mentioned that 'perhaps the biggest challenge remaining is moving our PAX demo into mod format.' Yes folks, after 5 years of this, I've actually gotten moderately decent at predicting where I will stumble. And stumble I did...over and over and over again, until I was dreaming of mod files with teeth chasing me down. I tried looking at the problem (of writing in mod format) every which way: upside, downside, yonderside, and they all upset me in their own special little way.

So I said "frak it," and decided to drop modding support... literally zero of the infinitely-many parallel universes of the quantum multiverse, including our own. No one believed that, right?? I'll lay down and die before I give up on making LT the 'OpenSpaceSim' we all want! But in all seriousness, I did get tired of trying to solve the problem of making modular additions to it easy to write with some text format. Frankly, I'm just tired of text. At least, I'm tired of text that represents code. It bothers me every day. I spend most of my life looking at Vim. Yes, I have a deep affection for Vim; yes, I have a tricked-out .vimrc and a lovely custom color scheme crafted to my tastes; but at the end of the day, it's all rather uninspiring. There's a pretty severe disconnect between the Josh that wants to teach the computer to build a beautiful, awe-inspiring universe and the Josh that sits in front of a slate-blue wall of code 8-to-16 hours a day :monkey:

The harder I pushed to write the game in a modular format, and the more I tried to nail down that modular format, the more I came to realize a devastating (at the time) truth: seeing the big picture and being able to build the big picture from small, incremental changes are two goals that are fundamentally at odds with one another when one's way of seeing the big picture is the same as one's way of changing it. I guess that's a bit obvious when put abstractly, but at the concrete level of writing game code, it felt like a disheartening revelation. But all was not lost. You've glanced at screenshots already, you know what's coming, so let's quit beating around the bush.

I spent two weeks prototyping the viability of a dedicated editor for Limit Theory. At the end of those two weeks, I had something that worked, something that enabled me to see the big picture all at once, while being able to translate my changes behind-the-scenes into the tiny, incremental changes necessary for good modularity. Those two weeks changed the whole ballgame. You may or may not remember that I showed a screenshot or two of a 'failed experiment' in building such a tool in a KS update a while back. So what changed? Well, the viability of building such a tool shifted dramatically when good ole' Adam mentioned to me a library specifically made for getting functional, practical GUI tools up-and-running with minimal effort -- Dear ImGui. Previously, I had used Qt. Qt is great; it's a behemoth of industrial-strength functionality. But the time cost of building things is orders of magnitude higher. Two weeks using Qt left me feeling that I was going to spend more time on tools than I would save on getting LT out the door. Two weeks using ImGui left me feeling that I had an infinitely-more-powerful workflow that would make the road to release so much more enjoyable, shorter, and paved with less frustration. Two weeks with ImGui made me a happy Josh :)

So then, let's have a look at the new, blossoming development tool that has allowed me to sleep soundly at night!

We'll hop right in to the main editor view:


There's a lot going on in this screenshot, and it's more cluttered than the normal workspace would be since I'm trying to show off a lot of the functionality all at once. In the center area we're looking at the definition of a 'Ship' entity. We can see everything all at once -- the components that make it up, the data and functions imparted by those components, along with Ship-specific data. It's a 'big-picture' view (from the code standpoint) of what a Ship is in LT (note: it's not complete, as I'm not finished building the 'Core' LT mod file yet!)

Something really important to note here is that I've actually got a small test mod loaded in the editor, but that test mod depends on 'Core' (Vanilla LT). Since it depends on Core, what I see in the editor is the result of Vanilla LT plus my changes to it. Big picture view!!

But! Glance over at the center-right panel, and you will see the actual mod file that I'm producing. It's a Lua file, automatically-generated by the editor, that tells the engine all the things that my mod adds/changes/removes. If you take a look, you will see that it's essentially just a list of tiny, incremental changes. Extremely granular, and just about as ideal for seamlessly merging the changes from lots and lots of different mods as one can get. Therein lies the real beauty of being free from a pure-text/code workflow: the big picture that we see is completely decoupled from the description of building that big picture. We get the best of both worlds: the ability to understand everything in the game at once, the ability to modify any piece of it, and the generated mod file that describes those modifications as compactly as possible, thus maximizing modularity.

(If you're wondering, this mod was a test of cross-platform compatibility, making sure that I could load/save a mod, swap between Windows & Linux, and keep working without issue, since I use the latter while Adam & Lindsey use the former. It was a successful test, fyi :) )

From here on out I'm just going to show some of the functionality of the editor and talk a bit about how it works, why it makes life easy, and so on. Using this tool, we can quickly create new entities, components, events, functions, fields, etc. There is never a question of what file it should go in, how we should structure the syntax, etc. "Minimal degrees-of-freedom" is a major design goal I have for our workflow. Here I'm adding a new function to the Inventory component, to make it easy to transfer items between two entities:


The code view is rough and there's no syntax highlighting or autocomplete or anything like that -- but frankly, the whole point here is to get away from unstructured code as much as possible. As time allows, I'll improve things like that, but my core focus is on making it as fast and intuitive as possible to build new game content, while ensuring that understanding existing game content is always tractable. Note that I'm doing this for me more than anything, because I need a workflow like this to keep a handle on the beastly featureset of LT. It has overwhelmed me once before; but not this time -- this time I have all the power in the world to keep it simple and manageable :) :squirrel:

After I've added my new function, it shows up in the Inventory component or as part of the 'All Component Functions' listing in any entity that has an Inventory:


On the right I've got a panel showing me the new function. The central area of the editor can have as many 'vertical split' panels as your screen has room for, so it's very easy to look at, for example, an entity and a specific component within that entity side-by-side, or compare two entities, etc.

Ok! Let's do a quick little demo of extending the game :) (note: in reality, the contents of this mod will be part of Vanilla LT, but this is just for demonstration!)

Creating a new mod that extends Core:


A few minutes later, I've built a new component to hold the data & logic governing a 'population' (like on a planetary colony, or perhaps even a large station). I've added it to the 'Colony' entity, and now every Colony in the game will have this data and run the logic that I made! On the right, you can see the generated mod file:


Notice how everything can (and should) have a description, and how these descriptions pop up as tooltips when you mouse over just about anything in the editor. This is all part of keeping the 'big picture' as clear and understandable as possible! If/when you open Vanilla LT in this editor, exploring and understanding how it works will be a lot more fun than just reading some documentation :nerd: (of course, I'll provide that too).

I can save my mod and load it again later when I fire up the editor. I'm greeted with this, reminding me of how awesome my little mod is going to be :ghost:


And there you have it! I've now got a single Lua file that changes Vanilla LT to (presumably) make it even better! Ship it! :clap:

I mentioned earlier being pretty disheartened at the lack of an 'inspiring' workflow. We are now in a position to obliterate that issue! On top of the ImGui Lua bindings, I've also written some OpenGL Lua bindings that, among other things, let us put some 'game' back into 'game development'! Here I'm perusing LT screenshots in the file browser:


Goodness, that's refreshing to see some beauty inside the development tool :D Here we have some really basic OpenGL integration (not exactly beautiful, but the point is that we can use this same tech to visualize LT-related things in-editor):


And finally, a fun addition that I wrote last night (it took all of 30 minutes to do since this is Lua, after which I spent hours playing with it in the editor :geek:): a real-time shader editor for ultra-fast prototyping...and maybe just maybe for boosting a certain graphics monkey's spirits if he's having a rough day :monkey:


These are just tiny demonstrations of the power that we now have on-hand. If and when we need to see something, to simulate something, to prototype something, to measure something, we can do it in an awesome way without sinking huge chunks of time into scratch/sandbox applications (and without inducing a mental context switch to that other application!)

In closing, I'll summarize a few points just to make clear where we stand with development, the editor, and the productivity level of my past few weeks! Here's what we've got now:
  • A finished mod format that's functional, granular, and generally awesome :thumbup:
  • Support in the mod format for whatever 'categories' of game content we want to add in the future, for example, Item Types, AI Behaviors, Procedural Generators, Settings, and so on (if you look carefully you can see that the mod format handles these all in the same, unified way)
  • Ability to create new mods (that can have any number of dependencies, or none -- Core is built the same as any other mod, it just doesn't depend on anything!), load & save them, automatic backups, visual highlights on changes made by the active mod, arbitrarily-deep undo & redo (which is actually tightly-related to the mod format), ...and so much more
  • All of the above written in Lua, making it super-fast for me to add functionality; ImGui functions are bound & injected into Lua automatically
  • In-editor OpenGL integration and Lua bindings for OpenGL, making it possible for us to create development visualization & simulation tools limited only by our imaginations (procedural algorithm rapid iteration, material editors, historical simulation sandboxes, dynamic economy simulations, you name it! As a bonus, since it's in Lua, we can run pieces of the game code directly in the editor, no extra work required!)
  • An engine-side loader & compiler that takes in an 'active mod list' and compiles the merged data down to code that interfaces with all of our existing tech (ECS/CTypes, engine-side functions, Lua utility libraries, etc.)
  • An inspiring workflow!!
  • A 'Core' mod representing Vanilla LT that is already well-underway
  • A dramatically-nicer workflow and a happier Josh :)

And in case this wasn't implied, LT will ship with this editor for your use in modding.


Wow. That was quite a mouthful. If you made it this far, thanks for sticking with me! It's always interesting to look back on the devlog process; it really gives me insight into how I'm actually 'feeling' about development, which can sometimes be difficult for me to process, even when...I'm me (which is most of the time :V). To see such an explosion of excited JoshTalk in a relatively small devlog session, and to see it come so naturally and boosts my spirits even more. The road to release has thrown us more than a few hardballs, but every now-and-again, we catch a break. I couldn't be more thankful for this one.

I anticipate the next few weeks being focused on continued development of 'Core.ltm.lua,' getting all those lovely entities and components fleshed out, and continuing to leverage the editor at every opportunity to make life easier and development more enjoyable. The next big milestone will be when I can hit Ctrl-R in the editor and have the game launch moments later, running off of compiled mods, thus completing the feedback loop of fast development iteration.

Keep your lasers hot and your missiles locked my good fellow pilots; it's never been a better time to be building universes :D :squirrel:


You've already seen all of the screenshots, but here's the link to a gallery of this log's images: Limit Theory Devlog Gallery ~ March 9, 2018
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: [Josh] Friday, March 9, 2018

FIRST lol!!! THIS IS SO COOOOOOOOOL!!!! I'm so excited to use this!!!
JoshParnell wrote:
Fri Mar 09, 2018 3:55 pm
And in case this wasn't implied, LT will ship with this editor for your use in modding.
teehee, I get to use it now :V

edit: Josh didn't get the joke; it's funny because i m a d e v e l o p e r
Ship Inspiration Pinterest!! (send me stuff)

"You’ve got to work on something dangerous. You have to work on something that makes you uncertain. Something that makes you doubt yourself... because it stimulates you to do things you haven’t done before. The whole thing is if you know where you’re going, you’ve gone, as the poet says. And that’s death."
- Stephen Sondheim

Re: [Josh] Friday, March 9, 2018

Well, not sure about the game, but at least Josh has a shining career in building engines and IDE's :ghost:
I mean, exciting post :D but I think it's high time to stop building tools and start building a game with them :P
Last edited by Dinosawer on Sat Mar 10, 2018 1:31 am, edited 1 time in total.
Warning: do not ask about physics unless you really want to know about physics.
The LT IRC / Alternate link || The REKT Wiki || PUDDING

Re: [Josh] Friday, March 9, 2018

An editor even codedumb me can almost intuitively understand :shock: ? This is really cool! I can't break it in a way that makes josh go "H-h-how did you do this? that shouldn't even be possible, did you successfully divide by 0 or something?"

I remember back when I was making attempts at dwarf fortress mods, having half a dozen text files open, trying to figure out how the various pieces went together, and this here looks MUCH easier to understand. I'm so excited
Challenging your assumptions is good for your health, good for your business, and good for your future. Stay skeptical but never undervalue the importance of a new and unfamiliar perspective.
Imagination Fertilizer
Beauty may not save the world, but it's the only thing that can

Re: [Josh] Friday, March 9, 2018

First: cool shit, sounds awesome!
How does it handle collisions of changes? (With two mods altering the same segment)

How does general purpose coding look in it?
It seems to be good for plugging in already written code elements, but how does it handle classic writing?

Josh, you are a moron
Stop trying to make a better language/IDE/kernel/cpu architecture/processing substrate to accelerate the creation of stuff and start actually creating stuff!
Yes, i know the urge for better/sleeker/more elegant solution to [current problem] but you have to know when to fukkin abort that search and actually return some result.
the wall of text up there reads exactly like all those previous breakthroughs in productivity.
whatever the name of that first primitive xml ish offshoot was, the node editor, ltsl, python and whatever else i likely have forgotten.
All of those tied up so damn many resources over the years.
Lua as it is is good enough.
You seem to have a solid mod file format.

Leave it at that for now and build an actual game.


Re: [Josh] Friday, March 9, 2018


I have been following this project since a few months after the Kickstarter campaign (heard of it in the video dev-logs era). I quickly got seduced by Josh's passion and vision, and by the responsible and accessible way he handled this project. More than to play a video-game, this was the opportunity to see a video-game being made and intellectually explored. I have endured through the so-called dark days, just praying for Josh and rooting for this unique vision of a game. I never wanted to manifest myself, either in approval or in disapproval; I just wanted to follow.

This is the first time that I felt such urge. I know, from experience over years reading these forums actively, that here we have some of the nicest human beings to be found online - but also, who can get pretty quickly turned into harsh defenders when criticism arises. So, I am writing this already anticipating quite a few backslash. Anyhow, this time I felt the urge to manifest, so I will.

Josh, that hidden risk has been slowly growing in the last few devlogs and today, in my opinion, it was fully born. You are simply not building a game once again. Let's be real. Most of the problems with the development of LT have originated from the decision of making it a deeply moddable game - when mods were not even a part of the project originally backed. How many years and energy were consumed in making moddable a game that remains almost as far from getting finished as it was years ago?

People can paint however they want, but the true is that year after year after year, Josh simply puts the vast majority of his time building tools, coming up with things that are going to increase productivity like crazy, devising software that makes building the game a lot faster, etc, etc, etc. But the productivity never comes. The faster always looses to the slow. That Josh is in love with engines and IDEs is not hard to see. That I dream of using an Engine made by Josh in the future, I don't deny. On the contrary, I would love to see LT shipped also because I want to see what Josh would do next in terms of gamedev tools. But in all honesty, it's just sad to see you, my dear Josh, once again lost into building tools after tools after tools.

Everybody gets amazed, claps, commends the effort. But in the end, the super unleashed power of gameplay that is always promised is hardly ever even slightly progressed on. Jesus, how hard is it to see that this game keeps stalling because of the modding challenges and that almost every time Josh can only tell about tools development? By far, the biggest amount of progress that Josh has made in years was to hire Adam and Lindsey - which have clearly been super helpful including in the department of making sure that there's tangible progress.

But there's just so much they can do. For god sake, there has to be a point in which the costs of delaying gameplay implementation overcome the benefits of having a super moddabble game that keeps not existing, of developing high-end tools that are used for a bit just before yet-another super-performance-booster has to be developed. This time, Josh even implemented a full editor! Nice, beautiful great tech. But god, again? Yet another "solution" to the modding issue that has crippled LT since 2014? In the future, this game has to become a case-study of the shortcomings of moddability.

Sorry for the big comment and for the hard words. I know that most will hate and even bash me for it. But I think that at least an alternative view could prove useful in order to try to prevent this vicious circle to keep happening again. After so many years, after so much effort put into solving the FPLT, one day enough has to be enough and progress towards gameplay has to be made - heck, at least progress towards having BACK what was in the game before the dark days...

Anyways, I wish the whole LT team good luck and I will be always rooting for your success. I just finally lost hope that Josh will ever be able to deliver a game due to the most classic of all gamedeveloper's traps - getting so in love with the process that the product becomes lost.

Re: [Josh] Friday, March 9, 2018

Actually JGM, Cornflakes and Dinosawer expressed similar concerns just a few posts back - I'd say you're far from being alone with these thoughts. :P Welcome to the forums, by the way! You seem like a legitimately nice person (with a level head on your shoulders), and I'm glad to have you here! :wave:

Hopefully Josh can put some of these worries/fears/concerns aside in the near future. I already mentioned it to him a bit earlier, actually.
Have a question? Send me a PM! || I have a Patreon page up for REKT now! || People talking in IRC over the past two hours: Image

Re: [Josh] Friday, March 9, 2018

Welcome JGM, glad to have you here :)

My own thoughts are that while yes, the continued focus on tools over gameplay is frustrating, but more because I thought we'd moved beyond this than because the tools aren't worth the delay in gameplay implementation; it's simply subverting my expectation of where I thought we were.

However, this particular stretch of work seems like it will have its biggest payoff post-release, and is primarily for the benefit of modders, who will be able to much more easily harness the power of the LT Engine than they would otherwise. And in my honest opinion, that IS the correct priority. At the end of the day, no matter how much gameplay Josh, Adam, and Lindsey can implement, no matter how rapidly they can port back into the game what existed in the Video-log era, the core vanilla version of LT will be dwarfed by what modders will be able to achieve with the right tools, for the simple fact that there are going to be far more modders than official developers...and in all honesty, the vast majority of modders will be far less skilled than the LT team and will thus require a far lower barrier to entry, and the lower the barrier, the better off the game will be in the long term.

The 3 devs know quite well that they aren't getting paid until the game is released, and I highly doubt there is much, if any KS money left. Even if Josh were going off on trying to re-invent the wheel...again, and was happy in wasting his time, I'm pretty sure Adam and Lindsey (and Tal) would like to see the payoff for their hard work, and would step in if they thought what he was doing was pointless or counterproductive....And if those concerns have been aired in private, Josh, you better fucking listen to them.

That said, I think this editor is very solid and approachable. Perhaps it isn't perfect, but it's definitely good enough for release and post-release modding. Fleshing out the editor with more capabilities and functions might be worth the time, but if going forward, the overwhelming majority of work isn't going towards gameplay (re)implementation, I'd agree it's a serious cause for concern.
Challenging your assumptions is good for your health, good for your business, and good for your future. Stay skeptical but never undervalue the importance of a new and unfamiliar perspective.
Imagination Fertilizer
Beauty may not save the world, but it's the only thing that can

Re: [Josh] Friday, March 9, 2018

As far as I can see here, the editor is defining ALL the entity-component-system relationships, and even prototypes the component functions etc. (where the functions internal logic is then edited directly as code)
Basically all the relationships and parameters are defined in the editor.

Now the thing is: any change to the logic will then HAVE to be done via the editor (changing whatever dataformat it uses to serialize its data).
In the best case, it can directly load and save to LUA files. But even then, the structure can only change as much as the editor can understand and process it.

Basically: the editors functionality will determine how flexible you are in the end with changing logic and structure of the game.
If something (lets say some special simulation logic) is out of scope of the editor, it cannot be simply written in LUA, as the editor would fail to represent this special code-structure.
Then either the editor has to be extended, or the special code must be somehow seperated from the normal structure.

So unless the structure of the LUA code (and features of the gameengine) are very well defined by now, the editor can actually hold you back in development.

Im always kind of skeptical towards too powerful tools. Trying to do too much in one place.

Re: [Josh] Friday, March 9, 2018

It's maybe also worth mentioning that "modding" is sort of a misleading word when it comes to LT.

Yes, what Josh has described here will let Random People (like me) add functionality to the game. That's what we think of when we talk about "modding" a game. I'm really excited to read this.

But more importantly, the capabilities Josh describes in this latest update are actually vital for implementing the basic gameplay features promised in the Kickstarter. What he's implemented happens to support modding, but it's more like ease of modding is a happy side effect of his work towards easily implementing basic gameplay functionality.

I find that extremely satisfying. Apparently Josh does as well. :D

Now, having said this... if I'm being honest, I have to admit that my own reaction was pretty close to that of Cornflakes and others. As a coder geek, sure, I can enjoy the tool-making fun described here -- but tools != game. I can appreciate game-making tool features, but not in and of themselves; I appreciate game-making feature descriptions when they're provided as ancillary information to an actual game.

To put it more directly, the Joshpost that I (and, I think, most others) am looking forward to reading is not:

  • mod format
  • Lua
  • workflow


  • economy is 80% implemented
  • AI is 90% implemented
  • colonies are 30% implemented
  • projects are 75% implemented
  • dogfighting is 95% implemented
  • fleet command is 25% implemented
  • etc.

Bluntly: If it doesn't describe direct progress toward delivering specific Kickstarter promises, it's not that interesting.

Again, as a geek, I love the tools-talk! I don't hate this latest update at all. I get that this stuff needs to be done to deliver gameplay.

BUT it's not gameplay. What excites most people will be evidence that game features are being created.

I look forward to seeing how excited the fans of LT become when future updates reveal progress toward implementing specific game features.

Re: [Josh] Friday, March 9, 2018

Although it feels a little bit like a déjà vu to read about the new shiny thing that will make it possible to get the work done much more faster and more easier and more yippee-ki-yaaaay all the way down, I'm not that worried. It also feels like a piece of solid development this time, maybe because it is kind of possible to see the "big picture" now.
Also: Xenophobic lockdown Image

Re: [Josh] Friday, March 9, 2018

I do understand some of the harsh feedback, but i don't agree. A lot of games needs tooling to produce content more productively and a game of this scope definitely does. There have been a few iterations on the code base, but i have no doubt that the c / Lua codebase will not change further, and the Editor only builds on this solution. There is alot of gameplay left to implement, but i belive this type of tooling will make the process much faster - also making the game moddable in two weeks of work, seems like a huge win. Look forward to see rapid gameplay development in the coming weeks, months. Great work guys and girl :-)

Online Now

Users browsing this forum: No registered users and 1 guest