Monday, July 25, 2011

Review: Descent II (PC)

Descent II was released in 1996 and developed by Parallax Software. The game is the direct sequel to Descent which was released a year earlier and like its predecessor it is a six-degree-of-freedom flight combat game set in underground mines.

While on a quick look the game looks almost identical to its predecessor, differences in level design and a few new gadgets change the gameplay and flow a good bit. The first noticeable change are the new weapons, next to the basic laser, vulcan, spread, plasma and fusion weapons there are now essentially more powerful versions of each of those. The the gauss canon shoots explosive projectiles, the helix cannon has a bigger spread then the spread canon, the phoenix shoots reflect on walls and the omega weapon shoots kind of a lightning beam. The missiles got extended as well, next to the concussion, homing, smart and mega missiles are now flash missiles, which can blind players and enemies, guided missiles, which can be remote controlled by the player and earthshaker missiles, which provides a earth shaking explosion. The bombs get extended with super bombs, which explode into numerous projectiles.

The new non-weapon items include a set of headlights, that lights up the environment, but uses energy and an afterburner, that provides a quick boost for the players spaceship. The classic flares are still present. The most significant new item in Descent II is probably the guide bot, this little helper, which has to be found and freed at the start of each level, provides an invaluable navigation help. It is able to find energy centers, shield bonuses, hostages and mostly importantly the next needed key. The way it flies around and beeps gives it a very cutesy robot feel, somewhat similar to R2D2.

The enemies in the game are all new, but follow mostly similar design to what was present in the predecessor. The most notable change is that the enemies with homing missiles and vulcan cannons are now a good bit weaker, reducing the frustration they causes in the first Descent. The game however does add a few new annoying enemies types of its own, namely some of the bigger enemies break up into smaller ones on destruction, that are rather fast and hard to hit. The game also adds a special kind of enemy, the thief, this enemy is essentially an evil version of the guide bot. Like the guide bot it will follow you around the labyrinth like levels, but unlike the guide bot, it's not there to help you, but to steal items from you. The thief is extremely fast and will retret on an attack, thus he is extremely hard to hit and kill, which makes it all the more satisfying if one can lure him into a bomb trap.

The level design in Descent II is substantially more complex then in Descent, while the levels are still build up out of a series of deformed cubes, Descent II rarely uses just a single series of cubes to build a corridor, instead it frequently uses multiple cubes side by side to build a wider corridor with beveled edges. The levels are also a good bit more open and less claustrophobic. Descent II also adds some new elements to the level structure itself, while finding the blue, yellow and red keys still form the central part of a levels progression, the game adds plenty of switches, force fields and secret passages that are sometimes used to make progress, even with the help of the guide bot, a little less obvious. Light sources within a level are now destructible once shot.

The auto level functions continues to have the same problems as in the first Descent, namely it tries to align you to the walls of the cube you are in, not any kind of logical horizon of the room you are in. This in combination with the more complex room layout causes much more frustration then it did in the previous title as some rooms become essentially impossible to navigate properly as the ship will constantly try to rotate and thus it becomes more a fight with the controls then a fight with the enemies.

Overall Descent II is again, like its predecessor and its successor Descent 3, a bit of a mixed bag. The core gameplay is still as entertaining as ever and some of the new items make very welcome additions. The guide bot provides invaluable navigation help and makes traversing the levels much simpler without feeling like a cheap cheat and the afterburner makes an essential tool when it comes to dodging enemy homing missiles, as it allows you to cut them short and circle behind the enemies. The thief enemy also leads to some very exciting chases through the mazes and might require some planing and trap building to catch him. It is a type of enemy that I haven't really seen in any other games. Other additions like the new weapons however feel in large part kind of useless, as you simply end up with to many weapons and in turn don't bother to ever use most of them. The boss difficulty, again, is completely insane and the game also has more boss enemies then the previous part, leading to a lot of frustration and load and save cycles. The limited number of lives is still present, but like before won't really matter as load and save will keep take care of the retries.

