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

Post

Week of December 29, 2013

#1
Sunday, December 29, 2013

Gentlemen. We have. Delegation. :clap:

To be fair, it's not even that big of an achievement anymore, since I've been able to conceptually simplify it so much. But that's usually how you know you got it right - it doesn't feel like a big deal anymore :)

Today I introduced a new (and perhaps the final?) concept to the AI engine: resources. I explained yesterday how planning, parallelism, and scheduling all work together. Today I implemented it :) A resource is a tool that the AI can use in implementing a plan. That's really the key insight behind fast delegation & parallelism: a plan is a schematic of what needs to be done, and although it may contain instructions, it's not necessarily a strict specification of how it needs to be done. Those two things can be separated. That's where resource scheduling comes in! As I explained yesterday, you have some number of resources (subordinates, friends, nearby people that you think could help, or even hypothetical people), and you bind these resources to your plan in order to carry it out more quickly.

I introduced two resources today (along with the actual architecture for resources): self and hypothetical. Self is obviously the most common resource, and will usually be doing a lot of the work :monkey: But hypothetical is a really interesting one. I think I've mentioned before that posting a contract is equivalent to delegating to a hypothetical person. So an NPC may consider that a "hypothetical" person could handle one of the goal nodes, and if it decides to dispatch the goal to the hypothetical person, then a contract will automatically be created and posted to a nearby planet or station (note: contracts can be posted remotely, for reasons of simplicity). Since all resources are treated identically, the NPC doesn't actually know whether it's dispatching to itself, a friend, the player, or a contract. It just happens automatically ;)

Finally, I implemented the first iteration of a greedy resource scheduling algorithm that dispatches goals to the resources that are most suitable for solving them. I mentioned yesterday that there is a notion of "efficiency" with respect to a resource being able to handle a particular goal, and today I implemented the architecture for it, so that the scheduling algorithm takes into account which resources are best for the job (e.g., heavily-armed people are more likely to be assigned combat-related goals, etc.). However, I have not yet implemented the function for evaluating efficiency, so right now all resources are considered equal. That one's going to take some thought :think:

At any rate, I haven't actually implemented the hypothetical person dispatch yet, so no contracts have been posted but....I expect that to change here in the next few hours :geek:

It's going to be one heck of a sprint to the update so...strap yourselves in :ugeek:

EDIT: Also, while randomly browsing an old dev log, look what I found!!! :
JoshParnell wrote:Thursday, January 3, 2013

... I had a rush of ideas last night concerning interfaces (not just the strategic interface, but interfaces in general), and started conceiving of some pretty radical notions with respect to interface design. Today, I spent the entire day building a new interface engine, trying to flesh out and concretely realize my ideas. I basically want to make the interface more natural, intuitive, interactive, dynamic, and unified, all at once. Very little is working at this point, and it's going to take a lot to figure out how to make this new approach work. But I think the result could be worth it. I always kind of just assumed that a standard "window-based" approach was the best. But after thinking it through a little bit more, I think we can do better, and build something that feels more like a natural overlay that exposes a dynamic flow of information, rather than a bunch of preset windows.

If I'm successful in re-inventing my UI, it will have a host of implications for other systems. The tactical and strategic interfaces will, more or less, become one. All other interfaces will have to be redesigned, but they should all require less lines of coding, less hard-coded constant numbers, and less endless tweaking to get the layout of everything right. Limit Theory is going to have a huge amount of information that can be both observed as well as manipulated, and I really don't want the game to become a spreadsheet, as a few other space games with large amounts of interactive information have become. I feel like there has to be a way to present that information in a beautiful, simple, and intuitive way that feels more like a game!
Sound familiar? ;) Almost a year ago, this idea of an elegant, unified UI was on the tip of my tongue, but I wasn't good enough to understand exactly what it was, so I failed to implement it. But a year later, guess what we have: the node-based UI. It's good to know that dreams do come true :D :lol:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#2
Monday, December 30, 2013

AHHHHH. I'm dying I'm dying I'm dying :shock: It's 8:15 and I still haven't started filming...too much to do!!!!!!! :ghost:

Absurd day. Too much code. Don't have the time to list it all. Delegation. Contracts (and lots of them :D ). Interfaces. Nebulae ( :roll: ). Tonemapping. Reasoning. I touched it all today.

But there's till too much that's broken!!!! This blasted AI!!! It'll be the death of me!!! :crazy: So close! So far!!! Who knows.

