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

Post

Week of July 14, 2013

#1
Sunday, July 14, 2013

Summary

There's a very interesting paradigm shift that's happening right now in the AI. This is something that I'm both excited and nervous about, as it's going to be different from the traditional model of AI in RTSs. In Limit Theory, when you tell your unit to do something, you will not be saying "go attack this ship." You will not be injecting an order into the unit. You will simply be saying "this ship needs to be destroyed." You will be suggesting to your unit that you have a desire for something to happen. This is a very fundamental difference, and I know that I've discussed it as early as January of this year (or maybe it was December of last year?)

Since then, however, I reverted to a more traditional AI approach of simply issuing orders. This is how LTP works and it's how basically every other game works. But now that actions are gone and events are in place, I'm being led back in the other direction :crazy:

How does it affect your gameplay experience? Very deeply. In a perfect world where the AI works well, it will allow you to trust your units far more than you would in a traditional game. It may even eliminate micromanagement. For example, suppose you select a group of units scattered across a system, and tell them to attack an enemy ship. In a traditional game you would get all of your units heading toward the ship and firing on it when they got close enough. They would probably even use the "fastest path," so that would mean using warp lanes as necessary. That's what you would expect to happen when you say "I need you to attack this ship right now."

But what if you said "I need this ship to be destroyed?" Imagine that some of your ships are damaged and that a friendly station is in the system. Your AI recognizes that it does not have nearly as high a chance of successfully doing what you want without first repairing itself. So your units dock at the station and purchase a repair. But the AI might also recognize that it has a much higher chance of succeeding if it stays together as a group. So the non-damaged units wait outside the station, and when the repairs are finished, the whole fleet congregates on a common ground before launching an attack. Heck, maybe the AI could even hire mercenary help if it recognizes that the chances of success are low :o

This probably sounds scary to people. It sounds scary to me. But imagine a world in which you trust your AI that much. You trust that when you say "I need this station to be destroyed," you can simply leave it at that and move on to your other tasks, rather than worrying about everything. If you have competent pilots, they'll do it just as well as if you had sat there and micromanaged the whole thing. Maybe you could configure your AI extensively to control the level of autonomy that it is allowed (for example, whether your pilots are allowed to buy repairs, ammunition, hire help, etc.) :D

Just some food for thought that's brought about by this change in the AI system. I make no promises that the LT AI will be that smart, but the neat thing is that it is a natural possibility with this type of AI :)

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#2
Monday, July 15, 2013

Summary

NASA, WE HAVE COMPILATION!!! :clap: :clap:

Ok, it's actually not quite as exciting as it sounds. I've put a lot of placeholders in the code, so things are by no means done within the AI and simulation engines. BUT. The game is once again able to compile and run, which is a big relief to me since I had gone like...a week without seeing LT. I almost forgot that it was actually a real game :lol:

Just kidding. I didn't forget. But it's good to see that beautiful face again :)

Now that I can compile, I'm in good shape to start trying some of the new ideas that I've had in the mean time. At some point last week I started holding off because I was afraid it would be too much new code, introducing too many problems without me noticing. Now that I can compile and run, I can test incrementally again and put my mind at ease.

I started on a really nice train of thoughts tonight that I think may lead me to the conceptual clarity that I've been searching for on the whole simulation / events side of things. I will just give a taste of it.

My idea is to make a paradigm shift in how I think about a person's ability to do something. I want to try to think of every possible state change in the world as being driven by something that has the "power" to produce this change. In other words, a weapon has a certain ability to "produce" damage, in the same way that a construction module has a certain ability to "produce" construction. I'm not exactly sure what I want to call this idea yet, hence the lack of precise terminology. For now I call it "power" - the ability to make some quantifiable change in the world over some period of time (physics people will be happy with the analogy P = dW/dt). I had a few key insights about power tonight that I'm hoping will lead me to a completely new level of conceptual clarity on LOD simulation.

I won't give it away, for fear that it might come to define the very nature of LT's simulation engine. But, you know, if the idea doesn't work out, then I'll explain it at a later date :roll:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#3
Tuesday, July 16, 2013

