Jump to content

Dupes run past suit checkpoints without suits


planetwomanizzi
  • Branch: Live Branch Version: Windows Pending

Expected behavior: Dupes will never EVER cross the checkpoint into a boiling environment without a suit.

Actual behavior: Dupes race in with no suit and you get no notification until they are already so deep in, low on air, and injured that they are impossible to save.

 

I experience this issue routinely - several times per game session. If Klei wants to debug it and fix it, I am offering to help reproduce the bug. This happens so often for me that my game is practically unplayable! I have 40 saves from right after it happened, please do ask if you want to see more.

 

Uncomfortable Spacecamp nosuit34.sav Uncomfortable Spacecamp nosuit37.sav Uncomfortable Spacecamp no suit2.sav Uncomfortable Spacecamp nosuit5.sav Uncomfortable Spacecamp nosuit40.sav


Steps to Reproduce
  1. Load any one of the attached saves
  2. Throttle the computer's performance down so it approximates mine.

I asked about it on Reddit and most people had never seen the issue, so I think it only happens if your computer is struggling to run the large lategame, vanilla map. My colony has ~100 dupes and ~400 critters and my computer is an old gaming PC (see DxDiag.txt).

 

It seemed like it happened a lot during times where electricity or oxygen were spotty to the atmo suits. Weirdly, now that both are mostly taken care of, it still happens several times per play session. It still happens in this save in both the space biome and the lava biome checkpoints.

I thought what happens is that the dupe picks an errand on the other side of the checkpoint and then something happens to make the suits unavailable - either other dupes take all the suits first, none of the suits are topped up on oxygen, or the whole thing is unpowered. Then, because the computer is struggling to run everything, whatever code checks if a checkpoint is available doesn't run before the dupe has already raced past it.

Of note is nosuit40. It just happened today. A duplicant raced past a checkpoint that seemed to have nothing wrong with it - full oxygen, electricity because I just got the petroleum boiler up, and full suits.

 

DxDiag.txt

  • Like 1



User Feedback


Here is a fresh example that shows the error isn't caused by multiple entrances or parallel checkpoints.

There is a single door entrance and a single checkpoint. There are three suits in the checkpoint and four dupes renovating the gold volcano tamer.

(I paused and saved as soon as I got the "Scalding" notification.)

20221003213231_1.jpg

Uncomfortable Spacecamp nosuit42.sav

The exact same thing happened again: 3 suits, 4 dupes. nosuit42 and nosuit43 might be really good saves for reproducing the bug - put a bunch of construction inside the gold volcano tamer.

Uncomfortable Spacecamp nosuit43.sav

Share this comment


Link to comment
Share on other sites

Here's another save, right after the same incident at the same spot. This time, there are 3 suits, 5 dupes. So it is reliably reproducible.

Ah and another detail. ! Yellow Alert priority has triggered some of these incidents, but these last three all happened with just normal levels of priority.

Uncomfortable Spacecamp nosuit44.sav

Share this comment


Link to comment
Share on other sites

I've had this issue since before the sweet dreams update. I wonder what about the update could have made it worse?

Could you share your computers specs and colony size (number of cycles, critters, and dupes)?

Edited by planetwomanizzi

Share this comment


Link to comment
Share on other sites

I might have found a pattern? In this latest example, a ton of dupes went into the oil biome to do construction and hauling. Three dupes went in without suits and all of them were diggers ("Dorf" prefix for "dwarf"). Two of them went in at the same time, another trailed them by quite a bit.

Edit: and there was another suitless dupe -- Engi Otto (engi for builder with engineering skills) -- was doing construction supply. So maybe pattern, maybe coincidence.

Uncomfortable Spacecamp nosuit53.sav

Edited by planetwomanizzi

Share this comment


Link to comment
Share on other sites

I came back to ONI. This playthrough is in Spaced Out. I limited my dupe count to 40 and designed the colonies to improve performance - fewer paths, fewer ladders, less debris, more uniform gasses, more vacuum. The bug happens rarely but it does happen.

