Triage is no longer in development. It's not much, but for those who are curious about what happened behind the scenes and what's happening next, read on to find out. There's also lots of videos and pictures of cut content and the ending that was supposed to be in part 2. Beware though, it's a massive post!
How it started
Triage started as a high school project with just a few of my classmates on board.
In 2008, after making a hilarious machinima for an English class project, we felt confident enough with source sdk to try a campaign mod.
(WARNING: Most of the skins, models and sounds were stolen from other mods, games and movies! My apologies and I take no credit for any of it. Also, this was actually really difficult to make at the time before source filmmaker, everything was done through scripts in hammer)
We envisioned not just a map pack, but a full blown campaign, with new characters, redesigned gameplay, story, and a more serious tone focused on war and survival. It was easy to pick the timeline - the 7 days Gordon disappears, the uprising begins and almost defeats the overwatch forces - because so much happened in that week but you never got to witness it in game. It felt natural to fill in the HL2 timeline with our own story.
While we did have all the technical skills to make the mod (coding, mapping, skinning), we completely underestimated how difficult the game design process is. Compiling code or maps that function is one thing, making them fun is a much bigger challenge.
Early Development, Story Drafts
Early on we brainstormed ideas for cool shootouts, new weapons and layouts for levels etc. I blocked out some maps and modified the AI slightly. We told other friends and other people got on board, offering all kinds of skills from modelling to music to writing.
We started writing drafts for a story, and I think this was one of our first "amateur mistakes" that we'd learn to regret later on - more on this later on. I actually dug up a copy of an early draft from 2009. In that draft, the campaign would've concluded with an epic raid on the metropolice HQ and destroying it. This would have fit nicely into HL2's campaign because it would've explained the small number of cops after Gordon returns.
In the earliest story drafts, the campaign's climax would have been at this building, the metropolice HQ. This was cut entirely from the campaign.
We actually went through many iterations but most of them focused on the player and his brother, before and after the war. One idea was that the player would unmask a dead combine soldier and recognize his brother. Another had him betray the player out of jealousy for his sudden advancement through the resistance ranks.
One draft that almost made it into the final game (we even recorded voices, made music and maps for this version) was the player would be seriously wounded in the battle for City 17. Fearing for his safety, his brother would pull some strings in the resistance and send him to spy on a remote village of peaceful refugees who were reluctant to join the fight. His resistance contact there, an old man named Lawrence, would reveal some dirty secrets about the village - how the villagers were secretly aiding the combine, and how their ambivalence could damage the resistance. He would ultimately give the player a weapon, expose himself and the player as resistance spies, and launch a suicide terrorist attack on the village. The player, now armed and surrounded by angry villagers, would have to fight his way out of the camp, massacring the village and fulfilling Lawrence's plan. This would also attract the attention of a combine strike force, which would also be destroyed by the player. The resistance would then blame this event on the combine, bringing in most of the other "peaceful" camps to their side. This was cut because it was too jingoistic and dark for a mod about surviving war.
In one story draft, the player massacres a village of peaceful refugees, provokes the combine into intervening, then kills them too and blames them for the massacre. This becomes a major propaganda boost for the resistance. We made maps, characters and even two music tracks for this chapter before it was cut.
Another that we almost settled on was the player, his brother and a group of resistance fighters would die fighting to the last man defending the outside of Dr. Kleiner's lab, with an epilogue showing Gordon teleporting in moments later. This would become the "Stealthmission" map, which I'll go into further detail below.
For inspiration, we looked at other games and movies. For shootouts, we wanted it to look something like a mix between Heat (1995 film) and Saving Private Ryan (1998 film). For the atmosphere, we looked at Children of Men (2006 film).
Games we looked to for inspiration included STALKER and Call of Duty. I really liked those games because the combat was fluid and scaled well from small corridors to large open environments. At the time, most games either focused on corridor shooting (Quake 4, FEAR, Doom 3) or very long range combat (Battlefield 2, Arma, Ghost Recon).
While HL2's combat usually involved small groups of NPCs and were heavily scripted and predictable, we went for a different approach where the player would be completely overhwhelmed by noise, explosions, dead bodies and bullet impacts. I feel Triage really succeeded at making the combat feel dangerous and being just a helpless nobody in the beginning parts at least.
The gunfire sounds and bullet impact effects borrowed heavily from this film, especially this clip.
For comparison, here's a video of someone playing through Triage.
Prototypes and Cut Content
The player's brother was an NPC with custom code, model and voice overs. He had special combat abilities like Alyx, he could crouch, melee and had "attitude" (shot at corpses, could go berserk and charge enemies). This character and this level were ultimately cut from the campaign.
We tried a LOT of different ideas. None of us had any experience in serious game development so while we easily dreamt up lots of interesting ideas, most of them didn't really work in practise or were too difficult to debug and finish.
Some were really fun to make and experiment with, but we just couldn't find any use for them in the game. For example I coded a "super efficient", low performance NPC that was only capable of running and dying as a background NPC (HL2's NPCs are very complicated - they can see, hear, or smell things, communicate with squadmates, use facial animations, adjust their leg positions realistically, avoid obstacles, die as a ragdoll, and lots more.). This meant we could have a hundred of these guys on screen while still keeping a good framerate, but we had trouble making a scenario for these guys. I prototyped lots of maps where the player would join literally over one hundred NPCs charging an objective. While it looked epic, it just wasn't fun to play.
I also hacked together a "headcrab swarm" using the boids included in the tech demo code. Originally the swarm was just a group of snarks that would wander around. I gave them the ability to attack and damage NPCs, collide with objects and improved its navigation. When enough members of the swarm were killed, they'd seamlessly turn into regular headcrabs and continue attacking (it looks clumsy when the swarm tried to control only 2 or 3 headcrabs). This was actually meant to be used in the sewer level, but it was cut and after that we couldn't find any use for them.
There were two cut levels that made it quite far and were actually quite fun: "Stealthmission" and "Slums". I started these ones but passed them back and forth with the mappers for some time.
"Slums" was a dirty junkyard filled with combine loyalists that the player and his brother would have to shoot through. The story was that the junkyard workers were treated better than regular citizens and so most were loyal to the combine. Knowing this, the combine hastily equipped and deployed them as a militia against the resistance.
Using a heavily modified citizen AI, they were an unpredictable, twitchy enemy. They had poor accuracy and low health, but unlike the disciplined soldiers and cops, these guys fought dirty. They would often run away from combat, regroup and charge or hide and flank their targets. They'd rarely stay still, always shooting and moving and sometimes turn their backs and flee. They were based off the German Volkssturm in the Second World War, a desparate last ditch militia consisting mainly of Hitler Youth and elderly men using antiquated equipment.
This level was eventually cut because it didn't really have a place in the campaign, and canon-wise there probably wasn't a place like this in City 17. It also had performance issues (Source doesn't like big open areas). The loyalists were cut as an enemy because most players didn't understand why they were fighting humans. No matter how I reskinned them (notice their exotic jackets), players were too conditioned with gasmasks = bad guys, faces = good guys.
The other cut level was "Stealthmission". This was a very large sandbox-like level, where you and your brother would take out several roadblocks in any order to clear a way for the resistance. The story was that Dr. Kleiner was holed up in a building and surrounded by Combine, and the only way for the resistance to save him was through these roadblocks. It would have ended with a boss fight against an advisor. The player would kill the advisor, but it would mortally wound him (his health would finally stop regenerating) and in his last moments he would hear over the radio that Kleiner is safe, returned to his lab and reporting unusual activity in the teleporter.
I actually dug up the dialogue files from this level. These scenes were actually working in game at some point, but the mod is now broken and Faceposer doesn't work on Windows 10. At least you can listen to it in "radio play" format.
There was also a prototype of a mounted weapon (made entirely using brushes and citadel props). It fired lasers that fried combine soldiers in one hit.
The map was fun to play and it really showcased the new AI. It was the largest map possible in the engine, and it was interesting because everywhere you went something was happening. Small squads of rebels would run around the map, making hit and run attacks at roadblocks. I also created drop pods for entire combine squads (they were the dropship pods but would explode and eject soldiers instantly). Dropships would patrol and drop soldiers upon seeing enemies, encouraging the player to hide inside buildings when they heard the familiar dropship noise.
This would have been the climax of the game and the lighting, piles of dead bodies, zombies, blown out buildings and constant combat was meant to evoke an apocalyptic feeling. It was meant to foreshadow the sacrifice all these rebels would make just so Gordon could return to City 17.
This map also had a lot of problems. It was too large and could barely compile, also suffering from performance problems in game (again this type of environment isn't good for the source engine). Everything looked super blocky because it was too close to the max brush limit. It was just the wrong type of map for the Source engine. It was about 70% complete and was playable from beginning to end, with working dialogue, objectives and everyting. These issues couldn't be easily fixed however, it needed to be split up into smaller maps without sacrificing the fun.
There was also another map named "pow" where the player was captured after the evil advisor in part 1 and meets his brother for the first time. Sadly I could not find any trace of this level in my screenshots.
Bad Planning and its Consequences
I agree with most reviews that the mod did not live up to its potential. The reason for this was largely due to inexperience and bad planning. We had all the technical skills to make everything work, but the little things like fine tuning, voice acting and debugging were much more time consuming than I predicted. This was why the mod lacked polish and suffered from bugs and crashes.
We planned so many features but most of them were scrapped because they weren't fun. Mapping also suffered the same problem. We made lots of maps but most of them just weren't fun no matter what we did with them.
Single player mapping for HL2 is also much more difficult than most games (I know I'm going to anger a lot of fanboys for saying this) because HL2's gameplay isn't inherently "fun". For example in a game like Doom, you can spawn some imps and a shotgun in an empty room, and it's fun. Same with other games at the time like Far Cry or FEAR - you could have a fun battle even with a boring environment. HL2's NPCs don't do much if you leave them to their own - most of their interesting behavior is scripted. In the C++ code there's lots of lines like "if map == this, do this" or "if my enemy is a zombie, do this". The "fun" in HL2 comes from its diverse scenarios and careful scripting.
Early demo video showing the redesigned AI
To counter this, I redesigned a lot of the AI, taking out lots of complex, special case scenario behavior and rewriting it with much simpler ones. The reason for this was so the AI could respond more naturally to enemies than "if this do this". For example, the HL2 combine soldiers had code like "if i'm about to reload, I might throw a grenade", or "if I'm a shotgunner and I get rushed, do a melee attack". If they lost sight of you (whether you were hiding behind a box or ran into a hallway), they'd ALWAYS move to get a shot at you, even if it meant charging into a doorway. I recoded a lot of this so they AI would generally try to suppress and flank their targets rather than special case behavior that could easily be exploited.
There was also HL2's squad slot system which I completely removed because it limited the combine's ability to fight you (it only allowed 2 guys in a squad to attack you at a time. If you had a squad of 10 combine soldiers, the other 8 would literally just stare at you).
The end result was that the combine soldiers would be more aggressive and less predictable, and this helped the mod a lot because we didn't have very good level design or scripting.
However this took a long time to do and it was difficult for the mappers to adjust to the new AI. The new AI was much more mobile and would actually take cover. This made scripted encounters very difficult to do, because sometimes you wanted them to charge or stay put even when it wasn't tactically sound.
The intro was quite simple - your brother talks to you, teaches you to shoot guns, and you get interrupted by the combine invasion and quickly flash forward to modern day. However it was a huge challenge because Hammer's limited scripting didn't really allow for this kind of scene. A lot of new C++ code had to be written to detect if the player was aiming his gun, for the ducks to fly in when it was quiet, for the gunship to come crashing into the tree, and to remove the player's gun after the scene. Triage relied on a lot of scripted sequences and these proved to be very difficult and time consuming.
I think the biggest mistake was planning the story and cinematic flow of the mod before having a fun set of maps to play through. It was a huge challenge trying to merge this epic story we imagined with the crazy shootouts, especially because the tones often clashed with each other. Storytelling was also a huge challenge because we relied on cutscenes and dialogue, both of which require good writing and acting which we didn't really have access to. A lot of the epic scenes just fell flat because of the average story telling.
HL2's scripting was also quite limited when it came to combining AI with scripts. We usually had to turn off AI completely for scripted tasks, and it never really looked right. That's why HL2's "cutscenes" happen mostly when you're locked inside a room.
In 2013, most of the team had to leave because they were busy with school, work, life etc. The last stretch was just me, a musician and a few testers. I was working full time, taking courses at night and preparing to graduate university so I knew I had to either give up or finish the project. At that point I decided to cut out everything that wasn't working and release part 1.
I continued working on it for a while, polishing maps for part 2 but without a team and having to fight with Steam updates (which eventually outright broke the mod, requiring all the code to be redone) I had to give up. It was just too much of a task for one person to do.
What went right
The mod ended up without most of its planned features, the voice acting and level design was subpar and there were some game breaking bugs. However it still achieved a 7.3 rating and over 10,000 downloads, and I'm still proud of that. Despite its issues it was still enjoyable to play through and I think the atmosphere and combat really made it stand out.
I spent a total of 5 years on this project. I didn't accomplish everything I wanted to, but I did learn a lot of valuable lessons.
- Don't design your game around skills or assets that you don't have. If you don't have access to good actors, don't try to tell a story that requires them.
- Before story, atmosphere, music or even concept art, make your game fun. If you have a playable prototype that's fun, you can design your story, music etc to work around it. Trying to do all at once is difficult because these things will often conflict. It's also very hard for your team to make content when they don't have a working game to play.
- Iterate more and faster. It was hard to iterate with Source's older tech (no scripting language, bsp, slow compile times), but I should have planned and budgeted for that. I often made the mistake in thinking that everything would be fun and work the first try.
- Don't get too attached to what you make. If a map, weapon, cutscene or other content isn't working or improving the game, then consider scrapping it. You can spend more time polishing "good" content rather than spamming out bad content that you'll end up cutting later.
- Show your enemies before they attack the player. Don't make them hide too much either. It feels unfair when they "ambush" you repeatedly, and killing a bad guy feels meaningless when you don't know how many you're up against.
- Make a vertical slice. This is a good opportunity to figure out what your team and tech are capable of and get estimates of how long each task takes. After this, re-assess and make your plan and budget with this information in mind.
- It's easier to start small and then expand, than to plan big and then narrow down. Adding new features later is easy, especially when your game is already fun and not ridden with bugs. Cutting out features half way through development will usually wreck your game and you'll have to do some creative work arounds to hide it.
- Prioritize tasks and features so that if you do have to cut, you can choose the ones that will have the least impact.
Taking these lessons into mind I started a new project recently, Trepang2. I'm taking a whole new approach to development this time to avoid the mistakes I made in Triage and to design an overall superior game.
At this stage, I'm focusing purely on making the combat and movement fluid while prototyping AI and level design. In other words, I'm making the game as fun as possible at this point. Story, graphics and everything else will come later so they won't get in the way.
Thanks so much for playing Triage and following its progress. I'm sorry that it didn't deliver everything it should have. I hope this massive post provides some closure though and I do hope other modders learn something from it. I hope you follow my progress on Trepang2 and maybe give the demo a try!