Summary

Ahhh, it feels so good to be back in the codezone :) Too much conceptual work makes Josh such a dull codemonkey :monkey:

Today I finally got to explore one of my shiny new ideas that I've been wanting to try for a while (but have held off due to lack of compilation, as explained yesterday).

One of the things that I've mentioned consistently throughout the LT dev process is the "component" entity system. The way the LT engine handles objects is quite different from the typical approach in games (although not esoteric, as there's plenty of literature on component-based design). I've continually called it one of the best decisions that I ever made when I started building the engine. Today I can still say that, despite so many new lessons and ideas in system design! While most other systems have been ripped out, replaced, and ripped again, the entity system has remained strong in the face of so many bloody refactoring wars.

Today, that piece of code finally got an overhaul :geek: The component-based design remains, but now I have implemented it in terms of an even better technique than before. Naturally, it's cleaner and removes a lot of code. In theory, it even increases performance of a lot of common operations (although I expect the increase to be fairly negligible)!

But the most exciting part to me is that I'm starting to understand how this new technique can actually allow me to unify abstract and concrete concepts under the same "Object" interface. I started to drift pretty far from reality there for a while with that talk of "abstract interfaces" and whatnot. Abstract entities handing out abstract interfaces to imaginary sub-entities :wtf: Yeah...I was drowning a bit, wasn't I? I think I'm finally on my way back up to the surface to breath some clean air :angel:

Yet another exciting development is that this architecture is helping me to understand more precisely what it means to create an abstract object - helping me to see exactly which attributes need to be abstracted and how.

It took a lot longer than I wanted it to, but I honestly think the clarity is hitting me. So many days of thinking without great success...they were worth it!

PS ~ Vim usage is still coming along well. I'm up to a level of proficiency now that I feel as comfortable here as I did in my previous editor. But the power of this tool really paid off today, as I was able to use vim's macro capabilities to automate a lot of the work in changing the component system. Yayyy for long-term investments paying out already :clap:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#4
Wednesday, July 17, 2013

Summary

An old friend was in town today by chance, so I spent a good chunk of the day visiting with them. Go easy on me...I honestly tried as hard as I could to pull an all-nighter last night to compensate, but my body just wouldn't have it :oops: Still, managed to get a good 6-7 hours of work in before passing out :shifty:

I'm currently trying to write the code for the first real event. The event in question is the construction event - the one that will replace the logic of the construction module. This is definitely one of the simpler interactions in the game (with combat being what I consider the most complex). It's making me think very hard about the "power" concept that I mentioned two days ago. I hope to be really locking down this concept soon. I'm still very optimistic about it :D

Not a whole lot to say about it today, so I'll leave it be. Tomorrow...we'll just have to find out :geek:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#5
Thursday, July 18, 2013

Summary

Yes!! Keeping the clarity rolling!! :D

Today I built my first-ever abstract object! It was really very exciting.

What I'm starting to see is that, for some properties, it seems like "abstraction" is not even necessary. It's just a natural consequence of this mythical "folding" operation of which I've cryptically spoken in the past. I wish I could give all the details, but I think I'd really be giving away too much! But the point is, I'm starting to understand how abstracting objects can actually be an automatic process! You'll never guess what is the key: yep, the component-based architecture of objects!! I am finding that we can actually define abstraction on a component-by-component basis, which yields an automatic algorithm for converting a set of concrete objects into an abstract "aggregate," which represents a rough approximation of all the objects at once!

I'm really pleased by how clear everything is becoming. I was able to finish the construction event, and it was super-easy to write, thanks to dropping all of this ugly abstract interface business. Hoooorayyyyy for simplicity!!! I knew you'd win out in the end :)

One major question remaining, though, is how events are created. I'm still torn between a world in which "enabling" objects directly create events (like a construction module creating a construction event), and a world in which "enabling" objects give their owner the ability to create an event (like a construction module as the "key" to unlocking the player's ability to create a construction event). It's totally just an implementation question, but neither approach really screams "intuitive" to me at the moment...and it's the last thing remaining for the construction module to be working again (this time in terms of events)!