Having more hidden things in levels is a welcome addition, but the puzzles that slow down the level progress can be a bit annoying, they are also largely build around trial and error, as the game doesn't really provide hints as to where a switch for a force field might be or what wall a switch might have opened up. The guide bot won't help in those situations, as he will simply respond with a "Can't reach XY" when a switch puzzle has to be solved before progressing. Switches are furthermore not marked on the auto-map, so finding them in the first place can often be a little tricky.

The more complex level design also isn't really a change for the better, as frequently they simply look a little ugly. The restriction to basic cubes in the first Descent meant that the levels could be navigated smoothly, the levels here often have you bump into corners and edges as the structure is less regular. Essentially the level end up feeling a little to random and don't really have the same flow as previously.

In the end the core problem with Descent II is that the longer you play it, the more annoying it gets. The first few levels are a ton of fun, but once you reached the last few you just want to get done with it, as the more difficult enemies and enemy placement spoils the flow of the game and leads to quicksaving at basically every corner.

As for what is the best game in the series, that's hard to tell, all of them have their great parts, but also their really frustrating ones. The first seven levels of the first Descent, the one from the shareware version, are probably the best Descent out there.

Wednesday, July 20, 2011

xboxdrv 0.8.1 released

  • added const axis and button filter
  • added 'generic-usb' controller type for debugging
  • added cycle-key support to cycle through a sequence of buttons
  • added proper merging of multiple output events to the same target
  • added support for Street Fighter IV fightpad
  • added support for Tron Xbox 360 controller
  • added support for an unlimited number shift buttons
  • fixed axis-shift getting ignored when another button is pressed
  • fixed keys not getting pressed in --ui-axismap
  • fixed rumble messages getting delayed
  • reenabled --priority realtime

Monday, July 18, 2011

Review: Half Life 2: Episode Two (PC)

Half Life: Episode Two was released in 2007, almost three years after the original Half Life 2 and marks the thus far last entry into the Half Life series and probably the end of Valves try to move the game into an episodic format. The gameplay is mostly the same as in the two previous entries in the series and continues to follow the route of the linear first person shooter.

After a short cutscene, giving an overview about what happened in the last game, Episode Two starts out exactly where the last game has ended. The big explosion has derailed and destroyed the train and the first job is to get out of the rubble once again. After reacquiring the gravity gun, Alyx and Gordon try to make their way to the rebel base. The story unlike the previous episodes, takes a few interesting twist and turns and has a greater sense of purpose and goals. Alyx is again the companion for most of the game, but a small part of the game a Vortigaunt will be there to help.

The scenarios in Episode Two also makes a change for the better, while the beginning will be spend in a rather ugly mine, much of the later parts plays completely outdoors in bright daylight. The vehicle sections also make a return, so much of the later game will be spend driving around in those lush outdoor forest environments.

Combat in Episode Two also feels quite different, as it is a lot more intense then the combat in Episode One. A lot of time will be spend fighting well equipped Combines instead of the rather slow and weak zombies of the previous game. The game also introduces a new enemy type, the Hunter, which are essentially mini-Strider that take a good many hits to take down. Fights against regular Striders and airships are present as well.

Overall I enjoyed Episode Two a lot more then Episode One. While the game is still mostly build around the exact same gameplay known from the original Half Life 2, by then three year old, it does at least provide new environments and a reasonable story to make the journey interesting, something completely absent in Episode One. The more intense and difficult fighting is a welcome change. In a few sections the game also goes over into a base defense game, which removes the simplicity and predictability of the otherwise linear combat. The game can at times get a little chaotic and frustrating, but it pays of in a much more entertaining experience.

That said, the game isn't without problems, three years after the original game one might expect a little more then just five hours of more of the same, but that's pretty much was this game provides. The story still doesn't really go anywhere and mostly just cleans up some stuff left open in the previous games. My personal pet peeves with the Half Life 2 series are also all still present. The headcrabs still look like roasted chicken and the zombies just look like dudes with a paper bag over their head, not something that is remotely scary, just something that looks funny and odd. Gordon still is a bodyless camera that doesn't interact with its environment and will for example glide straight through Alyx when he wants to get into the car from the wrong side. The NPCs are also all rather flat and one sided as they seem to be doing nothing beside admiring Gordon whenever he walks by.

