Showing posts with label cheat codes. Show all posts
Showing posts with label cheat codes. Show all posts

Thursday, April 16, 2020

Decoding the Level Passwords in Pushover

Pushover is a puzzle game about an ant pushing over dominos. I played it when I was a kid, and more recently I got a Steam copy of it from a cheap bundle of old games. I didn't really start playing this Steam copy until this week, at which point I remembered that, like many games of the time, Pushover has no save system. Each time the player reaches a new level, the game provides a password which can be used to return to that point.

As I played the first few levels, I noticed something interesting. The first four level passwords were as follows:

Level   Password
01      00512
02      01536
03      01024
04      03072

Two of the passwords being powers of two immediately caught my attention. If we convert each password to binary (using sixteen bits just because bits usually come in groups of eight), we get this:

Level   Password   Binary
01      00512      0000001000000000
02      01536      0000011000000000
03      01024      0000010000000000
04      03072      0000110000000000

Following this pattern, I expected the password for level 05 to be 0000100000000000, or 02048, but using this password brought me to level 07 instead. Going back to level 04, I played up to level 08 and found that, while there was still clearly some kind of pattern, it was a bit more complicated than I had thought. Converting the first eight level passwords to binary, we have:

Level   Password   Binary
01      00512      0000001000000000
02      01536      0000011000000000
03      01024      0000010000000000
04      03072      0000110000000000
05      03584      0000111000000000
06      02560      0000101000000000
07      02048      0000100000000000
08      06144      0001100000000000

At this point, we can already start to see what's going on, if we look at the binary in columns. There seems to be a pattern emerging:

  • The 29 bit column (10th from the right) has 2 ones, 2 zeros, 2 ones, and 2 zeros; we might expect this to continue indefinitely.
  • The 210 bit column (11th from the right), after a single zero, has 4 ones in a row, followed by some zeros; we might expect this column to have a pattern of 4 ones, 4 zeros, and so on, albeit offset by a single zero at the beginning.

However, I didn't really see it until I had played through another eight levels. Converting the first sixteen level passwords to binary, we have:

Level   Password   Binary
01      00512      0000001000000000
02      01536      0000011000000000
03      01024      0000010000000000
04      03072      0000110000000000
05      03584      0000111000000000
06      02560      0000101000000000
07      02048      0000100000000000
08      06144      0001100000000000
09      06656      0001101000000000
10      07680      0001111000000000
11      07168      0001110000000000
12      05122      0001010000000010
13      05634      0001011000000010
14      04610      0001001000000010
15      04098      0001000000000010
16      12290      0011000000000010

Focusing only on the higher-order (leftmost) bits, we can now clearly see that:

  • The 29 bit, starting at level 01, has a pattern of 2 ones, 2 zeros, and so on.
  • The 210 bit, starting at level 02, seems to have a pattern of 4 ones, 4 zeros, and so on.
  • The 211 bit, starting at level 04, has 8 ones in a row, and has presumably started a pattern of 8 ones, 8 zeros, and so on.
  • The 212 bit, starting at level 08, is all ones all the way through level 16, and may have started a pattern of 16 ones, 16 zeros, and so on.
  • The 213 bit first becomes one at level 16.

But something is also happening in the 21 bit (second from the right), where a one suddenly appears starting at level 12. This doesn't seem related to the rest of the pattern, and I think I know why.

It was after completing level 11 that the little ant protagonist found... a bag of Quavers...? (Did I mention that Pushover was sponsored by a snack food company? I've never had Quavers; apparently they're British.) On the menu screen which appears between levels, I could see after completing level 11 that a little sprite representing a bag of Quavers had been added to the bottom of the screen where there appear to be nine spaces available. So it's probably safe to assume that nine virtual bags of Quavers are pointlessly awarded throughout the game.

The fact that the 21 bit changed after level 11 suggests that some of the lower-order bits are used for tracking the bags collected, independently of the higher-order bits which indicate the level number. As an experiment, I took the password for level 12 and flipped the 21 bit to zero, resulting in 0001010000000000 or 05120. Sure enough, entering the password 05120 took me to level 12, and upon completing the level, the inter-level menu screen did not show the bag that was there when I had beaten levels 11 through 15 before. Moreover, the password it gave me for level 13 this time was 05632, which is the previously obtained level 13 password with the 21 bit flipped to zero. However, taking the level 02 password and flipping the 21 bit to one did not result in a valid password. So I cannot cheat my way into already having a bag prior to level 12, but it seems I can enter levels 12 or later without one.

If some bits are only for tracking bags collected, and if any level can be entered without any bags, then we should be able to get a complete set of level passwords just by predicting the pattern of the bits indicating level number. The passwords of levels 01 through 16 suggested that only the higher-order bits (starting with 29) encoded the level number. So at this point, I predicted that the full pattern (if it continued indefinitely) would be as follows:

  • The 29 bit will start with one at level 01 and then change every 2 levels.
  • The 210 bit will become one at level 02 and then change every 4 levels.
  • The 211 bit will become one at level 04 and then change every 8 levels.
  • The 212 bit will become one at level 08 and then change every 16 levels.
  • The 213 bit will become one at level 16 and then change every 32 levels.
  • The 214 bit will become one at level 32 and then change every 64 levels.
  • The 215 bit will become one at level 64 and then change every 128 levels.

