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

Post

Week of November 24, 2013

#1
Sunday, November 24, 2013

A combination of lack of time and family time made today a whole lot less-than-exciting from a dev log perspective :|

My only real focus was on the interface. I'm still trying to find the right breakthrough with respect to a node-based layout. I did some good work the other day, but it was too focused on motion rather than zooming. I really think zooming is a key part of what made the data editor so brilliant. Zooming is, in my opinion, the only elegant and intuitive replacement for scrolling. I'm trying to work zooming into the UI, but, at the same time, I don't want the UI to constantly be in motion (sure don't want to give people motion sickness, as some of us experienced with X Rebirth's Autoroll :shock: :lol:). I don't have the answer yet, but I'm searching for it :geek:

Well, that's really all there is to say about today. Sorry! Hope there's more for tomorrow :)

[ 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 November 24, 2013

#2
Monday, November 25, 2013

Wow, amazing day...I made so much progress on the nodal interface...it's awesome :)

I settled on a recursive circular layout for the moment, although I'm sure I'll implement more layout algorithms in the future. Circles get the job done for almost any structure up to a branching factor of about 20 or so. For straight-up lists of data (i.e. >20 elements with a flat structure), I'll probably still need some other kind of layout - perhaps a grid. I implemented all the visual fanciness that you would expect (having seen the data editor, that is ;) ). I also implemented gamepad support. It's so cool to see how the nodes create a memorable structure just via these simple automatic layout algorithms. Math is beautiful, might as well let it do the heavy lifting, right? ;) Certainly better than hand-building every interface...

After just 30 minutes or so of getting accustomed to navigating the interface (with my controller), I'm already experiencing how fast this kind of interface can be for an expert. I mentioned the whole "gesture" thing a few days ago, but it feels like so much more than that now. With all the visual feedback incorporated, the zooming, the colors...it feels almost like a direct connection to the computer. I can drill down into a specific hardpoint attached to my ship in less than a second (5 or 6 levels deep...). It's just pure muscle memory; pure visceral feedback as I surf the waves of data. Incredible feeling :geek: I can't even imagine how exciting the experience will be when I'm managing a whole empire in this manner - at one with the data and function of every tiny particle in every sector under my control :D

Let's take a moment to review. A node-based interface is: 1) beautiful 2) automatically-generated 3) conducive to visualizing structure 4) easily-manipulable with alternative input devices (gamepad, joystick, touchscreens), 5) faster to operate for experts. Hmm. Tough call but...yeah, I think it's the right choice ;)

[ 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 November 24, 2013

#3
Tuesday, November 26, 2013

Another solid day of UI, but also snuck in some AI toward the end ;)

UI is still coming along really well, and, as always, I have a great feeling about it.

On the AI front...I decided to get into the belly of the beast today with...parallel reasoning! Parallel reasoning is the ability for the AI to reason about doing multiple things at once. Multi-tasking. For example, waiting on a sell order to come through while simultaneously going about business as usual. Or using a production / research unit while en route to some location.

I realized that parallel reasoning isn't as conceptually hard as I first imagined: it seems to fit very cleanly into the action framework that I already have, simply requiring a single new action: "multitask." The key to the multitask action is that is combines two actions into one. This is the atomic unit of parallel reasoning! Heck, the AI doesn't even need to know that it's doing multiple things at once, it just needs to use the "multitask" action. N-action multitasking is just a recursive application of the multitask action! Cool :geek:

Unfortunately, correctly implementing this action will require a bit more infrastructure than I have, but not by a lot. I've suspected for a few weeks now that I need to make a distinction between conditions that must be met to perform an action and conditions that must be met to continue performing an action. I need this distinction because parallel actions are possible if and only if the latter conditions don't conflict, e.g., the conditions for continuing both actions can be satisfied at the same time. However, it's possible for the preconditions (the first set of conditions) to conflict and still be able to perform the actions in parallel. For example, putting up a listing on the market requires being at the market. But waiting on it requires nothing. Although the former condition will likely conflict with many actions, the act of waiting on a market order doesn't actually conflict with anything, because the condition to continue waiting is...nothing.

Although I haven't fully explored the ramifications yet, I'm pretty sure that parallel reasoning is just a short jump away from delegative reasoning :think: and once I get delegative reasoning going, well, we'll really be rolling ;)