The gravity gun also still feels just the same, grabbing objects works reasonably fine, but having grabbed objects collide with the environment just feels glitchy. One could certainly do a better job then just having the physics engine glitch around in those situations. Another big, still unsolved issue, is that grabbing objects block your view, which makes aiming at enemies much harder then it should be and most of the time its a bit of a game of luck. A little change in perspective or how Gordon holds objects could go a long way.

Driving cars around also doesn't feel great. The steering is overly sensitive and it is way to easy to accidentally get off the road and ram into a tree or rubble pile at the side of the road that will make the car do all kinds of weird stuff. Driving is also badly adapted to the gamepad, as acceleration and steering will be done both with the left stick, instead of having acceleration on the triggers like in almost any other game. This adds some more wobbliness to the already not so great driving mechanics.

In the end, it is a fun game that provides more of the good parts of Half Life 2 in a new setting with a reasonably interesting story to take you along and in turn is much more enjoyable then Episode One. It doesn't reinvent the wheel and maybe at this time it should have tried a little harder do to something new, but it's still fun enough for what it is.

Monday, July 11, 2011

Review: Half Life 2: Episode One (PC)

Half Life 2: Episode One was developed by Valve and released in 2006, around one and a half year after previous game Half Life 2. It was Valves failed attempt to turn the Half Life franchise into an episodic format, as only another episode would follow before the series went into hiatus in 2007. Episode One is like its predecessor a classic first person shooter, the gameplay is pretty much unchanged, while the graphics have gotten a little upgrade. The story picks up mere seconds after the inconclusive end of the previous game. The player plays again as mute scientist Gordon Freeman.

The game starts out with the big explosion at the Citadel in City 17, the Vortigaunts intervene and rescue Alyx and Gordon Freeman, who then try to make it back into the Citadel to stop its core from exploding. This part of the game plays very similar to the ending of the previous one. Gordon's gravity gun gets super charged again and much time in the Citadel is spending shooting energy orbs into receptacles to activate bridges and other machinery. Once out of the Citadel both Alyx and Gordon have to make it through a bunch of dark underground passages. In these passages there is essentially no light and the only source of illumination is Gordon's flashlight, which happens to be constantly short on battery power. Once out of the darkness the rest of the games takes place overground in City 17 where ultimately the city is abandoned and the remaining humans are trying to leave the city by train.

The core gameplay is taken essentially unchanged from its predecessor and contains all the old issues. Running around in the world still feels overly smooth, like gliding on ice, not like a realistic walking human. The player character still has no 3D model and is just a floating camera, which especially in a scene right at the beginning where he is sitting in a car just looks a little ridiculous. This also makes some of the jumping parts of the game a little more annoying then they should be, as its hard to judge how close the player is to an edge when there is neither feed nor shadow to provide any reference. Interaction with NPC is again non-existent. Alyx follows the player around through essentially the whole game this time and while she can die, in theory, in practice she is almost invulnerable and provides plenty of supporting firepower. New weapon are not provided as far as I can tell and the environments all look pretty much exactly the same as in the previous games. Aside from the mentioned 'energy orb into receptacle' puzzle, the game also has a few physic based puzzles again that have the player place stuff on or under a seesaw to be able to reach the other end. None of those however feel interesting or clever.

In terms of controls the game supports gamepads more or less out of the box, the support, while playable, feels however rather rough. The few tutorial messages on the HUD still mention the keyboard keys, not the gamepad buttons. The zoom is done by clicking and holding the right stick, which is extremely uncomfortable and should have been a toggle instead (can be worked around by using XPadder). The weapon switching feels extremely bugged, it comes in three forms, a HUD-less quick switch, a pie menu and a menu at the top of the screen. Switching between the quick select and the menu is possible via the option menu, which kind of menu the player gets however seemed rather random, one is intended for the gamepad and one for the keyboard, but a few times when configuring things I ended up with the keyboard one on the gamepad. The game also had a huge issue where not all of the weapons would be selectable via the dpad menu, instead I only could select weapons from the first four groups, with the rocket launcher and grenade, even so collected, not available in the menu at all. After the game crash and I had to restart it, Steam started to download a patch, and after that the problem was gone and the rocket launcher would be displayed in the dpad menu. Not sure if the patch or restarting the game was the cure and neither am I sure what kind of patch Steam even downloaded, as the copy of the game itself was just freshly downloaded itself and I would hope Steam would download the latest one, not an old unpatched one, but anyway, after being first rather confused why the rocket launcher would just disappear I could finish th game.

