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


Week of April 20, 2014

Sunday, April 20, 2014

Well, as it was Easter Sunday, I didn't manage to get in as many hours as figured, what do you do when you don't have that many hours but you still want to get a lot done and have some fun in the process? You know the answer by now: graphics!!! :D :monkey:

Today's focus was on planet appearance, which I'll admit has gotten a bit out of shape in the past months. Well, I mean, obviously it hasn't degraded, but the rest of the graphics continue to improve and I've somewhat neglected planets. I changed that today! :) Spent some time tightening up the landmass generation to make land appear more clear and distinct than before. It always bothered me how 'fuzzy' the landmasses seemed previously. Also re-worked the coloring scheme for landmasses to improve variation and general attractiveness. Finally, I honed the atmospheric scattering some more and changed the way that atmospheres are colored. I've found that, in general, tinting the atmosphere looks pretty bad. Better to just change the wavelengths of light, which can 'naturally' change the color of the atmosphere, but in a way that looks more coherent than a straight-up tint. I got to explore some very strange alien atmospheres today :ghost:

Then, I went back to revisit an old friend: bloom! :wave: Bloom seems like something that I'm always fiddling with. Part of the problem is that I have two distinct methods for it that each have their own unique appeals. I have traditional HDR bloom, but also that nice 'softening' affect introduced in update #10 (which is, technically, what you might call 'geometric' bloom). Well, today I figured out a visually-appealing way to have both! Nice! Together, they make for a really nice HDR + slightly-dream-like effect. Just the kind of look that I want for LT. Don't worry, it's subtle. But it makes a difference ;)

With a full day ahead tomorrow, I'll be looking for another big day. And yes, I'm still also looking for that factional warfare...where is it...let me know if you see it... :geek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Monday, April 21, 2014

Step aside monkey, graphics time is over :monkey:

Worker Skill Implementation

Today I implemented the mechanisms for defining and tracking worker skill levels. From the point of view of the game engine, workers are more or less just like any other type of item that has an associated quality or output level. In order to make workers a tractable and ubiquitous commodity, I implement a somewhat-limited form of worker skill that basically segregates workers based on their profession (similar to what X Rebirth does).

Doing so actually creates a really nice mapping between a lot of different concepts within LT. We can think of anything you want to accomplish in the game as comprising five elements: labor, equipment, task, input, and output. The task is what's being done, obviously. The labor is who's doing it - in our case, workers. The equipment is what the laborer is using to perform the task. Inputs and outputs are resources that are needed / created by the task, respectively.

The nice thing that we can do here with workers is that we can define the worker classes such that they have a 1-to-1 mapping with tasks (hey! I think they do this in real life's called a "profession" :D ). We have a mining task, so we have 'miners,' who are skilled at using transfer beams and whatever else may be involved (mineral probes, etc.) We have 'production,' hence, we have 'engineers' who are skilled at using production labs. We have 'research,' hence, we have 'researchers' who are skilled at using research labs. You get the idea!

One big limitation of this system is that you don't have workers changing professions. That doesn't necessarily mean that a mechanism can't exist, or that you can't assign workers to jobs that they're not necessarily good at. But it does preclude the possibility of training a jack-of-all-trades worker. The reason for this is that we can significantly reduce the number of distinct worker types by only allowing them to progress along a single profession ('Novice Miner,' 'Skilled Miner,' 'Expert Miner,' etc.)

Labor as a Commodity

With workers strongly segregated by profession, we have an interesting and natural consequence: the price of a worker on the market essentially reflects the value of that type of labor in the system! In other words, if mining is a big profession (the system has a lot of lucrative asteroid fields), then miners are highly-valued there. Just what you would expect, and all without having to set up any kind of auxiliary market for labor :)

Leveling Up

Although I have yet to implement it, my plan for allowing workers to increase in skill is as follows. For every moment that a worker spends performing a task that aligns with their profession, there is a chance that they will advance to the next skill level (that chance obviously decreases as the level increases, such that higher levels are progressively harder to obtain). This is very similar to how research works: every moment that is spent researching one tech node yields a certain chance to unlock a new one. Why should it work as such? Because it makes workers stateless!

Using this leveling system, a novice miner is a novice miner is a novice miner. Period. Granted, we can have regional variants - Cyladanian Novice Miner, Jydonian Novice Miner, etc. But the point is that there is no concept of a 'novice miner with 75% experience.' That gets messy, both in terms of needing more memory, as well as being harder to reason about at the market. With this kind of stateless leveling up, we solve a lot of problems :geek:

Those who know a bit about probability theory will recognize that this kind of mechanism actually leads to an exponential distribution in terms of the time it takes to get to the next level. As you may or may not know, exponential distributions are...a lovely, lovely thing :) It means that, typically, you'll have a worker leveling up at the 'expected rate.' On occassion, you may get unlucky and have a particularly-dull worker who just can't seem to break through to the next level. This is exactly analogous to how research breakthroughs work! It's nice to have that kind of variability in the game, at least in my opinion.

Upwards and onwards... :D
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Tuesday, April 22, 2014

OK! Sorry to disappoint but today I'm going to do something a bit strange - I'm going to omit this dev log and carry the work over to tomorrow's, so that I can post tomorrow's log at a normal time.

The Inevitable Dev Log Wrap-Around aka 'DevLog Savings Time'

I've gotten quite pushed back with the dev log times to the point that I'm regularly posting them at 4 or 5 PM the day after. This means that I'm posting them smack dab in the middle of my current work day, which creates a very odd dynamic where I try to get up early or cram extra hours in before the log. It's weird and I don't like it :crazy:

Despite trying to rectify this problem by posting earlier, I suffer from a severe case of 'just-one-more-hour-so-I-can-have-even-more-to-talk-about'itis. It's not healthy :lol:

So today, instead, I bring you a squirrel :squirrel: And 'tomorrow' I will bring you a dev log at a sane time once more (at the end of my actual work day!), which will include today's work.

Happy devlog savings time! :D :ghost:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Wednesday, April 23, 2014

Hoorah! That wasn't so long to wait, was it? And look what spoils devlog savings time has brought us!! :D


No, seriously! Look at the spoils! Literally! :ghost: They weren't obtained legally, but who cares? This is Limit Theory. Some will abide by the law. Others will break it. Such is the nature of good and evil.

Today I implement a piracy task that involves patrolling a zone, hunting down innocent passersby therein, and stealing their goodies to sell elsewhere. How much of that is done? Er...the hunting down part :D I still need to implement the cargo drop and scooping up cargo. But this is a lot of new AI content all at once, and I'm very excited to see it happening :) Along with this comes new work on the combat AI, which I know everyone has been missing since LTP. It's nice to hear far-off pew pews and explosions once more :ghost:

Note that piracy is different from warfare (about which I've been dreaming). The primary purpose of piracy is to acquire the dropped cargo (and, presumably, sell it somewhere). The primary purpose of warfare is to do damage to another faction (presumably to reduce their threat, take away territorial control, or just generally be an annoyance).

Starting Risk Management Implementation

Along with piracy comes an interesting new metric today related to projects**: 'losses incurred'! Yep, it's just what it sounds like. If you lose an asset while it's allocated to a project, the losses incurred metric increases by the value of the asset that you lost. This can help both you as well as NPCs to better understand the risk of any given project. Setting up a mining project in a pirate-infested asteroid field is likely to incur significant asset loss.

Today I have just implemented the metric itself, I've not yet created a handling mechanism for the AI. The mechanism I envision, though, is that, if a project starts to become significantly lossy, the AI will attempt to allocate some amount of funding to reduce the risk of the project (by, for example, putting a listing at the local market for dogtags from the offending pirate faction). If, after continued attempts to reduce the risk, the project is still proving to be financially detrimental, the AI will of course abandon it and switch to a new task.

I really look forward to seeing the dynamics of this play out when I finish the implementations. Much like the periodic equilibrium of the market, I expect that this kind of AI behavior will induce periodicity in the activity that we see in any given area. A safe, lucrative task will attract undertakers. Those undertakers will move valuable assets through space in a predictable fashion to perform the task. Other, less-lawful individuals may notice a differential between the security of the space in question and the amount of value being carried therein, and attempt to exploit this differential by setting up piracy operations. Piracy will cause asset loss to the undertakers, which will create a demand for security. Security rises as undertakers fund bounties on pirate factions, and, ultimately, pirate activity may become unprofitable due to high security. Pirates move on to greener fields, demand for security falls over a long period of time, and the cycle starts once more! Sounds an awful lot like the supply / demand cycle, does it not? ;)


I've been giving a lot of thought to 'meta-projects' lately (i.e., projects that are set up for the sole purpose of changing the nature of another project). This is probably the one most critical step that I still lack with macro AI. It will govern many important facets of the macro play, including acquisition of new assets, expansion into new territory, competition-driven warfare, and even asset security (as per above). Today I've given some thought to how I want to categorize and approach generation and evaluation of metaprojects. I'm close to starting this final stretch of macro AI, but I'm not quite there yet. Look forward to more on this soon :geek:

I Command You to Play Limit Theory!

Interesting tidbit that doesn't really belong anywhere else: you know how I love renaming things, right? Well, the task that NPCs execute to perform high-level management used to be called 'Manage.' Like, they're managing their assets and operations and such. But you know what? I realized the task is actually better described by a different name: 'Play.' :shock: You know, because what they're really doing is playing Limit Theory. They're even called players in the code (just like the human player). Limit Theory contains a task to play Limit Theory. Is that...kind of...meta? Or scary? Or cool? I can't tell. I think it's a bit of all three :cool: (I guess it goes without saying that this task isn't available to the human player!)


Alright! I'm already loving the reversion to a reasonable dev log time. I'm also loving macro AI and, just generally, thinking about that broad picture. Last month got me hooked, this month got me digging deeper. This is what LT is all about, folks. Deep dynamicity in a vibrant, procedural universe. Get excited. I am :clap:

** Note - I was recently informed that I've been misusing the word 'project,' and that 'operation' is the real word for an ongoing process (which is what I've been talking about). Although I briefly switched my terminology in the engine to reflect the correct usage of the words 'operation' and 'project,' today I have ultimately decided to switch it all back to 'project,' both because I like the ease-of-use of the word, as well as the fact that I would prefer to think of an operation as a specialization of a project, where the terminating condition is null (or "project becomes unprofitable"). This means that, in the project interface, if you set a termination condition for your project, it is a true 'project' as we would call it in the real world. If you set no termination condition, it is actually what we should call an 'operation.' Still, I like the unification of terminology :D

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

Re: Week of April 20, 2014

Thursday, April 24, 2014

Mmm. Juicy macro. Nothing like a good slice of juicy macro :D Today I dug deeply into that highest-of-high-level macro AI at which I hinted yesterday. Metatasks. Tasks that change your ability to carry out other tasks.

What it all boils down to is this: suppose you're playing LT, and you've figured out how to earn money. Be it through mission-running, doing some task yourself, or setting up ongoing projects, let's just say you're at a point in the game where you've figured out how to convert your effort into money. As I spoke about (rather enthusiastically) last month, this is 'half' of the battle. Acquiring money.

Then the big question is: what do you do with that money? When I spoke of it last, I suggested that there are two general options: 1) feed the money back into your moneymaking processes, or 2) expend the money to fulfill arbitrary personal goals. 2) seems relatively straightforward, as expending money to achieve your goals isn't that much different from expending money to acquire an asset, a resource, etc. (a concept with which the AI is already familiar). So we need to take a closer look at 1.

So you've made some cash. As a player, what might you do with it? Well, maybe you trade up to a bigger ship to help you haul more cargo, since you seem to be doing a lot of trade runs as of late. Maybe you invest in another ship and a skilled pilot, since you've been running through some dangerous zones lately and have no interest in being obliterated anytime soon. Maybe you put a price on the head of a trade competitor to help grow your control of the market. Maybe you save up for a station so you can finally have a swath of spacey goodness to call your own, from which you can then base your shiny new production operation. You see, these all fall under category #1. Let's try to qualify them more precisely.

I have broken category 1 into two further categories: specific and general metatasks, but, for the sake of devlog brevity and because I focused mainly on the former today, I will speak only of specific metatasks right now.

Specific Metatasks

Specific metatasks are those that have a very clear impact on an existing operation. Broadly, they are tasks that are intended to increase the rate at which an existing operation creates value. In that sense, a project based around a specific metatask is always a 'child' of an existing project. Let's look at some ways in which this can occur:

> Competition Elimination
  • Ultimately, the value of an operation is determined by the value of the products of the operation in the local economy. As we well know, the supply / demand ratio is a key factor in determining this value. The direct implication of this is that, if we can reduce the supply of those products from competing entities, we can obtain more value for our own supply. Hence, the goal of competition elimination is to destructively diminish third-party sources of the product. Competition elimination is a strong entrypoint for factional warfare ;) (As I mentioned yesterday, the objective of factional warfare is generally to do damage or claim territory. Competition elimination directly fuels a demand for the former!)
> Efficiency
  • Through research, it is possible to increase the output of operations by acquiring better equipment. Efficiency is one avenue through which we can obtain a higher throughput without needing to increase the workforce. This is where research really derives its value!
> Growth
  • Barring efficiency-increases, we can still increase the output of operations simply by throwing more assets, both labor and equipment at it. This is probably the most straightforward example of metatasks, and probably a lot of what players tend to think about. After all, the biggest fish always wins, right? :ghost:
> Security
  • As I spoke about yesterday, aggression can reduce the profitability of an operation by causing asset loss. If an operation is incurring significant loss, we can try to increase the security of the operation to once again increase profitability.
I'm working on the implementation at the moment, but the hardest part here is...pretty darn hard. The hardest part is that we need to be able to quantify the value of each specific metatask. It was already hard enough to quantify the value of a specific task in the face of a completely-dynamic marketplace. But now we need to actually quantify the value of a task whose only value is in changing the way another task operates :shock: For growth and efficiency, it doesn't seem too terribly hard. But for competition elimination and security, the quantification will not be so straightforward.


And hey, look at that, it's already the 25th :shock: Err...I need to go ahead and not sleep for a week. *runs off to make coffee* :D

PS ~ We've really gotta do something about these dev log lengths. I just don't know what to do. They're out of control :lol: :ghost:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Friday, April 25, 2014

What? A day you say? Surely not. Surely it was at least two or three that passed :shock:

Too much. Too much work today. Or maybe just too much to enumerate. But I'm a good sport, so I'll still make an attempt to do so. You know, it's that time of the month where all coherence is lost and volume becomes the key factor. Push, push, push. Everything that can be pushed must be pushed! :monkey:
  • Finished implementation of new UI icons using the fast node renderer; includes implementation of offsetting, scaling, color masking, and alpha masking glyphs as a group
  • Used new icon format to define some icons for various UI nodes (market, player, cargo, ...) as well as some item classes
  • Implemented wedge glyph for node renderer (and made use of it in the system map)
  • Numerous improvements to system map, including fade distances, indications of health, and more!
  • Re-introduced and strongly improved specular highlights on planets (both land & ocean)
  • Improved top-secret 'FDM' technique for making textured surfaces appear visually crisp at all distances :cool:
  • Worked on the AI attack maneuvering (still some work to be done here)
  • Millions of small improvements and clean-ups to the UI
  • Remained generally awesome throughout the whole day :ghost:
Yeah, I needed a little breather from macro buffoonery. But just a one-day breather.

Shhhhh, leave me alone now, my macro AI misses me :ugeek:
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Saturday, April 26, 2014

:monkey: :shifty:

Look. He didn't get to come out much these past two months, ok? He was lonely. Frightened. Sad. Graphics Josh used to get to run around freely all the time. Yeah, we had to lock him up because we needed gameplay. We needed AI. But now that those things are well on the way, isn't it ok to give him a few days a month? That monkey works harder than anyone else I know. AI Josh, UI Josh, Gameplay Josh...none of them can compete with the sheer volume of what Graphics Josh can do in a day. And that's why we let him out today :D

Before I drop this list, let me just say: it's difficult to understand the impact of loads and loads of small polishes and improvements. Sometimes it amounts to very little. Sometimes it amounts to a lot. Well, in this case, it hardly even looks like the same game :shock: :thumbup:
  • Improved occlusion model for nebula generation (fantastic new look!)
  • Fixed and significantly improved engine trails
  • New and more realistic lighting model for asteroids
  • Drastically improved quality of background starfield
  • Fixed star aliasing issue (stars flickering when camera moves)!
  • Improved asteroid shapes by refining the underlying noise functions
  • Improved color grading
  • Tweaked planetary atmospheres for better color and thickness (breaking reality just a teensy bit ;) )
  • Separated dithering from tonemapping so as to dither at the very end - this time we really killed all of the banding!
  • Worked on a 'realistic' mode that bumps up scales to realistic values, reduces drag to near-zero, modifies radiance values to look like real space, etc. I'm hoping to ship something like this with the game so that those who love their 'real' space sim goodness can be satisfied. It's amazing how easily the LT engine can do all of it, so there's really no sense in me not including something that takes a few hours to make and will surely please a lot of you hardcore spaceys :ghost:
Ok. That was an awesome day. I think GJ is satisfied now that he's had his fun. Seriously, we need to get back to this AI and make some end-of-month magic happen as usual ;)
“Whether you think you can, or you think you can't--you're right.” ~ Henry Ford

Re: Week of April 20, 2014

Summary of the Week of April 20, 2014
  • Improved planetary graphics (both atmosphere and surface)
  • New unified bloom effect for achieving both dark & light bloom
  • Started on piracy task & associated AI
  • Developed categories of metatasks for macro AI
  • Billions of minor tweaks and improvements ;)
  • Let Graphics Josh out for a whole day and reaped many rewards! :monkey:
“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 1 guest