Paul Alexander is a game designer at Camouflaj
République’s journey from Kickstarter dream to successful-but-imperiled mobile title has been well-documented on Gamasutra, but if you’ve been unclear about just what Camouflaj has been up to the last couple years, I wouldn’t blame you—Camouflaj has taken the most wayward of paths to complete République, and it hasn’t been easy.
While our team has remained more or less the same size since Episode 1’s release, the game’s scope increased dramatically over time. What we originally envisioned as a 4-6 hour experience for mobile titles ballooned into a 10-15 campaign on platforms for iOS/Android, PC/Mac, and now PlayStation 4.
In addition to producing new episodes for a passionate base of backers and fans, we’ve been critically examining how our 25-person Seattle-based team can not only stay afloat, but remain commercially relevant in an industry that is increasingly shifting, fracturing, and indie-pocalypsing.
It’s been about a year since we began the process of transforming République—a game we pitched as a “one-touch” stealth action game that would bring AAA production values to mobile devices—into a five episode, longform experience on PlayStation 4.
Camouflaj was just coming off a very demanding project: remastering République from the ground up in Unity 5 for our PC/Mac release, a process we painstakingly documented with help from Unity. At the time, we were convinced the incredible visual transformation and reworked controls would be enough to convince the skeptics that this was no mere mobile port.
République shipped on PC and Mac with three of its five episodes and a dramatic graphical upgrade to overwhelmingly positive reviews. I was riding particularly high, feeling so proud of what our team accomplished on a version of Unity that was still in beta. However, the commercial landscape of Steam was tougher than we predicted, which meant we had to get creative about how we would fund the remaining two episodes of the game. Unbeknownst to many team members, the wheels were already turning on what would become the next evolution of République.
In late 2014, while the team worked to complete République’s PC/Mac port, studio head Ryan Payton quietly commissioned work on a prototype of the game where players controlled Hope not through touch commands or a mouse click, but via a PS4 controller. Working remotely with Paulo Lafeta, one of the early members of Camouflaj, Ryan produced a test scene that mapped Hope’s movement to the left analog stick and camera movement to the right stick. (Here’s a video of it.) While it doesn’t contain many of the features we ended up shipping with, it pre-empted a lot of the speculation that can drag down big, blue-sky game design arguments—or so Ryan thought.
Almost immediately after Ryan revealed his controller prototype, the Camouflaj design team took issue with it, citing how a PS4 version would directly conflict with two of the game’s four pillars. The first pillar, “Hope Is Alive,” is all about how players influence Hope, but do not directly control her. We designed the game for players (the true heroes of the game) to be a sort of tennis partner for Hope, who has her own AI and opinion on what is unfolding. At times, the gameplay loop on mobile and PC reminded us of RTS controls, with Hope as your solo “hero” unit. Suffice it to say, when we discussed the idea of bringing RTS-like controls to console, it was easy to reference examples of strategy games that had struggled with this.
Another concern the team brought up was the game’s in-world cameras, and how transitioning the game to the DualShock 4 would conflict with another pillar of the game: “Become Big Brother.” République doesn’t have a conventional, over the shoulder third-person camera. Instead, players view the world through security cameras placed throughout the game that switch automatically when Hope enters a trigger volume, or manually change when players hack into another nearby camera.
While the controller prototype clearly pulled influence from Resident Evil’s fixed camera perspectives and auto-switches, the team remained skeptical—République was a stealth game where the slightest wrong move could get you caught, and if the cameras were detrimental to the precision of player controls, we would have a serious usability problem on our hands.
The team’s objections all came to a head during a conference call when Ryan was away in Japan negotiating the publishing agreement with GungHo Online Entertainment. Each designer, including myself, voiced concerns about the “one-to-one” direction of the prototype and suggested alternatives. “Could we place a cursor on-screen to act as a mouse?” “How about designing a new top-down, default camera to give players a better view of the game?” “Maybe Hope goes on rails and players just need to clear her way?” Although Ryan agreed that his “one-to-one” control scheme wasn’t exactly aligned with our pillars, he believed it offered us the best opportunity to broaden the game’s appeal. He noted that while the pillars were important, he had put the prototype in front of several non-developers who were intrigued by it, including the CEO of GungHo.
Screenshots taken while we explored the idea of an alternate camera system
Even though I wanted to experiment with the alternative control methods the design team suggested, I had to admit that the prototype was concrete proof that the game could work well with a controller. With little time to prototype new ideas, I put my ludonarrative dissonance-related concerns aside and focused on solving smaller issues related to the “one-to-one” controller version after Ryan officially signed the deal. With much of Camouflaj’s staff busy creating content for the final two episodes, it fell on me to take charge of the PS4 version and bring focus to its radical new direction.
Our first call was to our development partners at Darkwind Media, a talented engineering group out of New York who did an excellent job on our Android port, to ask if they’d be open to working on this ambitious PS4 version of République.
Since we began working with Darkwind Media in 2014, we’ve thought of them not as an outsourcing house but as an extension of the core Camouflaj team. So when it came time to bring République to PS4, we kicked off the project with Darkwind by outlining key areas of concern:
As you can see in the prototype video, players explored République’s “detective mode”-like OMNI View by moving a cursor to highlight objects. We all agreed that this approach felt clunky, so we needed to explore alternative ways of giving players a sense of full control while in OMNI View. After a few false starts, we designed a system that would allow players to simply press buttons on the DualShock 4 that were assigned to onscreen objects.
We wanted players to internalize the system’s logic by grouping object types to certain buttons. For instance, cameras would only be assigned to the face buttons (Square, X, Circle, Triangle). Working with Rob Cigna at Darkwind, I spec’d out a system that revealed the buttons in a clockwise pattern to the player (Square, then X, then Circle, and then Triangle.) It took a few weeks of iteration, but the results brought the feeling of effortlessly tapping on a screen or clicking a mouse to the PlayStation 4. The under-the-hood logic for how the game chooses which button to show players each object is quite impressive, and all the credit goes to Rob for that.
Earlier OMNI View UI (above) vs final (below)
Getting Hope to move “one-to-one” with the controller was our next challenge, so while I worked with Rob on OMNI View, engineer Adam Romney and I partnered up with our animation team to build an improved animation controller for Hope. We began with an emergency motion capture session to get unique movements and poses for Hope that we never needed previously. We then polished her movements to make sure they had the proper weight and feel you’d associate with a third-person game.
Prototypes for a radar system to help players detect guards. Unfortunately, this didn’t make the cut
When it came to mapping Hope’s movements to the controller, the biggest challenge was implementing her new cover system. We experimented with a few approaches (including a system that forced players to press a button to hug walls) before settling on the final version, which abandoned any waypoint dependencies in favor of designer-authored, navmesh-based cover volumes.
Matt Gall authored a fantastic, designer-friendly setup while Adam stepped in and worked some incredible magic to smooth out crappy corner transitions and garish animation hitches. The strides he made between our PAX Prime build and middle-of-January beta were truly impressive, and erased any concerns the rest of the team had about the game’s controls on PS4.
Hope struggling to take cover
It feels great to look back at this aspect of production and be proud of what we accomplished given how many nights I went home, wracked with self doubt. Up until this point, my only in-engine work on République was level design work on Episode 3 - I was well aware that I was not “the best person for the job.” I was just the only person we had to tackle the PS4’s design.
Darkwind was patient with me throughout development and always communicated concerns they had in a thoughtful manner. I even felt something of a “mind meld” at times with people like UI programmer Richard Selneck who often had solutions to issues faster than I could write them up. In the end, the distance between the two studios (Seattle and New York) ended up not being an issue, and I was able to overcome the anxiety of leading something entirely unknown to me at the beginning.
Yes, bugs are an unavoidable aspect of game development, but I would be remiss if I didn’t put a spotlight on the sheer amount of instability issues we faced with the PS4 version of République. As I mentioned previously, we upgraded to Unity 5.0 early last year to take advantage of the engine’s new physically based shading features—a herculean task that strengthened our game’s visuals but also resulted in months of extra work and headaches.
To make matters more complicated, we shipped on a beta version of the engine, so when it came time to begin work on the PS4 version, we had to upgrade to the most stable version of Unity. We then split our art pipeline to ease the burden of creating both physically-based (PC/Mac/PS4) and non-physically based (mobile) content.
A major problem related to our platform-specific setup was that every time our artists made changes to physically based content, it had the potential to break any non-physically based materials (and vice versa.) Unsurprisingly, this led to weeks of wasted time while we searched for issues to resolve. We eventually upgraded our Unity version once again (from 5.2.2p2 to 5.2.2p4) during PS4 development to resolve some of our mobile issues—engine-related crashes, incompatibilities between Unity and iOS9—which also cost us valuable time. And then there was a complication we could have never anticipated: something referred to internally as the “111 bug.”
The 111 bug was an issue in previous versions of Unity 5 that resulted in objects in the game world receiving coordinates such as “-.1111111, 1111.1111111, -1111.1111” when playing the game in editor, which would then be permanently changed after un-playing. This bizarre issue had been seen in the past, but only a handful of times in the span of three years. Suddenly, in the midst of PS4 development, it was spreading through the code like a plague. Sometimes it was obvious—a wall or floor showing up where it shouldn’t be—but usually people would unknowingly check the issue into République’s source control, infecting anyone who pulled the latest updates, causing a host of problems which then needed to be traced back to Patient Zero.
With some help from our friends at Unity, we discovered the source of the issue had been resolved as of Unity 5.4, but by then it was way too late to upgrade our project again and risk losing weeks of work. Instead, we were forced to work around it, which meant partaking in the excruciatingly slow process of going line by line and meticulously scanning files for signs of the 111 bug before submitting.
A sample room before and after the 111 bug. Lighting is broken, floor is missing, and walls have moved to the side
Aside from our engine woes, a lot of the code in our game was so deprecated by the time PS4 development began that it was no surprise bugs were appearing. I’m not a programmer, but when you’re routinely seeing comments in the code that say things like “hot fix for gdc 2013 lol DO NOT SHIP”, you’re bound to have some late night crises. If there’s any sort of silver lining to all this, it’s that the 111 bug prompted an eagerness to lay the groundwork for multiplatform support in a much more thorough manner.