Showing posts with label quake. Show all posts
Showing posts with label quake. Show all posts

Saturday, January 2, 2021

Adventures in Old-School Gaming on Linux Mint 20

I had some free time recently, so I finally did a clean install of Linux Mint 20 on my PC, which seemed preferable to attempting an upgrade from Linux Mint 19.3. As usual, after getting all of the basic programs installed, I started reinstalling some essential games: Wolfenstein 3D, Doom, etc.

I did things a bit differently from last time — better, and less hacky, I hope — which required educating myself a bit. I also found a bug which doesn't seem to have been documented anywhere, and I honestly cannot be bothered to figure out where or how to submit a bug report, so I'm just going to document it here. Maybe it will help someone.

ECWolf and GZDoom

As I had done before, I started by installing some source ports: ECWolf for Wolfenstein 3D and Wolfenstein 3D: Spear of Destiny; and GZDoom for The Ultimate Doom, Doom II: Hell on Earth, Final Doom, Heretic: Shadow of the Serpent Riders, Hexen: Beyond Heretic, and Hexen: Deathkings of the Dark Citadel. Unfortunately, these source ports are not provided in Linux Mint 20's default package repository. Perhaps the easiest way to get ECWolf and GZDoom is to download .deb files from here and here respectively, but for the sake of automatic updates, I think it's best to grab them from the DRD Team repository:

wget -O- https://debian.drdteam.org/drdteam.gpg | sudo apt-key add -
sudo apt-add-repository 'deb https://debian.drdteam.org/ stable multiverse'
sudo apt-get update
sudo apt install ecwolf gzdoom

These don't actually come with the game files, though, so I downloaded the relevant games from Steam. (Although they could easily be acquired by... other means... they happen to be in my account thanks to bundles and gifts, and it's just the easiest way for me to get the data.) The Steam versions of the aforementioned games run in DOSBox by default, and the classic Doom games now come with the Unity ports as mentioned in an earlier post, but I would rather take the files provided by Steam and use them with Linux-native source ports.

Manual file management

What I did next, I now realize you probably shouldn't do. I manually copied the necessary game data into ~/.config/ecwolf/ and ~/.config/gzdoom/ as appropriate:

cp -t ~/.config/ecwolf/ -- \
    ~/.steam/steam/steamapps/common/Wolfenstein\ 3D/base/*.WL6 \
    ~/.steam/steam/steamapps/common/Spear\ of\ Destiny/base/*.SOD \
    ~/.steam/steam/steamapps/common/Spear\ of\ Destiny/base/*.SD1 \
    ~/.steam/steam/steamapps/common/Spear\ of\ Destiny/base/*.SD2 \
    ~/.steam/steam/steamapps/common/Spear\ of\ Destiny/base/*.SD3
for sd1 in ~/.config/ecwolf/*.SD1; do mv -f $sd1 $(echo $sd1 | sed s/SD1/SOD/); done
cp -t ~/.config/gzdoom/ -- \
    ~/.steam/steam/steamapps/common/Ultimate\ Doom/base/Doom.WAD \
    ~/.steam/steam/steamapps/common/Doom\ 2/base/Doom2.WAD \
    ~/.steam/steam/steamapps/common/Final\ Doom/base/PLUTONIA.WAD \
    ~/.steam/steam/steamapps/common/Final\ Doom/base/TNT.WAD \
    ~/.steam/steam/steamapps/common/Heretic\ Shadow\ of\ the\ Serpent\ Riders/base/HERETIC.WAD \
    ~/.steam/steam/steamapps/common/Hexen/base/HEXEN.WAD \
    ~/.steam/steam/steamapps/common/Hexen\ Deathkings\ of\ the\ Dark\ Citadel/base/HEXDD.WAD

For the most part, this is pretty straightforward, but things get a bit weird when we look at the Wolfenstein 3D: Spear of Destiny files. That ugly file renaming in the for loop ensures that the *.SD1 files that come with the Steam version of Spear of Destiny have the proper *.SOD names. I think Steam has these *.SD1 files because, when running the game with DOSBox, it needs to rename the *.SD1, *.SD2, or *.SD3 files to the appropriate *.SOD names depending on which mission pack is being played. ECWolf, meanwhile, just wants the Mission 2: Return to Danger and Mission 3: Ultimate Challenge files to be named with *.SD2 and *.SD3 respectively. At least, I think that's how it works. In any case, the manual renaming above resulted in ECWolf running each mission pack correcty with no complaints. So this manual file copying and renaming is an option if you just want to run the Steam versions of all these games with ECWolf and GZDoom.

However, I ended up undoing all of this manual file management in favor of experimenting with a program called game-data-packager, which took some work to understand but seems to work quite nicely most of the time.

Game Data Packager

I became aware of game-data-packager not because I went looking for such a tool, but simply because it was installed automatically as a dependency when I installed some Linux-native engines for Hexen II and the Quake trilogy (more on that later). If you don't already have it installed automatically for similar reasons, you should be able to install it on Linux Mint 20 as follows:

sudo apt install game-data-packager

Once installed, the game-data-packager program can be used to identify the required files for various games, and install them for use with various source ports.

The basic syntax is

game-data-packager [-d OUTDIR] [-i] GAME [PATH ...]

where GAME is the name of a supported game, and PATH tells the program where to look for the game's files (if it can't find them on its own). The game's files are packaged into one or more .deb files, which are written to the current working directory by default but can be sent to some other directory OUTDIR using the optional -d argument. The optional -i flag tells game-data-packager to go ahead and install the new .deb file(s) using the system's package manager. I think it's safe to delete the .deb files after installation unless you want to keep them. At this point, however, you'll need to use sudo apt remove with the name of the locally installed package (e.g. sudo apt remove doom-wad) in order to uninstall the game data from your system.

When executed with the -i flag, game-data-packager also attempts to install dependencies, including source ports and native engines, if they're not already installed. Basically, it should give you everything you need in order to play the game, as long as you supply the copyrighted data.

Wolfenstein 3D

For Wolfenstein 3D and Spear of Destiny, my usage of game-data-packager was as follows:

mkdir -p ~/deb/
game-data-packager -d ~/deb/ -i wolf3d
game-data-packager -d ~/deb/ -i spear-of-destiny

Additional positional arguments would specify folders in which to search for each game's files, but game-data-packager is smart enough to look in Steam's directories. Since I had already downloaded the games via Steam, the above commands were enough to locate the games on my system, package the necessary data into .deb files (which I saved to a ~/deb/ folder I had created), and install the games from those .deb files. In this case, the Wolfenstein 3D and Spear of Destiny data files get installed to /usr/share/games/wolf3d/. The package manager tracks these games' data as the locally installed packages wolf3d-v14-id-data, spear-of-destiny-data, spear-of-destiny-mission1-data, spear-of-destiny-mission2-data, and spear-of-destiny-mission3-data.

However, it assumes you want to use Wolf4SDL for Wolfenstein 3D; it did not care that I already had ECWolf installed, so it installed Wolf4SDL for me. If you want to use Wolf4SDL, you're in luck. If you're like me and you want to use ECWolf instead, you can either edit the BaseDataPaths field in ~/.config/ecwolf/ecwolf.cfg to include /usr/share/games/wolf3d/, or you can make some links:

ln -s -t ~/.config/ecwolf/ -- \
    /usr/share/games/wolf3d/*.wl6 /usr/share/games/wolf3d/*.sod \
    /usr/share/games/wolf3d/*.sd2 /usr/share/games/wolf3d/*.sd3

This got ECWolf to see all of the files it needs on my system. Wolf4SDL is still installed, which is a bit redundant, but I don't mind.

Doom

Next I used game-data-packager to package up the classic Doom games — The Ultimate Doom, Doom II: Hell on Earth, Master Levels for Doom II, and Final Doom — which I had also downloaded via Steam:

mkdir -p ~/deb/
game-data-packager -d ~/deb/ -i doom
game-data-packager -d ~/deb/ -i doom2
game-data-packager -d ~/deb/ -i final-doom

This installs all of the relevant .wad files to /usr/share/games/doom/, tracked by the local packages doom-wad, doom2-wad, doom2-masterlevels-wad, plutonia-wad, and tnt-wad. As with the Wolfenstein games, game-data-packager also automatically provided me with a source port, Chocolate Doom. I probably won't it use very much, because I already have GZDoom installed, but it doesn't hurt. Meanwhile, no tweaks were required to get GZDoom to find the data files; its default configuration included /usr/share/games/doom/ in the search path.

Master Levels

In addition to Chocolate Doom, the automatically installed dependencies also included a program called doom2-masterlevels which provides a simple GUI for selecting maps from the Master Levels pack. (Note that the command ending in doom2, above, took care of packaging the Master Levels for Doom II data as well as the Doom II: Hell on Earth data.) Here's where things get weird, though: I didn't even notice this doom2-masterlevels program until I found it by accident. There should have been a shortcut created in the Linux Mint menu, but it wasn't there. This is because the desktop entry file at /usr/share/applications/doom2-masterlevels.desktop contained a mistake:

TryExec=/usr/share/games/doom2-masterlevels-tryexec

The file referenced in that TryExec field, /usr/share/games/doom2-masterlevels-tryexec, does not exist. As a result, the entry was ignored and did not show up in the menu. However, the file /usr/share/games/doom/doom2-masterlevels-tryexec does exist. This discrepancy in the .desktop file is obviously a bug. I honestly cannot be bothered to figure out how to report this bug, to whom it should be reported, or whether it has perhaps already been fixed in a newer version of game-data-packager than my package manager provides. (Linux Mint does not always have the latest version of everything.) However, it's easy enough to fix the desktop file by changing the TryExec line:

TryExec=/usr/share/games/doom/doom2-masterlevels-tryexec

If you don't want to use a text editor, this can also be done from the command line using sed:

sed s/\\/usr\\/share\\/games\\doom2-masterlevels-tryexec/\\/usr\\/share\\/games\\doom\\/doom2-masterlevels-tryexec/ -i /usr/share/applications/doom2-masterlevels.desktop

With that fixed, the "Doom 2: Master Levels" entry now shows up in the menu.

Heretic and Hexen

I ran into some more minor trouble when I tried to package the Heretic and Hexen files. As with the previous games, I had downloaded them from Steam and tried running game-data-packager with the -i, and it failed with errors about engines not being available. Specifically, for Heretic:

ERROR:game_data_packager.build:Engine "chocolate-heretic" is not (yet) available, aborting

And for Hexen:

ERROR:game_data_packager.build:Engine "chocolate-hexen" is not (yet) available, aborting

However, these errors are nonsense. When the Chocolate Doom source port was automatically installed to /usr/games/chocolate-doom upon packaging and installation of the classic Doom games, the executables /usr/games/chocolate-heretic and /usr/games/chocolate-hexen were installed as well. These actually appear to be Chocolate Doom under the hood, but I quickly confirmed that they were able to run Heretic and Hexen respectively if executed with the appropriate -iwad arguments. Perhaps game-data-packager gets confused because chocolate-heretic and chocolate-hexen are virtual packages. In any case, to get past these bogus errors, we can omit the -i flags so that game-data-packager just creates the .deb files, and then install from those .deb files using apt:

mkdir -p ~/deb/
game-data-packager -d ~/deb/ heretic
game-data-packager -d ~/deb/ hexen
sudo apt install ~/deb/heretic-wad_64_all.deb
sudo apt install ~/deb/hexen-wad_64_all.deb
sudo apt install ~/deb/hexen-deathkings-wad_64_all.deb

I've probably discovered an actual bug here as well, but again, I really don't know how and to whom it should be formally reported, and the workaround was easy enough.

Hexen II

Hexen II is playable on Linux with the Hammer of Thyrion source port, which is called uhexen2 in Linux Mint 20's package repository. Hammer of Thyrion recognizes game data placed in ~/.hexen2/data1/, so we can copy the appropriate .pak files into that directory manually after installing uhexen2. Alternatively, we can use game-data-packager to install the files to /usr/share/games/hexen2/data1/, tracked by the local package hexen2-data. Again, I had downloaded Hexen II via Steam, so I didn't need to tell game-data-packager where to look for the files:

mkdir -p ~/deb
game-data-packager -d ~/deb/ -i hexen2

I think this would have resulted in the automatic installation of uhexen2, if not for the fact that I had already installed it beforehand using apt:

sudo apt install uhexen2

So that probably could have been skipped.

Quake

Linux Mint 20 also provides native engines for Quake, Quake II, and Quake III Arena, and all of these games are supported by game-data-packager. All three games are also on Steam, but I don't have the Steam versions. I have them on a set of CDs, in a box set called The Ultimate Quake, which I had purchased before I even created a Steam account. Fortunately, my outdated PC still has an optical disc drive, and game-data-packager can read from CDs (although it apparently needs to be told explicitly where to look).

The funny thing about Quake and Quake II is that the discs contain both game data and CD audio. In other words, each CD-ROM is also a music CD. Not surprisingly, game-data-packager creates separate packages for game data and music, hence the separate game-data-packager commands below. (Maybe the game files and music packages for a game can be created with a single command, but I used separate commands anyway because I don't think combining them would make things less confusing.) Meanwhile, ripping the CD audio required some extra dependencies which were not made known to me until game-data-packager started complaining that it could not find cdparanoia or oggenc. I assume these were not automatically installed as required dependencies because they are only sometimes needed. In any case, installing cdparanoia is trivial because that's the exact package name, and oggenc is made available for Linux Mint 20 in the package vorbis-tools, so I installed both:

sudo apt install cdparanoia vorbis-tools

Now, to install Quake, I ran the following commands with the CD inserted:

mkdir -p ~/deb
game-data-packager -d ~/deb/ -i quake /media/michael/Winquake/
game-data-packager -d ~/deb/ -i quake -p quake-music /dev/cdrom
game-data-packager -d ~/deb/ -i quake -p quake-aopfm

In the command to package and install the game data, /media/michael/Winquake/ is the location to which Linux Mint automatically mounted the CD when it was inserted, so that part will vary. The game's music doesn't show up in /media/michael/Winquake/ (because, I guess, that's just not how CD audio works), so in the command to rip the music, I used /dev/cdrom (which is a reference to the optical disc drive itself, and is actually a symbolic link to /dev/sr0). The last command installs the package quake-aopfm which is a free expansion. I can't vouch for whether this expansion is any good, because I haven't played it yet — but I noticed after installing the base game that a shortcut for the expansion had already been created in my menu, and that expansion shortcut wouldn't work without the expansion's package installed, so I figured I might as well install it instead of deleting the broken shortcut.

Installing Quake II was similar. I swapped out the Quake CD for my Quake II CD and ran the following:

mkdir -p ~/deb
game-data-packager -d ~/deb/ -i quake2 /media/michael/Quake2/
game-data-packager -d ~/deb/ -i quake2 -p quake2-music /dev/cdrom

Finally, Quake III Arena had no CD audio portion on the disc, so it required only this:

mkdir -p ~/deb
game-data-packager -d ~/deb/ -i quake3 /media/michael/Quake3/

I think these commands would have triggered automatic installations of these games' native engines, but I had already installed them manually beforehand:

sudo apt install quake quake2 quake3

Other Notes

I think much of what's written above could also be applied to other versions of Linux Mint, but I've been clear about the fact that I'm using Linux Mint 20 just in case I'm wrong about that. Meanwhile, as of the time of this post, I'm using gzdoom version 4.5.0, ecwolf version 1.3.3, game-data-packager version 64, chocolate-doom version 3.0.0-5, and uhexen version 1.5.9+dfsg-1.

Also note that game-data-packager gave me some warnings about being unable to unpack certain files due to missing programs, so I installed a couple of additional packages just to make the warnings shut up:

sudo apt install innoextract lhasa

However, these don't appear to be strictly necessary, and I'm not sure if it really made a difference. At least for the Doom games, game-data-packager was already finding all of the data needed for playing the games, despite the warnings.

Thursday, March 16, 2017

Losing Forever and Loving It


Lately, I've been playing a game called Devil Daggers, released by independent developer Sorath in 2016. I've been playing it a lot, which is interesting because it belongs simultaneously to several subsets of video games which I generally try to avoid:
  1. It's an endless game with no win condition. You play until you lose, and your score is the amount of time for which you managed to avoid losing. You can never really "finish" Devil Daggers; you can only decide that you're happy enough with your high score (or frustrated enough with the game itself) to stop playing. I like games that have definitive endings. I like to know when I'm done. Simply put, I like to beat games, but I'll never beat this one.
  2. The game is stupidly difficult. I'm almost 30 years old and I have a full-time job with a long commute and I'm getting married this year and I'll probably have children soon, and I don't have time to get good at stupidly difficult games. The only real measures of success in Devil Daggers are an achievement for surviving 500 seconds (which I'll never unlock) and placement in a global leaderboard (which will never have my name at the top). As of the last time I checked, only 49 people in the world were high enough on the leaderboard to have unlocked that singular achievement, and I very much doubt that I'll ever be among the top 50 players, no matter how much I practice.
  3. Despite being single-player, Devil Daggers is competitive (by way of that leaderboard), and I generally don't like competitive games for the same reason that I don't like stupidly difficult games.
  4. Devil Daggers is stressful. Each time I set a new personal record, my heart is pounding and my hands are shaking at the end. It's usually why my best runs come to an end. The game requires precise mouse control and shaking hands are a death sentence. This is not a relaxing experience. I wonder what it's doing to my blood pressure.
I suppose most of this can be summed up as follows: Devil Daggers makes me feel really bad at video games.

This isn't to say that I'm actually, factually, objectively bad at the game. Judging by the numbers, I think I've done rather well, reaching around 315 seconds on my best attempt which, at the time, nearly put me in the top 1,000 players. (To be more precise, I was ranked in the 1,040s, but a lot of players surpassed me while I was taking a break to play Dishonored and some other games, so presently I'm down in the 1,190s.) Then again, from where I stand, things look bleak. I've only gotten good enough to appreciate how much better the best players are, and how much better I would need to be in order to reach that 500-second goal. Devil Daggers is so incredibly hard that I still haven't survived long enough to fight every type of enemy, despite having gotten farther than the vast majority of players (who are numbered at over 100,000 according to the global leaderboard).

Maybe this makes me a sore loser, but I don't really like the idea of losing over and over again for eternity, with no end in sight (even if we consider 500 seconds to be a win state). Furthermore, I've never been a fan of having my scores, good or bad, permanently on display for the world to see. It seems that Devil Daggers is eating up an unusual amount of my time for a game that makes me feel like such a hopeless loser, especially considering I have an absurd number of games which I still haven't played and not enough time to play them. I really shouldn't be spending all my time on one frustrating game I'll never beat. So why am I doing it?

Because I'm addicted. Because, despite being exactly the kind of thing that drives me nuts, Devil Daggers is just a really good game.

It's also a simple game: There's one level. The same enemies always appear at the same times. You shoot them until you die and then you play again. There is no story. There are no characters. The faux-retro graphics are stylish as hell but are, of course, unlikely to impress anyone who doesn't have any nostalgia for that kind of thing. Setting aside the difficulty which extends the playtime via endless retries after infinite losses, there isn't much content. The best times, held by players whose skill level seems almost superhuman, are only around 1000 seconds. New content ends long before that time, when the "final boss" is defeated and enemy spawn patterns seem to enter a loop. It wouldn't be unfair to say that the length of the game itself, not counting countless replays, is only a few minutes.

None of this is meant as a criticism, though. Small games are okay if the price is right, and Devil Daggers is only $4.99, which seems appropriate. I got it from a $1.00 bundle, because I watch out for PC game deals like a hawk, but I wouldn't be disappointed if I had paid the full price.

Impatient players will conclude after a few attempts that Devil Daggers is merely a cheap novelty to be played for a few minutes and tossed aside, or that it's more of a tech demo for Sorath's brand of old-school pixel graphics than a carefully designed game. It's understandable that one might not see any value in the game after a few rounds of losing almost immediately. Until you get the hang of the basics, you'll die just because your reflexes weren't fast enough, or because your aim wasn't precise enough, or because you weren't looking in the right direction at some crucial moment. The surface-level gameplay (shoot things quickly and don't get hit) will appear to be all this game has to offer. However, Devil Daggers is deeper than it may appear at first glance. I wasn't lying when I called it a simple game — mechanically, it is simple — but even the simplest mechanics can introduce a layer of strategy.

Movement, spacial awareness, prioritization of targets, and understanding of enemy behavior are all very important, of course, as they are in any decent first-person shooter. Even weapon selection comes into play, as your primary dagger attack can take the form of a shotgun-like blast or a machine-gun-like stream, and limited homing daggers are acquired later on. What sets Devil Daggers apart are a few unusual gameplay mechanics, the most notable of which is somewhat counter-intuitive.

Although it might not be obvious at the start, you won't get far in the game without collecting the red gems dropped by tougher enemies. You'll acquire important power-ups at 10 gems, 70 gems, and (nominally) 220 gems. The catch is that those gems, which disappear after a few seconds, will move away from you whenever you shoot. They'll be attracted to you whenever you're not shooting, but, even then, they might not catch up with you in time, if you're moving away from them at full speed.

In a game with rapidly spawning enemies and infinite ammo, holding your fire and slowing down are exactly the opposites of what you'll want to do. It's easy to forget that the gems are even there, and the difficulty of picking them up increases sharply with the number of enemies on the battlefield; you won't have time for a break when you've got an entire army of demons breathing down your neck. In this way, the gem mechanic serves to punish the player for being unable to keep the battlefield under control. Giant spiders which steal your gems, and towering squid-like spawn points which periodically spit out enemies until destroyed, will have the same effect. When things start to go wrong, it can all fall apart very quickly.

The first step to becoming proficient at the game is recognizing that sound is extremely important. Each enemy makes a unique sound; you can usually hear them as they spawn, even before you can see them, and you'll even have some warning if one of them is approaching from behind. It's easy for some of the more subtle sound effects to be lost in the chaos, but you'll learn to focus on the ones that really matter.

More experienced players will learn to move faster by repeatedly jumping, to maximize shotgun firing rate with the perfect rhythm of click-hold-release, to collect more gems by deliberately leaving some enemy spawn points intact, and to gain more height by shotgun-blasting the ground while jumping (although the practical usefulness of this last maneuver is questionable). Ultimately, however, it seems the key to being the best is to memorize the game (after, of course, mastering aim and movement). You need to know exactly which enemies are in the upcoming wave and exactly how to defeat them most efficiently. The fact that each round is the same, in terms of when each enemy spawns, is arguably the game's greatest flaw. However, if the game were more unpredictable, it would also be a lot more difficult. The best scores would likely be a fraction of what they are.

On the subject of flaws, there are a few "gotchas" in the game's design, namely that homing daggers are acquired at 70 gems but using them will detract from progress toward the next upgrade. Inexperienced players might be unaware of this, because the number of gems acquired and the number of homing daggers remaining are both invisible to the player. But I guess the idea is that, once you're good enough, you won't need those homing daggers and, knowing they're limited, won't use them. Getting the last dagger upgrade would then come naturally, but perhaps not for more trigger-happy players. The fact that you can't see how many gems you have until you're dead is certainly an annoying feature, in any case.

If I could add one feature to the game — leaving all of the existing content intact, of course — I would add some kind of campaign mode. Maybe it's because the game is so reminiscent of Doom, Quake, and other old-school shooters, but it just seems to be begging for one. Besides, one flat arena is too bland an environment for a game with such a wonderful art style.

Okay, so maybe I just want the chance to say I beat Devil Daggers. That would be nice, too. But I also want more from Sorath, even if it's another game I'll never win. In the meantime, Devil Daggers is the perfect game to play when I have only a few minutes of downtime.

Sunday, July 20, 2014

On Killing Thousands of Robots

For the past few months, during my unintended (laziness-induced) hiatus from updating this blog, I've been playing a few different games. I spent some time on Planetside 2, which is fun with friends but isn't something I would ever play without them. I also tried and failed a few more times to make further progress in The Binding of Isaac, whose randomly generated dungeons and mostly unexplained item system are a great source of replayability despite all the frustration that inevitably comes with such a strongly luck-based game.

More importantly, however, I've wasted far too much time playing a game called Hard Reset and also I've fallen back in love/hate with another time-sucker called Ultratron. I didn't expect much, since I didn't pay much — Hard Reset came as part of a $4 bundle from Bundle Stars, and Ultratron came in a $1+ bundle from Humble Bundle — but I've played almost 50 hours of the former and nearly 40 hours of the latter, so I probably got my money's worth.

Hard Reset is a gorgeous first-person shooter with some interesting weapon design, a minimalist heads-up display, and a heavy emphasis on using environmental hazards to destroy the seemingly endless waves of mechanical bad guys. The game was developed by some of the same people who made Painkiller and, like its occult-themed cousin, Hard Reset is often described as an "old-school" shooter — a throwback to the days of Doom and Quake. To some extent, this is accurate. Unlike so many modern video games, this one doesn't try very hard to be a movie. It's not filled with excessive dialogue and exploding set pieces and scripted action sequences. It's non-stop running and gunning all the way through. It's all about challenging the player. It's a real game. It does attempt to tell a story — perhaps it even tries a little too hard — but, just as in Painkiller, it's not a very good story and it should probably be ignored anyway.

Most of the exposition takes place during loading screen cut scenes, drawn and badly animated in the style of a comic book. When you get to one of these loading screens, I suggest that you go and make a sandwich or something. The plot hardly makes any sense, the acting and writing are both profoundly awful, and the protagonist (made immediately ridiculous by a hilariously typical video-game-action-hero voice) was apparently designed by some 12-year-old kid who thinks the unnecessary use of profanity is just the coolest thing ever conceived. For all intents and purposes, Hard Reset doesn't have a plot. It's far more story-driven than Painkiller, but even if you manage to decipher what's going on, you're not going to care in the end.

Where Hard Reset really strays from its old-school shooter roots is in the adoption of some modern gameplay mechanics. If you'll allow one more comparison to Painkiller, I'd like to point out that its demon-slaying protagonist could run circles around almost any enemy... or, more accurately, he could jump circles around any enemy. While running speed was rather slow in Painkiller, the player could accumulate a lot of extra speed by repeatedly jumping. Although this trick was not explained in any tutorial, it was crucial. This high mobility was a staple of Painkiller gameplay, and provided an advantage over the enormous hordes of enemies that would otherwise surround the player. Hard Reset, on the other hand, has painfully slow running speed and no "bunny hopping" ability. Instead, you just get a sprint button which allows a modest boost in speed for only a couple of seconds.

The limited sprinting ability does manage to be useful, but only marginally so. I must stress that "a couple of seconds" is no exaggeration. The protagonist runs out of breath faster than a morbidly obese pack-a-day smoker with one leg. The result is a game that feels maddeningly sluggish to fans of the same fast-paced old-school shooters to which games like Hard Reset and Painkiller draw so many comparisons. The problem is exacerbated by certain enemies whose attacks often seem unavoidable and — I'm convinced — sometimes are. Running at the speed of a tortoise, armed with only two seconds of slightly-faster-than-tortoise sprinting, can be extremely frustrating when you're being bombarded with missiles and you can't think of a way to output enough damage to kill the enemy before his carpet bombing attack kills you.

Even switching to the right gun can be a bit of a chore — a waste of time when there's no time to waste — thanks to the game's interesting but gimmicky weapon system. Most of the first-person shooters of my childhood days would allow the player to carry a totally unrealistic number of weapons (usually the game's entire arsenal) at once for the sake of fun. On the other hand, most  modern shooters limit the player's holding capacity (usually to two or three guns) either for the sake of realism, or for ease of access when using a console gamepad instead of a full keyboard, or for the increased challenge that might be faced by the player when he or she is forced to drop a useful rocket launcher in order to pick up a needed sniper rifle. The weapon system in Hard Reset almost seems like a parody of these modern trends in that, technically, only two guns exist in the entire game.

The player is immediately given an assault rifle and a plasma rifle. The gimmick is that each of these guns can be upgraded with up to four additional weapon modes, and most of these weapon modes have both a primary and a secondary function. So you'll get your shotgun, your grenade launcher, your rocket launcher, your lightning gun, and your big laser canon. You'll even be able to hold them all at once. Unfortunately, all of those functions will be crammed into two weapons, which means you often have to switch to the correct gun and then to the correct firing mode instead of just going directly to the weapon you want. This can be a problem when you need to pull the right weapon quickly, especially since the timely use of stunning weapons on fast enemies is all that compensates for the protagonist's lack of speed.

Despite these issues, Hard Reset is pretty decent. You'll need to adapt to the unusual weapon system, and you'll need to get over the fact that the main character can't run twenty feet without taking a breather, and you'll need to pretend the laughable plot doesn't exist... but none of these are reasons not to play. If there's a reason not to play, it's a lack of patience and an unwillingness to lose a lot before winning. Hard Reset is a rarity in modern times — a truly punishing game whose higher difficulty levels will be deemed impossible by many players.

As for me, it seems I'm a masochist. After starting at the easiest difficulty setting, I decided to work my way up to the hardest. Normal mode all right, Hard mode was frustrating, and Insane mode nearly caused me to smash my computer on numerous occasions. At this level, the game becomes a nightmare. The toughest enemies are bullet sponges, practically unavoidable projectile attacks can kill you in seconds, and you're forced to adopt strategies that weren't necessary before. The use of immobilizing weapons, like stasis grenades and EMP bursts, becomes an absolute necessity, and players who fail to utilize environmental hazards like explosive red barrels will find it difficult to overcome the cruel mathematical problem of dealing enough damage to the enemies before inevitably being shredded to pieces. The infinite waves of little enemies that harass you during boss fights are suddenly a real threat, and they'll kill you as often as the bosses themselves do. Splash damage from explosive weapons will kill you even when you think you're behind cover. When playing the higher difficulty modes, you will die a lot, even if it's not your fault. The game isn't fair.

But I beat it anyway. I kept trying even when I thought it was impossible. I responded to the game's unfair tactics with some unfair tactics of my own. I had an all-out battle of patience and reflexes and wits against a computer and won.

The only problem is that Insane mode isn't actually the highest difficulty. There's one more, called Heroic mode. It's even harder. Worse yet, mid-level checkpoints are removed. You have to beat entire levels without screwing up at all, and the levels are long. Throughout most of Insane mode, I died at least once or twice in every fight, and dozens of times in others.

I think this is where I give up. I don't think I'll ever get through Heroic mode. Even if I'm capable, I just lack the willpower. I've played through the entire game four times and it's no longer fun enough to justify that kind of frustration. And that's okay — I'm fine with that — except that my completion of the game will forever be stuck at 98%. There are just two achievements left: one for beating Heroic mode and then, stupidly, another achievement for unlocking all achievements.


It's just so close that I can't not be annoyed.

I don't usually care much about achievements. Some people can't get enough of them, and some people absolutely despise them. Most of the time, I'm indifferent. Optional challenges are great, as long as they're actually fun, and whether those optional challenges come in the form of "achievements" or some other functionally equivalent feature with a less silly name is irrelevant. If I play all the way through a game and I want to play it some more, the additional challenges are something worth considering. Sometimes I decide to ignore them.

But that's hard to do when I've already done all but a couple of them. It's not even about the pride of reaching 100% completion; it's about leaving things unfinished. It's about the fact that achievements on Steam are a permanent record that I have to see whenever I look at the game in my library, even if it's not installed. It's about something being so close to perfection and not being perfected. As far as I'm concerned, 0% is just as good as 100%, but numbers like 1% and 99% are the worst.

I have a similar issue with Ultratron, the other beautiful, chaotic, punishing, evil-robot-themed game I've been playing recently. If you understand that the title is a reference to Robotron: 2084, you probably already know that this one isn't a first-person shooter. Ultratron is a top-down arena shoot-em-up with highly stylized faux retro graphics and a multitude of ridiculous power-ups. Much like Titan Attacks, the over-the-top Space Invaders clone made by the same developer, Ultratron starts out slow and then gradually becomes an unforgiving hell of colorful projectiles and flashy explosions. And it's more addictive than heroin.

I loved Titan Attacks so much that I played it until I had all the achievements unlocked. I thought I loved Ultratron that much too, but a few of the achievements are just stupidly difficult. Once you're past a certain point, the game becomes extremely intense, and you only get a checkpoint every ten levels — after, not before, each boss. Worse yet, some of the most challenging achievements require a certain number of kills, and the counter resets to zero if you start playing from a checkpoint. If you want the game to count your 10,000 kills, you'll have to get them all in a single playthrough without ever dying. It doesn't have to be all in one sitting, since you can save at any time, but that save disappears after it's loaded. Saving is for taking breaks, not for backing up your progress.

I got fed up with Ultratron after a while, and stopped playing it for months, but I'm back at it again. I told myself I was just going to play a few rounds, but now I'm looking at those last few achievements and saying "yeah, I can totally do that." And I probably can't, but 94% is so close to 100% that it's hard not to try. I should also note that we're not really dealing with additional challenges, in this case, since Ultratron is one of those arcade-style game that goes on as long as you can keep winning. The game doesn't have a real "ending" so the completion of achievements is really the only form of "winning" there is.

Sure, it's silly to be so irritated by falling short of 100% completion, but at least I have the sense to know I'm being silly. At least I'm not so determined that I'm willing to keep playing these games past the point where they stop being enjoyable. When I wanted to unlock the last few achievements in L.A. Noire, just for the sake of neatly wrapping up a fairly enjoyable game, I just used a walkthrough for those idiotic scavenger hunt achievements (Star Map, Auto Fanatic, and Hollywoodland) because doing it myself would have taken so long that I would have hated the game by the time I was done with it.

Not everything can be helped with a walkthrough, though. So should I try to beat Ultratron? Should I bother to clear that last hurdle in Hard Reset? Surely I've blown up more than enough robots this year, with a combined 85 hours in these two games alone (plus whatever uncounted hours I spent playing them with Steam in offline mode). I guess the answer is "maybe someday."

Or maybe I'll just use Steam Achievement Manager — a tool whose use I never understood before now — to unlock these practically impossible achievements just so I'm not tempted to waste endless hours actually attempting them. Trying to master everything I play is exactly why I'll never get through my backlog.