My GPU is beefier than my CPU - most games are CPU limited for me. So I think the failure is triggered by an overloaded CPU. Or, a distant second, RAM - I have 32 GB and it's reasonably fast, but maps be huge. I would think that the bug would be reproducable with these saves and a Windows virtual machine with throttled performance.

Here is my best guess to how it is coded. Pathing is expensive, so is updated rarely. Dupes need to run across the map to do tasks behind checkpoints, so they would ask "is the checkpoint passable" while figuring out which tasks are reachable. Crucially, this happens asynchronously in real time, not game time. I learned this painfully with dead dupes - they sit there, using precious oxygen, while they path to their next task. I save dupes by pausing the game after each order to give pathing time to chug. It can take several seconds.

I have yet to see a suit get duplicated or a duplicant do the suit animation but end up with no suit. So I think the suit donning happens separately from the checkpoint availability check -- and crucially, doesn't block dupes from crossing the checkpoint.

I am guessing that, every time the task selection loop runs, the game checks an "available" condition for the checkpoint. If available, the path stays valid, so the task stays selected. I think it breaks down under high load because, with a low frame rate, there is a race condition where conditions change so a suit isn't available, but a late-game dupe is so fast that the path hasn't been rendered invalid yet. Then, when the path checking loop finally ticks, the dupe is past the checkpoint, so the past path is ignored. My hypothesis explains most but not all of the instances of the bug - where the checkpoint loses power, the suits get taken, and maybe even where the pathing would expect the suits to recharge by the time the duplicant runs across the map, but they don't because there's not enough oxygen.

What's odd is that I haven't seen the reverse happen - aka a duplicant wears a suit past a checkpoint where they're supposed to take it off. They drop it right there, or if vacancies are required, get stuck and pee themselves. Maybe it happens when I'm not looking; elusive bug is elusive. Suit-wearing dupes could sneak back past the checkpoint, but you would think I would notice dupes with soiled suits running around the living area. If I'm right, the checkpoint is working properly in the less important direction. This is the first place I would look.

I can think of a few other ways to fix it:

  1. Use the locked door code. I have yet to see dupes run past a door I close suddenly with a switch. So whatever system makes that work, add it to checkpoint crossing. Checkpoint power, foundation tile, and suit availability should all make the checkpoint.available false and trigger this immediately. Simplest, cleanest solution, IMO.
  2. Queue up "run to checkpoint, don suit, do task". Since it looks like dupes only have one current task, this could be tricky to implement. I think it might be worth it though - instead of standing there, waiting to figure out the next task, dupes can immediately run off to whatever is next in queue. They would respect new priorities less, but players already struggle with the system, and players who only queue up lower priority tasks would notice more productive dupes. And the alert buttons could instantly trigger reevaluation of priorities. There already seems to be something like it for supplying or building a bunch of tiles in the same place.
  3. Use the transit tube code to have dupes queue up for the checkpoint. They should still change to Recover Breath or do something else if it takes too long. Not ideal if the checkpoint is scorching - which is common for less experienced players and their first steam room. And I think the less hardcore gamers, who are more likely to have scorching checkpoints, are also more likely to have a potato laptop and so experience this bug.
  4. A "forgot suit" personal needs behavior, where the duplicant runs back to the checkpoint to put one on. Whatever benefits there are to the current implementation, it would preserve them. And it would be hilarious! It would require the task evaluation to look for checkpoints in the past of the path and see if the dupe is wearing a suit. Though it might be really hard to make happen - same priority tasks on both sides of the checkpoint could cause dupes to run back and forth.

Both solutions would probably be faster if the path data structure was modified to include a sparse list of checkpoints to cross. From the checkpoint direction, you can figure out what the dupe should be wearing at each point in the path.

You said you were investigating this issue in October. It's been over half a year. I wrote these words in minutes with no access to your code. Sure, this bug doesn't cause crashes. But considering the hazards that suits protect dupes from, it is life-and-death for them, so I would think that it would be a relatively high priority. Most of these dupes died to this bug:

 

20220404003005_1.jpg

Edited by planetwomanizzi

Share this comment


Link to comment
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
  • Create New...