This algorithm does predicts the values of the seven highest-order bits for the first sixteen level passwords. Unfortunately, I realized later that it's not quite correct. While looking around in the game's files for goodies, I found that the Steam version of Pushover comes with a file called PUSHCODE.TXT — which, bizarrely, contains most but not all level passwords, and seems to have been written not by the developer or publisher but by someone from a demogroup known as Tristar & Red Sector Incorporated. The file begins:

                            TRISTAR & RED SECTOR
                                              
                                  PRESENTS

                            PUSHOVER (LEVELCODES)


LEVEL 1    00512
LEVEL 2    01536
LEVEL 3    01024
...

It continues all the way through level 67:

...
LEVEL 65   17023
LEVEL 66   18047
LEVEL 67   17535

NOTE: THERE ARE MISSING A FEW CODES!!!!

TIME BANDIT/TRSI

Pushover apparently has 100 levels, so I guess the player who wrote this file gave up about two-thirds of the way through the game. However, they got far enough to show me that the 215 bit does not get flipped to one at level 64. Any number with a one in the 215 place would be at least 32768, and none of the passwords in PUSHCODE.TXT are that high!

So I wrote a few lines of Python to convert all the passwords in PUSHCODE.TXT to binary. The results are as follows:

Level   Password   Binary
01      00512      0000001000000000
02      01536      0000011000000000
03      01024      0000010000000000
04      03072      0000110000000000
05      03584      0000111000000000
06      02560      0000101000000000
07      02048      0000100000000000
08      06144      0001100000000000
09      06656      0001101000000000
10      07680      0001111000000000
11      07168      0001110000000000
12      05122      0001010000000010
13      05634      0001011000000010
14      04610      0001001000000010
15      04098      0001000000000010
16      12290      0011000000000010
17      12802      0011001000000010
18      13826      0011011000000010
19      13314      0011010000000010
20      15362      0011110000000010
21      15878      0011111000000110
22      14854      0011101000000110
23      14342      0011100000000110
24      10246      0010100000000110
25      10758      0010101000000110
26      11782      0010111000000110
27      11270      0010110000000110
28      09222      0010010000000110
29      09734      0010011000000110
30      08718      0010001000001110
31      08206      0010000000001110
32      24590      0110000000001110
33      25102      0110001000001110
34      26126      0110011000001110
35      25614      0110010000001110
36      27662      0110110000001110
37      28174      0110111000001110
38      27150      0110101000001110
39      26638      0110100000001110
40      30734      0111100000001110
41      31246      0111101000001110
42      32270      0111111000001110
43      31758      0111110000001110
44      29726      0111010000011110
45      30238      0111011000011110
46      29214      0111001000011110
47      28702      0111000000011110
48      20510      0101000000011110
49      21022      0101001000011110
50      22046      0101011000011110
51      21534      0101010000011110
52      23582      0101110000011110
53      24094      0101111000011110
54      23070      0101101000011110
55      22558      0101100000011110
56      18494      0100100000111110
57      19006      0100101000111110
58      20030      0100111000111110
59      19518      0100110000111110
60      17470      0100010000111110
61      17982      0100011000111110
62      16958      0100001000111110
63      16510      0100000001111110
64      16511      0100000001111111
65      17023      0100001001111111
66      18047      0100011001111111
67      17535      0100010001111111

This is all consistent with my predictions about bits 29 through 214, but it's the 20 bit — not the 215 bit — which gets flipped to one at level 64. So we can revise the earlier prediction:

  • The 29 bit starts with one at level 01 and then changes every 2 levels.
  • The 210 bit becomes one at level 02 and then changes every 4 levels.
  • The 211 bit becomes one at level 04 and then changes every 8 levels.
  • The 212 bit becomes one at level 08 and then changes every 16 levels.
  • The 213 bit becomes one at level 16 and then changes every 32 levels.
  • The 214 bit becomes one at level 32 and then changes every 64 levels.
  • The 20 bit becomes one at level 64 and then changes every 128 levels.

This isn't quite as elegant as what I had initially predicted, because the "level bits" are no longer contiguous, but it appears to be correct. The last rule is already unlike the others anyway, in that we would never actually see the 20 bit change from one back to zero after 128 levels because there are only 100 levels in the game. I predicted that bit to flip at a frequency of once per 128 levels to continue the power-of-two pattern. So that last rule could just be written as:

  • The 20 bit is one at level 64 and up.

The passwords in PUSHCODE.TXT also give us a hint about how bags are tracked. It seems that each one has its own dedicated bit. If we enter the level 67 password above (17535 or 0100010001111111) and then quit back to the menu screen, we see that we have the first six bags. But if we flip a few bits to get 0100010001010101, and enter the corresponding decimal password 17493, quitting back to the menu shows that we have only the second, fourth, and sixth bags.

If there are nine bags, and if each bag has its own bit, then we need nine bits to represent them all. Meanwhile, if bits 20 and 29 through 214 and are used to determine the level, then the nine bits remaining to represent bags are 21 through 28 and 215.

From another source (the description on this YouTube video), I've found that level 100 is actually a bonus level, and that its password is 44543 (or, in binary, 1010110111111111). This is is still consistent with the above rules regarding bits 29, 210, 211, 212, 213, 214, and 20; additionally, bits 21, 22, 23, 24, 25, 26, 27, 28, and 215 are all flipped to one.

