Our last update was on January 10th, so we apologize for the lack of blog posts. We told ourselves we would make a new blog post when we had something substantial to post about, so here we are. The last month has been an exhaustive dive into the deep depths of the networking engine in an attempt to fix a problem that has plagued ED since the very start - Connection Issues. This will be the main topic of this post, but we still have plenty of other goodies to show you :) 

Note: This blog post is also long one, and is two parts, so make sure to scroll down to the next post when you’re finished reading this one.

The ‘Dedi Connection Bug’

As you probably see on every single bi-weekly reddit post, and mentioned in the last blog post, there’s a bug that gets mentioned a lot: ‘The dedi connection bug’. This bug is actually a series of multiple, separate bugs, but manifest itself in two ways:

  1. Player A can’t join a server because it conflicts with player B already in the server. The join request is actually rejected. Once player B leaves, then Player A can join again. This has 1 root cause
  2. A player attempts to join a server, but the establishment process never completes, yet the player is able to join the voip server and can hear players in the server. This manifestation has multiple root causes. 

To understand the magnitude of work required to fix these, you can compare this issue to AMD Freeze bug we fixed - Then multiply it by 4. In order to be able to fix something like this, A large portion of engine needs to be completely reversed just so we can get a handle on what is going on. An enormous amount of time, energy, and teamwork has gone into figuring out exactly why these issues occur. Entire books on networking have been read. Hundreds of wireshark captures and game logs have been poured over. 655 engine functions have been reverse engineered by Unk_1 trying to fix these issues. You read that correctly. 655. Remember, we have no source code. 

Connection Issue 1

As I mentioned above, the first issue, which is an extremely common issue, is when a player can’t join because it is conflicting with another player in the game.
This bug has 100% been fixed. 

To make a long story short, there’s a unique identifier for each peer that the server creates, and it uses this identifier to look up information. The problem was that some players ended up with identical identifiers, so the server didn’t know who it belonged to. We even ran into scenarios where a player was rejected because the server thought the client was itself.

After further investigation, we found out that the server was creating this identifier based on a simple combination of the client’s Local IP and Port.  Since most routers that people have in their homes are on the same 192.168.x.x network, and everyone is using port 11774 as the game port, tons and tons of conflicts happen. 

By changing the way this identifier is created, we have squashed this bug entirely :)  It’s a massive relief to have finally figured it out, but we’re not quite done yet. 

Connection Issue 2

This manifestation of the bug has multiple root causes, and we are still working on these. However, most of the reversing and groundwork is already done - now we just have to continue to replicate, track them down, and fix the ones that are within our control. 

Q: Why haven’t you released yet? What is preventing you from releasing right now?

The usual question. The updater is coming along nicely, there’s not much work left to do on it. The main thing left is to finish squashing the remaining connection issues, and we’ll be all set. We don’t know how long it will take to fix the other issues, but don’t expect them to take long at all. 

Enough about the boring stuff, on to the fun stuff. 

Misc/Small Bug Fixes since last post:

  • Fix crash when map or gametype DisplayName is too long
  • Fix Battle Rifle showing “NULL” instead of “WEAPON” in search
  • Fix Banshee Bomb bind for H3 Bumper Jumper
  • Profile Settings - Stop changing tabs from breaking esc exit
  • Customization Menu Fix - Better check for active subform (esc exits immediately if no subform open)
  • Lots of Misc HTML/CSS/JS cleanup
  • Added Server.NumberOfTeams variable so it’s easier to control the number of teams in Multi-Team games. 


Q: Have any new cool features been added since the last post?

A: Absolutely. 

We’ve added many cool new things to forge, including openable/closeable doors (both manual and automatic), gears, giant fans, those pillars in the center of Reactor, and much more. 

Here’s a pic of some of the different properties you can set.

image

You can also tether objects to other objects. For example when a gear (wheel, fan etc..) is on the same channel as other devices, it will power them by the turn rate. We also had a little fun with it

There is now a new game variant setting for being immune to assassinations:

There’s also a new game variant setting for showing/hiding nameplates. This is especially useful for foggy maps (as you’ll see in the Foggy Resort video below) where the player’s nameplate gives away his position even though he can’t be seen through the fog. 


Infection havens have been added, which is a zone trait where you cannot become infected by zombies. (These were in Halo: Reach’s forge)

image

I’ve also finally gotten around to implementing the ability to completely customize your emblem while in-game.  Doing it on Halostats through the server browser screen is fully implemented, but one of our testers, Jaron, is working on adding it to the customization screen for those that prefer to use a different browser. In addition, he’s added wide variety of addition emblem images and icons that were not available in Halo 3.