Exciting times ahead for simulation. I'm so, so, so happy that we're finally getting out of this conceptual valley and on to the luscious fields of implementation :clap:

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#6
Friday, July 19, 2013

Summary

Over the past two months of heavy conceptual work, I've broken so much of the implementation of LT that I decided it was finally time to revisit the real world to repair some of the damage :oops: I've got a massive list of things to fix (the LTP issues only account for 50% or so). Today I decided to devote the whole day to hunting down issues :D My primary motivation for doing so was to feel better about the state of the engine. It's a little depressing seeing things so broken, even if you know that things are getting way better under the hood. That's not bad, per se, it's just the way things work: when you're making so many major architectural changes, things are going to break :monkey:

So, today I worked on everything from invisible tooltips to font rendering artifacts (in the form of large white blocks where glyphs should be). Several of the "major" problems were hunted down and destroyed. There's still a lot left to do, but I definitely feel better :thumbup:

I also started working on a generalized listview widget, which I hope will become the powerhouse widget for a lot of different scenarios like the market, asset viewer, etc. Andy has done some great UI concepts for this type of widget and has really inspired me to get to work on something fancy. We're hoping to support multiple types of views (tiles vs. lists), customizable scaling, and, of course, extensive filtering options so that you can navigate quickly to whatever it is that you're searching for. I'm excited about the technical prospects of such a widget :geek:

Tomorrow will mark the beginning of my SIGGRAPH trip, about which I am very excited. For those who are not familiar, SIGGRAPH is the graphics programmer's event of the year. It's a computer graphics conference where loads of experts (read: nerds) gather to learn from one another :ugeek: I'll be attending this year, in hopes of gleaning some useful graphics knowledge / tricks! I expect my participation in both dev logs and work to be quite diminished for the duration of the trip, although I'll still try to post about my experiences during the day and if I learned anything exciting!

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#7
Saturday, July 20, 2013

Summary

Made a long but successful voyage from middle-of-nowhere, Tennessee to Anaheim, California today, where I will be indulging in much computer graphics hedonism in the days to come.

On the ride(s) over, I worked a bit more on the creating-events architecture. Came to a better understanding of a few things (specifically, that events should be considered to be "children" of the objects that enable them, rather than being considered as just another part of the world). I still lack the proper clarity on how an AI or player creates an event and how that creation interacts with the object that enables it. Hoping for an insight soon!

I also worked some more on the listview widget. I implemented text filtering, so that you can type a partial name or attribute of the object you're looking for, and the list dynamically filters the elements in or out as you're typing. Typing "fi", for example, was all it took to find my firefly blueprint and all the firefly missiles in my ship. I really love filtering...it's so darn easy and intuitive :) As a spur-of-the-moment type thing, I also started working on a "graph" widget (which I think will be one of the cooler widgets, graphically-speaking (no pun intended??)). Unfortunately, I only got 10 minutes into the implementation before deciding that the second airplane really didn't have the elbow room to support any serious coding :crazy:

Onwards, into the fields of eternal graphics knowledge!!

[ You can visit devtime.ltheory.com for more detailed information on today's work. ]
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of July 14, 2013

#8
Week Summary

General Sentiment

It was a really nice week for conceptual breakthroughs :D After searching for so long, I finally managed to come to some serious clarity on abstract simulation. The combination of the component engine overhaul along with the "power" concept has got me on a better track than ever to clear, abstract simulation.

At the risk of being a bit too optimistic, I don't think it will be long before we see real, long-term historical simulations of regions!!! I'm so excited about this part of LT :geek:

Major Accomplishments
  • Major conceptual advances in simulation
  • "Power" conceptual breakthrough for abstract simulation
  • Implemented first-ever abstract object, including automatic algorithm for conversion between concrete and abstract
  • Overhauled component-based entity engine
  • Started on AI overhaul
  • Compilation! ;)
“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 5 guests

cron