GameInstanace should work fine for all this, you just have to set it up right first.
If you haven’t done that, here is how:
First create a new blueprint class, in the Pick Parent Class menu that appears click the All Classes drop down, and search for GameInstance, select this as your parent class.
Next you have to set your game to use this newly created game instance class.
Go to Edit>Project Settings>Maps & Modes, and you will see Game Instance at the bottom.
Select your game instance in the list.
Then you can create variables in your GameInstance blueprint as normal. From other bluepritns use Get GameInstance and cast it to your blueprint class, if you drag off from it, and type get hasKey, for example, it will show up. You can set variables in the same way.
So for Kanizitas, you jsut need to create bools for those states in your game instance, and set and get them as needed. GameInstance is persistent for the duration of the game, it will reset back to default when you close and reopen the game, so if you don’t want that you’d need to use saves, or config files even in some cases.