No seriously, it's not that hard. Look, I'm one to talk, I haven't actually had any experience in the field of Game Development. Sure, I've got a Software Engineering degree, and I spent 6 years in the field before being tired of the corporate bullshit that happened where I worked. I know that at times you have to take shortcuts, and at times you're asked to do things that aren't exactly the greatest in terms of the user. But there are times in which an implementation comes along that I sit there going: "What in God's name was the company thinking? Did you not plan for this? What is going on in those design meetings? Why of all things is this running my Hitman experience?"

The latest one that has me a little bit off an uproar is the latest episodic release by the folks over at Square Enix: Hitman. Specifically, what can happen when you start a mission online and then lose your connection during it. Basically, you've started up a play through of a certain mission, with your ethernet plugged in and you're logged into the servers, and a momentary interruption of the connection occurs. Maybe the servers go down. Maybe your sister reset the router without you knowing. Maybe the cat got electrocuted and shorted out the wifi. Regardless of the situation, the connection drops. And that leads to our problem: in the middle of gameplay, you're kicked out abruptly.

https://www.youtube.com/watch?v=FJnujzQn0H0

Hitman does have a couple of interesting features tied to its online system. First, you've got elusive targets, which are special contracts that only exist within a mission for a set amount of real-world time. Once that time is up, they escape if they are still alive. Next, you've got an Escalation mode. These are challenges that make your kills increasing complex, by throwing new obstacles or hurdles in your way that you have to deal with. Or, it could be that the layout off the battlefield has changed. When offline, you can't access the Career menu as well, which shows you those challenges and what you've completed/mastered.

Now, having elements that bring new online features into gameplay can be a boon. For example, I liked the fact that Just Cause 3 indicated to me when one of my friends beat one of my high scores. It can add new elements of challenge, new elements of competition, and really change the landscape of the game. It can provide a whole new level of interaction with the user. But what it SHOULDN'T do is take away from what's already there—and in particular, make it cumbersome to play with. In Just Cause 3 for example, you could have to wait at times for the game to decide to come back if the connection was lost. Luckily, in that case, you didn't lose progress, but it's a small annoyance.

But Hitman takes that to the next level. If you lose your connection in the middle of your mission ... you find yourself on the main menu—without warning, without realizing what happened. You find a way to finally take out that target that's been beating the crap out of you over and over again? Too bad. Do it again, because Time Warner had a hiccup. Several of the biggest personalities in the gaming atmosphere have indicated that yes, this is a major problem, if the Steam Reviews and a 49% positive rating wasn't an indication enough.

https://twitter.com/DanNerdCubed/status/708686137083228160 https://twitter.com/GavinFree/status/708682611581784065

You know what else is tied to it? Your unlocks. Yes, that's right any weapons, any starting location that was unlocked while you were online—you can't access now. Now let's think about how you could implement that smartly. The unlocks are specifically data within your system. This data is a record that you completed a certain challenge or objective in order to unlock a new weapon—whether it's the weapon itself as an "inventory" item, or an indicator that you passed the challenge in some way, which then can be used to check against. Wouldn't it be smart to have, I don't know, a local copy of that data? So that it can be used whenever the service isn't there? Sure, make it clear to the player that while they are offline that they can't make progress of any sort for any new unlocks, if you really need to do that. If you're so concerned about people possibly cheating the system somehow, you can check that every so often when they are back online for your database records. Something looks odd? Yeah, maybe do something about it. But what you shouldn't probably do is take it entirely away from the player.

But this is a price to pay with those new features right? We have to accept it so that we can have more of a feature set in the end? Well, I call baloney on that. Because from a design perspective, it absolutely makes no sense. Because any designer worth their experience or degree should know that there's an easy solution to this, a solution that could have been easily constructed from the forefront of the progress.