Overall it is a tolerable game, but it feels incredible boring and uninspired. Essentially everything the player has to do in the game, he has already seen in Half Life 2. All the puzzles feel recycled, the weapon are recycled and the environments are all recycled as well. There is literally nothing of interest here that one hasn't already seen in Half Life 2. And the only new thing are the dark sections of the game, however those are also the most annoying due to the tiny cone of light and limited battery and don't contain anything interesting other then being extremely dark. In terms of story the game is also rather mediocre, as hardly anything of interest happens. It's essentially just an act of running from the Citadel to the train station to then escape with a train. The ending is also just as inconclusive as the previous game, fading to the credits after the Citadel explodes. Level design stays extremely linear, leaving even less freedom then in the previous game. Vehicle sections are absent and the game can be finished in around five hours. Also didn't like the characterization of Alyx much, as she ended up looked more like a Gordon Freedom groupie then a colleague or friend.

It's essentially more Half Life 2, but without having the bonus of being something new and so everything ends up feeling recycled and a little tedious.

Monday, July 04, 2011

Forcing fullscreen in Linux for apps that don't support it properly, Part 3

I switched the window capture tool described in the last blog post now to plain Xlib, this solves most of the issues I had with keyboard focus and makes the program mostly working. Haven't figured out how to properly pass events, such as key presses/releases I receive in the main window to the captured child window, I suppose XSendEvent() will do that and it works with a plain xev, but it fails for some other applications I have tried.

Source code for the tools is now available from:
It's still all rough and experimental, so source customization might be needed to make use of some of those tools.

Sunday, July 03, 2011

Forcing fullscreen in Linux for apps that don't support it properly, Part 2

How to force a window into fullscreen mode via xrandr and override_redirect was explained somewhat in the last blog past. That method however has limitations, it expects the window to be of the right size and aspect ratio and that you actually can switch to a fitting resolution with xrandr. Not to big a problem with your average 800x600, but some uneven resolutions such as 960x600 (320x200 with a 3x scaler) can often give trouble, either not being supported at all or displayed incorrectly on a LCD.

How to fix the situation in theory is easy, you pick the closed resolution to the target, move the window into the center of the screen, instead of the the top left and just display a black border around the window to get a letter boxed view. Implementing that in practice is a little more complicated, as getting two windows above the panel and into the right order is a little ugly.

There is however a nice way to handle the situation, you can have one XWindow essentially swallow another XWindow. This works via XReparentWindow() or in PyGtk terms with gtk.gdk.window_foreign_new(), to get a GdkWindow from a WindowId, and then with a gdk.Window.reparent() call. That way one ends up with a window containing the other application and that window can be resized or fullscreen like a regular window, so it is very simple to get it where one wants it to have.

There are still some unsolved bits left: I haven't yet managed to give the swallowed window keyboard focus, in only receives mouse events. Not sure if that is something that can be fixed via PyGtk or if I have to switch to more low level Xlib coding.

Another more simple alternative solution that I haven't played with: One can launch a child Xwindow server, such as Xephyr, set a X11 background color, start the application in that. All that without a window manager, so one would just need to position the window properly in the server. That would however not be as flexible and Xephyr can't do window resize right now.

GtkPlug and GtkSocket are another alternative, they are, in theory, build to handle this window swallowing in a nice wrappered up GtkWidget form, but so far I didn't had much success in actually using them, as they fail for exactly the same reason as gdk_window_foreign_new() is causing trouble.

Saturday, July 02, 2011

Review: Garshasp: The Monster Slayer (PC)

Garshasp: The Monster Slayer was developed by Dead Mage Inc. and released in 2011. The game is notable for being developed by an Iranian development team using some Free Software such as Ogre or OpenAL. In the game, set in persian mythology, the player takes the role of Garshasp, a warrior who goes on a journey to take revenge for his fallen brother. The gameplay takes some strong influence from the God of War series and follows most of its basic game mechanics.

