Issue Data
|
Issue #34375: Downed companions can get up on their own in Survival in a glitched state
In Survival, when your companion goes down in combat, there's a chance they'll get up when combat ends, which shouldn't happen. When they do so, they become unresponsive to "follow" commands, and if you walk too far away from the spot where they were originally downed, they'll leave your party as if you left them behind. Since they aren't considered to be downed by the engine, you can't stimpak them, so the only way to correct the issue is to down them yourself and then stimpak them. If I had to guess, there's some kind of bug in HC manager's script that makes the downed state detection unreliable. I also noticed that the "heal your companion" objective might fail to appear entirely.
|
Upon closer inspection, it looks like this might be caused by companions regenerating their health when they shouldn't be. Still not sure what exactly triggers this, but it looks like dismissing and recruiting them temporarily resolves the bug. I have to wonder if something is causing the downed mechanic to break down over time.
Did some poking around in HC's logs with trace enabled, and I found something rather strange. Here's a log fragment for Dogmeat's bleedout after he's dismissed and then recruited (bleedout works as expected):
... and here's the same fragment for when he hasn't been dismissed a single time (bleedout is completely broken):
While this doesn't explain the "why", it might help explain the "how". For whatever reason, ActorToHeal can become completely messed up and pull up a generic workshop NPC actor script instead of the relevant one. I don't know the inner workings of the followers script, and I'm not super familiar with the HC manager, either, but I hope someone with more expertise might find this useful.
Spoiler:
[09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: ReferenceAlias.OnEnterBleedout() akSender: [Hardcore:HC_HealCompanionObjectAliasScript <alias DogmeatCompanion on quest HC_Manager (0000080E)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [dogmeatactorscript < (0001D162)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [dogmeatactorscript < (0001D162)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Tutorial: CompanionDownedTutorial, TimesDisplayed: 1 [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Tutorial: CompanionDownedTutorial, TimesToDisplay: 1 [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Hide Tutorial: CompanionDownedTutorial, TimesDisplayed: 1, DaysUntilNextDisplay: 0.000000 [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [dogmeatactorscript < (0001D162)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [dogmeatactorscript < (0001D162)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [dogmeatactorscript < (0001D162)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:53:36PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [dogmeatactorscript < (0001D162)>]
... and here's the same fragment for when he hasn't been dismissed a single time (bleedout is completely broken):
Spoiler:
[09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: ReferenceAlias.OnEnterBleedout() akSender: [Hardcore:HC_HealCompanionObjectAliasScript <alias DogmeatCompanion on quest HC_Manager (0000080E)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [workshopnpcscript < (0001D162)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [workshopnpcscript < (0001D162)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Tutorial: CompanionDownedTutorial, TimesDisplayed: 1 [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Tutorial: CompanionDownedTutorial, TimesToDisplay: 1 [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: TryTutorial() - Hide Tutorial: CompanionDownedTutorial, TimesDisplayed: 1, DaysUntilNextDisplay: 0.000000 [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [workshopnpcscript < (0001D162)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [workshopnpcscript < (0001D162)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() ActorToHeal: [workshopnpcscript < (0001D162)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() playerCanStimpak: [Keyword <playerCanStimpak (000AD52A)>] [09/23/2024 - 10:51:49PM] [hardcore:hc_managerscript <HC_Manager (0000080E)>]: PlayerCanHeal() TRUE -- ActorToHeal: [workshopnpcscript < (0001D162)>]
While this doesn't explain the "why", it might help explain the "how". For whatever reason, ActorToHeal can become completely messed up and pull up a generic workshop NPC actor script instead of the relevant one. I don't know the inner workings of the followers script, and I'm not super familiar with the HC manager, either, but I hope someone with more expertise might find this useful.
It reporting ActorToHeal as either the workshopnpcscript or dogmeatactorscript doesn't really matter. He has both of those on his base NPC record all the time and that's just a manifestation of how Papyrus reports on things with scripts attached to them.
The log output looks identical to me other than the difference in which cast it reported. In both cases it ultimately returns TRUE, saying the player can heal him. Why it works differently just because you didn't dismiss him first is the issue. It's entirely possible this is going to be some kind of engine level nonsense with survival mode.
The log output looks identical to me other than the difference in which cast it reported. In both cases it ultimately returns TRUE, saying the player can heal him. Why it works differently just because you didn't dismiss him first is the issue. It's entirely possible this is going to be some kind of engine level nonsense with survival mode.
Showing Comments 1 - 3 of 3