Stats and More Stats
Hey Folks! Still plugging away at a complete stat list for AIs. And let me say, this is getting complex:
In the above screenshot, the rows are individual interactions (chat, snub, eat, perform trick, etc.), while the columns are stats. As mentioned yesterday, there are now three types of stats. Needs are things like emotional needs, oxygen, and hydration, stats are things like encumbrance, radiation exposure, and poison, and ticks are rates at which each of these needs/stats change over time. The selected columns on the right are the ticks.
The list has expanded slightly since yesterday, and we now have StatAtrophy and NeedHygiene (both of which will be important on long space voyages in a confined area).
As you can probably tell by the coloration, I'm about 3/4 done with choosing values for the list. And the left-most highlighted column shows the net positive or negative effect of the interaction. So far, it seems like a pretty good spread of positive and negative outcomes, so emotions should ebb and flow as AIs do their thing.
I've also made the interactions a bit more modular, as many of the petitioner->granter chains can be broken into component parts and mixed and matched. E.g. "Insult target" is a perfectly valid response for a number of interactions, from chatting to flirting, and even offers to help. This way, we should start to see more variable interaction chains and get more data re-use.
Also, as mentioned earlier, this expanded stat list gives me a chance to tackle some of the more mixed emotional/physical interactions. Things like exercising, sleeping, etc. And as I'm discovering, it raises a lot of interesting questions.
For one thing, I can go two different ways when applying effects of a physical interaction.
One way is to apply stat changes directly, like NeedRest increases when exercising, while NeedAchievement decreases. This has the benefit of working within the current AI decision-making code, since the AI is carefully remembering the direct effects of an interaction for future reference. However, the down side is that the effects are more or less instant and permanent. They get flicked on like a switch, and decay over time with normal AI rates. Not very natural. Also, it means a lot of redundant data as interactions that have similar effects must repeat similar data.
A second way is to make an interaction apply some sort of condition that contains several other conditions. In the above example, maybe the exercise interaction applies "exhausted" and "inspired" conditions, the former affecting NeedRest and the latter NeedAchievement. Doing it this way means those "exhausted" and "inspired" conditions can disappear over time, like temporary buffs. And other interactions with similar effects can just reuse those, making data management easier. The down side, however, is that the AI probably won't remember them as effectively, since they're setup to remember direct effects.
There are ways to make AIs remember things better in the second way, but I've been noodling for so long I'm starting to get antsy. I haven't made visible progress in a while, and my inner project manager is saying "put this on the back burner, or cut it." I feel like I've been refactoring over and over. Of course, a lot of this is the result of seeing how the data is actually being used now that there are more mechanics in place, as compared to the original design which was more theoretical.
I dunno. I'm going to have to take a hard look at this soon. But I might be close enough to finishing this interaction iteration to see if it makes progress, and decide after that.