Early in 2016 I had an idea. This was nothing new as I usually find myself having conceptual epiphanies about stories I am writing or things I would like to create. Much like the Ghosthunt fantasy I had before that success, I had a gut feeling that this idea would do some good; and I felt compelled to begin creating the mod that you now know as Entropy Zero.
I’m working on a comprehensive mod construction guide as this was my first challenge to overcome. This is a rather large task so I will finish that up and post it at a later date. For now, here are some of the more prolific challenges I’ve encountered during development:
Creating a Murderer Protagonist
I’m a writer at heart, and this project is going to be heavily lore based. I started with a basic concept. You are a Metrocop and you’re bad. Really bad. It took me back to the days of Opposing Force. Back in the day there was this taboo about playing the bad guys, and we were all excited to see that explored with Opposing Force. Opposing Force was amazing – but we still ended up with the good guy’s perspective. I want to take that taboo and run with it.
Metrocops are a good source for the Combine experience because they’re still human. Our protagonist is supposed to be a murdering sociopath with little care or regard for humanity. And having the Combine come along has been a tremendous advantage for him, because now he can live out his anti-human fantasies by helping the Combine fascist movement.
Thankfully, we’re not murdering sociopaths. But this is one of the key angles I’ve wanted to spin with this concept: How did the Combine rule benefit those with dangerous tendencies?
My challenge with this was to create a murderer protagonist – who was obviously of this mentality – without making the player feel uncomfortable. I didn’t want this to be a murder simulator (regardless of the fact that video games have little effect on violent tendencies – butwe’renotgonnatalkaboutthat), but more of a perspective view.
At first I played with the idea of being this guy. You were this guy. So, I had this cool story going on and you were the guy dispensing Combine justice – stuck in City 10 doing your thing. It wasn’t until I was developing an execution scene that I began to feel uncomfortable. Suddenly this was a murder simulator.
And so, appeared my first challenge.
I wanted the bad guy experience and I got it. It was a very interesting place to be from a writer’s perspective because when you’re doing things like this, the things you write become palpable. I could play as this character. And I didn’t like it.
Suddenly I realised that there’s got to be a ‘mode’ for bad guys. This protagonist wasn’t just a psychopath, he was a monster. I had to tone it down. The experience was just depressing. I had the control over the player character to not pull the trigger, but the game dictated that I did it to continue.
Creating a dual pathed narrative was out of the question. Having two outcomes for a solo project like this would have been too much work, so I had to work on our protagonist’s psyche.
I ditched the psycho and in his place I developed ‘Bad Cop’.
Bad Cop is a wise guy. A know-it-all. He’s still a faceless murderer, but he’s brain-washed, not brain-damaged. He’s deadly and efficient and yeah, he is a monster – but in his mind, he’s simply doing his bit. This opened a new door for me.
I was perusing through options for this and stumbled upon some really decent quotes from the old Half-Life 2 builds. The old Metrocop lines captured his personality exceptionally well and after some deliberation and convincing, I decided to give him a voice.
It brings his plight to life. He’s stuck in City 10, pessimistically commenting about the person he just killed. We don’t like him, but it is unfortunate for him. In his eyes, he can turn it all around and gain that promotion, if only he can prove himself to the Combine rulers by clearing City 10 and surviving the ordeal. His comments are sarcastic and give him that wise guy attitude I so desperately needed for him to be a convincing and hateable henchman.
The second thing I did, was done to further distance the player from his actions. I still felt as though I needed a subconscious chasm to have you watch him from to ultimately, prevent the criticism that this game is just a murder simulator.
In our story, you’re not really playing as him, so much as watching his actions through the playback of his mask. Using this method of approach, I can easily explain his actions and his linear path through City 10 and it allows me to dictate the outcome of the story on a granular level.
So, I’m running with my new concept and everything is going great. I spend two weeks building the first city section with the Broadway vista down to Pillar 10. I compile the map with production settings because I want to see what it looks like and – MY EYES!!!!
Let me backtrack a second – I wanted this mod to be different, visually. Everyone wants to see a murky, snowy hellhole. Well I don’t want that for my mod. What if it was a nice day? A cold and sunny wonder is what I’ve gone with. Snow with a cloudless sky, working with the intention of bringing out those hues. Red blood, white snow.
This posed an immediate problem as Source’s lovely HDR settings turned the snow into pure light energy, blinding me completely (not featured in the picture. Didn't get any pics of the issue!)
In this case the solution was to RTFM. I took a few hours to learn about HDR in the Source engine. I’d always used it, played with it and such but never gone through the theory. I was slowly beginning to differentiate myself from the role of casual designer.
I was able to use env_tonemap_controller entities to control the level of exposure in the maps. So now we get to see the snow and it doesn’t burn holes through our retinas.
As Gordon Freeman, we’re all used to the idea of running directly into enemy fire, and sticking that Combine soldier’s AR2 right up where the sun don’t shine. This is all thanks to the HEV Suit, which made the game a tad easier and explained why Gordon was able to survive his encounters.
It also stopped the game from being a bullet death simulator, which is promptly what my mod became once I started playing with difficulty settings.
When building my mod I wanted to ask myself “What would make this different to the other ones?”. The first thing that came to mind was the fact that my protagonist wasn’t wearing a HEV suit. It could be said that he has something similar to that of the PVC but still, I wanted bullets to hurt.
I started upping the hit weight floats in the skill.cfg file in my mod directory. Since I started playing with those weights, I haven’t stopped and the difficulty has been ebbing and flowing during the process of this development.
Test, test and then test it again whilst testing it. Get people you can trust to playtest the mod and gauge their feedback. Ask them to play and give them a death limit – three deaths and you’re out – and see how far they get.
This has been a really useful way for me to gauge and tweak the difficulty. I will say though, that the weights we can openly set in the skill.cfg file appear to be affected by the difficulty set in the game options. I believe these settings act as multipliers for the damage weights. This has led to some unpredictable behaviour in the changes I’ve made.
With the addition of the final chapter, these weights could change again as these Vortigaunts are kicking my ass! During my final round of testing, I will be listening very closely to the responses and feedback of beta testers, regarding the difficulty of this mod.
Overall, I am satisfied that this feels a little different. You can’t just run into fire now and I am constantly kicking myself for adopting Freeman’s habits. Cover is so important in this mod.
About half way through my mod I began to wonder if the story made any sense at all. After playing through it a few times I noticed there were inconsistencies I hadn’t seen during the writing process.
How did my player end up here? What dictates my next action? What’s the logical path a person would take?
I’ve always had a very clear idea of the path I wanted my protagonist to take through City 10. Kind of like a condensed tour of the City to make you familiar with this forgotten place and to expand your perspective beyond the bounds of City 17.
Taking this written story and making it playable suddenly revealed oddities and just plain weirdness that needed to be rectified.
As designers, we have to be prepared to make sacrifices. This is nothing new to me – I had to cancel the Hartley Asylum project. Ghosthunt 3 went through three iterations before its final release. I’ve had to cut swathes of work from maps and projects before and I usually have no problem doing this as long as it benefits the final product.
Gabe Newell sort of touched on this recently in some interviews, where he likened Half-Life 1 to a ‘collection of mistakes’. I can’t help but feel he is being too hard on himself. Regardless, I find it important to keep these ghosts of development to remind myself of what I did wrong in an area and how I worked to improve it.
The same can be said for Entropy Zero. Some sections have been entirely redesigned:
Mechanics and sections have been scrapped. This is nothing new and I feel as though it’s just a natural part of the way I produce things.
You’ve got to be bold enough to say “This isn’t working.” And go back to the drawing board. In some cases, we have to sacrifice realism for the sake of the game. Protagonists in games survive things a normal person could not for the sake of the continuation of the story and game.
I’m a glutton for dynamic lights. I really wanted some quality dynamic lightning in my mod. I looked to the env_projectedtexture entity – an entity which projects a texture as light. This casts some really lovely dynamic shadows and helps to create fantastic atmospheres. One problem though – unmodified Source code only allows you to use one. And when you do use it, it bugs out all of the other lighting.
This is because the Episode 2 version of Source is limited to one Shadowmap – probably because of performance.
I had to do some more theory reading on the subject over at the Valve Developer wiki(Developer.valvesoftware.com).
We are fortunate enough to have a fix for this and a way to increase the shadowmap limit for the Source engine. To do this I had to jump into the code. In this case, I wasn’t afraid to get my hands dirty. I do a lot of programming in my work life.
4 mid-compile blue screens later, I had the code I needed. It was a ballache, but it paid off.
What I’ve learnt about Source programming is that you’re all on your own. There are no pointers, and Googling for specifics doesn’t turn up much to work with. You have to jump into the code and play with it yourself.
I wanted to do two things – Increase the firing speed of the AR2 and replace the crowbar with the stunstick.
I spent three days trying to port the stunstick from Half-Life 2 Deathmatch to the singleplayer environment and failed miserably. I couldn’t get the code right and there are all sorts of different references in the multiplayer environment.
I ended up experimenting by taking the model of the stunstick and just changing its name – effectively telling my mod to use the stunstick model instead of the crowbar. Then I changed the sounds. This works great aside from the fact that there’s no glowing animation. Another day and a half of messing with code and I could not get it to glow like it does in the multiplayer environment. For me, this was a bonus so I wasn’t too fussed. It works well on its own and does what it needs to.
The AR2 was a whole different ballgame. Let me just state this in plain text right now for future developers looking to do the same who need a quick and simple answer to this question-
To change the fire rate of the AR2, you have to edit the integer specific in the weapon header; not the main weapon file (weapon_ar2.h) Right here:
A couple of more blue screens (Windows 10 doesn’t like big compiles) and I finally had it where I wanted it. Then it was just a case of making some sprites and sounds to go along with the weapon. I also added dynamic lighting for weapon muzzle flashes. I could only do this for all weapons – not individual weapons.
I’d like to have deployable manhacks and player ragdoll death but, the coding really exhausted me. Maybe I’ll revisit that at the end of development but as I stated before, with Source programming there are no answers. You have to figure it all out on your own.
I’ve got a love/hate relationship with these things.
In short – tie the entity to a ragdoll or moving entity and have it control the player’s view? No problemo. Done. Parent attachments – very nifty. It works well and gets the job done.
Have it follow a path? Now you’re in a world of hurt. Your first mistake was assuming it would work as it is stated (as with a lot of things in Source!). There’s all kinds of crazy behaviour to behold. Tie them to paths and they float around the place unleashed. Player interpolation just doesn’t seem to work, and for a really goofy experience – forget to terminate an active one before changing level and have your player become invulnerable forever.
There’s a load of documentation on this regarding fixes on the Valve Developer wiki(Developer.valvesoftware.com), but none of these fixes seemed to work for me.
One vital section for this involves the player boarding a vehicle. I spent a whole week trying to tweak and perfect it but in the end, couldn’t get anything decent. It just won’t work properly. Once again, I am stuck – without the correct code to rectify this I am at the mercy of the engine limitations. If this were a commercial product, I’d approach this problem with more weight. The truth is this isn’t a commercial project – this is a personal project on my time.
So, for now I’ve done the best I can with the entity in that scenario, and sacrificed a two second view aesthetic and have focused on just getting the player into the vehicle.
Overall, this project is opening my eyes. I’ve been mapping and modding Source for years but always on a sort of casual basis. My biggest projects before this have been Hartley and Ghosthunt. These have been done very much in the foreground of the engine – in the ‘safe’ area. With this project, I’ve gone in as far as the code and I’m trying and learning new things.
There’s a lot more for me to do yet. I’ve still got to build the last chapter. This week I finished my detail and correction pass of chapter 3. I am still planning on sharing with you the process I go through to build that chapter.
More media soon!
Thanks so much for your continued interest and support.