One of my first duties when starting at Con Artist Games was to integrate a chat system into The Last Stand: Dead Zone. Whilst at the time it seemed like a pretty straight forward task, it eventually turned into an ever involving project that exposed me to both the best and worst experiences I have ever had online. In hindsight a bunch of the things I learnt along the way seem pretty obvious, but at the time they didn’t even enter my mind.
In the beginning…
… we had nothing, obviously. The only way our players communicated was via 3rd party online forums, which obviously wasn’t good enough, so we set about planning out what we wanted.
Our initial plans were pretty straight forward. There would be some public rooms that you would be connected to automatically. There would also be the ability to send private messages to one another. That was about it.
The service that we were using for the back end, playerio, already had the tools we needed to broadcast all the public and private messages, so the bulk of the work was making a UI in flash that could do everything we wanted. Anyone that has had to do anything complicated with TextFields in flash can probably imagine some of the hurdles we had to jump through. There was lots of messing around with fonts, as well as trying to come up with good caching / limits on messages, but in the end, nothing too painful.
What’s in a name?
It was around the time that I had the prototype working that I hit my first problem – Names. We obviously wanted players to be identifiable by the names they chose, as GUIDs aren’t the easiest things to remember. Unfortunately when the game was first set up there was no requirement to have a unique name. We had to go through the painful task of getting everyone to select their names again, this time forcing uniqueness.
All about the loot
The next hurdle was to make it so that players could show off their loot to one another. The back end side of things for this ended up not being too bad as my coworker had set up the loot system in such a way that it was relatively easy to serialize the data. After a bit of tweaking we had it importing and exporting JSON data that was then tacked onto the outgoing message. The most awkward part again was the TextFields . Getting them to show highlights that could be clicked on whilst not messing with the keyboard input was a pain, but we overcame it.
The part that would later trip me up was the dynamic loot. Because the game dynamically generated all of the loot and its related stats, the combinations were almost infinite, and the JSON data could get quite big (well, big for what they were). When combined with players that loved to spam chat with all their items we hit some strange message size limits that weren’t exactly obvious and that was hard to replicate.
Let there be chat
When we finally got the first generation of chat live, it was great. It was really exciting to watch the players slowly trickle in for the first time and taking part in conversations. We lost a lot of hours that first week just chatting to players – sharing ideas and getting feedback. This would be the first of the ‘most awesome’ experiences I had.
First signs of trouble
Then the inevitable happened – trouble makers began to appear.
At first we weren’t to worried as we already had a way to ban players accounts. The thing we didn’t count on though were the people that walked the line of not being bad enough to deserve a ban from the game, but definitely needing some motivation to curb their behaviour. One example of this was a guy that obviously loved the game and was super excited about it, but he had a tendency to shout down other players and newbs if he didn’t like what they were asking. He didn’t deserve to lose his account, but we also didn’t want him scaring off other players. As I explained to him multiple times – he is scaring off our customers, and without them, we don’t have a game for him to play.
Hammer time!
So, about a week after initial launch I created the first version of our chat ban system – which would later become affectionately known as the Ban Hammer. It was a pretty simple system that allowed chat users marked as ‘admins’ to be able to issue two types of temporary bans – Kicks and Silences.
Kicks themselves were pretty straight forward. When applied they kicked the player out of the chat system for whatever amount of time we had specified. The room was also notified that the person had been ‘… kicked for x minutes for y reason’.
The real fun though was the Silences. Instead of kicking the player out of the chat, it just removed their ability to interact. Every time they tried to send a message, they would be auto blocked. Offending players would often say that this was much worse than being kicked because they were forced to just sit and watch.
I also added in Ninja versions of both Kicks and Silences that would apply the ban without informing the room. This was particularly helpful for players that just wanted the attention.
The bans obviously upset some our players, but overall I think that they helped improve the community.
Foul language
The most common issue we had with players was to do with foul language. The initial way we dealt with this was to have a list of keywords that were automatically generated a notification to the admins if they were used. It was simple and worked well, but because of the complexities of languages there were a lot of false positives.
I altered the system to use two different lists – bad and kinda bad. Both lists would trigger a notification for the admins, but the bad words would be automatically redacted from chat. I’m not sure how he came up with the idea, but my boss got me to replace the bad words with love heart icons. This ended up working really well because it defused most situations and made the offending players look rather silly.
Just for good measure, I added in an auto ban that would be applied if the player triggered the filter too many times in a short period.
Nature, finds a way
The internet being what it is, players soon found ways around the bans and filters.
The first, and most obvious, was to create a new account. Personally I would have thought that creating a new account would be too much of a pain just to chat, but apparently I was wrong.
The other things that they would do was take advantage of the fact that we were in a different timezone. We found out through the forums that some of the players were being downright disgusting when they knew we weren’t watching.
Finally, and probably the most frustrating of all, they didn’t take the bans seriously. Originally we would only issue short 1~2 hours bans at most, but what we discovered was that there were players that would just wreak havoc towards the end of their playing session without fear of getting banned because they knew the ban would be over by the time they returned the next day.
Sigh.
To get around these clever people I reworked a couple of our systems.
Firstly, I made the default bans much longer and rigged them so that they wouldn’t actually start counting down until the player logged in. Then I put together a system that linked the player’s various accounts together and made the ban system walk that entire list every time someone got a ban. Suddenly all those players with multiple accounts weren’t so keen on getting a ban as it would wipe out all of their accounts at once.
Secondly I started tracking how often and how long accounts had been banned for. If a player had racked up bans on a linked account, they wouldn’t be given any ‘warnings’ on their alternate accounts.
That didn’t really help with the people being offensive when we weren’t monitoring, but that required a more thought out solution.
Trading places
Somewhere around here we launched the second phase of features for our chat system – online trading. This was by far the most complicated part of the chat system because it tied many systems that by original design were meant to be isolated. Connecting two players from different servers, allowing them to share their private inventories and then transferring items and deducting currency proved to be a bigger pain in the butt then I originally thought (and I already thought it would be a big pain in the butt).
The details of how we got trade working is probably out this post’s scope, but it does need to be mentioned because of the effect that it had on the chat system.
Firstly, trade generated a lot of noise. Players would spam chat with items and trade requests that made it look like the sped up credits of a movie.
Secondly, it exposed the more toxicity. People would argue about the costs of things, calling each other scammers and cheats.
We got around the first part by generating dedicated trading rooms and limiting all trading to those rooms only. This freed up the public rooms for general conversations. There wasn’t much we could do about the behaviour except for banning players when they stepped out of line.
Forming Alliances
Sometime after trading we launched the Alliance Wars. It was a system that allowed players to form teams and gain points by raiding other alliances. Originally I didn’t think that the system would have much of an impact on chat – other than the place were you would recruit players and talk to your team mates – but I was wrong.
A core group of players started taking their alliances a bit too seriously and began being really nasty to one another. It was common for them to start massive flame wars that would engulf the chat rooms and even spill out into the forums. We were constantly being bombarded with complaints and on numerous occasions found players conspiring to get other players / teams banned from the game so that they could gain an advantage.
This was probably the darkest period in the life of the chat system. It was really sad to see this thing that I created being used in such a negative way. Not only was it making chat an unpleasant place, it was also eating up way to much of our time dealing with it. There were days where I honestly wanted to shut the whole thing down. This was probably the lowest part of my experience with online chat.
Enough was enough
It didn’t take long for us to grow tired of this so we set about bringing in the biggest overhaul to chat we had ever done.
The first phase was to create an updated terms and conditions to the chat app that made it very clear that we would not tolerate bad behaviour (technically we had always had one, but the new one was much more detailed). Every player was required to check the box before they entered chat. We formalised the ban procedure and introduced a new ban called a Strike. A strike was the same as a kick, but automatically increased in duration each time you received one. If you received 3 in 6 months all of your accounts were permanently banned from the game
The second phase was a new chat monitoring and reporting system. I created a utility that could monitor all of the chat rooms across every service and pretty much log everything that was said. It included an updated version of our bad word filter that could flag comments it thought was offensive.
Next, I create a ‘report this player’ option in the chat system that would allow players to report comments that they thought was offensive. We forced them to enter a explanation for why they were reporting the player and included a warning that false reports would result in their own account’s being banned.
To make working with the reports and chat monitor easier I created an admin tool that allowed us to quickly review all of the flags and reports that had been generated. It allowed us to see the context of the comment as well as the full history of the players involved. It was very easy to see who the repeat offenders were and apply bans that spanned across all of their accounts.
Finally, the last phase was to go on a bit of a zero tolerance banning spree. The players that had been involved in the toxicity were all warned about what would happen if they continued, and every time they stepped out of line we hit them with a longer ban. There was a fair bit of uproar from the friends of players that were banned and we probably lost a bunch of players in the mess, but I honestly think that it needed to be done.
Conclusion
So, if you have made it this far you can see that in game chat can be a bit of a roller coaster. I always joke that I would never have in game chat again, but honestly I believe that chat contributed a lot to our games community and its popularity. I still enjoy jumping in there occasionally and talking to random players (sometimes I disguise myself as a normal player so I don’t get hounded :p)
If I were to build another chat system I would definitely approach things differently – hindsight is good like that.