Freeport
Creation Kit (Fallout 4)
100 hours
Individual
Goals
-
Support separate 3 paths of play (hacking, locking, and charisma) along with the Quiet/Loud options. This was inspired by the recent Hitman games.
-
Quest Design that can be accessed globally by all actors in the level and change based on player choice.
-
Offer re-playability by changing encounter and conversation placement based on path.
Level Overview
Freeport is a standalone mod for Fallout 4 where the Sole Survivor is approached by a master thief, Neal, who enlists the Sole Survivor to help steal priceless valuables from a bourgeoisie enclave, the Isle of the Blessed, in the Commonwealth.
Offering a mix of deception, stealth, and guns blazing combat, the Sole Survivor must help Neal discover how to break into the vault below the enclave’s famed Opera House and steal the residents’ priceless pre-war and post-war artifacts.
Level Layout & Maps
Freeport Main Interior
The structure of this remained true to the final product
- The size of main floor was blocked off in some areas and the side rooms were reduced overall by 30%
- I used debris and hallways to constrict flows in area where the gameplay pace was slower
Before & After Shots
(Initial Gameplay to Launch)
Development Challenges & Solutions
-
Using Global VariablesA takeaway from RoachWorks Inc. was being too rigid in my implementation and not allowing for a system that scaled appropriately and required a lot of hand-tuning to make look right.
Coming into Freeport I wanted to alleviate this by storing my quest variables in a higher-level form.
I settled on using global variables to distinguish the form the level would take.
- If the player picked Quiet, killing guards or civilians will automatically fail the quest.
- In the event the player steals the waiter's uniform, there is a global variable tied to the outfit the player is wearing. All actors in the level can read this variable at any time and adapt their dialogue accordingly.
- This also applies to doors that lock and unlock during different stages of the quest depending on the path chosen.
This let me keep the majority of the script in a centralized place within the quest which helped with debugging and balancing.
I did run into a major issue with timing the start of the Opera. The player would only be allowed inside the Opera house after 6pm in game.
- Sometimes the player would start the quest after 6pm, so when they would "wait" for the opera, the script to read the in-game time would not fire.
- I learned a downside of storing variables globally is they can trigger at unintended times so to hinge the progression of the entire quest on them is dangerous.
However, seeing that the script was tied to a certain quest stage, I already had a gate in place.
I set up a simple while loop during this quest stage that would read game time stored as an integer.
- By circumventing the game's time-reading function using global variables, I was able to solve an issue that the global variable system caused.
- Additionally, I forced the mod itself to start at 11AM in-game as a failsafe.
-
Using Arrays to Control AI BehaviorHaving multiple NPCs on screen to sell the idea of something larger was an important consideration from the beginning.
In conjunction with using a higher level framework, I decided on storing the actors and their desired behaviors into arrays that could be stepped through with minimal maintenance work.
I had to establish a main actor along with a main AI package that could be inherited by the other patrons.
The next step was to set up the array of objects (seating, idle positions, etc.).
After the initial test of this system, I had to adjust some actors spawn positions ( due to actors bumping into each other while crossing paths to their seats).
- The reactions of the NPCs to the raiders did not need adjustment (except to secretly nerf the patron's HP).
- I am happy with how organic this implementation looked in the final product and how it informed my approach to controlling large amounts of AI in a scalable fashion.
Afterthoughts
What Went Well
I was able to do most of the package work in fragments tied to the quest rather than custom scripts which made tracking and debugging easier
I cut early which saved me a lot of hassle in the long run, although probably not enough
What Went Wrong
As mentioned, I cut but not nearly enough
AI packages were finicky work and I did not get to dedicate as much time to sorting it out as I would have liked
Parts of the interior have blown out lighting
What I Learned
The usage of global variables was a great learning experience and opened my mind to a lot of possibilities on how I would construct a similar mission in the future
Using arrays for actors and refs was an invaluable experience as I think the crowd management systems in Fallout are what really brings the world to life
Making gates too contrived with multiple avenues of completion easily accessible ruins immersion
- I think committing to the 3 distinct paths in addition to Quiet/Loud as proposed in my initial design would have solved this