ty ty ty! Excited for these myself!
@theEasternDragon, having them curl the tentacles would feel sorta like a waste, you'd agree with me if you spent 3 hours doing the dangly physics
They do curl them up when carrying bats though. The stuff on their head is a shield or plate of some kind, assumedly the same material as the wings.
@tortoiseandcrow thanks! The interaction is probably just a bump together, but keep projecting, that's how the magic happens haha! White ones are slightly heavier than black ones, and they have a little bit different behavior when annoying you, but the biggest difference is in how they hunt. The black ones do migrate from a cicada room to a bat swarm room during the cycle, you can see them going back and forth if you come across one of their routes.
Both buttons at the same time seems viable, the only problem is that holding the jump button makes you jump higher, and it's quite common to want to throw something as you're jumping... Taming of creatures will actually not be all that difficult, I predict, once the Dynamic Relationships are in.
Update 415Dynamic relationships! What is this thing I'm doing? Basically in the old set-up, I wrote the AI with a sort of limited idea about the sort of interactions I'd want to implement down the line. I though of creature relationships as static, one always eat the other, the other always flee. In that system it made sense to make it so that upon spotting another creature the first time, the AI takes a look at the relationship to that creature, and hands it off to a dedicated AI module to take care of it. If the relationship is "Eats" the creature gets sorted into the PreyTracker, if the relationship is "AfraidOf" it's dedicated to the ThreatTracker, etc.
This system is very limited, so what I've been doing today is writing a RelationshipTracker, which re-evaluates the relationships to other creatures frame-by-frame, and if the relationship changes it sorts it into the correct module. Sounds easy, but there's a lot going on. Basically each module lives its own life, deleting and shuffling the creatures it keeps track of as it wants. So I have to make sure that if a relationship is moved, it's properly removed where it was, properly added where it should be, and so on. The good part is that this has solved some other problems that were hanging around, such as creatures sometimes forgetting about threats they haven't seen in a while and then being unable to add them back, and the like.
The main tracker in a RW creature's AI is simply called the Tracker. This one basically keeps track of what creatures I know of, and where I think they might currently be (a notion that might be correct if I'm currently looking at them, and various degrees of incorrect if it was a while since I saw them). Each creature I know of has a representation in the Tracker, and this is sort of the UR representation for that creature, other modules refer to this one when thinking about a creature.
Other trackers such as PreyTracker and ThreatTracker has a reference to the creature representation in the Tracker, as well as some other module-specific data regarding that creature, such as how yummy it looks or whatever might be relevant.
The relationship tracker keeps goes through the representations in the Tracker, asks the AI what relationship it currently has to the creature in question, and if necessary moves stuff around to where they're supposed to be. For example, if I am only hunting the slugcat within a specific area, but the slugcat just exited that area, the slugcat representation needs to move from my PreyTracker to some other module.
This stuff is all pretty much just logistics. The cool stuff is an "internal state" for each tracked creature that is kept inside the RelationshipTracker. An internal state is a mini data structure which keeps track of some relevant stuff. Let's make a simple example: I'm a cicada - I want to cause a slugcat trouble. Unless the slugcat is holding a spear, in which case I want to get away.
So the slugcat is on the ground, no spear, and its representation in my cicada head is comfortably within my AgressionTracker. Now the slugcat runs over and picks up the spear. Now the thing is that we're doing this thing where RW creature don't know what they can't know. So say that the spear and the slugcat are out of my sight as the weapon is equipped. Every frame I (the cicada) ask my RelationshipTracker what relationship I have to the slugcat. The RelationshipTracker can't access the data about whether or not the slugcat is holding a spear directly, it has to go ask the
internal state representing the slugcat. The internal state has a bool which represents the slugcat holding a spear or not.
As I still
think that the slugcat is unarmed, I'll continue to go after it. Until I come around a corner - then I suddenly have a visual on the slugcat, and the internal state is allowed to correct itself. The bool changes, and with this new information the nature of our inter-creature relationship shifts. The RelationshipTracker takes care of it, moves the slugcat to my ThreatTracker, and I can start scramming.
That's the theory, now let's take a look!
So notice how the cicada is harassing the player, until the player is armed, then it decides to get out of there. The player then goes underground and actually throws the spear and is not armed any more, but because the cicada can't see this it's state of fear is unchanged. The next time it saw the player it would reconsider. This is the sort of stuff that makes me all warm inside
The system seems to be working, the only thing that's needed now is to migrate it to the vulture and lizard as well. The other creatures use simpler AI's that won't really need this level of complexity.
I have this policy that I'll tell what I've done, not what I hope to do, but you can probably imagine the possibilities yourself. Social stuff such as befriending creatures, angering creatures, creatures reacting dynamically to different situations like trying to save their friends from the jaws of a lizard, etc.