By starting with the level 100 password, individually setting the 21, 22, 23, 24, 25, 26, 27, 28, and 215 bits back to zero, entering the resulting passwords to start level 100, and then quitting to the menu to see which bags are shown, I've confirmed that each of these bits corresponds to a particular bag. Interestingly, setting 215 to zero in particular, resulting in the password 11775, has the effect of making level 100 easier by revealing the special domino types which are normally hidden on this bonus level. More importantly, though, I'm pretty sure we have now fully decoded the game's level passwords.

  • The 20 bit is one at level 64 and up.
  • The 21 bit is one after the first bag is collected (level ≥ 12).
  • The 22 bit is one after the second bag is collected (level ≥ 21).
  • The 23 bit is one after the third bag is collected (level ≥ 30).
  • The 24 bit is one after the fourth bag is collected (level ≥ 44).
  • The 25 bit is one after the fifth bag is collected (level ≥ 56).
  • The 26 bit is one after the sixth bag is collected (level ≥ 63).
  • The 27 bit is one after the seventh bag is collected (level ≥ 78).
  • The 28 bit is one after the eighth bag is collected (level ≥ 89).
  • The 29 bit starts with one at level 01 and then changes every 2 levels.
  • The 210 bit becomes one at level 02 and then changes every 4 levels.
  • The 211 bit becomes one at level 04 and then changes every 8 levels.
  • The 212 bit becomes one at level 08 and then changes every 16 levels.
  • The 213 bit becomes one at level 16 and then changes every 32 levels.
  • The 214 bit becomes one at level 32 and then changes every 64 levels.
  • The 215 bit is one after the ninth bag is collected (level = 100).

The above assumes that bags are awarded for completion of levels 11, 20, 29, 43, 55, 62, 77, and 88, based on the binary representations of the first 67 passwords passwords found in PUSHCODE.TXT and of the remaining passwords found on this page. I don't feel inclined to play through the entire game to confirm it myself before publishing this post. Given that we can enter any level just by setting the "level bits" (29, 210, 211, 212, 213, 214, and 20) — without turning on any of the "bag bits" — there's actually more than enough information here to allow me to amuse myself by writing a little Python script that gives me a valid password for any level I want to play:

import sys


def get_level_bit(frequency, level):
    offset = frequency // 2
    return (level + offset) // frequency % 2


def generate_password(level):
    bits = 0
    for index in reversed(range(16)):
        bits = bits << 1
        if 9 <= index <= 14:
            bits += get_level_bit(2 ** (index - 8), level)
        if index == 0:
            bits += get_level_bit(128, level)
    return bits


if __name__ == "__main__":
    print(generate_password(int(sys.argv[1])))

Is this really useful when I could just look up the passwords on the internet? Not really. But reverse engineering the game's passwords was more fun.

Thursday, February 6, 2020

How to Cheat in Spec Ops: The Line

Why Cheat?: A Quick Review of My Experience with a Not-Completely-Awful Game


I don't usually play military first-person shooters, let alone cover-based shooters like Spec Ops: The Line. But I got it for $1.00 (along with Duke Nukem Forever and The Darkness II) from Humble 2K Bundle 2, and... it wasn't that bad, at least on the default difficulty setting. I suppose it's precisely because I don't usually play this type of game that I didn't just see Spec Ops: The Line's cover-based shooting mechanics as an inferior version of what you would find in, say, a Gears of War game. For me, it was something different, and I enjoyed it, even though it was occasionally frustrating. Having gotten to the end of my first play-through, I could see myself playing it more, and none of the achievements seemed particularly hard to unlock, so I decided to play through the game a couple more times to go for 100% completion.

It was only at the point where I had unlocked all but one of the game's achievements — the one for beating the game on the hardest difficulty setting, FUBAR — that I realized how anti-fun the game could be. So I dropped it for a while. But after a few years of seeing 49/50 on the game's achievement tracker, it began to bother me.

The thing about me and achievements is that, while I'll make some effort to unlock them if they actually happen to be fun to unlock, I don't really care a whole lot about them otherwise... except in that they annoy me when they serve as a reminder of what's almost finished. In other words, while I don't normally treat a game with achievements as a tedious "to-do" list, 98% complete is just irritating.

So eventually, I did go back to the game and try to beat FUBAR mode, thinking it just couldn't be as bad as I remembered. But it was worse than I remembered. It was an enjoyable challenge for a while, and I actually got all the way to chapter 11 out of 15, but after a certain point, I couldn't play for more than 30 minutes at a time without getting annoyed. I wasn't enjoying it anymore, and while there were occasional moments of satisfaction in which I was able to pass a checkpoint by figuring out some optimal strategy and executing it perfectly, these moments were outnumbered by all the times when having gotten through a tough fight seemed like blind luck. The game's FUBAR difficulty setting isn't just unreasonable at times; it's also where the inherent flaws in the game's design really shine.