Tomorrow I'll be driving again, but hopefully I'll get a chance to dip my toes into the first attempt at parallel reasoning when I arrive! :D

[ 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 November 24, 2013

#4
Wednesday, November 27, 2013

Parallel reasoning is born!!! :geek:

(Hey, I didn't say it worked yet :roll:)

Immediately after implementing multitasking, the AI completely blew up with bad ideas :oops: Well...I guess you can't expect those NPCs not to play with the shiny new toy that you gave them :crazy: And boy..did they play with it! I was seeing NPCs thinking about 100-ply multitasking, where they envisioned themselves flying to every single ore-laden asteroid at the same time :lol: Grand visions, grand visions. Too bad you can only be in one place at one time little fella. It was a cute idea, though :P

Needless to say correcting the implementation took a while. There's a tremendous amount of nuance in understanding whether two actions are really a good fit for performing simultaneously. As I mentioned yesterday, my initial idea was to make sure that the conditions to continue performing don't conflict. But, as the AI quickly showed me, that's not at all sufficient - all you need to fly somewhere is an engine, but that doesn't mean you can fly to all 100 asteroids at once :lol:

The AI is only just starting to have some sensible thoughts, so it'll still take a bit longer to beat reasoning back into shape - but mining while docking is at least marginally more sensible than mining 100 different asteroids at once :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 November 24, 2013

#5
Thursday, November 28, 2013

Started a bit down the path of delegative reasoning today :geek: It's going to be serious business :think: Having multitasking gets you pretty far, but there are still some really tough questions that you've got to answer before you can understand delegation. In particular, multitasking allows you to understand all that you need to understand in the way of "I'll do X while he does Y," but you still need to answer the question of what exactly is entailed in you getting him to do Y in the first place. The way I see it, I've boiled it down to two primary questions:

1) How much will you pay for the task (what is it worth to you)?
2) How long will it take before someone accepts to perform the task for you (for the given rate) and completes it successfully?

#1 is really a matter of opinion, and not that hard. Use whatever method you like to put a price on a job. #2 is the killer. Notice that there is no mention of probability (what's the chance that someone will accept to perform the task, or what's the chance that the someone will perform it successfully). That's because I believe everything can be rolled into an "expected value" for the time it will take someone to successfully complete the task.

Consider, for example, the case in which you've clearly not offered enough compensation for the task. Then 2) will evaluate to a really, really big number (or infinity) - meaning you'll be waiting till kingdom come before it gets done. The same can be said for a really difficult task.

Obviously, there's a lot of stuff that needs to go into the heuristic for #2. How easy is it to find help in the given sector? (Or, better yet, from an economics standpoint: how is the supply of labor in the area? Even better, how is the supply of labor with respect to your specific task in the area?) How long would the task take you? Is it possible to fail? If so, what's the probability of doing so (note that you can get really, really deep with that one - you might even go so far as to consider how capable the local labor pool is, e.g., listing a job in a system with lots of highly-skilled pilots is likely to get it done faster).

More questions raised than answered, really, but I already feel that I'm barking up several right trees :D (Much like my AI was barking up many different asteroids yesterday :monkey:)

It's also worth mentioning that I hammered down parallel reasoning even better today, and the AI is officially not doing anything stupid anymore. Granted, they're also not using any parallelism..but I'm pretty sure that's because there's not currently a beneficial way to multitask. We'll see what happens when the action pool gets more interesting ;)

And...finally...maybe...also worth mentioning...graphics Josh may have snuck out for an hour or so today to add some gratuitous shiny stuff to that node-based interface :roll: Bah. I had to feed him just a bit. He was really quite harmless, as you can see, he didn't take up anywhere near the whole day :)

:monkey:

[ 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 November 24, 2013

#6
Friday, November 29, 2013

Good day, but not as much accomplished as I wanted :problem:

On the conceptual side, I continued to think about delegation and, in particular, valuation of things. I'm pretty sure that every problem I face at the moment can be solved elegantly by keeping track of a cost, supply, and demand for every "metric" (e.g. measurable game state) in the game, at the system-level. With such a mechanism, an NPC would be able to know how much to pay for an item, simply by tapping into the historical data for the "itemcount" metric. Similarly, an NPC would know how much to offer for an escort mission by tapping into details for the "safety" metric (which would naturally be high in regions where safety is difficult to provide).

The thing that really fascinates me about this is that it looks like it can unify all concepts of supply / demand / economics under the same system, meaning the economics of the market are just a special case of the more general problem (the value of metrics). The mission board...the market...they're really the same thing, aren't they? Item value is the same as service value...heck, value is all the same thing :shock:

On the implementation side, I'm still working on the UI and trying to pull together some impressive demo material for the update video :D I'm 150% in love with it at this point, and there's just no way I can hide it. I can't decide whether I love the beauty, the simplicity, or the ease-of-coding best. Hard to say ;) All I know is, it took me five minutes to build a hierarchical map of the universe with it...one that is both beautiful and easily-navigable with any input device...yep, I think that's considered a win :)

Finally, on the practical side, it's time for me to go to bed :D :wave:

PS ~ If you're not part of the KS crowd, you may not have seen this update, which explains why you won't see an update video today (but rather, in a few more days ;) ). Sorry! :monkey:

[ 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 November 24, 2013

#7
Saturday, November 30, 2013

Nodal interface, missions, and delegation. But let's talk about missions...they're most interesting :geek:

One of the many challenges that I face with implementing missions is determining when an actor is "responsible" for the success or failure of the mission. A mission is, fundamentally, saying "I want X to happen and I'll pay Y if it does." Well, that's what a mission seems to be saying. But that's not quite right, let's be more careful how we phrase that: "I want X to happen and I'll pay you Y if you make it so." Yes, in order to be compensated for anything, you must be the one to cause it, directly or indirectly. But this implies that we can look at the state of the world and understand how it got that way. Well, even worse, it implies that we understand who made it that way. Like all AI-related things, it looks easy from the outside, but is most definitely not.

It's not even that the problem is one of implementation. It's also a real conceptual / philosophical question. Suppose you put a bounty on X. Suppose that bounty hunters Y, Z, and W go after X. Y takes 99% of X's health, but at the last moment, Z swoops in and happens to deliver the killing blow. W is nowhere to be seen. Who gets the bounty? A naive trigger such as "if this bullet causes death, credit the owner with the death of this ship" would say that Z deserves credit. Does he? Maybe, I guess it's not too bad if we give it to him. But even the ability to recognize Z as the responsible party requires some work - in particular, we have to define some trigger logic in the world to keep track of it. Without that logic, we'd have no idea whether Y, Z, W, or that massive asteroid that appeared out of nowhere was to blame for the death of X. But how do you generalize that logic? How do you keep track of actions in a generic way?

Here's an idea: perhaps you log the state of the world before an actor is given a turn to influence anything, then you log the state after the actor performs his actions for the frame. Any differentials are credited to the actor. This would solve the aforementioned case. Or wait, would it? ;)

No, it wouldn't, because it's not the person who kills - it's not even the gun - it's the bullet, right? But the bullet is in motion via natural physical laws. Once out of the chamber, it really doesn't have anything to do with the person anymore. So does the bounty belong to mother nature? :lol: How do we know who fired the bullet? "Duh, just mark the bullet when a person fires one." Of course, an obvious and intuitive solution, but how do you generalize that? How do you provide "backtrace" information for every entity in the game that's involved in some sequence of events? Do you have to log every tiny detail of everything that happens, just so that you can look back to figure out "whodunnit"?

As always, lots of questions :geek: But these are at least some pretty fun conceptual ones :D

Tomorrow I head back to the coding cave. Really looking forward to doing some late-night code sprinting to pull some more stuff together for the video :D Also looking forward to seeing LT in all it's shiny glory again, as it just doesn't look that fantastic on this HD4000 :monkey:

PS ~ I'm going to stop posting the devtime.ltheory.com link until it's fixed again...kind of misleading for the time being :problem: :oops:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford
Post

Re: Week of November 24, 2013

#8
Week Summary

(Written 1 week later...)

Perhaps not the most productive of weeks, but I blame it on family time :D Implementing multitasking was no small feat, but I'd have to say that the interface takes the cake for "most exciting work" this week.

And, it just so happens that peering into the future tells me...you guys like the interface too! ;)

Accomplishments
  • Major improvements to the node-based interface...looking amazing!
  • Implemented "continuing conditions" distinction for AI
  • Implemented multitasking action for AI (including conflicting action detection)
  • Started on delegative reasoning theory!
“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