As in God of War the game is presented from a zoomed out third person camera view and the player has to hack its way through hoards of monsters and boss enemies. The camera is automatically controlled and the second analog stick is used for dodging. Light and heavy attacks are available and can be chained together or used to trigger special attacks. Certain types of enemies also require a finishing move that is done via a short quicktime sequence. Whenever there is an enemy encounters the environment will be closed up, either by doors or fire walls that block the player, defeating the enemies opens them up again. Pedestals are provided between every few fights to let the player refresh his health or collect experience points, which in turn unlock new special moves.

Progress through the levels is very linear and consists of mostly monster fighting, but is at times interrupted for a little switch puzzle or a short platform sequence. The game also contains a few race sequences where the hero slides down a wall and has to dodge obstacles along the way. Every now and then the game interrupts for a short little cutscene, those transitions between one scenario to the next, but do little to add much story. In essence the game really plays a lot like God of War, taking almost every mechanic straight from it. Some other reviews have compared it to Prince of Persia, but I really haven't seen any similarities with those, the hero looks a little like the prince in PoP: Warrior Within, but the game contains only very limited platforming that is pretty much exactly like God of War and nothing like the elaborate jumping sequences in a Prince of Persia game.

Graphically the game can't compete with modern blockbuster titles on a technical side of things, but looks none the less artistically quite nice, not to far away from the God of War it tries to imitate. It suffers however from a few technical issues, such as object and scenary pop-in or stuttering framerate when things get loaded from disk. While some animation look a little lacking or badly paced, such as the jumping and ladder climbing, and can make it a little tricky to get through the platforming sequences, the core of the game, the fighting, is animated extremely well, providing a wide varity of moves, combinations and different finishing moves for the different enemy types. The animations also deserve some praise for being very easy to read, thus blocking or dodging an incoming attack is very manageable.

One aspect that is rather lacking in the game is the tutorial, it lacks proper button prompts and only gives you the name of the action, which makes it hard to figure out which button on the gamepad to press. Explanation on the fighting is also lacking, while special moves are announced while unlocked, the tutorial doesn't explain much about the core fighting itself. It also doesn't explain very well how the upgrade system works, its mostly automatic anyway, so its not much of a practical, but it took a bit longer then I liked to figure out what all the bars in the HUD mean.

Overall I was pleasantly surprised by the game. While it is rather rough on the technical side of things, especially the loading hick ups where a bit annoying, it looks and plays surprisingly well. The enemy moves are easy to read and counter and all the boss enemies have some clear strategy to defeating them, thus combat wasn't just about button mashing, but actually figuring out proper strategies.

On the artistic side of things the game was a bit of a disappointment, while the scenarios, enemies and animations look nice, they also look a little generic, like a low budget western game, not something different with a lot of influence from a different culture. This is quite different then what you see from many Russian games for example, which, while also technically often riddled with issues, go frequently a very different directions when it comes to style and gameplay then the mainstream western games, which makes them much less accessible, but also much more interesting. Garshasp on the other side lacks those qualities and is really nothing more then a God of War clone, it is a quite solid one at that, but it really doesn't do anything extraordinary or noteworthy beside that. The story in the game is also rather flat, lacking a proper introduction of the characters or a real ending, it's essentially just a "brother gets killed, Garshasp goes for revenge, Garshasp succeeds with revenge, goes on to fight more stuff in cliffhanger ending opening potential for a sequel".

It's worth to note that the game is also unusually short, unlike other games in this genre that at least reach the 6 or 8 hour mark, Garshasp is just around 3.5 hours long, which given its low price point seems fine (as of this writing the game sells for $2.50 on Steam), but still gives the game, especially with its open ending, a bit of an episodic feel, without the game actually being planed or marketed as an episodic game.

Technical notes: The game complains about crashing Flashplayer installer on startup, I worked around that by replacing the Flash installer in its redist/ directory with a newer one. The game for me also crashed at startup, a problem I could solve by uninstalling the old PhysX I had on the system and using the one provided by the game instead.