When one isn't having fun with a game anymore, does it make sense to keep playing just for an achievement? Not really. Not when nobody else is ever going to see or care about that achievement. When a game isn't fun anymore, the rational choice is either to drop it or to make it fun. I had begun to wonder if there was a way to cheat my way through the last bit of the game, as venting my frustration by breaking the game in some amusing way might make up for what felt like a waste of time so far. Turning that 49/50 into a 50/50 (so that even my undiagnosed OCD could accept that I'm done with the game) without having to subject myself to any more of this sadistic FUBAR nonsense would be nice too.

That's when I realized that the game's configuration files, which are encrypted in the Windows version on which I did the first half of my FUBAR play-through, are human-readable plaintext in the Linux version on which I continued the game after the termination of Windows 7 support gave me the final push towards using Linux for almost everything.

How To Cheat, The Easy Way: Step One Is To Install Linux (Which You Should Do Anyway Unless You Really Love Windows 10)


Install the Linux version of the game using the Linux version of the Steam client, and go to
~/.steam/steam/steamapps/common/SpecOps_TheLine/SRGame/Config
and you'll find a bunch of .ini files — 94 of them, by my count — and a single .txt file. I haven't fully explored the contents of these configuration files, because some of them are rather large, and there are too many of them to summarize here even if I had looked at them all. However, a quick browse through a few of them suggests that they contain variables for almost all the numerical and Boolean values one might want to alter, such as: player health, health regeneration rate, enemy health, the amount of damage required to explode enemies' heads, weapon damage, amount of ammo each weapon gets from ammo boxes, et cetera.

Some files have multiple variations. For example, the files
SRPawnEasy.ini
SRPawnEasy_Coop.ini
SRPawn.ini
SRPawn_Coop.ini
SRPawnHard.ini
SRPawnHard_Coop.ini
SRPawnInsane.ini
SRPawnInsane_Coop.ini
all contain values like character health. The ones with the "Coop" suffix obviously apply to the game's cooperative multiplayer mode, while the files marked "Easy", "Hard", and "Insane" presumably apply to the the game's "Walk on the Beach", "Suicide Mission", and "FUBAR" difficulty modes, respectively. I assume the "Combat Op" difficulty (which lies between "Walk on the Beach" and "Suicide Mission") is considered the default setting, so it probably just uses the values from SRPawn.ini (or SRPawn_Coop.ini for cooperative mode). Furthermore, I assume other difficulty modes will also fall back on SRPawn.ini for values which don't appear in their specific files, as SRPawn.ini has many more lines than the other variations.

I'm making some educated guesses here, because I haven't actually tried editing each of these files individually to confirm that the effects are what we might reasonably expect based on their names and contents. However, I did try editing the file SRPawnInsane.ini with the intent of modifying FUBAR mode. I started by modifying the health values of the player character, Walker, and his two squad mates, Lugo and Adams. This is just a matter of finding the right m_defaultHealth values. There are several m_defaultHealth lines, each appearing in a separate section indicating which character's default health level is being modified. Here's a snippet of SRPawnInsane.ini:
[SRGame.YPawn_Walker]
m_defaultHealth=60.0

[SRGame.YGamePawn_Player]
m_damageModifierExecuting=0.3
m_damageModifierReviving=0.3

[SRGame.YPawn_Lugo]
m_defaultHealth=220.0

[SRGame.YPawn_Adams]
m_defaultHealth=220.0

[SRGame.YPawn_AdamsAlone]

[SRGame.YPawn_Enemy]
m_defaultHealth=155.0
m_chanceToGrantGrenadeToExecutor=0.2
m_vaporizeModifier=3.56
m_headExplodeModifier=1.52
When I found this, I vastly increased the m_defaultHealth values found under [SRGame.YPawn_Walker], [SRGame.YPawn_Lugo], and [SRGame.YPawn_Adams]. I was unsure if it would actually work, but when I started up the game and continued my FUBAR mode campaign, it was clear that the player character and his squad mates were all practically invincible. It seemed too easy but it actually worked.

There are a few other things to note in the snippet above:
  • The [SRGame.YGamePawn_Player] section has a couple of damage modifier values; based on the names, I assume these will alter the amount of damage which the player will take while performing execution moves on enemies and reviving squad mates. However, I haven't tried changing these yet, so I don't know whether they are positive or negative modifiers. Does setting them to 0.0 mean the player takes full damage or that the player takes no damage? Presumably it's one or the other. Either way, setting them to 1.0 probably does the opposite of whatever setting them to 0.0 does, because the fact that each value is currently set to 0.3 suggests that these are fractions of the normal amount of damage.
  • The [SRGame.YPawn_AdamsAlone] section in SRPawnInsane.ini is, in fact, empty. However, it's not empty in SRPawn.ini or SRPawnEasy.ini. In each of those files, this section contains another m_defaultHealth line, so it's safe to assume that we can add one here as well, if we want to. When placed in this section, m_defaultHealth probably modifies the amount of health that Adams has during a sequence in which he is separated from the player.
  • The [SRGame.YPawn_Enemy] section contains some very specific modifiers; you can probably guess what they do based on the names. The file SRPawn.ini has even more values, any of which could most likely be modified here in SRPawnInsane.ini as well. The section name might be a bit misleading, though, as it seems to pertain only to one type of enemy. There are other sections called [SRGame.YPawn_MediumEnemy], [SRGame.YPawn_EnemyMarauder], [SRGame.YPawn_EnemyElite], and so on.
I'm just trying to give you an idea of what can be done with these configuration files. As noted above, some of the .ini files are rather large, so I'm probably just scratching the surface of what can be modified here. I haven't tried making substantial modifications myself — but it looks like you could, in theory, fine-tune many aspects of the game to be exactly how you want them. If you don't like the fact that the player can take damage while reviving squad mates, change it. If you don't like the amount of health that a particular enemy has, change it. If you want enemies' heads to explode with every headshot from any weapon, you can probably make it happen. Whether anyone cares enough about this game to do any of this, however, is another matter entirely.

I only went as far as modifying the health of Walker, Lugo, and Adams — adding a few zeroes to each number, before the decimal of course — and the rest of the FUBAR campaign was a hilarious joke. I got to the end in a tiny fraction of the time it would have taken if I had played the game fairly, and it's probably the only way I would have been willing to get to the end, as my patience had run out. And, for the record, this did unlock the achievement for finishing the game on FUBAR difficulty. Modifying these configuration files does not disable achievements.

Therefore, those of you who actually take achievements seriously as an indicator of your skill level, or something, might want to avoid playing with these configuration files while doing anything which might unlock an achievement. Personally, as noted above, I don't really care — but I can understand how others might regret unlocking a tough achievement by cheating. If you're the kind of person who takes pride in achievements, unlocking one by modifying the game might leave a bad taste in your mouth.

The Case For More Games Being This Easy To Exploit


The encrypted configuration files used by the Windows version of the game actually can be decrypted, but I can't personally vouch for the tool used to do so. I didn't bother with it when I played the Windows version of the game, because I didn't want to cheat at this game badly enough to put up with the extra steps, let alone the mysterious executable. (I trust it a bit more now that I've found it on PC Gaming Wiki, but when I first became aware of the decryption tool, it was through a link on some random forum.)

