The mods I had installed were 3 sound replacing mods, one for some of the gun shot and mining impact sounds, one to replace Joel's voice and one to replace Bobs voice.
A small POI remnant I built in the POI editor. (which was nowhere near the POI where the error occurred)
And my 2 zombie mod packs, which are basic zombies and do not require anything special like C# coding. They all copy attributes and spawning behavior of specific vanilla zombies...i.e. the Business Woman (including all variants) has the same attributes and behavior as the Business Man, etc.
The zombies were running in and out of both buildings and breaking things trying to get to me, so I'm sure they broke a trigger block. In fact, I fed the log into Chat GPT and it said that the error likely happened due to me or a zombie breaking a trigger block.
I apologize in advance, but I also asked Chat GPT how to advise on reproduction of the error. My instinct was to say "do exactly what I did during the playthrough" but it said:
Observed error: ArgumentNullException: Value cannot be null. Parameter name: key
Stack trace shows: TriggerManager.TriggerBlocks(...) called during QuestEventManager.BlockDestroyed(...), and the destroyed block goes through BlockTrapDoor.damageBlock(...) (so it’s a hatch/trapdoor-type block).
Repro approach:
- Load the POI shown in my video (same prefab).
- Enter far enough to activate the SleeperVolume shown in the log at approx (2450, 75, -85), which spawns sleeperHordeStageGS311.
- In that activated area, find any hatch/trapdoor block (anything using BlockTrapDoor).
- Force the hatch/trapdoor to take damage and be destroyed (zombie bashing or player destruction).
- On BlockDestroyed, the game throws the ArgumentNullException(key=null) from TriggerBlocks.
Note: I didn’t see which hatch broke—likely happened in another room/building—but the stack trace indicates it was a BlockTrapDoor-type block and the exception is triggered during block-destroy trigger processing.
Suggestion: Add a null/empty guard for the trigger key in TriggerManager.TriggerBlocks / Block.HandleTrigger so malformed trigger data can’t throw an exception during normal play.