Eternal Silence is a free mod for Half-Life 2 blending space combat and first person shooter gameplay. The mod was released on Steam earlier this year and has gone through three major release cycles. After five long years of development, this post-mortem will demonstrate the challenges we tackled, our successes and our failures.
To say Eternal Silence was ambitious is an understatement. Merging space combat with FPS in the Source engine was no small feat, both technically and from a gameplay point of view. As the only programmer on the team for the last three years, it has been a hard ride, but an interesting one.
Eternal Silence centers around two battling capital ships. Players are marines stationed on these ships and fight each other inside and in space. Our main goal with the design was to create a cinematic feel: A game where you could play with ten or twelve friends and feel like you’re in a huge Hollywood-style space battle. This meant many things for us. We wanted to prioritize players in active roles, so no player-controller turrets or AA guns, we left this for AI. It also meant that the more explosions, lasers and bombs going off we could cram into the game, the better. Players would bomb capital ships then land on them and rush vital systems.
Another design goal was teamwork. We wanted to make sure the best organized team would win, not necessarily the most skilled players. As a result, Eternal Silence features a lot of high-level strategy in its gameplay. Do you capture shields or weapons first? How can we prevent enemy bombers from attacking the hull while we are defending? Who takes care of destroying incoming nukes? These are questions we wanted people to think about, and they would ultimately change the outcome of games.
We wanted the game to reflect the best days of the space combat genre. A lot of our space gameplay elements take from games like Freespace, Wing Commander and Freelancer and from series like Battlestar Galactica. We wanted to control scheme to be comfortable and not feel like a regular flight simulator. Giving players full motion in space and the ability to drift was an important goal.
Lastly, we wanted a good mix of game genres, space and FPS. Ideally the game would have niches for players preferring either type. This proved to be a difficult goal to maintain. We tried to make both modes approachable for new players while still keeping the depth we wanted in the game.
Eternal Silence pushed a lot of boundaries, and all our tweaking and prototyping produced some impressive results in the final product. Here’s what went right:
Eternal Silence has excellent and cinematic space combat. This isn’t surprising when you consider the amount of tweaking and balancing work that went into it. The space combat was the star in the mod, and we wanted to make sure it felt that way. At its best, Eternal Silence features teamwork in space, with fighters escorting bombers as heavy fighters and interceptors take down incoming targets. The space flight feels very natural, and with our “cut engines” key, it’s possible to drift in any direction, reinforcing the physics of space. Space combat was deep, highly skill dependent and felt natural: Not too much like a flight sim, not too realistic as to feel unintuitive.
The weapons and combat style we created generated a lot of depth in the space combat. Skilled players could take out many targets in a short period of time without sustaining any hull damage, and the main learning curve of the game comes from learning the space combat. Landing your first kill is one of the most rewarding feelings, and when you begin to master the space combat you begin to see the true beauty of the game. Space combat is the core aspect of Eternal Silence which ties everything together into a coherent package. We made sure the mod featured space levels only (we didn’t want to be distracted with ground warfare) and our maps take place in many different environments (asteroid fields, ice nebulas, etc.).
The real turning point with the space combat came when we dropped our full Newtonian flight feature in favour of a more arcade approach and the “cut engines” key. In our early releases, the game featured a switch which would toggle between auto-thrusters and full Newtonian flight. This was great for the space fanatics but focused too much attention on the mechanics of flying. We found players so engrossed in simply getting places that concepts like escorting, defending and landing troops fell to the wayside. Removing this feature opened up the players’ eyes and allowed them to see the team play opportunities around them. Suddenly the movement was fluid and the game itself could take the focus.
If anything went right with Eternal Silence, it was the technology. We set our goals early on, and they were ambitious, but thanks to some educated guesses, they were all possible. We had many things going for us. First, we were a space combat mod, which meant collisions in space would be rare and the physics would be simple. We had well-defined portals between the worlds of FPS and space (unlike, say, Battlefield). We had separate scales so we could get maximum precision in both worlds without maxing out the engine’s map size. This all contributed to making the tech work and making Eternal Silence all the more impressive.
The bulk of the technology work in Eternal Silence was implementing the transition between space and infantry. This was done using a feature that was announced early on in the development of Half-Life 2: the 3D skybox. The space world in Eternal Silence uses a scale of 1 unit to 1 meter, while the indoor areas use 1 unit to 1 inch. This gap had to be resolved with a clever rendering trick and some teleporters. We had to hack the depth buffer in the 3D skybox rendering code so the worlds could properly intersect. The initial plan was to allow moving capital ships, so this design had a huge advantage. We could move the shell and the outer teleporter without having to move all the stuff inside. In the end, this was cut, but the technology was there, and it’s still possible to make maps with moving capital ships.
Networking and Lag
Early on, the mod was extremely laggy. We discovered this during our first release. After that rude awakening, the network code was highly optimized and is now extremely solid. The mod can run on a modem with the right settings, and that’s a testament to the hacks and tricks used to keep the mod lag free, but very playable. With the amount of things going on at once, especially in space, it’s amazing that the game can still run smoothly.
Since our goals were so focused on a cinematic experience, it became very important to deliver that feature to players with lots of effects, bullets, lasers, missiles etc. Keeping all these things in check from a networking point of view was a huge challenge. We implemented many forms of culling to minimize lag. This meant only sending information about ships which are near you (within 1.5 km) rather than let the Half-Life 2 engine treat space as a large room. It meant limiting visibility inside the hangar until it is absolutely needed and compressing messages to the most extreme levels possible. This was so successful that the network and CPU footprint of players in space is actually smaller than players on foot. This allowed us to show dozens of constantly moving players, missiles, bullets to the player without a hitch.
Eternal Silence is also the mod I know of to support fully predicted vehicles. This means you can fly in space with virtually no input delay. It was a huge pain to put in, but the payoff is well worth it when you can play in space with the same smoothness you get on foot.
One of our greatest successes with Eternal Silence was the use of our beta testers. Early on our beta testing was virtually non-existent. We had a team, but we were giving out the slots as prizes. We didn’t really organize testing much more than sending an email to everyone before a planned time. Distributing builds was also a big issue. After our first release, we quickly turned this around, and strong testing was one of the reasons the mod was fun to play.
It was clear after our first release that the mod needed to be better tested before we released it to the public. We had the beta team, but it was pretty much useless. A member of our team decided to take it upon himself to change this. He organized the beta team and set strict rules which all testers had to follow upon joining. This was essentially a contract saying you had to show up at a certain time every week and submit a report to the staff with your feedback. This had the immediate effect of removing all the dead members on the team overnight, since they were quickly thrown out. When we started accepting new beta testers, we found a few of them would try the game a week or two but then fade away. We never kept these people on, and our strict rules helped keep the team tight. The testers that did stay appreciated the organization and structure we had given the team, and the result was better feedback.
Testers felt that they could truly influence the development of the mod, and the weekly reports were invaluable to testing new features as we put them in. We had many veteran beta testers which stayed with the project all the way to the end. A few of them even joined the team, and pushed the game in new directions we never would have tried ourselves. Our beta program was a great success.
Written by Dan Menard (MadMechwarrior)
Next: What Went Wrong