The fact that the files are not encrypted in the Linux version of the game is probably an oversight — or maybe they just didn't care, or maybe they figured Linux users would find out how to break into the files anyway, or maybe they already knew about the decryption tool for the Windows version by the time they made the Linux version so they decided decryption was pointless. In any case, the fact that the files are encrypted in the Windows version is a clear indication that players were not meant to mess with these files.

But why not?

Cheating in multiplayer games is not okay, because it spoils the experience for other players, hence the existence of anti-cheat measures in multiplayer games. When it comes to single-player games, though, I don't see why we shouldn't be able to do whatever we want with a game that we bought. Many single-player games are made to be (or just are) easily modifiable; Skyrim, for example, is famous for community-made mods. Other single-player games, however, are made to be (or just are) very difficult to modify, as the Windows version of Spec Ops: The Line would be if nobody had figured out how to decrypt its files.

It's almost a shame that a game like Spec Ops: The Line, which is considered by many to be thoroughly mediocre, happens to be one of the games in which so much of the configuration is exposed to players through plaintext or easily decrypted files. A lot of games expose graphical settings not found in-game via configuration files, but in my experience, the ability to change the gameplay this way is rare. I wish I could so easily make similar modifications to games like Alan Wake, not because they're hard and I need to cheat, but because it would be fun. I'd actually like to make Alan Wake harder. Unfortunately, it's not an easily modifiable game.

Achievements are a possible reason that a game's developers might not want players to have unmitigated access to configuration values like player health. Some people take achievements seriously, especially rare achievements which are difficult to unlock; the perceived value of such an achievement, for players able to unlock it through skill and perseverance, is lessened when someone like me unapologetically cheats to unlock it by modifying configuration values.

But just as developers can program a game to disable achievements when built-in cheat codes are activated, they could also program a game to disable achievements when some deliberately exposed configuration file differs from the intended defaults, as verified by a checksum or whatever. I guess I'm advocating for games to offer the same level of easy modification as Spec Ops: The Line, if not more, but on purpose instead of by accident.

Some developers release powerful tools for modding their games, which is great. Changing a configuration file is also great, though, especially for players who aren't going to bother learning how to use whatever modding tools exist. My philosophy as a software developer is that hard-coding arbitrary numbers is bad and everything which reasonably could be configurable should be configurable, and maybe that's far easier said than done when it comes to games — I'm a software developer, not a game developer — but I have a feeling that most games hide configuration from players on purpose, and doing this just to prevent a human from cheating against a computer is silly. The ability to cheat is not going to ruin a game for anyone with any self-control.

I'm also a big fan of games having plaintext save files, for similar reasons. I've played a few, and although I've rarely bothered to skip ahead or otherwise cheat by editing their save files, knowing that I had the option was nice. Save editing is probably hard to detect, so I don't expect it from games whose developers want achievements to mean something — but as with all forms of unintended cheating, my selfish take on the subject is that I should be able to cheat to unlock achievements, and also, deal with it.

Sorry for making the global achievement statistics for Spec Ops: The Line slightly less accurate though, I guess.

Wednesday, September 5, 2012

Perfectionism: No Fun Allowed

I've always been a perfectionist. If I can't do something right, I don't like to do it; when I attempt any kind of work, I obsess over the details until it's just right.

I'm still not sure whether this is a good thing.

In the context of work and school, it translates to effort and dedication, but more often than not, it also slows me down. Sure, it helped me impress my art teacher in high school when most of the other students couldn't give less of a damn, and it earned me some nice grades elsewhere because I wasn't content to turn in half-assed work. Unfortunately, I think, it seems to have gotten a lot worse over the years. By the time I was (briefly) studying physics in graduate school, I found myself wasting precious time writing long solutions to complex problem sets neatly instead of getting them done quickly. As a result, I slept too little and stressed too much.

