Hi. I’m developing a game where the player has a hub location (a town with multiple buildings, NPCs etc). You can walk, talk to the NPCs of this hub in-between story missions. This hub location is a separate level, the story missions are on different levels that load when the missions start. I want to add some life to the hub, change it depending of what missions the player has completed. Such as: buildings materials or static meshes change (the buildings get repaired), some static meshes (dirt) disappear, NPCs spawn at different places and say different phrases.
I can do it, but I’m just curious what would be the best way. I thought about multiple ways:
Place all actors to the level manually, make a new BP (or do it in level blueprint, idk) with int variable of hub phase. Add tags to actors like Phase1,2,3 etc. Change phase variable when you complete missions. On Begin Play of hub level -> destroy all actors with tag not equal to hub phase. Add different behaviors in NPCs BP (if phase 1 do A, if phase 2 do B). Then I can just save the hub phase value and the world will be loaded properly.
Make a new BP (or do it in level blueprint, idk) with int variable of hub phase. Create spawners blueprints for each npc or object, add different behaviors based on hub phase value. This seems more complicated.
Create the hub on one level, then use it as persistent level for phases levels. For example Level_Hub_Persistent, Level_Hub1, Level_Hub2 etc. Load different hub phase level depending on what quests the player has completed. Add different behaviors in NPCs BP (if Level_Hub1 is loaded do A, if Level_Hub2 is loaded do B)
How would you do it? Maybe there are better ways?