It’s Friday, and you know what that means.
<Queue intro: epic music, crazy stream highlights>
Colonists are slowly becoming more and more polished. Last week we implemented thought bubbles. This week we implemented conversations.
Every game tick (which is currently every game minute) colonists who aren’t in a conversation look for nearby colonists.
Once a colonist is found, a new conversation is created. Unless that colonist was already in a conversation, in which case the conversation is joined.
There’s some other criteria as well. The found colonist can’t be asleep or dead, for example.
Colonists need to be within a certain range to talk. I think the current value is 8 tile units or 4 floors.
The distance required to leave a conversation is 50% greater than the distance required to join a conversation. This prevents colonists from walking into a conversation for 1 frame and then immediately leaving.
The colonist who started the conversation is considered the “host”. All distances are based on the straight line distance from talker to “host”.
(This reminds me, I forgot to do a line-of-sight check, so colonists can currently talk through walls. Please refund)
Conversations go like this:
A random “talker” is selected.
The talker determines something to talk about
The talker displays the appropriate speech bubbles
All listeners optionally react
Colonists talk about 2 things:
Memories (can be shared with other colonists)
Generic (contains no memories, basically talking about nothing)
When a colonist is the “talker” they have a random chance of talking about a memory. There is currently a 25% to share a memory and a 75% chance to talk about something generic. The memories are randomly selected.
Memories control the speech bubbles displayed for both talker and responder. So when a colonist is talking about being hungry, the speech bubbles will be something food related. The responses will be something sad or angry.
Conversations are the basis of the rumor system. They allow 1 colonist’s experience to affect any colonist they come into contact with.
So if a colonist sees a dead body, they’ll tell bring it up in conversation. The listening colonists will acquire this information and they’ll also talk about it.
Leave no witnesses.
We’re not sure if we want memories to become “misheard” in conversation. For example, a colonist could talk about “dead rat” and a listener might misinterpret it as “dead body”. That listener would then go around telling everyone about a dead body in the station.
That sounds interesting, but it wouldn’t be fun if your colony became crazy because of a fake rumor that the water was poisoned.
On the other hand, we’re completely fine with a crazy colonist making up stories, because you can quarantine a single crazy colonist.
Talking To Walls
Internally, colonists don’t know that they’re talking to other colonists.
They look for “conversation agents”. Anything could be returned, like a lamp, teddy bear, or wall. The teddy bear wouldn’t display any speech bubbles, but it wouldn’t stop the colonist from responding.
We could also communicate information through the teddy bear. The teddy bear could tell the colonist that all of its friends were murdered.
Picture it. A lone colonist laughing maniacally with a teddy bear, and then going on a killing spree.
More realistically, our long term goal is for colonists to use devices to communicate across the stations (walkie-talkie / cell phone) and for lonely or crazy colonists to talk to inanimate objects.
To prove my previous point, here’s a gif of a colonist talking to a toilet.
And because you probably think I’m lying or something, here’s the log from the conversation.
I’m sure you still don’t trust me, so here’s the 3 components that I added to the toilet so that a colonist would talk to it.
Ideally, I wouldn’t have to add the Conversation Speech Bubble Creator component, but it’s in charge of the some of the conversation timings. I would have needed to create a new component for non-visual communication, and I’m lazy. Especially when colonists won’t actually talk to toilets.
That’s mostly it for conversations.
I think next week we’re going to post a slightly more involved blog about the new UI system, but don’t hold me to that.
Fixed a bug where adhoc material changes were not reverted when an object was deleted (because we’re recycling gameobjects now)
All objects are now internally and visually selectable (in a better way)
Selection now has a hierarchy. Colonists > Objects > Floors
Changed how wall sides are selected for painting (it’s much much better now)
Keyboard input is now disabled while typing in the search bar. (hotkey keyboard input)
Fixed a bug where sometimes the frame rate would drop and an object would be placed in the wrong location
The ore refinery will no longer produce when at max capacity.
Implemented hold and drag painting and automatic room painting.
Adding all speech bubble types to the game.
Added another access position to the crop drop-off.
Search bar text can now be translated.
Infrastructure objects no longer clip through each other.
Search bar text has a blinking caret now.
Designed more windows for the UI.
Added prefabs for all window elements (next week we’ll start implementing the windows)
Fixed a bug where colonist carry slot positions would revert when colonists changed floors.
Colonists will now requeue the PerformJob state automatically.
Fixed some issues with the wrong menu tabs being activated.
The summary window now reverts to the currently selected object when the cursor is not over the UI (this means something if you could have played the game)
Implemented colonist conversations
Fixed an issue with item crates not becoming unlinked when dropped.
Fixed a pathfinding generation issue when an access position was just barely considered diagonal
(Maybe other things if I have time today)
Wrote this sentence.