In the context of video games, my perfectionist tendencies make me a so-called completionist. If I care at all about the game I'm playing, I have a burning desire to collect every item, unlock every achievement, kill every enemy, find every secret, complete every side-quest, or get the highest possible rating on every level.

The Dangers of Completionism


When I played Metroid Prime — a fantastic game, by the way — I couldn't resist picking up every single missile expansion and energy tank. Maybe I wouldn't have cared if not for the way the game kept track of these things and displayed them as a completion percentage, taunting the mildly obsessive among us. Getting to the end of the game and seeing anything less than 100% felt to me like a minor failure. Of course, missile expansions and energy tanks are pretty useful, so the satisfaction of truly "finishing" the game wasn't the only motivation for finding them. I have no reasonable excuse, however, for scanning every creature, every item, and every bit of Pirate Data and Chozo Lore to fill up the in-game logbook. My only reward for doing so, in the end, was access to a couple of unlockable art galleries. But it wasn't about concept art; it was about not leaving things unfinished.

Only afterwards did I realize that I would have enjoyed the game a lot more if I didn't fixate on finding every little secret. I can't even go back to the game now, because I made myself sick of it.

Games like Metroid Prime are a nightmare for completionists, but we play them anyway because we're all masochists. The really terrible part is that setting aside the carefree enjoyment of the game for the sake of a cruel meta-game in which you pick up a hundred hidden items really isn't as bad as it gets. (With the help of a good walkthrough, if you're not too proud to use it, you can complete even the most tedious item-hunting quest with relative ease.) Being a completionist becomes a real problem when the additional challenges we choose (or need) to undertake are so difficult that untold hours are swallowed up by dozens of consecutive, futile attempts with no discernible progress. In the time I wasted getting gold medals on every level of Rogue Leader and its sequel Rebel Strike, I could have played all the way through several other games. I guess the benefit here is that being a perfectionist saved me some money; I got more time out of these games than anyone ever should.

The Need to Achieve


And what of achievements? I'm no fan, and it's not just because of my wacky theory that they're partly responsible for the decline of cheat codes in single-player games. I think achievements cheapen the sense of accomplishment we're supposed to feel when we do well in a game. A lot of developers have fallen into the habit of giving the player an achievement for every little task, like finishing the first level, or killing ten bad guys, or essentially — in rare and truly embarrassing cases — starting the game. (Only sometimes is this actually meant to be amusing.)

In my opinion, anything that necessarily happens during the course of a normal play-through should never be worth an achievement, but developers so often disagree. In Portal 2, fourteen of the achievements (pictured right) are unlocked simply by playing the single-player campaign. Obviously, there are other achievements in the game, but the player shouldn't need to be periodically congratulated for making regular progress.

Achievements, when done correctly, present extra challenges to the player. But even then, achievements teach players that nothing is worth doing unless there's a prize. We're not encouraged to make our own fun and set our own goals; we're encouraged to complete an arbitrary set of tasks, which may or may not include completing the game itself, attempting the harder difficulty settings, or doing anything genuinely entertaining.

But despite my philosophical objections to the idea of achievement hunting, I can't resist, especially if I only have a few achievements left after I beat the game. Unfortunately, those last few achievements tend to be the hard ones. But hey, you can't just leave the game 99% complete. You can't just leave one achievement locked. Right? Seriously, I can't be the only person who finds this absolutely intolerable.

After beating Trine, I spent far too long attempting a flawless run through the last level on the hardest difficulty to get a surprisingly difficult achievement. (I thought this game was casual!) When I played Alan Wake, I never would have bothered collecting a hundred (useless) coffee thermoses scattered throughout the game if there weren't an achievement for doing so. I even carried that damned garden gnome all the way through Half-Life 2: Episode Two. (Please kill me.)


Too Much of a Bad Thing


But even I have limits; a few of the achievements in Torchlight, for example, are just too hard or too much of a grind. They're far from impossible to get, but the game will stop being fun long before you get them, and if you play for the achievements, you'll become suicidal in no time. (Big fans of the game might disagree; most of the achievements will be unlocked naturally if you're okay with playing the game for 150+ hours, but catching 1000 fish just isn't worth anyone's time.)

Similarly, I have no interest in finding every flag in Assassin's Creed, or every feather in Assassin's Creed II, and I don't know why anyone ever would. Even as a hopeless completionist, I can usually tell when attaining 100% completion in a game will lead to more frustration than satisfaction. There's already so much (repetitive) stuff to do in the Assassin's Creed games that I can't imagine why they thought it would be a good idea to throw in a few hundred useless collectibles as well.

Just to bother me, I'm sure.

Collectible items and other tertiary objectives can be good for replay value, but when they extend the playtime beyond the point where the game loses all appeal and becomes a chore — when even a completionist such as myself doesn't want to try — it's just bad game design.

Self-Imposed Perfection


Being a perfectionist doesn't just mean being a completionist. My first play-through of Deus Ex took twice as long as it should have taken, but only because I developed a terrible habit of loading quicksaves constantly, not to avoid dying but to avoid wasting lockpicks, multitools, medkits, and ammo. If I missed a few times while trying to shoot a guy in the face, I couldn't just roll with it and keep going. I went back and tried again. If I picked open a lock and there was nothing useful behind that door, I loaded my save. (And of course, at the end of the game, my inventory was full of stuff I never got to use, but item hoarding is another issue entirely.)

My tendency to needlessly replay sections of a game is probably worst when friendly NPCs can be killed by the enemies. Even if their survival doesn't affect me in the slightest, I often feel the need to keep them alive, and I'm more than willing to reload a save if even a single one of them die. (This used to happen a lot when I played S.T.A.L.K.E.R.: Shadow of Chernobyl, but eventually I learned that it's sometimes best to save my ammo, let my fellow stalkers die, and scavenge their bodies afterwards. Such is life in the Zone.)

Reloading a save when you haven't lost might seem strange, depending on your play style, but some games encourage this type of behavior with optional objectives that are easily botched. Take the Hitman series, for example. You could choose to walk into nearly any mission with a big gun and simply shoot up the place, but the highest ratings are reserved for players who never get seen, fire no unnecessary shots, and kill no one but the primary targets.


This usually isn't easy, because save scumming isn't an option. The first Hitman game doesn't allow saves in mid-level, and the sequels only allow a certain number of saves per mission, depending on difficulty level. This makes perfecting a mission even more painful, and in my opinion, it's another example of bad game design. While I can see why they would want to prevent players from abusing the save system (thereby adding some real difficulty and making the game more "hardcore"), this is kind of a cruel thing to do with such a slow-paced game that involves so much trial-and-error. If you don't save often enough, you might end up repeating several minutes of sneaking at a snail's pace to get back to where you were.

Somehow, I did manage to master every mission in the second and third games, but I don't recommend it. Having to kill a guy and dispose of his body on the fly because he saw you picking a lock is fun, but in the interest of earning the highest rating, I always had to start over instead. When you try to play Hitman perfectly, it's tedious and time-consuming, and essentially requires you to memorize each map. No fun allowed.

Fixing Bad Habits


As a result of all this, my extensive backlog of unfinished games is only slightly longer than the list of games I've been meaning to replay without hitting the quickload button and without going off-course to satisfy my obsessive completion disorder. (The S.T.A.L.K.E.R. games are near the top of that list, but I'd also like to replay those when I get a better computer, which isn't happening any time soon.) Games are more fun when they're played at a natural pace, and I wish it weren't so hard for me to ignore the little distractions along the way.

The best advice I can give to fellow perfectionists, after some soul searching of my own, is the following:

1) Get a screwdriver and pry the quickload button off of your keyboard. Alternatively, I suppose, you could simply go to the control settings and unmap the quickload function. If you can't unmap it, just remap it to a key on the far side of the keyboard, and then promptly forget which key that is. Quicksaving constantly is fine — I won't judge you — but you shouldn't be reloading a save unless you die.

2) Play through the game as quickly as you can; do only the bare minimum. This is normally something I'd discourage, because I believe that games should be enjoyed, not rushed. But if you're getting bored with games before you finish them because you're spending so much time trying to do every side-quest or collect all the items, stop it. Start over. Enjoy the game at its intended pace before you ruin it by attempting a frustrating scavenger hunt. These things are there for your second play-through, and if the game isn't good enough to warrant a second play-through, the optional stuff isn't worth your time.

3) Don't read the list of achievements before you play the game. If you read them, you'll try to get them. Achievement hunting is for replay value, and if it's your first priority, you need to rethink your entire outlook on life. Again, if the game isn't good enough to warrant a second play-through, the achievements aren't worth your time.

