This is a look at the editor view of the “Old Stacks” fight from the Library mission. The Ghostbusters enter from the right and make their way into a cluttered, musty old abandoned area of the library. The Ghostbusters find a trap that springs a big wave fight.
- Once the trap is sprung and the fight begins, many of the bookshelves re-arrange themselves to lock the player in.
- With each new wave, more bookshelves swing open allowing new bipedal enemies to enter from another area of the room.
- Ghostbusters featured a lot of collateral damage, which I was asked to feature here in this crumbling basement-like area.
- The ceiling in the upper portion of the screen shot collapses if the player takes out the support structures, which is pretty hard to miss since the fight has the player running all around the room.
- In the final wave, an animator ghost flies in and possesses one of the random objects the player has now scattered all over the floor by this point.
“I’m telling you, this sub-structure is unstable. The ceiling could come down on top of us!” – Egon
The Librarian boss fight was actually one of the first ghost battles we got into the game. I can’t take credit for the original fight design, but as I did inherit that portion of the Library it was my job to maintain and improve the battle as the game’s systems evolved. The final iteration featured three stages. The first stage requires the player to destroy the Librarian’s special flying codices that form a shielding orb of books. The second stage requires the player to do as much damage to the Librarian before she teleports. Once she teleports, you must stay on your guard or she’ll re-appear right next to you and unleash a screaming attack. And like any ghost battle, the third stage consists of throwing out a trap and wrangling the ghost into it.
“That wasn’t as tough as it should have been.” – Ray
Azetlor turns out to be the “Collector” that the Ghostbusters were investigating, and he’s also the ghost orchestrating the Librarian’s actions and all of the Ghostworld hinjinx that unfolds in the Library mission. It all culminates in a fight in the twisted Ghostworld-version of the New York Public Library reading room.
Azetlor had gone through some redesigns even before he was handed to me. While the programmers and artists had fun designing this crazy tornado-like diety, it was my job to script the stages of the fight, populate the environment with physics objects for the boss to summon into his vortex as armor, and balance the damage and frequency of his attacks.
“Don’t question it Rook, just blast the glowwy part!” – Egon
When the boss was proving too difficult in focus testing, I added portals around the room which allow the player to warp to the opposite side of the room if they’re fast enough. This built on an earlier fight in the Library level where players used portals to evade Book Golems.
I love being given a challenge. The Ghostbusters had just beat the Librarian ghost who had been evading them throughout the entire Library level. And yet we needed a dramatic introduction of the next level, the Ghostworld version of the Library. At first we just tried a classic switcheroo: players left the Librarian’s lair the same way they came in but instead find a portal that takes them to the other dimension. That just didn’t feel epic enough. The solution? Unleash the Ghostworld with a giant explosion!
But then, the problem: we already had already completed production on an iconic boss fight in this area. That environment had received a lot of lighting passes and to change it into a dynamic destructible version instead would require an expensive dynamic lighting solution. The programmers also pointed out that all the environmental details that the player layers on during the fight, like the scorch marks from the proton stream, could only exist on the baked-in geometry with the current technology. Switching to a dynamic environment would have also affected the boss and minion AI.
Working closely with the Environmental Lead/Effects Artist Glenn Gamble, who inspired this whole crazy idea, I was reminded about a solution I had developed for a near-seamless environmental transition/warp in an elevator for the Museum mission. It’s basically a process where I attach the Ghostbusters, dynamic lights, and any other actor not naiIed down to the floor, and warp them all to a clone location, translating all of their positions via a reference point. I dubbed it the “Wonkavator.” Glenn suggested we do the same thing here, and at the moment of the transition, warp the player to a fully dynamic version of the environment. And then on the next frame, we’d blow it up. I traced out 8 chunks with the spline and had the environment artist split the room into those 8 greater pieces, which he broke down into even further chunks once I scripted the pieces to explode.
After that, it was just a matter of polish. The effects artist provided me with sparks to line up with the cracks I had traced out, as well as tons of awesome falling dust effects. The sound designer found all the appropriate earthquake rumblings to tease the coming explosion, the ambient sound profiles to seamless transition between the lair and the Ghostworld, and of course the epic big bang sound itself. And the physics programmers helped me get the explosion to look just right, modifying the gravity scale on the chunks of debris so that they would become weightless and drift away into the Ghostworld. This was the result:
“Hmm, so this is what the public library looks like on the far side of a cross-dimensional portal.” – Egon
“The Disheveler” Physics Script
Another small example of a creative solution: The Disheveler.
We wanted our level loads to be seamless, hidden by pre-rendered cutscenes. The problem with one of these splits in the Library level structure, though, was that there was a window in the door right after the load that allowed the player to look back at an area that was supposed to be trashed from the Bookbat battle in the previous level.
I wrote a simple bit of script called “the disheveler” that me and the other designers ended up using numerous times throughout future projects. It’s objective is to take actors in a group, launch them into random directions, and then come to rest in a state so that the designer could select the disheveled objects and insert them back into the level. This saved us from having to place each object in a random place by hand.
The key to any good level is pacing. The Library mission had a lot of intense moments, and ends with an epic Azetlor boss fight. When my environment artist and I took a look at what we could do to calm things down a little before the final boss fight, we came up with an idea for some environmental puzzles that would utilize both the twisted art style of the Ghostworld Library and the new tether gun that the player had just acquired. Leading up to that, I took the Bookbats that the player would be battling during the Azetlor fight and brought them in for a sequence of timing puzzles.
This was new behavior for the Bookbats, as it wasn’t really combat. I scripted everything efficiently so that Bookbats form each obstacle and loop while waiting for the player to reach triggers along the way. Once the player successfully makes it past an obstacle, the Bookbats filter through transitional splines to form the next obstacle, reducing the overall amount of Bookbat actors processing at the same time. It was helpful to color code the splines so that I could easily edit the position of the obstacles when iterating.
In-between some of the Bookbat traps, the environmental artist and I worked in the tether puzzles both to break up the flow of the sequence and to reinforce the idea that the Ghostworld Library was becoming more and more unstable, setting up the showdown with Azetlor in the next area. When you finally hear Azetlor’s booming, faraway voice, all of the Bookbats fly off into the portal. This results in one last big chunk-tethering sequences so that the player can hop from chunk to chunk and reach the portal.
“Recruit, I had some trouble getting to the portal. Use the Slime Tether to bring the portal to you!” – Egon
To build this, after the environment artist modeled some lower-poly test pieces, I prototyped the gameplay with a mix of script and splines. Each floating chunk had to be constricted upon a spline in order to keep the physics predictable. But at the same time, I wanted the pieces to drift away very naturally. Using the script tools exposed by the physics programmer, I was able to throttle the speed of each piece and bring it to a nice, slow stop once it reached it’s maximum position. Each endpoint is fixed, but I gave the midpoints of each spline a tolerance so that any two pieces could come together consistently no matter when the player tethered them.
To help reinforce things, I asked the sound designer for some nice crescendos to play when pieces came together, and we were able to loop a great track from Elmer Bernstein’s score that really fit the mood of the area. The effects artist gave me some nice dust to help sell the pieces locking together. The entire sequence described above can be seen in the video to the right.
One of my favorite things to work on are cinematic moments. I love storytelling, and Ghostbusters featured a few different avenues for cinematics. Some events occurred in the traditional cutscene format, while others occurred amidst gameplay, depending on where the player was in the level, or even, sometimes, where he was looking. We featured many ‘Scares.’
Some of my favorites were in the Children’s Area of the Library. It comes early on in the level, just after a big fight, and the goal of the Kid’s Room was to quiet things down. It ended up becoming a very creepy space, with ghost-children sound effects and poltergeist-like encounters. I placed a little stuffed panda bear in the corner of one room, and using some script and the soft body simulation in the engine, once the player gets close to the panda, and cause it to jolt, as if a child had picked it up. This is creepy enough, but once you spin around, the door to the room slams shut (as if the kid ran away when you startled him). Ray, who was standing in the doorway, gets comedically knocked flat. Ray’s knockdown was one of my favorite gags to script. I freely admit I overused it in my levels 🙂
Editing a Tutorial Cinematic
When it came to the traditional cutscenes, I worked closely with animators assigned to my level to assess how and where the scenes in the game’s screenplay would occur. During production, some levels would get cut or shifted around, so it was not uncommon to need to adapt a scene to a different location and it didn’t always leave a lot of time for the animation team to react. One such scene was the Slime Blower Tutorial, which got added to the middle to my area of the Library, just before the Librarian Lair fight. I ended up using our in-engine cinematic editor to compose the entire scene as a sort of pre-vis version for the animators to adapt.
The cinematic editor allowed us to control dialog playback, Ghostbuster animation (both specific animations and animation channels, like numerous facial animations or hand gestures), Ghostbuster lookAt points, and to kick off custom script events. As the animation team worked hard to complete the numerous scenes, a triage was made near the end of the production cycle and the determination was made that my pre-vis version of the cinemat met shippable quality. While it’s not as pretty as a fully-animated scene, I’m still proud that, with limited resources, we didn’t have to cut what was an important scene.
Cinematic Editing from Previs to Final
On the other end of the spectrum, here’s a scene that was able to go through the full cycle. This is the scene where we meet Azetlor and begin the final showdown of the Ghostworld Library mission. Similar to the Slime Blower Cutscene, I used the in-engine cinematic editor to block out camera angles, Ghostbuster animations, and custom script events to prove out the entire scene. Once I was done with the initial pass, I worked directly with the lead animator over many nights to get this important boss introduction down. Then we worked with the rest of the animation department to make a custom scene in Maya that matched the beats I had established.
Once we are done iterating, it’s my job to import that scene into the engine, and match it up with the existing timeline of events. While the Maya scene replaced the action of the Ghostbusters and the camera work, I still had the important tasks of getting scripted explosions to fire off on cue and in frame, sync up the dialog and other sound/music events, and add in the props and particle effects provided from the art team.
The most significant piece of that puzzle was the chain reaction of explosions that trigger when Azetlor is forming up. As you can see in the video, this required me to blow up desks, chars, lamps, and every other object inside the public library’s reading room. I placed detonation points below every desk and added all points to a list. At the appropriate moment, I scripted explosions at each of those points in a very careful staggered sequence that provided a great visual effect while not killing the framerate. It wasn’t a perfect process, and one of the lessons we learned was that no matter how hard we tried to sync up dialog, between the Maya import, the engine threading, and framerate variation, a true programmatic solution for lip-syncing would be needed, which we unfortunately didn’t have time for.
A Visit to the Actual New York Public Library
A few years after the release of Ghostbusters: The Video Game, during my first trip to New York City, I finally got to take a tour of the public library that our mission was based on. As I walked through the real reading room, it was surreal to put my fingertips on the very tables I had spent many weeks blowing up over and over from my office in Texas 😀