"Many Josh died to bring us this monthly update."

:clap: :clap: :crazy: :crazy: :crazy: :crazy: :ghost:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#3
Tuesday, December 31, 2013

Well, I'm relieved that's over!! That monthly update was just a tad too intense for my liking :shock: Next time, let's make sure everything is working at least a day in advance :roll:

I'm very pleased that the update went over well, but even more pleased that the delay was greeted with understanding and acceptance. You guys are really the best :)

Looking forward to kicking back and doing some major relaxing on this day off. Also would like to get some work done on the new website, and hopefully finish it soon since I've been failing pretty hard on that front.

It's going to be an intense year, no doubt, but I'm excited as ever to get my hands on a whole new year's worth of coding time :D Let's go!! :monkey:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#4
Wednesday, January 1, 2014

Whew! Just woke up from an epic slumber :geek:

I wish I could say my day off was exciting, but the majority of it was spent getting some much-deserved sleep :) Nothing wrong with that of course, but I regret not being able to make it to the world of Skyrim.

Definitely the high point of the day, however, was when I watched "Serenity." It's a movie that's a follow-up to the Firefly series (and if you're not familiar with Firefly, strip yourself of the title of sci-fi fan until you get around to watching it). Really, for me, it was everything that a sci-fi movie should be...and more. Plot, characters, places, humor, twists...just such a good movie! Kind of a stark contrast with the newest Star Trek :roll: My recommendation: go watch it right now!

Anyway, break time is over and I'm so excited to get to work on 2014. It really is going to be a crazy year.

Let's go! :D
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#5
Thursday, January 2, 2014

And thus it begins. 2014 :ugeek:

I actually spent a large amount of time planning today. This year, I'm going to work on improving my management skills :geek: I feel that I have generally done a good job as coder Josh, but perhaps not so much so as manager Josh. I need to do a better job of planning and scheduling (ironically, the same thing that the AI is currently learning :P ). This year I intend to be more intentional with my time. Hence the three whiteboards full of tasks and plans lining my room :D

Next up, I figured, why not ease into the new year with just a bit of graphics work ;) I started on a new implementation of the close-range dust shown off in the last update. I had an idea for a more efficient implementation about a week ago, and I'd like to switch to it as soon as possible, since the effect is currently rather expensive :problem: The new implementation will simply raytrace the dust volumes in screen space, rather than rasterizing them. Doing so will significantly reduce the consumed fillrate, since we can knock out all of the volumes in one pass. A preliminary test has shown roughly 3x speed, although I have yet to finish the implementation :thumbup:

Oh, speaking of graphics, I may have rewritten the jump hole graphics and made them look a lot cooler. Maybe :shifty:

Finally, it just wouldn't be a wholesome day without a bit of AI, right? Right. I patched up my delegation algorithm a bit, which was, to be totally honest, in a bit of a duct-taped situation (I mean, I was pretty frantic trying to get things un-broken for the update). So naturally I removed the duct tape and actually fixed things today :) I'm trying to figure out exactly where to go next with the AI, and I think the answer is that I need to go ahead and finish the research implementation. With research implemented, we'll actually start to see the creation of new stuff, and I suppose that's where things are going to get fun ;)

The path to a full research implementation is lined with dangerous foes, but we'll strike them down one-by-one :D

PS ~ It snowed today!!! :D :clap: :clap: :clap:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#6
Friday, January 3, 2014

Solid work today towards the data editor (and, by extension, research). I continue to build more power into the nodal UI, and leverage that power to build new types of widgets that will be used for the editor. Today saw the completion of the float, bool, and string editing widgets. The string editor is of particular interest to me, because it does a great job of showing the power of this type of interface. In a normal UI, a text field serves as a string editor. But in the LT UI, when you drill into a string editor, you get so much more than that! ;) A bunch of single-character nodes expand from the central string node and lay themselves out in the style of an on-screen keyboard. You can then click the nodes with the mouse, highlight and press them with a gamepad or joystick, or activate them using the corresponding keyboard key. So the string editor is immediately a great deal more accessible and intuitive than a text field :thumbup:

But believe it or not, I think the most exciting work of the day was on the manager Josh side! I ended up converting my "master plan" from an online mind map format to a simpler, text-based "planning tree." It's interesting, I've been through a lot of iterations of the master development plan, and I feel I've finally found the optimal format. The planning tree, as I call it, is just a hierarchical list of tasks, getting progressively more detailed as the tree goes deeper. At the top is, of course, just "Limit Theory," and at the leaf nodes are very, very specific things like "string editing widget," etc. The planning tree format makes it very easy to set deadlines and allocate tasks for myself - all I have to do is put a date on a node, which signifies that the node and all sub-nodes are to be completed by that date. But here's the interesting thing about it: when I converted to this format today, not only did I realize how nice it was, but I realized something else: it's the same format my AI uses!!

Indeed, I'm not the only one making planning trees around here! The LT AI works in the same manner, although I never exactly called it that before. It produces a "tree" of goals and sub-goals, then annotates the tree with specific strategies for solving them. In fact, the AI's planning tree is more elaborate than my own, because the AI also annotates the tree with things like how valuable each node is, how difficult it estimates each node to be, to whom it will delegate the node, etc. It's so, so interesting to me that we are using the same mechanism for achieving our goals, and I really feel that I can glean a lot of insight for use with the AI simply by observing how I handle my own planning tree :geek:

For example, I realized how imprecise my own notion of difficulty is. I have only a very, very rough concept of how difficult the nodes will be to solve relative to one another. This makes me feel as though the AI's difficulty heuristic, which I was previously concerned about, is more than satisfactory (probably better than my own!) Another observation I made is that I am perfectly content to carry out a plan that is not 100% complete - that is, I don't have all of the nodes completely expanded to "implementable" leaf nodes. There are things like, for example, "dialogue interface," that I still have no implementation strategy for, yet I know I will be able to solve when the time comes. This leads me to believe that maybe I've been too hard on my AI in forcing it to always have a complete plan. Maybe working from a partial plan is part of what makes us so capable - the fact that we trust our abilities enough to work towards things that we haven't verified as 100% possible. But then, what happens when we try to do something that is genuinely impossible? How do we recognize those things and stop ourselves from trying to plan around them? Maybe it's a moot point - maybe nothing's impossible (theory of nonexistence of extrinsic limitation, anyone?) ;) Interesting stuff :)

Now then, if you'll excuse me, I see here that the old "data editor" node is marked 1/4/2014, and I do indeed still have a ways to go...so let me get cracking :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of December 29, 2013

#7
Saturday, January 4, 2014

So close to that darn editor! All I really have left is pointer types. But I should be able to finish early enough today to not interfere with the rest of the day's plans :geek: I've got my sights set on some pretty lofty goals for this month, so I'm going to need every minute I can get.

A feature that took me a good little while to implement yesterday was proper handling of deleted nodes. This is a general pattern in CS: everything is fine and dandy until you start removing things. That's when someone gets hurt :shock: I'm willing to bet that upwards of 90% of the bugs in LTP were / are due to things getting removed. Yet again, a nice feature of a unified interface is that we can spend some time making sure that deletion is handled in a quality way, then not have to worry about it ever again (well...that's the theory...)

The UI is now equipped to detect when nodes are no longer required, and remove them as necessary. It can also handle the cases in which the node(s) being removed are active in some way (e.g., the player is looking at a piece of the UI which should no longer exist). This is the kind of edge case that might cause some pain for a normal interface. But our little nodal UI will handle it like a champ :)

Another long day ahead today and no rest in sight :geek:

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

Re: Week of December 29, 2013

#8
Week Summary

(Written 1 week later)

There's really only one thing to say about this week: it saw the first-ever examples of NPC-posted contracts via a working parallel delegation algorithm!! :) :clap: That, my friends, is excitement in its rawest form. Other than that, a bit of interface work, a bit of graphics work, but who are we kidding. Delegation is upon us. What more need I say :D

A bit of a twist seeing "manager Josh" come into the foreground this week, but we'll be seeing a lot more of him in 2014 to make sure that the underling Joshes don't get lost in a sea of details. Manager Josh will be keeping us grounded to a high-level, all-encompassing plan and holding us accountable for meeting deadlines :geek:

Accomplishments
  • First working implementation of AI delegation + first-ever NPC contracts!
  • Implemented float, string, and bool editing nodes
  • Implemented proper handling of deleted nodes in UI
  • Refined and reformatted the LT "master plan"
  • Worked on management skills and created a rigorous schedule for the month ;)
  • Successfully released 12 monthly update (in spite of a whole lot of pain in the process :shock: )
“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

cron