Wednesday, August 15, 2012

What Ever Happened to Cheat Codes?

If you've been playing video games for more than a few years, you almost surely remember a time when cheating was a standard feature a lot of games. I'm not referring, of course, to the kind of cheating that gets you permanently banned from your favorite server — the kind that requires exploitation of programming bugs or "hacking" of the software — but rather to the use of built-in cheat codes that developers would include in their games to spice things up and to assist the less gifted among us.

You might even know a few of them after all these years. If you ever played Doom, then IDDQD and IDKFA should be burned permanently into your brain. While invulnerability and instant access to the game's entire arsenal of weapons have the potential to suck all of the fun out of any demon-slaying adventure, the developers trusted us to use these codes responsibly, whether that meant using them only in dire circumstances, only after completing the game without them, or never at all. Some players, I'm sure, preferred instead to use them all the time, but that was okay as long as they had fun doing it.

It wasn't very long ago that the inclusion of cheat codes was the norm, but at some point, they gradually disappeared. Although I have nothing but anecdotal evidence to back it up, it seems to me that cheat codes faded out of common existence around the same time that "achievements" became ubiquitous and downloadable content (DLC) became the industry's choice method of squeezing more money out of their customers. There isn't necessarily a causal relationship here, but the disappearance of built-in cheats does seem to coincide with a more general transformation in the way games are made and marketed.

There were cheat codes in the 2005 horror/shooter game F.E.A.R. — one of my favorite games of the past ten years, although I don't like to admit it, since the plot went from mediocre to insufferably bad after the first installment. The same cheats worked in both expansion packs, Extraction Point and Perseus Mandate, released in 2006 and 2007, respectively. But the first true sequel, the 2009 game F.E.A.R. 2: Project Origin, was devoid of cheat codes. Want to be invincible? Too bad.