An Example from the Modular Programming and Pointers page at Temple University (source: http://cis-linux1.temple.edu/~pwang/1057-PC/Figure/06-11.png)

See, in software engineering, there's a concept called modular programming. Basically, the idea is that you separate individual elements of functionality from each other into independent modules, even making them interchangeable. Now the benefit there is simple: the idea here is that you keep the features separate, so they don't necessarily become too inter-tangled. You can throw all the features into the base design that you want, but a great software engineer will take those features and make it so that they only affect each other in a controlled fashion, and one change doesn't necessarily force the others to bend to them. In the above example, let's consider the following: should the printing of the information onto the screen be tied to the actual addition/subtraction that occurred in the third tree branch? In most cases, it seemingly shouldn't: what you print on screen shouldn't be dependent on the actually computation in question, you're just printing information. Doesn't matter what the information is, you just need the info, regardless of how it got there. Now of course, it can still work even though you did a computation, it just doesn't require one to happen.

This should happen at the design level when planning on the feature set of your game and understanding your base system as a whole, and what relationships it has inside of it. Whether it be through UML diagrams or just of the top of the head, you need to understand what exactly needs to function with each other and what doesn't. And here's the thing: even if you want the features to be connected in the long run, you can still do it. You just take the element that ties the two modules together loosely and make it have that always online requirement. You separate the base code from the implementation, but when you put them together that's where you throw the restriction in. And with the idea of modular programming, that connection should be easier to replace/change out. And in this case, the design of the always online portions and the base gameplay shouldn't be this closely tied together with the feature set that Square Enix has for the Hitman game.

Now, here's the thing: why shouldn't it? I mean, granted, for the user, it's really annoying, so that should be a point to not do it, but there's also other reasons why Square Enix shouldn't have done this. From a business standpoint, why would Square Enix do this to themselves? I mean, let's think about it: hitting multiple markets with single-player and online community focus would do them better in the long run—two separate markets to take advantage of. Even if I don't care about the online portion, you could still sell me on the base gameplay that's not reliant on the connectivity portion.

If your code looks like the above, you've done something wrong.

It could be bad design, and it's so deep within the code base that it's too hard to pull it out. Think of a yarnball. Sometimes, you get a ball where everything is inter-tangled that it takes a lot of effort to get it to a normal state. That could be the code in this case—that the connection of the always online and the feature set question is at the foundation of the code. And like the yarn ball, it's almost not worth the effort to untangle.

But that design could also be intentional. Jim Sterling talked about it regarding an insider source, and specifically their thought that the consoles were on the way out, and always online and free 2 play games would be the way of the future. This mostly comes from the slowdown at the end of the 7th generation, and executives thinking that the next console generation wasn't going to do well and that the PC and more mobile platforms (free 2 play specifically) would be the wave of the future. Square has shown that they aren't afraid to chase new ideas in the Deus Ex: Mankind Divided pre-order bonus shenanigans.

With the idea of F2P being the future in mind, it makes sense at a design level why the game would be as it is. That the original intention was to have those elements directly connected to the server in the F2P model. And by the time that changed, the code base was already too far along—that big design change after the foundation was poured becomes a massive problem. You can't just put a band aid on it and hope that it's going to be OK.

But there's one argument that someone made when I discussed this internally within TechRaptor, and one that I really don't have a good counter for. Because it's legitimately possible on why this could have been implemented this way.

"Guess its for the pirates."

The overwhelming sense that pirating may be playing a part in this. ugh.

That ... sorta becomes a major problem. Now those who have talked to me have probably seen my condemnation of the whole pirating concept. I admit I'm fully biased on this; I've seen work of mine turned into "shared" work for the benefit of someone else. I love open source, for example, it's one of the strongest elements in the software development world, but that's with the idea that I've shared that work openly and willing to you and put a license on appropriately. If you're going to use my library to break into a site, for example, I want protection so that I can't be held responsible from those who'd use it for "evil." And the idea with pirates is that they take the item you've created by force.

Now, Square Enix has shown that they are really concerned with piracy, as they've taken to using Denuvo in games such as Just Cause 3 and Rise of the Tomb Raider. However, I can't say that this isn't a possible additional anti-piracy measure. It makes sense; if you tie the weaponry, the bulk of a game to an online service, you at least make it a bit more difficult for pirates to possibly work around it. If you've got to prove that you game is "legitimate," then yeah, it may drive certain people off from taking your game, and even if it's a small fraction, may convert them to paying customers. There are absolutely no numbers saying that those people would buy the game, but we can't say they wouldn't buy the game either.

But of course, it comes with a cost of punishing legitimate people who purchased your game for reasons beyond their control. Your servers not up? Welp, guess you can't play the way you want to, can't get that weapon you've been wanting to try. Heck, that's if the servers are up several years from now as well. We've seen recent examples of games shutting down their servers, such as Darkspore, despite the fact that there are single-player modes in the game. Yeah, that's right, a game can't be played anymore despite it having significant single-player components. That's where we are in the world of gaming.

How has a single player element from a game now been locked out from players for ever? What madness have we been thrown into?

Now, I'm well aware of the development cycles and how crazy the world of gaming is in terms of hours worked, and the absolute chaos that the market has created up to this point. Being in the industry would be a nightmare for some, despite the love of all things gaming that I'm betting a majority of the people who work in it have. And there are some decisions out of the developer's hands.

But what's really curious about this is that, in most cases, modular programming saves time. There's an upfront cost in terms of design, but there's a benefit to it: it makes everything clear in terms of what needs to be done and the work can be pipelined more efficiently. That can mean that a person isn't waiting on the next guy to get their job done before they can move on. Sure, you'll most likely have to test it when it all comes together, but that's going to need to happen anyway. It seems rather simple, but maybe I'm just being a bright eyed bystander here, who wants the best for both sides of the table.

But then again, common sense seems to be a rare commodity at times when it comes to big publishers. Just ask Capcom.