Instead of cheats, the game had a few dozen achievements to unlock (which, like most achievements, don't really give you anything except a little "congratulations" for performing various in-game tasks which usually aren't very challenging). This, along with the inexplicable removal of several useful features (like dedicated multiplayer servers and the ability to lean around corners) as well as the implementation of digital rights management (which is arguably far more intrusive than a simple product key and disc check), makes the transition from F.E.A.R. to F.E.A.R. 2 somewhat representative, in my eyes, of how video games have changed as a whole.

While achievements are by no means a logical replacement for cheat codes, they have filled the spaces formerly occupied by cheats on websites like GameFAQs. Look up any recent game and go to the "cheats" tab, and you'll likely see a list of trophies, achievements, or other unlockables instead. The page will likely tell you how to unlock each one, but this is information which can usually be accessed in-game. It doesn't make a whole lot of sense to list achievements on a cheat site, but achievements must have seemed like a logical replacement for the cheat codes that disappeared around the time that these non-functional "unlockables" emerged.

Of course, cheat codes and unlockables are not mutually exclusive features; many games have had both, and some games (like the Nintendo 64 shooters GoldenEye 007 and Perfect Dark) combined the two concepts by including cheats that had to be earned, not simply looked up and punched in. However, the trend in modern games is to forgo cheats entirely in favor of unlockables, which are more often achievements than anything useful. If a game does have achievements, cheats are usually absent, and vice versa.

I won't say this is because cheating makes the achievements too easy to get — after all, if the developers want to preserve some kind of competitiveness or genuine challenge in achievement hunting, they can just program their games to lock achievements if cheats are activated, as is done in Half-Life 2 — but developers who put achievements in their games likely care a bit too much about controlling the player's experience. They care about "challenging" and "rewarding" the player (which is unfortunate because the gameplay is rarely challenging and victory is rarely rewarding). They don't care nearly enough about letting the player have fun in his or her own way.

But I can't lay all the blame on developers. They're not alone in their belief that cheats can ruin a game, even though the player is free to decide not to use them. A lot of self-proclaimed "hardcore gamers" share this sentiment. I do not.

The fact is that cheats aren't always about gaining an advantage or winning a game with minimal effort. When cheat codes were commonplace, it wasn't unusual for developers to include cheats that had little or no effect on a game's difficulty. These cheats existed either for laughs (see "Paintball Mode" in GoldenEye 007 and Perfect Dark) or to alter the rules of the game in fun ways that didn't necessarily benefit the player (like the reduced gravity cheat in Vigilante 8), not because we needed them to win. Even when they did have an obvious effect on difficulty, cheats in single-player games were used primarily for screwing around rather than getting to the end of the game as quickly as possible. For players with an ounce of restraint and self-control, cheats add replay value rather than subtract it.

Unfortunately, cheats are unlikely to make a big comeback. Today's developers don't seem to have any interest in hiding secrets in their games, and if they think of anything that adds extra value to their product, they'll most often try to sell it to you on the side. Usually, this means offering "additional" features (such as levels, items, and playable characters) as DLC with a price tag, even when these things are already available at the time of the game's launch and could have been included in the game itself. Occasionally, however, a developer actually has the balls to try to charge you for cheats, whether they're sold as DLC (such as the "Invincible Pack" for Saints Row: The Third) or as unique codes that unlock features already included in the game's files (as in Clive Barker's Jericho and some other games published by Codemasters).

From the back cover of the Clive Barker's Jericho manual. I have no idea if the hotline still works (nor do I want to try it), but it seems that the web page doesn't even exist anymore. The small print at the bottom of the page [not pictured] clarifies that codes obtained via the hotline would cost only what they charged for the call, but that getting codes online would require a "small" payment by credit card or PayPal.

This is pretty horrifying, but the success of the microtransaction business model applied to video games — most prominently to "free-to-play" massively multiplayer online games — has shown that a staggering number of people are essentially willing to pay to win. Since it works for multiplayer, it's not so crazy to think people might be willing to pay extra to gain an advantage in a single-player game as well.

I still think selling cheats is insanely dumb, but people are still going to buy them, just like they'll blindly pay for everything else the publishers take out of the finished product at the last minute and set aside as "DLC" for the purpose of grabbing more cash. (Imagine buying a movie ticket only to find out that the last ten minutes of the film will cost you an extra $3.95. Now imagine all of the people who don't boycott that movie. My point is that day-one DLC is evil and consumers are stupid.)

Since the current attitude of big video game publishers is that anything non-essential should be sold off as "extra" content, cheats might regain some real popularity in the form of DLC, but it seems unlikely. Cheat codes clearly went out of style for unrelated reasons, perhaps for the same reasons that we haven't already seen every major developer jumping at the chance to make some extra money by selling invincibility and extra ammo. Perhaps the most obvious problem with cheat codes is that most video games have gotten so easy that developers think we don't need cheats at all. Again, however, I should point out that it's not about need; it's about fun.

Personally, I'd like it if things would go back to the way they were before. Oh, sure, everyone feels that way, especially the nostalgic, aging video game enthusiasts such as myself, but I have no desire to hold the industry back. I realize that most of the changes made by the industry in recent years were, successfully or not, made for the sake of progress. But cheat codes only have the potential to make a game better — never worse — and the fact that they've almost completely been taken away can only be seen as a step backward.